diff --git a/.github/workflows/compile.yml b/.github/workflows/compile.yml index ec1dc9a..da7a6d5 100644 --- a/.github/workflows/compile.yml +++ b/.github/workflows/compile.yml @@ -2,37 +2,38 @@ name: CI on: push: - branches: + branches: - master - paths: - - '**/*.sp' - - '**/*.inc' - - '**/update.txt' - - '**/compile.yml' - - 'prepare-publish.ps1' + paths: + - "**/*.sp" + - "**/*.inc" + - "**/update.txt" + - "**/compile.yml" + - "prepare-publish.ps1" pull_request: jobs: build: runs-on: ubuntu-latest steps: - - name: Checkout code - uses: actions/checkout@v2 - - name: Setup SourcePawn Compiler - uses: rumblefrog/setup-sp@v1.0.1 - with: - version: '1.10.x' - - name: Prepare publish - run: | - pwsh prepare-publish.ps1 - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - # Artifact name - name: ftp-files - # Directory containing files to upload - path: dist/ftp/ - + - name: Checkout code + uses: actions/checkout@v3 + - name: Setup SourcePawn Compiler + uses: rumblefrog/setup-sp@v1.2.4 + with: + version: "1.12.x" + + - name: Prepare publish + run: | + pwsh prepare-publish.ps1 + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + # Artifact name + name: ftp-files + # Directory containing files to upload + path: dist/ftp/ + publish: if: github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && github.repository == 'F2/F2s-sourcemod-plugins' needs: build @@ -59,13 +60,13 @@ jobs: const path = require('path'); const baseDir = "ftp"; const data = fs.readFileSync(path.join(baseDir, "f2-sourcemod-plugins.zip")); - + const d = new Date(); const dateString = d.getUTCFullYear() + ("0" + (d.getUTCMonth()+1)).slice(-2) + ("0" + d.getUTCDate()).slice(-2); - + const entries = fs.readdirSync(baseDir, { withFileTypes: true }); let body = '| plugin | version |\n'; body += '| -- | -- |\n'; @@ -86,7 +87,7 @@ jobs: tag_name: dateString + "-" + d.getTime(), body: body, }); - + github.rest.repos.uploadReleaseAsset({ owner: "F2", repo: "F2s-sourcemod-plugins", diff --git a/.gitignore b/.gitignore index 4e76d76..887ed42 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,5 @@ private-* *.ps1 !setup.ps1 !prepare-publish.ps1 -!compile.ps1 \ No newline at end of file +!compile.ps1 +!keyvalues-parser.ps1 \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..65b5aff --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["sarrus.sourcepawn-vscode"] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..977e96c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,105 @@ +{ + "editor.formatOnSave": false, + "sourcepawn.formatterSettings": [ + "AlignAfterOpenBracket: Align", + "AlignArrayOfStructures: Left", + "AlignConsecutiveAssignments: AcrossEmptyLinesAndComments", + "AlignConsecutiveBitFields: AcrossEmptyLinesAndComments", + "AlignConsecutiveDeclarations: AcrossEmptyLinesAndComments", + "AlignConsecutiveMacros: AcrossEmptyLinesAndComments", + "AlignEscapedNewlines: Left", + "AlignOperands: AlignAfterOperator", + "AlignTrailingComments: true", + "AllowAllArgumentsOnNextLine: true", + "AllowAllConstructorInitializersOnNextLine: true", + "AllowAllParametersOfDeclarationOnNextLine: true", + "AllowShortBlocksOnASingleLine: Always", + "AllowShortCaseLabelsOnASingleLine: true", + "AllowShortEnumsOnASingleLine: true", + "AllowShortFunctionsOnASingleLine: All", + "AllowShortIfStatementsOnASingleLine: AllIfsAndElse", + "AllowShortLambdasOnASingleLine: All", + "AllowShortLoopsOnASingleLine: false", + "AlwaysBreakAfterDefinitionReturnType: None", + "AlwaysBreakAfterReturnType: None", + "AlwaysBreakBeforeMultilineStrings: false", + "AlwaysBreakTemplateDeclarations: No", + "BasedOnStyle: Google", + "BinPackArguments: true", + "BinPackParameters: true", + "BreakBeforeBinaryOperators: NonAssignment", + "BreakBeforeBraces: Custom", + "BraceWrapping: { AfterCaseLabel: true", + "AfterClass: true", + "AfterControlStatement: Never", + "AfterEnum: true", + "AfterExternBlock: true", + "AfterFunction: false", + "AfterNamespace: true", + "AfterObjCDeclaration: false", + "AfterStruct: true", + "AfterUnion: true", + "BeforeCatch: true", + "BeforeElse: false", + "BeforeLambdaBody: true", + "BeforeWhile: true", + "IndentBraces: false", + "SplitEmptyFunction: false", + "SplitEmptyNamespace: false", + "SplitEmptyRecord: false }", + "BreakBeforeConceptDeclarations: false", + "BreakBeforeTernaryOperators: true", + "BreakConstructorInitializers: AfterColon", + "BreakInheritanceList: AfterComma", + "BreakStringLiterals: false", + "ColumnLimit: 0", + "CompactNamespaces: true", + "ConstructorInitializerAllOnOneLineOrOnePerLine: true", + "ConstructorInitializerIndentWidth: ${TabSize}", + "ContinuationIndentWidth: ${TabSize}", + "Cpp11BracedListStyle: false", + "EmptyLineBeforeAccessModifier: LogicalBlock", + "FixNamespaceComments: true", + "IncludeBlocks: Preserve", + "IndentAccessModifiers: false", + "IndentCaseBlocks: false", + "IndentCaseLabels: true", + "IndentExternBlock: Indent", + "IndentGotoLabels: false", + "IndentPPDirectives: BeforeHash", + "IndentRequires: true", + "IndentWidth: ${TabSize}", + "IndentWrappedFunctionNames: true", + "LambdaBodyIndentation: OuterScope", + "Language: Cpp", + "MaxEmptyLinesToKeep: 1", + "NamespaceIndentation: All", + "ObjCBinPackProtocolList: Always", + "ObjCBreakBeforeNestedBlockParam: false", + "ObjCSpaceBeforeProtocolList: false", + "ReflowComments: true", + "SortIncludes: Never", + "SpaceAfterCStyleCast: false", + "SpaceAfterLogicalNot: false", + "SpaceBeforeAssignmentOperators: true", + "SpaceBeforeCaseColon: false", + "SpaceBeforeCpp11BracedList: false", + "SpaceBeforeCtorInitializerColon: true", + "SpaceBeforeInheritanceColon: true", + "SpaceBeforeParens: ControlStatementsExceptControlMacros", + "SpaceBeforeRangeBasedForLoopColon: true", + "SpaceBeforeSquareBrackets: false", + "SpaceInEmptyBlock: false", + "SpaceInEmptyParentheses: false", + "SpacesBeforeTrailingComments: 1", + "SpacesInConditionalStatement: false", + "SpacesInContainerLiterals: true", + "SpacesInCStyleCastParentheses: false", + "SpacesInParentheses: false", + "SpacesInSquareBrackets: false", + "Standard: Auto", + "TabWidth: ${TabSize}", + "UseTab: ForContinuationAndIndentation", + "CommentPragmas: '^#define|#tryinclude'" + ] +} diff --git a/README.md b/README.md index 085aa82..7a0f37f 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ F2's SourceMod plugins for competitive Team Fortress 2. Download all plugins in a zip file here: -### Medic Stats +### Medic Stats - Logs buff heals (~95% accurate) - Logs average time to build über @@ -16,7 +16,7 @@ Download all plugins in a zip file here: +### Supplemental Stats 2 - Logs damage and real damage per weapon - Logs damage taken @@ -53,23 +53,23 @@ Download all plugins in a zip file here: +### ClassWarning - In ETF2L, class limits are not enforced by the server. This plugin warns players in chat if they are breaking the class limit (see [screenshot](https://sourcemod.krus.dk/classwarning.jpg)). -### RecordSTV +### RecordSTV - When a match starts, it starts recording a STV demo - When the match ends, it stops the recording - Set up the path and the filenames of the demos with cvars: **recordstv_path** and **recordstv_filename** - In both cvars you can use several placeholders. See the description of recordstv_filename for the full list of placeholders. -### WaitForSTV +### WaitForSTV - Waits up to 90 seconds when changing map - Doesn't wait more time than necessary -### AFK +### AFK - If a player is AFK in warmup, it shows [a warning](https://sourcemod.krus.dk/afk-1.jpg) to all players on their team - If both teams ready up and there is an AFK player, it shows [a warning](https://sourcemod.krus.dk/afk-2.jpg) to the person's team @@ -77,11 +77,12 @@ Download all plugins in a zip file here: -- Restores a player's score on the scoreboard when he reconnects +- Restores a player's score on the scoreboard when they reconnect ### FixStvSlot - Changes the map on server start to avoid a crash related to STV slot +- Automatically changes the level when STV is enabled, allowing the bot to join. ## Automatic updates @@ -94,6 +95,7 @@ For building a plugin locally, run these commands in Powershell 6+: ```powershell git clone https://github.com/F2/F2s-sourcemod-plugins.git cd F2s-sourcemod-plugins +pwsh # Start powershell if you are not already in a powershell terminal ./setup.ps1 compile logstf diff --git a/afk/afk.inc b/afk/afk.inc index f4d0800..9a96afe 100644 --- a/afk/afk.inc +++ b/afk/afk.inc @@ -1,4 +1,4 @@ -public SharedPlugin:__pl_afk = +public SharedPlugin __pl_afk = { name = "afk", file = "afk.smx", @@ -10,12 +10,12 @@ public SharedPlugin:__pl_afk = }; #if !defined REQUIRE_PLUGIN -public __pl_afk_SetNTVOptional() +public void __pl_afk_SetNTVOptional() { MarkNativeAsOptional("IsPlayerAFK"); } #endif -native bool:IsPlayerAFK(client); +native bool IsPlayerAFK(int client); -forward OnAfkStateChanged(client, bool:afk); \ No newline at end of file +forward void OnAfkStateChanged(int client, bool afk); \ No newline at end of file diff --git a/afk/afk.sp b/afk/afk.sp index 0c52dc1..f9c2603 100644 --- a/afk/afk.sp +++ b/afk/afk.sp @@ -16,9 +16,15 @@ Release notes: ---- 1.1.1 (23/04/2023) ---- - Internal updates + +---- 1.1.2 (09/07/2025) ---- +- Updated code to be compatible with SourceMod 1.12 + + */ #pragma semicolon 1 +#pragma newdecls required #include #include @@ -27,13 +33,11 @@ Release notes: #undef REQUIRE_PLUGIN #include - -#define PLUGIN_VERSION "1.1.1" -#define UPDATE_URL "http://sourcemod.krus.dk/afk/update.txt" - +#define PLUGIN_VERSION "1.1.2" +#define UPDATE_URL "https://sourcemod.krus.dk/afk/update.txt" -public Plugin:myinfo = { +public Plugin myinfo = { name = "AFK Detector", author = "F2", description = "Shows which players are AFK in warmup", @@ -47,48 +51,47 @@ public Plugin:myinfo = { #define TIMERINTERVAL 0.5 +bool g_bEnabled = false; -new bool:g_bEnabled = false; - -new Float:g_fLastAngles[MAXPLAYERS+1][3]; -new Float:g_fAfkTime[MAXPLAYERS+1]; -new Handle:g_hTimerCheck = INVALID_HANDLE; -new Float:g_fLastCheck; -new bool:g_bIsAfk[MAXPLAYERS+1]; +float g_fLastAngles[MAXPLAYERS + 1][3]; +float g_fAfkTime[MAXPLAYERS + 1]; +Handle g_hTimerCheck = null; +float g_fLastCheck; +bool g_bIsAfk[MAXPLAYERS + 1]; Handle g_hHud[4]; -new Handle:g_hCvarMaxAfkTime, Handle:g_hCvarMinPlayers; -new Float:g_fMaxAfkTime; -new g_iMinPlayers; - -new Handle:g_hOnAfkStateChanged; // public OnAfkStateChanged(client, bool:afk) { +ConVar g_hCvarMaxAfkTime; +ConVar g_hCvarMinPlayers; +float g_fMaxAfkTime; +int g_iMinPlayers; +GlobalForward g_hOnAfkStateChanged; // public void OnAfkStateChanged(int client, bool afk) { -public OnPluginStart() { +public void OnPluginStart() { // Set up auto updater if (LibraryExists("updater")) Updater_AddPlugin(UPDATE_URL); - + g_hOnAfkStateChanged = CreateGlobalForward("OnAfkStateChanged", ET_Ignore, Param_Cell, Param_Cell); - + g_hCvarMaxAfkTime = CreateConVar("afk_time", "20", "Number of seconds you can stand still before being marked as AFK.", FCVAR_NONE, true, 5.0); - g_fMaxAfkTime = GetConVarFloat(g_hCvarMaxAfkTime); + g_fMaxAfkTime = g_hCvarMaxAfkTime.FloatValue; HookConVarChange(g_hCvarMaxAfkTime, CvarChange_MaxAfkTime); - + g_hCvarMinPlayers = CreateConVar("afk_minplayers", "8", "Minimum number of players on the server before the plugin is active.", FCVAR_NONE); - g_iMinPlayers = GetConVarInt(g_hCvarMinPlayers); + g_iMinPlayers = g_hCvarMinPlayers.IntValue; HookConVarChange(g_hCvarMinPlayers, CvarChange_MinPlayers); - - g_hHud[TFTeam_Blue] = _:CreateHudSynchronizer(); - g_hHud[TFTeam_Red] = _:CreateHudSynchronizer(); - + + g_hHud[TFTeam_Blue] = CreateHudSynchronizer(); + g_hHud[TFTeam_Red] = CreateHudSynchronizer(); + // Match.inc Match_OnPluginStart(); - + // Simulate a map start OnMapStart(); - + // Start the plugin EnablePlugin(); } @@ -97,28 +100,28 @@ public void OnPluginEnd() { DisablePlugin(); } -public APLRes:AskPluginLoad2(Handle:myself, bool:late, String:error[], err_max) { +public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max) { CreateNative("IsPlayerAFK", Native_IsPlayerAFK); RegPluginLibrary("afk"); return APLRes_Success; } -public Native_IsPlayerAFK(Handle:plugin, numParams) { +public any Native_IsPlayerAFK(Handle plugin, int numParams) { if (!g_bEnabled) - return _:false; - - new client = GetNativeCell(1); - return _:IsPlayerAFK(client); + return false; + + int client = GetNativeCell(1); + return IsPlayerAFK(client); } -public OnMapStart() { +public void OnMapStart() { Match_OnMapStart(); - - for (new client = 1; client <= MaxClients; client++) { + + for (int client = 1; client <= MaxClients; client++) { g_fAfkTime[client] = 0.0; g_bIsAfk[client] = false; } - + g_fLastCheck = GetGameTime(); } @@ -126,196 +129,194 @@ public void OnMapEnd() { Match_OnMapEnd(); } -public OnLibraryAdded(const String:name[]) { +public void OnLibraryAdded(const char[] name) { // Set up auto updater if (StrEqual(name, "updater")) Updater_AddPlugin(UPDATE_URL); } -public OnClientPutInServer(client) { +public void OnClientPutInServer(int client) { g_fAfkTime[client] = 0.0; g_bIsAfk[client] = false; } -public CvarChange_MaxAfkTime(Handle:cvar, const String:oldVal[], const String:newVal[]) { +public void CvarChange_MaxAfkTime(ConVar cvar, const char[] oldVal, const char[] newVal) { g_fMaxAfkTime = StringToFloat(newVal); } -public CvarChange_MinPlayers(Handle:cvar, const String:oldVal[], const String:newVal[]) { +public void CvarChange_MinPlayers(ConVar cvar, const char[] oldVal, const char[] newVal) { g_iMinPlayers = StringToInt(newVal); } - // ----------------------------------- // Match - start / end // ----------------------------------- -StartMatch() { - new bool:foundAFK[TFTeam] = {false, ...}; - for (new client = 1; client <= MaxClients; client++) { +void StartMatch() { + bool foundAFK[TFTeam] = { false, ... }; + for (int client = 1; client <= MaxClients; client++) { if (IsPlayerAFK(client)) { - new TFTeam:clientTeam = TFTeam:GetClientTeam(client); - + TFTeam clientTeam = TF2_GetClientTeam(client); + // Warn the player's team - + if (!foundAFK[clientTeam]) { foundAFK[clientTeam] = true; - for (new other = 1; other <= MaxClients; other++) { + for (int other = 1; other <= MaxClients; other++) { if (!IsRealPlayer2(other)) continue; - if (TFTeam:GetClientTeam(other) != clientTeam) + if (TF2_GetClientTeam(other) != clientTeam) continue; MC_PrintToChat(other, "{lightgreen}[AFK] {green}WARNING! These players are AFK:"); } } - - for (new other = 1; other <= MaxClients; other++) { + + for (int other = 1; other <= MaxClients; other++) { if (!IsRealPlayer2(other)) continue; - if (TFTeam:GetClientTeam(other) != clientTeam) + if (TF2_GetClientTeam(other) != clientTeam) continue; - + CPrintToChatEx2(other, client, "{lightgreen}[AFK] {default}- {teamcolor}%N", client); } } } - + DisablePlugin(); } -ResetMatch() { +void ResetMatch() { EnablePlugin(); } -EndMatch(bool:endedMidgame) { +void EndMatch(bool endedMidgame) { EnablePlugin(); } // ----------------------------------- - -EnablePlugin() { +void EnablePlugin() { if (g_bEnabled) return; g_bEnabled = true; - - for (new client = 1; client <= MaxClients; client++) { + + for (int client = 1; client <= MaxClients; client++) { g_fAfkTime[client] = 0.0; g_bIsAfk[client] = false; } - + HookEvent("player_spawn", Event_player_spawn, EventHookMode_Post); HookEvent("player_team", Event_player_team, EventHookMode_Post); - + g_hTimerCheck = CreateTimer(TIMERINTERVAL, Timer_CheckAFK, _, TIMER_REPEAT); } -DisablePlugin() { +void DisablePlugin() { if (!g_bEnabled) return; g_bEnabled = false; - - for (new client = 1; client <= MaxClients; client++) { + + for (int client = 1; client <= MaxClients; client++) { if (!IsRealPlayer(client) || IsFakeClient(client)) continue; - - new TFTeam:team = TFTeam:GetClientTeam(client); + + TFTeam team = TF2_GetClientTeam(client); if (team != TFTeam_Blue && team != TFTeam_Red) continue; - + ClearSyncHud(client, g_hHud[team]); } - + UnhookEvent("player_spawn", Event_player_spawn, EventHookMode_Post); UnhookEvent("player_team", Event_player_team, EventHookMode_Post); - - if (g_hTimerCheck != INVALID_HANDLE) { + + if (g_hTimerCheck != null) { KillTimer(g_hTimerCheck); - g_hTimerCheck = INVALID_HANDLE; + g_hTimerCheck = null; } } -public Action:Event_player_spawn(Handle:event, const String:name[], bool:dontBroadcast) { - new userid = GetEventInt(event, "userid"); - new client = GetClientOfUserId(userid); - +public void Event_player_spawn(Event event, const char[] name, bool dontBroadcast) { + int userid = event.GetInt("userid"); + int client = GetClientOfUserId(userid); + g_fLastAngles[client][0] = DEFANG0; g_fLastAngles[client][1] = DEFANG1; g_fLastAngles[client][2] = DEFANG2; - + // We cannot get the angles here, because TF2DM will move the player and change his angles later in this frame or the next frame. } -public Action:Event_player_team(Handle:event, const String:name[], bool:dontBroadcast) { - new userid = GetEventInt(event, "userid"); - new client = GetClientOfUserId(userid); - +public void Event_player_team(Event event, const char[] name, bool dontBroadcast) { + int userid = event.GetInt("userid"); + int client = GetClientOfUserId(userid); + g_fAfkTime[client] = 0.0; g_bIsAfk[client] = false; - - ClearSyncHud(client, Handle:g_hHud[TFTeam_Red]); - ClearSyncHud(client, Handle:g_hHud[TFTeam_Blue]); + + ClearSyncHud(client, g_hHud[TFTeam_Red]); + ClearSyncHud(client, g_hHud[TFTeam_Blue]); } -public Action:Timer_CheckAFK(Handle:timer) { - new Float:now = GetGameTime(); - new Float:span = now - g_fLastCheck; +public Action Timer_CheckAFK(Handle timer) { + float now = GetGameTime(); + float span = now - g_fLastCheck; g_fLastCheck = now; - - decl bool:afkBefore[MAXPLAYERS+1]; - decl bool:relevantClient[MAXPLAYERS+1]; - decl TFTeam:clientTeam[MAXPLAYERS+1]; - - new realPlayerCount = GetRealPlayerCount(); - - for (new client = 1; client <= MaxClients; client++) { + + bool afkBefore[MAXPLAYERS + 1]; + bool relevantClient[MAXPLAYERS + 1]; + TFTeam clientTeam[MAXPLAYERS + 1]; + + int realPlayerCount = GetRealPlayerCount(); + + for (int client = 1; client <= MaxClients; client++) { afkBefore[client] = g_bIsAfk[client]; relevantClient[client] = false; - + if (!IsRealPlayer(client) || IsFakeClient(client)) { g_bIsAfk[client] = false; continue; } - - new TFTeam:team = TFTeam:GetClientTeam(client); + + TFTeam team = TF2_GetClientTeam(client); clientTeam[client] = team; if (team != TFTeam_Red && team != TFTeam_Blue) { g_bIsAfk[client] = false; continue; } - + relevantClient[client] = true; - + if (!IsPlayerAlive(client)) continue; // Remain the same AFK state - - new Float:angles[3]; + + float angles[3]; if (!GetClientEyeAngles(client, angles)) { LogError("Could not get client eye angles for client %i", GetClientUserId(client)); continue; // Should never happen, but remain the same AFK state } - - new Float:vecDist = GetVectorDistance(angles, g_fLastAngles[client], true); - new bool:justSpawned = g_fLastAngles[client][0] == DEFANG0 && g_fLastAngles[client][1] == DEFANG1 && g_fLastAngles[client][2] == DEFANG2; - + + float vecDist = GetVectorDistance(angles, g_fLastAngles[client], true); + bool justSpawned = g_fLastAngles[client][0] == DEFANG0 && g_fLastAngles[client][1] == DEFANG1 && g_fLastAngles[client][2] == DEFANG2; + g_fLastAngles[client][0] = angles[0]; g_fLastAngles[client][1] = angles[1]; g_fLastAngles[client][2] = angles[2]; - + if (justSpawned) - continue; // If the player has just spawned, then record his angles but don't detect if he has moved. - + continue; // If the player has just spawned, then record their angles but don't detect if they have moved. + if (vecDist <= 1.0) { g_fAfkTime[client] += span; } else { g_fAfkTime[client] = 0.0; } - - new buttons = GetClientButtons(client); - new buttonsCheck = IN_ATTACK | IN_JUMP | IN_FORWARD | IN_BACK | IN_MOVELEFT | IN_MOVERIGHT; + + int buttons = GetClientButtons(client); + int buttonsCheck = IN_ATTACK | IN_JUMP | IN_FORWARD | IN_BACK | IN_MOVELEFT | IN_MOVERIGHT; if ((buttons & buttonsCheck) != 0) g_fAfkTime[client] = 0.0; - + g_bIsAfk[client] = false; if (g_fMaxAfkTime >= 1.0) { if (g_fAfkTime[client] >= g_fMaxAfkTime && realPlayerCount >= g_iMinPlayers) { @@ -323,17 +324,16 @@ public Action:Timer_CheckAFK(Handle:timer) { } } } - - - for (new client = 1; client <= MaxClients; client++) { + + for (int client = 1; client <= MaxClients; client++) { if (!relevantClient[client]) continue; if (afkBefore[client] == g_bIsAfk[client]) continue; - + // Call forward Call_StartForward(g_hOnAfkStateChanged); - + // Push parameters one at a time Call_PushCell(client); Call_PushCell(g_bIsAfk[client]); @@ -342,23 +342,22 @@ public Action:Timer_CheckAFK(Handle:timer) { if (Call_Finish() != SP_ERROR_NONE) LogError("Call to forward g_hOnAfkStateChanged failed"); } - - - decl String:hudText[TFTeam][256]; + + char hudText[TFTeam][256]; hudText[TFTeam_Blue] = ""; - hudText[TFTeam_Red] = ""; - - for (new client = 1; client <= MaxClients; client++) { + hudText[TFTeam_Red] = ""; + + for (int client = 1; client <= MaxClients; client++) { if (!relevantClient[client]) continue; - - new TFTeam:team = clientTeam[client]; - + + TFTeam team = clientTeam[client]; + if (g_bIsAfk[client]) { - decl String:nickname[32]; + char nickname[32]; GetClientName(client, nickname, sizeof(nickname)); - - new afkTime = RoundToFloor(g_fAfkTime[client] / 60.0); + + int afkTime = RoundToFloor(g_fAfkTime[client] / 60.0); if (afkTime >= 1) Format(hudText[team], sizeof(hudText[]), "%s\n- %s (%i min)", hudText[team], nickname, afkTime); else { @@ -374,40 +373,35 @@ public Action:Timer_CheckAFK(Handle:timer) { } } } - - for (new TFTeam:team = TFTeam_Red; team <= TFTeam_Blue; team++) { + + for (TFTeam team = TFTeam_Red; team <= TFTeam_Blue; team++) { if (hudText[team][0] != '\0') { Format(hudText[team], sizeof(hudText[]), "You have AFK players:%s", hudText[team]); } } - - for (new client = 1; client <= MaxClients; client++) { + + for (int client = 1; client <= MaxClients; client++) { if (!relevantClient[client]) continue; - - new TFTeam:team = clientTeam[client]; - + + TFTeam team = clientTeam[client]; + SetHudTextParams(0.04, -1.0, 3.0, 255, 0, 0, 255, 0, 0.0, 0.0, 0.0); ShowSyncHudText(client, g_hHud[team], hudText[team]); } - + return Plugin_Continue; } -bool:IsPlayerAFK(client) { +bool IsPlayerAFK(int client) { if (!g_bEnabled) return false; if (!IsRealPlayer(client) || IsFakeClient(client)) return false; - - new TFTeam:team = TFTeam:GetClientTeam(client); + + TFTeam team = TF2_GetClientTeam(client); if (team != TFTeam_Red && team != TFTeam_Blue) return false; - + return g_bIsAfk[client]; } - - - - - diff --git a/afk/update.txt b/afk/update.txt index 114b07f..1694993 100644 --- a/afk/update.txt +++ b/afk/update.txt @@ -4,11 +4,11 @@ { "Version" { - "Latest" "1.1.1" + "Latest" "1.1.2" } - "Notes" "Changes in 1.1.1:" - "Notes" "- Internal updates" + "Notes" "Changes in 1.1.2:" + "Notes" "- Updated code to be compatible with SourceMod 1.12" } "Files" diff --git a/classwarning/README.md b/classwarning/README.md new file mode 100644 index 0000000..a1c5875 --- /dev/null +++ b/classwarning/README.md @@ -0,0 +1,18 @@ +# Class Warning + +Features: + +- Warns players in chat if they are breaking the class limit (see [screenshot](https://sourcemod.krus.dk/classwarning.jpg)) +- Will automatically set limits based on ETF2L config executed (e.g. if you execute etf2l*6v6*\*, it will employ the 6v6 limits) + +| CVAR | Default | Description | +| ------------------------------------------------ | ------- | ------------------------------------ | +| `sm_tournament_classlimit_scout ` | `-1` | Number of scouts allowed per team | +| `sm_tournament_classlimit_soldier ` | `-1` | Number of soldiers allowed per team | +| `sm_tournament_classlimit_pyro ` | `-1` | Number of pyros allowed per team | +| `sm_tournament_classlimit_demoman ` | `-1` | Number of demomen allowed per team | +| `sm_tournament_classlimit_heavy ` | `-1` | Number of heavies allowed per team | +| `sm_tournament_classlimit_engineer ` | `-1` | Number of engineers allowed per team | +| `sm_tournament_classlimit_medic ` | `-1` | Number of medics allowed per team | +| `sm_tournament_classlimit_sniper ` | `-1` | Number of snipers allowed per team | +| `sm_tournament_classlimit_spy ` | `-1` | Number of spies allowed per team | diff --git a/classwarning/classwarning.sp b/classwarning/classwarning.sp index b90cfe8..b605d21 100644 --- a/classwarning/classwarning.sp +++ b/classwarning/classwarning.sp @@ -14,6 +14,10 @@ Release notes: ---- 1.1.1 (23/04/2023) ---- - Internal updates + +---- 1.1.2 (10/07/2025) ---- +- Updated code to be compatible with SourceMod 1.12 + */ #pragma semicolon 1 @@ -28,8 +32,8 @@ Release notes: #undef REQUIRE_PLUGIN #include -#define PLUGIN_VERSION "1.1.1" -#define UPDATE_URL "http://sourcemod.krus.dk/classwarning/update.txt" +#define PLUGIN_VERSION "1.1.2" +#define UPDATE_URL "https://sourcemod.krus.dk/classwarning/update.txt" public Plugin myinfo = { @@ -42,8 +46,8 @@ public Plugin myinfo = { int g_iClassLimits[10]; ConVar g_hCvarClassLimit[10]; -Handle g_hWarningTimer[MAXPLAYERS+1]; -float g_fLastPosition[MAXPLAYERS+1][3]; +Handle g_hWarningTimer[MAXPLAYERS + 1]; +float g_fLastPosition[MAXPLAYERS + 1][3]; ConVar g_hCvarAutoReset; bool g_bEnabled = false; @@ -52,14 +56,14 @@ public void OnPluginStart() { // Set up auto updater if (LibraryExists("updater")) Updater_AddPlugin(UPDATE_URL); - + // Match.inc Match_OnPluginStart(); - + CreateDefaultConfigs(); - + g_hCvarAutoReset = CreateConVar("sm_tournament_classlimit_autoreset", "1", "If 1, sets all class warning limits to -1 upon map start.", FCVAR_NONE); - + for (int class = 1; class <= 9; class++) { char cvarName[64], cvarDesc[128]; Format(cvarName, sizeof(cvarName), "sm_tournament_classlimit_%s", g_sClassNames[class]); @@ -71,9 +75,9 @@ public void OnPluginStart() { g_hCvarClassLimit[class].GetString(cvarVal, sizeof(cvarVal)); g_iClassLimits[class] = StringToInt(cvarVal); } - + AddCommandListener(Cmd_Exec, "exec"); - + // Simulate a map start OnMapStart(); } @@ -87,36 +91,36 @@ public void OnLibraryAdded(const char[] name) { void CreateDefaultConfigs() { char path[128]; char contents[1024]; - + path = "cfg/etf2l_6v6_classwarning.cfg"; if (!FileExists(path, true)) { Format(contents, sizeof(contents), "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s", - "sm_tournament_classlimit_scout 2", - "sm_tournament_classlimit_soldier 2", - "sm_tournament_classlimit_pyro 1", - "sm_tournament_classlimit_demoman 1", - "sm_tournament_classlimit_heavy 1", - "sm_tournament_classlimit_engineer 1", - "sm_tournament_classlimit_medic 1", - "sm_tournament_classlimit_sniper 1", - "sm_tournament_classlimit_spy 2"); - + "sm_tournament_classlimit_scout 2", + "sm_tournament_classlimit_soldier 2", + "sm_tournament_classlimit_pyro 1", + "sm_tournament_classlimit_demoman 1", + "sm_tournament_classlimit_heavy 1", + "sm_tournament_classlimit_engineer 1", + "sm_tournament_classlimit_medic 1", + "sm_tournament_classlimit_sniper 1", + "sm_tournament_classlimit_spy 2"); + File_StringToFile(path, contents); } - + path = "cfg/etf2l_9v9_classwarning.cfg"; if (!FileExists(path, true)) { Format(contents, sizeof(contents), "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s", - "sm_tournament_classlimit_scout 1", - "sm_tournament_classlimit_soldier 1", - "sm_tournament_classlimit_pyro 1", - "sm_tournament_classlimit_demoman 1", - "sm_tournament_classlimit_heavy 1", - "sm_tournament_classlimit_engineer 1", - "sm_tournament_classlimit_medic 1", - "sm_tournament_classlimit_sniper 1", - "sm_tournament_classlimit_spy 1"); - + "sm_tournament_classlimit_scout 1", + "sm_tournament_classlimit_soldier 1", + "sm_tournament_classlimit_pyro 1", + "sm_tournament_classlimit_demoman 1", + "sm_tournament_classlimit_heavy 1", + "sm_tournament_classlimit_engineer 1", + "sm_tournament_classlimit_medic 1", + "sm_tournament_classlimit_sniper 1", + "sm_tournament_classlimit_spy 1"); + File_StringToFile(path, contents); } } @@ -124,25 +128,25 @@ void CreateDefaultConfigs() { public Action Cmd_Exec(int client, const char[] command, int argc) { if (argc < 1) return Plugin_Continue; - + char text[128]; GetCmdArg(1, text, sizeof(text)); - + if (!CfgExists(text)) return Plugin_Continue; - + if (String_EndsWith(text, ".cfg")) - text[strlen(text)-4] = '\0'; - + text[strlen(text) - 4] = '\0'; + if (String_EndsWith(text, "_classwarning")) return Plugin_Continue; - + char path[128]; Format(path, sizeof(path), "%s_classwarning", text); - + if (!CfgExists(path)) return Plugin_Continue; - + ServerCommand("exec %s", path); return Plugin_Continue; } @@ -152,10 +156,10 @@ stock bool CfgExists(const char[] path) { strcopy(p, sizeof(p), path); if (!String_EndsWith(p, ".cfg")) StrCat(p, sizeof(p), ".cfg"); - + if (!String_StartsWith(p, "cfg/")) Format(p, sizeof(p), "cfg/%s", p); - + return FileExists(p, true); // true, such that also looks in /custom/ folders } @@ -165,7 +169,7 @@ public void OnMapStart() { public void OnMapEnd() { Match_OnMapEnd(); - + if (g_hCvarAutoReset.BoolValue) { for (int class = 1; class <= 9; class++) { g_hCvarClassLimit[class].SetInt(-1); @@ -181,7 +185,6 @@ public void OnClientDisconnect(int client) { // Match - start / end // ----------------------------------- - void StartMatch() { EnablePlugin(); } @@ -196,12 +199,11 @@ void EndMatch(bool endedMidgame) { // ----------------------------------- - void EnablePlugin() { if (g_bEnabled) return; g_bEnabled = true; - + HookEvent("player_spawn", Event_player_spawn, EventHookMode_Post); } @@ -209,9 +211,9 @@ void DisablePlugin() { if (!g_bEnabled) return; g_bEnabled = false; - + UnhookEvent("player_spawn", Event_player_spawn, EventHookMode_Post); - + for (int client = 1; client <= MaxClients; client++) { StopWarning(client); } @@ -221,22 +223,22 @@ public void CvarChange_ClassLimit(ConVar cvar, const char[] oldVal, const char[] for (int class = 1; class <= 9; class++) { if (g_hCvarClassLimit[class] == cvar) { g_iClassLimits[class] = StringToInt(newVal); - + break; } } } -public void Event_player_spawn(Handle event, const char[] name, bool dontBroadcast) { +public void Event_player_spawn(Event event, const char[] name, bool dontBroadcast) { if (!g_bEnabled) return; - + if (GetEngineTime() - g_fMatchStartTime < 5.0) return; // Don't report anything before the game starts - - int userid = GetEventInt(event, "userid"); + + int userid = event.GetInt("userid"); int client = GetClientOfUserId(userid); - + StartWarning(client); } @@ -249,7 +251,7 @@ void StopWarning(int client) { void StartWarning(int client) { StopWarning(client); - + GetClientAbsOrigin(client, g_fLastPosition[client]); g_hWarningTimer[client] = CreateTimer(0.1, Timer_Warn, client, TIMER_REPEAT); } @@ -259,7 +261,7 @@ int CountClass(TFTeam team, TFClassType class) { for (int client = 1; client <= MaxClients; client++) { if (!IsClientValid2(client) || TF2_GetClientTeam(client) != team) continue; - + if (IsPlayerAlive(client) && TF2_GetPlayerClass(client) == class) classCount++; } @@ -271,30 +273,30 @@ public Action Timer_Warn(Handle timer, any client) { StopWarning(client); return Plugin_Stop; } - + float pos[3]; GetClientAbsOrigin(client, pos); if (GetVectorDistance(pos, g_fLastPosition[client], true) <= 100 * 100) return Plugin_Continue; - + TFClassType class = TF2_GetPlayerClass(client); if (g_iClassLimits[view_as(class)] < 0) { StopWarning(client); return Plugin_Stop; } - + TFTeam team = TF2_GetClientTeam(client); int currentClassCount = CountClass(team, class); - + if (currentClassCount <= g_iClassLimits[view_as(class)]) { StopWarning(client); return Plugin_Stop; } - + MC_PrintToChat(client, "{red}------------------"); MC_PrintToChat(client, "{red}<<{yellow}WARNING{red}>> {yellow}You are breaking the %s limit of %i", g_sClassNames[view_as(class)], g_iClassLimits[view_as(class)]); MC_PrintToChat(client, "{red}------------------"); - + StopWarning(client); return Plugin_Stop; } diff --git a/classwarning/update.txt b/classwarning/update.txt index b609eb4..5cd7ca7 100644 --- a/classwarning/update.txt +++ b/classwarning/update.txt @@ -4,11 +4,11 @@ { "Version" { - "Latest" "1.1.1" + "Latest" "1.1.2" } - "Notes" "Changes in 1.1.1:" - "Notes" "- Internal updates" + "Notes" "Changes in 1.1.2:" + "Notes" "- Updated code to be compatible with SourceMod 1.12" } "Files" diff --git a/compile.ps1 b/compile.ps1 index 776a0b4..f5f13ca 100644 --- a/compile.ps1 +++ b/compile.ps1 @@ -1,28 +1,36 @@ param( - [string]$filename + [string]$path ) $ErrorActionPreference = "Stop" # Allow writing "compile" in a directory with exactly one .sp file -if (-not $filename) { +if (-not $path) { $files = Get-ChildItem -Filter *.sp if ($files.Count -ne 1) { throw "Could not find one .sp file in current directory" } - $filename = $files[0].Name + $path = $files[0].Name } # Allow writing "compile logstf" in the root folder -if (-not (Test-Path $filename -PathType Leaf)) { - $possiblePath = Join-Path $filename ($filename + ".sp") - Write-Host "Testing: " $possiblePath +if (-not (Test-Path $path -PathType Leaf)) { + $possiblePath = Join-Path $path ($path + ".sp") if (Test-Path $possiblePath -PathType Leaf) { - Push-Location $filename + $path = $possiblePath } } -& "spcomp" "$filename" "-i" "$(Join-Path $PSScriptRoot includes)" +if (-not $path.EndsWith('.sp')) { + $path += '.sp' +} + +$directory = [System.IO.Path]::GetDirectoryName($path) +$filenameOnly = [System.IO.Path]::GetFileName($path) + +Push-Location $directory + +& "spcomp64" "$filenameOnly" "-i" "$(Join-Path $PSScriptRoot includes)" Pop-Location \ No newline at end of file diff --git a/countdown/countdown.sp b/countdown/countdown.sp index b23201d..c5c1d57 100644 --- a/countdown/countdown.sp +++ b/countdown/countdown.sp @@ -9,9 +9,15 @@ Release notes: ---- 1.0.1 (23/04/2023) ---- - Internal updates + +---- 1.0.2 (10/07/2025) ---- +- Updated code to be compatible with SourceMod 1.12 + + */ #pragma semicolon 1 +#pragma newdecls required #include #include @@ -21,12 +27,11 @@ Release notes: #undef REQUIRE_PLUGIN #include -#define PLUGIN_VERSION "1.0.1" -#define UPDATE_URL "http://sourcemod.krus.dk/countdown/update.txt" +#define PLUGIN_VERSION "1.0.2" +#define UPDATE_URL "https://sourcemod.krus.dk/countdown/update.txt" #define REASON_LEN 256 - -public Plugin:myinfo = { +public Plugin myinfo = { name = "Countdown", author = "F2", description = "Counts down with a custom text", @@ -35,74 +40,73 @@ public Plugin:myinfo = { }; -new Handle:g_hTimer = INVALID_HANDLE; -new String:g_sReason[REASON_LEN] = ""; -new g_iTimeleft = -1; -new Handle:g_hCvarReason; +Handle g_hTimer = null; +char g_sReason[REASON_LEN] = ""; +int g_iTimeleft = -1; +ConVar g_hCvarReason; -public OnPluginStart() { +public void OnPluginStart() { RegConsoleCmd("say", Command_say); - + g_hCvarReason = CreateConVar("countdown_reason", "Searching for new opponent in %time", "Default reason", FCVAR_NONE); HookConVarChange(g_hCvarReason, OnReasonChange); - + if (LibraryExists("updater")) Updater_AddPlugin(UPDATE_URL); } -public OnLibraryAdded(const String:name[]) { +public void OnLibraryAdded(const char[] name) { if (StrEqual(name, "updater")) Updater_AddPlugin(UPDATE_URL); } -public OnReasonChange(Handle:cvar, const String:oldVal[], const String:newVal[]) { +public void OnReasonChange(ConVar cvar, const char[] oldVal, const char[] newVal) { if (StrContains(newVal, "%time", false) == -1 && StrContains(oldVal, "%time", false) != -1) { - SetConVarString(cvar, oldVal); + cvar.SetString(oldVal); } } - -public Action:Command_say(client, args) { +public Action Command_say(int client, int args) { if (!IsRealPlayer(client)) return Plugin_Continue; - - if (Client_IsAdmin(client)) { - decl String:text[256]; + + if (Client_IsAdmin(client)) { + char text[256]; GetCmdArgString(text, sizeof(text)); if (text[0] == '"' && strlen(text) >= 2) { strcopy(text, sizeof(text), text[1]); - text[strlen(text)-1] = '\0'; + text[strlen(text) - 1] = '\0'; } String_Trim(text, text, sizeof(text)); - + if (StrEqual(text, "!countdown", false) || StrEqual(text, "!startcountdown", false)) { // When user writes !countdown, show the syntax help. MC_PrintToChat(client, "{red}%s", "Please specify a duration, for example: !countdown 2m"); return Plugin_Handled; } else if (StrContains(text, "!countdown ", false) == 0 || StrContains(text, "!startcountdown ", false) == 0) { // When a user writes !countdown and some more, parse the message. - decl String:buffers[3][REASON_LEN]; + char buffers[3][REASON_LEN]; ReplaceString(text, sizeof(text), " ", " "); - new pieces = ExplodeString(text, " ", buffers, 3, REASON_LEN, true); - new time = -1; - + int pieces = ExplodeString(text, " ", buffers, 3, REASON_LEN, true); + int time = -1; + if (pieces >= 2) time = ParseDuration(buffers[1]); - + if (time == -1) { MC_PrintToChat(client, "{red}%s", "Please specify a proper duration, for example: !countdown 2m"); } else { - decl String:reason[REASON_LEN]; - GetConVarString(g_hCvarReason, reason, sizeof(reason)); + char reason[REASON_LEN]; + g_hCvarReason.GetString(reason, sizeof(reason)); if (pieces == 3) strcopy(reason, sizeof(reason), buffers[2]); - + if (StrContains(reason, "%time", false) == -1) { MC_PrintToChat(client, "{red}%s%s%s", "Please specify a the reason with a %time: !countdown ", buffers[1], " Exploding in %time"); } else { g_iTimeleft = time; strcopy(g_sReason, sizeof(g_sReason), reason); - if (g_hTimer != INVALID_HANDLE) + if (g_hTimer != null) KillTimer(g_hTimer); g_hTimer = CreateTimer(1.0, Timer_Countdown, INVALID_HANDLE, TIMER_REPEAT); Timer_Countdown(g_hTimer); @@ -112,30 +116,30 @@ public Action:Command_say(client, args) { return Plugin_Handled; } else if (StrEqual(text, "!stopcountdown", false)) { KillTimer(g_hTimer); - g_hTimer = INVALID_HANDLE; + g_hTimer = null; PrintHintTextToAll("%s", " "); PrintHintTextToAll("%s", ""); return Plugin_Handled; } } - + return Plugin_Continue; } // When the countdown is active, this is executed every second. -public Action:Timer_Countdown(Handle:timer) { - decl String:strtime[64]; +public Action Timer_Countdown(Handle timer) { + char strtime[64]; DurationFormat(g_iTimeleft, strtime, sizeof(strtime)); - decl String:reason[REASON_LEN]; + char reason[REASON_LEN]; strcopy(reason, sizeof(reason), g_sReason); ReplaceString(reason, sizeof(reason), "%time", strtime, false); PrintHintTextToAll("%s", reason); - //for (new client = 1; client <= MaxClients; client++) + //for (int client = 1; client <= MaxClients; client++) // if (IsRealPlayer(client)) // StopSound(client, SNDCHAN_STATIC, "UI/hint.wav"); - + if (g_iTimeleft <= 0) { - g_hTimer = INVALID_HANDLE; + g_hTimer = null; return Plugin_Stop; } g_iTimeleft--; @@ -145,8 +149,8 @@ public Action:Timer_Countdown(Handle:timer) { // Format duration in mins and secs. -stock DurationFormat(seconds, String:buffer[], size) { - new mins = seconds / 60, secs = seconds % 60; +stock void DurationFormat(int seconds, char[] buffer, int size) { + int mins = seconds / 60, secs = seconds % 60; strcopy(buffer, size, ""); if (mins > 0) Format(buffer, size, "%s%i%s", buffer, mins, mins == 1 ? " min " : " mins "); @@ -156,27 +160,27 @@ stock DurationFormat(seconds, String:buffer[], size) { } // Parse a duration of this format: 7m15s -stock ParseDuration(const String:text[]) { - new seconds = 0; - new len = strlen(text); +stock int ParseDuration(const char[] text) { + int seconds = 0; + int len = strlen(text); if (len == 0) return -1; - - for (new pos = 0; pos < len; pos++) { - new num = EatNumbers(text, pos, len+1); - + + for (int pos = 0; pos < len; pos++) { + int num = EatNumbers(text, pos); + if (num == -1) return -1; // Non-numerical character found - + if (pos == len) return -1; // Number found, but suffix is missing - + switch (text[pos]) { - case 'w': - seconds += num * 60 * 60 * 24 * 7; + case 'w': + seconds += num * 60 * 60 * 24 * 7; case 'd': seconds += num * 60 * 60 * 24; - case 'h': + case 'h': seconds += num * 60 * 60; case 'm': seconds += num * 60; @@ -186,26 +190,26 @@ stock ParseDuration(const String:text[]) { return -1; // Wrong suffix } } - + return seconds; } // Eat as many numbers as possible starting from 'pos' in 'text'. -stock EatNumbers(const String:text[], &pos, len) { +stock int EatNumbers(const char[] text, int &pos) { if (!IsCharNumeric(text[pos])) return -1; - - new res; - new consumed = StringToIntEx(text[pos], res); + + int res; + int consumed = StringToIntEx(text[pos], res); if (consumed <= 0) return -1; - + pos += consumed; return res; } // Compatibility with the ChatColor plugin. -public Action:BlockSay(client, const String:text[], bool:teamSay) { +public Action BlockSay(int client, const char[] text, bool teamSay) { if (teamSay) return Plugin_Continue; if (Client_IsAdmin(client) && (StrContains(text, "!countdown", false) == 0 || StrContains(text, "!startcountdown", false) == 0 || StrEqual(text, "!stopcountdown", false))) diff --git a/countdown/update.txt b/countdown/update.txt index f023701..6fbb03a 100644 --- a/countdown/update.txt +++ b/countdown/update.txt @@ -4,11 +4,11 @@ { "Version" { - "Latest" "1.0.1" + "Latest" "1.0.2" } - "Notes" "Changes in 1.0.1:" - "Notes" "- Internal updates" + "Notes" "Changes in 1.0.2:" + "Notes" "- Updated code to be compatible with SourceMod 1.12" } "Files" diff --git a/fixstvslot/README.md b/fixstvslot/README.md new file mode 100644 index 0000000..8b2452f --- /dev/null +++ b/fixstvslot/README.md @@ -0,0 +1,6 @@ +# Fix SourceTV Slot + +Features: + +- Changes the map on server start to avoid a crash related to STV slot +- Automatically changes the level when STV is enabled, allowing the bot to join. diff --git a/fixstvslot/fixstvslot.sp b/fixstvslot/fixstvslot.sp index 61bd93a..ef45f7b 100644 --- a/fixstvslot/fixstvslot.sp +++ b/fixstvslot/fixstvslot.sp @@ -3,12 +3,20 @@ Release notes: ---- 1.0.1 (14/12/2013) ---- - Changes the map on server start + ---- 2.0.0 (07/07/2022) ---- - Now automatically changes the level if stv is enabled, not just on server start + +---- 2.0.1 (10/07/2025) ---- +- Updated code to be compatible with SourceMod 1.12 +- Only change map if the server is empty + + */ #pragma semicolon 1 +#pragma newdecls required #include #include @@ -16,25 +24,21 @@ Release notes: #undef REQUIRE_PLUGIN #include -#pragma newdecls required - -#define PLUGIN_VERSION "2.0.0" -#define UPDATE_URL "http://sourcemod.krus.dk/fixstvslot/update.txt" +#define PLUGIN_VERSION "2.0.1" +#define UPDATE_URL "https://sourcemod.krus.dk/fixstvslot/update.txt" public Plugin myinfo = { name = "Fix STV Slot", author = "F2", description = "When STV is enabled, change the level so the bot joins.", version = PLUGIN_VERSION, - url = "http://sourcemod.krus.dk/" + url = "https://sourcemod.krus.dk/" }; -public void OnPluginStart() -{ +public void OnPluginStart() { // Set up auto updater - if (LibraryExists("updater")) - { + if (LibraryExists("updater")) { Updater_AddPlugin(UPDATE_URL); } @@ -44,30 +48,27 @@ public void OnPluginStart() HookConVarChange(FindConVar("tv_enable"), OnSTVChanged); } -public void OnLibraryAdded(const char[] name) -{ +public void OnLibraryAdded(const char[] name) { // Set up auto updater - if (StrEqual(name, "updater")) - { + if (StrEqual(name, "updater")) { Updater_AddPlugin(UPDATE_URL); } } -public void OnSTVChanged(ConVar convar, char[] oldValue, char[] newValue) -{ - if - ( +public void OnSTVChanged(ConVar convar, char[] oldValue, char[] newValue) { + if ( // stv doesn't exist FindSTV() == -1 // stv was off && StrEqual(oldValue, "0") // stv is now on && StrEqual(newValue, "1") - ) - { + // There are no players on the server + && GetRealPlayerCount() == 0 + ) { LogMessage("[FixSTVSlot] tv_enable changed to 1! Changing level..."); PrintToChatAll("[FixSTVSlot] tv_enable changed to 1! Changing level..."); - + // We use the TIMER_FLAG_NO_MAPCHANGE so that, // if someone quickly changes the level before the timer hits 0, it won't change the level twice. // Also this maintains compatibility with the rglqol plugin. @@ -75,8 +76,7 @@ public void OnSTVChanged(ConVar convar, char[] oldValue, char[] newValue) } } -public Action ChangeMap(Handle timer) -{ +public Action ChangeMap(Handle timer) { char map[128]; GetCurrentMap(map, sizeof(map)); ForceChangeLevel(map, "STV joined! Forcibly changing level so the bot can join."); diff --git a/fixstvslot/update.txt b/fixstvslot/update.txt index e67b691..c9887f5 100644 --- a/fixstvslot/update.txt +++ b/fixstvslot/update.txt @@ -4,11 +4,12 @@ { "Version" { - "Latest" "2.0.0" + "Latest" "2.0.1" } - "Notes" "Changes in 2.0.0:" - "Notes" "- Now automatically changes the level if stv is enabled, not just on server start" + "Notes" "Changes in 2.0.1:" + "Notes" "- Updated code to be compatible with SourceMod 1.12" + "Notes" "- Only change map if the server is empty" } "Files" diff --git a/includes/anyhttp.inc b/includes/anyhttp.inc index 37c7dbd..828e2d3 100644 --- a/includes/anyhttp.inc +++ b/includes/anyhttp.inc @@ -42,14 +42,15 @@ TODO: #define REQUIRE_EXTENSIONS #endif -#include +#include #include #include #include #include -#define ANYHTTP_VERSION "3.0.0" +#define ANYHTTP_VERSION "3.0.1" #define SimultaneousConnections 16 +#define USERAGENT "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" #pragma dynamic 5242880 // Make sure we can allocate enough space for uploading files. Here's 20MB. @@ -246,11 +247,8 @@ enum struct AnyHttpClass { if (this.Extension == AnyHttpUnknown) { if (LibraryExists("SteamWorks")) { this.Extension = UseSteamWorks; -#if SOURCEMOD_V_MAJOR == 1 && SOURCEMOD_V_MINOR <= 10 } else if (GetFeatureStatus(FeatureType_Native, "curl_easy_init") == FeatureStatus_Available) { - // Initializing cURL options doesn't work on SM 1.11 at the moment. /F2, 09/07/2022 this.Extension = UseCURL; -#endif } else { return false; } @@ -359,11 +357,11 @@ static void CleanUpRequest(AnyHttpRequest request) { request.Initialized = false; if (request.ExtensionHandle != null) { - CloseHandle(request.ExtensionHandle); + delete request.ExtensionHandle; request.ExtensionHandle = null; } if (request.FileHandle != null) { - CloseHandle(request.FileHandle); + delete request.FileHandle; request.FileHandle = null; } if (request.Fields != null) { @@ -418,7 +416,7 @@ static void GenerateUniqueFilename(char[] filename, int maxsize) { static bool SteamWorks_Get(const char[] url, AnyHttp_Result callback, any metadata = 0) { Handle handle = SteamWorks_CreateHTTPRequest(k_EHTTPMethodGET, url); - + AnyHttpRequest request = NewRequest(); request.ExtensionHandle = handle; request.Callback = callback; @@ -434,8 +432,10 @@ static bool SteamWorks_Get(const char[] url, AnyHttp_Result callback, any metada static AnyHttpRequest SteamWorks_CreatePostForm(const char[] url, any metadata = 0) { + Handle handle = SteamWorks_CreateHTTPRequest(k_EHTTPMethodPOST, url); + AnyHttpRequest request = NewRequest(); - request.ExtensionHandle = SteamWorks_CreateHTTPRequest(k_EHTTPMethodPOST, url); + request.ExtensionHandle = handle; request.MetaData = metadata; return request; } @@ -514,7 +514,7 @@ static bool cURL_Get(const char[] url, AnyHttp_Result callback, any metadata = 0 return false; if (!curl_easy_setopt_int_array(curl, CURL_Default_Opts, sizeof(CURL_Default_Opts))) { LogError("Couldn't set cURL options"); - CloseHandle(curl); + delete curl; return false; } @@ -544,6 +544,19 @@ static bool cURL_Get(const char[] url, AnyHttp_Result callback, any metadata = 0 return false; } + Handle slist = curl_slist(); + if (slist == null) { + CleanUpRequest(request); + return false; + } + + // Some websites reject the request if the user agent is not normal + curl_slist_append(slist, USERAGENT); + if (!curl_easy_setopt_handle(curl, CURLOPT_HTTPHEADER, slist)) { + CleanUpRequest(request); + return false; + } + curl_easy_perform_thread(curl, cURL_Done); return true; } @@ -551,21 +564,34 @@ static bool cURL_Get(const char[] url, AnyHttp_Result callback, any metadata = 0 static AnyHttpRequest cURL_CreatePostForm(const char[] url, any metadata = 0) { - Handle handle = curl_easy_init(); - if (handle == null) + Handle curl = curl_easy_init(); + if (curl == null) return InvalidRequest; - if (!curl_easy_setopt_int_array(handle, CURL_Default_Opts, sizeof(CURL_Default_Opts))) { + if (!curl_easy_setopt_int_array(curl, CURL_Default_Opts, sizeof(CURL_Default_Opts))) { LogError("Couldn't set cURL options"); - CloseHandle(handle); + delete curl; + return InvalidRequest; + } + if (!curl_easy_setopt_string(curl, CURLOPT_URL, url)) { + delete curl; return InvalidRequest; } - if (!curl_easy_setopt_string(handle, CURLOPT_URL, url)) { - CloseHandle(handle); + + Handle slist = curl_slist(); + if (slist == null) { + delete curl; + return InvalidRequest; + } + + // Some websites reject the request if the user agent is not normal + curl_slist_append(slist, USERAGENT); + if (!curl_easy_setopt_handle(curl, CURLOPT_HTTPHEADER, slist)) { + delete curl; return InvalidRequest; } AnyHttpRequest request = NewRequest(); - request.ExtensionHandle = handle; + request.ExtensionHandle = curl; request.MetaData = metadata; return request; @@ -641,14 +667,14 @@ static void cURL_Done(Handle hndl, CURLcode code) { if (code != CURLE_OK) { char error_buffer[256]; curl_easy_strerror(code, error_buffer, sizeof(error_buffer)); - CloseHandle(filehandle); + delete filehandle; request.FileHandle = null; LogError("cURL error: %s", error_buffer); success = false; } else { - CloseHandle(filehandle); // Must be closed so it is flushed. + delete filehandle; // Must be closed so it is flushed. request.FileHandle = null; curl_easy_getinfo_int(hndl, CURLINFO_RESPONSE_CODE, responseCode); @@ -667,7 +693,7 @@ static void cURL_Done(Handle hndl, CURLcode code) { File fileHandle = OpenFile(filename, "r"); if (fileHandle != null) { ReadFileString(fileHandle, buffer, size + 1); - CloseHandle(fileHandle); + delete fileHandle; } Call_PushString(buffer); diff --git a/includes/anyhttp_file.inc b/includes/anyhttp_file.inc index ea003a6..c3f0d06 100644 --- a/includes/anyhttp_file.inc +++ b/includes/anyhttp_file.inc @@ -15,7 +15,7 @@ typeset AnyHttp_CopyFile_Result { enum struct AnyHttpCopyFileData { File source; File target; - AnyHttp_CopyFile_Result callback; + Function callback; any metadata; bool success; @@ -33,7 +33,7 @@ enum struct AnyHttpCopyFileData { pack.Reset(); this.source = pack.ReadCell(); this.target = pack.ReadCell(); - this.callback = view_as(pack.ReadFunction()); + this.callback = pack.ReadFunction(); this.metadata = pack.ReadCell(); this.success = pack.ReadCell(); delete pack; diff --git a/includes/anyhttp_multipart.inc b/includes/anyhttp_multipart.inc index 1ee9103..a99df3d 100644 --- a/includes/anyhttp_multipart.inc +++ b/includes/anyhttp_multipart.inc @@ -9,7 +9,7 @@ By F2 #define _anyhttp_multipart_included #include -#include +#include #include @@ -22,7 +22,7 @@ typeset AnyHttp_Multipart_Result { enum struct AnyHttpMultipartData { KeyValues fields; AnyHttpStringBuilder sb; - AnyHttp_Multipart_Result callback; + Function callback; any metadata; bool success; @@ -45,7 +45,7 @@ enum struct AnyHttpMultipartData { pack.Reset(); this.fields = pack.ReadCell(); this.sb.ReadFromDataPack(pack); - this.callback = view_as(pack.ReadFunction()); + this.callback = pack.ReadFunction(); this.metadata = pack.ReadCell(); this.success = pack.ReadCell(); this.currentField = pack.ReadCell(); diff --git a/includes/f2stocks.inc b/includes/f2stocks.inc index 1981b33..4606e90 100644 --- a/includes/f2stocks.inc +++ b/includes/f2stocks.inc @@ -1,5 +1,5 @@ #if defined _f2stocks_included - #endinput + #endinput #endif #define _f2stocks_included @@ -13,14 +13,15 @@ TODO: #include #include -float g_fCapMultipliers[] = { 0.0, // Harmonic numbers - 1.0000, 1.5000, 1.8333, 2.0833, 2.2833, 2.4500, 2.5929, 2.7179, - 2.8290, 2.9290, 3.0199, 3.1032, 3.1801, 3.2516, 3.3182, 3.3807, - 3.4396, 3.4951, 3.5477, 3.5977, 3.6454, 3.6908, 3.7343, 3.7760, - 3.8160, 3.8544, 3.8915, 3.9272, 3.9617, 3.9950, 4.0272, 4.0585, - 4.0888, 4.1182, 4.1468, 4.1746, 4.2016, 4.2279, 4.2535, 4.2785, - 4.3029, 4.3267, 4.3500, 4.3727, 4.3949, 4.4167, 4.4380, 4.4588, - 4.4792, 4.4992, 4.5188, 4.5380, 4.5569, 4.5754, 4.5936, 4.6115, +float g_fCapMultipliers[] = { + 0.0, // Harmonic numbers + 1.0000, 1.5000, 1.8333, 2.0833, 2.2833, 2.4500, 2.5929, 2.7179, + 2.8290, 2.9290, 3.0199, 3.1032, 3.1801, 3.2516, 3.3182, 3.3807, + 3.4396, 3.4951, 3.5477, 3.5977, 3.6454, 3.6908, 3.7343, 3.7760, + 3.8160, 3.8544, 3.8915, 3.9272, 3.9617, 3.9950, 4.0272, 4.0585, + 4.0888, 4.1182, 4.1468, 4.1746, 4.2016, 4.2279, 4.2535, 4.2785, + 4.3029, 4.3267, 4.3500, 4.3727, 4.3949, 4.4167, 4.4380, 4.4588, + 4.4792, 4.4992, 4.5188, 4.5380, 4.5569, 4.5754, 4.5936, 4.6115, 4.6290, 4.6463, 4.6632, 4.6799, 4.6963, 4.7124, 4.7283, 4.7439 }; @@ -38,31 +39,30 @@ stock void F2STOCKS_Dummy() { int PrintToSTV_iLastStvClient; // Cached STV client id -stock void PrintToSTV(const char []format, any ...) { +stock void PrintToSTV(const char[] format, any ...) { int stv = FindSTV(); if (stv < 1) return; - + char buffer[512]; VFormat(buffer, sizeof(buffer), format, 2); PrintToChat(stv, "%s", buffer); } -stock void CPrintToSTV(const char[] format, any ...) -{ - int stv = FindSTV(); - if (stv < 1) - return; +stock void CPrintToSTV(const char[] format, any ...) { + int stv = FindSTV(); + if (stv < 1) + return; - char buffer[512]; - VFormat(buffer, sizeof(buffer), format, 2); - MC_PrintToChat(stv, "%s", buffer); + char buffer[512]; + VFormat(buffer, sizeof(buffer), format, 2); + MC_PrintToChat(stv, "%s", buffer); } stock int FindSTV() { if (!(PrintToSTV_iLastStvClient >= 1 && PrintToSTV_iLastStvClient <= MaxClients && IsClientConnected(PrintToSTV_iLastStvClient) && IsClientInGame(PrintToSTV_iLastStvClient) && IsClientSourceTV(PrintToSTV_iLastStvClient))) { PrintToSTV_iLastStvClient = -1; - + for (int client = 1; client <= MaxClients; client++) { if (IsClientConnected(client) && IsClientInGame(client) && IsClientSourceTV(client)) { PrintToSTV_iLastStvClient = client; @@ -70,7 +70,7 @@ stock int FindSTV() { } } } - + return PrintToSTV_iLastStvClient; } @@ -88,7 +88,7 @@ stock float TF2_GetPlayerUberLevel(int client, int &medigunEntity = -1) { // Thi return value; } } - + return 0.0; } @@ -99,10 +99,10 @@ stock float TF2_GetPlayerUberBuildTime(int client) { int defid = GetEntProp(index, Prop_Send, "m_iItemDefinitionIndex"); if (defid == 35) return 32.0; // Kritzkrieg - + if (defid == 411) return 32.0; // Quickfix - + if (defid == 998) return 26.67; // Vaccinator, although this can be triggered already after 6.67 s } @@ -136,13 +136,13 @@ stock int TF2_GetHealingTarget(int client) { int index = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon"); if (index > 0) { GetEntityNetClass(index, classname, sizeof(classname)); - - if(StrEqual(classname, "CWeaponMedigun")) { - if(GetEntProp(index, Prop_Send, "m_bHealing") == 1) + + if (StrEqual(classname, "CWeaponMedigun")) { + if (GetEntProp(index, Prop_Send, "m_bHealing") == 1) return GetEntPropEnt(index, Prop_Send, "m_hHealingTarget"); } } - + return -1; } @@ -199,16 +199,16 @@ stock int GetRealPlayerCount() { // Requires stock void CPrintToChatEx2(int client, int author, const char[] message, any ...) { MC_CheckTrie(); - if(client <= 0 || client > MaxClients) { + if (client <= 0 || client > MaxClients) { ThrowError("Invalid client index %i", client); } - if(!IsClientInGame(client)) { + if (!IsClientInGame(client)) { ThrowError("Client %i is not in game", client); } - if(author <= 0 || author > MaxClients) { + if (author <= 0 || author > MaxClients) { ThrowError("Invalid client index %i", author); } - if(!IsClientInGame(author)) { + if (!IsClientInGame(author)) { ThrowError("Client %i is not in game", author); } char buffer[MC_MAX_MESSAGE_LENGTH]; @@ -224,16 +224,16 @@ stock void CPrintToChatEx2(int client, int author, const char[] message, any ... // Requires stock void CPrintToChatAllEx2(int author, const char[] message, any ...) { MC_CheckTrie(); - if(author <= 0 || author > MaxClients) { + if (author <= 0 || author > MaxClients) { ThrowError("Invalid client index %i", author); } - if(!IsClientInGame(author)) { + if (!IsClientInGame(author)) { ThrowError("Client %i is not in game", author); } char buffer[MC_MAX_MESSAGE_LENGTH]; char buffer2[MC_MAX_MESSAGE_LENGTH]; - for(int i = 1; i <= MaxClients; i++) { - if(!IsClientInGame(i) || MC_SkipList[i]) { + for (int i = 1; i <= MaxClients; i++) { + if (!IsClientInGame(i) || MC_SkipList[i]) { MC_SkipList[i] = false; continue; } @@ -249,10 +249,10 @@ stock void CPrintToChatAllEx2(int author, const char[] message, any ...) { // Requires stock void CPrintToChat2(int client, const char[] message, any ...) { MC_CheckTrie(); - if(client <= 0 || client > MaxClients) { + if (client <= 0 || client > MaxClients) { ThrowError("Invalid client index %i", client); } - if(!IsClientInGame(client)) { + if (!IsClientInGame(client)) { ThrowError("Client %i is not in game", client); } char buffer[MC_MAX_MESSAGE_LENGTH]; @@ -270,8 +270,8 @@ stock void CPrintToChatAll2(const char[] message, any ...) { MC_CheckTrie(); char buffer[MC_MAX_MESSAGE_LENGTH]; char buffer2[MC_MAX_MESSAGE_LENGTH]; - for(int i = 1; i <= MaxClients; i++) { - if(!IsClientInGame(i) || MC_SkipList[i]) { + for (int i = 1; i <= MaxClients; i++) { + if (!IsClientInGame(i) || MC_SkipList[i]) { MC_SkipList[i] = false; continue; } @@ -298,16 +298,16 @@ stock void GetPlayerTeamStr(int team, char[] teamstr, int teamstrLen) { stock int TF2_GetPlayerScore(int client) { if (!IsClientConnected(client)) return -1; - + int offset = FindSendPropInfo("CTFPlayerResource", "m_iTotalScore"); if (offset < 1) - return -1; - + return -1; + int entity = GetPlayerResourceEntity(); if (entity == -1) return -1; - - return GetEntData(entity, offset + (client*4)); + + return GetEntData(entity, offset + (client * 4)); } // Based on smlib's implementation File_Copy @@ -354,25 +354,25 @@ stock int GetMaxHealth(int client) { Handle hConf = LoadGameConfigFile("sdkhooks.games"); if (hConf == null) SetFailState("Cannot find sdkhooks.games gamedata"); - + StartPrepSDKCall(SDKCall_Entity); PrepSDKCall_SetFromConf(hConf, SDKConf_Virtual, "GetMaxHealth"); PrepSDKCall_SetReturnInfo(SDKType_PlainOldData, SDKPass_Plain); fnGetMaxHealth = EndPrepSDKCall(); - + if (fnGetMaxHealth == null) SetFailState("Failed to set up GetMaxHealth sdkcall"); - - CloseHandle(hConf); + + delete hConf; } - + return SDKCall(fnGetMaxHealth, client); } stock void IntToBits(int val, char bitval[33]) { bitval[32] = '\0'; for (int pos = 31; pos >= 0; pos--) { - bitval[pos] = (val&1) == 1 ? '1' : '0'; + bitval[pos] = (val & 1) == 1 ? '1' : '0'; val >>= 1; } } @@ -387,32 +387,32 @@ stock bool F2_String_EndsWith(const char[] haystack, const char[] needle, bool c int needleLen = strlen(needle); if (needleLen > haystackLen) return false; - + for (int i = haystackLen - needleLen, j = 0; j < needleLen; i++, j++) { if (haystack[i] != needle[j] && (caseSensitive || CharToLower(haystack[i]) != CharToLower(needle[j]))) return false; } - + return true; } stock void F2_GetFileName(char[] filename, int maxsize, const char[] filepath) { - int lastBackSlash = FindCharInString(filepath, '\\', true); - int lastForwardSlash = FindCharInString(filepath, '/', true); - if (lastBackSlash == -1 && lastForwardSlash == -1) { - strcopy(filename, maxsize, filepath); - } else { - int pos = lastBackSlash > lastForwardSlash ? lastBackSlash : lastForwardSlash; - strcopy(filename, maxsize, filepath[pos + 1]); - } + int lastBackSlash = FindCharInString(filepath, '\\', true); + int lastForwardSlash = FindCharInString(filepath, '/', true); + if (lastBackSlash == -1 && lastForwardSlash == -1) { + strcopy(filename, maxsize, filepath); + } else { + int pos = lastBackSlash > lastForwardSlash ? lastBackSlash : lastForwardSlash; + strcopy(filename, maxsize, filepath[pos + 1]); + } } stock bool SteamID_Equal(const char[] id1, const char[] id2) { // Compares two SteamIDs in the form of STEAM_0:X:YYYY, [U:1:ZZZZ] or X:YYYY - + int steam1; int steam2; - + if (F2_String_StartsWith(id1, "STEAM_0:", false)) { int a = id1[8] == '1' ? 1 : 0; steam1 = StringToInt(id1[10]); @@ -429,7 +429,7 @@ stock bool SteamID_Equal(const char[] id1, const char[] id2) { return false; steam1 = steam1 * 2 + a; } - + if (F2_String_StartsWith(id2, "STEAM_0:", false)) { int a = id2[8] == '1' ? 1 : 0; steam2 = StringToInt(id2[10]); @@ -446,25 +446,23 @@ stock bool SteamID_Equal(const char[] id1, const char[] id2) { return false; steam2 = steam2 * 2 + a; } - + return steam1 == steam2; } stock bool SteamID_ToOldFormat(char[] oldID, int oldIDsize, const char[] newID) { // Converts [U:1:ZZZZ] to STEAM_0:X:YYYY - + int steamidNum; if (StringToIntEx(newID[5], steamidNum) != strlen(newID) - 5 - 1) return false; - + FormatEx(oldID, oldIDsize, "STEAM_0:%i:%i", steamidNum & 1, steamidNum >> 1); return true; } -stock bool GetClientAuthStringOld(int client, char[] steamid, int steamidSize, bool validate = true) -{ - if (!GetClientAuthId(client, AuthId_Steam2, steamid, steamidSize, validate)) - { +stock bool GetClientAuthStringOld(int client, char[] steamid, int steamidSize, bool validate = true) { + if (!GetClientAuthId(client, AuthId_Steam2, steamid, steamidSize, validate)) { strcopy(steamid, steamidSize, ""); return false; } @@ -480,7 +478,7 @@ stock bool GetClientAuthStringNew(int client, char[] steamid, int steamidSize, b strcopy(steamid, steamidSize, "BOT"); return true; } - + int accountID = GetSteamAccountID(client, validate); if (accountID == 0) { strcopy(steamid, steamidSize, ""); @@ -495,14 +493,14 @@ stock int GetClientBySteamId(const char[] auth, AuthIdType idtype, bool validate for (int client = 1; client <= MaxClients; client++) { if (!IsClientConnected(client)) continue; - + if (!GetClientAuthId(client, idtype, clientAuth, sizeof(clientAuth), validate)) continue; if (StrEqual(auth, clientAuth, false)) return client; } - + return -1; } @@ -539,16 +537,16 @@ stock MapType GetMapType() { pl: mapobj_cart_dispenser */ int ent = -1; - + if (FindEntityByClassname(-1, "tf_logic_arena") != -1) return MapType_Arena; - + if (FindEntityByClassname(-1, "tf_logic_koth") != -1) return MapType_Koth; - + if (FindEntityByClassname(-1, "item_teamflag") != -1) return MapType_CTF; - + ent = -1; int cartcount = 0; while ((ent = FindEntityByClassname(ent, "mapobj_cart_dispenser")) != -1) { @@ -558,19 +556,19 @@ stock MapType GetMapType() { return MapType_Payload; else if (cartcount > 1) return MapType_PayloadRace; - + ent = -1; int cpcount = 0; while ((ent = FindEntityByClassname(ent, "team_control_point")) != -1) { cpcount++; } - + ent = -1; int roundcount = 0; while ((ent = FindEntityByClassname(ent, "team_control_point_round")) != -1) { roundcount++; } - + ent = -1; bool switchonwin = false; bool scorepercapture = false; @@ -578,17 +576,17 @@ stock MapType GetMapType() { switchonwin = GetEntProp(ent, Prop_Data, "m_bSwitchTeamsOnWin", 4) == 1; scorepercapture = GetEntProp(ent, Prop_Data, "m_bScorePerCapture", 4) == 1; } - + if (cpcount > 0) { if (switchonwin == true) return MapType_AD; - + if (roundcount == 0) return MapType_5CP; - + if (scorepercapture == false) return MapType_TC; } - + return MapType_Unknown; } diff --git a/includes/kvizzle.inc b/includes/kvizzle.inc index 162adb7..076e3fa 100644 --- a/includes/kvizzle.inc +++ b/includes/kvizzle.inc @@ -16,45 +16,45 @@ Features: Public functions: -- KvizEscape(String:dest[], destLen, const String:src[]) +- KvizEscape(char[] dest, destLen, const char[] src) -- Handle:KvizCreate(const String:name[]) -- Handle:KvizCreateFromFile(const String:name[], const String:file[]) -- Handle:KvizCreateFromString(const String:name[], const String:data[]) -- bool:KvizToFile(Handle:kv, const String:file[], const String:kvizPath[] = "", any:...) -- bool:KvizClose(Handle:kv) { +- KeyValues KvizCreate(const char[] name) +- KeyValues KvizCreateFromFile(const char[] name, const char[] file) +- KeyValues KvizCreateFromString(const char[] name, const char[] data) +- bool KvizToFile(KeyValues kv, const char[] file, const char[] kvizPath = "", any ...) +- bool KvizClose(KeyValues kv) { -- bool:KvizGetStringExact(Handle:kv, String:value[], valueLen, const String:path[], any:...) -- bool:KvizGetString(Handle:kv, String:value[], valueLen, const String:defVal[], const String:path[], any:...) -- bool:KvizSetString(Handle:kv, const String:value[], const String:path[], any:...) +- bool KvizGetStringExact(KeyValues kv, char[] value, valueLen, const char[] path, any ...) +- bool KvizGetString(KeyValues kv, char[] value, valueLen, const char[] defVal, const char[] path, any ...) +- bool KvizSetString(KeyValues kv, const char[] value, const char[] path, any ...) -- bool:KvizGetNumExact(Handle:kv, &value, const String:path[], any:...) -- KvizGetNum(Handle:kv, defVal, const String:path[], any:...) -- bool:KvizSetNum(Handle:kv, value, const String:path[], any:...) +- bool KvizGetNumExact(KeyValues kv, &value, const char[] path, any ...) +- KvizGetNum(KeyValues kv, defVal, const char[] path, any ...) +- bool KvizSetNum(KeyValues kv, value, const char[] path, any ...) -- bool:KvizGetFloatExact(Handle:kv, &Float:value, const String:path[], any:...) -- Float:KvizGetFloat(Handle:kv, Float:defVal, const String:path[], any:...) -- bool:KvizSetFloat(Handle:kv, Float:value, const String:path[], any:...) +- bool KvizGetFloatExact(KeyValues kv, &float value, const char[] path, any ...) +- float KvizGetFloat(KeyValues kv, float defVal, const char[] path, any ...) +- bool KvizSetFloat(KeyValues kv, float value, const char[] path, any ...) -- bool:KvizGetVectorExact(Handle:kv, Float:value[3], const String:path[], any:...) -- bool:KvizGetVector(Handle:kv, Float:vec[3], const Float:defVal[3], const String:path[], any:...) -- bool:KvizSetVector(Handle:kv, Float:vec[3], const String:path[], any:...) +- bool KvizGetVectorExact(KeyValues kv, float value[3], const char[] path, any ...) +- bool KvizGetVector(KeyValues kv, float vec[3], const float defVal[3], const char[] path, any ...) +- bool KvizSetVector(KeyValues kv, float vec[3], const char[] path, any ...) -- bool:KvizGetColorExact(Handle:kv, &r, &g, &b, &a, const String:path[], any:...) -- bool:KvizGetColor(Handle:kv, &r, &g, &b, &a, defR, defG, defB, defA, const String:path[], any:...) -- bool:KvizSetColor(Handle:kv, r, g, b, a, const String:path[], any:...) +- bool KvizGetColorExact(KeyValues kv, &r, &g, &b, &a, const char[] path, any ...) +- bool KvizGetColor(KeyValues kv, &r, &g, &b, &a, defR, defG, defB, defA, const char[] path, any ...) +- bool KvizSetColor(KeyValues kv, r, g, b, a, const char[] path, any ...) -- bool:KvizGetUInt64Exact(Handle:kv, value[2], const String:path[], any:...) -- bool:KvizGetUInt64(Handle:kv, value[2], const defVal[2], const String:path[], any:...) -- bool:KvizSetUInt64(Handle:kv, value[2], const String:path[], any:...) +- bool KvizGetUInt64Exact(KeyValues kv, value[2], const char[] path, any ...) +- bool KvizGetUInt64(KeyValues kv, value[2], const defVal[2], const char[] path, any ...) +- bool KvizSetUInt64(KeyValues kv, value[2], const char[] path, any ...) -- bool:KvizDelete(Handle:kv, const String:path[], any:...) +- bool KvizDelete(KeyValues kv, const char[] path, any ...) -- bool:KvizExists(Handle:kv, const String:path[], any:...) +- bool KvizExists(KeyValues kv, const char[] path, any ...) -- bool:KvizJumpToKey(Handle:kv, bool:create, const String:path[], any:...) -- bool:KvizGoBack(Handle:kv) -- bool:KvizRewind(Handle:kv) +- bool KvizJumpToKey(KeyValues kv, bool create, const char[] path, any ...) +- bool KvizGoBack(KeyValues kv) +- bool KvizRewind(KeyValues kv) @@ -67,192 +67,203 @@ TODO: #endif #define _kvizzle_included -#define KVIZZLE_VERSION "1.1.0" +#define KVIZZLE_VERSION "1.1.0" // Customizable settings -const Kviz_iMaxContexts = 4; // Max number of simultaneously open Kvizzles. You can still use more, but the performance will degrade. However, if you set the number too high, then the performance will degrade when you have few Kvizzles opened simultaneously. -const Kviz_iMaxPathDepth = 32; // Max path depth... ie: aa.bb.cc.dd.ee(...).zz. Depth 32 equals 31 periods. +const int Kviz_iMaxContexts = 4; // Max number of simultaneously open Kvizzles. You can still use more, but the performance will degrade. However, if you set the number too high, then the performance will degrade when you have few Kvizzles opened simultaneously. +const int Kviz_iMaxPathDepth = 32; // Max path depth... ie: aa.bb.cc.dd.ee(...).zz. Depth 32 equals 31 periods. #define Kviz_iMaxTraversalStack 32 // Max size of the traversal stack. The size of the traversal stack gets increased by 1 every time you call KvizJumpToKey, and decreased by 1 every time you call KvizGoBack. You can set it to 0 by calling KvizRewind. -const Kviz_iMaxSectionLen = 128; // Max string length of a section in a Kv-file. +const int Kviz_iMaxSectionLen = 128; // Max string length of a section in a Kv-file. // --------------------- -const KVIZ_ACTION_NONE = 0; -const KVIZ_PSEUDO_FIRSTCHILD = 10; // :first-child -const KVIZ_PSEUDO_LASTCHILD = 11; // :last-child -const KVIZ_PSEUDO_NTHCHILD = 12; // :nth-child -const KVIZ_PSEUDO_ANYCHILD = 13; // :any-child -const KVIZ_PSEUDO_UP = 14; // :parent, :up +const int KVIZ_ACTION_NONE = 0; +const int KVIZ_PSEUDO_FIRSTCHILD = 10; // :first-child +const int KVIZ_PSEUDO_LASTCHILD = 11; // :last-child +const int KVIZ_PSEUDO_NTHCHILD = 12; // :nth-child +const int KVIZ_PSEUDO_ANYCHILD = 13; // :any-child +const int KVIZ_PSEUDO_UP = 14; // :parent, :up -const KVIZ_CHECK_MIN = 20; -const KVIZ_CHECK_HASVALUE = 21; // :has-value, :has-value(text) -const KVIZ_CHECK_HASVALUE_CI = 22; // :has-value-ci, :has-value-ci(text) +const int KVIZ_CHECK_MIN = 20; +const int KVIZ_CHECK_HASVALUE = 21; // :has-value, :has-value(text) +const int KVIZ_CHECK_HASVALUE_CI = 22; // :has-value-ci, :has-value-ci(text) const KVIZ_CHECK_MAX = 29; const KVIZ_ACTION_MIN = 30; -const KVIZ_ACTION_COUNT = 31; // :count -const KVIZ_ACTION_SECTIONNAME = 32; // :section-name -const KVIZ_ACTION_VALUE = 33; // :value +const KVIZ_ACTION_COUNT = 31; // :count +const KVIZ_ACTION_SECTIONNAME = 32; // :section-name +const KVIZ_ACTION_VALUE = 33; // :value const KVIZ_ACTION_VALUEORSECTION = 34; // :value-or-section enum struct KvizData { - Handle Kviz_hKv; - int Kviz_iPositionPathCount; - - int Kviz_iTraversalStack[Kviz_iMaxTraversalStack]; - int Kviz_iTraversalStackLen; - - int Kviz_iLRU; + KeyValues Kviz_hKv; + int Kviz_iPositionPathCount; + + int Kviz_iTraversalStack[Kviz_iMaxTraversalStack]; + int Kviz_iTraversalStackLen; + + int Kviz_iLRU; } KvizData Kviz[Kviz_iMaxContexts]; -new String:Kviz_sPositionPath[Kviz_iMaxContexts][Kviz_iMaxPathDepth][Kviz_iMaxSectionLen]; -new String:Kviz_sPositionPathPseudoClass[Kviz_iMaxContexts][Kviz_iMaxPathDepth][Kviz_iMaxSectionLen]; -new Kviz_sPositionPathNthChild[Kviz_iMaxContexts][Kviz_iMaxPathDepth]; -new Kviz_iCurrentContext = 0; -new Kviz_bInited = false; -new Handle:Kviz_hPseudoClassTrie = INVALID_HANDLE; -new Handle:Kviz_hArchiveKv; -new Handle:Kviz_hArchiveTraversalStack; -new Kviz_iLRUCounter = 0; +char Kviz_sPositionPath[Kviz_iMaxContexts][Kviz_iMaxPathDepth][Kviz_iMaxSectionLen]; +char Kviz_sPositionPathPseudoClass[Kviz_iMaxContexts][Kviz_iMaxPathDepth][Kviz_iMaxSectionLen]; +int Kviz_sPositionPathNthChild[Kviz_iMaxContexts][Kviz_iMaxPathDepth]; +int Kviz_iCurrentContext = 0; +int Kviz_bInited = false; +StringMap Kviz_hPseudoClassTrie = null; +ArrayList Kviz_hArchiveKv; +ArrayList Kviz_hArchiveTraversalStack; +int Kviz_iLRUCounter = 0; -/** +/** * Escapes a string, so it can be used in a Kvizzle path. * - * @param dest Buffer to store the escaped string in. Can be the same as src. - * @param destLen Length of dest. - * @param src Source string that needs to be escaped. + * @param dest Buffer to store the escaped string in. Can be the same as src. + * @param destLen Length of dest. + * @param src Source string that needs to be escaped. * @noreturn */ -stock KvizEscape(String:dest[], destLen, const String:src[]) { - decl String:buffer[destLen]; - new srcPos = 0, destPos = 0; - while (destPos + 1 < destLen && src[srcPos] != '\0') { - if (src[srcPos] == ':' || src[srcPos] == '.') { - buffer[destPos++] = '\\'; - if (destPos == destLen) - break; - } - buffer[destPos++] = src[srcPos++]; - } - buffer[destPos] = '\0'; - strcopy(dest, destLen, buffer); +stock void KvizEscape(char[] dest, int destLen, const char[] src) { + char[] buffer = new char[destLen]; + int srcPos = 0; + int destPos = 0; + while (destPos + 1 < destLen && src[srcPos] != '\0') { + if (src[srcPos] == ':' || src[srcPos] == '.') { + buffer[destPos++] = '\\'; + if (destPos == destLen) { + break; + } + } + buffer[destPos++] = src[srcPos++]; + } + buffer[destPos] = '\0'; + strcopy(dest, destLen, buffer); } -/** +/** * Creates an empty Kvizzle. * - * @param name The name of the root node. - * @return A new Kvizzle handle, or INVALID_HANDLE in case of error. + * @param name The name of the root node. + * @return A new Kvizzle handle, or null in case of error. */ -stock Handle:KvizCreate(const String:name[]) { - if (!Kviz_bInited) - KvizInit(); - - new Handle:kv = CreateKeyValues(name); - if (kv == INVALID_HANDLE) - return INVALID_HANDLE; - if (!KvizSwitchContext(kv, true)) { - CloseHandle(kv); - return INVALID_HANDLE; - } - return kv; +stock KeyValues KvizCreate(const char[] name) { + if (!Kviz_bInited) { + KvizInit(); + } + + KeyValues kv = new KeyValues(name); + if (kv == null) { + return null; + } + if (!KvizSwitchContext(kv, true)) { + delete kv; + return null; + } + return kv; } -/** +/** * Creates a Kvizzle based on a KeyValues file. * - * @param name The name of the root node. - * @param file The path for the KeyValues file. - * @return A new Kvizzle handle, or INVALID_HANDLE in case of error. + * @param name The name of the root node. + * @param file The path for the KeyValues file. + * @return A new Kvizzle handle, or null in case of error. */ -stock Handle:KvizCreateFromFile(const String:name[], const String:file[]) { - if (!Kviz_bInited) - KvizInit(); - - new Handle:kv = CreateKeyValues(name); - if (kv == INVALID_HANDLE) - return INVALID_HANDLE; - if (!FileToKeyValues(kv, file)) { - CloseHandle(kv); - return INVALID_HANDLE; - } - if (!KvizSwitchContext(kv, true)) { - CloseHandle(kv); - return INVALID_HANDLE; - } - return kv; +stock KeyValues KvizCreateFromFile(const char[] name, const char[] file) { + if (!Kviz_bInited) { + KvizInit(); + } + + KeyValues kv = new KeyValues(name); + if (kv == null) { + return null; + } + if (!kv.ImportFromFile(file)) { + delete kv; + return null; + } + if (!KvizSwitchContext(kv, true)) { + delete kv; + return null; + } + return kv; } -/** +/** * Creates a Kvizzle based on a string. * - * @param name The name of the root node. - * @param data The string containing the KeyValues data. - * @return A new Kvizzle handle, or INVALID_HANDLE in case of error. + * @param name The name of the root node. + * @param data The string containing the KeyValues data. + * @return A new Kvizzle handle, or null in case of error. */ -stock Handle:KvizCreateFromString(const String:name[], const String:data[]) { - if (!Kviz_bInited) - KvizInit(); - - new Handle:kv = KvizCreate(name); - if (kv == INVALID_HANDLE) - return INVALID_HANDLE; - - if (!StringToKeyValues(kv, data)) { - KvizClose(kv); - return INVALID_HANDLE; - } - - return kv; +stock KeyValues KvizCreateFromString(const char[] name, const char[] data) { + if (!Kviz_bInited) { + KvizInit(); + } + + KeyValues kv = KvizCreate(name); + if (kv == null) { + return null; + } + + if (!kv.ImportFromString(data)) { + KvizClose(kv); + return null; + } + + return kv; } -/** +/** * Saves the Kvizzle (using the given path as the root) to a file. * - * @param kv Kvizzle Handle. - * @param file Path to the file where the Kvizzle will be saved. - * @param kvizPath The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return A new Kvizzle handle, or INVALID_HANDLE in case of error. - * @error Invalid Handle. + * @param kv Kvizzle Handle. + * @param file Path to the file where the Kvizzle will be saved. + * @param kvizPath The Kvizzle path to be formatted. + * @param ... Variable number of format parameters. + * @return A new Kvizzle handle, or null in case of error. + * @error Invalid Handle. */ -stock bool:KvizToFile(Handle:kv, const String:file[], const String:kvizPath[] = "", any:...) { - if (!KvizSwitchContext(kv)) - return false; - - decl String:path2[256]; - VFormat(path2, sizeof(path2), kvizPath, 4); - new action; - if (!KvizGoto(kv, path2, false, action)) - return false; - - return KeyValuesToFile(kv, file); +stock bool KvizToFile(KeyValues kv, const char[] file, const char[] kvizPath = "", any ...) { + if (!KvizSwitchContext(kv)) { + return false; + } + + char path2[256]; + VFormat(path2, sizeof(path2), kvizPath, 4); + int action; + if (!KvizGoto(kv, path2, false, action)) { + return false; + } + + return kv.ExportToFile(file); } -/** +/** * Closes the Kvizzle. Must be called once for every KvizCreate/KvizCreateFromFile. * - * @param kv Kvizzle Handle. - * @return True if the Kvizzle was open and is now closed. Otherwise false (eg. wrong handle, or it was already closed). - * @error Invalid Handle. + * @param kv Kvizzle Handle. + * @return True if the Kvizzle was open and is now closed. Otherwise false (eg. wrong handle, or it was already closed). + * @error Invalid Handle. */ -stock bool:KvizClose(Handle:kv) { - if (!KvizSwitchContext(kv)) - return false; - - // Roll back to the top. Otherwise, the next time a Kviz is opened with the same context id, it will think it has already traversed whatever position it is currently it. Fixed 09/07/2015. - KvizRewind(kv); - KvizRollBack(kv, -1); - - KvizRemoveContext(kv); - CloseHandle(kv); - return true; +stock bool KvizClose(KeyValues kv) { + if (!KvizSwitchContext(kv)) { + return false; + } + + // Roll back to the top. Otherwise, the next time a Kviz is opened with the same context id, it will think it has already traversed whatever position it is currently it. Fixed 09/07/2015. + KvizRewind(kv); + KvizRollBack(kv, -1); + + KvizRemoveContext(kv); + delete kv; + return true; } @@ -260,101 +271,104 @@ stock bool:KvizClose(Handle:kv) { // Get/Set String // ------------------ -/** +/** * Retrieves a string value from the Kvizzle. * - * @param kv Kvizzle Handle. - * @param value Buffer to store the string value. - * @param valueLen Length of the buffer. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the path existed and the string value was retrieved. Otherwise false. - * @error Invalid Handle. + * @param kv Kvizzle Handle. + * @param value Buffer to store the string value. + * @param valueLen Length of the buffer. + * @param path The Kvizzle path to be formatted. + * @param ... Variable number of format parameters. + * @return True if the path existed and the string value was retrieved. Otherwise false. + * @error Invalid Handle. */ -stock bool:KvizGetStringExact(Handle:kv, String:value[], valueLen, const String:path[], any:...) { - if (!KvizSwitchContext(kv)) - return false; - - decl String:path2[256]; - VFormat(path2, sizeof(path2), path, 5); - new action; - if (KvizGoto(kv, path2, false, action)) { - switch (action) { - case KVIZ_ACTION_NONE, KVIZ_ACTION_VALUE: { - if (KvGetDataType(kv, NULL_STRING) == KvData_None) - return false; // We are at a section: "xyz" { ... } - KvGetString(kv, NULL_STRING, value, valueLen); - return true; - } - case KVIZ_ACTION_SECTIONNAME: { - KvGetSectionName(kv, value, valueLen); - return true; - } - case KVIZ_ACTION_COUNT: { - LogError("Kvizzle - KvizGetString does not support :count (in %s)", path); - return false; - } - default: - LogError("Kvizzle - Unknown action: %s / %i", path, action); - } - } - - return false; +stock bool KvizGetStringExact(KeyValues kv, char[] value, int valueLen, const char[] path, any ...) { + if (!KvizSwitchContext(kv)) { + return false; + } + + char path2[256]; + VFormat(path2, sizeof(path2), path, 5); + int action; + if (KvizGoto(kv, path2, false, action)) { + switch (action) { + case KVIZ_ACTION_NONE, KVIZ_ACTION_VALUE: { + if (kv.GetDataType(NULL_STRING) == KvData_None) { + return false; // We are at a section: "xyz" { ... } + } + kv.GetString(NULL_STRING, value, valueLen); + return true; + } + case KVIZ_ACTION_SECTIONNAME: { + kv.GetSectionName(value, valueLen); + return true; + } + case KVIZ_ACTION_COUNT: { + LogError("Kvizzle - KvizGetString does not support :count (in %s)", path); + return false; + } + default: + LogError("Kvizzle - Unknown action: %s / %i", path, action); + } + } + + return false; } -/** +/** * Retrieves a string value from the Kvizzle, or the given default value if not found. * - * @param kv Kvizzle Handle. - * @param value Buffer to store the string value. - * @param valueLen Length of the buffer. - * @param defVal The default value to be used. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the path existed and the string value was retrieved. False if the default value was used. - * @error Invalid Handle. + * @param kv Kvizzle Handle. + * @param value Buffer to store the string value. + * @param valueLen Length of the buffer. + * @param defVal The default value to be used. + * @param path The Kvizzle path to be formatted. + * @param ... Variable number of format parameters. + * @return True if the path existed and the string value was retrieved. False if the default value was used. + * @error Invalid Handle. */ -stock bool:KvizGetString(Handle:kv, String:value[], valueLen, const String:defVal[], const String:path[], any:...) { - decl String:path2[256]; - VFormat(path2, sizeof(path2), path, 6); - - if (!KvizGetStringExact(kv, value, valueLen, "%s", path2)) { - strcopy(value, valueLen, defVal); - return false; - } - - return true; +stock bool KvizGetString(KeyValues kv, char[] value, int valueLen, const char[] defVal, const char[] path, any ...) { + char path2[256]; + VFormat(path2, sizeof(path2), path, 6); + + if (!KvizGetStringExact(kv, value, valueLen, "%s", path2)) { + strcopy(value, valueLen, defVal); + return false; + } + + return true; } -/** +/** * Sets a string value in the Kvizzle at the given path. If the path does not exist, it is created. * - * @param kv Kvizzle Handle. - * @param value The value to be written. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True on succes. Otherwise false (eg. wrong handle). - * @error Invalid Handle. + * @param kv Kvizzle Handle. + * @param value The value to be written. + * @param path The Kvizzle path to be formatted. + * @param ... Variable number of format parameters. + * @return True on succes. Otherwise false (eg. wrong handle). + * @error Invalid Handle. */ -stock bool:KvizSetString(Handle:kv, const String:value[], const String:path[], any:...) { - if (!KvizSwitchContext(kv)) - return false; - - decl String:path2[256]; - VFormat(path2, sizeof(path2), path, 4); - new action; - if (KvizGoto(kv, path2, true, action)) { - if (action == KVIZ_ACTION_NONE || action == KVIZ_ACTION_VALUE) { - KvSetString(kv, NULL_STRING, value); - return true; - } else if (action == KVIZ_ACTION_SECTIONNAME) { - KvSetSectionName(kv, value); - return true; - } else { - LogError("Kvizzle - KvizSetString does not support action %i (in %s)", action, path); - } - } - return false; +stock bool KvizSetString(KeyValues kv, const char[] value, const char[] path, any ...) { + if (!KvizSwitchContext(kv)) { + return false; + } + + char path2[256]; + VFormat(path2, sizeof(path2), path, 4); + int action; + if (KvizGoto(kv, path2, true, action)) { + if (action == KVIZ_ACTION_NONE || action == KVIZ_ACTION_VALUE) { + kv.SetString(NULL_STRING, value); + return true; + } else if (action == KVIZ_ACTION_SECTIONNAME) { + kv.SetSectionName(value); + return true; + } else { + LogError("Kvizzle - KvizSetString does not support action %i (in %s)", action, path); + } + } + return false; } @@ -363,112 +377,118 @@ stock bool:KvizSetString(Handle:kv, const String:value[], const String:path[], a // Get/Set Num // ------------------ -/** +/** * Retrieves an integer value from the Kvizzle. * - * @param kv Kvizzle Handle. - * @param value Integer value, set by reference. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the path existed and its value was indeed an integer. Otherwise false. - * @error Invalid Handle. + * @param kv Kvizzle Handle. + * @param value Integer value, set by reference. + * @param path The Kvizzle path to be formatted. + * @param ... Variable number of format parameters. + * @return True if the path existed and its value was indeed an integer. Otherwise false. + * @error Invalid Handle. */ -stock bool:KvizGetNumExact(Handle:kv, &value, const String:path[], any:...) { - if (!KvizSwitchContext(kv)) - return false; - - decl String:strvalue[64]; - - decl String:path2[256]; - VFormat(path2, sizeof(path2), path, 4); - new action; - if (KvizGoto(kv, path2, false, action)) { - switch (action) { - case KVIZ_ACTION_NONE, KVIZ_ACTION_VALUE: { - if (KvGetDataType(kv, NULL_STRING) == KvData_None) - return false; // We are at a section: "xyz" { ... } - KvGetString(kv, NULL_STRING, strvalue, sizeof(strvalue)); - if (StringToIntEx(strvalue, value) == strlen(strvalue)) - return true; - return false; - } - case KVIZ_ACTION_SECTIONNAME: { - KvGetSectionName(kv, strvalue, sizeof(strvalue)); - if (StringToIntEx(strvalue, value) == strlen(strvalue)) - return true; - return false; - } - case KVIZ_ACTION_COUNT: { - value = 0; - if (KvGotoFirstSubKey(kv, false)) { - do { - value++; - } while (KvGotoNextKey(kv, false)); - KvGoBack(kv); - } - - return true; - } - default: - LogError("Kvizzle - Unknown action: %s / %i", path, action); - } - } - - return false; +stock bool KvizGetNumExact(KeyValues kv, int &value, const char[] path, any ...) { + if (!KvizSwitchContext(kv)) { + return false; + } + + char strvalue[64]; + + char path2[256]; + VFormat(path2, sizeof(path2), path, 4); + int action; + if (KvizGoto(kv, path2, false, action)) { + switch (action) { + case KVIZ_ACTION_NONE, KVIZ_ACTION_VALUE: { + if (kv.GetDataType(NULL_STRING) == KvData_None) { + return false; // We are at a section: "xyz" { ... } + } + kv.GetString(NULL_STRING, strvalue, sizeof(strvalue)); + if (StringToIntEx(strvalue, value) == strlen(strvalue)) { + return true; + } + return false; + } + case KVIZ_ACTION_SECTIONNAME: { + kv.GetSectionName(strvalue, sizeof(strvalue)); + if (StringToIntEx(strvalue, value) == strlen(strvalue)) { + return true; + } + return false; + } + case KVIZ_ACTION_COUNT: { + value = 0; + if (kv.GotoFirstSubKey(false)) { + do { + value++; + } while (kv.GotoNextKey(false)); + kv.GoBack(); + } + + return true; + } + default: + LogError("Kvizzle - Unknown action: %s / %i", path, action); + } + } + + return false; } -/** +/** * Retrieves an integer value from the Kvizzle, or the default value if the path does not exist. * - * @param kv Kvizzle Handle. - * @param defVal The default value. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return The retrieved integer value, if the path existed. Otherwise, the default value. - * @error Invalid Handle. + * @param kv Kvizzle Handle. + * @param defVal The default value. + * @param path The Kvizzle path to be formatted. + * @param ... Variable number of format parameters. + * @return The retrieved integer value, if the path existed. Otherwise, the default value. + * @error Invalid Handle. */ -stock KvizGetNum(Handle:kv, defVal, const String:path[], any:...) { - decl String:path2[256]; - VFormat(path2, sizeof(path2), path, 4); - - new value; - if (!KvizGetNumExact(kv, value, "%s", path2)) - return defVal; - - return value; +stock int KvizGetNum(KeyValues kv, int defVal, const char[] path, any ...) { + char path2[256]; + VFormat(path2, sizeof(path2), path, 4); + + int value; + if (!KvizGetNumExact(kv, value, "%s", path2)) { + return defVal; + } + + return value; } -/** +/** * Sets an integer value in the Kvizzle at the given path. If the path does not exist, it is created. * - * @param kv Kvizzle Handle. - * @param value The value to be written. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True on succes. Otherwise false (eg. wrong handle). - * @error Invalid Handle. + * @param kv Kvizzle Handle. + * @param value The value to be written. + * @param path The Kvizzle path to be formatted. + * @param ... Variable number of format parameters. + * @return True on succes. Otherwise false (eg. wrong handle). + * @error Invalid Handle. */ -stock bool:KvizSetNum(Handle:kv, value, const String:path[], any:...) { - if (!KvizSwitchContext(kv)) - return false; - - decl String:path2[256]; - VFormat(path2, sizeof(path2), path, 4); - new action; - if (KvizGoto(kv, path2, true, action)) { - if (action == KVIZ_ACTION_NONE || action == KVIZ_ACTION_VALUE) { - KvSetNum(kv, NULL_STRING, value); - return true; - } else if (action == KVIZ_ACTION_SECTIONNAME) { - decl String:strvalue[64]; - IntToString(value, strvalue, sizeof(strvalue)); - KvSetSectionName(kv, strvalue); - return true; - } else { - LogError("Kvizzle - KvizSetNum does not support action %i (in %s)", action, path); - } - } - return false; +stock bool KvizSetNum(KeyValues kv, int value, const char[] path, any ...) { + if (!KvizSwitchContext(kv)) { + return false; + } + + char path2[256]; + VFormat(path2, sizeof(path2), path, 4); + int action; + if (KvizGoto(kv, path2, true, action)) { + if (action == KVIZ_ACTION_NONE || action == KVIZ_ACTION_VALUE) { + kv.SetNum(NULL_STRING, value); + return true; + } else if (action == KVIZ_ACTION_SECTIONNAME) { + char strvalue[64]; + IntToString(value, strvalue, sizeof(strvalue)); + kv.SetSectionName(strvalue); + return true; + } else { + LogError("Kvizzle - KvizSetNum does not support action %i (in %s)", action, path); + } + } + return false; } @@ -478,95 +498,99 @@ stock bool:KvizSetNum(Handle:kv, value, const String:path[], any:...) { // Get/Set UInt64 // ------------------ -/** +/** * Retrieves an UInt64 value from the Kvizzle. * - * @param kv Kvizzle Handle. - * @param value Buffer to store the UInt64 value. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the path existed and the UInt64 value was retrieved. Otherwise false. - * @error Invalid Handle. + * @param kv Kvizzle Handle. + * @param value Buffer to store the UInt64 value. + * @param path The Kvizzle path to be formatted. + * @param ... Variable number of format parameters. + * @return True if the path existed and the UInt64 value was retrieved. Otherwise false. + * @error Invalid Handle. */ -stock bool:KvizGetUInt64Exact(Handle:kv, value[2], const String:path[], any:...) { - if (!KvizSwitchContext(kv)) - return false; - - decl String:path2[256]; - VFormat(path2, sizeof(path2), path, 4); - new action; - if (KvizGoto(kv, path2, false, action)) { - switch (action) { - case KVIZ_ACTION_NONE, KVIZ_ACTION_VALUE: { - if (KvGetDataType(kv, NULL_STRING) == KvData_None) - return false; // We are at a section: "xyz" { ... } - // It turns out, KvGetUInt64 doesn't use the default value, if the kv-value is malformatted. In that case it just returns {0,0}. - KvGetUInt64(kv, NULL_STRING, value); - return true; - } - case KVIZ_ACTION_SECTIONNAME: - LogError("Kvizzle - KvizGetUInt64 does not support :section-name (in %s)", path); - case KVIZ_ACTION_COUNT: - LogError("Kvizzle - KvizGetUInt64 does not support :count (in %s)", path); - default: - LogError("Kvizzle - Unknown action: %s / %i", path, action); - } - } - - return false; +stock bool KvizGetUInt64Exact(KeyValues kv, int value[2], const char[] path, any ...) { + if (!KvizSwitchContext(kv)) { + return false; + } + + char path2[256]; + VFormat(path2, sizeof(path2), path, 4); + int action; + if (KvizGoto(kv, path2, false, action)) { + switch (action) { + case KVIZ_ACTION_NONE, KVIZ_ACTION_VALUE: { + if (kv.GetDataType(NULL_STRING) == KvData_None) { + return false; // We are at a section: "xyz" { ... } + } + // It turns out, KvGetUInt64 doesn't use the default value, if the kv-value is malformatted. In that case it just returns {0, 0}. + kv.GetUInt64(NULL_STRING, value); + return true; + } + case KVIZ_ACTION_SECTIONNAME: + LogError("Kvizzle - KvizGetUInt64 does not support :section-name (in %s)", path); + case KVIZ_ACTION_COUNT: + LogError("Kvizzle - KvizGetUInt64 does not support :count (in %s)", path); + default: + LogError("Kvizzle - Unknown action: %s / %i", path, action); + } + } + + return false; } -/** +/** * Retrieves an UInt64 value from the Kvizzle, or the default value if the path does not exist. * - * @param kv Kvizzle Handle. - * @param value Buffer to store the UInt64 value. - * @param defVal Default value. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the path existed and the UInt64 value was retrieved. False if the default value was used. - * @error Invalid Handle. + * @param kv Kvizzle Handle. + * @param value Buffer to store the UInt64 value. + * @param defVal Default value. + * @param path The Kvizzle path to be formatted. + * @param ... Variable number of format parameters. + * @return True if the path existed and the UInt64 value was retrieved. False if the default value was used. + * @error Invalid Handle. */ -stock bool:KvizGetUInt64(Handle:kv, value[2], const defVal[2], const String:path[], any:...) { - decl String:path2[256]; - VFormat(path2, sizeof(path2), path, 5); - - if (!KvizGetUInt64Exact(kv, value, "%s", path2)) { - value[0] = defVal[0]; - value[1] = defVal[1]; - return false; - } - - return true; +stock bool KvizGetUInt64(KeyValues kv, int value[2], const defVal[2], const char[] path, any ...) { + char path2[256]; + VFormat(path2, sizeof(path2), path, 5); + + if (!KvizGetUInt64Exact(kv, value, "%s", path2)) { + value[0] = defVal[0]; + value[1] = defVal[1]; + return false; + } + + return true; } -/** +/** * Sets an UInt64 value in the Kvizzle at the given path. If the path does not exist, it is created. * - * @param kv Kvizzle Handle. - * @param value The value to be written. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True on succes. Otherwise false (eg. wrong handle). - * @error Invalid Handle. + * @param kv Kvizzle Handle. + * @param value The value to be written. + * @param path The Kvizzle path to be formatted. + * @param ... Variable number of format parameters. + * @return True on succes. Otherwise false (eg. wrong handle). + * @error Invalid Handle. */ -stock bool:KvizSetUInt64(Handle:kv, value[2], const String:path[], any:...) { - if (!KvizSwitchContext(kv)) - return false; - - decl String:path2[256]; - VFormat(path2, sizeof(path2), path, 4); - new action; - if (KvizGoto(kv, path2, true, action)) { - if (action == KVIZ_ACTION_NONE || action == KVIZ_ACTION_VALUE) { - KvSetUInt64(kv, NULL_STRING, value); - return true; - } else if (action == KVIZ_ACTION_SECTIONNAME) - LogError("Kvizzle - KvizSetUInt64 does not support :section-name (in %s)", path); - else - LogError("Kvizzle - KvizSetUInt64 does not support action %i (in %s)", action, path); - } - return false; +stock bool KvizSetUInt64(KeyValues kv, int value[2], const char[] path, any ...) { + if (!KvizSwitchContext(kv)) { + return false; + } + + char path2[256]; + VFormat(path2, sizeof(path2), path, 4); + int action; + if (KvizGoto(kv, path2, true, action)) { + if (action == KVIZ_ACTION_NONE || action == KVIZ_ACTION_VALUE) { + kv.SetUInt64(NULL_STRING, value); + return true; + } else if (action == KVIZ_ACTION_SECTIONNAME) { + LogError("Kvizzle - KvizSetUInt64 does not support :section-name (in %s)", path); + } else { + LogError("Kvizzle - KvizSetUInt64 does not support action %i (in %s)", action, path); + } + } + return false; } @@ -576,111 +600,115 @@ stock bool:KvizSetUInt64(Handle:kv, value[2], const String:path[], any:...) { // Get/Set Color // ------------------ -/** +/** * Retrieves a color value from the Kvizzle. * - * @param kv Kvizzle Handle. - * @param r Red value, set by reference. - * @param g Green value, set by reference. - * @param b Blue value, set by reference. - * @param a Alpha value, set by reference. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the path existed and the color value was retrieved. Otherwise false. - * @error Invalid Handle. + * @param kv Kvizzle Handle. + * @param r Red value, set by reference. + * @param g Green value, set by reference. + * @param b Blue value, set by reference. + * @param a Alpha value, set by reference. + * @param path The Kvizzle path to be formatted. + * @param ... Variable number of format parameters. + * @return True if the path existed and the color value was retrieved. Otherwise false. + * @error Invalid Handle. */ -stock bool:KvizGetColorExact(Handle:kv, &r, &g, &b, &a, const String:path[], any:...) { - if (!KvizSwitchContext(kv)) - return false; - - decl String:path2[256]; - VFormat(path2, sizeof(path2), path, 7); - new action; - if (KvizGoto(kv, path2, false, action)) { - switch (action) { - case KVIZ_ACTION_NONE, KVIZ_ACTION_VALUE: { - if (KvGetDataType(kv, NULL_STRING) == KvData_None) - return false; // We are at a section: "xyz" { ... } - KvGetColor(kv, NULL_STRING, r, g, b, a); - return true; - } - case KVIZ_ACTION_SECTIONNAME: - LogError("Kvizzle - KvizGetColor does not support :section-name (in %s)", path); - case KVIZ_ACTION_COUNT: - LogError("Kvizzle - KvizGetColor does not support :count (in %s)", path); - default: - LogError("Kvizzle - Unknown action: %s / %i", path, action); - } - } - - return false; +stock bool KvizGetColorExact(KeyValues kv, int &r, int &g, int &b, int &a, const char[] path, any ...) { + if (!KvizSwitchContext(kv)) { + return false; + } + + char path2[256]; + VFormat(path2, sizeof(path2), path, 7); + int action; + if (KvizGoto(kv, path2, false, action)) { + switch (action) { + case KVIZ_ACTION_NONE, KVIZ_ACTION_VALUE: { + if (kv.GetDataType(NULL_STRING) == KvData_None) { + return false; // We are at a section: "xyz" { ... } + } + kv.GetColor(NULL_STRING, r, g, b, a); + return true; + } + case KVIZ_ACTION_SECTIONNAME: + LogError("Kvizzle - KvizGetColor does not support :section-name (in %s)", path); + case KVIZ_ACTION_COUNT: + LogError("Kvizzle - KvizGetColor does not support :count (in %s)", path); + default: + LogError("Kvizzle - Unknown action: %s / %i", path, action); + } + } + + return false; } -/** +/** * Retrieves a color value from the Kvizzle, or the given default value if the path does not exist. * - * @param kv Kvizzle Handle. - * @param r Red value, set by reference. - * @param g Green value, set by reference. - * @param b Blue value, set by reference. - * @param a Alpha value, set by reference. - * @param defR Default red value. - * @param defG Default green value. - * @param defB Default blue value. - * @param defA Default alpha value. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the path existed and the color value was retrieved. False if the default values were used. - * @error Invalid Handle. + * @param kv Kvizzle Handle. + * @param r Red value, set by reference. + * @param g Green value, set by reference. + * @param b Blue value, set by reference. + * @param a Alpha value, set by reference. + * @param defR Default red value. + * @param defG Default green value. + * @param defB Default blue value. + * @param defA Default alpha value. + * @param path The Kvizzle path to be formatted. + * @param ... Variable number of format parameters. + * @return True if the path existed and the color value was retrieved. False if the default values were used. + * @error Invalid Handle. */ -stock bool:KvizGetColor(Handle:kv, &r, &g, &b, &a, defR, defG, defB, defA, const String:path[], any:...) { - decl String:path2[256]; - VFormat(path2, sizeof(path2), path, 11); - - if (!KvizGetColorExact(kv, r, g, b, a, "%s", path2)) { - r = defR; - g = defG; - b = defB; - a = defA; - return false; - } - - return true; +stock bool KvizGetColor(KeyValues kv, int &r, int &g, int &b, int &a, int defR, int defG, int defB, int defA, const char[] path, any ...) { + char path2[256]; + VFormat(path2, sizeof(path2), path, 11); + + if (!KvizGetColorExact(kv, r, g, b, a, "%s", path2)) { + r = defR; + g = defG; + b = defB; + a = defA; + return false; + } + + return true; } -/** +/** * Sets a color value in the Kvizzle at the given path. If the path does not exist, it is created. * - * @param kv Kvizzle Handle. - * @param r Red value. - * @param g Green value. - * @param b Blue value. - * @param a Alpha value. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True on succes. Otherwise false (eg. wrong handle). - * @error Invalid Handle. + * @param kv Kvizzle Handle. + * @param r Red value. + * @param g Green value. + * @param b Blue value. + * @param a Alpha value. + * @param path The Kvizzle path to be formatted. + * @param ... Variable number of format parameters. + * @return True on succes. Otherwise false (eg. wrong handle). + * @error Invalid Handle. */ -stock bool:KvizSetColor(Handle:kv, r, g, b, a, const String:path[], any:...) { - if (!KvizSwitchContext(kv)) - return false; - - decl String:path2[256]; - VFormat(path2, sizeof(path2), path, 7); - new action; - if (KvizGoto(kv, path2, true, action)) { - if (action == KVIZ_ACTION_NONE || action == KVIZ_ACTION_VALUE) { - KvSetColor(kv, NULL_STRING, r, g, b, a); - return true; - } else if (action == KVIZ_ACTION_SECTIONNAME) { - decl String:strvalue[64]; - FormatEx(strvalue, sizeof(strvalue), "%i %i %i %i", r, g, b, a); - KvSetSectionName(kv, strvalue); - return true; - } else - LogError("Kvizzle - KvizSetColor does not support action %i (in %s)", action, path); - } - return false; +stock bool KvizSetColor(KeyValues kv, int r, int g, int b, int a, const char[] path, any ...) { + if (!KvizSwitchContext(kv)) { + return false; + } + + char path2[256]; + VFormat(path2, sizeof(path2), path, 7); + int action; + if (KvizGoto(kv, path2, true, action)) { + if (action == KVIZ_ACTION_NONE || action == KVIZ_ACTION_VALUE) { + kv.SetColor(NULL_STRING, r, g, b, a); + return true; + } else if (action == KVIZ_ACTION_SECTIONNAME) { + char strvalue[64]; + FormatEx(strvalue, sizeof(strvalue), "%i %i %i %i", r, g, b, a); + kv.SetSectionName(strvalue); + return true; + } else { + LogError("Kvizzle - KvizSetColor does not support action %i (in %s)", action, path); + } + } + return false; } @@ -691,102 +719,109 @@ stock bool:KvizSetColor(Handle:kv, r, g, b, a, const String:path[], any:...) { // Get/Set Float // ------------------ -/** +/** * Retrieves a float value from the Kvizzle. * - * @param kv Kvizzle Handle. - * @param value The retrieved float value, set by reference. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the path existed and the retrieved value was indeed a float. Otherwise false. - * @error Invalid Handle. + * @param kv Kvizzle Handle. + * @param value The retrieved float value, set by reference. + * @param path The Kvizzle path to be formatted. + * @param ... Variable number of format parameters. + * @return True if the path existed and the retrieved value was indeed a float. Otherwise false. + * @error Invalid Handle. */ -stock bool:KvizGetFloatExact(Handle:kv, &Float:value, const String:path[], any:...) { - if (!KvizSwitchContext(kv)) - return false; - - decl String:strvalue[64]; - - decl String:path2[256]; - VFormat(path2, sizeof(path2), path, 4); - new action; - if (KvizGoto(kv, path2, false, action)) { - switch (action) { - case KVIZ_ACTION_NONE, KVIZ_ACTION_VALUE: { - if (KvGetDataType(kv, NULL_STRING) == KvData_None) - return false; // We are probably at a section: "xyz" { ... } - KvGetString(kv, NULL_STRING, strvalue, sizeof(strvalue)); - if (StringToFloatEx(strvalue, value) == strlen(strvalue)) - return true; - return false; - } - case KVIZ_ACTION_SECTIONNAME: { - KvGetSectionName(kv, strvalue, sizeof(strvalue)); - if (StringToFloatEx(strvalue, value) == strlen(strvalue)) - return true; - return false; - } - case KVIZ_ACTION_COUNT: - LogError("Kvizzle - KvizGetFloat does not support :count (in %s)", path); - default: - LogError("Kvizzle - Unknown action: %s / %i", path, action); - } - } - - return false; +stock bool KvizGetFloatExact(KeyValues kv, float &value, const char[] path, any ...) { + if (!KvizSwitchContext(kv)) { + return false; + } + + char strvalue[64]; + + char path2[256]; + VFormat(path2, sizeof(path2), path, 4); + int action; + if (KvizGoto(kv, path2, false, action)) { + switch (action) { + case KVIZ_ACTION_NONE, KVIZ_ACTION_VALUE: { + if (kv.GetDataType(NULL_STRING) == KvData_None) { + return false; // We are probably at a section: "xyz" { ... } + } + kv.GetString(NULL_STRING, strvalue, sizeof(strvalue)); + if (StringToFloatEx(strvalue, value) == strlen(strvalue)) { + return true; + } + return false; + } + case KVIZ_ACTION_SECTIONNAME: { + kv.GetSectionName(strvalue, sizeof(strvalue)); + if (StringToFloatEx(strvalue, value) == strlen(strvalue)) { + return true; + } + return false; + } + case KVIZ_ACTION_COUNT: + LogError("Kvizzle - KvizGetFloat does not support :count (in %s)", path); + default: + LogError("Kvizzle - Unknown action: %s / %i", path, action); + } + } + + return false; } -/** +/** * Retrieves a float value from the Kvizzle, or the given default value if the path does not exist. * - * @param kv Kvizzle Handle. - * @param defVal The default value. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return Returns the retrieved float value, or the default value if the path does not exist. - * @error Invalid Handle. + * @param kv Kvizzle Handle. + * @param defVal The default value. + * @param path The Kvizzle path to be formatted. + * @param ... Variable number of format parameters. + * @return Returns the retrieved float value, or the default value if the path does not exist. + * @error Invalid Handle. */ -stock Float:KvizGetFloat(Handle:kv, Float:defVal, const String:path[], any:...) { - decl String:path2[256]; - VFormat(path2, sizeof(path2), path, 4); - - new Float:value; - if (!KvizGetFloatExact(kv, value, "%s", path2)) - return defVal; - - return value; +stock float KvizGetFloat(KeyValues kv, float defVal, const char[] path, any ...) { + char path2[256]; + VFormat(path2, sizeof(path2), path, 4); + + float value; + if (!KvizGetFloatExact(kv, value, "%s", path2)) { + return defVal; + } + + return value; } -/** +/** * Sets a float value in the Kvizzle at the given path. If the path does not exist, it is created. * - * @param kv Kvizzle Handle. - * @param value The value to be written. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True on succes. Otherwise false (eg. wrong handle). - * @error Invalid Handle. + * @param kv Kvizzle Handle. + * @param value The value to be written. + * @param path The Kvizzle path to be formatted. + * @param ... Variable number of format parameters. + * @return True on succes. Otherwise false (eg. wrong handle). + * @error Invalid Handle. */ -stock bool:KvizSetFloat(Handle:kv, Float:value, const String:path[], any:...) { - if (!KvizSwitchContext(kv)) - return false; - - decl String:path2[256]; - VFormat(path2, sizeof(path2), path, 4); - new action; - if (KvizGoto(kv, path2, true, action)) { - if (action == KVIZ_ACTION_NONE || action == KVIZ_ACTION_VALUE) { - KvSetFloat(kv, NULL_STRING, value); - return true; - } else if (action == KVIZ_ACTION_SECTIONNAME) { - decl String:strvalue[64]; - FloatToString(value, strvalue, sizeof(strvalue)); - KvSetSectionName(kv, strvalue); - return true; - } else - LogError("Kvizzle - KvizSetFloat does not support action %i (in %s)", action, path); - } - return false; +stock bool KvizSetFloat(KeyValues kv, float value, const char[] path, any ...) { + if (!KvizSwitchContext(kv)) { + return false; + } + + char path2[256]; + VFormat(path2, sizeof(path2), path, 4); + int action; + if (KvizGoto(kv, path2, true, action)) { + if (action == KVIZ_ACTION_NONE || action == KVIZ_ACTION_VALUE) { + kv.SetFloat(NULL_STRING, value); + return true; + } else if (action == KVIZ_ACTION_SECTIONNAME) { + char strvalue[64]; + FloatToString(value, strvalue, sizeof(strvalue)); + kv.SetSectionName(strvalue); + return true; + } else { + LogError("Kvizzle - KvizSetFloat does not support action %i (in %s)", action, path); + } + } + return false; } @@ -796,241 +831,256 @@ stock bool:KvizSetFloat(Handle:kv, Float:value, const String:path[], any:...) { // Get/Set Vector // ------------------ -/** +/** * Retrieves a vector value from the Kvizzle. * - * @param kv Kvizzle Handle. - * @param value Buffer to store the vector value. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the path existed and the vector value was retrieved. Otherwise false. - * @error Invalid Handle. + * @param kv Kvizzle Handle. + * @param value Buffer to store the vector value. + * @param path The Kvizzle path to be formatted. + * @param ... Variable number of format parameters. + * @return True if the path existed and the vector value was retrieved. Otherwise false. + * @error Invalid Handle. */ -stock bool:KvizGetVectorExact(Handle:kv, Float:value[3], const String:path[], any:...) { - if (!KvizSwitchContext(kv)) - return false; - - decl String:strvalue[64]; - - decl String:path2[256]; - VFormat(path2, sizeof(path2), path, 4); - new action; - if (KvizGoto(kv, path2, false, action)) { - switch (action) { - case KVIZ_ACTION_NONE, KVIZ_ACTION_VALUE: { - if (KvGetDataType(kv, NULL_STRING) == KvData_None) - return false; // We are at a section: "xyz" { ... } - KvGetString(kv, NULL_STRING, strvalue, sizeof(strvalue)); - if (KvizStringToVector(strvalue, value)) - return true; - return false; - } - case KVIZ_ACTION_SECTIONNAME: { - KvGetSectionName(kv, strvalue, sizeof(strvalue)); - if (KvizStringToVector(strvalue, value)) - return true; - return false; - } - case KVIZ_ACTION_COUNT: - LogError("Kvizzle - KvizGetFloat does not support :count (in %s)", path); - default: - LogError("Kvizzle - Unknown action: %s / %i", path, action); - } - } - - return false; +stock bool KvizGetVectorExact(KeyValues kv, float value[3], const char[] path, any ...) { + if (!KvizSwitchContext(kv)) { + return false; + } + + char strvalue[64]; + + char path2[256]; + VFormat(path2, sizeof(path2), path, 4); + int action; + if (KvizGoto(kv, path2, false, action)) { + switch (action) { + case KVIZ_ACTION_NONE, KVIZ_ACTION_VALUE: { + if (kv.GetDataType(NULL_STRING) == KvData_None) { + return false; // We are at a section: "xyz" { ... } + } + kv.GetString(NULL_STRING, strvalue, sizeof(strvalue)); + if (KvizStringToVector(strvalue, value)) { + return true; + } + return false; + } + case KVIZ_ACTION_SECTIONNAME: { + kv.GetSectionName(strvalue, sizeof(strvalue)); + if (KvizStringToVector(strvalue, value)) { + return true; + } + return false; + } + case KVIZ_ACTION_COUNT: + LogError("Kvizzle - KvizGetFloat does not support :count (in %s)", path); + default: + LogError("Kvizzle - Unknown action: %s / %i", path, action); + } + } + + return false; } -/** +/** * Retrieves a vector value from the Kvizzle, or the default value if the path does not exist. * - * @param kv Kvizzle Handle. - * @param value Buffer to store the vector value. - * @param defVal The default value. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the path existed and the vector value was retrieved. False if the default value was used. - * @error Invalid Handle. + * @param kv Kvizzle Handle. + * @param value Buffer to store the vector value. + * @param defVal The default value. + * @param path The Kvizzle path to be formatted. + * @param ... Variable number of format parameters. + * @return True if the path existed and the vector value was retrieved. False if the default value was used. + * @error Invalid Handle. */ -stock bool:KvizGetVector(Handle:kv, Float:vec[3], const Float:defVal[3], const String:path[], any:...) { - decl String:path2[256]; - VFormat(path2, sizeof(path2), path, 5); - - if (!KvizGetVectorExact(kv, vec, "%s", path2)) { - vec[0] = defVal[0]; - vec[1] = defVal[1]; - vec[2] = defVal[2]; - return false; - } - - return true; +stock bool KvizGetVector(KeyValues kv, float vec[3], const float defVal[3], const char[] path, any ...) { + char path2[256]; + VFormat(path2, sizeof(path2), path, 5); + + if (!KvizGetVectorExact(kv, vec, "%s", path2)) { + vec[0] = defVal[0]; + vec[1] = defVal[1]; + vec[2] = defVal[2]; + return false; + } + + return true; } -/** +/** * Sets a vector value in the Kvizzle at the given path. If the path does not exist, it is created. * - * @param kv Kvizzle Handle. - * @param vec The value to be written. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True on succes. Otherwise false (eg. wrong handle). - * @error Invalid Handle. + * @param kv Kvizzle Handle. + * @param vec The value to be written. + * @param path The Kvizzle path to be formatted. + * @param ... Variable number of format parameters. + * @return True on succes. Otherwise false (eg. wrong handle). + * @error Invalid Handle. */ -stock bool:KvizSetVector(Handle:kv, Float:vec[3], const String:path[], any:...) { - if (!KvizSwitchContext(kv)) - return false; - - decl String:path2[256]; - VFormat(path2, sizeof(path2), path, 4); - new action; - if (KvizGoto(kv, path2, true, action)) { - if (action == KVIZ_ACTION_NONE || action == KVIZ_ACTION_VALUE) { - KvSetVector(kv, NULL_STRING, vec); - return true; - } else if (action == KVIZ_ACTION_SECTIONNAME) { - decl String:strvalue[Kviz_iMaxSectionLen]; - Format(strvalue, sizeof(strvalue), "%f %f %f", vec[0], vec[1], vec[2]); - KvSetSectionName(kv, strvalue); - return true; - } else - LogError("Kvizzle - KvizSetVector does not support action %i (in %s)", action, path); - } - return false; +stock bool KvizSetVector(KeyValues kv, float vec[3], const char[] path, any ...) { + if (!KvizSwitchContext(kv)) { + return false; + } + + char path2[256]; + VFormat(path2, sizeof(path2), path, 4); + int action; + if (KvizGoto(kv, path2, true, action)) { + if (action == KVIZ_ACTION_NONE || action == KVIZ_ACTION_VALUE) { + kv.SetVector(NULL_STRING, vec); + return true; + } else if (action == KVIZ_ACTION_SECTIONNAME) { + char strvalue[Kviz_iMaxSectionLen]; + Format(strvalue, sizeof(strvalue), "%f %f %f", vec[0], vec[1], vec[2]); + kv.SetSectionName(strvalue); + return true; + } else { + LogError("Kvizzle - KvizSetVector does not support action %i (in %s)", action, path); + } + } + return false; } -/** +/** * Deletes a node at the given path. * - * @param kv Kvizzle Handle. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the node was found and deleted. Otherwise false. - * @error Invalid Handle. + * @param kv Kvizzle Handle. + * @param path The Kvizzle path to be formatted. + * @param ... Variable number of format parameters. + * @return True if the node was found and deleted. Otherwise false. + * @error Invalid Handle. */ -stock bool:KvizDelete(Handle:kv, const String:path[], any:...) { - // NOTE: Be aware that when you delete something, the value of a pseudo-class might change. In that case, we will need to remove that pseudo-class from the path stack. However, for first-child, last-child and nth-child it is not a problem. any-child and parent are not saved on the path stack. - - if (!KvizSwitchContext(kv)) - return false; - - decl String:path2[256]; - VFormat(path2, sizeof(path2), path, 3); - new action; - if (!KvizGoto(kv, path2, false, action) || action != KVIZ_ACTION_NONE) - return false; - - new ret = KvDeleteThis(kv); - //PrintToServer("Delete=%i", ret); - if (ret == 1) { - new pathDepth = Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount - 1; - KvGetSectionName(kv, Kviz_sPositionPath[Kviz_iCurrentContext][pathDepth], sizeof(Kviz_sPositionPath[][])); - //Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][pathDepth][0] = '\0'; - //PrintToServer("new section: %s", Kviz_sPositionPath[Kviz_iCurrentContext][pathDepth]); - return true; - } else if (ret == -1) { - Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount--; - return true; - } else { - return false; - } +stock bool KvizDelete(KeyValues kv, const char[] path, any ...) { + // NOTE: Be aware that when you delete something, the value of a pseudo-class might change. In that case, we will need to remove that pseudo-class from the path stack. However, for first-child, last-child and nth-child it is not a problem. any-child and parent are not saved on the path stack. + + if (!KvizSwitchContext(kv)) { + return false; + } + + char path2[256]; + VFormat(path2, sizeof(path2), path, 3); + int action; + if (!KvizGoto(kv, path2, false, action) || action != KVIZ_ACTION_NONE) { + return false; + } + + int ret = kv.DeleteThis(); + //PrintToServer("Delete=%i", ret); + if (ret == 1) { + int pathDepth = Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount - 1; + kv.GetSectionName(Kviz_sPositionPath[Kviz_iCurrentContext][pathDepth], sizeof(Kviz_sPositionPath[][])); + //Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][pathDepth][0] = '\0'; + //PrintToServer("section %s", Kviz_sPositionPath[Kviz_iCurrentContext][pathDepth]); + return true; + } else if (ret == -1) { + Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount--; + return true; + } else { + return false; + } } -/** +/** * Jump to a key in the Kvizzle. All subsequent calls to Kv* will be relative to this path, until KvizGoBack is called. * - * @note This adds to the internal traversal stack. - * @param kv Kvizzle Handle. - * @param create If set to true, the path will be created if it does not exist. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the jump was successful. Otherwise false (eg. when create is false and the path does not exist). - * @error Invalid Handle. + * @note This adds to the internal traversal stack. + * @param kv Kvizzle Handle. + * @param create If set to true, the path will be created if it does not exist. + * @param path The Kvizzle path to be formatted. + * @param ... Variable number of format parameters. + * @return True if the jump was successful. Otherwise false (eg. when create is false and the path does not exist). + * @error Invalid Handle. */ -stock bool:KvizJumpToKey(Handle:kv, bool:create, const String:path[], any:...) { - if (!KvizSwitchContext(kv)) - return false; - - decl String:path2[256]; - VFormat(path2, sizeof(path2), path, 4); - - new action; - if (!KvizGoto(kv, path2, create, action, true) || action != KVIZ_ACTION_NONE) - return false; - - Kviz[Kviz_iCurrentContext].Kviz_iTraversalStack[Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen] = Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount; - Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen++; - return true; +stock bool KvizJumpToKey(KeyValues kv, bool create, const char[] path, any ...) { + if (!KvizSwitchContext(kv)) { + return false; + } + + char path2[256]; + VFormat(path2, sizeof(path2), path, 4); + + int action; + if (!KvizGoto(kv, path2, create, action, true) || action != KVIZ_ACTION_NONE) { + return false; + } + + Kviz[Kviz_iCurrentContext].Kviz_iTraversalStack[Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen] = Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount; + Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen++; + return true; } -/** +/** * Pops one element off the traversal stack. Should be used together with KvizJumpToKey. * - * @param kv Kvizzle Handle. - * @return True if an element was popped off the traversal stack. False if the traversal stack was empty. - * @error Invalid Handle. + * @param kv Kvizzle Handle. + * @return True if an element was popped off the traversal stack. False if the traversal stack was empty. + * @error Invalid Handle. */ -stock bool:KvizGoBack(Handle:kv) { - if (!KvizSwitchContext(kv)) - return false; - - if (Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen == 0) - return false; - - Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen--; - return true; +stock bool KvizGoBack(KeyValues kv) { + if (!KvizSwitchContext(kv)) { + return false; + } + + if (Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen == 0) { + return false; + } + + Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen--; + return true; } -/** +/** * Rewinds the traversal stack. * - * @param kv Kvizzle Handle. - * @return True if the traversal stack was successfully rewinded. Otherwise false (eg. wrong handle). - * @error Invalid Handle. + * @param kv Kvizzle Handle. + * @return True if the traversal stack was successfully rewinded. Otherwise false (eg. wrong handle). + * @error Invalid Handle. */ -stock bool:KvizRewind(Handle:kv) { - if (!KvizSwitchContext(kv)) - return false; - - while (KvizGoBack(kv)) { } - return true; +stock bool KvizRewind(KeyValues kv) { + if (!KvizSwitchContext(kv)) { + return false; + } + + while (KvizGoBack(kv)) { } + return true; } -/** +/** * Checks if a Kvizzle path exists. * - * @param kv Kvizzle Handle. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the path exists. Otherwise false. - * @error Invalid Handle. + * @param kv Kvizzle Handle. + * @param path The Kvizzle path to be formatted. + * @param ... Variable number of format parameters. + * @return True if the path exists. Otherwise false. + * @error Invalid Handle. */ -stock bool:KvizExists(Handle:kv, const String:path[], any:...) { - if (!KvizSwitchContext(kv)) - return false; - - decl String:path2[256]; - VFormat(path2, sizeof(path2), path, 3); - - new action; - if (KvizGoto(kv, path2, false, action)) { - if (action != KVIZ_ACTION_NONE) - LogError("Kvizzle - KvizExists doesn't support actions (%s)", path); - - return true; - } - - return false; +stock bool KvizExists(KeyValues kv, const char[] path, any ...) { + if (!KvizSwitchContext(kv)) { + return false; + } + + char path2[256]; + VFormat(path2, sizeof(path2), path, 3); + + int action; + if (KvizGoto(kv, path2, false, action)) { + if (action != KVIZ_ACTION_NONE) { + LogError("Kvizzle - KvizExists doesn't support actions (%s)", path); + } + + return true; + } + + return false; } // An alias for KvizExists -stock bool:KvizExist(Handle:kv, const String:path[], any:...) { - decl String:path2[256]; - VFormat(path2, sizeof(path2), path, 3); - - return KvizExists(kv, "%s", path2); +stock bool KvizExist(KeyValues kv, const char[] path, any ...) { + char path2[256]; + VFormat(path2, sizeof(path2), path, 3); + + return KvizExists(kv, "%s", path2); } @@ -1043,471 +1093,495 @@ stock bool:KvizExist(Handle:kv, const String:path[], any:...) { // Private functions // ------------------ -stock KvizInit() { - if (Kviz_bInited) - return; - Kviz_bInited = true; - - Kviz_hPseudoClassTrie = CreateTrie(); - SetTrieValue(Kviz_hPseudoClassTrie, ":first-child", KVIZ_PSEUDO_FIRSTCHILD); - SetTrieValue(Kviz_hPseudoClassTrie, ":last-child", KVIZ_PSEUDO_LASTCHILD); - SetTrieValue(Kviz_hPseudoClassTrie, ":nth-child", KVIZ_PSEUDO_NTHCHILD); - SetTrieValue(Kviz_hPseudoClassTrie, ":any-child", KVIZ_PSEUDO_ANYCHILD); - SetTrieValue(Kviz_hPseudoClassTrie, ":up", KVIZ_PSEUDO_UP); - SetTrieValue(Kviz_hPseudoClassTrie, ":parent", KVIZ_PSEUDO_UP); - - SetTrieValue(Kviz_hPseudoClassTrie, ":has-value", KVIZ_CHECK_HASVALUE); - SetTrieValue(Kviz_hPseudoClassTrie, ":has-value-ci", KVIZ_CHECK_HASVALUE_CI); - - SetTrieValue(Kviz_hPseudoClassTrie, ":count", KVIZ_ACTION_COUNT); - SetTrieValue(Kviz_hPseudoClassTrie, ":section-name", KVIZ_ACTION_SECTIONNAME); - SetTrieValue(Kviz_hPseudoClassTrie, ":key", KVIZ_ACTION_SECTIONNAME); - SetTrieValue(Kviz_hPseudoClassTrie, ":value", KVIZ_ACTION_VALUE); - SetTrieValue(Kviz_hPseudoClassTrie, ":value-or-section", KVIZ_ACTION_VALUEORSECTION); - - Kviz_hArchiveKv = CreateArray(); - Kviz_hArchiveTraversalStack = CreateArray(Kviz_iMaxTraversalStack+1); +stock void KvizInit() { + if (Kviz_bInited) { + return; + } + Kviz_bInited = true; + + Kviz_hPseudoClassTrie = new StringMap(); + Kviz_hPseudoClassTrie.SetValue(":first-child", KVIZ_PSEUDO_FIRSTCHILD); + Kviz_hPseudoClassTrie.SetValue(":last-child", KVIZ_PSEUDO_LASTCHILD); + Kviz_hPseudoClassTrie.SetValue(":nth-child", KVIZ_PSEUDO_NTHCHILD); + Kviz_hPseudoClassTrie.SetValue(":any-child", KVIZ_PSEUDO_ANYCHILD); + Kviz_hPseudoClassTrie.SetValue(":up", KVIZ_PSEUDO_UP); + Kviz_hPseudoClassTrie.SetValue(":parent", KVIZ_PSEUDO_UP); + + Kviz_hPseudoClassTrie.SetValue(":has-value", KVIZ_CHECK_HASVALUE); + Kviz_hPseudoClassTrie.SetValue(":has-value-ci", KVIZ_CHECK_HASVALUE_CI); + + Kviz_hPseudoClassTrie.SetValue(":count", KVIZ_ACTION_COUNT); + Kviz_hPseudoClassTrie.SetValue(":section-name", KVIZ_ACTION_SECTIONNAME); + Kviz_hPseudoClassTrie.SetValue(":key", KVIZ_ACTION_SECTIONNAME); + Kviz_hPseudoClassTrie.SetValue(":value", KVIZ_ACTION_VALUE); + Kviz_hPseudoClassTrie.SetValue(":value-or-section", KVIZ_ACTION_VALUEORSECTION); + + Kviz_hArchiveKv = new ArrayList(); + Kviz_hArchiveTraversalStack = new ArrayList(Kviz_iMaxTraversalStack+1); } -stock bool:KvizGoto(Handle:kv, const String:path[], bool:create, &action, bool:jumpToValues = true, depth = 0) { - action = KVIZ_ACTION_NONE; - if (path[0] == '\0') { - // Go to root - new rootDepth = -1; - if (Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen != 0) - rootDepth = Kviz[Kviz_iCurrentContext].Kviz_iTraversalStack[Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen - 1] - 1; - KvizRollBack(kv, rootDepth); - return true; - } else if (Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen != 0) { - return KvizGoto2(kv, path, create, action, jumpToValues, Kviz[Kviz_iCurrentContext].Kviz_iTraversalStack[Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen - 1]); - } else { - return KvizGoto2(kv, path, create, action, jumpToValues, 0); - } +stock bool KvizGoto(KeyValues kv, const char[] path, bool create, int &action, bool jumpToValues = true) { + action = KVIZ_ACTION_NONE; + if (path[0] == '\0') { + // Go to root + int rootDepth = -1; + if (Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen != 0) { + rootDepth = Kviz[Kviz_iCurrentContext].Kviz_iTraversalStack[Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen - 1] - 1; + } + KvizRollBack(kv, rootDepth); + return true; + } else if (Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen != 0) { + return KvizGoto2(kv, path, create, action, jumpToValues, Kviz[Kviz_iCurrentContext].Kviz_iTraversalStack[Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen - 1]); + } else { + return KvizGoto2(kv, path, create, action, jumpToValues, 0); + } } -stock bool:KvizGoto2(Handle:kv, const String:path[], bool:create, &action, bool:jumpToValues, depth) { - decl String:key[Kviz_iMaxSectionLen]; - new endPos = 0, destPos = 0; - while (path[endPos] != '.' && path[endPos] != '\0' && !(path[endPos] == ':' && endPos != 0)) { - if (path[endPos] == '\\') { - if (path[endPos+1] == '\0') { - key[destPos++] = path[endPos++]; - } else { - endPos++; - key[destPos++] = path[endPos++]; - } - } else { - key[destPos++] = path[endPos++]; - } - } - - if (endPos == 0) - return false; - - key[destPos] = '\0'; - - new bool:isPseudoClass = key[0] == ':'; - new bool:isAction = false, bool:isCheck = false; - new pseudoClass; - decl String:pseudoClassTag[128]; - decl String:pseudoClassParms[128]; - new bool:pseudoClassHasParm = false; - new pseudoParmInt; - - if (isPseudoClass) { - new pseudoClassParmsLen = 0; - new pseudoClassTagLen = 0; - for (new i = 0; i < sizeof(key) && key[i] != '\0'; i++) { - if (key[i] == '(') { - pseudoClassHasParm = true; - key[i] = '\0'; - } else if (pseudoClassHasParm) { - if (key[i] == ')') { - break; - } else { - pseudoClassParms[pseudoClassParmsLen++] = key[i]; - } - } else { - pseudoClassTag[i] = key[i]; - pseudoClassTagLen++; - } - } - pseudoClassTag[pseudoClassTagLen] = '\0'; - pseudoClassParms[pseudoClassParmsLen] = '\0'; - - if (!GetTrieValue(Kviz_hPseudoClassTrie, pseudoClassTag, pseudoClass)) { - LogError("Kvizzle - Unknown pseudo class: %s", key); - return false; - } - - if (pseudoClassParmsLen != 0) - pseudoParmInt = StringToInt(pseudoClassParms); - - if (pseudoClass == KVIZ_PSEUDO_FIRSTCHILD) { - pseudoClassTag = "nth-child"; - pseudoClass = KVIZ_PSEUDO_NTHCHILD; - pseudoParmInt = 1; - strcopy(key, sizeof(key), "nth-child(1)"); - } - - isAction = pseudoClass >= KVIZ_ACTION_MIN; - isCheck = pseudoClass >= KVIZ_CHECK_MIN && pseudoClass <= KVIZ_CHECK_MAX; - } - - new bool:alreadyInPosition = false; - if (isAction) { - alreadyInPosition = true; - depth--; // We are not going any deeper in this step. - } else if (isCheck) { - alreadyInPosition = true; - depth--; // We are not going any deeper in this step. - } else { - if (isPseudoClass && pseudoClass == KVIZ_PSEUDO_UP) { - new rootDepth = -1; - new traversalStackLen = Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen; - if (traversalStackLen != 0) - rootDepth = Kviz[Kviz_iCurrentContext].Kviz_iTraversalStack[traversalStackLen - 1] - 1; - alreadyInPosition = true; - depth -= 2; - if (depth < rootDepth) { - LogError("Kvizzle - :up used on root node (%s)", path); - depth = rootDepth; - } - } else if (depth < Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount) { - if (isPseudoClass) { - if (pseudoClass == KVIZ_PSEUDO_NTHCHILD && Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth] != 0) { - new currentChildNum = Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth]; - new newChildNum = pseudoParmInt; - if (currentChildNum == newChildNum) { - alreadyInPosition = true; - } else if (currentChildNum < newChildNum) { - KvizRollBack(kv, depth); - while (currentChildNum < newChildNum) { - if (!KvGotoNextKey(kv, !jumpToValues)) { - //PrintToServer("Fast nth-child: Not found - setting to :nth-child(%i)", currentChildNum); - KvGetSectionName(kv, Kviz_sPositionPath[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPath[][])); - Format(Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPathPseudoClass[][]), ":nth-child(%i)", currentChildNum); - Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth] = currentChildNum; - return false; - } - currentChildNum++; - //PrintToServer("Fast nth-child: GotoNextKey(%i)", currentChildNum); - } - KvGetSectionName(kv, Kviz_sPositionPath[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPath[][])); - strcopy(Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPathPseudoClass[][]), key); - Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth] = currentChildNum; - alreadyInPosition = true; - } else { - KvizRollBack(kv, depth-1); - } - } else if (pseudoClass != KVIZ_PSEUDO_ANYCHILD && StrEqual(Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][depth], key)) { - alreadyInPosition = true; - } else { - KvizRollBack(kv, depth-1); - } - } else { - if (StrEqual(Kviz_sPositionPath[Kviz_iCurrentContext][depth], key)) { - alreadyInPosition = true; - } else { - KvizRollBack(kv, depth-1); - } - } - } - } - - if (!alreadyInPosition) { - if (isPseudoClass) { - switch (pseudoClass) { - case KVIZ_PSEUDO_LASTCHILD: { - //PrintToServer("Go to last child"); - if (!KvGotoFirstSubKey(kv, !jumpToValues)) - return false; - while (KvGotoNextKey(kv, !jumpToValues)) { } - - KvGetSectionName(kv, Kviz_sPositionPath[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPath[][])); - strcopy(Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPathPseudoClass[][]), key); - Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth] = 0; - Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount++; - } - case KVIZ_PSEUDO_NTHCHILD: { - //PrintToServer("Go to %ith child", pseudoParmInt); - if (!KvGotoFirstSubKey(kv, !jumpToValues)) - return false; - - new currentChildNum = 0; - new bool:childFound = false; - do { - currentChildNum++; - if (currentChildNum == pseudoParmInt) { - childFound = true; - break; - } - } while (KvGotoNextKey(kv, !jumpToValues)); - - if (!childFound) { - KvGetSectionName(kv, Kviz_sPositionPath[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPath[][])); - Format(Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPathPseudoClass[][]), ":nth-child(%i)", currentChildNum); - Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth] = currentChildNum; - Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount++; - return false; - } - - KvGetSectionName(kv, Kviz_sPositionPath[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPath[][])); - strcopy(Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPathPseudoClass[][]), key); - Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth] = pseudoParmInt; - Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount++; - } - case KVIZ_PSEUDO_ANYCHILD: { - if (!KvGotoFirstSubKey(kv, !jumpToValues)) - return false; - - Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount++; - - new currentChildNum = 0; - do { - currentChildNum++; - - // We must set the position path values before calling KvGoto recursively. This is because :up should be able to overwrite the values. - KvGetSectionName(kv, Kviz_sPositionPath[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPath[][])); - Format(Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPathPseudoClass[][]), ":nth-child(%i)", currentChildNum); - Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth] = currentChildNum; - - if (path[endPos] == '\0') { - KvizRollBack(kv, depth); - return true; - } - - if (KvizGoto2(kv, path[path[endPos] == ':' ? endPos : endPos+1], create, action, jumpToValues, depth + 1)) - return true; - - KvizRollBack(kv, depth); - } while (KvGotoNextKey(kv, !jumpToValues)); - - return false; - } - default: - KvizThrowError(kv, "Unknown pseudoClass (%s / %i) - Please contact F2", key, pseudoClass); - } - } else { - //PrintToServer("JumpToKey: %s", key); - if (!KvJumpToKey(kv, key, create)) - return false; - - strcopy(Kviz_sPositionPath[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPath[][]), key); - Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][depth][0] = '\0'; - Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount++; - Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth] = 0; // We jumped directly to a subkey - we don't know which number child it is. Fixed 06/07/2015. - } - } else if (isAction) { - action = pseudoClass; - } else if (isCheck) { - switch (pseudoClass) { - case KVIZ_CHECK_HASVALUE, KVIZ_CHECK_HASVALUE_CI: { - if (KvGetDataType(kv, NULL_STRING) == KvData_None) - return false; - - if (pseudoClassHasParm) { - // :has-value .. check that the node has the specified string value - decl String:strvalue[256]; - KvGetString(kv, NULL_STRING, strvalue, sizeof(strvalue)); - if (!StrEqual(strvalue, pseudoClassParms, pseudoClass == KVIZ_CHECK_HASVALUE)) - return false; - } else { - // :has-value .. check that the node has a value (ie. it is not a section) - // --- we already did that above. - } - } - default: - KvizThrowError(kv, "Unknown pseudoClass (%s / %i) - Please contact F2", key, pseudoClass); - } - } - - if (path[endPos] == '\0') { - KvizRollBack(kv, depth); // If we were in "A.B.C" before, and we are now navigating to "A.B", then make sure to remove "C" from the stack. - - if (action == KVIZ_ACTION_VALUEORSECTION) { - new KvDataTypes:dataType = KvGetDataType(kv, NULL_STRING); - if (dataType == KvData_None) - action = KVIZ_ACTION_SECTIONNAME; - else - action = KVIZ_ACTION_VALUE; - } - return true; - } - - if (action != KVIZ_ACTION_NONE) - return false; // You cannot use an action in the middle of a path - - if (!KvizGoto2(kv, path[path[endPos] == ':' ? endPos : endPos+1], create, action, jumpToValues, depth + 1)) - return false; - - return true; +stock bool KvizGoto2(KeyValues kv, const char[] path, bool create, int &action, bool jumpToValues, int depth) { + char key[Kviz_iMaxSectionLen]; + int endPos = 0; + int destPos = 0; + while (path[endPos] != '.' && path[endPos] != '\0' && !(path[endPos] == ':' && endPos != 0)) { + if (path[endPos] == '\\') { + if (path[endPos+1] == '\0') { + key[destPos++] = path[endPos++]; + } else { + endPos++; + key[destPos++] = path[endPos++]; + } + } else { + key[destPos++] = path[endPos++]; + } + } + + if (endPos == 0) { + return false; + } + + key[destPos] = '\0'; + + bool isPseudoClass = key[0] == ':'; + bool isAction = false; + bool isCheck = false; + int pseudoClass; + char pseudoClassTag[128]; + char pseudoClassParms[128]; + bool pseudoClassHasParm = false; + int pseudoParmInt; + + if (isPseudoClass) { + int pseudoClassParmsLen = 0; + int pseudoClassTagLen = 0; + for (int i = 0; i < sizeof(key) && key[i] != '\0'; i++) { + if (key[i] == '(') { + pseudoClassHasParm = true; + key[i] = '\0'; + } else if (pseudoClassHasParm) { + if (key[i] == ')') { + break; + } else { + pseudoClassParms[pseudoClassParmsLen++] = key[i]; + } + } else { + pseudoClassTag[i] = key[i]; + pseudoClassTagLen++; + } + } + pseudoClassTag[pseudoClassTagLen] = '\0'; + pseudoClassParms[pseudoClassParmsLen] = '\0'; + + if (!Kviz_hPseudoClassTrie.GetValue(pseudoClassTag, pseudoClass)) { + LogError("Kvizzle - Unknown pseudo class: %s", key); + return false; + } + + if (pseudoClassParmsLen != 0) { + pseudoParmInt = StringToInt(pseudoClassParms); + } + + if (pseudoClass == KVIZ_PSEUDO_FIRSTCHILD) { + pseudoClassTag = "nth-child"; + pseudoClass = KVIZ_PSEUDO_NTHCHILD; + pseudoParmInt = 1; + strcopy(key, sizeof(key), "nth-child(1)"); + } + + isAction = pseudoClass >= KVIZ_ACTION_MIN; + isCheck = pseudoClass >= KVIZ_CHECK_MIN && pseudoClass <= KVIZ_CHECK_MAX; + } + + bool alreadyInPosition = false; + if (isAction) { + alreadyInPosition = true; + depth--; // We are not going any deeper in this step. + } else if (isCheck) { + alreadyInPosition = true; + depth--; // We are not going any deeper in this step. + } else { + if (isPseudoClass && pseudoClass == KVIZ_PSEUDO_UP) { + int rootDepth = -1; + int traversalStackLen = Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen; + if (traversalStackLen != 0) { + rootDepth = Kviz[Kviz_iCurrentContext].Kviz_iTraversalStack[traversalStackLen - 1] - 1; + } + alreadyInPosition = true; + depth -= 2; + if (depth < rootDepth) { + LogError("Kvizzle - :up used on root node (%s)", path); + depth = rootDepth; + } + } else if (depth < Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount) { + if (isPseudoClass) { + if (pseudoClass == KVIZ_PSEUDO_NTHCHILD && Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth] != 0) { + int currentChildNum = Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth]; + int newChildNum = pseudoParmInt; + if (currentChildNum == newChildNum) { + alreadyInPosition = true; + } else if (currentChildNum < newChildNum) { + KvizRollBack(kv, depth); + while (currentChildNum < newChildNum) { + if (!kv.GotoNextKey(!jumpToValues)) { + //PrintToServer("Fast nth-child: Not found - setting to :nth-child(%i)", currentChildNum); + kv.GetSectionName(Kviz_sPositionPath[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPath[][])); + Format(Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPathPseudoClass[][]), ":nth-child(%i)", currentChildNum); + Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth] = currentChildNum; + return false; + } + currentChildNum++; + //PrintToServer("Fast nth-child: GotoNextKey(%i)", currentChildNum); + } + kv.GetSectionName(Kviz_sPositionPath[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPath[][])); + strcopy(Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPathPseudoClass[][]), key); + Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth] = currentChildNum; + alreadyInPosition = true; + } else { + KvizRollBack(kv, depth-1); + } + } else if (pseudoClass != KVIZ_PSEUDO_ANYCHILD && StrEqual(Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][depth], key)) { + alreadyInPosition = true; + } else { + KvizRollBack(kv, depth-1); + } + } else { + if (StrEqual(Kviz_sPositionPath[Kviz_iCurrentContext][depth], key)) { + alreadyInPosition = true; + } else { + KvizRollBack(kv, depth-1); + } + } + } + } + + if (!alreadyInPosition) { + if (isPseudoClass) { + switch (pseudoClass) { + case KVIZ_PSEUDO_LASTCHILD: { + //PrintToServer("Go to last child"); + if (!kv.GotoFirstSubKey(!jumpToValues)) { + return false; + } + while (kv.GotoNextKey(!jumpToValues)) { } + + kv.GetSectionName(Kviz_sPositionPath[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPath[][])); + strcopy(Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPathPseudoClass[][]), key); + Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth] = 0; + Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount++; + } + case KVIZ_PSEUDO_NTHCHILD: { + //PrintToServer("Go to %ith child", pseudoParmInt); + if (!kv.GotoFirstSubKey(!jumpToValues)) { + return false; + } + + int currentChildNum = 0; + bool childFound = false; + do { + currentChildNum++; + if (currentChildNum == pseudoParmInt) { + childFound = true; + break; + } + } while (kv.GotoNextKey(!jumpToValues)); + + if (!childFound) { + kv.GetSectionName(Kviz_sPositionPath[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPath[][])); + Format(Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPathPseudoClass[][]), ":nth-child(%i)", currentChildNum); + Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth] = currentChildNum; + Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount++; + return false; + } + + kv.GetSectionName(Kviz_sPositionPath[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPath[][])); + strcopy(Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPathPseudoClass[][]), key); + Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth] = pseudoParmInt; + Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount++; + } + case KVIZ_PSEUDO_ANYCHILD: { + if (!kv.GotoFirstSubKey(!jumpToValues)) { + return false; + } + + Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount++; + + int currentChildNum = 0; + do { + currentChildNum++; + + // We must set the position path values before calling KvGoto recursively. This is because :up should be able to overwrite the values. + kv.GetSectionName(Kviz_sPositionPath[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPath[][])); + Format(Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPathPseudoClass[][]), ":nth-child(%i)", currentChildNum); + Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth] = currentChildNum; + + if (path[endPos] == '\0') { + KvizRollBack(kv, depth); + return true; + } + + if (KvizGoto2(kv, path[path[endPos] == ':' ? endPos : endPos+1], create, action, jumpToValues, depth + 1)) { + return true; + } + + KvizRollBack(kv, depth); + } while (kv.GotoNextKey(!jumpToValues)); + + return false; + } + default: + KvizThrowError(kv, "Unknown pseudoClass (%s / %i) - Please contact F2", key, pseudoClass); + } + } else { + //PrintToServer("JumpToKey: %s", key); + if (!kv.JumpToKey(key, create)) { + return false; + } + + strcopy(Kviz_sPositionPath[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPath[][]), key); + Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][depth][0] = '\0'; + Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount++; + Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth] = 0; // We jumped directly to a subkey - we don't know which number child it is. Fixed 06/07/2015. + } + } else if (isAction) { + action = pseudoClass; + } else if (isCheck) { + switch (pseudoClass) { + case KVIZ_CHECK_HASVALUE, KVIZ_CHECK_HASVALUE_CI: { + if (kv.GetDataType(NULL_STRING) == KvData_None) { + return false; + } + + if (pseudoClassHasParm) { + // :has-value .. check that the node has the specified string value + char strvalue[256]; + kv.GetString(NULL_STRING, strvalue, sizeof(strvalue)); + if (!StrEqual(strvalue, pseudoClassParms, pseudoClass == KVIZ_CHECK_HASVALUE)) { + return false; + } + } else { + // :has-value .. check that the node has a value (ie. it is not a section) + // --- we already did that above. + } + } + default: + KvizThrowError(kv, "Unknown pseudoClass (%s / %i) - Please contact F2", key, pseudoClass); + } + } + + if (path[endPos] == '\0') { + KvizRollBack(kv, depth); // If we were in "A.B.C" before, and we are now navigating to "A.B", then make sure to remove "C" from the stack. + + if (action == KVIZ_ACTION_VALUEORSECTION) { + KvDataTypes dataType = kv.GetDataType(NULL_STRING); + if (dataType == KvData_None) { + action = KVIZ_ACTION_SECTIONNAME; + } else { + action = KVIZ_ACTION_VALUE; + } + } + return true; + } + + if (action != KVIZ_ACTION_NONE) { + return false; // You cannot use an action in the middle of a path + } + + if (!KvizGoto2(kv, path[path[endPos] == ':' ? endPos : endPos+1], create, action, jumpToValues, depth + 1)) { + return false; + } + + return true; } -stock KvizRollBack(Handle:kv, destPos) { - while (Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount > destPos+1) { - //PrintToServer("GoBack"); - KvGoBack(kv); - Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount--; - } +stock void KvizRollBack(KeyValues kv, int destPos) { + while (Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount > destPos+1) { + //PrintToServer("GoBack"); + kv.GoBack(); + Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount--; + } } -stock bool:KvizStringToVector(const String:strvalue[], Float:vec[3]) { - new pos = 0; - new consumed = StringToFloatEx(strvalue, vec[0]); - if (consumed == 0 || strvalue[consumed] == '\0') { - //PrintToServer("StringToVector - fail 1"); - return false; - } - pos = consumed+1; - consumed = StringToFloatEx(strvalue[pos], vec[1]); - if (consumed == 0 || strvalue[pos+consumed] == '\0') { - //PrintToServer("StringToVector - fail 2"); - return false; - } - pos += consumed+1; - consumed = StringToFloatEx(strvalue[pos], vec[2]); - if (consumed > 0 && strvalue[pos+consumed] == '\0') - return true; - //PrintToServer("StringToVector - fail 3"); - return false; +stock bool KvizStringToVector(const char[] strvalue, float vec[3]) { + int pos = 0; + int consumed = StringToFloatEx(strvalue, vec[0]); + if (consumed == 0 || strvalue[consumed] == '\0') { + //PrintToServer("StringToVector - fail 1"); + return false; + } + pos = consumed+1; + consumed = StringToFloatEx(strvalue[pos], vec[1]); + if (consumed == 0 || strvalue[pos+consumed] == '\0') { + //PrintToServer("StringToVector - fail 2"); + return false; + } + pos += consumed+1; + consumed = StringToFloatEx(strvalue[pos], vec[2]); + if (consumed > 0 && strvalue[pos+consumed] == '\0') { + return true; + } + //PrintToServer("StringToVector - fail 3"); + return false; } -stock KvizResetContext(context) { - Kviz[context].Kviz_hKv = INVALID_HANDLE; - Kviz[context].Kviz_iPositionPathCount = 0; - Kviz[context].Kviz_iTraversalStackLen = 0; +stock void KvizResetContext(int context) { + Kviz[context].Kviz_hKv = null; + Kviz[context].Kviz_iPositionPathCount = 0; + Kviz[context].Kviz_iTraversalStackLen = 0; } -stock bool:KvizSwitchContext(Handle:kv, bool:mayCreate = false) { - if (kv == INVALID_HANDLE) { - KvizThrowError(kv, "kv was INVALID_HANDLE."); - } - - for (new i = 0; i < Kviz_iMaxContexts; i++) { - if (Kviz[Kviz_iCurrentContext].Kviz_hKv == kv) { - Kviz[Kviz_iCurrentContext].Kviz_iLRU = ++Kviz_iLRUCounter; - return true; - } - - Kviz_iCurrentContext++; - if (Kviz_iCurrentContext == Kviz_iMaxContexts) - Kviz_iCurrentContext = 0; - } - - if (KvizSwitchFromArchive(kv)) { - Kviz[Kviz_iCurrentContext].Kviz_iLRU = ++Kviz_iLRUCounter; - return true; - } - - if (!mayCreate) { - LogError("Kvizzle - kv not found. Remember to call KvizCreate first!"); - return false; - } - - Kviz_iCurrentContext = KvizGetFreeContext(); - Kviz[Kviz_iCurrentContext].Kviz_hKv = kv; - Kviz[Kviz_iCurrentContext].Kviz_iLRU = ++Kviz_iLRUCounter; - return true; +stock bool KvizSwitchContext(KeyValues kv, bool mayCreate = false) { + if (kv == null) { + KvizThrowError(kv, "kv was null."); + } + + for (int i = 0; i < Kviz_iMaxContexts; i++) { + if (Kviz[Kviz_iCurrentContext].Kviz_hKv == kv) { + Kviz[Kviz_iCurrentContext].Kviz_iLRU = ++Kviz_iLRUCounter; + return true; + } + + Kviz_iCurrentContext++; + if (Kviz_iCurrentContext == Kviz_iMaxContexts) { + Kviz_iCurrentContext = 0; + } + } + + if (KvizSwitchFromArchive(kv)) { + Kviz[Kviz_iCurrentContext].Kviz_iLRU = ++Kviz_iLRUCounter; + return true; + } + + if (!mayCreate) { + LogError("Kvizzle - kv not found. Remember to call KvizCreate first!"); + return false; + } + + Kviz_iCurrentContext = KvizGetFreeContext(); + Kviz[Kviz_iCurrentContext].Kviz_hKv = kv; + Kviz[Kviz_iCurrentContext].Kviz_iLRU = ++Kviz_iLRUCounter; + return true; } -stock bool:KvizSwitchFromArchive(Handle:kv) { - new archiveLen = GetArraySize(Kviz_hArchiveKv); - for (new i = 0; i < archiveLen; i++) { - new Handle:archiveKv = Handle:GetArrayCell(Kviz_hArchiveKv, i); - if (archiveKv == kv) { - new context = KvizGetFreeContext(); - - decl String:path[Kviz_iMaxPathDepth][Kviz_iMaxSectionLen]; - - new pathPos = 0; - for (new kvDepth = KvNodesInStack(kv); kvDepth > 0; kvDepth = KvGoBack(kv) ? kvDepth - 1 : 0) { - KvGetSectionName(kv, path[pathPos], sizeof(path[])); - pathPos++; - } - - decl String:kvizPos[Kviz_iMaxPathDepth*Kviz_iMaxSectionLen] = ""; - if (pathPos > 0) { - // TODO: Can be optimized a lot, because StrCat is getting strlen all the time - pathPos--; - strcopy(kvizPos, sizeof(kvizPos), path[pathPos]); - for (pathPos--; pathPos >= 0; pathPos--) { - StrCat(kvizPos, sizeof(kvizPos), "."); - KvizEscape(path[pathPos], sizeof(path[]), path[pathPos]); - StrCat(kvizPos, sizeof(kvizPos), path[pathPos]); - } - } - - Kviz_iCurrentContext = context; - Kviz[context].Kviz_hKv = kv; - Kviz[context].Kviz_iPositionPathCount = 0; - Kviz[context].Kviz_iTraversalStackLen = 0; - if (!StrEqual("", kvizPos)) { - new action; - if (!KvizGoto(kv, kvizPos, false, action)) - KvizThrowError(kv, "KvizSwitchFromArchive - KvizGoto failed - Please contact F2: %s", kvizPos); - } - - new archiveTSLen = GetArrayCell(Kviz_hArchiveTraversalStack, i, 0); - Kviz[context].Kviz_iTraversalStackLen = archiveTSLen; - for (new j = 0; j < archiveTSLen; j++) { - Kviz[context].Kviz_iTraversalStack[j] = GetArrayCell(Kviz_hArchiveTraversalStack, i, j+1); - } - - RemoveFromArray(Kviz_hArchiveKv, i); - RemoveFromArray(Kviz_hArchiveTraversalStack, i); - - return true; - } - } - - return false; +stock bool KvizSwitchFromArchive(KeyValues kv) { + int archiveLen = Kviz_hArchiveKv.Length; + for (int i = 0; i < archiveLen; i++) { + KeyValues archiveKv = view_as(Kviz_hArchiveKv.Get(i)); + if (archiveKv == kv) { + int context = KvizGetFreeContext(); + + char path[Kviz_iMaxPathDepth][Kviz_iMaxSectionLen]; + + int pathPos = 0; + for (int kvDepth = kv.NodesInStack(); kvDepth > 0; kvDepth = kv.GoBack() ? kvDepth - 1 : 0) { + kv.GetSectionName(path[pathPos], sizeof(path[])); + pathPos++; + } + + char kvizPos[Kviz_iMaxPathDepth * Kviz_iMaxSectionLen] = ""; + if (pathPos > 0) { + // TODO: Can be optimized a lot, because StrCat is getting strlen all the time + pathPos--; + strcopy(kvizPos, sizeof(kvizPos), path[pathPos]); + for (pathPos--; pathPos >= 0; pathPos--) { + StrCat(kvizPos, sizeof(kvizPos), "."); + KvizEscape(path[pathPos], sizeof(path[]), path[pathPos]); + StrCat(kvizPos, sizeof(kvizPos), path[pathPos]); + } + } + + Kviz_iCurrentContext = context; + Kviz[context].Kviz_hKv = kv; + Kviz[context].Kviz_iPositionPathCount = 0; + Kviz[context].Kviz_iTraversalStackLen = 0; + if (!StrEqual("", kvizPos)) { + int action; + if (!KvizGoto(kv, kvizPos, false, action)) { + KvizThrowError(kv, "KvizSwitchFromArchive - KvizGoto failed - Please contact F2: %s", kvizPos); + } + } + + int archiveTSLen = Kviz_hArchiveTraversalStack.Get(i, 0); + Kviz[context].Kviz_iTraversalStackLen = archiveTSLen; + for (int j = 0; j < archiveTSLen; j++) { + Kviz[context].Kviz_iTraversalStack[j] = Kviz_hArchiveTraversalStack.Get(i, j+1); + } + + Kviz_hArchiveKv.Erase(i); + Kviz_hArchiveTraversalStack.Erase(i); + + return true; + } + } + + return false; } -stock KvizGetFreeContext() { - new best = -1; - for (new context = 0; context < Kviz_iMaxContexts; context++) { - if (Kviz[context].Kviz_hKv == INVALID_HANDLE) - return context; - - if (best == -1 || Kviz[context].Kviz_iLRU < Kviz[best].Kviz_iLRU) - best = context; - } - - KvizArchiveContext(best); - KvizResetContext(best); - return best; +stock int KvizGetFreeContext() { + int best = -1; + for (int context = 0; context < Kviz_iMaxContexts; context++) { + if (Kviz[context].Kviz_hKv == null) { + return context; + } + + if (best == -1 || Kviz[context].Kviz_iLRU < Kviz[best].Kviz_iLRU) { + best = context; + } + } + + KvizArchiveContext(best); + KvizResetContext(best); + return best; } -stock KvizArchiveContext(context) { - PushArrayCell(Kviz_hArchiveKv, Kviz[context].Kviz_hKv); - decl stack[Kviz_iMaxTraversalStack+1]; - stack[0] = Kviz[context].Kviz_iTraversalStackLen; - for (new i = 0; i < stack[0]; i++) - stack[i+1] = Kviz[context].Kviz_iTraversalStack[i]; - PushArrayArray(Kviz_hArchiveTraversalStack, stack); - Kviz[context].Kviz_hKv = INVALID_HANDLE; +stock void KvizArchiveContext(int context) { + Kviz_hArchiveKv.Push(Kviz[context].Kviz_hKv); + int stack[Kviz_iMaxTraversalStack+1]; + stack[0] = Kviz[context].Kviz_iTraversalStackLen; + for (int i = 0; i < stack[0]; i++) { + stack[i+1] = Kviz[context].Kviz_iTraversalStack[i]; + } + Kviz_hArchiveTraversalStack.PushArray(stack); + Kviz[context].Kviz_hKv = null; } -stock bool:KvizRemoveContext(Handle:kv) { - for (new i = 0; i < Kviz_iMaxContexts; i++) { - if (Kviz[Kviz_iCurrentContext].Kviz_hKv == kv) { - Kviz[Kviz_iCurrentContext].Kviz_hKv = INVALID_HANDLE; - return true; - } - - if (Kviz_iCurrentContext == 0) - Kviz_iCurrentContext = Kviz_iMaxContexts - 1; - else - Kviz_iCurrentContext--; - } - - return false; +stock bool KvizRemoveContext(KeyValues kv) { + for (int i = 0; i < Kviz_iMaxContexts; i++) { + if (Kviz[Kviz_iCurrentContext].Kviz_hKv == kv) { + Kviz[Kviz_iCurrentContext].Kviz_hKv = null; + return true; + } + + if (Kviz_iCurrentContext == 0) { + Kviz_iCurrentContext = Kviz_iMaxContexts - 1; + } else { + Kviz_iCurrentContext--; + } + } + + return false; } -stock KvizThrowError(Handle:kv, const String:text[], any:...) { - decl String:buffer[256]; - VFormat(buffer, sizeof(buffer), text, 2); - ThrowError("Kvizzle - %s", buffer); +stock void KvizThrowError(KeyValues kv, const char[] text, any ...) { + char buffer[256]; + VFormat(buffer, sizeof(buffer), text, 2); + ThrowError("Kvizzle - %s - %s", kv == null ? "invalid kv" : "valid kv", buffer); } \ No newline at end of file diff --git a/includes/kvizzle_newdecls.inc b/includes/kvizzle_newdecls.inc deleted file mode 100755 index 4b34b40..0000000 --- a/includes/kvizzle_newdecls.inc +++ /dev/null @@ -1,1641 +0,0 @@ -/* -Kvizzle -By F2 - - -Features -- Supports having several KVs open simultaneously -- Pseudo-Classes (like :first-child, :nth-child(n), :any-child) -- Checks (like :has-value(val)) -- Actions (like :count, :section-name) -- A traversal stack (with KvizJumpToKey, KvizGoBack and KvizRewind) -- Escaping in path (with backslash) -- Read from file and write to file - - - -Public functions: - -- KvizEscape(char[] dest, destLen, const char[] src) - -- KeyValues KvizCreate(const char[] name) -- KeyValues KvizCreateFromFile(const char[] name, const char[] file) -- KeyValues KvizCreateFromString(const char[] name, const char[] data) -- bool KvizToFile(KeyValues kv, const char[] file, const char[] kvizPath = "", any ...) -- bool KvizClose(KeyValues kv) { - -- bool KvizGetStringExact(KeyValues kv, char[] value, valueLen, const char[] path, any ...) -- bool KvizGetString(KeyValues kv, char[] value, valueLen, const char[] defVal, const char[] path, any ...) -- bool KvizSetString(KeyValues kv, const char[] value, const char[] path, any ...) - -- bool KvizGetNumExact(KeyValues kv, &value, const char[] path, any ...) -- KvizGetNum(KeyValues kv, defVal, const char[] path, any ...) -- bool KvizSetNum(KeyValues kv, value, const char[] path, any ...) - -- bool KvizGetFloatExact(KeyValues kv, &float value, const char[] path, any ...) -- float KvizGetFloat(KeyValues kv, float defVal, const char[] path, any ...) -- bool KvizSetFloat(KeyValues kv, float value, const char[] path, any ...) - -- bool KvizGetVectorExact(KeyValues kv, float value[3], const char[] path, any ...) -- bool KvizGetVector(KeyValues kv, float vec[3], const float defVal[3], const char[] path, any ...) -- bool KvizSetVector(KeyValues kv, float vec[3], const char[] path, any ...) - -- bool KvizGetColorExact(KeyValues kv, &r, &g, &b, &a, const char[] path, any ...) -- bool KvizGetColor(KeyValues kv, &r, &g, &b, &a, defR, defG, defB, defA, const char[] path, any ...) -- bool KvizSetColor(KeyValues kv, r, g, b, a, const char[] path, any ...) - -- bool KvizGetUInt64Exact(KeyValues kv, value[2], const char[] path, any ...) -- bool KvizGetUInt64(KeyValues kv, value[2], const defVal[2], const char[] path, any ...) -- bool KvizSetUInt64(KeyValues kv, value[2], const char[] path, any ...) - -- bool KvizDelete(KeyValues kv, const char[] path, any ...) - -- bool KvizExists(KeyValues kv, const char[] path, any ...) - -- bool KvizJumpToKey(KeyValues kv, bool create, const char[] path, any ...) -- bool KvizGoBack(KeyValues kv) -- bool KvizRewind(KeyValues kv) - - - -TODO -- Write more comments in the code ;) -*/ - -#if defined _kvizzle_included - #endinput -#endif -#define _kvizzle_included - -#define KVIZZLE_VERSION "1.1.0" - -// Customizable settings -// Max number of simultaneously open Kvizzles. You can still use more, but the performance will degrade. However, if you set the number too high, then the performance will degrade when you have few Kvizzles opened simultaneously. -const int Kviz_iMaxContexts = 4; -// Max path depth... ie: aa.bb.cc.dd.ee(...).zz. Depth 32 equals 31 periods. -const int Kviz_iMaxPathDepth = 32; -// Max size of the traversal stack. The size of the traversal stack gets increased by 1 every time you call KvizJumpToKey, and decreased by 1 every time you call KvizGoBack. You can set it to 0 by calling KvizRewind. -#define Kviz_iMaxTraversalStack 32 -// Max string length of a section in a Kv-file. -const int Kviz_iMaxSectionLen = 128; -// --------------------- - - - -const int KVIZ_ACTION_NONE = 0; -// :first-child -const int KVIZ_PSEUDO_FIRSTCHILD = 10; -// :last-child -const int KVIZ_PSEUDO_LASTCHILD = 11; -// :nth-child -const int KVIZ_PSEUDO_NTHCHILD = 12; -// :any-child -const int KVIZ_PSEUDO_ANYCHILD = 13; -// :parent, :up -const int KVIZ_PSEUDO_UP = 14; - -const int KVIZ_CHECK_MIN = 20; -// :has-value, :has-value(text) -const int KVIZ_CHECK_HASVALUE = 21; -// :has-value-ci, :has-value-ci(text) -const int KVIZ_CHECK_HASVALUE_CI = 22; -const KVIZ_CHECK_MAX = 29; - -const KVIZ_ACTION_MIN = 30; -// :count -const KVIZ_ACTION_COUNT = 31; -// :section-name -const KVIZ_ACTION_SECTIONNAME = 32; -// :value -const KVIZ_ACTION_VALUE = 33; -// :value-or-section -const KVIZ_ACTION_VALUEORSECTION = 34; - - -enum struct KvizData { - KeyValues Kviz_hKv; - int Kviz_iPositionPathCount; - - int Kviz_iTraversalStack[Kviz_iMaxTraversalStack]; - int Kviz_iTraversalStackLen; - - int Kviz_iLRU; -} - -KvizData Kviz[Kviz_iMaxContexts]; -char Kviz_sPositionPath[Kviz_iMaxContexts][Kviz_iMaxPathDepth][Kviz_iMaxSectionLen]; -char Kviz_sPositionPathPseudoClass[Kviz_iMaxContexts][Kviz_iMaxPathDepth][Kviz_iMaxSectionLen]; -int Kviz_sPositionPathNthChild[Kviz_iMaxContexts][Kviz_iMaxPathDepth]; -int Kviz_iCurrentContext = 0; -int Kviz_bInited = false; -StringMap Kviz_hPseudoClassTrie = null; -ArrayList Kviz_hArchiveKv; -ArrayList Kviz_hArchiveTraversalStack; -int Kviz_iLRUCounter = 0; - - - - -/** - * Escapes a string, so it can be used in a Kvizzle path. - * - * @param dest Buffer to store the escaped string in. Can be the same as src. - * @param destLen Length of dest. - * @param src Source string that needs to be escaped. - * @noreturn - */ -stock void KvizEscape(char[] dest, int destLen, const char[] src) { - char[] buffer = new char[destLen]; - int srcPos = 0; - int destPos = 0; - while (destPos + 1 < destLen && src[srcPos] != '\0') { - if (src[srcPos] == ':' || src[srcPos] == '.') { - buffer[destPos++] = '\\'; - if (destPos == destLen) { - break; - } - } - buffer[destPos++] = src[srcPos++]; - } - buffer[destPos] = '\0'; - strcopy(dest, destLen, buffer); -} - -/** - * Creates an empty Kvizzle. - * - * @param name The name of the root node. - * @return A new Kvizzle handle, or null in case of error. - */ -stock KeyValues KvizCreate(const char[] name) { - if (!Kviz_bInited) { - KvizInit(); - } - - KeyValues kv = new KeyValues(name); - if (kv == null) { - return null; - } - if (!KvizSwitchContext(kv, true)) { - delete kv; - return null; - } - return kv; -} - -/** - * Creates a Kvizzle based on a KeyValues file. - * - * @param name The name of the root node. - * @param file The path for the KeyValues file. - * @return A new Kvizzle handle, or null in case of error. - */ -stock KeyValues KvizCreateFromFile(const char[] name, const char[] file) { - if (!Kviz_bInited) { - KvizInit(); - } - - KeyValues kv = new KeyValues(name); - if (kv == null) { - return null; - } - if (!kv.ImportFromFile(file)) { - delete kv; - return null; - } - if (!KvizSwitchContext(kv, true)) { - delete kv; - return null; - } - return kv; -} - -/** - * Creates a Kvizzle based on a string. - * - * @param name The name of the root node. - * @param data The string containing the KeyValues data. - * @return A new Kvizzle handle, or null in case of error. - */ -stock KeyValues KvizCreateFromString(const char[] name, const char[] data) { - if (!Kviz_bInited) { - KvizInit(); - } - - KeyValues kv = KvizCreate(name); - if (kv == null) { - return null; - } - - if (!kv.ImportFromString(data)) { - KvizClose(kv); - return null; - } - - return kv; -} - -/** - * Saves the Kvizzle (using the given path as the root) to a file. - * - * @param kv Kvizzle Handle. - * @param file Path to the file where the Kvizzle will be saved. - * @param kvizPath The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return A new Kvizzle handle, or null in case of error. - * @error Invalid Handle. - */ -stock bool KvizToFile(KeyValues kv, const char[] file, const char[] kvizPath = "", any ...) { - if (!KvizSwitchContext(kv)) { - return false; - } - - char path2[256]; - VFormat(path2, sizeof(path2), kvizPath, 4); - int action; - if (!KvizGoto(kv, path2, false, action)) { - return false; - } - - return kv.ExportToFile(file); -} - -/** - * Closes the Kvizzle. Must be called once for every KvizCreate/KvizCreateFromFile. - * - * @param kv Kvizzle Handle. - * @return True if the Kvizzle was open and is now closed. Otherwise false (eg. wrong handle, or it was already closed). - * @error Invalid Handle. - */ -stock bool KvizClose(KeyValues kv) { - if (!KvizSwitchContext(kv)) { - return false; - } - - // Roll back to the top. Otherwise, the next time a Kviz is opened with the same context id, it will think it has already traversed whatever position it is currently it. Fixed 09/07/2015. - KvizRewind(kv); - KvizRollBack(kv, -1); - - KvizRemoveContext(kv); - delete kv; - return true; -} - - -// ------------------ -// Get/Set String -// ------------------ - -/** - * Retrieves a string value from the Kvizzle. - * - * @param kv Kvizzle Handle. - * @param value Buffer to store the string value. - * @param valueLen Length of the buffer. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the path existed and the string value was retrieved. Otherwise false. - * @error Invalid Handle. - */ -stock bool KvizGetStringExact(KeyValues kv, char[] value, int valueLen, const char[] path, any ...) { - if (!KvizSwitchContext(kv)) { - return false; - } - - char path2[256]; - VFormat(path2, sizeof(path2), path, 5); - int action; - if (KvizGoto(kv, path2, false, action)) { - switch (action) { - case KVIZ_ACTION_NONE, KVIZ_ACTION_VALUE: { - if (kv.GetDataType(NULL_STRING) == KvData_None) { - return false; - } // We are at a section: "xyz" { ... } - kv.GetString(NULL_STRING, value, valueLen); - return true; - } - case KVIZ_ACTION_SECTIONNAME: { - kv.GetSectionName(value, valueLen); - return true; - } - case KVIZ_ACTION_COUNT: { - LogError("Kvizzle - KvizGetString does not support :count (in %s)", path); - return false; - } - default: - LogError("Kvizzle - Unknown action: %s / %i", path, action); - } - } - - return false; -} - -/** - * Retrieves a string value from the Kvizzle, or the given default value if not found. - * - * @param kv Kvizzle Handle. - * @param value Buffer to store the string value. - * @param valueLen Length of the buffer. - * @param defVal The default value to be used. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the path existed and the string value was retrieved. False if the default value was used. - * @error Invalid Handle. - */ -stock bool KvizGetString(KeyValues kv, char[] value, int valueLen, const char[] defVal, const char[] path, any ...) { - char path2[256]; - VFormat(path2, sizeof(path2), path, 6); - - if (!KvizGetStringExact(kv, value, valueLen, "%s", path2)) { - strcopy(value, valueLen, defVal); - return false; - } - - return true; -} - -/** - * Sets a string value in the Kvizzle at the given path. If the path does not exist, it is created. - * - * @param kv Kvizzle Handle. - * @param value The value to be written. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True on succes. Otherwise false (eg. wrong handle). - * @error Invalid Handle. - */ -stock bool KvizSetString(KeyValues kv, const char[] value, const char[] path, any ...) { - if (!KvizSwitchContext(kv)) { - return false; - } - - char path2[256]; - VFormat(path2, sizeof(path2), path, 4); - int action; - if (KvizGoto(kv, path2, true, action)) { - if (action == KVIZ_ACTION_NONE || action == KVIZ_ACTION_VALUE) { - kv.SetString(NULL_STRING, value); - return true; - } - else if (action == KVIZ_ACTION_SECTIONNAME) { - kv.SetSectionName(value); - return true; - } - else { - LogError("Kvizzle - KvizSetString does not support action %i (in %s)", action, path); - } - } - return false; -} - - - -// ------------------ -// Get/Set Num -// ------------------ - -/** - * Retrieves an integer value from the Kvizzle. - * - * @param kv Kvizzle Handle. - * @param value Integer value, set by reference. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the path existed and its value was indeed an integer. Otherwise false. - * @error Invalid Handle. - */ -stock bool KvizGetNumExact(KeyValues kv, int &value, const char[] path, any ...) { - if (!KvizSwitchContext(kv)) { - return false; - } - - char strvalue[64]; - - char path2[256]; - VFormat(path2, sizeof(path2), path, 4); - int action; - if (KvizGoto(kv, path2, false, action)) { - switch (action) { - case KVIZ_ACTION_NONE, KVIZ_ACTION_VALUE: { - if (kv.GetDataType(NULL_STRING) == KvData_None) { - return false; - } // We are at a section: "xyz" { ... } - kv.GetString(NULL_STRING, strvalue, sizeof(strvalue)); - if (StringToIntEx(strvalue, value) == strlen(strvalue)) { - return true; - } - return false; - } - case KVIZ_ACTION_SECTIONNAME: { - kv.GetSectionName(strvalue, sizeof(strvalue)); - if (StringToIntEx(strvalue, value) == strlen(strvalue)) { - return true; - } - return false; - } - case KVIZ_ACTION_COUNT: { - value = 0; - if (kv.GotoFirstSubKey(false)) { - do { - value++; - } while (kv.GotoNextKey(false)); - kv.GoBack(); - } - - return true; - } - default: - LogError("Kvizzle - Unknown action: %s / %i", path, action); - } - } - - return false; -} - -/** - * Retrieves an integer value from the Kvizzle, or the default value if the path does not exist. - * - * @param kv Kvizzle Handle. - * @param defVal The default value. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return The retrieved integer value, if the path existed. Otherwise, the default value. - * @error Invalid Handle. - */ -stock int KvizGetNum(KeyValues kv, int defVal, const char[] path, any ...) { - char path2[256]; - VFormat(path2, sizeof(path2), path, 4); - - int value; - if (!KvizGetNumExact(kv, value, "%s", path2)) { - return defVal; - } - - return value; -} - -/** - * Sets an integer value in the Kvizzle at the given path. If the path does not exist, it is created. - * - * @param kv Kvizzle Handle. - * @param value The value to be written. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True on succes. Otherwise false (eg. wrong handle). - * @error Invalid Handle. - */ -stock bool KvizSetNum(KeyValues kv, int value, const char[] path, any ...) { - if (!KvizSwitchContext(kv)) { - return false; - } - - char path2[256]; - VFormat(path2, sizeof(path2), path, 4); - int action; - if (KvizGoto(kv, path2, true, action)) { - if (action == KVIZ_ACTION_NONE || action == KVIZ_ACTION_VALUE) { - kv.SetNum(NULL_STRING, value); - return true; - } - else if (action == KVIZ_ACTION_SECTIONNAME) { - char strvalue[64]; - IntToString(value, strvalue, sizeof(strvalue)); - kv.SetSectionName(strvalue); - return true; - } - else { - LogError("Kvizzle - KvizSetNum does not support action %i (in %s)", action, path); - } - } - return false; -} - - - - -// ------------------ -// Get/Set UInt64 -// ------------------ - -/** - * Retrieves an UInt64 value from the Kvizzle. - * - * @param kv Kvizzle Handle. - * @param value Buffer to store the UInt64 value. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the path existed and the UInt64 value was retrieved. Otherwise false. - * @error Invalid Handle. - */ -stock bool KvizGetUInt64Exact(KeyValues kv, int value[2], const char[] path, any ...) { - if (!KvizSwitchContext(kv)) { - return false; - } - - char path2[256]; - VFormat(path2, sizeof(path2), path, 4); - int action; - if (KvizGoto(kv, path2, false, action)) { - switch (action) { - case KVIZ_ACTION_NONE, KVIZ_ACTION_VALUE: { - if (kv.GetDataType(NULL_STRING) == KvData_None) { - return false; - } // We are at a section: "xyz" { ... } - // It turns out, KvGetUInt64 doesn't use the default value, if the kv-value is malformatted. In that case it just returns {0, 0}. - kv.GetUInt64(NULL_STRING, value); - return true; - } - case KVIZ_ACTION_SECTIONNAME: - LogError("Kvizzle - KvizGetUInt64 does not support :section-name (in %s)", path); - case KVIZ_ACTION_COUNT: - LogError("Kvizzle - KvizGetUInt64 does not support :count (in %s)", path); - default: - LogError("Kvizzle - Unknown action: %s / %i", path, action); - } - } - - return false; -} - -/** - * Retrieves an UInt64 value from the Kvizzle, or the default value if the path does not exist. - * - * @param kv Kvizzle Handle. - * @param value Buffer to store the UInt64 value. - * @param defVal Default value. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the path existed and the UInt64 value was retrieved. False if the default value was used. - * @error Invalid Handle. - */ -stock bool KvizGetUInt64(KeyValues kv, int value[2], const defVal[2], const char[] path, any ...) { - char path2[256]; - VFormat(path2, sizeof(path2), path, 5); - - if (!KvizGetUInt64Exact(kv, value, "%s", path2)) { - value[0] = defVal[0]; - value[1] = defVal[1]; - return false; - } - - return true; -} - -/** - * Sets an UInt64 value in the Kvizzle at the given path. If the path does not exist, it is created. - * - * @param kv Kvizzle Handle. - * @param value The value to be written. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True on succes. Otherwise false (eg. wrong handle). - * @error Invalid Handle. - */ -stock bool KvizSetUInt64(KeyValues kv, int value[2], const char[] path, any ...) { - if (!KvizSwitchContext(kv)) { - return false; - } - - char path2[256]; - VFormat(path2, sizeof(path2), path, 4); - int action; - if (KvizGoto(kv, path2, true, action)) { - if (action == KVIZ_ACTION_NONE || action == KVIZ_ACTION_VALUE) { - kv.SetUInt64(NULL_STRING, value); - return true; - } - else if (action == KVIZ_ACTION_SECTIONNAME) - LogError("Kvizzle - KvizSetUInt64 does not support :section-name (in %s)", path); - else { - LogError("Kvizzle - KvizSetUInt64 does not support action %i (in %s)", action, path); - } - } - return false; -} - - - - -// ------------------ -// Get/Set Color -// ------------------ - -/** - * Retrieves a color value from the Kvizzle. - * - * @param kv Kvizzle Handle. - * @param r Red value, set by reference. - * @param g Green value, set by reference. - * @param b Blue value, set by reference. - * @param a Alpha value, set by reference. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the path existed and the color value was retrieved. Otherwise false. - * @error Invalid Handle. - */ -stock bool KvizGetColorExact(KeyValues kv, int &r, int &g, int &b, int &a, const char[] path, any ...) { - if (!KvizSwitchContext(kv)) { - return false; - } - - char path2[256]; - VFormat(path2, sizeof(path2), path, 7); - int action; - if (KvizGoto(kv, path2, false, action)) { - switch (action) { - case KVIZ_ACTION_NONE, KVIZ_ACTION_VALUE: { - if (kv.GetDataType(NULL_STRING) == KvData_None) { - return false; - } // We are at a section: "xyz" { ... } - kv.GetColor(NULL_STRING, r, g, b, a); - return true; - } - case KVIZ_ACTION_SECTIONNAME: - LogError("Kvizzle - KvizGetColor does not support :section-name (in %s)", path); - case KVIZ_ACTION_COUNT: - LogError("Kvizzle - KvizGetColor does not support :count (in %s)", path); - default: - LogError("Kvizzle - Unknown action: %s / %i", path, action); - } - } - - return false; -} - -/** - * Retrieves a color value from the Kvizzle, or the given default value if the path does not exist. - * - * @param kv Kvizzle Handle. - * @param r Red value, set by reference. - * @param g Green value, set by reference. - * @param b Blue value, set by reference. - * @param a Alpha value, set by reference. - * @param defR Default red value. - * @param defG Default green value. - * @param defB Default blue value. - * @param defA Default alpha value. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the path existed and the color value was retrieved. False if the default values were used. - * @error Invalid Handle. - */ -stock bool KvizGetColor(KeyValues kv, int &r, int &g, int &b, int &a, int defR, int defG, int defB, int defA, const char[] path, any ...) { - char path2[256]; - VFormat(path2, sizeof(path2), path, 11); - - if (!KvizGetColorExact(kv, r, g, b, a, "%s", path2)) { - r = defR; - g = defG; - b = defB; - a = defA; - return false; - } - - return true; -} - -/** - * Sets a color value in the Kvizzle at the given path. If the path does not exist, it is created. - * - * @param kv Kvizzle Handle. - * @param r Red value. - * @param g Green value. - * @param b Blue value. - * @param a Alpha value. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True on succes. Otherwise false (eg. wrong handle). - * @error Invalid Handle. - */ -stock bool KvizSetColor(KeyValues kv, int r, int g, int b, int a, const char[] path, any ...) { - if (!KvizSwitchContext(kv)) { - return false; - } - - char path2[256]; - VFormat(path2, sizeof(path2), path, 7); - int action; - if (KvizGoto(kv, path2, true, action)) { - if (action == KVIZ_ACTION_NONE || action == KVIZ_ACTION_VALUE) { - kv.SetColor(NULL_STRING, r, g, b, a); - return true; - } - else if (action == KVIZ_ACTION_SECTIONNAME) { - char strvalue[64]; - FormatEx(strvalue, sizeof(strvalue), "%i %i %i %i", r, g, b, a); - kv.SetSectionName(strvalue); - return true; - } - else { - LogError("Kvizzle - KvizSetColor does not support action %i (in %s)", action, path); - } - } - return false; -} - - - - - -// ------------------ -// Get/Set Float -// ------------------ - -/** - * Retrieves a float value from the Kvizzle. - * - * @param kv Kvizzle Handle. - * @param value The retrieved float value, set by reference. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the path existed and the retrieved value was indeed a float. Otherwise false. - * @error Invalid Handle. - */ -stock bool KvizGetFloatExact(KeyValues kv, float &value, const char[] path, any ...) { - if (!KvizSwitchContext(kv)) { - return false; - } - - char strvalue[64]; - - char path2[256]; - VFormat(path2, sizeof(path2), path, 4); - int action; - if (KvizGoto(kv, path2, false, action)) { - switch (action) { - case KVIZ_ACTION_NONE, KVIZ_ACTION_VALUE: { - if (kv.GetDataType(NULL_STRING) == KvData_None) { - return false; - } // We are probably at a section: "xyz" { ... } - kv.GetString(NULL_STRING, strvalue, sizeof(strvalue)); - if (StringToFloatEx(strvalue, value) == strlen(strvalue)) { - return true; - } - return false; - } - case KVIZ_ACTION_SECTIONNAME: { - kv.GetSectionName(strvalue, sizeof(strvalue)); - if (StringToFloatEx(strvalue, value) == strlen(strvalue)) { - return true; - } - return false; - } - case KVIZ_ACTION_COUNT: - LogError("Kvizzle - KvizGetFloat does not support :count (in %s)", path); - default: - LogError("Kvizzle - Unknown action: %s / %i", path, action); - } - } - - return false; -} - -/** - * Retrieves a float value from the Kvizzle, or the given default value if the path does not exist. - * - * @param kv Kvizzle Handle. - * @param defVal The default value. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return Returns the retrieved float value, or the default value if the path does not exist. - * @error Invalid Handle. - */ -stock float KvizGetFloat(KeyValues kv, float defVal, const char[] path, any ...) { - char path2[256]; - VFormat(path2, sizeof(path2), path, 4); - - float value; - if (!KvizGetFloatExact(kv, value, "%s", path2)) { - return defVal; - } - - return value; -} - -/** - * Sets a float value in the Kvizzle at the given path. If the path does not exist, it is created. - * - * @param kv Kvizzle Handle. - * @param value The value to be written. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True on succes. Otherwise false (eg. wrong handle). - * @error Invalid Handle. - */ -stock bool KvizSetFloat(KeyValues kv, float value, const char[] path, any ...) { - if (!KvizSwitchContext(kv)) { - return false; - } - - char path2[256]; - VFormat(path2, sizeof(path2), path, 4); - int action; - if (KvizGoto(kv, path2, true, action)) { - if (action == KVIZ_ACTION_NONE || action == KVIZ_ACTION_VALUE) { - kv.SetFloat(NULL_STRING, value); - return true; - } - else if (action == KVIZ_ACTION_SECTIONNAME) { - char strvalue[64]; - FloatToString(value, strvalue, sizeof(strvalue)); - kv.SetSectionName(strvalue); - return true; - } - else { - LogError("Kvizzle - KvizSetFloat does not support action %i (in %s)", action, path); - } - } - return false; -} - - - - -// ------------------ -// Get/Set Vector -// ------------------ - -/** - * Retrieves a vector value from the Kvizzle. - * - * @param kv Kvizzle Handle. - * @param value Buffer to store the vector value. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the path existed and the vector value was retrieved. Otherwise false. - * @error Invalid Handle. - */ -stock bool KvizGetVectorExact(KeyValues kv, float value[3], const char[] path, any ...) { - if (!KvizSwitchContext(kv)) { - return false; - } - - char strvalue[64]; - - char path2[256]; - VFormat(path2, sizeof(path2), path, 4); - int action; - if (KvizGoto(kv, path2, false, action)) { - switch (action) { - case KVIZ_ACTION_NONE, KVIZ_ACTION_VALUE: { - if (kv.GetDataType(NULL_STRING) == KvData_None) { - return false; - } // We are at a section: "xyz" { ... } - kv.GetString(NULL_STRING, strvalue, sizeof(strvalue)); - if (KvizStringToVector(strvalue, value)) { - return true; - } - return false; - } - case KVIZ_ACTION_SECTIONNAME: { - kv.GetSectionName(strvalue, sizeof(strvalue)); - if (KvizStringToVector(strvalue, value)) { - return true; - } - return false; - } - case KVIZ_ACTION_COUNT: - LogError("Kvizzle - KvizGetFloat does not support :count (in %s)", path); - default: - LogError("Kvizzle - Unknown action: %s / %i", path, action); - } - } - - return false; -} - -/** - * Retrieves a vector value from the Kvizzle, or the default value if the path does not exist. - * - * @param kv Kvizzle Handle. - * @param value Buffer to store the vector value. - * @param defVal The default value. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the path existed and the vector value was retrieved. False if the default value was used. - * @error Invalid Handle. - */ -stock bool KvizGetVector(KeyValues kv, float vec[3], const float defVal[3], const char[] path, any ...) { - char path2[256]; - VFormat(path2, sizeof(path2), path, 5); - - if (!KvizGetVectorExact(kv, vec, "%s", path2)) { - vec[0] = defVal[0]; - vec[1] = defVal[1]; - vec[2] = defVal[2]; - return false; - } - - return true; -} - -/** - * Sets a vector value in the Kvizzle at the given path. If the path does not exist, it is created. - * - * @param kv Kvizzle Handle. - * @param vec The value to be written. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True on succes. Otherwise false (eg. wrong handle). - * @error Invalid Handle. - */ -stock bool KvizSetVector(KeyValues kv, float vec[3], const char[] path, any ...) { - if (!KvizSwitchContext(kv)) { - return false; - } - - char path2[256]; - VFormat(path2, sizeof(path2), path, 4); - int action; - if (KvizGoto(kv, path2, true, action)) { - if (action == KVIZ_ACTION_NONE || action == KVIZ_ACTION_VALUE) { - kv.SetVector(NULL_STRING, vec); - return true; - } - else if (action == KVIZ_ACTION_SECTIONNAME) { - char strvalue[Kviz_iMaxSectionLen]; - Format(strvalue, sizeof(strvalue), "%f %f %f", vec[0], vec[1], vec[2]); - kv.SetSectionName(strvalue); - return true; - } - else { - LogError("Kvizzle - KvizSetVector does not support action %i (in %s)", action, path); - } - } - return false; -} - - - - -/** - * Deletes a node at the given path. - * - * @param kv Kvizzle Handle. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the node was found and deleted. Otherwise false. - * @error Invalid Handle. - */ -stock bool KvizDelete(KeyValues kv, const char[] path, any ...) { - // NOTE: Be aware that when you delete something, the value of a pseudo-class might change. In that case, we will need to remove that pseudo-class from the path stack. However, for first-child, last-child and nth-child it is not a problem. any-child and parent are not saved on the path stack. - - if (!KvizSwitchContext(kv)) { - return false; - } - - char path2[256]; - VFormat(path2, sizeof(path2), path, 3); - int action; - if (!KvizGoto(kv, path2, false, action) || action != KVIZ_ACTION_NONE) { - return false; - } - - int ret = kv.DeleteThis(); - //PrintToServer("Delete=%i", ret); - if (ret == 1) { - int pathDepth = Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount - 1; - kv.GetSectionName(Kviz_sPositionPath[Kviz_iCurrentContext][pathDepth], sizeof(Kviz_sPositionPath[][])); - //Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][pathDepth][0] = '\0'; - //PrintToServer("section %s", Kviz_sPositionPath[Kviz_iCurrentContext][pathDepth]); - return true; - } - else if (ret == -1) { - Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount--; - return true; - } - else { - return false; - } -} - -/** - * Jump to a key in the Kvizzle. All subsequent calls to Kv* will be relative to this path, until KvizGoBack is called. - * - * @note This adds to the internal traversal stack. - * @param kv Kvizzle Handle. - * @param create If set to true, the path will be created if it does not exist. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the jump was successful. Otherwise false (eg. when create is false and the path does not exist). - * @error Invalid Handle. - */ -stock bool KvizJumpToKey(KeyValues kv, bool create, const char[] path, any ...) { - if (!KvizSwitchContext(kv)) { - return false; - } - - char path2[256]; - VFormat(path2, sizeof(path2), path, 4); - - int action; - if (!KvizGoto(kv, path2, create, action, true) || action != KVIZ_ACTION_NONE) { - return false; - } - - Kviz[Kviz_iCurrentContext].Kviz_iTraversalStack[Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen] = Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount; - Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen++; - return true; -} - -/** - * Pops one element off the traversal stack. Should be used together with KvizJumpToKey. - * - * @param kv Kvizzle Handle. - * @return True if an element was popped off the traversal stack. False if the traversal stack was empty. - * @error Invalid Handle. - */ -stock bool KvizGoBack(KeyValues kv) { - if (!KvizSwitchContext(kv)) { - return false; - } - - if (Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen == 0) { - return false; - } - - Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen--; - return true; -} - -/** - * Rewinds the traversal stack. - * - * @param kv Kvizzle Handle. - * @return True if the traversal stack was successfully rewinded. Otherwise false (eg. wrong handle). - * @error Invalid Handle. - */ -stock bool KvizRewind(KeyValues kv) { - if (!KvizSwitchContext(kv)) { - return false; - } - - while (KvizGoBack(kv)) { } - return true; -} - -/** - * Checks if a Kvizzle path exists. - * - * @param kv Kvizzle Handle. - * @param path The Kvizzle path to be formatted. - * @param ... Variable number of format parameters. - * @return True if the path exists. Otherwise false. - * @error Invalid Handle. - */ -stock bool KvizExists(KeyValues kv, const char[] path, any ...) { - if (!KvizSwitchContext(kv)) { - return false; - } - - char path2[256]; - VFormat(path2, sizeof(path2), path, 3); - - int action; - if (KvizGoto(kv, path2, false, action)) { - if (action != KVIZ_ACTION_NONE) { - LogError("Kvizzle - KvizExists doesn't support actions (%s)", path); - } - - return true; - } - - return false; -} - -// An alias for KvizExists -stock bool KvizExist(KeyValues kv, const char[] path, any ...) { - char path2[256]; - VFormat(path2, sizeof(path2), path, 3); - - return KvizExists(kv, "%s", path2); -} - - - - - - - -// ------------------ -// Private functions -// ------------------ - -stock void KvizInit() { - if (Kviz_bInited) { - return; - } - Kviz_bInited = true; - - Kviz_hPseudoClassTrie = new StringMap(); - Kviz_hPseudoClassTrie.SetValue(":first-child", KVIZ_PSEUDO_FIRSTCHILD); - Kviz_hPseudoClassTrie.SetValue(":last-child", KVIZ_PSEUDO_LASTCHILD); - Kviz_hPseudoClassTrie.SetValue(":nth-child", KVIZ_PSEUDO_NTHCHILD); - Kviz_hPseudoClassTrie.SetValue(":any-child", KVIZ_PSEUDO_ANYCHILD); - Kviz_hPseudoClassTrie.SetValue(":up", KVIZ_PSEUDO_UP); - Kviz_hPseudoClassTrie.SetValue(":parent", KVIZ_PSEUDO_UP); - - Kviz_hPseudoClassTrie.SetValue(":has-value", KVIZ_CHECK_HASVALUE); - Kviz_hPseudoClassTrie.SetValue(":has-value-ci", KVIZ_CHECK_HASVALUE_CI); - - Kviz_hPseudoClassTrie.SetValue(":count", KVIZ_ACTION_COUNT); - Kviz_hPseudoClassTrie.SetValue(":section-name", KVIZ_ACTION_SECTIONNAME); - Kviz_hPseudoClassTrie.SetValue(":key", KVIZ_ACTION_SECTIONNAME); - Kviz_hPseudoClassTrie.SetValue(":value", KVIZ_ACTION_VALUE); - Kviz_hPseudoClassTrie.SetValue(":value-or-section", KVIZ_ACTION_VALUEORSECTION); - - Kviz_hArchiveKv = new ArrayList(); - Kviz_hArchiveTraversalStack = new ArrayList(Kviz_iMaxTraversalStack+1); -} - - -stock bool KvizGoto(KeyValues kv, const char[] path, bool create, int &action, bool jumpToValues = true, int depth = 0) { - action = KVIZ_ACTION_NONE; - if (path[0] == '\0') { - // Go to root - int rootDepth = -1; - if (Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen != 0) { - rootDepth = Kviz[Kviz_iCurrentContext].Kviz_iTraversalStack[Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen - 1] - 1; - } - KvizRollBack(kv, rootDepth); - return true; - } - else if (Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen != 0) { - return KvizGoto2(kv, path, create, action, jumpToValues, Kviz[Kviz_iCurrentContext].Kviz_iTraversalStack[Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen - 1]); - } - else { - return KvizGoto2(kv, path, create, action, jumpToValues, 0); - } -} - -stock bool KvizGoto2(KeyValues kv, const char[] path, bool create, int &action, bool jumpToValues, int depth) { - char key[Kviz_iMaxSectionLen]; - int endPos = 0; - int destPos = 0; - while (path[endPos] != '.' && path[endPos] != '\0' && !(path[endPos] == ':' && endPos != 0)) { - if (path[endPos] == '\\') { - if (path[endPos+1] == '\0') { - key[destPos++] = path[endPos++]; - } - else { - endPos++; - key[destPos++] = path[endPos++]; - } - } - else { - key[destPos++] = path[endPos++]; - } - } - - if (endPos == 0) { - return false; - } - - key[destPos] = '\0'; - - bool isPseudoClass = key[0] == ':'; - bool isAction = false; - bool isCheck = false; - int pseudoClass; - char pseudoClassTag[128]; - char pseudoClassParms[128]; - bool pseudoClassHasParm = false; - int pseudoParmInt; - - if (isPseudoClass) { - int pseudoClassParmsLen = 0; - int pseudoClassTagLen = 0; - for (int i = 0; i < sizeof(key) && key[i] != '\0'; i++) { - if (key[i] == '(') { - pseudoClassHasParm = true; - key[i] = '\0'; - } - else if (pseudoClassHasParm) { - if (key[i] == ')') { - break; - } - else { - pseudoClassParms[pseudoClassParmsLen++] = key[i]; - } - } - else { - pseudoClassTag[i] = key[i]; - pseudoClassTagLen++; - } - } - pseudoClassTag[pseudoClassTagLen] = '\0'; - pseudoClassParms[pseudoClassParmsLen] = '\0'; - - if (!Kviz_hPseudoClassTrie.GetValue(pseudoClassTag, pseudoClass)) { - LogError("Kvizzle - Unknown pseudo class: %s", key); - return false; - } - - if (pseudoClassParmsLen != 0) { - pseudoParmInt = StringToInt(pseudoClassParms); - } - - if (pseudoClass == KVIZ_PSEUDO_FIRSTCHILD) { - pseudoClassTag = "nth-child"; - pseudoClass = KVIZ_PSEUDO_NTHCHILD; - pseudoParmInt = 1; - strcopy(key, sizeof(key), "nth-child(1)"); - } - - isAction = pseudoClass >= KVIZ_ACTION_MIN; - isCheck = pseudoClass >= KVIZ_CHECK_MIN && pseudoClass <= KVIZ_CHECK_MAX; - } - - bool alreadyInPosition = false; - if (isAction) { - alreadyInPosition = true; - // We are not going any deeper in this step. - depth--; - } - else if (isCheck) { - alreadyInPosition = true; - // We are not going any deeper in this step. - depth--; - } - else { - if (isPseudoClass && pseudoClass == KVIZ_PSEUDO_UP) { - int rootDepth = -1; - int traversalStackLen = Kviz[Kviz_iCurrentContext].Kviz_iTraversalStackLen; - if (traversalStackLen != 0) { - rootDepth = Kviz[Kviz_iCurrentContext].Kviz_iTraversalStack[traversalStackLen - 1] - 1; - } - alreadyInPosition = true; - depth -= 2; - if (depth < rootDepth) { - LogError("Kvizzle - :up used on root node (%s)", path); - depth = rootDepth; - } - } - else if (depth < Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount) { - if (isPseudoClass) { - if (pseudoClass == KVIZ_PSEUDO_NTHCHILD && Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth] != 0) { - int currentChildNum = Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth]; - int newChildNum = pseudoParmInt; - if (currentChildNum == newChildNum) { - alreadyInPosition = true; - } - else if (currentChildNum < newChildNum) { - KvizRollBack(kv, depth); - while (currentChildNum < newChildNum) { - if (!kv.GotoNextKey(!jumpToValues)) { - //PrintToServer("Fast nth-child: Not found - setting to :nth-child(%i)", currentChildNum); - kv.GetSectionName(Kviz_sPositionPath[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPath[][])); - Format(Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPathPseudoClass[][]), ":nth-child(%i)", currentChildNum); - Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth] = currentChildNum; - return false; - } - currentChildNum++; - //PrintToServer("Fast nth-child: GotoNextKey(%i)", currentChildNum); - } - kv.GetSectionName(Kviz_sPositionPath[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPath[][])); - strcopy(Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPathPseudoClass[][]), key); - Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth] = currentChildNum; - alreadyInPosition = true; - } - else { - KvizRollBack(kv, depth-1); - } - } - else if (pseudoClass != KVIZ_PSEUDO_ANYCHILD && StrEqual(Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][depth], key)) { - alreadyInPosition = true; - } - else { - KvizRollBack(kv, depth-1); - } - } - else { - if (StrEqual(Kviz_sPositionPath[Kviz_iCurrentContext][depth], key)) { - alreadyInPosition = true; - } - else { - KvizRollBack(kv, depth-1); - } - } - } - } - - if (!alreadyInPosition) { - if (isPseudoClass) { - switch (pseudoClass) { - case KVIZ_PSEUDO_LASTCHILD: { - //PrintToServer("Go to last child"); - if (!kv.GotoFirstSubKey(!jumpToValues)) { - return false; - } - while (kv.GotoNextKey(!jumpToValues)) { } - - kv.GetSectionName(Kviz_sPositionPath[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPath[][])); - strcopy(Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPathPseudoClass[][]), key); - Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth] = 0; - Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount++; - } - case KVIZ_PSEUDO_NTHCHILD: { - //PrintToServer("Go to %ith child", pseudoParmInt); - if (!kv.GotoFirstSubKey(!jumpToValues)) { - return false; - } - - int currentChildNum = 0; - bool childFound = false; - do { - currentChildNum++; - if (currentChildNum == pseudoParmInt) { - childFound = true; - break; - } - } while (kv.GotoNextKey(!jumpToValues)); - - if (!childFound) { - kv.GetSectionName(Kviz_sPositionPath[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPath[][])); - Format(Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPathPseudoClass[][]), ":nth-child(%i)", currentChildNum); - Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth] = currentChildNum; - Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount++; - return false; - } - - kv.GetSectionName(Kviz_sPositionPath[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPath[][])); - strcopy(Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPathPseudoClass[][]), key); - Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth] = pseudoParmInt; - Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount++; - } - case KVIZ_PSEUDO_ANYCHILD: { - if (!kv.GotoFirstSubKey(!jumpToValues)) { - return false; - } - - Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount++; - - int currentChildNum = 0; - do { - currentChildNum++; - - // We must set the position path values before calling KvGoto recursively. This is because :up should be able to overwrite the values. - kv.GetSectionName(Kviz_sPositionPath[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPath[][])); - Format(Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPathPseudoClass[][]), ":nth-child(%i)", currentChildNum); - Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth] = currentChildNum; - - if (path[endPos] == '\0') { - KvizRollBack(kv, depth); - return true; - } - - if (KvizGoto2(kv, path[path[endPos] == ':' ? endPos : endPos+1], create, action, jumpToValues, depth + 1)) { - return true; - } - - KvizRollBack(kv, depth); - } while (kv.GotoNextKey(!jumpToValues)); - - return false; - } - default: - KvizThrowError(kv, "Unknown pseudoClass (%s / %i) - Please contact F2", key, pseudoClass); - } - } - else { - //PrintToServer("JumpToKey: %s", key); - if (!kv.JumpToKey(key, create)) { - return false; - } - - strcopy(Kviz_sPositionPath[Kviz_iCurrentContext][depth], sizeof(Kviz_sPositionPath[][]), key); - Kviz_sPositionPathPseudoClass[Kviz_iCurrentContext][depth][0] = '\0'; - Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount++; - // We jumped directly to a subkey - we don't know which number child it is. Fixed 06/07/2015. - Kviz_sPositionPathNthChild[Kviz_iCurrentContext][depth] = 0; - } - } - else if (isAction) { - action = pseudoClass; - } - else if (isCheck) { - switch (pseudoClass) { - case KVIZ_CHECK_HASVALUE, KVIZ_CHECK_HASVALUE_CI: { - if (kv.GetDataType(NULL_STRING) == KvData_None) { - return false; - } - - if (pseudoClassHasParm) { - // :has-value .. check that the node has the specified string value - char strvalue[256]; - kv.GetString(NULL_STRING, strvalue, sizeof(strvalue)); - if (!StrEqual(strvalue, pseudoClassParms, pseudoClass == KVIZ_CHECK_HASVALUE)) { - return false; - } - } - else { - // :has-value .. check that the node has a value (ie. it is not a section) - // --- we already did that above. - } - } - default: - KvizThrowError(kv, "Unknown pseudoClass (%s / %i) - Please contact F2", key, pseudoClass); - } - } - - if (path[endPos] == '\0') { - // If we were in "A.B.C" before, and we are now navigating to "A.B", then make sure to remove "C" from the stack. - KvizRollBack(kv, depth); - - if (action == KVIZ_ACTION_VALUEORSECTION) { - KvDataTypes dataType = kv.GetDataType(NULL_STRING); - if (dataType == KvData_None) { - action = KVIZ_ACTION_SECTIONNAME; - } - else { - action = KVIZ_ACTION_VALUE; - } - } - return true; - } - - if (action != KVIZ_ACTION_NONE) { - return false; - } // You cannot use an action in the middle of a path - - if (!KvizGoto2(kv, path[path[endPos] == ':' ? endPos : endPos+1], create, action, jumpToValues, depth + 1)) { - return false; - } - - return true; -} - -stock void KvizRollBack(KeyValues kv, int destPos) { - while (Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount > destPos+1) { - //PrintToServer("GoBack"); - kv.GoBack(); - Kviz[Kviz_iCurrentContext].Kviz_iPositionPathCount--; - } -} - -stock bool KvizStringToVector(const char[] strvalue, float vec[3]) { - int pos = 0; - int consumed = StringToFloatEx(strvalue, vec[0]); - if (consumed == 0 || strvalue[consumed] == '\0') { - //PrintToServer("StringToVector - fail 1"); - return false; - } - pos = consumed+1; - consumed = StringToFloatEx(strvalue[pos], vec[1]); - if (consumed == 0 || strvalue[pos+consumed] == '\0') { - //PrintToServer("StringToVector - fail 2"); - return false; - } - pos += consumed+1; - consumed = StringToFloatEx(strvalue[pos], vec[2]); - if (consumed > 0 && strvalue[pos+consumed] == '\0') { - return true; - } - //PrintToServer("StringToVector - fail 3"); - return false; -} - -stock void KvizResetContext(int context) { - Kviz[context].Kviz_hKv = null; - Kviz[context].Kviz_iPositionPathCount = 0; - Kviz[context].Kviz_iTraversalStackLen = 0; -} - -stock bool KvizSwitchContext(KeyValues kv, bool mayCreate = false) { - if (kv == null) { - KvizThrowError(kv, "kv was null."); - } - - for (int i = 0; i < Kviz_iMaxContexts; i++) { - if (Kviz[Kviz_iCurrentContext].Kviz_hKv == kv) { - Kviz[Kviz_iCurrentContext].Kviz_iLRU = ++Kviz_iLRUCounter; - return true; - } - - Kviz_iCurrentContext++; - if (Kviz_iCurrentContext == Kviz_iMaxContexts) { - Kviz_iCurrentContext = 0; - } - } - - if (KvizSwitchFromArchive(kv)) { - Kviz[Kviz_iCurrentContext].Kviz_iLRU = ++Kviz_iLRUCounter; - return true; - } - - if (!mayCreate) { - LogError("Kvizzle - kv not found. Remember to call KvizCreate first!"); - return false; - } - - Kviz_iCurrentContext = KvizGetFreeContext(); - Kviz[Kviz_iCurrentContext].Kviz_hKv = kv; - Kviz[Kviz_iCurrentContext].Kviz_iLRU = ++Kviz_iLRUCounter; - return true; -} - -stock bool KvizSwitchFromArchive(KeyValues kv) { - int archiveLen = Kviz_hArchiveKv.Length; - for (int i = 0; i < archiveLen; i++) { - KeyValues archiveKv = view_as(Kviz_hArchiveKv.Get(i)); - if (archiveKv == kv) { - int context = KvizGetFreeContext(); - - char path[Kviz_iMaxPathDepth][Kviz_iMaxSectionLen]; - - int pathPos = 0; - for (int kvDepth = kv.NodesInStack(); kvDepth > 0; kvDepth = kv.GoBack() ? kvDepth - 1 : 0) { - kv.GetSectionName(path[pathPos], sizeof(path[])); - pathPos++; - } - - char kvizPos[Kviz_iMaxPathDepth*Kviz_iMaxSectionLen] = ""; - if (pathPos > 0) { - // TODO: Can be optimized a lot, because StrCat is getting strlen all the time - pathPos--; - strcopy(kvizPos, sizeof(kvizPos), path[pathPos]); - for (pathPos--; pathPos >= 0; pathPos--) { - StrCat(kvizPos, sizeof(kvizPos), "."); - KvizEscape(path[pathPos], sizeof(path[]), path[pathPos]); - StrCat(kvizPos, sizeof(kvizPos), path[pathPos]); - } - } - - Kviz_iCurrentContext = context; - Kviz[context].Kviz_hKv = kv; - Kviz[context].Kviz_iPositionPathCount = 0; - Kviz[context].Kviz_iTraversalStackLen = 0; - if (!StrEqual("", kvizPos)) { - int action; - if (!KvizGoto(kv, kvizPos, false, action)) { - KvizThrowError(kv, "KvizSwitchFromArchive - KvizGoto failed - Please contact F2: %s", kvizPos); - } - } - - int archiveTSLen = Kviz_hArchiveTraversalStack.Get(i, 0); - Kviz[context].Kviz_iTraversalStackLen = archiveTSLen; - for (int j = 0; j < archiveTSLen; j++) { - Kviz[context].Kviz_iTraversalStack[j] = Kviz_hArchiveTraversalStack.Get(i, j+1); - } - - Kviz_hArchiveKv.Erase(i); - Kviz_hArchiveTraversalStack.Erase(i); - - return true; - } - } - - return false; -} - -stock int KvizGetFreeContext() { - int best = -1; - for (int context = 0; context < Kviz_iMaxContexts; context++) { - if (Kviz[context].Kviz_hKv == null) { - return context; - } - - if (best == -1 || Kviz[context].Kviz_iLRU < Kviz[best].Kviz_iLRU) { - best = context; - } - } - - KvizArchiveContext(best); - KvizResetContext(best); - return best; -} - -stock void KvizArchiveContext(int context) { - Kviz_hArchiveKv.Push(Kviz[context].Kviz_hKv); - int stack[Kviz_iMaxTraversalStack+1]; - stack[0] = Kviz[context].Kviz_iTraversalStackLen; - for (int i = 0; i < stack[0]; i++) { - stack[i+1] = Kviz[context].Kviz_iTraversalStack[i]; - } - Kviz_hArchiveTraversalStack.PushArray(stack); - Kviz[context].Kviz_hKv = null; -} - -stock bool KvizRemoveContext(KeyValues kv) { - for (int i = 0; i < Kviz_iMaxContexts; i++) { - if (Kviz[Kviz_iCurrentContext].Kviz_hKv == kv) { - Kviz[Kviz_iCurrentContext].Kviz_hKv = null; - return true; - } - - if (Kviz_iCurrentContext == 0) { - Kviz_iCurrentContext = Kviz_iMaxContexts - 1; - } - else { - Kviz_iCurrentContext--; - } - } - - return false; -} - -stock void KvizThrowError(KeyValues kv, const char[] text, any ...) { - char buffer[256]; - VFormat(buffer, sizeof(buffer), text, 2); - ThrowError("Kvizzle - %s", buffer); -} \ No newline at end of file diff --git a/includes/match.inc b/includes/match.inc index 8a8b0f0..9f76731 100644 --- a/includes/match.inc +++ b/includes/match.inc @@ -107,10 +107,10 @@ void Match_OnMapEnd() { } public void Match_Event_tournament_stateupdate(Event event, const char[] name, bool dontBroadcast) { - //new userid = GetEventInt(event, "userid"); + //new userid = event.GetInt("userid"); //new team = GetClientTeam(userid); - bool nameChange = GetEventBool(event, "namechange"); - bool readyState = GetEventBool(event, "readystate"); + bool nameChange = event.GetBool("namechange"); + bool readyState = event.GetBool("readystate"); if (nameChange) return; @@ -162,7 +162,7 @@ public void Match_Event_round_start(Event event, const char[] name, bool dontBro public void Match_Event_round_end(Event event, const char[] name, bool dontBroadcast) { if (g_bInMatch) { - bool fullRound = GetEventBool(event, "full_round"); + bool fullRound = event.GetBool("full_round"); g_bIsBonusRoundTime = true; g_fLastRoundEnd = GetEngineTime(); @@ -173,10 +173,10 @@ public void Match_Event_round_end(Event event, const char[] name, bool dontBroad public void Match_Event_player_team(Event event, const char[] name, bool dontBroadcast) { - //int userid = GetEventInt(event, "userid"); + //int userid = event.GetInt("userid"); //int client = GetClientOfUserId(userid); - //TFTeam oldteam = view_as(GetEventInt(event, "oldteam")); - //TFTeam newteam = view_as(GetEventInt(event, "team")); + //TFTeam oldteam = view_as(event.GetInt("oldteam")); + //TFTeam newteam = view_as(event.GetInt("team")); // Note: At this point in time, the player is still on the oldteam. // We wait until next frame before checking the amount of players on the teams. @@ -234,7 +234,7 @@ public void Match_TournamentModeChanged(ConVar convar, const char[] oldValue, co stock bool IsTournamentEnabled() { - return GetConVarBool(match_hCvarTournament); + return match_hCvarTournament.BoolValue; } stock bool IsWinConditionMet(bool ish = true) { @@ -242,17 +242,17 @@ stock bool IsWinConditionMet(bool ish = true) { if (timeleft != -1 && timeleft <= (ish ? 10 : 0)) return true; - int winlimit = GetConVarInt(match_hCvarWinlimit); + int winlimit = match_hCvarWinlimit.IntValue; int blueScore = GetTeamScore(view_as(TFTeam_Blue)); int redScore = GetTeamScore(view_as(TFTeam_Red)); if (winlimit > 0 && ((winlimit - blueScore) <= 0 || (winlimit - redScore) <= 0)) // Win limit hit return true; - int windiff = GetConVarInt(match_hCvarWindiff); + int windiff = match_hCvarWindiff.IntValue; if (windiff > 0 && (windiff - Math_Abs(redScore - blueScore)) <= 0) // Win difference limit hit return true; - int maxrounds = GetConVarInt(match_hCvarMaxRounds); + int maxrounds = match_hCvarMaxRounds.IntValue; if (maxrounds > 0 && (maxrounds - g_iRoundsPlayed) <= 0) // Max rounds hit return true; @@ -285,9 +285,9 @@ void Match_ResetMatch() { bool wasReset = true; int timeleft = GetTimeLeft(); - int winlimit = GetConVarInt(match_hCvarWinlimit); - int windiff = GetConVarInt(match_hCvarWindiff); - int maxrounds = GetConVarInt(match_hCvarMaxRounds); + int winlimit = match_hCvarWinlimit.IntValue; + int windiff = match_hCvarWindiff.IntValue; + int maxrounds = match_hCvarMaxRounds.IntValue; int blueScore = GetTeamScore(view_as(TFTeam_Blue)); int redScore = GetTeamScore(view_as(TFTeam_Red)); @@ -330,7 +330,7 @@ stock int GetTimeLeft() { if (!g_bInMatch || !g_bFirstRoundStarted) return -1; - int timelimit = GetConVarInt(match_hCvarTimelimit); + int timelimit = match_hCvarTimelimit.IntValue; if (timelimit <= 0) return -1; diff --git a/includes/simple-cURL.inc b/includes/simple-cURL.inc deleted file mode 100644 index 11da17f..0000000 --- a/includes/simple-cURL.inc +++ /dev/null @@ -1,82 +0,0 @@ -#if defined _simple_curl_included - #endinput -#endif -#define _simple_curl_included - -#include - - - - - - - -new SC_CURL_Default_Opts[][2] = { - {_:CURLOPT_NOSIGNAL,1}, - {_:CURLOPT_NOPROGRESS,1}, - {_:CURLOPT_TIMEOUT,30}, - {_:CURLOPT_CONNECTTIMEOUT,60}, - {_:CURLOPT_USE_SSL,CURLUSESSL_TRY}, - {_:CURLOPT_SSL_VERIFYPEER,0}, - {_:CURLOPT_SSL_VERIFYHOST,0}, - {_:CURLOPT_VERBOSE,0} -}; - -functag cURL_Result public(bool:success, const String:filename[]); - -new Handle:SC_kvData = INVALID_HANDLE; - -stock cURL_Get(const String:url[], cURL_Result:callback) { - if (SC_kvData == INVALID_HANDLE) { - SC_kvData = KvizCreate("Data"); - } - - new Handle:curl = curl_easy_init(); - curl_easy_setopt_int_array(curl, SC_CURL_Default_Opts, sizeof(SC_CURL_Default_Opts)); - - KvizSetNum(SC_kvData, _:callback, "%i.callback", _:curl); - - // Create a unique filename - decl String:filename[128]; - GetPluginFilename(GetMyHandle(), filename, sizeof(filename)); - Format(filename, sizeof(filename), "%s.%i.%i.txt", filename, GetSysTickCount(), GetRandomInt(0, 100000)); - - KvizSetString(SC_kvData, filename, "%i.filename", _:curl); - - new Handle:filehandle = curl_OpenFile(filename, "w"); - curl_easy_setopt_handle(curl, CURLOPT_WRITEDATA, filehandle); - KvizSetNum(SC_kvData, _:filehandle, "%i.filehandle", _:curl); - curl_easy_setopt_string(curl, CURLOPT_URL, view_as(url)); - curl_easy_perform_thread(curl, SC_cURL_Done); -} - - -public SC_cURL_Done(Handle:hndl, CURLcode:code) { - new cURL_Result:callback = cURL_Result:KvizGetNum(SC_kvData, 0, "%i.callback", _:hndl); - new Handle:filehandle = Handle:KvizGetNum(SC_kvData, 0, "%i.filehandle", _:hndl); - decl String:filename[128]; - KvizGetString(SC_kvData, filename, sizeof(filename), "", "%i.filename", _:hndl); - KvizDelete(SC_kvData, "%i", _:hndl); - - new bool:success; - if (code != CURLE_OK) { - new String:error_buffer[256]; - curl_easy_strerror(code, error_buffer, sizeof(error_buffer)); - CloseHandle(filehandle); - - success = false; - } else { - CloseHandle(filehandle); // Must be closed so it is flushed. - - success = true; - } - CloseHandle(hndl); - - Call_StartFunction(INVALID_HANDLE, callback); - Call_PushCell(_:success); - Call_PushString(filename); - Call_Finish(); - - DeleteFile(filename); -} - diff --git a/includes/smlib/clients.inc b/includes/smlib/clients.inc index 89b7f64..036cc34 100644 --- a/includes/smlib/clients.inc +++ b/includes/smlib/clients.inc @@ -257,12 +257,12 @@ stock void Client_SetObserverMode(int client, Obs_Mode mode, bool updateMoveType ConVar mp_forcecamera = FindConVar("mp_forcecamera"); if (mp_forcecamera != INVALID_HANDLE) { - switch (mp_forcecamera.IntValue) + switch (view_as(mp_forcecamera.IntValue)) { - case view_as(OBS_ALLOW_TEAM): { + case OBS_ALLOW_TEAM: { mode = OBS_MODE_IN_EYE; } - case view_as(OBS_ALLOW_NONE): { + case OBS_ALLOW_NONE: { mode = OBS_MODE_FIXED; // don't allow anything } } @@ -528,7 +528,7 @@ stock int Client_GetClones(int client, int[] cloneList) int x=0; char ip_client[16], ip_player[16]; - GetClientIP(client, ip_client, sizeof(client)); + GetClientIP(client, ip_client, sizeof(ip_client)); for (int player=1; player <= MaxClients; player++) { diff --git a/includes/smlib/entities.inc b/includes/smlib/entities.inc index 63d403c..8a35542 100644 --- a/includes/smlib/entities.inc +++ b/includes/smlib/entities.inc @@ -1246,7 +1246,7 @@ stock int Entity_SetHealth(int entity, int value, bool ignoreMax=false, bool kil SetEntProp(entity, Prop_Data, "m_iHealth", health); - if (health <= 0) { + if (health <= 0 && kill) { Entity_Kill(entity); } @@ -1648,9 +1648,11 @@ stock int Entity_GetGroundEntity(int entity) * @param damageType Use the DMG_ definations. * @param fakeClassName Classname to fake, you can set this if you * want a specific weapon to be shown in the HUD kill message. + * @param customOrigin Teleport point_hurt to origin before triggering hurt + * useful for damage force calculations e.g. explosions, gun fire direction, ect. * @return True on success, false otherwise. */ -stock bool Entity_Hurt(int entity, int damage, int attacker=0, int damageType=DMG_GENERIC, const char[] fakeClassName="") +stock bool Entity_Hurt(int entity, int damage, int attacker=0, int damageType=DMG_GENERIC, const char[] fakeClassName="", float customOrigin[3]={0.0, 0.0, 0.0}) { static int point_hurt = INVALID_ENT_REFERENCE; @@ -1667,19 +1669,25 @@ stock bool Entity_Hurt(int entity, int damage, int attacker=0, int damageType=DM AcceptEntityInput(point_hurt, "TurnOn"); SetEntProp(point_hurt, Prop_Data, "m_nDamage", damage); SetEntProp(point_hurt, Prop_Data, "m_bitsDamageType", damageType); + + char orignalTargetName[128]; + Entity_GetName(entity, orignalTargetName, sizeof(orignalTargetName)); Entity_PointHurtAtTarget(point_hurt, entity); if (fakeClassName[0] != '\0') { Entity_SetClassName(point_hurt, fakeClassName); } + TeleportEntity(point_hurt, customOrigin, NULL_VECTOR, NULL_VECTOR); + AcceptEntityInput(point_hurt, "Hurt", attacker); AcceptEntityInput(point_hurt, "TurnOff"); if (fakeClassName[0] != '\0') { Entity_SetClassName(point_hurt, "point_hurt"); } - + + DispatchKeyValue(entity, "targetname", orignalTargetName); return true; } @@ -1713,7 +1721,7 @@ stock void Entity_ClearParent(int entity) */ stock void Entity_SetParent(int entity, int parent) { - //SetVariantString("!activator"); + SetVariantString("!activator"); AcceptEntityInput(entity, "SetParent", parent); } @@ -2018,7 +2026,7 @@ stock void Entity_GetRenderColor(int entity, int color[4]) } for (int i=0; i < 4; i++) { - color[i] = GetEntData(entity, offset + i + 1, 1); + color[i] = GetEntData(entity, offset + i, 1); } } @@ -2085,6 +2093,6 @@ stock void Entity_SetRenderColor(int entity, int r=-1, int g=-1, int b=-1, int a */ stock bool Entity_AddOutput(int entity, const char[] input, int activator=-1, int caller=-1, int outputid=0) { - //SetVariantString(input); + SetVariantString(input); return AcceptEntityInput(entity, "addoutput", activator, caller, outputid); } diff --git a/includes/smlib/general.inc b/includes/smlib/general.inc index a7e4d35..d95a63b 100644 --- a/includes/smlib/general.inc +++ b/includes/smlib/general.inc @@ -122,7 +122,7 @@ stock bool IsParticleSystemPrecached(const char[] particleSystem) stock int FindStringIndexByTableName(const char[] table, const char[] str) { int tableIndex = INVALID_STRING_TABLE; - if ((tableIndex = FindStringTable("ParticleEffectNames")) == INVALID_STRING_TABLE) { + if ((tableIndex = FindStringTable(table)) == INVALID_STRING_TABLE) { return INVALID_STRING_INDEX; } diff --git a/includes/steamtools.inc b/includes/steamtools.inc deleted file mode 100644 index 7299d0a..0000000 --- a/includes/steamtools.inc +++ /dev/null @@ -1,352 +0,0 @@ -#if defined _steamtools_included -#endinput -#endif -#define _steamtools_included - -#define USE_CUSTOM_STEAMID -1 - -/** - * Called after SteamTools has completely finished loading. - * No features are available before this point. - * - * @noreturn - */ -forward Steam_FullyLoaded(); -forward Steam_Shutdown(); - - -/** - * Gets the current status of VAC on the server. - * - * @return A bool representing the current VAC status. - */ -native bool:Steam_IsVACEnabled(); - -/** - * Gets the server's external IP address, as reported by Steam. - * - * @param octets Reference to an array to be filled with the octets of - * the IP address. - * - * @noreturn - */ -native Steam_GetPublicIP(octets[4]); - - -/** - * Is fired when the Steam master servers report that your server is - * outdated - * - * @return Plugin_Continue to continue normal operation or Plugin_Handled - * to block the regular console message. - */ -forward Action:Steam_RestartRequested(); - - -/** - * Requests a client's status in a Steam group. - * Response is returned in Steam_GroupStatusResult forward. - * - * @param client Client index. - * @param groupAccountID 32-bit account ID of group. - * - * @return A bool representing whether or not the request was sent to - * Steam. - */ -native bool:Steam_RequestGroupStatus(client, groupAccountID); - -/** - * Called when a response to a group status request is recieved. - * This is called for all responses recieved, not just ones requested by - * your plugin. - * - * @param client Client index. - * @param groupAccountID 32-bit account ID of group. Make sure to check - * this agaist the ID you are expecting. - * @param groupMember Whether or not the client is a member in the - * specified group. - * @param groupMember Whether or not the client is an officer in the - * specified group. - * - * @noreturn - */ -forward Steam_GroupStatusResult(client, groupAccountID, bool:groupMember, bool:groupOfficer); - -#pragma deprecated No longer operational -native Steam_RequestGameplayStats(); -forward Steam_GameplayStats(rank, totalConnects, totalMinutesPlayed); - -#pragma deprecated No longer operational -native Steam_RequestServerReputation(); -forward Steam_Reputation(reputationScore, bool:banned, bannedIP, bannedPort, bannedGameID, banExpires); - - -/** - * Gets the current Steam connection state, the forwards below fire - * whenever this changes. - * - * @return Steam connection state. - */ -native bool:Steam_IsConnected(); - -/** - * Fired upon a successfull connection to Steam. - * Is also fired for late-loaded plugins. - * - * @noreturn - */ -forward Steam_SteamServersConnected(); - -/** - * Fired upon disconnection from Steam. - * Is also fired for late-loaded plugins. - * - * For plugins loaded with the server, this will normally be fired right - * after Steam_FullyLoaded, closly followed by Steam_SteamServersConnected - * if a successfull connection is established. - * - * @noreturn - */ -forward Steam_SteamServersDisconnected(); - -/** - * Sets an entry in the server's list of rules. This list is used to - * build the response to the A2S_RULES query and is generally known as - * the list of public convars. - * - * @param key Name of the key to set, is created if it does not already - * exist. - * @param value Value of the key to set, the named key is removed if this - * is blank. - * - * @noreturn - */ -native Steam_SetRule(const String:key[], const String:value[]); - -/** - * Clears the server's list of rules. This list is used to build the - * response to the A2S_RULES query and is generally known as the list of - * public convars. - * - * @noreturn - */ -native Steam_ClearRules(); - - -native Steam_ForceHeartbeat(); - -#pragma deprecated No longer operational -native bool:Steam_AddMasterServer(const String:serverAddress[]); -#pragma deprecated No longer operational -native bool:Steam_RemoveMasterServer(const String:serverAddress[]); -#pragma deprecated No longer operational -native Steam_GetNumMasterServers(); -#pragma deprecated No longer operational -native Steam_GetMasterServerAddress(server, String:serverAddress[], maxlength); - -native Steam_SetGameDescription(String:gameDescription[]); - -native Steam_RequestStats(client); -forward Steam_StatsReceived(client); -forward Steam_StatsUnloaded(client); -native Steam_GetStat(client, const String:statName[]); -native Float:Steam_GetStatFloat(client, const String:statName[]); -native bool:Steam_IsAchieved(client, const String:achievementName[]); - - -native Steam_GetNumClientSubscriptions(client); -native Steam_GetClientSubscription(client, index); - -native Steam_GetNumClientDLCs(client); -native Steam_GetClientDLC(client, index); - -stock bool:Steam_CheckClientSubscription(client, subid) -{ - new subCount = Steam_GetNumClientSubscriptions(client); - for (new x = 0; x < subCount; x++) - { - if (Steam_GetClientSubscription(client, x) == subid) - { - return true; - } - } - - return false; -} - -stock bool:Steam_CheckClientDLC(client, appid) -{ - new subCount = Steam_GetNumClientDLCs(client); - for (new x = 0; x < subCount; x++) - { - if (Steam_GetClientDLC(client, x) == appid) - { - return true; - } - } - - return false; -} - -native Steam_GetCSteamIDForClient(client, String:steamID[], maxlength); - -native bool:Steam_SetCustomSteamID(const String:renderedID[]); -native bool:Steam_GetCustomSteamID(String:renderedID[], maxlength); - -native Steam_RenderedIDToCSteamID(const String:renderedID[], String:steamID[], maxlength); -native Steam_CSteamIDToRenderedID(const String:steamID[], String:renderedID[], maxlength); - -native Steam_GroupIDToCSteamID(groupID, String:steamID[], maxlength); -native Steam_CSteamIDToGroupID(const String:steamID[]); - -enum HTTPRequestHandle -{ - INVALID_HTTP_HANDLE = 0, -}; - -enum HTTPMethod -{ - HTTPMethod_Invalid = 0, - HTTPMethod_GET, - HTTPMethod_HEAD, - HTTPMethod_POST, -}; - -enum HTTPStatusCode -{ - HTTPStatusCode_Invalid = 0, - - // Informational codes - HTTPStatusCode_Continue = 100, - HTTPStatusCode_SwitchingProtocols = 101, - - // Success codes - HTTPStatusCode_OK = 200, - HTTPStatusCode_Created = 201, - HTTPStatusCode_Accepted = 202, - HTTPStatusCode_NonAuthoritative = 203, - HTTPStatusCode_NoContent = 204, - HTTPStatusCode_ResetContent = 205, - HTTPStatusCode_PartialContent = 206, - - // Redirection codes - HTTPStatusCode_MultipleChoices = 300, - HTTPStatusCode_MovedPermanently = 301, - HTTPStatusCode_Found = 302, - HTTPStatusCode_SeeOther = 303, - HTTPStatusCode_NotModified = 304, - HTTPStatusCode_UseProxy = 305, - HTTPStatusCode_TemporaryRedirect = 307, - - // Error codes - HTTPStatusCode_BadRequest = 400, - HTTPStatusCode_Unauthorized = 401, - HTTPStatusCode_PaymentRequired = 402, - HTTPStatusCode_Forbidden = 403, - HTTPStatusCode_NotFound = 404, - HTTPStatusCode_MethodNotAllowed = 405, - HTTPStatusCode_NotAcceptable = 406, - HTTPStatusCode_ProxyAuthRequired = 407, - HTTPStatusCode_RequestTimeout = 408, - HTTPStatusCode_Conflict = 409, - HTTPStatusCode_Gone = 410, - HTTPStatusCode_LengthRequired = 411, - HTTPStatusCode_PreconditionFailed = 412, - HTTPStatusCode_RequestEntityTooLarge = 413, - HTTPStatusCode_RequestURITooLong = 414, - HTTPStatusCode_UnsupportedMediaType = 415, - HTTPStatusCode_RequestedRangeNotSatisfiable = 416, - HTTPStatusCode_ExpectationFailed = 417, - - // Server error codes - HTTPStatusCode_InternalServerError = 500, - HTTPStatusCode_NotImplemented = 501, - HTTPStatusCode_BadGateway = 502, - HTTPStatusCode_ServiceUnavailable = 503, - HTTPStatusCode_GatewayTimeout = 504, - HTTPStatusCode_HTTPVersionNotSupported = 505, -}; - -typeset HTTPRequestComplete -{ - function void (HTTPRequestHandle HTTPRequest, bool requestSuccessful, HTTPStatusCode statusCode); - function void (HTTPRequestHandle HTTPRequest, bool requestSuccessful, HTTPStatusCode statusCode, any contextData); -}; - -native HTTPRequestHandle:Steam_CreateHTTPRequest(HTTPMethod:HTTPRequestMethod, const String:absoluteURL[]); -native Steam_SetHTTPRequestNetworkActivityTimeout(HTTPRequestHandle:HTTPRequest, timeoutSeconds); -native Steam_SetHTTPRequestHeaderValue(HTTPRequestHandle:HTTPRequest, const String:headerName[], const String:headerValue[]); -native Steam_SetHTTPRequestGetOrPostParameter(HTTPRequestHandle:HTTPRequest, const String:paramName[], const String:paramValue[]); -native bool:Steam_SendHTTPRequest(HTTPRequestHandle:HTTPRequest, HTTPRequestComplete:callbackFunction, any:contextData = 0); -native Steam_DeferHTTPRequest(HTTPRequestHandle:HTTPRequest); -native Steam_PrioritizeHTTPRequest(HTTPRequestHandle:HTTPRequest); -native Steam_GetHTTPResponseHeaderSize(HTTPRequestHandle:HTTPRequest, const String:headerName[]); -native Steam_GetHTTPResponseHeaderValue(HTTPRequestHandle:HTTPRequest, const String:headerName[], String:headerValueBuffer[], bufferSize); -native Steam_GetHTTPResponseBodySize(HTTPRequestHandle:HTTPRequest); -native Steam_GetHTTPResponseBodyData(HTTPRequestHandle:HTTPRequest, String:bodyDataBuffer[], bufferSize); -native Steam_WriteHTTPResponseBody(HTTPRequestHandle:HTTPRequest, const String:filePath[]); -native Steam_ReleaseHTTPRequest(HTTPRequestHandle:HTTPRequest); -native Float:Steam_GetHTTPDownloadProgressPercent(HTTPRequestHandle:HTTPRequest); -native bool:Steam_SetHTTPRequestRawPostBody(HTTPRequestHandle:HTTPRequest, const String:data[], dataLength, const String:contentType[]="text/plain"); -native bool:Steam_SetHTTPRequestRawPostBodyFile(HTTPRequestHandle:HTTPRequest, const String:filePath[], const String:contentType[]="text/plain"); - -#if !defined REQUIRE_EXTENSIONS -public __ext_SteamTools_SetNTVOptional() -{ - MarkNativeAsOptional("Steam_IsVACEnabled"); - MarkNativeAsOptional("Steam_GetPublicIP"); - MarkNativeAsOptional("Steam_RequestGroupStatus"); - MarkNativeAsOptional("Steam_IsConnected"); - MarkNativeAsOptional("Steam_SetRule"); - MarkNativeAsOptional("Steam_ClearRules"); - MarkNativeAsOptional("Steam_ForceHeartbeat"); - MarkNativeAsOptional("Steam_SetGameDescription"); - MarkNativeAsOptional("Steam_RequestStats"); - MarkNativeAsOptional("Steam_GetStat"); - MarkNativeAsOptional("Steam_GetStatFloat"); - MarkNativeAsOptional("Steam_IsAchieved"); - MarkNativeAsOptional("Steam_GetNumClientSubscriptions"); - MarkNativeAsOptional("Steam_GetClientSubscription"); - MarkNativeAsOptional("Steam_GetNumClientDLCs"); - MarkNativeAsOptional("Steam_GetClientDLC"); - MarkNativeAsOptional("Steam_GetCSteamIDForClient"); - MarkNativeAsOptional("Steam_SetCustomSteamID"); - MarkNativeAsOptional("Steam_GetCustomSteamID"); - MarkNativeAsOptional("Steam_RenderedIDToCSteamID"); - MarkNativeAsOptional("Steam_CSteamIDToRenderedID"); - MarkNativeAsOptional("Steam_GroupIDToCSteamID"); - MarkNativeAsOptional("Steam_CSteamIDToGroupID"); - MarkNativeAsOptional("Steam_CreateHTTPRequest"); - MarkNativeAsOptional("Steam_SetHTTPRequestNetworkActivityTimeout"); - MarkNativeAsOptional("Steam_SetHTTPRequestHeaderValue"); - MarkNativeAsOptional("Steam_SetHTTPRequestGetOrPostParameter"); - MarkNativeAsOptional("Steam_SendHTTPRequest"); - MarkNativeAsOptional("Steam_DeferHTTPRequest"); - MarkNativeAsOptional("Steam_PrioritizeHTTPRequest"); - MarkNativeAsOptional("Steam_GetHTTPResponseHeaderSize"); - MarkNativeAsOptional("Steam_GetHTTPResponseHeaderValue"); - MarkNativeAsOptional("Steam_GetHTTPResponseBodySize"); - MarkNativeAsOptional("Steam_GetHTTPResponseBodyData"); - MarkNativeAsOptional("Steam_WriteHTTPResponseBody"); - MarkNativeAsOptional("Steam_ReleaseHTTPRequest"); - MarkNativeAsOptional("Steam_GetHTTPDownloadProgressPercent"); - MarkNativeAsOptional("Steam_SetHTTPRequestRawPostBody"); - MarkNativeAsOptional("Steam_SetHTTPRequestRawPostBodyFile"); -} -#endif - -public Extension:__ext_SteamTools = -{ - name = "SteamTools", - file = "steamtools.ext", -#if defined AUTOLOAD_EXTENSIONS - autoload = 1, -#else - autoload = 0, -#endif -#if defined REQUIRE_EXTENSIONS - required = 1, -#else - required = 0, -#endif -} diff --git a/keyvalues-parser.ps1 b/keyvalues-parser.ps1 new file mode 100644 index 0000000..145cb72 --- /dev/null +++ b/keyvalues-parser.ps1 @@ -0,0 +1,109 @@ +function ConvertFrom-KeyValues { + param( + [string]$text + ) + + $lines = $text -split "`r?`n" + $stack = @() + $current = @{} + $pendingKey = $null + + foreach ($line in $lines) { + $line = $line.Trim() + if ($line -eq "" -or $line.StartsWith("//")) { continue } + + # "Key" "Value" + if ($line -match '^\s*"([^"]+)"\s+"([^"]+)"\s*$') { + $k = $matches[1] + $v = $matches[2] + if ($current.ContainsKey($k)) { + # If key already exists, convert to array + if ($current[$k] -isnot [array]) { + $current[$k] = @($current[$k]) + } + $current[$k] += $v + } + else { + $current[$k] = $v + } + continue + } + + # "Key" + if ($line -match '^\s*"([^"]+)"\s*$') { + $pendingKey = $matches[1] + continue + } + + # { + if ($line -eq "{") { + $stack += @($current) + $newDict = @{} + if ($pendingKey) { + $current[$pendingKey] = $newDict + $current = $newDict + $pendingKey = $null + } + continue + } + + # } + if ($line -eq "}") { + $current = $stack[-1] + $stack = $stack[0..($stack.Count - 2)] + continue + } + + Write-Error "KeyValue parsing failed: $line" + exit 1 + } + + return $current +} + +function Test-UpdaterFile { + param( + [string]$KeyValueFile + ) + + if (-not $KeyValueFile -or -not (Test-Path $KeyValueFile)) { + Write-Error "KeyValue file not specified or does not exist: $KeyValueFile" + exit 1 + } + + $text = Get-Content $KeyValueFile -Raw + $parsed = ConvertFrom-KeyValues -text $text + + $missingSections = @() + + if (-not $parsed.ContainsKey("Updater")) { + $missingSections += "Updater" + } + else { + $updater = $parsed["Updater"] + if (-not $updater.ContainsKey("Information")) { + $missingSections += "Updater.Information" + } + else { + $info = $updater["Information"] + if (-not $info.ContainsKey("Version") -or -not $info["Version"].ContainsKey("Latest")) { + $missingSections += "Updater.Information.Version.Latest" + } + if (-not $info.ContainsKey("Notes")) { + $missingSections += "Updater.Information.Notes" + } + } + if (-not $updater.ContainsKey("Files") -or -not $updater["Files"].ContainsKey("Plugin")) { + $missingSections += "Updater.Files.Plugin" + } + } + + if ($missingSections.Count -eq 0) { + return $true + } + else { + Write-Host "Missing sections:" + $missingSections | ForEach-Object { Write-Host "- $_" } + return $false + } +} \ No newline at end of file diff --git a/kvizzle-test/README.md b/kvizzle-test/README.md new file mode 100644 index 0000000..3196127 --- /dev/null +++ b/kvizzle-test/README.md @@ -0,0 +1,5 @@ +# Kvizzle Unit Tests + +This plugin is only used for running unit tests for the Kvizzle include. + +**Do not** install on servers. \ No newline at end of file diff --git a/kvizzle/kvizzle.sp b/kvizzle-test/kvizzle-test.sp similarity index 77% rename from kvizzle/kvizzle.sp rename to kvizzle-test/kvizzle-test.sp index b3c59d8..bd9ceb8 100644 --- a/kvizzle/kvizzle.sp +++ b/kvizzle-test/kvizzle-test.sp @@ -1,41 +1,42 @@ #pragma semicolon 1 +#pragma newdecls required #include #include -//#include -#define PLUGIN_VERSION "1.0.0" +#define PLUGIN_VERSION "1.0.1" -public Plugin:myinfo = { - name = "Kvizzle", +public Plugin myinfo = +{ + name = "Test: Kvizzle", author = "F2", description = "Test of kvizzle.inc", version = PLUGIN_VERSION, - url = "http://sourcemod.krus.dk/" + url = "https://sourcemod.krus.dk/" }; -public OnPluginStart() { +public void OnPluginStart() { RunUnitTest(); } -stock RunUnitTest() { - decl String:path[256]; +stock void RunUnitTest() { + char path[256]; BuildPath(Path_SM, path, sizeof(path), "configs/kvizzle-unittest.cfg"); if (FileExists(path) == false) SetFailState("Could not find kvizzle unittest config file: %s", path); - + PrintToServer("Loading Kvizzle file..."); - new Handle:kv = KvizCreateFromFile("Kvizzle", path); - if (kv == INVALID_HANDLE) + KeyValues kv = KvizCreateFromFile("Kvizzle", path); + if (kv == null) SetFailState("kv file not properly formatted"); PrintToServer("Start testing..."); - + // Run all tests twice, to test that Kvizzle's internal traversal stack works. - for (new i = 0; i < 2; i++) { + for (int i = 0; i < 2; i++) { UTSimpleChildren(kv); UTSimplePseudoClasses(kv); UTSimpleActions(kv); @@ -47,285 +48,285 @@ stock RunUnitTest() { UTDelete(); UTContextSwitch(); UTOtherStuff(kv); // KvizExists, KvizRewind - + // TODO: Check the deepnes of traversal stack, etc. Go to the edge! (Kviz_iMaxTraversalStack) // TODO: KvizCreateFromString } KvizClose(kv); - + PrintToServer("Unit tests SUCCESSFUL"); } -UTSimpleChildren(Handle:kv) { +void UTSimpleChildren(KeyValues kv) { PrintToServer("UTSimpleChildren..."); - decl String:value[128]; - decl String:path[128]; - + char value[128]; + char path[128]; + path = "Simple.Section1.MyKey2"; if (!KvizGetStringExact(kv, value, sizeof(value), path) || !StrEqual(value, "MyValue2")) UTError(kv, "Error reading %s", path); - + path = "Simple.Section1.MyKey3"; if (!KvizGetStringExact(kv, value, sizeof(value), path) || !StrEqual(value, "MyValue3")) UTError(kv, "Error reading %s", path); - + path = "Simple.Section2.Subsection1.MySubKey1"; if (!KvizGetStringExact(kv, value, sizeof(value), path) || !StrEqual(value, "MySubValue1a")) UTError(kv, "Error reading %s", path); - + path = "Simple.Section2.Subsection2.MySubKey1"; if (!KvizGetStringExact(kv, value, sizeof(value), path) || !StrEqual(value, "MySubValue1b")) UTError(kv, "Error reading %s", path); - + path = "Simple.Section1.MyKey3\\.4\\:5"; if (!KvizGetStringExact(kv, value, sizeof(value), path) || !StrEqual(value, "MyValue3.4:5")) UTError(kv, "Error reading %s", path); } -UTSimplePseudoClasses(Handle:kv) { +void UTSimplePseudoClasses(KeyValues kv) { PrintToServer("UTSimplePseudoClasses..."); - decl String:value[128]; - decl String:path[128]; - + char value[128]; + char path[128]; + path = "Simple.Section1:last-child"; if (!KvizGetStringExact(kv, value, sizeof(value), path) || !StrEqual(value, "MyValue3")) UTError(kv, "Error reading %s", path); - + path = "Simple.Section1.MyKey3:section-name"; if (!KvizGetStringExact(kv, value, sizeof(value), path) || !StrEqual(value, "MyKey3")) UTError(kv, "Error reading %s", path); - + path = "Simple.Section2:last-child.MySubKey2"; if (!KvizGetStringExact(kv, value, sizeof(value), path) || !StrEqual(value, "MySubValue2c")) UTError(kv, "Error reading %s", path); - + path = "Simple.Section2:nth-child(2).MySubKey3"; if (!KvizGetStringExact(kv, value, sizeof(value), path) || !StrEqual(value, "MySubValue3b")) UTError(kv, "Error reading %s", path); - + path = "Simple.Section1:any-child:has-value(myvalue1):section-name"; if (KvizGetStringExact(kv, value, sizeof(value), path)) UTError(kv, "Error reading %s", path); - + path = "Simple.Section1:any-child:has-value(MyValue1):section-name"; if (!KvizGetStringExact(kv, value, sizeof(value), path) || !StrEqual(value, "MyKey1")) UTError(kv, "Error reading %s", path); - + path = "Simple.Section1:any-child:has-value-ci(myvalue1):section-name"; if (!KvizGetStringExact(kv, value, sizeof(value), path) || !StrEqual(value, "MyKey1")) UTError(kv, "Error reading %s", path); } -UTSimpleActions(Handle:kv) { +void UTSimpleActions(KeyValues kv) { PrintToServer("UTSimpleActions..."); - new value; - decl String:strvalue[128]; - decl String:path[128]; - + int value; + float fvalue; + char strvalue[128]; + char path[128]; + path = "Simple.Section2.Subsection1:count"; if (!KvizGetNumExact(kv, value, path) || value != 3) - UTError(kv, "Error reading %s", path); - + UTError(kv, "Error reading %s (read %i)", path, value); + path = "Simple.Section3.Num1000:value"; if (!KvizGetNumExact(kv, value, path) || value != 1000) - UTError(kv, "Error reading %s", path); - + UTError(kv, "Error reading %s (read %i)", path, value); + path = "Simple.Section3:section-name"; - if (!KvizGetStringExact(kv, strvalue, sizeof(value), path) || StrEqual(strvalue, "Section3")) - UTError(kv, "Error reading %s", path); - + if (!KvizGetStringExact(kv, strvalue, sizeof(strvalue), path) || !StrEqual(strvalue, "Section3")) + UTError(kv, "Error reading %s (read %s)", path, strvalue); + path = "Simple.Section3:value-or-section"; - if (!KvizGetStringExact(kv, strvalue, sizeof(value), path) || StrEqual(strvalue, "Section3")) - UTError(kv, "Error reading %s", path); - + if (!KvizGetStringExact(kv, strvalue, sizeof(strvalue), path) || !StrEqual(strvalue, "Section3")) + UTError(kv, "Error reading %s (read %s)", path, strvalue); + path = "Simple.Section3.Float1\\.0:value-or-section"; - if (!KvizGetStringExact(kv, strvalue, sizeof(value), path) || StrEqual(strvalue, "1.0")) - UTError(kv, "Error reading %s", path); - + if (!KvizGetFloatExact(kv, fvalue, path) || fvalue != 1.0) + UTError(kv, "Error reading %s (read %f)", path, fvalue); } -UTSimpleDefaultValue(Handle:kv) { +void UTSimpleDefaultValue(KeyValues kv) { PrintToServer("UTSimpleDefaultValue..."); - decl String:value[128]; - decl String:path[128]; - + char value[128]; + char path[128]; + path = "Simple.Section1:last-child"; if (!KvizGetString(kv, value, sizeof(value), "def", path) || !StrEqual(value, "MyValue3")) UTError(kv, "Error reading %s", path); - + path = "Simple.Section1:nth-child(100)"; if (KvizGetString(kv, value, sizeof(value), "def", path) || !StrEqual(value, "def")) UTError(kv, "Error reading %s", path); - + path = "Simple.Section1"; if (KvizGetString(kv, value, sizeof(value), "def", path) || !StrEqual(value, "def")) UTError(kv, "Error reading %s", path); - + path = "Simple.Section4.x"; if (KvizGetString(kv, value, sizeof(value), "def", path) || !StrEqual(value, "def")) UTError(kv, "Error reading %s", path); - + path = "Simple.Section2:last-child.MySubKey3"; if (!KvizGetString(kv, value, sizeof(value), "def", path) || !StrEqual(value, "MySubValue3c")) UTError(kv, "Error reading %s", path); - + path = "Simple.Section2:last-child:any-child:has-value(MySubValue3d)"; if (KvizGetString(kv, value, sizeof(value), "def", path) || !StrEqual(value, "def")) UTError(kv, "Error reading %s", path); } -UTSimpleGetTypes(Handle:kv) { +void UTSimpleGetTypes(KeyValues kv) { PrintToServer("UTSimpleGetTypes..."); - decl String:path[128]; - new Float:vecvalue[3]; - new longlong[2]; - new r, g, b, a; - + char path[128]; + float vecvalue[3]; + int longlong[2]; + int r, g, b, a; + path = "Simple.Section3.Num1"; if (KvizGetNum(kv, 0, path) != 1) UTError(kv, "Error reading %s", path); - + path = "Simple.Section3.Num1000"; if (KvizGetNum(kv, 0, path) != 1000) UTError(kv, "Error reading %s", path); - + path = "Simple.Section3.Float1\\.0"; if (KvizGetFloat(kv, 0.0, path) != 1.0) UTError(kv, "Error reading %s", path); - + path = "Simple.Section3.Vector123"; - if (!KvizGetVector(kv, vecvalue, Float:{0.0,0.0,0.0}, path) || vecvalue[0] != 1.0 || vecvalue[1] != 2.0 || vecvalue[2] != 3.0) + if (!KvizGetVector(kv, vecvalue, { 0.0, 0.0, 0.0 }, path) || vecvalue[0] != 1.0 || vecvalue[1] != 2.0 || vecvalue[2] != 3.0) UTError(kv, "Error reading %s", path); - + path = "Simple.Section3.Color1234"; if (!KvizGetColor(kv, r, g, b, a, 0, 0, 0, 0, path) || r != 1 || g != 2 || b != 3 || a != 4) UTError(kv, "Error reading %s", path); - + path = "Simple.Section3.UInt64"; - if (!KvizGetUInt64(kv, longlong, {0,0}, path) || longlong[0] != 1048576 || longlong[1] != 131072) + if (!KvizGetUInt64(kv, longlong, { 0, 0 }, path) || longlong[0] != 1048576 || longlong[1] != 131072) UTError(kv, "Error reading %s (%i, %i)", path, longlong[0], longlong[1]); } -UTSetTypes() { +void UTSetTypes() { PrintToServer("UTSetTypes..."); - new Handle:kv = KvizCreate("Test"); - + KeyValues kv = KvizCreate("Test"); + KvizSetNum(kv, 1, "Num1"); KvizSetNum(kv, 1000, "Num1000"); KvizSetFloat(kv, 1.0, "Float1\\.0"); - KvizSetVector(kv, Float:{1.0,2.0,3.0}, "Vector123"); + KvizSetVector(kv, { 1.0, 2.0, 3.0 }, "Vector123"); KvizSetColor(kv, 1, 2, 3, 4, "Color1234"); KvizSetUInt64(kv, { 1048576, 131072 }, "UInt64"); - + KvRewind(kv); - + if (KvGetNum(kv, "Num1000", 0) != 1000) - UTError(INVALID_HANDLE, "Error setting num"); - + UTError(kv, "Error setting num"); + if (KvGetNum(kv, "Num1", 0) != 1) - UTError(INVALID_HANDLE, "Error setting num"); - + UTError(kv, "Error setting num"); + if (KvGetFloat(kv, "Float1.0", 0.0) != 1.0) - UTError(INVALID_HANDLE, "Error setting float"); - - new Float:vec[3]; + UTError(kv, "Error setting float"); + + float vec[3]; KvGetVector(kv, "Vector123", vec); if (vec[0] != 1.0 || vec[1] != 2.0 || vec[2] != 3.0) - UTError(INVALID_HANDLE, "Error setting vector"); - - new r, g, b, a; + UTError(kv, "Error setting vector"); + + int r, g, b, a; KvGetColor(kv, "Color1234", r, g, b, a); if (r != 1 || g != 2 || b != 3 || a != 4) - UTError(INVALID_HANDLE, "Error setting color"); - - new longlong[2]; + UTError(kv, "Error setting color"); + + int longlong[2]; KvGetUInt64(kv, "UInt64", longlong); if (longlong[0] != 1048576 /*|| longlong[1] != 131072*/) // For some reason, uint64[1] is always 0 for me when I use SetUInt64 (also with normal Kv functions). - UTError(INVALID_HANDLE, "Error setting UInt64 %i %i", longlong[0], longlong[1]); - + UTError(kv, "Error setting UInt64 %i %i", longlong[0], longlong[1]); + KvizClose(kv); } -UTDeepPseudoClasses(Handle:kv) { +void UTDeepPseudoClasses(KeyValues kv) { PrintToServer("UTDeepPseudoClasses..."); - decl String:strvalue[128]; - new value; - decl String:path[128]; - + char strvalue[128]; + int value; + char path[128]; + path = "Deep.A1.B1:any-child.key:has-value(%i):parent.value"; if (!KvizGetNumExact(kv, value, path, 2) || value != 4) UTError(kv, "Error reading %s", path); - + path = "Deep.A2.B1:any-child.key:has-value(%i):parent.value"; if (!KvizGetNumExact(kv, value, path, 8) || value != 256) UTError(kv, "Error reading %s", path); - + path = "Deep:any-child:any-child:any-child.key:has-value(%i):parent.value"; if (!KvizGetNumExact(kv, value, path, 11) || value != 2048) UTError(kv, "Error reading %s", path); - + path = "Deep:any-child:any-child:any-child.key:has-value(%i):parent.value"; if (!KvizGetNumExact(kv, value, path, 12) || value != 4096) UTError(kv, "Error reading %s", path); - + path = "Deep:any-child:any-child:any-child.key:has-value(%i):parent.value"; if (!KvizGetNumExact(kv, value, path, 3) || value != 8) UTError(kv, "Error reading %s", path); - + path = "Deep:any-child:any-child:any-child.key:has-value(%i):parent:parent:parent:section-name"; if (!KvizGetStringExact(kv, strvalue, sizeof(strvalue), path, 7) || !StrEqual(strvalue, "A2")) UTError(kv, "Error reading %s", path); } -UTDeepJump(Handle:kv) { +void UTDeepJump(KeyValues kv) { PrintToServer("UTDeepJump..."); - decl String:strvalue[128]; - decl String:path[128]; - + char strvalue[128]; + char path[128]; + path = "Deep:first-child"; if (!KvizJumpToKey(kv, false, path)) UTError(kv, "Error jumping to %s", path); - + path = "B1:first-child.value"; if (!KvizGetStringExact(kv, strvalue, sizeof(strvalue), path) || !StrEqual(strvalue, "2")) UTError(kv, "Error reading %s", path); - + path = "Deep.A1"; if (KvizJumpToKey(kv, false, path)) UTError(kv, "Error - should not be able to jump to %s", path); - + path = "B2:nth-child(2)"; if (!KvizJumpToKey(kv, false, path)) UTError(kv, "Error jumping to %s", path); - + path = "key"; if (!KvizGetStringExact(kv, strvalue, sizeof(strvalue), path) || !StrEqual(strvalue, "5")) UTError(kv, "Error reading %s", path); - + if (!KvizGoBack(kv)) UTError(kv, "Error going back"); - + path = "B1:any-child:any-child:has-value(8):parent:section-name"; if (!KvizGetStringExact(kv, strvalue, sizeof(strvalue), path) || !StrEqual(strvalue, "zz")) UTError(kv, "Error reading %s (%s)", path, strvalue); - + if (!KvizGoBack(kv)) UTError(kv, "Error going back"); } -UTDelete() { +void UTDelete() { PrintToServer("UTDelete..."); - new Handle:kv = KvizCreate("Test"); - + KeyValues kv = KvizCreate("Test"); + KvizSetString(kv, "1", "A key"); KvizSetString(kv, "2", "B key"); KvizSetString(kv, "3", "C key"); @@ -334,53 +335,52 @@ UTDelete() { KvizSetString(kv, "42", "D key.b"); KvizSetString(kv, "5", "E key"); KvizSetString(kv, "6", "F key"); - + KvizDelete(kv, "%s", "C key"); if (KvizGetNum(kv, 0, ":count") != 5) - UTError(INVALID_HANDLE, "Error deleting (%i)", KvizGetNum(kv, 0, ":count")); - + UTError(kv, "Error deleting (%i)", KvizGetNum(kv, 0, ":count")); + KvizDelete(kv, "%s", ":first-child"); if (KvizGetNum(kv, 0, "A key") != 0) - UTError(INVALID_HANDLE, "Error deleting"); - + UTError(kv, "Error deleting"); + if (KvizGetNum(kv, 0, "B key") != 2) - UTError(INVALID_HANDLE, "Error deleting"); - + UTError(kv, "Error deleting"); + if (KvizGetNum(kv, 0, "C key") != 0) - UTError(INVALID_HANDLE, "Error deleting"); - + UTError(kv, "Error deleting"); + KvizDelete(kv, "%s", ":nth-child(3)"); if (KvizGetNum(kv, 0, ":count") != 3) - UTError(INVALID_HANDLE, "Error deleting (%i)", KvizGetNum(kv, 0, ":count")); - + UTError(kv, "Error deleting (%i)", KvizGetNum(kv, 0, ":count")); + if (KvizGetNum(kv, 0, ":nth-child(3)") != 6) - UTError(INVALID_HANDLE, "Error deleting"); - + UTError(kv, "Error deleting"); + KvizClose(kv); } -UTContextSwitch() { +void UTContextSwitch() { PrintToServer("UTContextSwitch..."); - decl String:path[128] = "aa.bb.cc.dd.ee.ff.gg.hh.aa.bb.aa.bb.cc.dd.ee.ff.gg.hh.aa.bb.aa.bb.cc.dd.ee.ff.gg.hh.aa.bb.cc.dd"; // 32 depth + char path[128] = "aa.bb.cc.dd.ee.ff.gg.hh.aa.bb.aa.bb.cc.dd.ee.ff.gg.hh.aa.bb.aa.bb.cc.dd.ee.ff.gg.hh.aa.bb.cc.dd"; // 32 depth - new Handle:kv1 = KvizCreate("Test1"); + KeyValues kv1 = KvizCreate("Test1"); KvizSetString(kv1, "test1", path); - new Handle:kv2 = KvizCreate("Test2"); - new Handle:kv3 = KvizCreate("Test3"); - new Handle:kv4 = KvizCreate("Test4"); - new Handle:kv5 = KvizCreate("Test5"); - new Handle:kv6 = KvizCreate("Test6"); + KeyValues kv2 = KvizCreate("Test2"); + KeyValues kv3 = KvizCreate("Test3"); + KeyValues kv4 = KvizCreate("Test4"); + KeyValues kv5 = KvizCreate("Test5"); + KeyValues kv6 = KvizCreate("Test6"); KvizSetString(kv6, "test6", path); - - decl String:strvalue[128] = ""; + char strvalue[128] = ""; if (!KvizGetStringExact(kv1, strvalue, sizeof(strvalue), path) || !StrEqual(strvalue, "test1")) UTError(kv1, "Error reading %s: %s", path, strvalue); if (!KvizGetStringExact(kv6, strvalue, sizeof(strvalue), path) || !StrEqual(strvalue, "test6")) UTError(kv6, "Error reading %s: %s", path, strvalue); - + KvizClose(kv1); KvizClose(kv2); KvizClose(kv3); @@ -389,81 +389,79 @@ UTContextSwitch() { KvizClose(kv6); } -UTOtherStuff(Handle:kv) { +void UTOtherStuff(KeyValues kv) { PrintToServer("UTOtherStuff..."); - decl String:path[128]; - decl String:strvalue[128]; - + char path[128]; + char strvalue[128]; + path = "Simple.Section1.%s"; if (!KvizExists(kv, path, "MyKey3")) UTError(kv, "Error checking existence", path); - + path = "Simple.Section1.MyKey1"; - if (!KvizExists(kv, path)) + if (!KvizExists(kv, path)) UTError(kv, "Error checking existence", path); - + path = "Simple.Section2.Subsection1"; if (!KvizExists(kv, path)) UTError(kv, "Error checking existence", path); - + path = "Simple.Section2.Subsection4"; if (KvizExists(kv, path)) UTError(kv, "Error checking existence", path); - + path = "Simple.Section1.MyKey4"; if (KvizExists(kv, path)) UTError(kv, "Error checking existence", path); - + path = "Simple.Section1.Mykey3"; if (!KvizExists(kv, path)) UTError(kv, "Error checking existence", path); - + path = "Simple:any-child:any-child:any-child:has-value(MySubValue3b)"; if (!KvizExists(kv, path)) UTError(kv, "Error checking existence", path); - + path = "Simple:any-child:any-child:any-child:has-value(MySubValue4a)"; if (KvizExists(kv, path)) UTError(kv, "Error checking existence", path); - + // KvizEscape path = "a.b:c"; KvizEscape(path, sizeof(path), path); if (!StrEqual(path, "a\\.b\\:c")) UTError(kv, "Error escaping: %s", path); - + // KvizRewind & KvizGoBack if (!KvizJumpToKey(kv, false, "Simple")) UTError(kv, "Error jumping"); if (!KvizJumpToKey(kv, false, "Section1")) UTError(kv, "Error jumping"); - + path = "MyKey2"; if (!KvizGetStringExact(kv, strvalue, sizeof(strvalue), path) || !StrEqual(strvalue, "MyValue2")) UTError(kv, "Error reading %s (%s)", path, strvalue); - + KvizGoBack(kv); path = "Section3.Num1"; if (!KvizGetStringExact(kv, strvalue, sizeof(strvalue), path) || !StrEqual(strvalue, "1")) UTError(kv, "Error reading %s (%s)", path, strvalue); - + if (!KvizJumpToKey(kv, false, "Section1")) UTError(kv, "Error jumping"); - + KvizRewind(kv); - + path = "Simple.Section2.Subsection3.MySubkey3"; if (!KvizGetStringExact(kv, strvalue, sizeof(strvalue), path) || !StrEqual(strvalue, "MySubValue3c")) UTError(kv, "Error reading %s (%s)", path, strvalue); - } - -UTError(Handle:kv, const String:text[], any:...) { - decl String:buffer[256]; +void UTError(KeyValues kv, const char[] text, any ...) { + char buffer[256]; VFormat(buffer, sizeof(buffer), text, 3); - if (kv != INVALID_HANDLE) + if (kv != null) KvizClose(kv); LogError("%s", buffer); SetFailState("Unit test failed: %s", buffer); diff --git a/kvizzle/kvizzle-unittest.cfg b/kvizzle-test/kvizzle-unittest.cfg similarity index 100% rename from kvizzle/kvizzle-unittest.cfg rename to kvizzle-test/kvizzle-unittest.cfg diff --git a/logstf-test/README.md b/logstf-test/README.md new file mode 100644 index 0000000..2e717c9 --- /dev/null +++ b/logstf-test/README.md @@ -0,0 +1,16 @@ +# LogsTF Test + +This plugin is only used for testing the LogsTF plugin. + +**Do not** install on servers. + +## Instructions + +1. Copy _logstf_ and _logstf-test_ to the plugins folder +2. Copy testlog.log to the /tf/ directory +3. Run the server +4. Make sure logs are enabled (`logs on`) +5. Join the server and start the match (e.g. `mp_restartgame 1`) +6. Run this rcon command: `logstf_test` +7. Set `mp_timelimit 1` to end the match +8. The log should now be uploaded to logs.tf \ No newline at end of file diff --git a/logstf-test/logstf-test.sp b/logstf-test/logstf-test.sp new file mode 100644 index 0000000..e23f144 --- /dev/null +++ b/logstf-test/logstf-test.sp @@ -0,0 +1,47 @@ +#pragma semicolon 1 +#pragma newdecls required + +#include + + +#define PLUGIN_VERSION "1.0.0" + + +public Plugin myinfo = { + name = "Test: LogsTF", + author = "F2", + description = "Used for testing the logstf plugin", + version = PLUGIN_VERSION, + url = "https://github.com/F2/F2s-sourcemod-plugins" +}; + + + +public void OnPluginStart() { + RegConsoleCmd("test_logstf", Command_test_logstf); +} + +public Action Command_test_logstf(int client, int args) { + char logline[1024]; + File file = OpenFile("testlog.log", "rt"); + if (file == null) { + PrintToServer("Failed to open testlog.log"); + return Plugin_Handled; + } + + while (!IsEndOfFile(file)) { + if (!ReadFileLine(file, logline, sizeof(logline))) { + PrintToServer("Failed to read line from testlog.log"); + delete file; + return Plugin_Handled; + } + + strcopy(logline, sizeof(logline), logline[25]); // Remove the timestamp + LogToGame("%s", logline); + } + + PrintToServer("Logged contents of testlog.log"); + delete file; + + return Plugin_Handled; +} \ No newline at end of file diff --git a/logstf-test/testlog.log b/logstf-test/testlog.log new file mode 100644 index 0000000..e9dba7d --- /dev/null +++ b/logstf-test/testlog.log @@ -0,0 +1,5822 @@ +L 07/15/2025 - 12:54:09: "AA<3><[U:1:1]>" changed role to "sniper" +L 07/15/2025 - 12:54:09: "BB<10><[U:1:2]>" changed role to "soldier" +L 07/15/2025 - 12:54:09: "CC<5><[U:1:3]>" changed role to "scout" +L 07/15/2025 - 12:54:09: "DD<6><[U:1:4]>" changed role to "engineer" +L 07/15/2025 - 12:54:09: "EE<7><[U:1:5]>" changed role to "medic" +L 07/15/2025 - 12:54:09: "FF<8><[U:1:6]>" changed role to "medic" +L 07/15/2025 - 12:54:09: "GG<14><[U:1:7]>" changed role to "soldier" +L 07/15/2025 - 12:54:09: "HH<11><[U:1:8]>" changed role to "soldier" +L 07/15/2025 - 12:54:09: "II<12><[U:1:9]>" changed role to "sniper" +L 07/15/2025 - 12:54:09: "JJ<13><[U:1:10]>" changed role to "scout" +L 07/15/2025 - 12:54:09: "KK<15><[U:1:11]>" changed role to "demoman" +L 07/15/2025 - 12:54:09: "LL<16><[U:1:12]>" changed role to "soldier" +L 07/15/2025 - 12:54:09: "FF<8><[U:1:6]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "1") (weapon "ubersaw") +L 07/15/2025 - 12:54:09: "DD<6><[U:1:4]>" picked up item "ammopack_medium" +L 07/15/2025 - 12:54:10: "DD<6><[U:1:4]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "19") (weapon "obj_sentrygun3") +L 07/15/2025 - 12:54:10: "FF<8><[U:1:6]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "500") (realdamage "174") (weapon "taunt_medic") +L 07/15/2025 - 12:54:10: "FF<8><[U:1:6]>" killed "KK<15><[U:1:11]>" with "taunt_medic" (attacker_position "834 -831 537") (victim_position "860 -895 536") +L 07/15/2025 - 12:54:10: "FF<8><[U:1:6]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 12:54:10: "DD<6><[U:1:4]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "53") (weapon "obj_sentrygun3") +L 07/15/2025 - 12:54:10: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:10: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:10: "JJ<13><[U:1:10]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "67") (weapon "scattergun") +L 07/15/2025 - 12:54:11: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:54:11: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "sniperrifle") +L 07/15/2025 - 12:54:11: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "sniperrifle") +L 07/15/2025 - 12:54:11: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "50") (weapon "sniperrifle") +L 07/15/2025 - 12:54:11: "GG<14><[U:1:7]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 12:54:11: "GG<14><[U:1:7]>" picked up item "medkit_medium" (healing "100") +L 07/15/2025 - 12:54:11: "DD<6><[U:1:4]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "11") (weapon "frontier_justice") +L 07/15/2025 - 12:54:11: "DD<6><[U:1:4]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "19") (realdamage "11") (weapon "obj_sentrygun3") +L 07/15/2025 - 12:54:11: "DD<6><[U:1:4]>" killed "BB<10><[U:1:2]>" with "obj_sentrygun3" (attacker_position "-192 -812 528") (victim_position "-40 29 499") +L 07/15/2025 - 12:54:11: "AA<3><[U:1:1]>" triggered "kill assist" against "BB<10><[U:1:2]>" (assister_position "635 415 536") (attacker_position "-192 -812 528") (victim_position "-40 29 499") +L 07/15/2025 - 12:54:11: "DD<6><[U:1:4]>" triggered "domination" against "BB<10><[U:1:2]>" +L 07/15/2025 - 12:54:12: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "smg") +L 07/15/2025 - 12:54:12: "II<12><[U:1:9]>" changed role to "scout" +L 07/15/2025 - 12:54:12: "II<12><[U:1:9]>" spawned as "scout" +L 07/15/2025 - 12:54:12: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "smg") +L 07/15/2025 - 12:54:12: "AA<3><[U:1:1]>" changed role to "scout" +L 07/15/2025 - 12:54:12: "AA<3><[U:1:1]>" committed suicide with "world" (attacker_position "681 342 544") +L 07/15/2025 - 12:54:12: "FF<8><[U:1:6]>" triggered "chargeready" +L 07/15/2025 - 12:54:12: "FF<8><[U:1:6]>" triggered "chargedeployed" (medigun "medigun") +L 07/15/2025 - 12:54:12: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:54:13: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:54:13: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:54:13: "LL<16><[U:1:12]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "99") (weapon "quake_rl") +L 07/15/2025 - 12:54:13: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:54:14: World triggered "Round_Start" +L 07/15/2025 - 12:54:14: "AA<3><[U:1:1]>" spawned as "scout" +L 07/15/2025 - 12:54:14: "BB<10><[U:1:2]>" spawned as "soldier" +L 07/15/2025 - 12:54:14: "CC<5><[U:1:3]>" spawned as "scout" +L 07/15/2025 - 12:54:14: "DD<6><[U:1:4]>" spawned as "engineer" +L 07/15/2025 - 12:54:14: "EE<7><[U:1:5]>" spawned as "medic" +L 07/15/2025 - 12:54:14: "FF<8><[U:1:6]>" spawned as "medic" +L 07/15/2025 - 12:54:14: "GG<14><[U:1:7]>" spawned as "soldier" +L 07/15/2025 - 12:54:14: "HH<11><[U:1:8]>" spawned as "soldier" +L 07/15/2025 - 12:54:14: "II<12><[U:1:9]>" spawned as "scout" +L 07/15/2025 - 12:54:14: "JJ<13><[U:1:10]>" spawned as "scout" +L 07/15/2025 - 12:54:14: "KK<15><[U:1:11]>" spawned as "demoman" +L 07/15/2025 - 12:54:14: "LL<16><[U:1:12]>" spawned as "soldier" +L 07/15/2025 - 12:54:14: World triggered "Round_Start" +L 07/15/2025 - 12:54:14: "AA<3><[U:1:1]>" spawned as "scout" +L 07/15/2025 - 12:54:14: "BB<10><[U:1:2]>" spawned as "soldier" +L 07/15/2025 - 12:54:14: "CC<5><[U:1:3]>" spawned as "scout" +L 07/15/2025 - 12:54:14: "DD<6><[U:1:4]>" spawned as "engineer" +L 07/15/2025 - 12:54:14: "EE<7><[U:1:5]>" spawned as "medic" +L 07/15/2025 - 12:54:14: "FF<8><[U:1:6]>" spawned as "medic" +L 07/15/2025 - 12:54:14: "GG<14><[U:1:7]>" spawned as "soldier" +L 07/15/2025 - 12:54:14: "HH<11><[U:1:8]>" spawned as "soldier" +L 07/15/2025 - 12:54:14: "II<12><[U:1:9]>" spawned as "scout" +L 07/15/2025 - 12:54:14: "JJ<13><[U:1:10]>" spawned as "scout" +L 07/15/2025 - 12:54:14: "KK<15><[U:1:11]>" spawned as "demoman" +L 07/15/2025 - 12:54:14: "LL<16><[U:1:12]>" spawned as "soldier" +L 07/15/2025 - 12:54:14: "FF<8><[U:1:6]>" triggered "empty_uber" +L 07/15/2025 - 12:54:14: "EE<7><[U:1:5]>" triggered "empty_uber" +L 07/15/2025 - 12:54:14: "DD<6><[U:1:4]>" changed role to "demoman" +L 07/15/2025 - 12:54:14: "DD<6><[U:1:4]>" spawned as "demoman" +L 07/15/2025 - 12:54:16: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "2") +L 07/15/2025 - 12:54:16: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "24") +L 07/15/2025 - 12:54:17: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "78") +L 07/15/2025 - 12:54:17: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "63") +L 07/15/2025 - 12:54:18: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "26") +L 07/15/2025 - 12:54:18: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "24") +L 07/15/2025 - 12:54:19: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "26") +L 07/15/2025 - 12:54:19: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 12:54:20: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "12") +L 07/15/2025 - 12:54:20: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "24") +L 07/15/2025 - 12:54:20: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "34") +L 07/15/2025 - 12:54:21: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "19") +L 07/15/2025 - 12:54:21: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "67") +L 07/15/2025 - 12:54:21: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "26") +L 07/15/2025 - 12:54:22: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "14") +L 07/15/2025 - 12:54:22: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "23") +L 07/15/2025 - 12:54:22: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "4") +L 07/15/2025 - 12:54:22: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "5") +L 07/15/2025 - 12:54:22: "AA<3><[U:1:1]>" spawned as "scout" +L 07/15/2025 - 12:54:22: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "11") +L 07/15/2025 - 12:54:23: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "37") +L 07/15/2025 - 12:54:23: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "8") +L 07/15/2025 - 12:54:23: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "21") +L 07/15/2025 - 12:54:23: "HH<11><[U:1:8]>" picked up item "medkit_small" (healing "40") +L 07/15/2025 - 12:54:24: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "6") +L 07/15/2025 - 12:54:25: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:26: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:54:28: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:54:29: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:54:29: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "104") +L 07/15/2025 - 12:54:30: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:30: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "14") +L 07/15/2025 - 12:54:30: "DD<6><[U:1:4]>" picked up item "medkit_medium" (healing "72") +L 07/15/2025 - 12:54:30: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "6") +L 07/15/2025 - 12:54:31: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "57") +L 07/15/2025 - 12:54:32: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "41") +L 07/15/2025 - 12:54:32: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "4") +L 07/15/2025 - 12:54:33: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:54:33: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:33: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:33: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:54:33: "LL<16><[U:1:12]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "76") (weapon "quake_rl") +L 07/15/2025 - 12:54:33: "LL<16><[U:1:12]>" killed "HH<11><[U:1:8]>" with "quake_rl" (attacker_position "478 -334 603") (victim_position "772 56 576") +L 07/15/2025 - 12:54:33: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "1") +L 07/15/2025 - 12:54:33: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "15") +L 07/15/2025 - 12:54:34: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:34: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:34: "II<12><[U:1:9]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 12:54:34: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:34: "DD<6><[U:1:4]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "32") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:34: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:34: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:34: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:34: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:54:34: "KK<15><[U:1:11]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "32") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:34: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:34: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:34: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:34: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:34: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "59") +L 07/15/2025 - 12:54:35: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:54:35: "LL<16><[U:1:12]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "29") (weapon "quake_rl") +L 07/15/2025 - 12:54:35: "LL<16><[U:1:12]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "25") (weapon "quake_rl") +L 07/15/2025 - 12:54:35: "KK<15><[U:1:11]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "40") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:35: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:35: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:35: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:35: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:35: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:35: "JJ<13><[U:1:10]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "15") (weapon "scattergun") +L 07/15/2025 - 12:54:36: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:54:36: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:36: "KK<15><[U:1:11]>" picked up item "medkit_medium" (healing "52") +L 07/15/2025 - 12:54:36: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "20") +L 07/15/2025 - 12:54:36: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:54:36: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:54:36: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:36: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:36: "CC<5><[U:1:3]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 12:54:36: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:36: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:36: "II<12><[U:1:9]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 12:54:36: "DD<6><[U:1:4]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "58") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:36: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:36: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:36: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:54:36: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:54:37: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "5") +L 07/15/2025 - 12:54:37: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "11") +L 07/15/2025 - 12:54:37: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:37: "LL<16><[U:1:12]>" picked up item "ammopack_small" +L 07/15/2025 - 12:54:37: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:54:37: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:37: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:37: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 12:54:37: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:54:38: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "6") +L 07/15/2025 - 12:54:38: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:54:38: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:54:38: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:54:38: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:54:38: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "82") +L 07/15/2025 - 12:54:38: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:54:38: "DD<6><[U:1:4]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "100") (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:54:38: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:38: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:38: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:38: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:38: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:38: "AA<3><[U:1:1]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "5") (weapon "scattergun") +L 07/15/2025 - 12:54:39: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:39: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:54:39: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:54:39: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:39: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:39: "AA<3><[U:1:1]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "9") (weapon "scattergun") +L 07/15/2025 - 12:54:39: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:39: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:39: "II<12><[U:1:9]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 12:54:39: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:54:39: "LL<16><[U:1:12]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "36") (weapon "quake_rl") +L 07/15/2025 - 12:54:39: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:54:40: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "24") +L 07/15/2025 - 12:54:40: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:40: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:40: "II<12><[U:1:9]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 12:54:40: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:40: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:40: "CC<5><[U:1:3]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "7") (weapon "scattergun") +L 07/15/2025 - 12:54:40: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:54:40: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:40: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:40: "AA<3><[U:1:1]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "4") (weapon "scattergun") +L 07/15/2025 - 12:54:40: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:40: "KK<15><[U:1:11]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "43") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:40: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:40: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:40: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:40: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:54:40: "DD<6><[U:1:4]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "100") (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:54:40: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "15") +L 07/15/2025 - 12:54:40: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:40: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:40: "CC<5><[U:1:3]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "17") (weapon "scattergun") +L 07/15/2025 - 12:54:40: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:40: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:54:40: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:40: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:41: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "10") +L 07/15/2025 - 12:54:41: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:54:41: "LL<16><[U:1:12]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "31") (weapon "quake_rl") +L 07/15/2025 - 12:54:41: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:41: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:41: "CC<5><[U:1:3]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 12:54:41: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:54:41: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "25") +L 07/15/2025 - 12:54:42: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:54:42: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:42: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:42: "CC<5><[U:1:3]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "5") (weapon "scattergun") +L 07/15/2025 - 12:54:42: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "4") +L 07/15/2025 - 12:54:42: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "49") +L 07/15/2025 - 12:54:42: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "25") +L 07/15/2025 - 12:54:42: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:54:42: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:54:42: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "9") +L 07/15/2025 - 12:54:43: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:54:43: "LL<16><[U:1:12]>" picked up item "medkit_medium" (healing "67") +L 07/15/2025 - 12:54:43: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:54:43: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "82") +L 07/15/2025 - 12:54:43: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "11") +L 07/15/2025 - 12:54:43: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:43: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:43: "AA<3><[U:1:1]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "17") (weapon "scattergun") +L 07/15/2025 - 12:54:43: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:54:43: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:54:43: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "80") +L 07/15/2025 - 12:54:43: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:54:43: "LL<16><[U:1:12]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "36") (weapon "quake_rl") +L 07/15/2025 - 12:54:43: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:44: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:44: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:44: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:44: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "22") (weapon "scattergun") +L 07/15/2025 - 12:54:44: "LL<16><[U:1:12]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 12:54:44: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:44: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:44: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:54:44: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:44: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:44: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "57") (weapon "scattergun") +L 07/15/2025 - 12:54:44: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "25") +L 07/15/2025 - 12:54:45: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "25") +L 07/15/2025 - 12:54:45: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:45: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:54:45: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:54:45: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:54:45: "BB<10><[U:1:2]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "59") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:54:45: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:54:45: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:54:45: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:54:45: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:45: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:54:45: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:54:45: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:45: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:54:45: "BB<10><[U:1:2]>" killed "GG<14><[U:1:7]>" with "world" (attacker_position "-254 125 754") (victim_position "-309 -240 460") +L 07/15/2025 - 12:54:45: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:54:45: "GG<14><[U:1:7]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "45") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:54:46: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:54:46: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "pistol_scout") +L 07/15/2025 - 12:54:46: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "8") (weapon "pistol_scout") +L 07/15/2025 - 12:54:46: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:54:46: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "21") +L 07/15/2025 - 12:54:46: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:54:46: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:46: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "6") +L 07/15/2025 - 12:54:46: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "4") +L 07/15/2025 - 12:54:46: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:46: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:46: "AA<3><[U:1:1]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "32") (weapon "scattergun") +L 07/15/2025 - 12:54:46: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:54:46: "EE<7><[U:1:5]>" picked up item "ammopack_small" +L 07/15/2025 - 12:54:46: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 12:54:47: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:47: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:47: "AA<3><[U:1:1]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "40") (weapon "scattergun") +L 07/15/2025 - 12:54:47: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "5") +L 07/15/2025 - 12:54:47: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "21") +L 07/15/2025 - 12:54:47: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:47: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:54:47: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:54:48: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "24") +L 07/15/2025 - 12:54:48: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:54:48: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:54:48: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "pistol_scout") +L 07/15/2025 - 12:54:48: "AA<3><[U:1:1]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "11") (weapon "pistol_scout") +L 07/15/2025 - 12:54:48: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:54:48: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:54:48: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:48: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "25") +L 07/15/2025 - 12:54:48: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:54:48: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:54:49: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:54:49: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 12:54:49: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:54:49: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "pistol_scout") +L 07/15/2025 - 12:54:49: "AA<3><[U:1:1]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "8") (weapon "pistol_scout") +L 07/15/2025 - 12:54:49: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:54:49: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:49: "LL<16><[U:1:12]>" picked up item "medkit_small" (healing "40") +L 07/15/2025 - 12:54:49: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:54:49: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:54:49: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "pistol_scout") +L 07/15/2025 - 12:54:49: "AA<3><[U:1:1]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "8") (weapon "pistol_scout") +L 07/15/2025 - 12:54:49: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:49: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:49: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:49: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "41") (weapon "scattergun") +L 07/15/2025 - 12:54:49: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:50: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "24") +L 07/15/2025 - 12:54:50: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:50: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:54:50: "HH<11><[U:1:8]>" spawned as "soldier" +L 07/15/2025 - 12:54:50: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "23") +L 07/15/2025 - 12:54:50: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "16") +L 07/15/2025 - 12:54:50: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:54:50: "BB<10><[U:1:2]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "58") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:54:50: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:50: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:50: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "58") (realdamage "23") (weapon "scattergun") +L 07/15/2025 - 12:54:50: "CC<5><[U:1:3]>" killed "AA<3><[U:1:1]>" with "scattergun" (attacker_position "633 885 544") (victim_position "746 1187 633") +L 07/15/2025 - 12:54:50: "BB<10><[U:1:2]>" triggered "kill assist" against "AA<3><[U:1:1]>" (assister_position "711 1103 766") (attacker_position "633 885 544") (victim_position "745 1187 633") +L 07/15/2025 - 12:54:50: "BB<10><[U:1:2]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 12:54:51: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:54:51: "BB<10><[U:1:2]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "110") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:54:51: "BB<10><[U:1:2]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "52") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:54:51: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:54:51: "DD<6><[U:1:4]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "67") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:51: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:51: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:51: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "4") +L 07/15/2025 - 12:54:51: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "31") +L 07/15/2025 - 12:54:52: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:54:52: "LL<16><[U:1:12]>" picked up item "medkit_medium" (healing "100") +L 07/15/2025 - 12:54:52: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "38") +L 07/15/2025 - 12:54:53: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:53: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:53: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "8") (weapon "scattergun") +L 07/15/2025 - 12:54:53: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:53: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:53: "CC<5><[U:1:3]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "77") (weapon "scattergun") +L 07/15/2025 - 12:54:53: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:54:53: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "57") +L 07/15/2025 - 12:54:53: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "1") +L 07/15/2025 - 12:54:54: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:54: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:54: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "9") (weapon "scattergun") +L 07/15/2025 - 12:54:54: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:54: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:54:54: "CC<5><[U:1:3]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "24") (weapon "scattergun") +L 07/15/2025 - 12:54:54: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:54:54: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "25") +L 07/15/2025 - 12:54:54: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:55: "FF<8><[U:1:6]>" picked up item "ammopack_medium" +L 07/15/2025 - 12:54:55: "FF<8><[U:1:6]>" picked up item "medkit_small" (healing "30") +L 07/15/2025 - 12:54:55: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:55: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "24") +L 07/15/2025 - 12:54:55: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:56: "KK<15><[U:1:11]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "37") (realdamage "35") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:56: "KK<15><[U:1:11]>" killed "DD<6><[U:1:4]>" with "tf_projectile_pipe_remote" (attacker_position "702 2409 598") (victim_position "1407 1824 505") +L 07/15/2025 - 12:54:56: "CC<5><[U:1:3]>" triggered "kill assist" against "DD<6><[U:1:4]>" (assister_position "716 522 580") (attacker_position "702 2409 598") (victim_position "1407 1824 505") +L 07/15/2025 - 12:54:56: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:56: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:56: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:54:56: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:54:57: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:54:57: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "97") +L 07/15/2025 - 12:54:57: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:54:57: "HH<11><[U:1:8]>" picked up item "medkit_small" (healing "34") +L 07/15/2025 - 12:54:58: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "11") +L 07/15/2025 - 12:54:58: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:58: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:54:59: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "3") +L 07/15/2025 - 12:55:00: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "17") +L 07/15/2025 - 12:55:00: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:55:01: Team "Blue" triggered "pointcaptured" (cp "2") (cpname "Middle Point") (numcappers "1") (player1 "II<12><[U:1:9]>") (position1 "289 25 480") +L 07/15/2025 - 12:55:01: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "20") +L 07/15/2025 - 12:55:01: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:55:01: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:55:01: "HH<11><[U:1:8]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "57") (weapon "quake_rl") +L 07/15/2025 - 12:55:01: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:01: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:55:01: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:55:01: "BB<10><[U:1:2]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "58") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:55:01: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:55:02: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:02: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:02: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:55:02: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "24") +L 07/15/2025 - 12:55:02: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:02: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:55:02: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:55:02: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:55:02: "KK<15><[U:1:11]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "100") (realdamage "98") (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:55:02: "KK<15><[U:1:11]>" killed "HH<11><[U:1:8]>" with "tf_projectile_pipe" (attacker_position "813 2109 476") (victim_position "994 1980 484") +L 07/15/2025 - 12:55:02: "BB<10><[U:1:2]>" triggered "kill assist" against "HH<11><[U:1:8]>" (assister_position "1242 1690 771") (attacker_position "813 2109 476") (victim_position "994 1980 484") +L 07/15/2025 - 12:55:03: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:03: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "16") +L 07/15/2025 - 12:55:03: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "17") +L 07/15/2025 - 12:55:04: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "21") +L 07/15/2025 - 12:55:04: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "13") +L 07/15/2025 - 12:55:05: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "26") +L 07/15/2025 - 12:55:05: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "13") +L 07/15/2025 - 12:55:05: "LL<16><[U:1:12]>" picked up item "ammopack_small" +L 07/15/2025 - 12:55:06: "GG<14><[U:1:7]>" spawned as "soldier" +L 07/15/2025 - 12:55:06: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "14") +L 07/15/2025 - 12:55:06: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 12:55:06: "KK<15><[U:1:11]>" picked up item "ammopack_medium" +L 07/15/2025 - 12:55:06: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:55:07: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:07: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:07: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 12:55:07: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "35") +L 07/15/2025 - 12:55:07: "BB<10><[U:1:2]>" picked up item "ammopack_medium" +L 07/15/2025 - 12:55:07: "BB<10><[U:1:2]>" picked up item "medkit_medium" (healing "100") +L 07/15/2025 - 12:55:08: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:55:08: "LL<16><[U:1:12]>" picked up item "medkit_small" (healing "40") +L 07/15/2025 - 12:55:08: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "12") +L 07/15/2025 - 12:55:08: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:55:08: "LL<16><[U:1:12]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "28") (weapon "quake_rl") +L 07/15/2025 - 12:55:09: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "17") +L 07/15/2025 - 12:55:09: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "18") +L 07/15/2025 - 12:55:10: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "23") +L 07/15/2025 - 12:55:11: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:55:11: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "4") +L 07/15/2025 - 12:55:11: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "20") +L 07/15/2025 - 12:55:11: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:55:11: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:12: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:55:12: "BB<10><[U:1:2]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "48") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:55:13: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "23") +L 07/15/2025 - 12:55:14: "AA<3><[U:1:1]>" spawned as "scout" +L 07/15/2025 - 12:55:14: "DD<6><[U:1:4]>" spawned as "demoman" +L 07/15/2025 - 12:55:14: Team "Blue" triggered "pointcaptured" (cp "3") (cpname "Red Mini-Spire") (numcappers "2") (player1 "CC<5><[U:1:3]>") (position1 "1867 2186 768") (player2 "II<12><[U:1:9]>") (position2 "1596 2195 775") +L 07/15/2025 - 12:55:14: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "24") +L 07/15/2025 - 12:55:15: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:55:15: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:55:15: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "5") +L 07/15/2025 - 12:55:16: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:55:16: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:55:16: "KK<15><[U:1:11]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "49") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:16: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:16: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:16: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "9") +L 07/15/2025 - 12:55:17: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:17: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:17: "JJ<13><[U:1:10]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "25") (weapon "scattergun") +L 07/15/2025 - 12:55:17: "KK<15><[U:1:11]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "83") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:17: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:17: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:17: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:17: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:17: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "14") (weapon "scattergun") +L 07/15/2025 - 12:55:17: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:17: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:17: "JJ<13><[U:1:10]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "13") (weapon "scattergun") +L 07/15/2025 - 12:55:17: "DD<6><[U:1:4]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "45") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:17: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:17: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:18: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "20") +L 07/15/2025 - 12:55:18: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:18: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:18: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 12:55:18: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:18: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:18: "II<12><[U:1:9]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 12:55:18: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:18: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:55:18: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:18: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:18: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "11") (weapon "scattergun") +L 07/15/2025 - 12:55:18: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:18: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:18: "II<12><[U:1:9]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 12:55:18: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:18: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:55:19: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "61") +L 07/15/2025 - 12:55:19: "EE<7><[U:1:5]>" triggered "chargeready" +L 07/15/2025 - 12:55:19: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:19: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:19: "II<12><[U:1:9]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 12:55:19: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:19: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:19: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:19: "JJ<13><[U:1:10]>" triggered "damage" against "II<12><[U:1:9]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 12:55:19: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:19: "EE<7><[U:1:5]>" triggered "chargedeployed" (medigun "medigun") +L 07/15/2025 - 12:55:20: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:55:20: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "10") +L 07/15/2025 - 12:55:20: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "3") +L 07/15/2025 - 12:55:20: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "24") +L 07/15/2025 - 12:55:20: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:20: "LL<16><[U:1:12]>" picked up item "medkit_small" (healing "40") +L 07/15/2025 - 12:55:20: "BB<10><[U:1:2]>" picked up item "ammopack_medium" +L 07/15/2025 - 12:55:20: "LL<16><[U:1:12]>" picked up item "ammopack_small" +L 07/15/2025 - 12:55:20: "BB<10><[U:1:2]>" picked up item "medkit_medium" (healing "43") +L 07/15/2025 - 12:55:20: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:21: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:21: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "47") +L 07/15/2025 - 12:55:21: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:21: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:21: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:21: "DD<6><[U:1:4]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "0") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:21: "DD<6><[U:1:4]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "0") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:21: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:21: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:21: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:21: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:21: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:21: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:21: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:21: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:21: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:21: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:21: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:21: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:21: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:21: "HH<11><[U:1:8]>" spawned as "soldier" +L 07/15/2025 - 12:55:21: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:21: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "pistol_scout") +L 07/15/2025 - 12:55:21: "JJ<13><[U:1:10]>" triggered "damage" against "II<12><[U:1:9]>" (damage "8") (weapon "pistol_scout") +L 07/15/2025 - 12:55:21: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:55:21: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:22: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:22: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:22: "CC<5><[U:1:3]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "92") (weapon "scattergun") +L 07/15/2025 - 12:55:22: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:22: "DD<6><[U:1:4]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "0") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:22: "DD<6><[U:1:4]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "0") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:22: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:22: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:22: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "5") +L 07/15/2025 - 12:55:22: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:22: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:22: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:22: "CC<5><[U:1:3]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "95") (weapon "scattergun") +L 07/15/2025 - 12:55:22: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:23: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:23: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:23: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:23: "CC<5><[U:1:3]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "55") (weapon "scattergun") +L 07/15/2025 - 12:55:23: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:55:23: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:23: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:23: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:23: "CC<5><[U:1:3]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "86") (realdamage "7") (weapon "scattergun") +L 07/15/2025 - 12:55:23: "CC<5><[U:1:3]>" killed "DD<6><[U:1:4]>" with "scattergun" (attacker_position "4136 2272 768") (victim_position "4184 2100 773") +L 07/15/2025 - 12:55:24: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:24: "CC<5><[U:1:3]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 12:55:24: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:55:25: "FF<8><[U:1:6]>" triggered "chargeready" +L 07/15/2025 - 12:55:25: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:55:25: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:55:25: "LL<16><[U:1:12]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "30") (weapon "quake_rl") +L 07/15/2025 - 12:55:25: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "18") +L 07/15/2025 - 12:55:25: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:55:25: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:55:25: "HH<11><[U:1:8]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "100") (weapon "quake_rl") +L 07/15/2025 - 12:55:25: "FF<8><[U:1:6]>" triggered "chargedeployed" (medigun "medigun") +L 07/15/2025 - 12:55:25: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:25: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:25: "CC<5><[U:1:3]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "0") (weapon "scattergun") +L 07/15/2025 - 12:55:25: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "65") +L 07/15/2025 - 12:55:26: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:55:26: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:55:26: "LL<16><[U:1:12]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "0") (weapon "quake_rl") +L 07/15/2025 - 12:55:26: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:55:26: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "26") +L 07/15/2025 - 12:55:26: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "32") +L 07/15/2025 - 12:55:26: "EE<7><[U:1:5]>" triggered "empty_uber" +L 07/15/2025 - 12:55:26: "EE<7><[U:1:5]>" triggered "chargeended" (duration "6.4") +L 07/15/2025 - 12:55:26: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:55:26: "LL<16><[U:1:12]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "0") (weapon "quake_rl") +L 07/15/2025 - 12:55:27: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:55:27: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "2") +L 07/15/2025 - 12:55:27: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "46") +L 07/15/2025 - 12:55:27: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:55:27: "HH<11><[U:1:8]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "64") (weapon "quake_rl") +L 07/15/2025 - 12:55:27: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:28: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:55:28: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:28: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:28: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 12:55:28: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:55:28: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:55:28: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:28: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:28: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:28: "II<12><[U:1:9]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "0") (weapon "scattergun") +L 07/15/2025 - 12:55:29: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:55:29: "BB<10><[U:1:2]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "25") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:55:29: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:55:29: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:29: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "27") +L 07/15/2025 - 12:55:29: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:55:29: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:55:29: "BB<10><[U:1:2]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "0") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:55:29: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:55:30: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "17") +L 07/15/2025 - 12:55:30: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "24") +L 07/15/2025 - 12:55:30: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:30: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:30: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "93") (weapon "scattergun") +L 07/15/2025 - 12:55:30: "GG<14><[U:1:7]>" picked up item "ammopack_medium" +L 07/15/2025 - 12:55:30: "GG<14><[U:1:7]>" picked up item "medkit_medium" (healing "100") +L 07/15/2025 - 12:55:30: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:55:30: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:55:30: "BB<10><[U:1:2]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "0") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:55:30: "BB<10><[U:1:2]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "0") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:55:31: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:31: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:31: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "88") (weapon "scattergun") +L 07/15/2025 - 12:55:31: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "27") +L 07/15/2025 - 12:55:32: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:32: "CC<5><[U:1:3]>" picked up item "medkit_small" (healing "25") +L 07/15/2025 - 12:55:32: "CC<5><[U:1:3]>" picked up item "ammopack_medium" +L 07/15/2025 - 12:55:32: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "25") +L 07/15/2025 - 12:55:32: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:33: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:33: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:33: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "pistol_scout") +L 07/15/2025 - 12:55:33: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "22") (realdamage "8") (weapon "pistol_scout") +L 07/15/2025 - 12:55:33: "AA<3><[U:1:1]>" killed "BB<10><[U:1:2]>" with "pistol_scout" (attacker_position "2520 2106 704") (victim_position "2540 2037 704") +L 07/15/2025 - 12:55:33: "FF<8><[U:1:6]>" triggered "kill assist" against "BB<10><[U:1:2]>" (assister_position "2651 2270 704") (attacker_position "2520 2106 704") (victim_position "2540 2037 704") +L 07/15/2025 - 12:55:33: "AA<3><[U:1:1]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 12:55:33: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:33: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:34: "FF<8><[U:1:6]>" triggered "empty_uber" +L 07/15/2025 - 12:55:34: "FF<8><[U:1:6]>" triggered "chargeended" (duration "8.0") +L 07/15/2025 - 12:55:34: "FF<8><[U:1:6]>" picked up item "ammopack_small" +L 07/15/2025 - 12:55:34: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:35: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:35: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:35: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:35: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:35: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 12:55:35: "KK<15><[U:1:11]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "74") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:35: "KK<15><[U:1:11]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "68") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:35: "KK<15><[U:1:11]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "71") (realdamage "33") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:35: "KK<15><[U:1:11]>" killed "HH<11><[U:1:8]>" with "tf_projectile_pipe_remote" (attacker_position "2931 2344 595") (victim_position "3317 2313 576") +L 07/15/2025 - 12:55:35: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:35: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:35: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:35: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:35: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:35: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:35: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:35: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:35: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:35: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:55:35: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:35: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:35: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:55:35: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "99") +L 07/15/2025 - 12:55:35: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "8") +L 07/15/2025 - 12:55:35: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:35: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:35: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "13") (weapon "scattergun") +L 07/15/2025 - 12:55:35: "CC<5><[U:1:3]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 12:55:35: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 12:55:35: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:36: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:36: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:36: "II<12><[U:1:9]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "22") (weapon "scattergun") +L 07/15/2025 - 12:55:36: "II<12><[U:1:9]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "15") (weapon "scattergun") +L 07/15/2025 - 12:55:36: "II<12><[U:1:9]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "7") (weapon "scattergun") +L 07/15/2025 - 12:55:36: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:36: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:36: "II<12><[U:1:9]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "7") (weapon "scattergun") +L 07/15/2025 - 12:55:36: "II<12><[U:1:9]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "8") (weapon "scattergun") +L 07/15/2025 - 12:55:36: "II<12><[U:1:9]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "7") (weapon "scattergun") +L 07/15/2025 - 12:55:36: "II<12><[U:1:9]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "23") (weapon "scattergun") +L 07/15/2025 - 12:55:36: "II<12><[U:1:9]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "21") (weapon "scattergun") +L 07/15/2025 - 12:55:36: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "5") +L 07/15/2025 - 12:55:36: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "22") +L 07/15/2025 - 12:55:37: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:37: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:37: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "46") (weapon "scattergun") +L 07/15/2025 - 12:55:37: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:37: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:37: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:37: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "25") +L 07/15/2025 - 12:55:37: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "8") +L 07/15/2025 - 12:55:37: "FF<8><[U:1:6]>" picked up item "medkit_small" (healing "30") +L 07/15/2025 - 12:55:38: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "24") +L 07/15/2025 - 12:55:38: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:38: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:38: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:38: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "8") (weapon "scattergun") +L 07/15/2025 - 12:55:39: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "6") +L 07/15/2025 - 12:55:39: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "7") +L 07/15/2025 - 12:55:39: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "19") +L 07/15/2025 - 12:55:39: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:55:39: "LL<16><[U:1:12]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "77") (weapon "quake_rl") +L 07/15/2025 - 12:55:39: "KK<15><[U:1:11]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 12:55:39: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:55:39: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:39: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:55:39: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:55:40: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:40: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "14") +L 07/15/2025 - 12:55:40: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "54") +L 07/15/2025 - 12:55:40: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:40: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:40: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "57") (weapon "scattergun") +L 07/15/2025 - 12:55:40: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:40: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:55:40: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:55:40: "KK<15><[U:1:11]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "100") (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:55:40: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:40: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:40: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "30") (weapon "scattergun") +L 07/15/2025 - 12:55:40: "HH<11><[U:1:8]>" say ":D" +L 07/15/2025 - 12:55:40: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:55:41: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:41: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:41: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "29") (weapon "scattergun") +L 07/15/2025 - 12:55:41: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:42: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:55:42: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:55:42: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "41") +L 07/15/2025 - 12:55:42: "KK<15><[U:1:11]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "47") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:42: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:42: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:42: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:42: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:42: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "34") (weapon "scattergun") +L 07/15/2025 - 12:55:43: "II<12><[U:1:9]>" picked up item "ammopack_small" +L 07/15/2025 - 12:55:43: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "19") +L 07/15/2025 - 12:55:43: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:43: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:43: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:43: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "19") (weapon "scattergun") +L 07/15/2025 - 12:55:43: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:43: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:43: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "7") (weapon "scattergun") +L 07/15/2025 - 12:55:43: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "7") (weapon "scattergun") +L 07/15/2025 - 12:55:43: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "14") (weapon "scattergun") +L 07/15/2025 - 12:55:43: "CC<5><[U:1:3]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "8") (weapon "scattergun") +L 07/15/2025 - 12:55:43: "CC<5><[U:1:3]>" triggered "medic_death" against "FF<8><[U:1:6]>" (healing "1326") (ubercharge "0") +L 07/15/2025 - 12:55:43: "FF<8><[U:1:6]>" triggered "medic_death_ex" (uberpct "12") +L 07/15/2025 - 12:55:43: "CC<5><[U:1:3]>" killed "FF<8><[U:1:6]>" with "scattergun" (attacker_position "3238 1889 569") (victim_position "3459 1680 480") +L 07/15/2025 - 12:55:43: "EE<7><[U:1:5]>" triggered "kill assist" against "FF<8><[U:1:6]>" (assister_position "2813 2220 704") (attacker_position "3238 1889 569") (victim_position "3459 1680 480") +L 07/15/2025 - 12:55:43: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "7") (weapon "scattergun") +L 07/15/2025 - 12:55:43: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "21") (realdamage "7") (weapon "scattergun") +L 07/15/2025 - 12:55:43: "CC<5><[U:1:3]>" killed "AA<3><[U:1:1]>" with "scattergun" (attacker_position "3238 1889 569") (victim_position "3551 1602 498") +L 07/15/2025 - 12:55:43: "EE<7><[U:1:5]>" triggered "kill assist" against "AA<3><[U:1:1]>" (assister_position "2813 2220 704") (attacker_position "3238 1889 569") (victim_position "3551 1602 498") +L 07/15/2025 - 12:55:44: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:55:44: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:55:44: "LL<16><[U:1:12]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "60") (weapon "quake_rl") +L 07/15/2025 - 12:55:44: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:44: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:44: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "28") (weapon "scattergun") +L 07/15/2025 - 12:55:44: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:44: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:55:44: "CC<5><[U:1:3]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 12:55:45: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:45: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:45: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 12:55:45: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:55:45: "LL<16><[U:1:12]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "47") (weapon "quake_rl") +L 07/15/2025 - 12:55:45: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:45: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:45: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:45: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:45: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "22") (weapon "scattergun") +L 07/15/2025 - 12:55:45: "DD<6><[U:1:4]>" spawned as "demoman" +L 07/15/2025 - 12:55:45: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:46: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 12:55:46: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 12:55:46: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:46: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:46: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 12:55:46: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 12:55:46: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:46: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "16") +L 07/15/2025 - 12:55:46: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 12:55:46: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 12:55:46: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "maxgun") +L 07/15/2025 - 12:55:46: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "23") (realdamage "7") (weapon "maxgun") (crit "mini") +L 07/15/2025 - 12:55:46: "CC<5><[U:1:3]>" killed "GG<14><[U:1:7]>" with "maxgun" (attacker_position "3937 1811 576") (victim_position "4346 1704 576") +L 07/15/2025 - 12:55:46: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 12:55:46: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 12:55:46: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:47: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 12:55:47: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:55:47: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 12:55:47: "LL<16><[U:1:12]>" picked up item "medkit_medium" (healing "100") +L 07/15/2025 - 12:55:47: "LL<16><[U:1:12]>" picked up item "ammopack_medium" +L 07/15/2025 - 12:55:48: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:48: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:48: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "9") (weapon "scattergun") +L 07/15/2025 - 12:55:48: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "24") +L 07/15/2025 - 12:55:48: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:48: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:48: "II<12><[U:1:9]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "5") (weapon "scattergun") +L 07/15/2025 - 12:55:49: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "10") +L 07/15/2025 - 12:55:49: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:49: "EE<7><[U:1:5]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 12:55:49: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "2") +L 07/15/2025 - 12:55:49: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "7") +L 07/15/2025 - 12:55:49: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:50: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:55:50: Team "Blue" triggered "pointcaptured" (cp "4") (cpname "Red Final Point") (numcappers "1") (player1 "CC<5><[U:1:3]>") (position1 "3659 1398 576") +L 07/15/2025 - 12:55:50: World triggered "Round_Win" (winner "Blue") +L 07/15/2025 - 12:55:50: World triggered "Round_Length" (seconds "96.38") +L 07/15/2025 - 12:55:50: Team "Red" current score "0" with "6" players +L 07/15/2025 - 12:55:50: Team "Blue" current score "1" with "6" players +L 07/15/2025 - 12:55:50: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "21") +L 07/15/2025 - 12:55:50: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:50: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:50: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:51: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "16") +L 07/15/2025 - 12:55:52: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:52: "CC<5><[U:1:3]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "186") (realdamage "175") (weapon "scattergun") (crit "crit") +L 07/15/2025 - 12:55:52: "CC<5><[U:1:3]>" killed "DD<6><[U:1:4]>" with "scattergun" (attacker_position "3752 954 576") (victim_position "3701 930 480") +L 07/15/2025 - 12:55:52: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:52: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:55:53: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:55:53: "II<12><[U:1:9]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "180") (realdamage "13") (weapon "scattergun") (crit "crit") +L 07/15/2025 - 12:55:53: "II<12><[U:1:9]>" killed "JJ<13><[U:1:10]>" with "scattergun" (attacker_position "3439 995 480") (victim_position "3456 921 480") +L 07/15/2025 - 12:55:53: "EE<7><[U:1:5]>" triggered "kill assist" against "JJ<13><[U:1:10]>" (assister_position "3180 717 522") (attacker_position "3439 995 480") (victim_position "3456 921 480") +L 07/15/2025 - 12:55:53: "II<12><[U:1:9]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 12:55:53: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "4") +L 07/15/2025 - 12:55:55: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "25") +L 07/15/2025 - 12:55:57: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "14") +L 07/15/2025 - 12:55:57: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "9") +L 07/15/2025 - 12:55:58: "LL<16><[U:1:12]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 12:55:58: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "73") +L 07/15/2025 - 12:56:00: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "3") +L 07/15/2025 - 12:56:07: World triggered "Round_Start" +L 07/15/2025 - 12:56:07: "AA<3><[U:1:1]>" spawned as "scout" +L 07/15/2025 - 12:56:07: "BB<10><[U:1:2]>" spawned as "soldier" +L 07/15/2025 - 12:56:07: "CC<5><[U:1:3]>" spawned as "scout" +L 07/15/2025 - 12:56:07: "DD<6><[U:1:4]>" spawned as "demoman" +L 07/15/2025 - 12:56:07: "EE<7><[U:1:5]>" spawned as "medic" +L 07/15/2025 - 12:56:07: "FF<8><[U:1:6]>" spawned as "medic" +L 07/15/2025 - 12:56:07: "GG<14><[U:1:7]>" spawned as "soldier" +L 07/15/2025 - 12:56:07: "HH<11><[U:1:8]>" spawned as "soldier" +L 07/15/2025 - 12:56:07: "II<12><[U:1:9]>" spawned as "scout" +L 07/15/2025 - 12:56:07: "JJ<13><[U:1:10]>" spawned as "scout" +L 07/15/2025 - 12:56:07: "KK<15><[U:1:11]>" spawned as "demoman" +L 07/15/2025 - 12:56:07: "LL<16><[U:1:12]>" spawned as "soldier" +L 07/15/2025 - 12:56:07: "FF<8><[U:1:6]>" triggered "empty_uber" +L 07/15/2025 - 12:56:07: "EE<7><[U:1:5]>" triggered "empty_uber" +L 07/15/2025 - 12:56:09: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "14") +L 07/15/2025 - 12:56:09: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "51") +L 07/15/2025 - 12:56:10: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "67") +L 07/15/2025 - 12:56:10: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "34") +L 07/15/2025 - 12:56:11: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "24") +L 07/15/2025 - 12:56:12: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "26") +L 07/15/2025 - 12:56:12: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "55") +L 07/15/2025 - 12:56:13: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "7") +L 07/15/2025 - 12:56:13: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "47") +L 07/15/2025 - 12:56:13: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "25") +L 07/15/2025 - 12:56:14: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "20") +L 07/15/2025 - 12:56:14: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "5") +L 07/15/2025 - 12:56:14: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "24") +L 07/15/2025 - 12:56:15: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "10") +L 07/15/2025 - 12:56:15: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "40") +L 07/15/2025 - 12:56:15: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "1") +L 07/15/2025 - 12:56:16: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "5") +L 07/15/2025 - 12:56:16: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "60") +L 07/15/2025 - 12:56:17: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "22") +L 07/15/2025 - 12:56:18: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "3") +L 07/15/2025 - 12:56:18: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "21") +L 07/15/2025 - 12:56:19: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "24") +L 07/15/2025 - 12:56:21: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "13") +L 07/15/2025 - 12:56:21: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "13") +L 07/15/2025 - 12:56:21: "DD<6><[U:1:4]>" picked up item "medkit_medium" (healing "88") +L 07/15/2025 - 12:56:22: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "19") +L 07/15/2025 - 12:56:23: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:56:23: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:56:23: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:56:23: "LL<16><[U:1:12]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "106") (weapon "quake_rl") +L 07/15/2025 - 12:56:23: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:56:23: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "114") +L 07/15/2025 - 12:56:23: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:56:24: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:56:24: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:56:24: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "121") +L 07/15/2025 - 12:56:24: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:56:24: "LL<16><[U:1:12]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "30") (weapon "quake_rl") +L 07/15/2025 - 12:56:24: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "8") +L 07/15/2025 - 12:56:25: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "38") +L 07/15/2025 - 12:56:25: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "18") +L 07/15/2025 - 12:56:25: "DD<6><[U:1:4]>" picked up item "medkit_small" (healing "35") +L 07/15/2025 - 12:56:25: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:26: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:56:26: "LL<16><[U:1:12]>" picked up item "medkit_medium" (healing "68") +L 07/15/2025 - 12:56:26: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "22") +L 07/15/2025 - 12:56:26: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "62") +L 07/15/2025 - 12:56:26: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:26: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:26: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:56:27: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:27: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:56:27: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:56:27: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "23") +L 07/15/2025 - 12:56:27: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:56:27: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:28: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:28: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:29: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 12:56:29: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "8") +L 07/15/2025 - 12:56:29: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:56:30: "DD<6><[U:1:4]>" picked up item "medkit_medium" (healing "88") +L 07/15/2025 - 12:56:30: "DD<6><[U:1:4]>" picked up item "ammopack_medium" +L 07/15/2025 - 12:56:30: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "16") +L 07/15/2025 - 12:56:30: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:56:31: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:31: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:56:31: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "4") (weapon "scattergun") +L 07/15/2025 - 12:56:31: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "15") +L 07/15/2025 - 12:56:31: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "6") +L 07/15/2025 - 12:56:31: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "3") +L 07/15/2025 - 12:56:31: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:31: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:56:31: "II<12><[U:1:9]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 12:56:31: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:56:31: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:56:31: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:56:31: "GG<14><[U:1:7]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "55") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:56:32: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:32: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:56:32: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 12:56:32: "KK<15><[U:1:11]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "90") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:32: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:32: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:32: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:56:32: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 12:56:32: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:32: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:32: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "71") +L 07/15/2025 - 12:56:32: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:56:32: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "36") +L 07/15/2025 - 12:56:32: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:32: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:56:32: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:56:32: "BB<10><[U:1:2]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "71") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:56:32: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:56:33: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:33: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:33: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:56:33: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "35") (weapon "scattergun") +L 07/15/2025 - 12:56:33: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "57") +L 07/15/2025 - 12:56:33: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "26") +L 07/15/2025 - 12:56:33: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:56:33: "LL<16><[U:1:12]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "26") (weapon "quake_rl") +L 07/15/2025 - 12:56:33: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:33: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:56:33: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "14") (weapon "scattergun") +L 07/15/2025 - 12:56:33: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "7") (weapon "scattergun") +L 07/15/2025 - 12:56:33: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "14") (weapon "scattergun") +L 07/15/2025 - 12:56:33: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:56:34: "KK<15><[U:1:11]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "47") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:34: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:34: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:34: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:34: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:56:34: "II<12><[U:1:9]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 12:56:34: "II<12><[U:1:9]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 12:56:34: "II<12><[U:1:9]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 12:56:34: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:34: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:56:34: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "8") (weapon "scattergun") +L 07/15/2025 - 12:56:34: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "7") +L 07/15/2025 - 12:56:35: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:56:35: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:35: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:56:35: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "30") +L 07/15/2025 - 12:56:35: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "15") +L 07/15/2025 - 12:56:35: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:35: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:56:35: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:56:35: "KK<15><[U:1:11]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "100") (realdamage "97") (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:56:35: "KK<15><[U:1:11]>" killed "AA<3><[U:1:1]>" with "tf_projectile_pipe" (attacker_position "-700 -198 646") (victim_position "-839 406 574") +L 07/15/2025 - 12:56:36: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "14") +L 07/15/2025 - 12:56:36: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:56:36: "GG<14><[U:1:7]>" picked up item "medkit_small" (healing "40") +L 07/15/2025 - 12:56:36: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "3") +L 07/15/2025 - 12:56:36: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "27") +L 07/15/2025 - 12:56:36: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "44") +L 07/15/2025 - 12:56:36: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "2") +L 07/15/2025 - 12:56:37: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:37: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:56:37: "II<12><[U:1:9]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "8") (weapon "scattergun") (crit "mini") +L 07/15/2025 - 12:56:37: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:56:37: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:56:37: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:37: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:56:37: "II<12><[U:1:9]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "24") (weapon "scattergun") (crit "mini") +L 07/15/2025 - 12:56:37: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "54") +L 07/15/2025 - 12:56:37: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "12") +L 07/15/2025 - 12:56:37: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:56:37: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:56:37: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:37: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:56:37: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "15") (weapon "scattergun") +L 07/15/2025 - 12:56:38: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:56:38: "LL<16><[U:1:12]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "87") (realdamage "26") (weapon "quake_rl") +L 07/15/2025 - 12:56:38: "LL<16><[U:1:12]>" killed "GG<14><[U:1:7]>" with "quake_rl" (attacker_position "-21 876 488") (victim_position "287 889 515") +L 07/15/2025 - 12:56:38: "II<12><[U:1:9]>" triggered "kill assist" against "GG<14><[U:1:7]>" (assister_position "-376 288 808") (attacker_position "-21 876 488") (victim_position "287 889 515") +L 07/15/2025 - 12:56:38: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:56:38: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "89") +L 07/15/2025 - 12:56:38: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:56:38: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:38: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:56:38: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:56:38: "HH<11><[U:1:8]>" triggered "damage" against "II<12><[U:1:9]>" (damage "55") (weapon "quake_rl") +L 07/15/2025 - 12:56:38: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:56:38: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "4") +L 07/15/2025 - 12:56:38: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:38: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:56:38: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "28") (weapon "scattergun") +L 07/15/2025 - 12:56:39: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:39: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:39: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:56:39: "II<12><[U:1:9]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "16") (weapon "scattergun") +L 07/15/2025 - 12:56:39: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:39: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:56:39: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "49") (weapon "scattergun") +L 07/15/2025 - 12:56:39: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "7") +L 07/15/2025 - 12:56:40: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:56:40: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:56:40: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:56:40: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:40: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:56:40: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "7") (weapon "scattergun") +L 07/15/2025 - 12:56:41: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:41: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:56:41: "II<12><[U:1:9]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "28") (weapon "scattergun") +L 07/15/2025 - 12:56:41: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:56:41: "BB<10><[U:1:2]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "71") (realdamage "46") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:56:41: "BB<10><[U:1:2]>" killed "HH<11><[U:1:8]>" with "tf_projectile_rocket" (attacker_position "-46 635 717") (victim_position "252 927 538") +L 07/15/2025 - 12:56:41: "II<12><[U:1:9]>" triggered "kill assist" against "HH<11><[U:1:8]>" (assister_position "-36 450 786") (attacker_position "-46 635 717") (victim_position "252 927 538") +L 07/15/2025 - 12:56:41: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "14") +L 07/15/2025 - 12:56:41: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:56:41: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:56:41: "BB<10><[U:1:2]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 12:56:42: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "20") +L 07/15/2025 - 12:56:42: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "15") +L 07/15/2025 - 12:56:43: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "24") +L 07/15/2025 - 12:56:43: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "30") +L 07/15/2025 - 12:56:44: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "16") +L 07/15/2025 - 12:56:44: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "40") +L 07/15/2025 - 12:56:44: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:44: "BB<10><[U:1:2]>" picked up item "medkit_medium" (healing "30") +L 07/15/2025 - 12:56:44: "LL<16><[U:1:12]>" picked up item "medkit_medium" (healing "100") +L 07/15/2025 - 12:56:44: "BB<10><[U:1:2]>" picked up item "ammopack_medium" +L 07/15/2025 - 12:56:45: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "30") +L 07/15/2025 - 12:56:45: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "23") +L 07/15/2025 - 12:56:45: "EE<7><[U:1:5]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 12:56:46: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "7") +L 07/15/2025 - 12:56:46: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "5") +L 07/15/2025 - 12:56:46: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "19") +L 07/15/2025 - 12:56:47: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "10") +L 07/15/2025 - 12:56:47: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "3") +L 07/15/2025 - 12:56:48: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "24") +L 07/15/2025 - 12:56:48: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:56:49: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "15") +L 07/15/2025 - 12:56:49: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:56:50: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:50: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:50: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:50: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:50: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:50: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:50: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:50: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "18") +L 07/15/2025 - 12:56:50: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "19") +L 07/15/2025 - 12:56:51: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "4") +L 07/15/2025 - 12:56:51: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:56:52: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:56:52: "KK<15><[U:1:11]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "38") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:52: "KK<15><[U:1:11]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "43") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:52: "KK<15><[U:1:11]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "32") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:52: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:52: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:52: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:56:52: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "8") +L 07/15/2025 - 12:56:52: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:56:53: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:56:53: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "13") +L 07/15/2025 - 12:56:54: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:56:54: "LL<16><[U:1:12]>" picked up item "medkit_small" (healing "40") +L 07/15/2025 - 12:56:54: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:54: "LL<16><[U:1:12]>" picked up item "ammopack_small" +L 07/15/2025 - 12:56:54: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:56:54: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "20") +L 07/15/2025 - 12:56:55: Team "Blue" triggered "pointcaptured" (cp "2") (cpname "Middle Point") (numcappers "1") (player1 "II<12><[U:1:9]>") (position1 "332 129 480") +L 07/15/2025 - 12:56:55: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:56:55: "LL<16><[U:1:12]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "30") (weapon "quake_rl") +L 07/15/2025 - 12:56:55: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:56:55: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:55: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:56:55: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "7") (weapon "scattergun") +L 07/15/2025 - 12:56:55: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "24") +L 07/15/2025 - 12:56:56: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:56:56: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:56: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:56:56: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "25") (weapon "scattergun") +L 07/15/2025 - 12:56:56: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:56:56: "LL<16><[U:1:12]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "91") (weapon "quake_rl") +L 07/15/2025 - 12:56:56: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "14") +L 07/15/2025 - 12:56:56: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "12") +L 07/15/2025 - 12:56:56: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:56:57: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "16") +L 07/15/2025 - 12:56:57: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:56:57: "DD<6><[U:1:4]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "48") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:57: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:57: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:57: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:57: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:57: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "1") +L 07/15/2025 - 12:56:57: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "16") +L 07/15/2025 - 12:56:57: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "26") +L 07/15/2025 - 12:56:57: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "4") +L 07/15/2025 - 12:56:58: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "22") +L 07/15/2025 - 12:56:58: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "2") +L 07/15/2025 - 12:56:59: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:59: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:59: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:59: "AA<3><[U:1:1]>" spawned as "scout" +L 07/15/2025 - 12:56:59: "GG<14><[U:1:7]>" spawned as "soldier" +L 07/15/2025 - 12:56:59: "HH<11><[U:1:8]>" spawned as "soldier" +L 07/15/2025 - 12:56:59: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "25") +L 07/15/2025 - 12:56:59: "KK<15><[U:1:11]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "58") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:59: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "26") +L 07/15/2025 - 12:56:59: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:59: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:56:59: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:00: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "14") +L 07/15/2025 - 12:57:00: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "24") +L 07/15/2025 - 12:57:00: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "12") +L 07/15/2025 - 12:57:01: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:57:01: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:01: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:57:01: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:57:01: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "93") +L 07/15/2025 - 12:57:02: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "26") +L 07/15/2025 - 12:57:02: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:57:02: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:02: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:02: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:57:02: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:02: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:02: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:03: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:57:03: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 12:57:03: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "17") +L 07/15/2025 - 12:57:03: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "24") +L 07/15/2025 - 12:57:03: Team "Blue" triggered "pointcaptured" (cp "3") (cpname "Red Mini-Spire") (numcappers "3") (player1 "CC<5><[U:1:3]>") (position1 "1633 2278 775") (player2 "EE<7><[U:1:5]>") (position2 "1729 2283 770") (player3 "LL<16><[U:1:12]>") (position3 "1855 2195 768") +L 07/15/2025 - 12:57:03: "HH<11><[U:1:8]>" changed role to "heavyweapons" +L 07/15/2025 - 12:57:03: "HH<11><[U:1:8]>" spawned as "heavyweapons" +L 07/15/2025 - 12:57:03: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:03: "DD<6><[U:1:4]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "49") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:03: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:03: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:03: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:03: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:57:04: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "43") +L 07/15/2025 - 12:57:04: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "21") +L 07/15/2025 - 12:57:04: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:04: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:04: "BB<10><[U:1:2]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "31") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:05: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "15") +L 07/15/2025 - 12:57:05: "LL<16><[U:1:12]>" picked up item "ammopack_medium" +L 07/15/2025 - 12:57:05: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 12:57:06: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:57:06: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:57:06: "KK<15><[U:1:11]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "48") (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:57:06: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:06: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:57:06: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "95") +L 07/15/2025 - 12:57:06: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:06: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:57:06: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "21") (weapon "scattergun") +L 07/15/2025 - 12:57:06: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:06: "BB<10><[U:1:2]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "46") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:06: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "24") +L 07/15/2025 - 12:57:06: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:06: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:07: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:07: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:57:07: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "31") (weapon "scattergun") +L 07/15/2025 - 12:57:07: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:07: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:07: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:07: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "1") +L 07/15/2025 - 12:57:07: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "10") +L 07/15/2025 - 12:57:07: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:07: "GG<14><[U:1:7]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "28") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:07: "GG<14><[U:1:7]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "57") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:07: "GG<14><[U:1:7]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "29") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:07: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:07: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:07: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "13") +L 07/15/2025 - 12:57:08: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:08: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "6") +L 07/15/2025 - 12:57:08: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "16") +L 07/15/2025 - 12:57:08: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "1") +L 07/15/2025 - 12:57:08: "EE<7><[U:1:5]>" triggered "chargeready" +L 07/15/2025 - 12:57:08: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:08: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:57:08: "AA<3><[U:1:1]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 12:57:09: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:57:09: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "20") +L 07/15/2025 - 12:57:09: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:09: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:10: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:57:10: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "6") +L 07/15/2025 - 12:57:10: "DD<6><[U:1:4]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "93") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:10: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:10: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:57:10: "AA<3><[U:1:1]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 12:57:10: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:10: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:10: "KK<15><[U:1:11]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "52") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:10: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:10: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:10: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:10: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:57:10: "II<12><[U:1:9]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 12:57:10: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:57:10: "LL<16><[U:1:12]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "24") (weapon "quake_rl") +L 07/15/2025 - 12:57:11: "DD<6><[U:1:4]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "38") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:11: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:11: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:11: "KK<15><[U:1:11]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "37") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:11: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:11: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:11: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "7") +L 07/15/2025 - 12:57:11: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:57:11: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:11: "BB<10><[U:1:2]>" picked up item "medkit_small" (healing "40") +L 07/15/2025 - 12:57:11: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:57:11: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "110") +L 07/15/2025 - 12:57:12: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:12: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "9") +L 07/15/2025 - 12:57:12: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:57:13: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "25") +L 07/15/2025 - 12:57:13: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:57:13: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:57:14: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:57:14: "LL<16><[U:1:12]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "24") (weapon "quake_rl") +L 07/15/2025 - 12:57:14: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:57:14: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:57:14: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:57:14: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "75") +L 07/15/2025 - 12:57:14: "FF<8><[U:1:6]>" triggered "chargeready" +L 07/15/2025 - 12:57:14: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:57:14: "LL<16><[U:1:12]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "25") (weapon "quake_rl") +L 07/15/2025 - 12:57:14: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:57:15: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:57:15: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "82") +L 07/15/2025 - 12:57:15: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:16: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "21") +L 07/15/2025 - 12:57:16: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:17: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "6") +L 07/15/2025 - 12:57:17: "LL<16><[U:1:12]>" picked up item "ammopack_medium" +L 07/15/2025 - 12:57:17: "AA<3><[U:1:1]>" spawned as "scout" +L 07/15/2025 - 12:57:17: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "10") +L 07/15/2025 - 12:57:17: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "28") +L 07/15/2025 - 12:57:17: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:17: "LL<16><[U:1:12]>" picked up item "medkit_medium" (healing "28") +L 07/15/2025 - 12:57:18: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "25") +L 07/15/2025 - 12:57:19: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:57:19: "DD<6><[U:1:4]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "71") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:19: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:19: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:19: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:57:19: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:19: "DD<6><[U:1:4]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "64") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:19: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:57:19: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "7") +L 07/15/2025 - 12:57:19: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "4") +L 07/15/2025 - 12:57:19: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:19: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:20: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:20: "DD<6><[U:1:4]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "64") (realdamage "27") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:20: "DD<6><[U:1:4]>" killed "KK<15><[U:1:11]>" with "tf_projectile_pipe_remote" (attacker_position "3176 2265 576") (victim_position "3415 2551 576") +L 07/15/2025 - 12:57:20: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:20: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:20: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:20: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "42") +L 07/15/2025 - 12:57:20: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:21: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:21: "BB<10><[U:1:2]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "35") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:21: "GG<14><[U:1:7]>" changed role to "sniper" +L 07/15/2025 - 12:57:21: "GG<14><[U:1:7]>" spawned as "sniper" +L 07/15/2025 - 12:57:21: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:21: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:21: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:57:21: "JJ<13><[U:1:10]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "50") (weapon "scattergun") +L 07/15/2025 - 12:57:22: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:22: "BB<10><[U:1:2]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "72") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:22: "BB<10><[U:1:2]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "60") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:22: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:22: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:57:22: "CC<5><[U:1:3]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "68") (realdamage "30") (weapon "scattergun") +L 07/15/2025 - 12:57:22: "CC<5><[U:1:3]>" killed "JJ<13><[U:1:10]>" with "scattergun" (attacker_position "2965 2344 576") (victim_position "3277 2392 576") +L 07/15/2025 - 12:57:22: "EE<7><[U:1:5]>" triggered "kill assist" against "JJ<13><[U:1:10]>" (assister_position "2709 2361 576") (attacker_position "2965 2344 576") (victim_position "3277 2392 576") +L 07/15/2025 - 12:57:22: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "26") +L 07/15/2025 - 12:57:22: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:22: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:22: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:22: "BB<10><[U:1:2]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "77") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:22: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:57:23: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:23: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:57:23: "CC<5><[U:1:3]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "64") (realdamage "15") (weapon "scattergun") +L 07/15/2025 - 12:57:23: "CC<5><[U:1:3]>" killed "DD<6><[U:1:4]>" with "scattergun" (attacker_position "3118 2371 576") (victim_position "3307 2325 587") +L 07/15/2025 - 12:57:23: "EE<7><[U:1:5]>" triggered "kill assist" against "DD<6><[U:1:4]>" (assister_position "2696 2420 576") (attacker_position "3118 2371 576") (victim_position "3307 2325 587") +L 07/15/2025 - 12:57:23: "CC<5><[U:1:3]>" triggered "domination" against "DD<6><[U:1:4]>" +L 07/15/2025 - 12:57:23: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:57:23: "CC<5><[U:1:3]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 12:57:23: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:23: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:23: "BB<10><[U:1:2]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "47") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:23: "FF<8><[U:1:6]>" triggered "chargedeployed" (medigun "medigun") +L 07/15/2025 - 12:57:23: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:23: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:57:23: "CC<5><[U:1:3]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "0") (weapon "scattergun") +L 07/15/2025 - 12:57:24: "KK<15><[U:1:11]>" say_team "i love you all" +L 07/15/2025 - 12:57:24: "EE<7><[U:1:5]>" triggered "chargedeployed" (medigun "medigun") +L 07/15/2025 - 12:57:25: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:25: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:57:25: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "20") (weapon "scattergun") +L 07/15/2025 - 12:57:26: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "1") +L 07/15/2025 - 12:57:26: "HH<11><[U:1:8]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "0") (weapon "minigun") +L 07/15/2025 - 12:57:26: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:26: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:57:26: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "17") (weapon "scattergun") +L 07/15/2025 - 12:57:26: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:26: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "sniperrifle") +L 07/15/2025 - 12:57:26: "HH<11><[U:1:8]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "0") (weapon "minigun") +L 07/15/2025 - 12:57:27: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "26") +L 07/15/2025 - 12:57:27: "HH<11><[U:1:8]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "0") (weapon "minigun") +L 07/15/2025 - 12:57:27: "HH<11><[U:1:8]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "0") (weapon "minigun") +L 07/15/2025 - 12:57:28: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "1") +L 07/15/2025 - 12:57:28: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "35") +L 07/15/2025 - 12:57:28: "HH<11><[U:1:8]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "13") (weapon "minigun") +L 07/15/2025 - 12:57:28: "HH<11><[U:1:8]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "6") (weapon "minigun") +L 07/15/2025 - 12:57:28: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:28: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:57:28: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "4") (weapon "scattergun") +L 07/15/2025 - 12:57:28: "HH<11><[U:1:8]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "11") (weapon "minigun") +L 07/15/2025 - 12:57:28: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:57:29: "HH<11><[U:1:8]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "5") (weapon "minigun") +L 07/15/2025 - 12:57:29: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "59") +L 07/15/2025 - 12:57:29: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "35") +L 07/15/2025 - 12:57:29: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:29: "HH<11><[U:1:8]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "0") (weapon "minigun") +L 07/15/2025 - 12:57:30: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:30: "BB<10><[U:1:2]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "104") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:30: "BB<10><[U:1:2]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "0") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:30: "BB<10><[U:1:2]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "0") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:30: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "2") +L 07/15/2025 - 12:57:30: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "26") +L 07/15/2025 - 12:57:30: "HH<11><[U:1:8]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "0") (weapon "minigun") +L 07/15/2025 - 12:57:30: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:30: "BB<10><[U:1:2]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "71") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:30: "BB<10><[U:1:2]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "0") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:30: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:30: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "sniperrifle") +L 07/15/2025 - 12:57:30: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "sniperrifle") +L 07/15/2025 - 12:57:30: "GG<14><[U:1:7]>" triggered "damage" against "II<12><[U:1:9]>" (damage "150") (realdamage "120") (weapon "sniperrifle") (crit "crit") (headshot "1") +L 07/15/2025 - 12:57:30: "GG<14><[U:1:7]>" killed "II<12><[U:1:9]>" with "sniperrifle" (customkill "headshot") (attacker_position "3878 875 576") (victim_position "2869 1007 576") +L 07/15/2025 - 12:57:30: "HH<11><[U:1:8]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "0") (weapon "minigun") +L 07/15/2025 - 12:57:30: "FF<8><[U:1:6]>" triggered "empty_uber" +L 07/15/2025 - 12:57:30: "FF<8><[U:1:6]>" triggered "chargeended" (duration "7.0") +L 07/15/2025 - 12:57:30: "HH<11><[U:1:8]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "0") (weapon "minigun") +L 07/15/2025 - 12:57:31: "HH<11><[U:1:8]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "0") (weapon "minigun") +L 07/15/2025 - 12:57:31: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:57:31: "HH<11><[U:1:8]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "0") (weapon "minigun") +L 07/15/2025 - 12:57:31: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:57:31: "LL<16><[U:1:12]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "82") (weapon "quake_rl") +L 07/15/2025 - 12:57:31: "HH<11><[U:1:8]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "0") (weapon "minigun") +L 07/15/2025 - 12:57:31: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "8") +L 07/15/2025 - 12:57:31: "HH<11><[U:1:8]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "0") (weapon "minigun") +L 07/15/2025 - 12:57:31: "HH<11><[U:1:8]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "0") (weapon "minigun") +L 07/15/2025 - 12:57:31: "HH<11><[U:1:8]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "0") (weapon "minigun") +L 07/15/2025 - 12:57:31: "EE<7><[U:1:5]>" triggered "empty_uber" +L 07/15/2025 - 12:57:31: "EE<7><[U:1:5]>" triggered "chargeended" (duration "7.1") +L 07/15/2025 - 12:57:31: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:57:31: "LL<16><[U:1:12]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "109") (realdamage "43") (weapon "quake_rl") +L 07/15/2025 - 12:57:31: "LL<16><[U:1:12]>" killed "GG<14><[U:1:7]>" with "quake_rl" (attacker_position "3997 913 768") (victim_position "3970 977 594") +L 07/15/2025 - 12:57:31: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:57:31: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:31: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:57:31: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "0") (weapon "scattergun") +L 07/15/2025 - 12:57:32: "BB<10><[U:1:2]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 12:57:32: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:32: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:57:32: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "62") (weapon "scattergun") +L 07/15/2025 - 12:57:32: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:32: "HH<11><[U:1:8]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "0") (weapon "minigun") +L 07/15/2025 - 12:57:32: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "4") +L 07/15/2025 - 12:57:32: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "1") +L 07/15/2025 - 12:57:32: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "2") +L 07/15/2025 - 12:57:32: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:32: "BB<10><[U:1:2]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "97") (realdamage "83") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:32: "BB<10><[U:1:2]>" killed "HH<11><[U:1:8]>" with "tf_projectile_rocket" (attacker_position "3964 979 576") (victim_position "3639 1223 583") +L 07/15/2025 - 12:57:32: "CC<5><[U:1:3]>" triggered "kill assist" against "HH<11><[U:1:8]>" (assister_position "3775 1510 576") (attacker_position "3964 979 576") (victim_position "3639 1223 583") +L 07/15/2025 - 12:57:32: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:57:32: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:32: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:57:32: "LL<16><[U:1:12]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "65") (weapon "quake_rl") +L 07/15/2025 - 12:57:32: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:33: "CC<5><[U:1:3]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 12:57:33: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "24") +L 07/15/2025 - 12:57:33: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:33: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:57:33: "AA<3><[U:1:1]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "24") (weapon "scattergun") +L 07/15/2025 - 12:57:33: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:34: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:57:34: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:34: "BB<10><[U:1:2]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "85") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:57:34: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:34: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "26") +L 07/15/2025 - 12:57:34: "FF<8><[U:1:6]>" spawned as "medic" +L 07/15/2025 - 12:57:34: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:34: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:57:34: "AA<3><[U:1:1]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "14") (weapon "scattergun") +L 07/15/2025 - 12:57:34: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:34: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:57:34: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "15") (weapon "scattergun") +L 07/15/2025 - 12:57:35: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:35: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:57:35: "AA<3><[U:1:1]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "23") (weapon "scattergun") +L 07/15/2025 - 12:57:35: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:57:35: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "8") +L 07/15/2025 - 12:57:35: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:57:35: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:57:35: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 12:57:35: Team "Blue" triggered "pointcaptured" (cp "4") (cpname "Red Final Point") (numcappers "2") (player1 "BB<10><[U:1:2]>") (position1 "3591 1193 592") (player2 "CC<5><[U:1:3]>") (position2 "3497 1239 583") +L 07/15/2025 - 12:57:35: World triggered "Round_Win" (winner "Blue") +L 07/15/2025 - 12:57:35: World triggered "Round_Length" (seconds "88.20") +L 07/15/2025 - 12:57:35: Team "Red" current score "0" with "6" players +L 07/15/2025 - 12:57:35: Team "Blue" current score "2" with "6" players +L 07/15/2025 - 12:57:36: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:57:36: "LL<16><[U:1:12]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "140") (realdamage "72") (weapon "quake_rl") (crit "crit") +L 07/15/2025 - 12:57:36: "LL<16><[U:1:12]>" killed "AA<3><[U:1:1]>" with "quake_rl" (attacker_position "4117 800 768") (victim_position "4013 396 766") +L 07/15/2025 - 12:57:36: "CC<5><[U:1:3]>" triggered "kill assist" against "AA<3><[U:1:1]>" (assister_position "3648 1119 649") (attacker_position "4117 800 768") (victim_position "4013 396 766") +L 07/15/2025 - 12:57:38: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:57:38: "CC<5><[U:1:3]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "90") (weapon "scattergun") (crit "crit") +L 07/15/2025 - 12:57:39: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "25") +L 07/15/2025 - 12:57:39: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:57:39: "CC<5><[U:1:3]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "162") (realdamage "63") (weapon "scattergun") (crit "crit") +L 07/15/2025 - 12:57:39: "CC<5><[U:1:3]>" triggered "medic_death" against "FF<8><[U:1:6]>" (healing "0") (ubercharge "0") +L 07/15/2025 - 12:57:39: "CC<5><[U:1:3]>" killed "FF<8><[U:1:6]>" with "scattergun" (attacker_position "4522 1110 576") (victim_position "4494 1262 576") +L 07/15/2025 - 12:57:39: "HH<11><[U:1:8]>" changed role to "soldier" +L 07/15/2025 - 12:57:40: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "24") +L 07/15/2025 - 12:57:41: "EE<7><[U:1:5]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 12:57:42: "LL<16><[U:1:12]>" picked up item "ammopack_small" +L 07/15/2025 - 12:57:42: "LL<16><[U:1:12]>" picked up item "medkit_small" (healing "40") +L 07/15/2025 - 12:57:44: "GG<14><[U:1:7]>" changed role to "soldier" +L 07/15/2025 - 12:57:52: World triggered "Round_Start" +L 07/15/2025 - 12:57:52: "AA<3><[U:1:1]>" spawned as "scout" +L 07/15/2025 - 12:57:52: "BB<10><[U:1:2]>" spawned as "soldier" +L 07/15/2025 - 12:57:52: "CC<5><[U:1:3]>" spawned as "scout" +L 07/15/2025 - 12:57:52: "DD<6><[U:1:4]>" spawned as "demoman" +L 07/15/2025 - 12:57:52: "EE<7><[U:1:5]>" spawned as "medic" +L 07/15/2025 - 12:57:52: "FF<8><[U:1:6]>" spawned as "medic" +L 07/15/2025 - 12:57:52: "GG<14><[U:1:7]>" spawned as "soldier" +L 07/15/2025 - 12:57:52: "HH<11><[U:1:8]>" spawned as "soldier" +L 07/15/2025 - 12:57:52: "II<12><[U:1:9]>" spawned as "scout" +L 07/15/2025 - 12:57:52: "JJ<13><[U:1:10]>" spawned as "scout" +L 07/15/2025 - 12:57:52: "KK<15><[U:1:11]>" spawned as "demoman" +L 07/15/2025 - 12:57:52: "LL<16><[U:1:12]>" spawned as "soldier" +L 07/15/2025 - 12:57:52: "FF<8><[U:1:6]>" triggered "empty_uber" +L 07/15/2025 - 12:57:52: "EE<7><[U:1:5]>" triggered "empty_uber" +L 07/15/2025 - 12:57:54: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "42") +L 07/15/2025 - 12:57:54: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "16") +L 07/15/2025 - 12:57:55: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "51") +L 07/15/2025 - 12:57:55: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "72") +L 07/15/2025 - 12:57:56: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "25") +L 07/15/2025 - 12:57:56: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "24") +L 07/15/2025 - 12:57:57: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "24") +L 07/15/2025 - 12:57:57: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "26") +L 07/15/2025 - 12:57:58: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "36") +L 07/15/2025 - 12:57:58: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "6") +L 07/15/2025 - 12:57:58: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "8") +L 07/15/2025 - 12:57:59: "AA<3><[U:1:1]>" spawned as "scout" +L 07/15/2025 - 12:57:59: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "12") +L 07/15/2025 - 12:57:59: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "79") +L 07/15/2025 - 12:57:59: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "26") +L 07/15/2025 - 12:57:59: "JJ<13><[U:1:10]>" say_team "you are awesome" +L 07/15/2025 - 12:58:00: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "6") +L 07/15/2025 - 12:58:00: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "14") +L 07/15/2025 - 12:58:00: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "22") +L 07/15/2025 - 12:58:01: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "60") +L 07/15/2025 - 12:58:01: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "26") +L 07/15/2025 - 12:58:01: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "3") +L 07/15/2025 - 12:58:02: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "15") +L 07/15/2025 - 12:58:02: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "10") +L 07/15/2025 - 12:58:03: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "45") +L 07/15/2025 - 12:58:03: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "37") +L 07/15/2025 - 12:58:04: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "23") +L 07/15/2025 - 12:58:05: "JJ<13><[U:1:10]>" say_team "best team" +L 07/15/2025 - 12:58:06: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "8") +L 07/15/2025 - 12:58:07: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "3") +L 07/15/2025 - 12:58:08: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:58:08: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:58:08: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:58:08: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "99") +L 07/15/2025 - 12:58:08: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:08: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:58:08: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:58:09: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:58:09: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "112") +L 07/15/2025 - 12:58:09: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:58:09: "LL<16><[U:1:12]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "24") (weapon "quake_rl") +L 07/15/2025 - 12:58:09: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "21") +L 07/15/2025 - 12:58:10: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "36") +L 07/15/2025 - 12:58:10: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:58:10: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:58:10: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:11: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "38") +L 07/15/2025 - 12:58:11: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "21") +L 07/15/2025 - 12:58:11: "KK<15><[U:1:11]>" picked up item "medkit_medium" (healing "73") +L 07/15/2025 - 12:58:12: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:12: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "1") +L 07/15/2025 - 12:58:12: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:58:12: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:58:12: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "75") +L 07/15/2025 - 12:58:13: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:58:13: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:58:13: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "119") +L 07/15/2025 - 12:58:13: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:13: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:14: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:14: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:14: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:14: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 12:58:14: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:58:14: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:58:14: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:58:14: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "75") +L 07/15/2025 - 12:58:14: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:14: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:14: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "12") (weapon "scattergun") +L 07/15/2025 - 12:58:14: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:14: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:14: "II<12><[U:1:9]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 12:58:14: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:15: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:15: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:15: "JJ<13><[U:1:10]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 12:58:15: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:58:15: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:58:15: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "9") +L 07/15/2025 - 12:58:15: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:15: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:15: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 12:58:15: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:15: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:15: "II<12><[U:1:9]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 12:58:15: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:15: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:15: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 12:58:16: "KK<15><[U:1:11]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "50") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:16: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:16: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:16: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:58:16: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "26") +L 07/15/2025 - 12:58:16: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:58:16: "BB<10><[U:1:2]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "39") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:58:16: "BB<10><[U:1:2]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "24") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:58:16: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:16: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:16: "AA<3><[U:1:1]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 12:58:16: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:58:17: "DD<6><[U:1:4]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "60") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:17: "DD<6><[U:1:4]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "33") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:17: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:17: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:17: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:17: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:17: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:17: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:17: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "32") +L 07/15/2025 - 12:58:17: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:17: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:17: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "16") (weapon "scattergun") +L 07/15/2025 - 12:58:17: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "26") +L 07/15/2025 - 12:58:18: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:18: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:18: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "28") +L 07/15/2025 - 12:58:18: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:18: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:58:18: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "23") +L 07/15/2025 - 12:58:19: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:58:19: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:19: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:19: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "11") (weapon "scattergun") +L 07/15/2025 - 12:58:19: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "15") +L 07/15/2025 - 12:58:19: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:58:19: "LL<16><[U:1:12]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "42") (weapon "quake_rl") +L 07/15/2025 - 12:58:19: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:19: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:58:19: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:19: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:58:19: "GG<14><[U:1:7]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "98") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:58:20: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:58:20: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:20: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:58:20: "BB<10><[U:1:2]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "24") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:58:20: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:58:20: "BB<10><[U:1:2]>" picked up item "medkit_medium" (healing "69") +L 07/15/2025 - 12:58:20: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:20: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "7") +L 07/15/2025 - 12:58:20: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:58:20: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:20: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:20: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "33") (weapon "scattergun") +L 07/15/2025 - 12:58:21: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:58:21: "AA<3><[U:1:1]>" picked up item "ammopack_medium" +L 07/15/2025 - 12:58:21: "AA<3><[U:1:1]>" picked up item "medkit_medium" (healing "19") +L 07/15/2025 - 12:58:21: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:58:21: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:58:21: "GG<14><[U:1:7]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "86") (realdamage "55") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:58:21: "GG<14><[U:1:7]>" triggered "medic_death" against "EE<7><[U:1:5]>" (healing "821") (ubercharge "0") +L 07/15/2025 - 12:58:21: "GG<14><[U:1:7]>" triggered "captureblocked" (cp "2") (cpname "Middle Point") (position "232 -43 546") +L 07/15/2025 - 12:58:21: "EE<7><[U:1:5]>" triggered "medic_death_ex" (uberpct "42") +L 07/15/2025 - 12:58:21: "GG<14><[U:1:7]>" killed "EE<7><[U:1:5]>" with "tf_projectile_rocket" (attacker_position "232 -43 546") (victim_position "175 -94 480") +L 07/15/2025 - 12:58:21: "GG<14><[U:1:7]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 12:58:21: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:21: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:58:22: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:22: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:22: "II<12><[U:1:9]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "13") (weapon "scattergun") +L 07/15/2025 - 12:58:22: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:22: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:22: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:22: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "85") (weapon "scattergun") +L 07/15/2025 - 12:58:22: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:22: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:22: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 12:58:22: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:22: "DD<6><[U:1:4]>" triggered "damage" against "II<12><[U:1:9]>" (damage "51") (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:22: "DD<6><[U:1:4]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "100") (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:22: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:58:22: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:58:22: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:22: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:22: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:22: "II<12><[U:1:9]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "16") (weapon "scattergun") +L 07/15/2025 - 12:58:22: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:22: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:22: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "51") (weapon "scattergun") +L 07/15/2025 - 12:58:23: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:23: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:23: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "19") (weapon "scattergun") +L 07/15/2025 - 12:58:23: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:23: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:23: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:23: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:23: "II<12><[U:1:9]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "22") (weapon "scattergun") +L 07/15/2025 - 12:58:23: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:23: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:23: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:23: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:58:23: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:23: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:23: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "16") (weapon "scattergun") +L 07/15/2025 - 12:58:24: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:24: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "26") +L 07/15/2025 - 12:58:24: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:24: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:24: "LL<16><[U:1:12]>" picked up item "medkit_medium" (healing "100") +L 07/15/2025 - 12:58:24: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:24: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:24: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:58:24: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:24: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:24: "AA<3><[U:1:1]>" triggered "damage" against "II<12><[U:1:9]>" (damage "16") (weapon "scattergun") +L 07/15/2025 - 12:58:25: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:25: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:25: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "23") (weapon "scattergun") +L 07/15/2025 - 12:58:25: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "17") +L 07/15/2025 - 12:58:25: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:25: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:25: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:25: "AA<3><[U:1:1]>" triggered "damage" against "II<12><[U:1:9]>" (damage "38") (weapon "scattergun") +L 07/15/2025 - 12:58:25: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:25: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:25: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:25: "KK<15><[U:1:11]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "100") (realdamage "53") (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:25: "KK<15><[U:1:11]>" killed "GG<14><[U:1:7]>" with "tf_projectile_pipe" (attacker_position "-196 -326 457") (victim_position "-338 -232 466") +L 07/15/2025 - 12:58:25: "CC<5><[U:1:3]>" triggered "kill assist" against "GG<14><[U:1:7]>" (assister_position "-607 -271 520") (attacker_position "-196 -326 457") (victim_position "-338 -232 466") +L 07/15/2025 - 12:58:25: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:58:25: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:25: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "47") +L 07/15/2025 - 12:58:26: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:26: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:26: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:26: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:26: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:26: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:26: "II<12><[U:1:9]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "14") (weapon "scattergun") +L 07/15/2025 - 12:58:27: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:58:27: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:27: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:27: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:27: "JJ<13><[U:1:10]>" triggered "damage" against "II<12><[U:1:9]>" (damage "4") (weapon "scattergun") +L 07/15/2025 - 12:58:27: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:28: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:58:28: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:28: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:58:28: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:58:28: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "18") +L 07/15/2025 - 12:58:28: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:58:28: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:28: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:58:28: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:28: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:58:28: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:58:28: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:58:28: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:58:29: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:58:29: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:58:29: "HH<11><[U:1:8]>" triggered "damage" against "II<12><[U:1:9]>" (damage "24") (weapon "quake_rl") +L 07/15/2025 - 12:58:29: "HH<11><[U:1:8]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "39") (weapon "quake_rl") +L 07/15/2025 - 12:58:29: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "18") +L 07/15/2025 - 12:58:29: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:58:29: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:58:29: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:29: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:58:29: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:58:29: "LL<16><[U:1:12]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "63") (weapon "quake_rl") +L 07/15/2025 - 12:58:29: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:58:29: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:29: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:29: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "69") (weapon "scattergun") +L 07/15/2025 - 12:58:30: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:58:30: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "4") +L 07/15/2025 - 12:58:30: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:30: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:58:30: "LL<16><[U:1:12]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "62") (weapon "quake_rl") +L 07/15/2025 - 12:58:30: "FF<8><[U:1:6]>" picked up item "ammopack_medium" +L 07/15/2025 - 12:58:31: "BB<10><[U:1:2]>" picked up item "medkit_medium" (healing "100") +L 07/15/2025 - 12:58:31: "DD<6><[U:1:4]>" picked up item "medkit_medium" (healing "37") +L 07/15/2025 - 12:58:31: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "14") +L 07/15/2025 - 12:58:31: "BB<10><[U:1:2]>" picked up item "ammopack_medium" +L 07/15/2025 - 12:58:31: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:31: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:31: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:31: "II<12><[U:1:9]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 12:58:31: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:32: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:58:32: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:58:32: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "24") +L 07/15/2025 - 12:58:32: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:32: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:58:32: "HH<11><[U:1:8]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "89") (realdamage "14") (weapon "quake_rl") (crit "mini") +L 07/15/2025 - 12:58:32: "HH<11><[U:1:8]>" killed "LL<16><[U:1:12]>" with "quake_rl" (attacker_position "145 -471 718") (victim_position "104 -570 503") +L 07/15/2025 - 12:58:32: "JJ<13><[U:1:10]>" triggered "kill assist" against "LL<16><[U:1:12]>" (assister_position "887 537 544") (attacker_position "145 -471 718") (victim_position "104 -570 503") +L 07/15/2025 - 12:58:32: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:32: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:32: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "25") (weapon "scattergun") +L 07/15/2025 - 12:58:33: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:58:33: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:33: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:33: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "18") (weapon "scattergun") +L 07/15/2025 - 12:58:33: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "15") +L 07/15/2025 - 12:58:33: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:34: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:34: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:34: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:34: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "52") (weapon "scattergun") +L 07/15/2025 - 12:58:34: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:58:34: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:58:34: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:58:34: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "101") +L 07/15/2025 - 12:58:34: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:34: "II<12><[U:1:9]>" picked up item "medkit_medium" (healing "63") +L 07/15/2025 - 12:58:34: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:34: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:34: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 12:58:34: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "2") +L 07/15/2025 - 12:58:34: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:34: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:34: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "17") (weapon "scattergun") +L 07/15/2025 - 12:58:35: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:35: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:35: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "12") +L 07/15/2025 - 12:58:35: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:35: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:35: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "40") (weapon "scattergun") +L 07/15/2025 - 12:58:35: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:35: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:35: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "43") (weapon "scattergun") +L 07/15/2025 - 12:58:35: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:58:36: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:36: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:36: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:36: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "21") (weapon "scattergun") +L 07/15/2025 - 12:58:36: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:36: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:36: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "19") (weapon "scattergun") +L 07/15/2025 - 12:58:36: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:36: "KK<15><[U:1:11]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "31") (realdamage "21") (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:36: "KK<15><[U:1:11]>" killed "HH<11><[U:1:8]>" with "tf_projectile_pipe" (attacker_position "-741 -521 544") (victim_position "706 85 626") +L 07/15/2025 - 12:58:36: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "7") +L 07/15/2025 - 12:58:36: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:58:36: "DD<6><[U:1:4]>" triggered "damage" against "II<12><[U:1:9]>" (damage "53") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:36: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:36: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:36: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:36: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:36: "II<12><[U:1:9]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 12:58:36: "CC<5><[U:1:3]>" picked up item "medkit_small" (healing "25") +L 07/15/2025 - 12:58:36: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:36: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:36: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "4") (weapon "scattergun") +L 07/15/2025 - 12:58:37: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:37: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:37: "JJ<13><[U:1:10]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "33") (weapon "scattergun") +L 07/15/2025 - 12:58:37: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:37: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:37: "II<12><[U:1:9]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "17") (weapon "scattergun") +L 07/15/2025 - 12:58:37: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:58:37: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:58:37: "BB<10><[U:1:2]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "57") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:58:38: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:38: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:38: "JJ<13><[U:1:10]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "54") (weapon "scattergun") +L 07/15/2025 - 12:58:38: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:38: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:58:38: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:38: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:38: "CC<5><[U:1:3]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "5") (weapon "scattergun") +L 07/15/2025 - 12:58:38: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:38: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:38: "JJ<13><[U:1:10]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "85") (realdamage "21") (weapon "scattergun") +L 07/15/2025 - 12:58:38: "JJ<13><[U:1:10]>" killed "BB<10><[U:1:2]>" with "scattergun" (attacker_position "661 617 544") (victim_position "681 926 607") +L 07/15/2025 - 12:58:39: "JJ<13><[U:1:10]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 12:58:41: "DD<6><[U:1:4]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 12:58:41: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "4") +L 07/15/2025 - 12:58:41: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:42: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:42: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "44") +L 07/15/2025 - 12:58:43: "CC<5><[U:1:3]>" picked up item "medkit_medium" (healing "62") +L 07/15/2025 - 12:58:43: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "12") +L 07/15/2025 - 12:58:44: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:44: "DD<6><[U:1:4]>" triggered "damage" against "II<12><[U:1:9]>" (damage "30") (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:44: "GG<14><[U:1:7]>" spawned as "soldier" +L 07/15/2025 - 12:58:44: "EE<7><[U:1:5]>" spawned as "medic" +L 07/15/2025 - 12:58:44: "EE<7><[U:1:5]>" triggered "empty_uber" +L 07/15/2025 - 12:58:46: "II<12><[U:1:9]>" picked up item "medkit_medium" (healing "63") +L 07/15/2025 - 12:58:46: "II<12><[U:1:9]>" picked up item "ammopack_medium" +L 07/15/2025 - 12:58:47: "CC<5><[U:1:3]>" picked up item "ammopack_small" +L 07/15/2025 - 12:58:47: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:47: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "25") +L 07/15/2025 - 12:58:48: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "2") +L 07/15/2025 - 12:58:48: "KK<15><[U:1:11]>" picked up item "medkit_small" (healing "35") +L 07/15/2025 - 12:58:48: "KK<15><[U:1:11]>" picked up item "ammopack_medium" +L 07/15/2025 - 12:58:49: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "24") +L 07/15/2025 - 12:58:50: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "35") +L 07/15/2025 - 12:58:51: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "57") +L 07/15/2025 - 12:58:51: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "7") +L 07/15/2025 - 12:58:51: "JJ<13><[U:1:10]>" picked up item "ammopack_medium" +L 07/15/2025 - 12:58:52: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "3") +L 07/15/2025 - 12:58:52: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "18") +L 07/15/2025 - 12:58:52: Team "Red" triggered "pointcaptured" (cp "2") (cpname "Middle Point") (numcappers "2") (player1 "AA<3><[U:1:1]>") (position1 "65 -74 530") (player2 "DD<6><[U:1:4]>") (position2 "-328 10 480") +L 07/15/2025 - 12:58:52: "HH<11><[U:1:8]>" spawned as "soldier" +L 07/15/2025 - 12:58:52: "LL<16><[U:1:12]>" spawned as "soldier" +L 07/15/2025 - 12:58:52: "GG<14><[U:1:7]>" picked up item "medkit_small" (healing "35") +L 07/15/2025 - 12:58:52: "GG<14><[U:1:7]>" picked up item "ammopack_small" +L 07/15/2025 - 12:58:53: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:53: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "8") +L 07/15/2025 - 12:58:53: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:54: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:54: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:54: "JJ<13><[U:1:10]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "97") (weapon "scattergun") +L 07/15/2025 - 12:58:54: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:54: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:54: "KK<15><[U:1:11]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "91") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:54: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "2") +L 07/15/2025 - 12:58:54: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:54: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:55: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:55: "KK<15><[U:1:11]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "100") (realdamage "97") (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:55: "KK<15><[U:1:11]>" killed "JJ<13><[U:1:10]>" with "tf_projectile_pipe" (attacker_position "-635 -1642 644") (victim_position "-835 -1291 679") +L 07/15/2025 - 12:58:55: "DD<6><[U:1:4]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "44") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:55: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:55: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:55: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:55: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:58:55: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 12:58:55: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:55: "EE<7><[U:1:5]>" triggered "first_heal_after_spawn" (time "10.7") +L 07/15/2025 - 12:58:55: "DD<6><[U:1:4]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "54") (realdamage "3") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:55: "DD<6><[U:1:4]>" killed "KK<15><[U:1:11]>" with "tf_projectile_pipe_remote" (attacker_position "-657 -1095 583") (victim_position "-641 -1799 473") +L 07/15/2025 - 12:58:55: "AA<3><[U:1:1]>" triggered "kill assist" against "KK<15><[U:1:11]>" (assister_position "-748 -671 574") (attacker_position "-657 -1095 583") (victim_position "-641 -1799 473") +L 07/15/2025 - 12:58:55: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:55: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:58:56: "DD<6><[U:1:4]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 12:58:56: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "60") +L 07/15/2025 - 12:58:56: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "1") +L 07/15/2025 - 12:58:57: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "18") +L 07/15/2025 - 12:58:57: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "18") +L 07/15/2025 - 12:58:57: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:58:58: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:58:58: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "4") +L 07/15/2025 - 12:58:58: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:58:58: "GG<14><[U:1:7]>" picked up item "medkit_small" (healing "40") +L 07/15/2025 - 12:58:59: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "8") +L 07/15/2025 - 12:59:00: "GG<14><[U:1:7]>" picked up item "medkit_medium" (healing "49") +L 07/15/2025 - 12:59:00: "BB<10><[U:1:2]>" spawned as "soldier" +L 07/15/2025 - 12:59:00: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "26") +L 07/15/2025 - 12:59:00: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:00: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:00: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:00: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:00: "AA<3><[U:1:1]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 12:59:00: "FF<8><[U:1:6]>" triggered "chargeready" +L 07/15/2025 - 12:59:01: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:01: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "3") +L 07/15/2025 - 12:59:01: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:59:02: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:02: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:02: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 12:59:02: "AA<3><[U:1:1]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 12:59:02: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:02: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:02: "AA<3><[U:1:1]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 12:59:02: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:02: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:02: "II<12><[U:1:9]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 12:59:03: "LL<16><[U:1:12]>" picked up item "medkit_small" (healing "38") +L 07/15/2025 - 12:59:03: "LL<16><[U:1:12]>" picked up item "ammopack_small" +L 07/15/2025 - 12:59:03: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:03: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:03: "II<12><[U:1:9]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 12:59:03: "II<12><[U:1:9]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 12:59:03: "II<12><[U:1:9]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 12:59:03: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:03: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:03: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "41") (weapon "scattergun") +L 07/15/2025 - 12:59:03: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "8") +L 07/15/2025 - 12:59:04: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:04: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:04: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "15") (weapon "scattergun") +L 07/15/2025 - 12:59:04: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "26") +L 07/15/2025 - 12:59:04: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:04: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:04: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "21") (weapon "scattergun") +L 07/15/2025 - 12:59:04: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:04: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:04: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:04: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "51") (weapon "scattergun") +L 07/15/2025 - 12:59:04: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "14") +L 07/15/2025 - 12:59:05: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:59:05: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:05: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:05: "II<12><[U:1:9]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "32") (weapon "scattergun") +L 07/15/2025 - 12:59:05: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:05: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:05: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "27") (weapon "scattergun") +L 07/15/2025 - 12:59:05: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:59:05: "LL<16><[U:1:12]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "103") (realdamage "70") (weapon "quake_rl") +L 07/15/2025 - 12:59:05: "LL<16><[U:1:12]>" killed "AA<3><[U:1:1]>" with "quake_rl" (attacker_position "-1829 -2055 999") (victim_position "-1629 -2132 775") +L 07/15/2025 - 12:59:05: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:59:05: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:59:05: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:06: "BB<10><[U:1:2]>" changed role to "sniper" +L 07/15/2025 - 12:59:06: "BB<10><[U:1:2]>" spawned as "sniper" +L 07/15/2025 - 12:59:06: "LL<16><[U:1:12]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 12:59:06: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:06: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:06: "II<12><[U:1:9]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "74") (weapon "scattergun") +L 07/15/2025 - 12:59:07: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "25") +L 07/15/2025 - 12:59:07: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:59:07: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:07: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:59:07: "BB<10><[U:1:2]>" changed role to "soldier" +L 07/15/2025 - 12:59:07: "BB<10><[U:1:2]>" spawned as "soldier" +L 07/15/2025 - 12:59:07: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:59:07: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "pistol_scout") +L 07/15/2025 - 12:59:07: "II<12><[U:1:9]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "22") (weapon "pistol_scout") +L 07/15/2025 - 12:59:07: "FF<8><[U:1:6]>" triggered "chargedeployed" (medigun "medigun") +L 07/15/2025 - 12:59:07: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:59:07: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:59:07: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:07: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:59:08: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:59:08: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "24") +L 07/15/2025 - 12:59:09: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:59:09: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "25") +L 07/15/2025 - 12:59:10: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "24") +L 07/15/2025 - 12:59:10: "FF<8><[U:1:6]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 12:59:11: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:59:11: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "25") +L 07/15/2025 - 12:59:11: "GG<14><[U:1:7]>" picked up item "ammopack_medium" +L 07/15/2025 - 12:59:11: "HH<11><[U:1:8]>" picked up item "medkit_medium" (healing "100") +L 07/15/2025 - 12:59:12: "GG<14><[U:1:7]>" picked up item "medkit_medium" (healing "34") +L 07/15/2025 - 12:59:12: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "19") +L 07/15/2025 - 12:59:12: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "1") +L 07/15/2025 - 12:59:12: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "25") +L 07/15/2025 - 12:59:12: "II<12><[U:1:9]>" picked up item "medkit_medium" (healing "56") +L 07/15/2025 - 12:59:12: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:13: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "10") +L 07/15/2025 - 12:59:13: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:59:13: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:59:13: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "89") +L 07/15/2025 - 12:59:13: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:14: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:14: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:14: "DD<6><[U:1:4]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "100") (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:14: "BB<10><[U:1:2]>" picked up item "medkit_small" (healing "34") +L 07/15/2025 - 12:59:14: "BB<10><[U:1:2]>" picked up item "ammopack_small" +L 07/15/2025 - 12:59:15: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "6") +L 07/15/2025 - 12:59:15: "FF<8><[U:1:6]>" triggered "empty_uber" +L 07/15/2025 - 12:59:15: "FF<8><[U:1:6]>" triggered "chargeended" (duration "7.5") +L 07/15/2025 - 12:59:15: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:59:16: "JJ<13><[U:1:10]>" spawned as "scout" +L 07/15/2025 - 12:59:16: "KK<15><[U:1:11]>" spawned as "demoman" +L 07/15/2025 - 12:59:16: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "24") +L 07/15/2025 - 12:59:16: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:59:16: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:59:16: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:59:16: "LL<16><[U:1:12]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "34") (weapon "quake_rl") +L 07/15/2025 - 12:59:16: "LL<16><[U:1:12]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "37") (weapon "quake_rl") +L 07/15/2025 - 12:59:16: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:59:16: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "97") +L 07/15/2025 - 12:59:17: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "5") +L 07/15/2025 - 12:59:17: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:59:18: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "14") +L 07/15/2025 - 12:59:18: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "24") +L 07/15/2025 - 12:59:19: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "26") +L 07/15/2025 - 12:59:19: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "27") +L 07/15/2025 - 12:59:19: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:19: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:19: "II<12><[U:1:9]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "56") (weapon "scattergun") +L 07/15/2025 - 12:59:20: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:20: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:20: "II<12><[U:1:9]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "51") (weapon "scattergun") +L 07/15/2025 - 12:59:20: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "21") +L 07/15/2025 - 12:59:20: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "7") +L 07/15/2025 - 12:59:20: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "4") +L 07/15/2025 - 12:59:20: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:20: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:20: "II<12><[U:1:9]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "61") (realdamage "24") (weapon "scattergun") +L 07/15/2025 - 12:59:20: "II<12><[U:1:9]>" triggered "medic_death" against "FF<8><[U:1:6]>" (healing "1730") (ubercharge "0") +L 07/15/2025 - 12:59:20: "FF<8><[U:1:6]>" triggered "medic_death_ex" (uberpct "14") +L 07/15/2025 - 12:59:20: "II<12><[U:1:9]>" killed "FF<8><[U:1:6]>" with "scattergun" (attacker_position "-935 -395 544") (victim_position "-883 -679 546") +L 07/15/2025 - 12:59:21: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:59:21: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:59:21: "HH<11><[U:1:8]>" triggered "damage" against "II<12><[U:1:9]>" (damage "52") (weapon "quake_rl") +L 07/15/2025 - 12:59:21: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:21: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:59:21: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:21: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "8") +L 07/15/2025 - 12:59:21: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:21: "GG<14><[U:1:7]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "95") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:21: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:21: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:59:22: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:22: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:22: "GG<14><[U:1:7]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "58") (realdamage "17") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:22: "GG<14><[U:1:7]>" killed "LL<16><[U:1:12]>" with "tf_projectile_rocket" (attacker_position "-86 -1888 649") (victim_position "146 -1544 656") +L 07/15/2025 - 12:59:22: "DD<6><[U:1:4]>" triggered "damage" against "II<12><[U:1:9]>" (damage "40") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:22: "DD<6><[U:1:4]>" triggered "damage" against "II<12><[U:1:9]>" (damage "40") (realdamage "33") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:22: "DD<6><[U:1:4]>" killed "II<12><[U:1:9]>" with "tf_projectile_pipe_remote" (attacker_position "-603 -531 594") (victim_position "-741 -1282 624") +L 07/15/2025 - 12:59:22: "HH<11><[U:1:8]>" triggered "kill assist" against "II<12><[U:1:9]>" (assister_position "-794 -528 587") (attacker_position "-603 -531 594") (victim_position "-741 -1282 624") +L 07/15/2025 - 12:59:22: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:22: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:22: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:22: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:22: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:22: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:22: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:22: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:22: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:22: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:59:24: "AA<3><[U:1:1]>" spawned as "scout" +L 07/15/2025 - 12:59:24: "DD<6><[U:1:4]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 12:59:24: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:25: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:25: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:25: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 12:59:25: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "10") +L 07/15/2025 - 12:59:25: "DD<6><[U:1:4]>" picked up item "ammopack_medium" +L 07/15/2025 - 12:59:25: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:25: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 12:59:25: "HH<11><[U:1:8]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "83") (weapon "quake_rl") +L 07/15/2025 - 12:59:25: "CC<5><[U:1:3]>" picked up item "medkit_medium" (healing "63") +L 07/15/2025 - 12:59:25: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:59:25: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "10") +L 07/15/2025 - 12:59:26: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:26: "KK<15><[U:1:11]>" picked up item "medkit_small" (healing "35") +L 07/15/2025 - 12:59:26: "KK<15><[U:1:11]>" picked up item "ammopack_medium" +L 07/15/2025 - 12:59:26: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:59:26: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:26: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:26: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "16") (weapon "scattergun") +L 07/15/2025 - 12:59:26: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:26: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:26: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "4") (weapon "scattergun") +L 07/15/2025 - 12:59:26: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "24") +L 07/15/2025 - 12:59:27: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:27: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:27: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:27: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "17") (weapon "scattergun") +L 07/15/2025 - 12:59:27: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:59:27: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "13") +L 07/15/2025 - 12:59:27: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:27: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:27: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "8") (weapon "scattergun") +L 07/15/2025 - 12:59:28: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:28: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:28: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "32") (weapon "scattergun") +L 07/15/2025 - 12:59:28: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:28: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 12:59:28: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:28: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:28: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:28: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "10") +L 07/15/2025 - 12:59:28: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:29: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:59:29: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:29: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:29: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "50") (weapon "scattergun") +L 07/15/2025 - 12:59:29: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:30: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "13") +L 07/15/2025 - 12:59:30: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "13") +L 07/15/2025 - 12:59:30: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:31: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "22") +L 07/15/2025 - 12:59:31: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:31: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:59:31: "CC<5><[U:1:3]>" picked up item "medkit_small" (healing "25") +L 07/15/2025 - 12:59:31: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:59:31: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:31: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:59:31: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:31: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:59:32: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "42") +L 07/15/2025 - 12:59:32: "EE<7><[U:1:5]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 12:59:32: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:59:32: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:33: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:33: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:33: "GG<14><[U:1:7]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "95") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:33: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "38") +L 07/15/2025 - 12:59:33: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:33: "BB<10><[U:1:2]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "74") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:33: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:33: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:33: "GG<14><[U:1:7]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "45") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:34: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:34: "KK<15><[U:1:11]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "57") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:34: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:34: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:34: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:34: "BB<10><[U:1:2]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "44") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:34: "CC<5><[U:1:3]>" picked up item "medkit_medium" (healing "63") +L 07/15/2025 - 12:59:34: "CC<5><[U:1:3]>" picked up item "ammopack_medium" +L 07/15/2025 - 12:59:34: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:34: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:34: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "31") (weapon "scattergun") +L 07/15/2025 - 12:59:34: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:35: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:35: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:35: "CC<5><[U:1:3]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "27") (weapon "scattergun") +L 07/15/2025 - 12:59:35: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:35: "BB<10><[U:1:2]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "79") (realdamage "5") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:35: "BB<10><[U:1:2]>" killed "GG<14><[U:1:7]>" with "tf_projectile_rocket" (attacker_position "-994 -1804 513") (victim_position "-644 -1461 632") +L 07/15/2025 - 12:59:35: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:35: "HH<11><[U:1:8]>" picked up item "medkit_small" (healing "40") +L 07/15/2025 - 12:59:36: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:36: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:36: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "21") (weapon "scattergun") +L 07/15/2025 - 12:59:36: "DD<6><[U:1:4]>" picked up item "ammopack_medium" +L 07/15/2025 - 12:59:37: "HH<11><[U:1:8]>" picked up item "medkit_medium" (healing "100") +L 07/15/2025 - 12:59:38: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:38: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:38: "CC<5><[U:1:3]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "7") (weapon "scattergun") +L 07/15/2025 - 12:59:38: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:38: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:38: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "14") (weapon "scattergun") +L 07/15/2025 - 12:59:39: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:39: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:39: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:39: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:39: "EE<7><[U:1:5]>" picked up item "medkit_medium" (healing "75") +L 07/15/2025 - 12:59:39: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:39: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:39: "CC<5><[U:1:3]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "12") (weapon "scattergun") +L 07/15/2025 - 12:59:39: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:39: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:39: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "15") (weapon "scattergun") +L 07/15/2025 - 12:59:39: "FF<8><[U:1:6]>" spawned as "medic" +L 07/15/2025 - 12:59:39: "II<12><[U:1:9]>" spawned as "scout" +L 07/15/2025 - 12:59:39: "LL<16><[U:1:12]>" spawned as "soldier" +L 07/15/2025 - 12:59:39: "FF<8><[U:1:6]>" triggered "empty_uber" +L 07/15/2025 - 12:59:40: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:59:41: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:59:41: "KK<15><[U:1:11]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "38") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:41: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:41: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:41: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:41: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:41: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "7") (weapon "scattergun") +L 07/15/2025 - 12:59:41: "CC<5><[U:1:3]>" picked up item "medkit_medium" (healing "63") +L 07/15/2025 - 12:59:41: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:41: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:41: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "22") (weapon "scattergun") +L 07/15/2025 - 12:59:42: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:42: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:42: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:42: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "5") (weapon "scattergun") +L 07/15/2025 - 12:59:42: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:42: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:42: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:43: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:43: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:43: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:43: "CC<5><[U:1:3]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "18") (weapon "scattergun") +L 07/15/2025 - 12:59:43: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:43: "KK<15><[U:1:11]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "32") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:43: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:43: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:43: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:59:43: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:44: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:44: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:44: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "20") (weapon "scattergun") +L 07/15/2025 - 12:59:44: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:44: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:59:44: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "116") +L 07/15/2025 - 12:59:44: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:59:44: "FF<8><[U:1:6]>" triggered "first_heal_after_spawn" (time "4.6") +L 07/15/2025 - 12:59:44: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:44: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:45: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:45: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:45: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:45: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:45: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "89") (weapon "scattergun") +L 07/15/2025 - 12:59:45: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:46: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:46: "CC<5><[U:1:3]>" picked up item "ammopack_small" +L 07/15/2025 - 12:59:46: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:59:46: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:46: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:59:46: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "101") +L 07/15/2025 - 12:59:46: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:46: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:47: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:47: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:47: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "9") (weapon "scattergun") +L 07/15/2025 - 12:59:47: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:47: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:59:47: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:59:47: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 12:59:47: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "maxgun") +L 07/15/2025 - 12:59:47: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "21") (weapon "maxgun") +L 07/15/2025 - 12:59:47: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:59:47: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "pistol_scout") +L 07/15/2025 - 12:59:47: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "21") (weapon "pistol_scout") +L 07/15/2025 - 12:59:47: "AA<3><[U:1:1]>" killed "CC<5><[U:1:3]>" with "pistol_scout" (attacker_position "1260 -39 544") (victim_position "1166 101 544") +L 07/15/2025 - 12:59:47: "JJ<13><[U:1:10]>" triggered "kill assist" against "CC<5><[U:1:3]>" (assister_position "1501 635 544") (attacker_position "1260 -39 544") (victim_position "1166 101 544") +L 07/15/2025 - 12:59:47: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:59:47: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:47: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:59:47: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "19") +L 07/15/2025 - 12:59:47: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 12:59:48: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:59:48: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:48: "KK<15><[U:1:11]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "39") (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:48: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:59:48: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "5") +L 07/15/2025 - 12:59:49: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:59:50: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "27") +L 07/15/2025 - 12:59:51: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "6") +L 07/15/2025 - 12:59:51: "HH<11><[U:1:8]>" picked up item "ammopack_medium" +L 07/15/2025 - 12:59:51: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "25") +L 07/15/2025 - 12:59:51: "HH<11><[U:1:8]>" picked up item "medkit_medium" (healing "87") +L 07/15/2025 - 12:59:52: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "24") +L 07/15/2025 - 12:59:52: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "19") +L 07/15/2025 - 12:59:52: "JJ<13><[U:1:10]>" picked up item "ammopack_small" +L 07/15/2025 - 12:59:52: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:53: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "18") +L 07/15/2025 - 12:59:53: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "28") +L 07/15/2025 - 12:59:53: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:53: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:54: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "27") +L 07/15/2025 - 12:59:54: "LL<16><[U:1:12]>" picked up item "medkit_small" (healing "35") +L 07/15/2025 - 12:59:54: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:54: "BB<10><[U:1:2]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "24") (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:54: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 12:59:55: "GG<14><[U:1:7]>" spawned as "soldier" +L 07/15/2025 - 12:59:55: "AA<3><[U:1:1]>" picked up item "medkit_small" (healing "25") +L 07/15/2025 - 12:59:56: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "26") +L 07/15/2025 - 12:59:56: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 12:59:56: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:56: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:56: "JJ<13><[U:1:10]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "35") (weapon "scattergun") +L 07/15/2025 - 12:59:57: "AA<3><[U:1:1]>" picked up item "ammopack_medium" +L 07/15/2025 - 12:59:57: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "49") +L 07/15/2025 - 12:59:57: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:57: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:57: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 12:59:57: "JJ<13><[U:1:10]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "62") (weapon "scattergun") +L 07/15/2025 - 12:59:57: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:57: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "25") +L 07/15/2025 - 12:59:57: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 12:59:58: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:58: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:58: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "11") +L 07/15/2025 - 12:59:58: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "31") +L 07/15/2025 - 12:59:58: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "3") +L 07/15/2025 - 12:59:58: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 12:59:58: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 12:59:58: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:59: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:59: "KK<15><[U:1:11]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "100") (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:59: "LL<16><[U:1:12]>" picked up item "medkit_medium" (healing "50") +L 07/15/2025 - 12:59:59: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "25") +L 07/15/2025 - 12:59:59: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 12:59:59: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:00: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:00: "BB<10><[U:1:2]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "47") (realdamage "1") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:00: "BB<10><[U:1:2]>" killed "JJ<13><[U:1:10]>" with "tf_projectile_rocket" (attacker_position "631 879 670") (victim_position "732 1307 694") +L 07/15/2025 - 13:00:00: "KK<15><[U:1:11]>" triggered "kill assist" against "JJ<13><[U:1:10]>" (assister_position "943 753 544") (attacker_position "631 879 670") (victim_position "732 1307 694") +L 07/15/2025 - 13:00:00: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "35") +L 07/15/2025 - 13:00:01: Team "Blue" triggered "pointcaptured" (cp "2") (cpname "Middle Point") (numcappers "2") (player1 "II<12><[U:1:9]>") (position1 "209 -31 480") (player2 "LL<16><[U:1:12]>") (position2 "-153 15 480") +L 07/15/2025 - 13:00:01: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:00:01: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:01: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:00:01: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "84") +L 07/15/2025 - 13:00:01: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:01: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "45") +L 07/15/2025 - 13:00:01: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:02: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:02: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "40") +L 07/15/2025 - 13:00:02: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "16") +L 07/15/2025 - 13:00:02: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:03: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "18") +L 07/15/2025 - 13:00:03: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:03: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "9") +L 07/15/2025 - 13:00:03: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "14") +L 07/15/2025 - 13:00:03: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:00:03: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:04: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:04: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "24") +L 07/15/2025 - 13:00:04: "BB<10><[U:1:2]>" picked up item "ammopack_medium" +L 07/15/2025 - 13:00:05: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:05: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "25") +L 07/15/2025 - 13:00:05: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "15") +L 07/15/2025 - 13:00:05: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "5") +L 07/15/2025 - 13:00:06: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:06: "LL<16><[U:1:12]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:00:06: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "2") +L 07/15/2025 - 13:00:06: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "21") +L 07/15/2025 - 13:00:06: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "12") +L 07/15/2025 - 13:00:07: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:07: "BB<10><[U:1:2]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "84") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:07: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:07: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:00:07: "LL<16><[U:1:12]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "75") (weapon "quake_rl") +L 07/15/2025 - 13:00:07: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:07: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:07: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:07: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "26") +L 07/15/2025 - 13:00:07: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:08: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:08: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:08: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:08: "BB<10><[U:1:2]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "49") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:08: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:08: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:08: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:08: "GG<14><[U:1:7]>" triggered "damage" against "II<12><[U:1:9]>" (damage "55") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:08: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:00:08: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:08: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:00:08: "LL<16><[U:1:12]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "26") (weapon "quake_rl") +L 07/15/2025 - 13:00:08: "LL<16><[U:1:12]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "28") (weapon "quake_rl") +L 07/15/2025 - 13:00:08: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:08: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "31") +L 07/15/2025 - 13:00:08: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:08: "BB<10><[U:1:2]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "69") (realdamage "25") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:08: "BB<10><[U:1:2]>" killed "AA<3><[U:1:1]>" with "tf_projectile_rocket" (attacker_position "-49 731 523") (victim_position "116 977 512") +L 07/15/2025 - 13:00:08: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:09: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:09: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:09: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:09: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "13") +L 07/15/2025 - 13:00:09: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "3") +L 07/15/2025 - 13:00:10: "BB<10><[U:1:2]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:00:10: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:10: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:10: "II<12><[U:1:9]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "48") (weapon "scattergun") +L 07/15/2025 - 13:00:10: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:10: "GG<14><[U:1:7]>" triggered "damage" against "II<12><[U:1:9]>" (damage "51") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:10: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:10: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:10: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:10: "KK<15><[U:1:11]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "32") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:10: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:10: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:10: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "2") +L 07/15/2025 - 13:00:11: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:11: "CC<5><[U:1:3]>" spawned as "scout" +L 07/15/2025 - 13:00:11: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "11") +L 07/15/2025 - 13:00:11: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:11: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:11: "LL<16><[U:1:12]>" picked up item "medkit_medium" (healing "50") +L 07/15/2025 - 13:00:11: "GG<14><[U:1:7]>" picked up item "medkit_medium" (healing "48") +L 07/15/2025 - 13:00:11: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:00:11: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:00:11: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "82") +L 07/15/2025 - 13:00:11: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:12: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:12: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "16") +L 07/15/2025 - 13:00:12: "LL<16><[U:1:12]>" picked up item "ammopack_medium" +L 07/15/2025 - 13:00:12: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:12: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:12: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:12: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:12: "II<12><[U:1:9]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "102") (weapon "scattergun") +L 07/15/2025 - 13:00:12: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:12: "GG<14><[U:1:7]>" triggered "damage" against "II<12><[U:1:9]>" (damage "112") (realdamage "49") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:12: "GG<14><[U:1:7]>" killed "II<12><[U:1:9]>" with "tf_projectile_rocket" (attacker_position "1639 827 480") (victim_position "1655 875 480") +L 07/15/2025 - 13:00:12: "GG<14><[U:1:7]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:00:13: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:13: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "21") +L 07/15/2025 - 13:00:13: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "26") +L 07/15/2025 - 13:00:13: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:13: "DD<6><[U:1:4]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "49") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:14: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "5") +L 07/15/2025 - 13:00:14: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:14: "DD<6><[U:1:4]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "50") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:14: "DD<6><[U:1:4]>" picked up item "ammopack_medium" +L 07/15/2025 - 13:00:14: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "8") +L 07/15/2025 - 13:00:15: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "11") +L 07/15/2025 - 13:00:15: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "4") +L 07/15/2025 - 13:00:15: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:16: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "15") +L 07/15/2025 - 13:00:16: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "10") +L 07/15/2025 - 13:00:16: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:16: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:16: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:00:16: "LL<16><[U:1:12]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "78") (weapon "quake_rl") +L 07/15/2025 - 13:00:16: "Console<0>" say "All players can download the STV demos and logs. Visit serveme.tf after the match and view the matches you recently played in" +L 07/15/2025 - 13:00:17: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "8") +L 07/15/2025 - 13:00:17: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "4") +L 07/15/2025 - 13:00:17: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:17: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:17: "DD<6><[U:1:4]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "32") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:18: "GG<14><[U:1:7]>" picked up item "medkit_medium" (healing "100") +L 07/15/2025 - 13:00:18: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "14") +L 07/15/2025 - 13:00:18: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:18: "DD<6><[U:1:4]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "49") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:18: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "26") +L 07/15/2025 - 13:00:19: "JJ<13><[U:1:10]>" spawned as "scout" +L 07/15/2025 - 13:00:19: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:00:19: "LL<16><[U:1:12]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "109") (weapon "quake_rl") +L 07/15/2025 - 13:00:19: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:19: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:19: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "24") +L 07/15/2025 - 13:00:19: "KK<15><[U:1:11]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "32") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:19: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:19: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:19: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:20: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:20: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:20: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "26") +L 07/15/2025 - 13:00:20: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "8") +L 07/15/2025 - 13:00:21: "KK<15><[U:1:11]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "41") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:21: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:21: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:21: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "3") +L 07/15/2025 - 13:00:21: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "24") +L 07/15/2025 - 13:00:21: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:21: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:21: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:21: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:21: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:21: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:21: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:21: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:22: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:22: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:22: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "20") (weapon "scattergun") +L 07/15/2025 - 13:00:22: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "27") +L 07/15/2025 - 13:00:22: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:23: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:23: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:23: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "39") (weapon "scattergun") +L 07/15/2025 - 13:00:23: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:00:23: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:23: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:00:23: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "84") +L 07/15/2025 - 13:00:23: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "24") +L 07/15/2025 - 13:00:23: "KK<15><[U:1:11]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "45") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:23: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:23: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:23: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "4") (weapon "scattergun") +L 07/15/2025 - 13:00:23: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:23: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:23: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:24: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:24: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:00:24: "LL<16><[U:1:12]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "55") (weapon "quake_rl") +L 07/15/2025 - 13:00:24: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:24: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:24: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "2") +L 07/15/2025 - 13:00:24: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:00:24: "LL<16><[U:1:12]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "54") (weapon "quake_rl") +L 07/15/2025 - 13:00:25: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:25: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:25: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:25: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "11") (weapon "scattergun") +L 07/15/2025 - 13:00:25: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:00:25: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:25: "GG<14><[U:1:7]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "64") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:25: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:25: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:25: "BB<10><[U:1:2]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "82") (realdamage "66") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:25: "BB<10><[U:1:2]>" killed "HH<11><[U:1:8]>" with "tf_projectile_rocket" (attacker_position "1649 2423 831") (victim_position "1809 2651 664") +L 07/15/2025 - 13:00:25: "KK<15><[U:1:11]>" triggered "kill assist" against "HH<11><[U:1:8]>" (assister_position "1376 1790 504") (attacker_position "1649 2423 831") (victim_position "1809 2651 664") +L 07/15/2025 - 13:00:25: "BB<10><[U:1:2]>" triggered "domination" against "HH<11><[U:1:8]>" +L 07/15/2025 - 13:00:25: "KK<15><[U:1:11]>" triggered "domination" against "HH<11><[U:1:8]>" (assist "1") +L 07/15/2025 - 13:00:25: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:25: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:00:25: "HH<11><[U:1:8]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "60") (weapon "quake_rl") +L 07/15/2025 - 13:00:25: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 13:00:25: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:25: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:25: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 13:00:26: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:26: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 13:00:26: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 13:00:26: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "maxgun") +L 07/15/2025 - 13:00:26: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "13") (weapon "maxgun") +L 07/15/2025 - 13:00:26: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:26: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:26: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 13:00:26: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "maxgun") +L 07/15/2025 - 13:00:26: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "13") (weapon "maxgun") +L 07/15/2025 - 13:00:26: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 13:00:26: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "maxgun") +L 07/15/2025 - 13:00:26: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "13") (weapon "maxgun") +L 07/15/2025 - 13:00:26: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:26: "GG<14><[U:1:7]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "68") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:26: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 13:00:26: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "maxgun") +L 07/15/2025 - 13:00:26: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "12") (weapon "maxgun") +L 07/15/2025 - 13:00:26: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:26: "DD<6><[U:1:4]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "100") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:26: "AA<3><[U:1:1]>" spawned as "scout" +L 07/15/2025 - 13:00:27: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 13:00:27: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "maxgun") +L 07/15/2025 - 13:00:27: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "10") (weapon "maxgun") +L 07/15/2025 - 13:00:27: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 13:00:27: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:27: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:27: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:27: "JJ<13><[U:1:10]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "9") (weapon "scattergun") +L 07/15/2025 - 13:00:27: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 13:00:27: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 13:00:27: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "maxgun") +L 07/15/2025 - 13:00:27: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "8") (weapon "maxgun") +L 07/15/2025 - 13:00:27: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:27: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 13:00:27: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:27: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:00:27: "LL<16><[U:1:12]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "26") (weapon "quake_rl") +L 07/15/2025 - 13:00:28: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:28: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:28: "JJ<13><[U:1:10]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "33") (weapon "scattergun") +L 07/15/2025 - 13:00:28: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:28: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:28: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "24") (realdamage "5") (weapon "scattergun") (crit "mini") +L 07/15/2025 - 13:00:28: "CC<5><[U:1:3]>" killed "GG<14><[U:1:7]>" with "scattergun" (attacker_position "715 1612 687") (victim_position "513 2376 560") +L 07/15/2025 - 13:00:28: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:28: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:28: "JJ<13><[U:1:10]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "16") (weapon "scattergun") +L 07/15/2025 - 13:00:29: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:29: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:29: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:29: "DD<6><[U:1:4]>" picked up item "ammopack_medium" +L 07/15/2025 - 13:00:29: "LL<16><[U:1:12]>" picked up item "ammopack_small" +L 07/15/2025 - 13:00:29: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:00:29: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "pistol_scout") +L 07/15/2025 - 13:00:29: "JJ<13><[U:1:10]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "11") (weapon "pistol_scout") +L 07/15/2025 - 13:00:29: "DD<6><[U:1:4]>" picked up item "medkit_medium" (healing "88") +L 07/15/2025 - 13:00:30: "EE<7><[U:1:5]>" picked up item "ammopack_medium" +L 07/15/2025 - 13:00:30: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:00:30: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:00:30: "EE<7><[U:1:5]>" picked up item "medkit_medium" (healing "75") +L 07/15/2025 - 13:00:30: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:00:30: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:00:30: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:30: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:00:30: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:00:30: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:30: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:00:30: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "88") +L 07/15/2025 - 13:00:30: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:00:30: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:00:30: "LL<16><[U:1:12]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "68") (weapon "quake_rl") +L 07/15/2025 - 13:00:31: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:31: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:31: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "56") (weapon "scattergun") +L 07/15/2025 - 13:00:31: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:31: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:00:31: "LL<16><[U:1:12]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "64") (realdamage "57") (weapon "quake_rl") +L 07/15/2025 - 13:00:31: "LL<16><[U:1:12]>" killed "JJ<13><[U:1:10]>" with "quake_rl" (attacker_position "1782 2008 492") (victim_position "2109 2052 550") +L 07/15/2025 - 13:00:31: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:31: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "20") +L 07/15/2025 - 13:00:32: "EE<7><[U:1:5]>" triggered "chargeready" +L 07/15/2025 - 13:00:33: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "26") +L 07/15/2025 - 13:00:33: "KK<15><[U:1:11]>" picked up item "ammopack_medium" +L 07/15/2025 - 13:00:33: "KK<15><[U:1:11]>" picked up item "medkit_small" (healing "35") +L 07/15/2025 - 13:00:34: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "30") +L 07/15/2025 - 13:00:34: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "14") +L 07/15/2025 - 13:00:34: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:00:34: "II<12><[U:1:9]>" spawned as "scout" +L 07/15/2025 - 13:00:35: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "30") +L 07/15/2025 - 13:00:36: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:00:36: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:00:36: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "80") +L 07/15/2025 - 13:00:37: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:37: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:37: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:00:37: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:00:37: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:00:37: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:38: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "27") +L 07/15/2025 - 13:00:38: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:00:38: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "5") +L 07/15/2025 - 13:00:38: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:00:38: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "86") +L 07/15/2025 - 13:00:38: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:39: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:39: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "17") +L 07/15/2025 - 13:00:39: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "21") +L 07/15/2025 - 13:00:39: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:39: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "22") +L 07/15/2025 - 13:00:40: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "30") +L 07/15/2025 - 13:00:40: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "9") +L 07/15/2025 - 13:00:40: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:41: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:41: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:41: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:00:41: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "17") +L 07/15/2025 - 13:00:41: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "37") +L 07/15/2025 - 13:00:41: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "6") +L 07/15/2025 - 13:00:41: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:41: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:41: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:00:42: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:42: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:42: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:42: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:00:42: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:42: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "11") +L 07/15/2025 - 13:00:42: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "8") +L 07/15/2025 - 13:00:42: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:42: "HH<11><[U:1:8]>" spawned as "soldier" +L 07/15/2025 - 13:00:43: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:43: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "12") +L 07/15/2025 - 13:00:43: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 13:00:43: "AA<3><[U:1:1]>" picked up item "ammopack_medium" +L 07/15/2025 - 13:00:44: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:44: "EE<7><[U:1:5]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:00:44: Team "Blue" triggered "pointcaptured" (cp "3") (cpname "Red Mini-Spire") (numcappers "1") (player1 "CC<5><[U:1:3]>") (position1 "1688 2191 775") +L 07/15/2025 - 13:00:44: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "7") +L 07/15/2025 - 13:00:44: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:44: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:44: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:44: "AA<3><[U:1:1]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "25") (weapon "scattergun") +L 07/15/2025 - 13:00:44: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:00:45: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:00:45: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "84") +L 07/15/2025 - 13:00:45: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:00:45: "LL<16><[U:1:12]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "54") (weapon "quake_rl") +L 07/15/2025 - 13:00:45: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:45: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:45: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "3") +L 07/15/2025 - 13:00:46: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:46: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "26") +L 07/15/2025 - 13:00:47: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "25") +L 07/15/2025 - 13:00:47: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:47: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:47: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 13:00:47: "AA<3><[U:1:1]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:00:47: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:00:48: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:48: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:48: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:48: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "11") (weapon "scattergun") +L 07/15/2025 - 13:00:48: "LL<16><[U:1:12]>" picked up item "medkit_small" (healing "37") +L 07/15/2025 - 13:00:48: "EE<7><[U:1:5]>" triggered "chargedeployed" (medigun "medigun") +L 07/15/2025 - 13:00:48: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "19") +L 07/15/2025 - 13:00:48: "LL<16><[U:1:12]>" picked up item "ammopack_small" +L 07/15/2025 - 13:00:49: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:49: "BB<10><[U:1:2]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "34") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:49: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "10") +L 07/15/2025 - 13:00:49: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "26") +L 07/15/2025 - 13:00:49: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:00:49: "LL<16><[U:1:12]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "111") (weapon "quake_rl") +L 07/15/2025 - 13:00:49: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:50: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:00:50: "HH<11><[U:1:8]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "52") (weapon "quake_rl") +L 07/15/2025 - 13:00:50: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:50: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:00:50: "GG<14><[U:1:7]>" spawned as "soldier" +L 07/15/2025 - 13:00:50: "JJ<13><[U:1:10]>" spawned as "scout" +L 07/15/2025 - 13:00:50: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:50: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "25") +L 07/15/2025 - 13:00:50: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:50: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:50: "CC<5><[U:1:3]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "42") (weapon "scattergun") +L 07/15/2025 - 13:00:50: "AA<3><[U:1:1]>" picked up item "medkit_medium" (healing "34") +L 07/15/2025 - 13:00:50: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:00:51: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:51: "DD<6><[U:1:4]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "0") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:51: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:51: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:51: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:51: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:51: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:51: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:51: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:51: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "16") +L 07/15/2025 - 13:00:51: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "32") +L 07/15/2025 - 13:00:52: "DD<6><[U:1:4]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "0") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:52: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:52: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:52: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:52: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:52: "CC<5><[U:1:3]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "50") (weapon "scattergun") +L 07/15/2025 - 13:00:52: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:52: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:52: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:52: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:52: "CC<5><[U:1:3]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "17") (weapon "scattergun") +L 07/15/2025 - 13:00:52: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:52: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "2") +L 07/15/2025 - 13:00:52: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "3") +L 07/15/2025 - 13:00:53: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:53: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:53: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:53: "BB<10><[U:1:2]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "67") (realdamage "57") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:53: "BB<10><[U:1:2]>" killed "HH<11><[U:1:8]>" with "tf_projectile_rocket" (attacker_position "3245 2396 576") (victim_position "3537 1973 598") +L 07/15/2025 - 13:00:53: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:53: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:53: "CC<5><[U:1:3]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "102") (weapon "scattergun") +L 07/15/2025 - 13:00:53: "KK<15><[U:1:11]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "59") (realdamage "48") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:53: "KK<15><[U:1:11]>" triggered "medic_death" against "FF<8><[U:1:6]>" (healing "1160") (ubercharge "0") +L 07/15/2025 - 13:00:53: "FF<8><[U:1:6]>" triggered "medic_death_ex" (uberpct "85") +L 07/15/2025 - 13:00:53: "KK<15><[U:1:11]>" killed "FF<8><[U:1:6]>" with "tf_projectile_pipe_remote" (attacker_position "2870 1661 576") (victim_position "3567 1567 522") +L 07/15/2025 - 13:00:53: "CC<5><[U:1:3]>" triggered "kill assist" against "FF<8><[U:1:6]>" (assister_position "3582 1791 480") (attacker_position "2870 1661 576") (victim_position "3567 1567 522") +L 07/15/2025 - 13:00:53: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:53: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:53: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:54: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:54: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:54: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:54: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "54") (weapon "scattergun") +L 07/15/2025 - 13:00:54: "EE<7><[U:1:5]>" triggered "empty_uber" +L 07/15/2025 - 13:00:54: "EE<7><[U:1:5]>" triggered "chargeended" (duration "6.1") +L 07/15/2025 - 13:00:55: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "13") +L 07/15/2025 - 13:00:55: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:55: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:55: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "21") (weapon "scattergun") +L 07/15/2025 - 13:00:55: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:55: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:55: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "18") (weapon "scattergun") +L 07/15/2025 - 13:00:55: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:55: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:56: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:00:56: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:56: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:56: "GG<14><[U:1:7]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "75") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:56: "GG<14><[U:1:7]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "54") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:56: "GG<14><[U:1:7]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "67") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:56: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:56: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:56: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "9") (weapon "scattergun") +L 07/15/2025 - 13:00:56: "LL<16><[U:1:12]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:00:56: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:56: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:56: "BB<10><[U:1:2]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "71") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:56: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:56: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:00:56: "LL<16><[U:1:12]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "77") (weapon "quake_rl") +L 07/15/2025 - 13:00:56: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:56: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:56: "GG<14><[U:1:7]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "95") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:56: "GG<14><[U:1:7]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "66") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:56: "GG<14><[U:1:7]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "80") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:57: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:57: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:57: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:57: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "35") (weapon "scattergun") +L 07/15/2025 - 13:00:57: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:00:57: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "25") +L 07/15/2025 - 13:00:57: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:57: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:57: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "12") (weapon "scattergun") +L 07/15/2025 - 13:00:57: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:57: "BB<10><[U:1:2]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "59") (realdamage "22") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:57: "BB<10><[U:1:2]>" killed "GG<14><[U:1:7]>" with "tf_projectile_rocket" (attacker_position "3574 2125 733") (victim_position "3495 2200 848") +L 07/15/2025 - 13:00:57: "EE<7><[U:1:5]>" triggered "kill assist" against "GG<14><[U:1:7]>" (assister_position "3667 2093 660") (attacker_position "3574 2125 733") (victim_position "3495 2200 848") +L 07/15/2025 - 13:00:57: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:57: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:57: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:57: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "43") (weapon "scattergun") +L 07/15/2025 - 13:00:58: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:00:58: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "24") +L 07/15/2025 - 13:00:58: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:00:58: "BB<10><[U:1:2]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:00:58: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:58: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:58: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "65") (weapon "scattergun") +L 07/15/2025 - 13:00:58: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:00:58: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:58: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:58: "BB<10><[U:1:2]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "47") (realdamage "5") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:00:58: "BB<10><[U:1:2]>" killed "AA<3><[U:1:1]>" with "tf_projectile_rocket" (attacker_position "3638 2214 579") (victim_position "3233 2407 576") +L 07/15/2025 - 13:00:58: "EE<7><[U:1:5]>" triggered "kill assist" against "AA<3><[U:1:1]>" (assister_position "3850 1967 672") (attacker_position "3638 2214 579") (victim_position "3233 2407 576") +L 07/15/2025 - 13:00:58: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:00:58: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:58: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:58: "JJ<13><[U:1:10]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 13:00:59: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "25") +L 07/15/2025 - 13:00:59: "CC<5><[U:1:3]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:00:59: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:00:59: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:00:59: "JJ<13><[U:1:10]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "4") (weapon "scattergun") +L 07/15/2025 - 13:00:59: "JJ<13><[U:1:10]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 13:01:00: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "24") +L 07/15/2025 - 13:01:00: "GG<14><[U:1:7]>" say "nice shot!" +L 07/15/2025 - 13:01:01: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:01: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:01:01: "CC<5><[U:1:3]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:01:01: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:01:01: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:02: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:01:02: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:01:02: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "114") +L 07/15/2025 - 13:01:02: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:02: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:02: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:01:02: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "25") (weapon "scattergun") +L 07/15/2025 - 13:01:02: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:03: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:03: "DD<6><[U:1:4]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "40") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:03: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:03: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:03: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:03: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:03: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:03: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:03: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:03: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:03: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:03: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:01:03: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "17") (weapon "scattergun") +L 07/15/2025 - 13:01:03: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:01:03: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:03: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:01:03: "II<12><[U:1:9]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:01:04: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:01:04: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:04: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:01:04: "CC<5><[U:1:3]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "19") (weapon "scattergun") +L 07/15/2025 - 13:01:04: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:01:04: "KK<15><[U:1:11]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "32") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:04: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:04: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:04: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:01:05: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:05: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:01:05: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:05: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:01:05: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:01:05: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:01:05: "BB<10><[U:1:2]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "26") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:01:05: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 13:01:05: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:01:05: "LL<16><[U:1:12]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "68") (weapon "quake_rl") +L 07/15/2025 - 13:01:06: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:06: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:01:06: "II<12><[U:1:9]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "13") (weapon "scattergun") +L 07/15/2025 - 13:01:06: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:01:06: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:01:06: "LL<16><[U:1:12]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "69") (realdamage "37") (weapon "quake_rl") +L 07/15/2025 - 13:01:06: "LL<16><[U:1:12]>" killed "DD<6><[U:1:4]>" with "quake_rl" (attacker_position "3771 596 660") (victim_position "3720 604 597") +L 07/15/2025 - 13:01:06: "LL<16><[U:1:12]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:01:06: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:01:06: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:06: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:06: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:06: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:06: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "24") +L 07/15/2025 - 13:01:06: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:06: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:07: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:07: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:01:07: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:07: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:01:07: "JJ<13><[U:1:10]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "16") (weapon "scattergun") +L 07/15/2025 - 13:01:07: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "28") +L 07/15/2025 - 13:01:08: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "32") +L 07/15/2025 - 13:01:08: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:08: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:01:09: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:01:09: Team "Blue" triggered "pointcaptured" (cp "4") (cpname "Red Final Point") (numcappers "2") (player1 "CC<5><[U:1:3]>") (position1 "3619 1358 583") (player2 "KK<15><[U:1:11]>") (position2 "3386 1302 576") +L 07/15/2025 - 13:01:09: World triggered "Round_Win" (winner "Blue") +L 07/15/2025 - 13:01:09: World triggered "Round_Length" (seconds "196.88") +L 07/15/2025 - 13:01:09: Team "Red" current score "0" with "6" players +L 07/15/2025 - 13:01:09: Team "Blue" current score "3" with "6" players +L 07/15/2025 - 13:01:10: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:01:10: "CC<5><[U:1:3]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "54") (realdamage "22") (weapon "scattergun") (crit "crit") +L 07/15/2025 - 13:01:10: "CC<5><[U:1:3]>" killed "JJ<13><[U:1:10]>" with "scattergun" (attacker_position "3619 1358 583") (victim_position "3646 1096 611") +L 07/15/2025 - 13:01:10: "LL<16><[U:1:12]>" picked up item "medkit_medium" (healing "100") +L 07/15/2025 - 13:01:10: "LL<16><[U:1:12]>" picked up item "ammopack_medium" +L 07/15/2025 - 13:01:10: "II<12><[U:1:9]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:01:17: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "39") +L 07/15/2025 - 13:01:18: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "29") +L 07/15/2025 - 13:01:19: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "56") +L 07/15/2025 - 13:01:21: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "6") +L 07/15/2025 - 13:01:22: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "3") +L 07/15/2025 - 13:01:23: "KK<15><[U:1:11]>" picked up item "ammopack_small" +L 07/15/2025 - 13:01:23: "LL<16><[U:1:12]>" picked up item "medkit_small" (healing "40") +L 07/15/2025 - 13:01:26: World triggered "Round_Start" +L 07/15/2025 - 13:01:26: "AA<3><[U:1:1]>" spawned as "scout" +L 07/15/2025 - 13:01:26: "BB<10><[U:1:2]>" spawned as "soldier" +L 07/15/2025 - 13:01:26: "CC<5><[U:1:3]>" spawned as "scout" +L 07/15/2025 - 13:01:26: "DD<6><[U:1:4]>" spawned as "demoman" +L 07/15/2025 - 13:01:26: "EE<7><[U:1:5]>" spawned as "medic" +L 07/15/2025 - 13:01:26: "FF<8><[U:1:6]>" spawned as "medic" +L 07/15/2025 - 13:01:26: "GG<14><[U:1:7]>" spawned as "soldier" +L 07/15/2025 - 13:01:26: "HH<11><[U:1:8]>" spawned as "soldier" +L 07/15/2025 - 13:01:26: "II<12><[U:1:9]>" spawned as "scout" +L 07/15/2025 - 13:01:26: "JJ<13><[U:1:10]>" spawned as "scout" +L 07/15/2025 - 13:01:26: "KK<15><[U:1:11]>" spawned as "demoman" +L 07/15/2025 - 13:01:26: "LL<16><[U:1:12]>" spawned as "soldier" +L 07/15/2025 - 13:01:26: "FF<8><[U:1:6]>" triggered "empty_uber" +L 07/15/2025 - 13:01:26: "EE<7><[U:1:5]>" triggered "empty_uber" +L 07/15/2025 - 13:01:28: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "68") +L 07/15/2025 - 13:01:28: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "53") +L 07/15/2025 - 13:01:29: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "33") +L 07/15/2025 - 13:01:29: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "45") +L 07/15/2025 - 13:01:30: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "24") +L 07/15/2025 - 13:01:30: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "24") +L 07/15/2025 - 13:01:31: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "20") +L 07/15/2025 - 13:01:31: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "19") +L 07/15/2025 - 13:01:32: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "60") +L 07/15/2025 - 13:01:32: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "65") +L 07/15/2025 - 13:01:33: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "39") +L 07/15/2025 - 13:01:34: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "16") +L 07/15/2025 - 13:01:35: "KK<15><[U:1:11]>" picked up item "ammopack_small" +L 07/15/2025 - 13:01:36: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "60") +L 07/15/2025 - 13:01:36: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "1") +L 07/15/2025 - 13:01:36: "GG<14><[U:1:7]>" picked up item "ammopack_small" +L 07/15/2025 - 13:01:36: "GG<14><[U:1:7]>" picked up item "medkit_small" (healing "40") +L 07/15/2025 - 13:01:36: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "26") +L 07/15/2025 - 13:01:37: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:38: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "8") +L 07/15/2025 - 13:01:39: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:01:40: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "17") +L 07/15/2025 - 13:01:41: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "22") +L 07/15/2025 - 13:01:41: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:01:42: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:01:42: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:42: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:01:42: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "131") +L 07/15/2025 - 13:01:42: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:01:42: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:01:42: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "101") +L 07/15/2025 - 13:01:43: "KK<15><[U:1:11]>" picked up item "medkit_medium" (healing "75") +L 07/15/2025 - 13:01:44: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:44: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "15") +L 07/15/2025 - 13:01:44: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:01:45: "DD<6><[U:1:4]>" picked up item "ammopack_medium" +L 07/15/2025 - 13:01:45: "LL<16><[U:1:12]>" picked up item "medkit_small" (healing "30") +L 07/15/2025 - 13:01:45: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "62") +L 07/15/2025 - 13:01:45: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:45: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:01:45: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 13:01:45: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:01:46: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:46: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:01:46: "JJ<13><[U:1:10]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "17") (weapon "scattergun") +L 07/15/2025 - 13:01:46: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:01:46: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "41") +L 07/15/2025 - 13:01:46: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:01:46: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:01:46: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "75") +L 07/15/2025 - 13:01:47: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:47: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:01:47: "KK<15><[U:1:11]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "50") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:47: "KK<15><[U:1:11]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "32") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:47: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:47: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:47: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "13") +L 07/15/2025 - 13:01:47: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:47: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:47: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:47: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:01:48: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:01:48: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:01:48: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:48: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:01:48: "JJ<13><[U:1:10]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "8") (weapon "scattergun") +L 07/15/2025 - 13:01:48: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "17") +L 07/15/2025 - 13:01:48: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:01:49: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:01:49: "KK<15><[U:1:11]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "100") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:01:49: "KK<15><[U:1:11]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "61") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:01:49: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:01:49: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:01:49: "KK<15><[U:1:11]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "39") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:01:49: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:01:49: "LL<16><[U:1:12]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "48") (realdamage "25") (weapon "quake_rl") +L 07/15/2025 - 13:01:49: "LL<16><[U:1:12]>" killed "AA<3><[U:1:1]>" with "quake_rl" (attacker_position "404 -239 743") (victim_position "645 1080 577") +L 07/15/2025 - 13:01:49: "KK<15><[U:1:11]>" triggered "kill assist" against "AA<3><[U:1:1]>" (assister_position "-153 -165 525") (attacker_position "404 -239 743") (victim_position "645 1080 577") +L 07/15/2025 - 13:01:49: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:49: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:01:49: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "7") (weapon "scattergun") +L 07/15/2025 - 13:01:49: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:01:50: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:01:50: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:50: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:01:50: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "4") (weapon "scattergun") +L 07/15/2025 - 13:01:50: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:01:50: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:01:50: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:01:50: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "84") +L 07/15/2025 - 13:01:50: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:01:50: "BB<10><[U:1:2]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "57") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:01:50: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:50: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:01:50: "KK<15><[U:1:11]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "30") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:01:50: "DD<6><[U:1:4]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "40") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:50: "DD<6><[U:1:4]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "53") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:50: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:50: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:50: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:50: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:50: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:50: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:50: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:50: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:01:50: "LL<16><[U:1:12]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "24") (weapon "quake_rl") +L 07/15/2025 - 13:01:50: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:01:51: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:01:51: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "48") +L 07/15/2025 - 13:01:51: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 13:01:51: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:01:51: "LL<16><[U:1:12]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "40") (weapon "quake_rl") +L 07/15/2025 - 13:01:51: "LL<16><[U:1:12]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "34") (weapon "quake_rl") +L 07/15/2025 - 13:01:51: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:01:51: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:01:52: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:01:52: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:01:52: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "28") +L 07/15/2025 - 13:01:52: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "9") +L 07/15/2025 - 13:01:52: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:01:52: "HH<11><[U:1:8]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "48") (weapon "quake_rl") +L 07/15/2025 - 13:01:53: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:01:53: "GG<14><[U:1:7]>" picked up item "ammopack_medium" +L 07/15/2025 - 13:01:53: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "24") +L 07/15/2025 - 13:01:53: "GG<14><[U:1:7]>" picked up item "medkit_medium" (healing "85") +L 07/15/2025 - 13:01:54: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "24") +L 07/15/2025 - 13:01:54: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:01:54: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "17") +L 07/15/2025 - 13:01:55: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "26") +L 07/15/2025 - 13:01:55: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:01:55: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:01:55: "BB<10><[U:1:2]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "79") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:01:55: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:01:55: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:01:55: "HH<11><[U:1:8]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "62") (weapon "quake_rl") +L 07/15/2025 - 13:01:55: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "14") +L 07/15/2025 - 13:01:55: "FF<8><[U:1:6]>" picked up item "ammopack_medium" +L 07/15/2025 - 13:01:55: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:01:56: "FF<8><[U:1:6]>" picked up item "medkit_small" (healing "30") +L 07/15/2025 - 13:01:56: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "25") +L 07/15/2025 - 13:01:56: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:01:56: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:01:56: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:01:56: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:56: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:01:56: "II<12><[U:1:9]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 13:01:56: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:01:56: "BB<10><[U:1:2]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "81") (weapon "tf_projectile_rocket") (airshot "1") (height "300") +L 07/15/2025 - 13:01:56: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:56: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:01:56: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:01:56: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:01:56: "HH<11><[U:1:8]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "39") (weapon "quake_rl") +L 07/15/2025 - 13:01:56: "HH<11><[U:1:8]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "41") (weapon "quake_rl") +L 07/15/2025 - 13:01:57: "CC<5><[U:1:3]>" killed "HH<11><[U:1:8]>" with "world" (attacker_position "104 511 761") (victim_position "749 1291 637") +L 07/15/2025 - 13:01:57: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:01:57: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "24") +L 07/15/2025 - 13:01:57: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:01:57: "KK<15><[U:1:11]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "100") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:01:57: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:57: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:57: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:57: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:57: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:01:57: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "29") (weapon "scattergun") +L 07/15/2025 - 13:01:58: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:01:58: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "24") +L 07/15/2025 - 13:01:58: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:58: "KK<15><[U:1:11]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:01:58: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:58: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:01:58: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "20") (weapon "scattergun") +L 07/15/2025 - 13:01:58: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:01:58: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "9") +L 07/15/2025 - 13:01:58: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "25") +L 07/15/2025 - 13:01:58: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:59: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:01:59: "GG<14><[U:1:7]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "71") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:01:59: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "11") +L 07/15/2025 - 13:01:59: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:59: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:01:59: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:01:59: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:01:59: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "24") +L 07/15/2025 - 13:01:59: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:01:59: "GG<14><[U:1:7]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "53") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:01:59: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:00: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:00: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:00: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:02:00: "II<12><[U:1:9]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "20") (weapon "scattergun") +L 07/15/2025 - 13:02:00: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "24") +L 07/15/2025 - 13:02:00: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:02:00: "GG<14><[U:1:7]>" triggered "captureblocked" (cp "2") (cpname "Middle Point") (position "76 151 523") +L 07/15/2025 - 13:02:00: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:00: "KK<15><[U:1:11]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "100") (realdamage "90") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:00: "KK<15><[U:1:11]>" killed "GG<14><[U:1:7]>" with "tf_projectile_pipe" (attacker_position "301 495 477") (victim_position "73 148 522") +L 07/15/2025 - 13:02:00: "II<12><[U:1:9]>" triggered "kill assist" against "GG<14><[U:1:7]>" (assister_position "283 102 480") (attacker_position "301 495 477") (victim_position "73 148 522") +L 07/15/2025 - 13:02:00: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:02:00: "GG<14><[U:1:7]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "55") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:02:00: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:00: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "25") +L 07/15/2025 - 13:02:00: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:02:00: "CC<5><[U:1:3]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:02:01: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "16") +L 07/15/2025 - 13:02:01: "HH<11><[U:1:8]>" say "ns" +L 07/15/2025 - 13:02:01: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "24") +L 07/15/2025 - 13:02:01: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "26") +L 07/15/2025 - 13:02:03: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "25") +L 07/15/2025 - 13:02:03: "BB<10><[U:1:2]>" say "ty" +L 07/15/2025 - 13:02:03: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:02:03: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:02:03: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "101") +L 07/15/2025 - 13:02:03: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "10") +L 07/15/2025 - 13:02:04: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "21") +L 07/15/2025 - 13:02:05: Team "Blue" triggered "pointcaptured" (cp "2") (cpname "Middle Point") (numcappers "3") (player1 "BB<10><[U:1:2]>") (position1 "73 -61 487") (player2 "CC<5><[U:1:3]>") (position2 "-114 31 484") (player3 "II<12><[U:1:9]>") (position3 "185 -103 480") +L 07/15/2025 - 13:02:05: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "26") +L 07/15/2025 - 13:02:05: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:02:05: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:02:06: "EE<7><[U:1:5]>" picked up item "medkit_medium" (healing "75") +L 07/15/2025 - 13:02:06: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "24") +L 07/15/2025 - 13:02:07: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "43") +L 07/15/2025 - 13:02:07: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "14") +L 07/15/2025 - 13:02:08: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "17") +L 07/15/2025 - 13:02:08: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "28") +L 07/15/2025 - 13:02:09: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:09: "II<12><[U:1:9]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:02:09: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "10") +L 07/15/2025 - 13:02:09: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:02:09: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:10: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:02:10: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:02:10: "BB<10><[U:1:2]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "74") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:02:10: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 13:02:10: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:10: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:10: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:02:10: "JJ<13><[U:1:10]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "93") (weapon "scattergun") +L 07/15/2025 - 13:02:10: "AA<3><[U:1:1]>" spawned as "scout" +L 07/15/2025 - 13:02:10: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:11: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:02:11: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "39") +L 07/15/2025 - 13:02:11: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:11: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:02:11: "JJ<13><[U:1:10]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "61") (realdamage "20") (weapon "scattergun") +L 07/15/2025 - 13:02:11: "JJ<13><[U:1:10]>" killed "BB<10><[U:1:2]>" with "scattergun" (attacker_position "2053 2424 576") (victim_position "2072 2529 642") +L 07/15/2025 - 13:02:11: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "34") +L 07/15/2025 - 13:02:11: "DD<6><[U:1:4]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:02:12: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "51") +L 07/15/2025 - 13:02:13: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:13: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:02:13: "II<12><[U:1:9]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:02:13: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:13: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:02:13: "JJ<13><[U:1:10]>" triggered "damage" against "II<12><[U:1:9]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:02:14: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:14: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:14: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:02:14: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "12") +L 07/15/2025 - 13:02:15: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:15: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:15: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:15: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "16") +L 07/15/2025 - 13:02:16: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:16: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:16: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "11") +L 07/15/2025 - 13:02:16: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "1") +L 07/15/2025 - 13:02:17: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:17: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:17: "DD<6><[U:1:4]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "100") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:17: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:02:18: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "26") +L 07/15/2025 - 13:02:18: "GG<14><[U:1:7]>" spawned as "soldier" +L 07/15/2025 - 13:02:18: "HH<11><[U:1:8]>" spawned as "soldier" +L 07/15/2025 - 13:02:18: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:18: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:19: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "60") +L 07/15/2025 - 13:02:19: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "2") +L 07/15/2025 - 13:02:19: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "3") +L 07/15/2025 - 13:02:19: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:20: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "25") +L 07/15/2025 - 13:02:20: "KK<15><[U:1:11]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "51") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:20: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:20: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:20: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:20: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:02:20: "II<12><[U:1:9]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "67") (weapon "scattergun") +L 07/15/2025 - 13:02:21: "KK<15><[U:1:11]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "53") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:21: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:21: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:21: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "24") +L 07/15/2025 - 13:02:21: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:21: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:02:21: "II<12><[U:1:9]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "39") (realdamage "18") (weapon "scattergun") +L 07/15/2025 - 13:02:21: "II<12><[U:1:9]>" killed "DD<6><[U:1:4]>" with "scattergun" (attacker_position "2626 2444 576") (victim_position "2913 2408 576") +L 07/15/2025 - 13:02:21: "KK<15><[U:1:11]>" triggered "kill assist" against "DD<6><[U:1:4]>" (assister_position "2341 2431 576") (attacker_position "2626 2444 576") (victim_position "2913 2408 576") +L 07/15/2025 - 13:02:21: "II<12><[U:1:9]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:02:21: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:21: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:21: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:22: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:22: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "2") +L 07/15/2025 - 13:02:22: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "16") +L 07/15/2025 - 13:02:22: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 13:02:22: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "7") +L 07/15/2025 - 13:02:23: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "2") +L 07/15/2025 - 13:02:23: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "9") +L 07/15/2025 - 13:02:23: "LL<16><[U:1:12]>" picked up item "ammopack_small" +L 07/15/2025 - 13:02:24: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "16") +L 07/15/2025 - 13:02:24: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "3") +L 07/15/2025 - 13:02:24: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:02:25: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:02:26: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "17") +L 07/15/2025 - 13:02:27: "KK<15><[U:1:11]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "44") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:27: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:27: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:27: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:02:27: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:02:27: "GG<14><[U:1:7]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "106") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:02:27: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:02:27: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "9") +L 07/15/2025 - 13:02:27: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "13") +L 07/15/2025 - 13:02:27: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:02:27: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:02:27: "LL<16><[U:1:12]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "83") (weapon "quake_rl") +L 07/15/2025 - 13:02:27: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:27: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:28: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:02:28: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:02:28: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:02:28: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:02:28: "GG<14><[U:1:7]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "57") (realdamage "40") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:02:28: "GG<14><[U:1:7]>" killed "LL<16><[U:1:12]>" with "tf_projectile_rocket" (attacker_position "2508 1225 707") (victim_position "2279 1476 704") +L 07/15/2025 - 13:02:28: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "28") +L 07/15/2025 - 13:02:28: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "7") +L 07/15/2025 - 13:02:28: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:28: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:02:28: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 13:02:29: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:29: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:02:29: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "23") (weapon "scattergun") +L 07/15/2025 - 13:02:29: "AA<3><[U:1:1]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "4") (weapon "scattergun") +L 07/15/2025 - 13:02:29: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 13:02:29: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:02:29: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:02:29: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "75") +L 07/15/2025 - 13:02:29: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:29: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:29: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:02:29: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "14") (weapon "scattergun") +L 07/15/2025 - 13:02:30: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:30: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "14") +L 07/15/2025 - 13:02:30: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:30: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:02:30: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "14") (weapon "scattergun") +L 07/15/2025 - 13:02:30: "GG<14><[U:1:7]>" picked up item "ammopack_medium" +L 07/15/2025 - 13:02:30: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "1") +L 07/15/2025 - 13:02:30: "GG<14><[U:1:7]>" picked up item "medkit_medium" (healing "100") +L 07/15/2025 - 13:02:30: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:30: "FF<8><[U:1:6]>" triggered "chargeready" +L 07/15/2025 - 13:02:30: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "14") +L 07/15/2025 - 13:02:31: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:31: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:02:31: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "13") (weapon "scattergun") +L 07/15/2025 - 13:02:31: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "11") +L 07/15/2025 - 13:02:31: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "4") +L 07/15/2025 - 13:02:31: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:32: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:02:32: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:32: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:02:32: "HH<11><[U:1:8]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "76") (weapon "quake_rl") +L 07/15/2025 - 13:02:32: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:32: "KK<15><[U:1:11]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "30") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:32: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "7") +L 07/15/2025 - 13:02:32: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "19") +L 07/15/2025 - 13:02:32: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:02:33: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:33: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "24") +L 07/15/2025 - 13:02:33: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:02:33: "HH<11><[U:1:8]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "39") (weapon "quake_rl") +L 07/15/2025 - 13:02:33: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:02:33: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "39") +L 07/15/2025 - 13:02:34: "BB<10><[U:1:2]>" spawned as "soldier" +L 07/15/2025 - 13:02:34: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 13:02:34: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "7") +L 07/15/2025 - 13:02:35: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:35: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:02:35: "GG<14><[U:1:7]>" triggered "captureblocked" (cp "3") (cpname "Red Mini-Spire") (position "1793 2037 809") +L 07/15/2025 - 13:02:35: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:35: "KK<15><[U:1:11]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "30") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:35: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "24") +L 07/15/2025 - 13:02:35: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:02:35: "GG<14><[U:1:7]>" triggered "damage" against "II<12><[U:1:9]>" (damage "64") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:02:35: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:36: "EE<7><[U:1:5]>" triggered "chargeready" +L 07/15/2025 - 13:02:36: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:02:36: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:36: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:02:36: "II<12><[U:1:9]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "60") (weapon "scattergun") +L 07/15/2025 - 13:02:37: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:02:37: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:37: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "26") +L 07/15/2025 - 13:02:37: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:38: Team "Blue" triggered "pointcaptured" (cp "3") (cpname "Red Mini-Spire") (numcappers "1") (player1 "II<12><[U:1:9]>") (position1 "1664 2143 810") +L 07/15/2025 - 13:02:38: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:02:38: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "18") +L 07/15/2025 - 13:02:39: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "15") +L 07/15/2025 - 13:02:39: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:39: "AA<3><[U:1:1]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:02:39: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:39: "KK<15><[U:1:11]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "62") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:39: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:02:39: "GG<14><[U:1:7]>" triggered "damage" against "II<12><[U:1:9]>" (damage "98") (realdamage "92") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:02:39: "GG<14><[U:1:7]>" killed "II<12><[U:1:9]>" with "tf_projectile_rocket" (attacker_position "1521 2221 772") (victim_position "1653 2262 778") +L 07/15/2025 - 13:02:39: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:39: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:39: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:02:40: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "18") +L 07/15/2025 - 13:02:40: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:40: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:40: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:02:40: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:02:40: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:40: "BB<10><[U:1:2]>" changed role to "sniper" +L 07/15/2025 - 13:02:40: "BB<10><[U:1:2]>" spawned as "sniper" +L 07/15/2025 - 13:02:41: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:41: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:02:41: "AA<3><[U:1:1]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:02:41: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "26") +L 07/15/2025 - 13:02:41: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "16") +L 07/15/2025 - 13:02:41: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:41: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:02:41: "AA<3><[U:1:1]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:02:41: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:41: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:42: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "24") +L 07/15/2025 - 13:02:42: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "16") +L 07/15/2025 - 13:02:42: "DD<6><[U:1:4]>" spawned as "demoman" +L 07/15/2025 - 13:02:42: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:42: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:02:42: "AA<3><[U:1:1]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "8") (weapon "scattergun") +L 07/15/2025 - 13:02:42: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:42: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:02:42: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "24") (realdamage "12") (weapon "scattergun") (crit "mini") +L 07/15/2025 - 13:02:42: "CC<5><[U:1:3]>" killed "GG<14><[U:1:7]>" with "scattergun" (attacker_position "1214 1889 500") (victim_position "1442 1729 484") +L 07/15/2025 - 13:02:42: "CC<5><[U:1:3]>" triggered "domination" against "GG<14><[U:1:7]>" +L 07/15/2025 - 13:02:43: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "19") +L 07/15/2025 - 13:02:43: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "26") +L 07/15/2025 - 13:02:43: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:43: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:02:43: "AA<3><[U:1:1]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "27") (weapon "scattergun") +L 07/15/2025 - 13:02:44: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "1") +L 07/15/2025 - 13:02:44: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "24") +L 07/15/2025 - 13:02:44: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:44: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:02:44: "AA<3><[U:1:1]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "15") (weapon "scattergun") +L 07/15/2025 - 13:02:44: "BB<10><[U:1:2]>" changed role to "soldier" +L 07/15/2025 - 13:02:44: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:45: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "30") +L 07/15/2025 - 13:02:45: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "13") +L 07/15/2025 - 13:02:45: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:45: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:46: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:46: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:02:46: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "7") (weapon "scattergun") +L 07/15/2025 - 13:02:46: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:46: "BB<10><[U:1:2]>" changed role to "pyro" +L 07/15/2025 - 13:02:46: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:46: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:02:46: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "24") (weapon "scattergun") +L 07/15/2025 - 13:02:47: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:47: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:02:47: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "47") (weapon "scattergun") +L 07/15/2025 - 13:02:47: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:47: "KK<15><[U:1:11]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "43") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:48: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:02:48: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "70") +L 07/15/2025 - 13:02:48: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "13") +L 07/15/2025 - 13:02:48: "LL<16><[U:1:12]>" spawned as "soldier" +L 07/15/2025 - 13:02:48: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:48: "KK<15><[U:1:11]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "43") (realdamage "11") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:48: "KK<15><[U:1:11]>" killed "AA<3><[U:1:1]>" with "tf_projectile_pipe" (attacker_position "2027 2374 576") (victim_position "3190 2370 576") +L 07/15/2025 - 13:02:48: "CC<5><[U:1:3]>" triggered "kill assist" against "AA<3><[U:1:1]>" (assister_position "1940 2488 588") (attacker_position "2027 2374 576") (victim_position "3190 2370 576") +L 07/15/2025 - 13:02:48: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:02:49: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:02:49: "HH<11><[U:1:8]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "78") (weapon "quake_rl") +L 07/15/2025 - 13:02:49: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "15") +L 07/15/2025 - 13:02:49: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "11") +L 07/15/2025 - 13:02:50: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "37") +L 07/15/2025 - 13:02:50: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "1") +L 07/15/2025 - 13:02:50: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "10") +L 07/15/2025 - 13:02:50: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "10") +L 07/15/2025 - 13:02:51: "HH<11><[U:1:8]>" picked up item "ammopack_small" +L 07/15/2025 - 13:02:51: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "23") +L 07/15/2025 - 13:02:51: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:02:51: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:02:51: "HH<11><[U:1:8]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "49") (weapon "quake_rl") +L 07/15/2025 - 13:02:52: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:02:52: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:02:52: "HH<11><[U:1:8]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "38") (weapon "quake_rl") +L 07/15/2025 - 13:02:52: "HH<11><[U:1:8]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "61") (weapon "quake_rl") +L 07/15/2025 - 13:02:53: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:53: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "1") +L 07/15/2025 - 13:02:53: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "2") +L 07/15/2025 - 13:02:54: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 13:02:54: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:02:54: "II<12><[U:1:9]>" spawned as "scout" +L 07/15/2025 - 13:02:55: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:55: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:02:55: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:02:55: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:55: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "28") +L 07/15/2025 - 13:02:56: "KK<15><[U:1:11]>" picked up item "medkit_small" (healing "35") +L 07/15/2025 - 13:02:56: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "12") +L 07/15/2025 - 13:02:56: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "31") +L 07/15/2025 - 13:02:57: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:02:57: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:57: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:02:57: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:02:57: "JJ<13><[U:1:10]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 13:02:57: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:57: "DD<6><[U:1:4]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "34") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:57: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:02:57: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "9") +L 07/15/2025 - 13:02:57: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "58") +L 07/15/2025 - 13:02:58: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:02:58: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 13:02:58: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:58: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "11") +L 07/15/2025 - 13:02:59: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:59: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:59: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:59: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:59: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:59: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:59: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:59: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:59: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:02:59: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:02:59: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:02:59: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "pistol_scout") +L 07/15/2025 - 13:02:59: "JJ<13><[U:1:10]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "8") (weapon "pistol_scout") +L 07/15/2025 - 13:02:59: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:59: "DD<6><[U:1:4]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "100") (realdamage "46") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:02:59: "DD<6><[U:1:4]>" killed "KK<15><[U:1:11]>" with "tf_projectile_pipe" (attacker_position "3598 2215 576") (victim_position "3014 2174 679") +L 07/15/2025 - 13:02:59: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:00: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "25") +L 07/15/2025 - 13:03:00: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "13") +L 07/15/2025 - 13:03:01: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "24") +L 07/15/2025 - 13:03:01: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "7") +L 07/15/2025 - 13:03:01: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:03:01: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "awper_hand") +L 07/15/2025 - 13:03:01: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:01: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:03:01: "JJ<13><[U:1:10]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:03:01: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "21") +L 07/15/2025 - 13:03:02: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "6") +L 07/15/2025 - 13:03:02: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "8") +L 07/15/2025 - 13:03:02: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "5") +L 07/15/2025 - 13:03:02: "KK<15><[U:1:11]>" say_team "<3" +L 07/15/2025 - 13:03:02: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:03:02: "DD<6><[U:1:4]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:03:02: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:03:02: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:02: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:03:02: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "5") (weapon "scattergun") +L 07/15/2025 - 13:03:03: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "15") +L 07/15/2025 - 13:03:03: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "4") +L 07/15/2025 - 13:03:03: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "8") +L 07/15/2025 - 13:03:03: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:03:03: "LL<16><[U:1:12]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "49") (weapon "quake_rl") +L 07/15/2025 - 13:03:03: "LL<16><[U:1:12]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "71") (weapon "quake_rl") +L 07/15/2025 - 13:03:03: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:03:03: "JJ<13><[U:1:10]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:03:03: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:03: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:03:03: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "36") (weapon "scattergun") +L 07/15/2025 - 13:03:03: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:03:04: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:03:04: "HH<11><[U:1:8]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "48") (weapon "quake_rl") +L 07/15/2025 - 13:03:04: "HH<11><[U:1:8]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "30") (weapon "quake_rl") +L 07/15/2025 - 13:03:04: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:03:04: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:04: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:03:04: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "16") (weapon "scattergun") +L 07/15/2025 - 13:03:04: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "32") +L 07/15/2025 - 13:03:04: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "14") +L 07/15/2025 - 13:03:04: "EE<7><[U:1:5]>" triggered "chargedeployed" (medigun "medigun") +L 07/15/2025 - 13:03:04: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:03:04: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:03:04: "LL<16><[U:1:12]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "49") (weapon "quake_rl") +L 07/15/2025 - 13:03:05: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:03:05: "KK<15><[U:1:11]>" say_team "keep it up" +L 07/15/2025 - 13:03:05: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "6") +L 07/15/2025 - 13:03:05: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "6") +L 07/15/2025 - 13:03:05: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:03:05: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:03:05: "HH<11><[U:1:8]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "0") (weapon "quake_rl") +L 07/15/2025 - 13:03:05: "AA<3><[U:1:1]>" spawned as "scout" +L 07/15/2025 - 13:03:05: "GG<14><[U:1:7]>" spawned as "soldier" +L 07/15/2025 - 13:03:06: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:06: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:03:06: "CC<5><[U:1:3]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "7") (weapon "scattergun") +L 07/15/2025 - 13:03:06: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "20") +L 07/15/2025 - 13:03:06: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "8") +L 07/15/2025 - 13:03:06: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:06: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:03:06: "CC<5><[U:1:3]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 13:03:07: "FF<8><[U:1:6]>" triggered "chargedeployed" (medigun "medigun") +L 07/15/2025 - 13:03:07: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "2") +L 07/15/2025 - 13:03:07: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "6") +L 07/15/2025 - 13:03:07: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:03:07: "DD<6><[U:1:4]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "0") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:03:08: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "12") +L 07/15/2025 - 13:03:10: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:03:10: "EE<7><[U:1:5]>" triggered "empty_uber" +L 07/15/2025 - 13:03:10: "EE<7><[U:1:5]>" triggered "chargeended" (duration "5.8") +L 07/15/2025 - 13:03:10: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:10: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "16") +L 07/15/2025 - 13:03:10: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:03:10: "LL<16><[U:1:12]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "57") (weapon "quake_rl") +L 07/15/2025 - 13:03:11: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "15") +L 07/15/2025 - 13:03:11: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "4") +L 07/15/2025 - 13:03:11: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:11: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:03:11: "AA<3><[U:1:1]>" triggered "damage" against "II<12><[U:1:9]>" (damage "14") (weapon "scattergun") +L 07/15/2025 - 13:03:11: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:03:11: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:03:11: "LL<16><[U:1:12]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "58") (weapon "quake_rl") +L 07/15/2025 - 13:03:11: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:03:11: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:03:11: "GG<14><[U:1:7]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "107") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:03:12: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "2") +L 07/15/2025 - 13:03:12: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:12: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:12: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:12: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:03:12: "AA<3><[U:1:1]>" triggered "damage" against "II<12><[U:1:9]>" (damage "15") (weapon "scattergun") +L 07/15/2025 - 13:03:12: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "awper_hand") +L 07/15/2025 - 13:03:12: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:12: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "26") +L 07/15/2025 - 13:03:12: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:12: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:03:12: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:12: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:03:12: "AA<3><[U:1:1]>" triggered "damage" against "II<12><[U:1:9]>" (damage "48") (weapon "scattergun") +L 07/15/2025 - 13:03:12: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:12: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:03:12: "JJ<13><[U:1:10]>" triggered "damage" against "II<12><[U:1:9]>" (damage "42") (weapon "scattergun") +L 07/15/2025 - 13:03:13: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "24") +L 07/15/2025 - 13:03:13: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:13: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:03:13: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "102") (weapon "scattergun") +L 07/15/2025 - 13:03:13: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:13: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:03:13: "II<12><[U:1:9]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "21") (weapon "scattergun") +L 07/15/2025 - 13:03:13: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:03:13: "GG<14><[U:1:7]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "112") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:03:13: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:13: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:03:13: "AA<3><[U:1:1]>" triggered "damage" against "II<12><[U:1:9]>" (damage "7") (realdamage "6") (weapon "scattergun") +L 07/15/2025 - 13:03:13: "AA<3><[U:1:1]>" killed "II<12><[U:1:9]>" with "scattergun" (attacker_position "3846 1812 576") (victim_position "3542 2144 576") +L 07/15/2025 - 13:03:13: "JJ<13><[U:1:10]>" triggered "kill assist" against "II<12><[U:1:9]>" (assister_position "3312 2083 576") (attacker_position "3846 1812 576") (victim_position "3542 2144 576") +L 07/15/2025 - 13:03:13: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:13: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:03:13: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "24") +L 07/15/2025 - 13:03:13: "FF<8><[U:1:6]>" triggered "empty_uber" +L 07/15/2025 - 13:03:13: "FF<8><[U:1:6]>" triggered "chargeended" (duration "6.4") +L 07/15/2025 - 13:03:14: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:03:14: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:14: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:03:14: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:03:14: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:03:14: "GG<14><[U:1:7]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "112") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:03:14: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:03:14: "JJ<13><[U:1:10]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:03:14: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:14: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:14: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:14: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:14: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "6") +L 07/15/2025 - 13:03:15: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:15: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:03:15: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "56") (realdamage "26") (weapon "scattergun") +L 07/15/2025 - 13:03:15: "CC<5><[U:1:3]>" killed "GG<14><[U:1:7]>" with "scattergun" (attacker_position "2645 1195 576") (victim_position "2302 1121 588") +L 07/15/2025 - 13:03:15: "EE<7><[U:1:5]>" triggered "kill assist" against "GG<14><[U:1:7]>" (assister_position "2392 1385 704") (attacker_position "2645 1195 576") (victim_position "2302 1121 588") +L 07/15/2025 - 13:03:15: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "25") +L 07/15/2025 - 13:03:15: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:16: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:16: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "24") +L 07/15/2025 - 13:03:16: "CC<5><[U:1:3]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:03:17: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:17: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "25") +L 07/15/2025 - 13:03:17: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:03:17: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:17: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:03:17: "JJ<13><[U:1:10]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "99") (weapon "scattergun") +L 07/15/2025 - 13:03:18: "EE<7><[U:1:5]>" picked up item "ammopack_medium" +L 07/15/2025 - 13:03:18: "EE<7><[U:1:5]>" picked up item "medkit_medium" (healing "75") +L 07/15/2025 - 13:03:18: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "awper_hand") +L 07/15/2025 - 13:03:18: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "awper_hand") +L 07/15/2025 - 13:03:18: "BB<10><[U:1:2]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "50") (weapon "awper_hand") +L 07/15/2025 - 13:03:18: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "24") +L 07/15/2025 - 13:03:18: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:18: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:03:18: "JJ<13><[U:1:10]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "103") (realdamage "13") (weapon "scattergun") +L 07/15/2025 - 13:03:18: "JJ<13><[U:1:10]>" killed "BB<10><[U:1:2]>" with "scattergun" (attacker_position "3246 2156 576") (victim_position "3229 2066 576") +L 07/15/2025 - 13:03:18: "JJ<13><[U:1:10]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:03:18: "GG<14><[U:1:7]>" changed role to "sniper" +L 07/15/2025 - 13:03:18: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "4") +L 07/15/2025 - 13:03:19: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "20") +L 07/15/2025 - 13:03:19: "BB<10><[U:1:2]>" changed role to "soldier" +L 07/15/2025 - 13:03:19: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "16") +L 07/15/2025 - 13:03:19: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "24") +L 07/15/2025 - 13:03:20: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:20: "KK<15><[U:1:11]>" spawned as "demoman" +L 07/15/2025 - 13:03:21: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "26") +L 07/15/2025 - 13:03:21: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "7") +L 07/15/2025 - 13:03:21: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "14") +L 07/15/2025 - 13:03:21: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:03:22: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "18") +L 07/15/2025 - 13:03:23: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "29") +L 07/15/2025 - 13:03:23: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:03:25: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "39") +L 07/15/2025 - 13:03:26: "KK<15><[U:1:11]>" picked up item "ammopack_medium" +L 07/15/2025 - 13:03:26: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "22") +L 07/15/2025 - 13:03:26: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "18") +L 07/15/2025 - 13:03:26: "KK<15><[U:1:11]>" picked up item "medkit_small" (healing "35") +L 07/15/2025 - 13:03:27: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "11") +L 07/15/2025 - 13:03:28: "JJ<13><[U:1:10]>" picked up item "ammopack_small" +L 07/15/2025 - 13:03:28: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:03:28: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:03:29: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:29: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:29: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:29: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:30: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "31") +L 07/15/2025 - 13:03:30: "DD<6><[U:1:4]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "63") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:30: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:30: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:30: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "26") +L 07/15/2025 - 13:03:31: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 13:03:31: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:32: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:03:32: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:03:32: "LL<16><[U:1:12]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "53") (weapon "quake_rl") +L 07/15/2025 - 13:03:32: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "19") +L 07/15/2025 - 13:03:32: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "16") +L 07/15/2025 - 13:03:32: "II<12><[U:1:9]>" spawned as "scout" +L 07/15/2025 - 13:03:33: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:03:33: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:33: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:33: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:03:33: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "42") +L 07/15/2025 - 13:03:33: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "1") +L 07/15/2025 - 13:03:33: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "24") +L 07/15/2025 - 13:03:34: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "19") +L 07/15/2025 - 13:03:34: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "22") +L 07/15/2025 - 13:03:35: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:03:35: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "4") +L 07/15/2025 - 13:03:35: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "23") +L 07/15/2025 - 13:03:36: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:36: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:03:36: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:03:36: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "11") +L 07/15/2025 - 13:03:36: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "23") +L 07/15/2025 - 13:03:36: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:36: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:03:36: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "54") (realdamage "12") (weapon "scattergun") +L 07/15/2025 - 13:03:36: "JJ<13><[U:1:10]>" killed "LL<16><[U:1:12]>" with "scattergun" (attacker_position "3774 2201 647") (victim_position "3410 2235 576") +L 07/15/2025 - 13:03:36: "FF<8><[U:1:6]>" triggered "kill assist" against "LL<16><[U:1:12]>" (assister_position "3888 1917 701") (attacker_position "3774 2201 647") (victim_position "3410 2235 576") +L 07/15/2025 - 13:03:36: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:03:37: "GG<14><[U:1:7]>" spawned as "sniper" +L 07/15/2025 - 13:03:37: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:03:37: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "16") +L 07/15/2025 - 13:03:37: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "6") +L 07/15/2025 - 13:03:37: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "8") +L 07/15/2025 - 13:03:38: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:03:38: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:03:38: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "48") +L 07/15/2025 - 13:03:38: "BB<10><[U:1:2]>" spawned as "soldier" +L 07/15/2025 - 13:03:39: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:39: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:03:39: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:03:39: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "89") +L 07/15/2025 - 13:03:39: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "15") +L 07/15/2025 - 13:03:39: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "3") +L 07/15/2025 - 13:03:40: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "24") +L 07/15/2025 - 13:03:40: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "23") +L 07/15/2025 - 13:03:41: "GG<14><[U:1:7]>" spawned as "sniper" +L 07/15/2025 - 13:03:42: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "8") +L 07/15/2025 - 13:03:42: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "27") +L 07/15/2025 - 13:03:42: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:03:43: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "17") +L 07/15/2025 - 13:03:43: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:03:43: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:03:43: "KK<15><[U:1:11]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "100") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:03:43: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:03:44: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:44: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:03:44: "JJ<13><[U:1:10]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:03:44: "JJ<13><[U:1:10]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:03:44: "JJ<13><[U:1:10]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:03:44: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:44: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "17") +L 07/15/2025 - 13:03:44: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "23") +L 07/15/2025 - 13:03:44: "DD<6><[U:1:4]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "57") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:44: "DD<6><[U:1:4]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "40") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:44: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:44: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:44: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:03:44: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:03:44: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:44: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:03:44: "CC<5><[U:1:3]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:03:45: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 13:03:45: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "7") +L 07/15/2025 - 13:03:45: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "2") +L 07/15/2025 - 13:03:45: "JJ<13><[U:1:10]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:03:45: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:03:45: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:45: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "9") +L 07/15/2025 - 13:03:45: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:46: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "14") +L 07/15/2025 - 13:03:46: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "26") +L 07/15/2025 - 13:03:47: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "24") +L 07/15/2025 - 13:03:47: "BB<10><[U:1:2]>" picked up item "ammopack_medium" +L 07/15/2025 - 13:03:47: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "14") +L 07/15/2025 - 13:03:47: "BB<10><[U:1:2]>" picked up item "medkit_small" (healing "40") +L 07/15/2025 - 13:03:48: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "18") +L 07/15/2025 - 13:03:48: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "27") +L 07/15/2025 - 13:03:48: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:48: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:48: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:48: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:48: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:48: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:48: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:48: "DD<6><[U:1:4]>" picked up item "ammopack_small" +L 07/15/2025 - 13:03:49: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "48") +L 07/15/2025 - 13:03:49: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "8") +L 07/15/2025 - 13:03:49: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "20") +L 07/15/2025 - 13:03:50: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "12") +L 07/15/2025 - 13:03:50: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "22") +L 07/15/2025 - 13:03:50: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:50: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:03:50: "II<12><[U:1:9]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "33") (weapon "scattergun") +L 07/15/2025 - 13:03:51: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:51: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:03:51: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "22") +L 07/15/2025 - 13:03:51: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "13") +L 07/15/2025 - 13:03:51: "LL<16><[U:1:12]>" spawned as "soldier" +L 07/15/2025 - 13:03:51: "DD<6><[U:1:4]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "73") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:51: "DD<6><[U:1:4]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "53") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:51: "DD<6><[U:1:4]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "71") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:51: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:51: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:51: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:51: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:51: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:51: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:51: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:51: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:03:51: "AA<3><[U:1:1]>" triggered "damage" against "II<12><[U:1:9]>" (damage "35") (weapon "scattergun") +L 07/15/2025 - 13:03:52: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "16") +L 07/15/2025 - 13:03:52: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "26") +L 07/15/2025 - 13:03:52: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:03:52: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:52: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:03:53: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "14") +L 07/15/2025 - 13:03:53: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "25") +L 07/15/2025 - 13:03:54: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "3") +L 07/15/2025 - 13:03:54: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "25") +L 07/15/2025 - 13:03:54: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 13:03:55: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:03:55: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:03:55: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "28") +L 07/15/2025 - 13:03:55: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:03:55: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "86") +L 07/15/2025 - 13:03:56: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:03:56: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:03:56: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "12") +L 07/15/2025 - 13:03:56: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "36") +L 07/15/2025 - 13:03:56: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "9") +L 07/15/2025 - 13:03:56: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:03:56: "DD<6><[U:1:4]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "100") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:03:56: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:03:57: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:03:57: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:03:57: "BB<10><[U:1:2]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "41") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:03:57: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:03:57: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:03:57: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "25") +L 07/15/2025 - 13:03:57: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "19") +L 07/15/2025 - 13:03:58: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:03:58: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:58: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:03:58: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 13:03:58: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "25") +L 07/15/2025 - 13:03:59: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:59: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:03:59: "AA<3><[U:1:1]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:03:59: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:03:59: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:03:59: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:03:59: "AA<3><[U:1:1]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 13:03:59: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "24") +L 07/15/2025 - 13:03:59: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:00: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "25") +L 07/15/2025 - 13:04:00: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:04:00: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:04:00: "AA<3><[U:1:1]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:04:00: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "10") +L 07/15/2025 - 13:04:00: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "3") +L 07/15/2025 - 13:04:00: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "24") +L 07/15/2025 - 13:04:01: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:01: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:04:01: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "13") +L 07/15/2025 - 13:04:01: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "24") +L 07/15/2025 - 13:04:01: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "10") +L 07/15/2025 - 13:04:02: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "sniperrifle") +L 07/15/2025 - 13:04:03: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "22") +L 07/15/2025 - 13:04:03: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "16") +L 07/15/2025 - 13:04:04: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "22") +L 07/15/2025 - 13:04:04: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:04:04: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:04:04: "DD<6><[U:1:4]>" picked up item "ammopack_small" +L 07/15/2025 - 13:04:04: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:04:04: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "101") +L 07/15/2025 - 13:04:04: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:04:04: "HH<11><[U:1:8]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "48") (weapon "quake_rl") +L 07/15/2025 - 13:04:05: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:04:05: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "19") +L 07/15/2025 - 13:04:05: "KK<15><[U:1:11]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "61") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:05: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:05: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:06: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:04:06: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:04:06: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "22") +L 07/15/2025 - 13:04:06: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:07: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:04:07: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:04:07: "II<12><[U:1:9]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 13:04:07: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "5") +L 07/15/2025 - 13:04:07: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "4") +L 07/15/2025 - 13:04:07: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "sniperrifle") +L 07/15/2025 - 13:04:08: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "26") +L 07/15/2025 - 13:04:08: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "19") +L 07/15/2025 - 13:04:08: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "2") +L 07/15/2025 - 13:04:08: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:04:08: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:04:09: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:04:09: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:04:09: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "112") +L 07/15/2025 - 13:04:09: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:04:09: "HH<11><[U:1:8]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "37") (weapon "quake_rl") +L 07/15/2025 - 13:04:09: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "5") +L 07/15/2025 - 13:04:09: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:04:09: "EE<7><[U:1:5]>" triggered "chargeready" +L 07/15/2025 - 13:04:09: "KK<15><[U:1:11]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "40") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:10: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:10: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:10: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:04:10: "HH<11><[U:1:8]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "39") (weapon "quake_rl") +L 07/15/2025 - 13:04:10: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:04:10: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:10: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 13:04:10: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "26") +L 07/15/2025 - 13:04:11: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "20") +L 07/15/2025 - 13:04:11: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "25") +L 07/15/2025 - 13:04:12: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "2") +L 07/15/2025 - 13:04:12: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "6") +L 07/15/2025 - 13:04:12: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "1") +L 07/15/2025 - 13:04:12: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "50") +L 07/15/2025 - 13:04:13: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "26") +L 07/15/2025 - 13:04:13: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "52") +L 07/15/2025 - 13:04:13: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:14: "FF<8><[U:1:6]>" triggered "chargeready" +L 07/15/2025 - 13:04:14: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "25") +L 07/15/2025 - 13:04:14: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "16") +L 07/15/2025 - 13:04:14: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "1") +L 07/15/2025 - 13:04:14: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:04:15: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "3") +L 07/15/2025 - 13:04:15: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "26") +L 07/15/2025 - 13:04:15: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:16: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:04:16: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:04:16: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:04:16: "DD<6><[U:1:4]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "112") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:16: "DD<6><[U:1:4]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "60") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:16: "DD<6><[U:1:4]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "106") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:16: "DD<6><[U:1:4]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "101") (realdamage "22") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:16: "DD<6><[U:1:4]>" killed "KK<15><[U:1:11]>" with "tf_projectile_pipe_remote" (attacker_position "3817 2219 668") (victim_position "2758 2412 576") +L 07/15/2025 - 13:04:16: "FF<8><[U:1:6]>" triggered "kill assist" against "KK<15><[U:1:11]>" (assister_position "3964 2279 742") (attacker_position "3817 2219 668") (victim_position "2758 2412 576") +L 07/15/2025 - 13:04:16: "DD<6><[U:1:4]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "70") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:16: "DD<6><[U:1:4]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "66") (realdamage "9") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:16: "DD<6><[U:1:4]>" triggered "medic_death" against "EE<7><[U:1:5]>" (healing "3268") (ubercharge "1") +L 07/15/2025 - 13:04:16: "EE<7><[U:1:5]>" triggered "medic_death_ex" (uberpct "100") +L 07/15/2025 - 13:04:16: "DD<6><[U:1:4]>" killed "EE<7><[U:1:5]>" with "tf_projectile_pipe_remote" (attacker_position "3817 2219 668") (victim_position "2605 2414 576") +L 07/15/2025 - 13:04:16: "FF<8><[U:1:6]>" triggered "kill assist" against "EE<7><[U:1:5]>" (assister_position "3964 2279 742") (attacker_position "3817 2219 668") (victim_position "2605 2414 576") +L 07/15/2025 - 13:04:16: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:16: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:16: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:16: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:16: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:16: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:16: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:16: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:16: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:16: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:16: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:16: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "8") +L 07/15/2025 - 13:04:16: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "23") +L 07/15/2025 - 13:04:17: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:04:17: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:04:17: "II<12><[U:1:9]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "44") (weapon "scattergun") +L 07/15/2025 - 13:04:17: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:04:17: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:04:17: "AA<3><[U:1:1]>" picked up item "medkit_medium" (healing "44") +L 07/15/2025 - 13:04:17: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:04:17: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "37") +L 07/15/2025 - 13:04:17: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:04:17: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:04:17: "AA<3><[U:1:1]>" triggered "damage" against "II<12><[U:1:9]>" (damage "62") (weapon "scattergun") +L 07/15/2025 - 13:04:17: "AA<3><[U:1:1]>" picked up item "ammopack_medium" +L 07/15/2025 - 13:04:17: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:18: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:04:18: "HH<11><[U:1:8]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "57") (weapon "quake_rl") +L 07/15/2025 - 13:04:18: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:04:18: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:04:18: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:04:18: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:04:18: "AA<3><[U:1:1]>" triggered "damage" against "II<12><[U:1:9]>" (damage "24") (weapon "scattergun") +L 07/15/2025 - 13:04:18: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "5") +L 07/15/2025 - 13:04:19: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:04:19: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:04:19: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:04:19: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:04:19: "II<12><[U:1:9]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "13") (weapon "scattergun") +L 07/15/2025 - 13:04:19: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:04:19: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:04:19: "AA<3><[U:1:1]>" triggered "damage" against "II<12><[U:1:9]>" (damage "7") (weapon "scattergun") +L 07/15/2025 - 13:04:19: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "1") +L 07/15/2025 - 13:04:20: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:04:20: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:04:20: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:04:20: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:04:20: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "pistol_scout") +L 07/15/2025 - 13:04:20: "AA<3><[U:1:1]>" triggered "damage" against "II<12><[U:1:9]>" (damage "18") (weapon "pistol_scout") +L 07/15/2025 - 13:04:20: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:04:20: "CC<5><[U:1:3]>" picked up item "medkit_small" (healing "25") +L 07/15/2025 - 13:04:20: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:04:20: "CC<5><[U:1:3]>" picked up item "ammopack_medium" +L 07/15/2025 - 13:04:21: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:04:21: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:04:21: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:04:21: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "pistol_scout") +L 07/15/2025 - 13:04:21: "AA<3><[U:1:1]>" triggered "damage" against "II<12><[U:1:9]>" (damage "17") (realdamage "14") (weapon "pistol_scout") +L 07/15/2025 - 13:04:21: "AA<3><[U:1:1]>" killed "II<12><[U:1:9]>" with "pistol_scout" (attacker_position "2160 1576 472") (victim_position "1792 1815 455") +L 07/15/2025 - 13:04:21: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:04:21: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:04:21: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:04:22: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:04:22: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:04:22: "BB<10><[U:1:2]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "112") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:04:22: "KK<15><[U:1:11]>" say_team "cool people" +L 07/15/2025 - 13:04:22: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:04:22: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:04:23: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:04:23: "DD<6><[U:1:4]>" picked up item "ammopack_small" +L 07/15/2025 - 13:04:23: "DD<6><[U:1:4]>" picked up item "medkit_small" (healing "35") +L 07/15/2025 - 13:04:23: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:04:24: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:04:24: "BB<10><[U:1:2]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "107") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:04:24: "BB<10><[U:1:2]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "52") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:04:24: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:04:24: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:04:24: "LL<16><[U:1:12]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "68") (weapon "quake_rl") +L 07/15/2025 - 13:04:24: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:04:24: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:04:24: "BB<10><[U:1:2]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "61") (realdamage "57") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:04:24: "BB<10><[U:1:2]>" killed "DD<6><[U:1:4]>" with "tf_projectile_rocket" (attacker_position "2450 1876 773") (victim_position "2571 2209 704") +L 07/15/2025 - 13:04:24: "BB<10><[U:1:2]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "80") (realdamage "38") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:04:24: "BB<10><[U:1:2]>" killed "HH<11><[U:1:8]>" with "tf_projectile_rocket" (attacker_position "2450 1876 773") (victim_position "2565 2137 743") +L 07/15/2025 - 13:04:24: "BB<10><[U:1:2]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "50") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:04:24: "JJ<13><[U:1:10]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:04:24: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:24: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:24: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:04:24: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:04:25: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:04:25: "LL<16><[U:1:12]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "104") (realdamage "44") (weapon "quake_rl") +L 07/15/2025 - 13:04:25: "LL<16><[U:1:12]>" killed "AA<3><[U:1:1]>" with "quake_rl" (attacker_position "2479 2358 576") (victim_position "2231 2237 598") +L 07/15/2025 - 13:04:25: "LL<16><[U:1:12]>" triggered "domination" against "AA<3><[U:1:1]>" +L 07/15/2025 - 13:04:25: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:04:25: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:04:25: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:04:25: "BB<10><[U:1:2]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "54") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:04:26: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "9") +L 07/15/2025 - 13:04:26: "BB<10><[U:1:2]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:04:26: "FF<8><[U:1:6]>" triggered "chargedeployed" (medigun "medigun") +L 07/15/2025 - 13:04:26: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:04:26: "BB<10><[U:1:2]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "0") (weapon "unique_pickaxe_escape") +L 07/15/2025 - 13:04:26: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "25") +L 07/15/2025 - 13:04:27: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:04:27: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:04:27: "JJ<13><[U:1:10]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "110") (realdamage "80") (weapon "scattergun") (crit "mini") +L 07/15/2025 - 13:04:27: "JJ<13><[U:1:10]>" killed "BB<10><[U:1:2]>" with "scattergun" (attacker_position "2566 2151 704") (victim_position "2514 2044 704") +L 07/15/2025 - 13:04:27: "FF<8><[U:1:6]>" triggered "kill assist" against "BB<10><[U:1:2]>" (assister_position "2530 2098 704") (attacker_position "2566 2151 704") (victim_position "2514 2044 704") +L 07/15/2025 - 13:04:27: "FF<8><[U:1:6]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:04:27: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "13") +L 07/15/2025 - 13:04:28: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "22") +L 07/15/2025 - 13:04:29: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "24") +L 07/15/2025 - 13:04:30: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "12") +L 07/15/2025 - 13:04:31: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:04:31: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:04:31: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "9") (weapon "scattergun") +L 07/15/2025 - 13:04:31: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "sniperrifle") +L 07/15/2025 - 13:04:31: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "sniperrifle") +L 07/15/2025 - 13:04:31: "GG<14><[U:1:7]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "150") (weapon "sniperrifle") (crit "crit") (headshot "1") +L 07/15/2025 - 13:04:31: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:04:31: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:04:31: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "19") (weapon "scattergun") +L 07/15/2025 - 13:04:32: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:04:32: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:04:32: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "5") (weapon "scattergun") +L 07/15/2025 - 13:04:32: Team "Blue" triggered "pointcaptured" (cp "4") (cpname "Red Final Point") (numcappers "2") (player1 "CC<5><[U:1:3]>") (position1 "3590 1171 580") (player2 "LL<16><[U:1:12]>") (position2 "3609 1284 583") +L 07/15/2025 - 13:04:32: World triggered "Round_Win" (winner "Blue") +L 07/15/2025 - 13:04:32: World triggered "Round_Length" (seconds "185.90") +L 07/15/2025 - 13:04:32: Team "Red" current score "0" with "6" players +L 07/15/2025 - 13:04:32: Team "Blue" current score "4" with "6" players +L 07/15/2025 - 13:04:33: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:04:33: "CC<5><[U:1:3]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "144") (weapon "scattergun") (crit "crit") +L 07/15/2025 - 13:04:33: "KK<15><[U:1:11]>" say_team "so good" +L 07/15/2025 - 13:04:34: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:04:34: "LL<16><[U:1:12]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "187") (realdamage "23") (weapon "quake_rl") (crit "crit") +L 07/15/2025 - 13:04:34: "LL<16><[U:1:12]>" killed "JJ<13><[U:1:10]>" with "quake_rl" (attacker_position "3638 1145 654") (victim_position "3376 1268 576") +L 07/15/2025 - 13:04:34: "CC<5><[U:1:3]>" triggered "kill assist" against "JJ<13><[U:1:10]>" (assister_position "3614 1456 634") (attacker_position "3638 1145 654") (victim_position "3376 1268 576") +L 07/15/2025 - 13:04:36: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:04:36: "LL<16><[U:1:12]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "270") (realdamage "91") (weapon "quake_rl") (crit "crit") +L 07/15/2025 - 13:04:36: "LL<16><[U:1:12]>" killed "GG<14><[U:1:7]>" with "quake_rl" (attacker_position "3707 556 576") (victim_position "3414 532 576") +L 07/15/2025 - 13:04:36: "EE<7><[U:1:5]>" say_team "i love you all" +L 07/15/2025 - 13:04:37: "GG<14><[U:1:7]>" changed role to "soldier" +L 07/15/2025 - 13:04:43: "LL<16><[U:1:12]>" picked up item "ammopack_small" +L 07/15/2025 - 13:04:43: "LL<16><[U:1:12]>" picked up item "medkit_small" (healing "40") +L 07/15/2025 - 13:04:47: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:04:47: "CC<5><[U:1:3]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "180") (realdamage "150") (weapon "scattergun") (crit "crit") +L 07/15/2025 - 13:04:47: "CC<5><[U:1:3]>" triggered "medic_death" against "FF<8><[U:1:6]>" (healing "3186") (ubercharge "0") +L 07/15/2025 - 13:04:47: "CC<5><[U:1:3]>" killed "FF<8><[U:1:6]>" with "scattergun" (attacker_position "2858 2263 704") (victim_position "2882 2179 704") +L 07/15/2025 - 13:04:47: "CC<5><[U:1:3]>" triggered "domination" against "FF<8><[U:1:6]>" +L 07/15/2025 - 13:04:49: World triggered "Round_Start" +L 07/15/2025 - 13:04:49: "AA<3><[U:1:1]>" spawned as "scout" +L 07/15/2025 - 13:04:49: "BB<10><[U:1:2]>" spawned as "soldier" +L 07/15/2025 - 13:04:49: "CC<5><[U:1:3]>" spawned as "scout" +L 07/15/2025 - 13:04:49: "DD<6><[U:1:4]>" spawned as "demoman" +L 07/15/2025 - 13:04:49: "EE<7><[U:1:5]>" spawned as "medic" +L 07/15/2025 - 13:04:49: "FF<8><[U:1:6]>" spawned as "medic" +L 07/15/2025 - 13:04:49: "GG<14><[U:1:7]>" spawned as "soldier" +L 07/15/2025 - 13:04:49: "HH<11><[U:1:8]>" spawned as "soldier" +L 07/15/2025 - 13:04:49: "II<12><[U:1:9]>" spawned as "scout" +L 07/15/2025 - 13:04:49: "JJ<13><[U:1:10]>" spawned as "scout" +L 07/15/2025 - 13:04:49: "KK<15><[U:1:11]>" spawned as "demoman" +L 07/15/2025 - 13:04:49: "LL<16><[U:1:12]>" spawned as "soldier" +L 07/15/2025 - 13:04:49: "FF<8><[U:1:6]>" triggered "empty_uber" +L 07/15/2025 - 13:04:49: "EE<7><[U:1:5]>" triggered "empty_uber" +L 07/15/2025 - 13:04:50: "KK<15><[U:1:11]>" say_team ":D" +L 07/15/2025 - 13:04:51: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "9") +L 07/15/2025 - 13:04:51: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "20") +L 07/15/2025 - 13:04:51: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "23") +L 07/15/2025 - 13:04:52: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "71") +L 07/15/2025 - 13:04:52: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "63") +L 07/15/2025 - 13:04:53: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "26") +L 07/15/2025 - 13:04:53: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "26") +L 07/15/2025 - 13:04:54: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "24") +L 07/15/2025 - 13:04:54: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "24") +L 07/15/2025 - 13:04:55: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "15") +L 07/15/2025 - 13:04:55: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "7") +L 07/15/2025 - 13:04:55: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "10") +L 07/15/2025 - 13:04:56: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "59") +L 07/15/2025 - 13:04:56: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "73") +L 07/15/2025 - 13:04:57: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "1") +L 07/15/2025 - 13:04:57: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "27") +L 07/15/2025 - 13:04:58: "KK<15><[U:1:11]>" picked up item "ammopack_small" +L 07/15/2025 - 13:04:58: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "3") +L 07/15/2025 - 13:04:58: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "60") +L 07/15/2025 - 13:04:58: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "11") +L 07/15/2025 - 13:04:59: "HH<11><[U:1:8]>" picked up item "medkit_small" (healing "40") +L 07/15/2025 - 13:04:59: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:04:59: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "49") +L 07/15/2025 - 13:05:00: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:00: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "7") +L 07/15/2025 - 13:05:02: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:05:03: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:05:04: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:05:04: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "129") +L 07/15/2025 - 13:05:04: "LL<16><[U:1:12]>" picked up item "medkit_small" (healing "14") +L 07/15/2025 - 13:05:04: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:04: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "4") +L 07/15/2025 - 13:05:05: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:05:05: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:05:05: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "123") +L 07/15/2025 - 13:05:05: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:06: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:05:06: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:05:06: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "82") +L 07/15/2025 - 13:05:06: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:05:06: "KK<15><[U:1:11]>" picked up item "medkit_medium" (healing "77") +L 07/15/2025 - 13:05:06: "DD<6><[U:1:4]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "32") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:06: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:06: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:06: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:07: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:05:07: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:05:07: "LL<16><[U:1:12]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "28") (weapon "quake_rl") +L 07/15/2025 - 13:05:07: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:08: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "26") +L 07/15/2025 - 13:05:08: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:05:08: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "48") +L 07/15/2025 - 13:05:08: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:08: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:08: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:05:08: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:08: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:08: "AA<3><[U:1:1]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:05:08: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:05:09: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:09: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:09: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "13") (weapon "scattergun") +L 07/15/2025 - 13:05:09: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:09: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:05:09: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "43") +L 07/15/2025 - 13:05:09: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "12") +L 07/15/2025 - 13:05:09: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:09: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:09: "CC<5><[U:1:3]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:05:09: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:05:09: "LL<16><[U:1:12]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "24") (weapon "quake_rl") +L 07/15/2025 - 13:05:09: "KK<15><[U:1:11]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "32") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:09: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:09: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:09: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:10: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:05:10: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:10: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:10: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 13:05:10: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "58") +L 07/15/2025 - 13:05:10: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:10: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:10: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:10: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:10: "CC<5><[U:1:3]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:05:10: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:10: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "26") +L 07/15/2025 - 13:05:10: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:05:10: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:10: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:10: "II<12><[U:1:9]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:05:11: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "14") +L 07/15/2025 - 13:05:11: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:11: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:11: "II<12><[U:1:9]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:05:11: "KK<15><[U:1:11]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "32") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:11: "KK<15><[U:1:11]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "33") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:11: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:11: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:11: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:11: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:05:11: "LL<16><[U:1:12]>" picked up item "medkit_small" (healing "33") +L 07/15/2025 - 13:05:12: "DD<6><[U:1:4]>" picked up item "medkit_medium" (healing "45") +L 07/15/2025 - 13:05:12: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:12: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:12: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:05:13: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:13: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "26") +L 07/15/2025 - 13:05:13: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:13: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:13: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "7") +L 07/15/2025 - 13:05:13: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:13: "BB<10><[U:1:2]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "56") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:13: "KK<15><[U:1:11]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "63") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:13: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:13: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:13: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:05:13: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:13: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:13: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "45") (weapon "scattergun") +L 07/15/2025 - 13:05:13: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:14: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:14: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:05:14: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:05:14: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:14: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:14: "CC<5><[U:1:3]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "45") (weapon "scattergun") +L 07/15/2025 - 13:05:14: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:05:14: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:05:14: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:14: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:14: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "60") (weapon "scattergun") +L 07/15/2025 - 13:05:14: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:14: "BB<10><[U:1:2]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "39") (realdamage "11") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:14: "BB<10><[U:1:2]>" killed "DD<6><[U:1:4]>" with "tf_projectile_rocket" (attacker_position "512 -302 595") (victim_position "430 408 485") +L 07/15/2025 - 13:05:14: "CC<5><[U:1:3]>" triggered "kill assist" against "DD<6><[U:1:4]>" (assister_position "561 -302 595") (attacker_position "512 -302 595") (victim_position "430 408 485") +L 07/15/2025 - 13:05:14: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:14: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:05:14: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "114") +L 07/15/2025 - 13:05:14: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:14: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:14: "II<12><[U:1:9]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:05:14: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:14: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:14: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "16") (weapon "scattergun") +L 07/15/2025 - 13:05:14: "KK<15><[U:1:11]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "59") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:14: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:14: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:14: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:15: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:05:15: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:15: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:15: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:15: "II<12><[U:1:9]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "22") (weapon "scattergun") +L 07/15/2025 - 13:05:15: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:05:15: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:05:15: "LL<16><[U:1:12]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "84") (realdamage "66") (weapon "quake_rl") +L 07/15/2025 - 13:05:15: "LL<16><[U:1:12]>" killed "JJ<13><[U:1:10]>" with "quake_rl" (attacker_position "759 63 576") (victim_position "751 515 544") +L 07/15/2025 - 13:05:15: "KK<15><[U:1:11]>" triggered "kill assist" against "JJ<13><[U:1:10]>" (assister_position "120 -8 481") (attacker_position "759 63 576") (victim_position "751 515 544") +L 07/15/2025 - 13:05:15: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:05:15: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:15: "GG<14><[U:1:7]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "50") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:15: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:15: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:05:15: "HH<11><[U:1:8]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "55") (weapon "quake_rl") +L 07/15/2025 - 13:05:15: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:15: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:05:15: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:05:16: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:05:16: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:16: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:16: "II<12><[U:1:9]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "100") (realdamage "58") (weapon "scattergun") +L 07/15/2025 - 13:05:16: "II<12><[U:1:9]>" killed "GG<14><[U:1:7]>" with "scattergun" (attacker_position "-206 46 480") (victim_position "-72 103 482") +L 07/15/2025 - 13:05:16: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:05:16: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:16: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:16: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:16: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "96") (weapon "scattergun") +L 07/15/2025 - 13:05:16: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:05:16: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:05:16: "LL<16><[U:1:12]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "42") (weapon "quake_rl") +L 07/15/2025 - 13:05:16: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:05:17: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:17: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:05:17: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:05:17: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "pistol_scout") +L 07/15/2025 - 13:05:17: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "17") (weapon "pistol_scout") +L 07/15/2025 - 13:05:17: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:05:17: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:05:17: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "24") +L 07/15/2025 - 13:05:17: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:05:17: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "pistol_scout") +L 07/15/2025 - 13:05:17: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "18") (weapon "pistol_scout") +L 07/15/2025 - 13:05:17: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:17: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:05:17: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:05:17: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "pistol_scout") +L 07/15/2025 - 13:05:17: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "18") (weapon "pistol_scout") +L 07/15/2025 - 13:05:18: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:05:18: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:05:18: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "pistol_scout") +L 07/15/2025 - 13:05:18: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "18") (weapon "pistol_scout") +L 07/15/2025 - 13:05:18: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:18: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:18: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "47") (realdamage "29") (weapon "scattergun") +L 07/15/2025 - 13:05:18: "CC<5><[U:1:3]>" killed "AA<3><[U:1:1]>" with "scattergun" (attacker_position "435 -351 595") (victim_position "765 -501 544") +L 07/15/2025 - 13:05:18: "BB<10><[U:1:2]>" picked up item "medkit_medium" (healing "100") +L 07/15/2025 - 13:05:18: "II<12><[U:1:9]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:05:18: "BB<10><[U:1:2]>" picked up item "ammopack_medium" +L 07/15/2025 - 13:05:18: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "4") +L 07/15/2025 - 13:05:18: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 13:05:19: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:19: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "24") +L 07/15/2025 - 13:05:20: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 13:05:21: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:05:21: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "10") +L 07/15/2025 - 13:05:22: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "25") +L 07/15/2025 - 13:05:23: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:05:24: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:05:24: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "88") +L 07/15/2025 - 13:05:24: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "26") +L 07/15/2025 - 13:05:24: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "2") +L 07/15/2025 - 13:05:24: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "1") +L 07/15/2025 - 13:05:25: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "25") +L 07/15/2025 - 13:05:25: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "5") +L 07/15/2025 - 13:05:25: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "14") +L 07/15/2025 - 13:05:26: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:05:27: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "24") +L 07/15/2025 - 13:05:27: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:05:27: Team "Blue" triggered "pointcaptured" (cp "2") (cpname "Middle Point") (numcappers "1") (player1 "II<12><[U:1:9]>") (position1 "309 4 480") +L 07/15/2025 - 13:05:28: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "8") +L 07/15/2025 - 13:05:28: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:28: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:28: "BB<10><[U:1:2]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "51") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:29: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "29") +L 07/15/2025 - 13:05:29: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:05:29: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:29: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:29: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "11") (weapon "scattergun") +L 07/15/2025 - 13:05:29: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:05:29: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:05:29: "LL<16><[U:1:12]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "91") (weapon "quake_rl") +L 07/15/2025 - 13:05:29: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:05:29: "HH<11><[U:1:8]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "48") (weapon "quake_rl") +L 07/15/2025 - 13:05:29: "HH<11><[U:1:8]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "57") (weapon "quake_rl") +L 07/15/2025 - 13:05:29: "HH<11><[U:1:8]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "52") (weapon "quake_rl") +L 07/15/2025 - 13:05:30: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:30: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "9") +L 07/15/2025 - 13:05:30: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:30: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:30: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "21") (weapon "scattergun") +L 07/15/2025 - 13:05:30: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:05:30: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:30: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:05:31: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:05:31: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "23") +L 07/15/2025 - 13:05:31: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:31: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:31: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:31: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:31: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:31: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:05:31: "HH<11><[U:1:8]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "69") (realdamage "55") (weapon "quake_rl") +L 07/15/2025 - 13:05:31: "HH<11><[U:1:8]>" killed "KK<15><[U:1:11]>" with "quake_rl" (attacker_position "1547 2133 770") (victim_position "1329 2443 621") +L 07/15/2025 - 13:05:31: "HH<11><[U:1:8]>" triggered "revenge" against "KK<15><[U:1:11]>" +L 07/15/2025 - 13:05:31: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:05:31: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:31: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:31: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "21") (weapon "scattergun") +L 07/15/2025 - 13:05:32: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "21") +L 07/15/2025 - 13:05:32: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:32: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:32: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "37") (weapon "scattergun") +L 07/15/2025 - 13:05:32: "FF<8><[U:1:6]>" spawned as "medic" +L 07/15/2025 - 13:05:32: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:05:33: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:33: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:33: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "21") (realdamage "15") (weapon "scattergun") +L 07/15/2025 - 13:05:33: "CC<5><[U:1:3]>" killed "HH<11><[U:1:8]>" with "scattergun" (attacker_position "1526 2183 768") (victim_position "1322 2549 658") +L 07/15/2025 - 13:05:33: "EE<7><[U:1:5]>" triggered "kill assist" against "HH<11><[U:1:8]>" (assister_position "1681 1955 768") (attacker_position "1526 2183 768") (victim_position "1322 2549 658") +L 07/15/2025 - 13:05:33: "DD<6><[U:1:4]>" spawned as "demoman" +L 07/15/2025 - 13:05:33: "GG<14><[U:1:7]>" spawned as "soldier" +L 07/15/2025 - 13:05:33: "JJ<13><[U:1:10]>" spawned as "scout" +L 07/15/2025 - 13:05:35: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "12") +L 07/15/2025 - 13:05:36: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "44") +L 07/15/2025 - 13:05:36: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "29") +L 07/15/2025 - 13:05:36: "EE<7><[U:1:5]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:05:37: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "31") +L 07/15/2025 - 13:05:38: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:05:38: "BB<10><[U:1:2]>" picked up item "ammopack_medium" +L 07/15/2025 - 13:05:38: "BB<10><[U:1:2]>" picked up item "medkit_small" (healing "40") +L 07/15/2025 - 13:05:38: Team "Blue" triggered "pointcaptured" (cp "3") (cpname "Red Mini-Spire") (numcappers "2") (player1 "CC<5><[U:1:3]>") (position1 "1875 2142 768") (player2 "II<12><[U:1:9]>") (position2 "1893 2185 768") +L 07/15/2025 - 13:05:40: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:05:40: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:40: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:40: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:05:40: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:05:40: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "90") +L 07/15/2025 - 13:05:40: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:40: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:40: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "7") (weapon "scattergun") +L 07/15/2025 - 13:05:41: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:41: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:41: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "21") +L 07/15/2025 - 13:05:41: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:41: "GG<14><[U:1:7]>" triggered "damage" against "II<12><[U:1:9]>" (damage "59") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:41: "AA<3><[U:1:1]>" spawned as "scout" +L 07/15/2025 - 13:05:41: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "12") +L 07/15/2025 - 13:05:41: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:42: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "28") +L 07/15/2025 - 13:05:43: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "25") +L 07/15/2025 - 13:05:44: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "24") +L 07/15/2025 - 13:05:44: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "15") +L 07/15/2025 - 13:05:45: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:45: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "61") +L 07/15/2025 - 13:05:45: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "16") +L 07/15/2025 - 13:05:46: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:46: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:46: "AA<3><[U:1:1]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "14") (weapon "scattergun") +L 07/15/2025 - 13:05:46: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:46: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:46: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:46: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "11") (weapon "scattergun") +L 07/15/2025 - 13:05:46: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:46: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "4") +L 07/15/2025 - 13:05:46: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "28") +L 07/15/2025 - 13:05:47: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:47: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:47: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:47: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:47: "BB<10><[U:1:2]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "62") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:47: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:47: "KK<15><[U:1:11]>" spawned as "demoman" +L 07/15/2025 - 13:05:47: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:47: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:47: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "6") (realdamage "5") (weapon "scattergun") +L 07/15/2025 - 13:05:47: "JJ<13><[U:1:10]>" killed "LL<16><[U:1:12]>" with "scattergun" (attacker_position "3653 2195 586") (victim_position "2433 2163 790") +L 07/15/2025 - 13:05:47: "FF<8><[U:1:6]>" triggered "kill assist" against "LL<16><[U:1:12]>" (assister_position "4100 2061 768") (attacker_position "3653 2195 586") (victim_position "2433 2163 790") +L 07/15/2025 - 13:05:48: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:48: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "24") +L 07/15/2025 - 13:05:48: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:48: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:48: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:48: "GG<14><[U:1:7]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "74") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:48: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:48: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:49: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "27") +L 07/15/2025 - 13:05:49: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:49: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:49: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "26") (weapon "scattergun") +L 07/15/2025 - 13:05:49: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:49: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:49: "BB<10><[U:1:2]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "49") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:50: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:50: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:50: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "5") (weapon "scattergun") +L 07/15/2025 - 13:05:50: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "26") +L 07/15/2025 - 13:05:50: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:05:51: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "26") +L 07/15/2025 - 13:05:51: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:51: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:51: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:05:51: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:05:51: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:52: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "8") +L 07/15/2025 - 13:05:52: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "13") +L 07/15/2025 - 13:05:52: "JJ<13><[U:1:10]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:05:52: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:52: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:52: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:05:53: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "12") +L 07/15/2025 - 13:05:53: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:05:53: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:05:53: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "78") +L 07/15/2025 - 13:05:53: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:53: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:53: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 13:05:53: "DD<6><[U:1:4]>" triggered "damage" against "II<12><[U:1:9]>" (damage "64") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:54: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:54: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:54: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:54: "DD<6><[U:1:4]>" triggered "damage" against "II<12><[U:1:9]>" (damage "60") (realdamage "53") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:54: "DD<6><[U:1:4]>" killed "II<12><[U:1:9]>" with "tf_projectile_pipe_remote" (attacker_position "2687 1193 576") (victim_position "2426 1449 704") +L 07/15/2025 - 13:05:54: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:54: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:54: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:54: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:54: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:54: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:54: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:54: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:05:54: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "16") +L 07/15/2025 - 13:05:54: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "8") +L 07/15/2025 - 13:05:54: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:55: "EE<7><[U:1:5]>" triggered "chargeready" +L 07/15/2025 - 13:05:55: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "26") +L 07/15/2025 - 13:05:55: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "6") +L 07/15/2025 - 13:05:55: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "10") +L 07/15/2025 - 13:05:55: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:55: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:05:55: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:05:55: "AA<3><[U:1:1]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 13:05:55: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:05:56: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "35") +L 07/15/2025 - 13:05:56: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "7") +L 07/15/2025 - 13:05:56: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "16") +L 07/15/2025 - 13:05:57: "HH<11><[U:1:8]>" spawned as "soldier" +L 07/15/2025 - 13:05:57: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "25") +L 07/15/2025 - 13:05:57: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "8") +L 07/15/2025 - 13:05:58: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "4") +L 07/15/2025 - 13:05:59: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 13:05:59: "AA<3><[U:1:1]>" picked up item "ammopack_small" +L 07/15/2025 - 13:05:59: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:00: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 13:06:00: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "5") +L 07/15/2025 - 13:06:00: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "7") +L 07/15/2025 - 13:06:01: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "40") +L 07/15/2025 - 13:06:02: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:06:02: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:02: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:06:02: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "38") +L 07/15/2025 - 13:06:02: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:06:02: "BB<10><[U:1:2]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "57") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:06:03: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:03: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:03: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "31") (weapon "scattergun") +L 07/15/2025 - 13:06:03: "CC<5><[U:1:3]>" killed "GG<14><[U:1:7]>" with "world" (attacker_position "2202 2415 576") (victim_position "2603 2488 583") +L 07/15/2025 - 13:06:03: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:06:03: "EE<7><[U:1:5]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:06:03: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:04: "EE<7><[U:1:5]>" triggered "chargedeployed" (medigun "medigun") +L 07/15/2025 - 13:06:04: "DD<6><[U:1:4]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:06:04: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:04: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:04: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "5") (weapon "scattergun") +L 07/15/2025 - 13:06:04: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "15") (weapon "scattergun") +L 07/15/2025 - 13:06:05: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:05: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:05: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:06:05: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:05: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:06:06: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:06:06: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:06:06: "HH<11><[U:1:8]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "0") (weapon "quake_rl") +L 07/15/2025 - 13:06:06: "FF<8><[U:1:6]>" spawned as "medic" +L 07/15/2025 - 13:06:06: "KK<15><[U:1:11]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "65") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:06: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:06: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:06: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:06:06: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:06:06: "LL<16><[U:1:12]>" spawned as "soldier" +L 07/15/2025 - 13:06:07: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:07: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:06:07: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:07: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:07: "JJ<13><[U:1:10]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:06:07: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:06:07: "KK<15><[U:1:11]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "61") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:07: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:07: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:07: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:06:07: "HH<11><[U:1:8]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "58") (weapon "quake_rl") +L 07/15/2025 - 13:06:08: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:08: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:08: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:06:08: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:08: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:08: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "29") (weapon "scattergun") +L 07/15/2025 - 13:06:08: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:06:08: "DD<6><[U:1:4]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "37") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:06:08: "DD<6><[U:1:4]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "0") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:06:08: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:08: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:08: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:08: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "13") (weapon "scattergun") +L 07/15/2025 - 13:06:08: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:08: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:08: "JJ<13><[U:1:10]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:06:09: "BB<10><[U:1:2]>" picked up item "ammopack_small" +L 07/15/2025 - 13:06:09: "KK<15><[U:1:11]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "70") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:09: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:09: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:09: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:09: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:09: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "24") (realdamage "13") (weapon "scattergun") +L 07/15/2025 - 13:06:09: "AA<3><[U:1:1]>" killed "KK<15><[U:1:11]>" with "scattergun" (attacker_position "3454 2124 576") (victim_position "4097 2044 592") +L 07/15/2025 - 13:06:09: "JJ<13><[U:1:10]>" triggered "kill assist" against "KK<15><[U:1:11]>" (assister_position "3928 1688 576") (attacker_position "3454 2124 576") (victim_position "4097 2044 592") +L 07/15/2025 - 13:06:09: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:09: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:09: "CC<5><[U:1:3]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "20") (weapon "scattergun") +L 07/15/2025 - 13:06:09: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "25") +L 07/15/2025 - 13:06:09: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:06:10: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "12") +L 07/15/2025 - 13:06:10: "JJ<13><[U:1:10]>" spawned as "scout" +L 07/15/2025 - 13:06:11: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "25") +L 07/15/2025 - 13:06:12: "KK<15><[U:1:11]>" say_team ":D" +L 07/15/2025 - 13:06:12: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "26") +L 07/15/2025 - 13:06:12: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "56") +L 07/15/2025 - 13:06:12: "EE<7><[U:1:5]>" triggered "empty_uber" +L 07/15/2025 - 13:06:12: "EE<7><[U:1:5]>" triggered "chargeended" (duration "7.9") +L 07/15/2025 - 13:06:12: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:12: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:12: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "5") (weapon "scattergun") +L 07/15/2025 - 13:06:12: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:12: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:12: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 13:06:13: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:13: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:13: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "0") (weapon "scattergun") +L 07/15/2025 - 13:06:13: "II<12><[U:1:9]>" spawned as "scout" +L 07/15/2025 - 13:06:13: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:13: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "9") +L 07/15/2025 - 13:06:13: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "4") +L 07/15/2025 - 13:06:13: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:06:13: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:13: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:13: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:13: "CC<5><[U:1:3]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "15") (weapon "scattergun") +L 07/15/2025 - 13:06:13: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:13: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:13: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "15") (weapon "scattergun") +L 07/15/2025 - 13:06:13: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:14: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:14: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:14: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "20") (weapon "scattergun") +L 07/15/2025 - 13:06:14: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:14: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:14: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "13") (weapon "scattergun") +L 07/15/2025 - 13:06:14: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:14: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:14: "CC<5><[U:1:3]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "8") (weapon "scattergun") +L 07/15/2025 - 13:06:14: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:14: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:14: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:14: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "26") (weapon "scattergun") +L 07/15/2025 - 13:06:15: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:15: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:15: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "9") (weapon "scattergun") +L 07/15/2025 - 13:06:15: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:15: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:16: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:16: "DD<6><[U:1:4]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "67") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:16: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:16: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:16: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:16: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:16: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:16: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:16: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:16: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:16: "GG<14><[U:1:7]>" changed role to "sniper" +L 07/15/2025 - 13:06:16: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "25") +L 07/15/2025 - 13:06:16: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:16: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:16: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:16: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "17") (weapon "scattergun") +L 07/15/2025 - 13:06:17: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:18: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:18: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:18: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:06:18: "CC<5><[U:1:3]>" picked up item "medkit_medium" (healing "63") +L 07/15/2025 - 13:06:18: "CC<5><[U:1:3]>" picked up item "ammopack_medium" +L 07/15/2025 - 13:06:18: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:18: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:18: "CC<5><[U:1:3]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "5") (weapon "scattergun") +L 07/15/2025 - 13:06:18: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:18: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "3") +L 07/15/2025 - 13:06:18: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:18: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:18: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "52") (weapon "scattergun") +L 07/15/2025 - 13:06:18: "II<12><[U:1:9]>" say_team "keep it up" +L 07/15/2025 - 13:06:18: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:18: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:18: "CC<5><[U:1:3]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "24") (weapon "scattergun") +L 07/15/2025 - 13:06:19: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:19: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:19: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "47") (realdamage "13") (weapon "scattergun") +L 07/15/2025 - 13:06:19: "JJ<13><[U:1:10]>" killed "CC<5><[U:1:3]>" with "scattergun" (attacker_position "2558 1018 576") (victim_position "2219 874 576") +L 07/15/2025 - 13:06:19: "AA<3><[U:1:1]>" triggered "kill assist" against "CC<5><[U:1:3]>" (assister_position "2426 1090 576") (attacker_position "2558 1018 576") (victim_position "2219 874 576") +L 07/15/2025 - 13:06:19: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:19: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "26") +L 07/15/2025 - 13:06:19: "LL<16><[U:1:12]>" picked up item "ammopack_small" +L 07/15/2025 - 13:06:19: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "25") +L 07/15/2025 - 13:06:20: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "14") +L 07/15/2025 - 13:06:20: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "7") +L 07/15/2025 - 13:06:20: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "22") +L 07/15/2025 - 13:06:20: "GG<14><[U:1:7]>" spawned as "sniper" +L 07/15/2025 - 13:06:21: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "1") +L 07/15/2025 - 13:06:21: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "19") +L 07/15/2025 - 13:06:21: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "26") +L 07/15/2025 - 13:06:22: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "3") +L 07/15/2025 - 13:06:22: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "14") +L 07/15/2025 - 13:06:22: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "9") +L 07/15/2025 - 13:06:22: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "24") +L 07/15/2025 - 13:06:23: "II<12><[U:1:9]>" say_team "sorry" +L 07/15/2025 - 13:06:23: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "17") +L 07/15/2025 - 13:06:23: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "7") +L 07/15/2025 - 13:06:24: "FF<8><[U:1:6]>" triggered "chargeready" +L 07/15/2025 - 13:06:24: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "2") +L 07/15/2025 - 13:06:24: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "21") +L 07/15/2025 - 13:06:25: "KK<15><[U:1:11]>" spawned as "demoman" +L 07/15/2025 - 13:06:25: "CC<5><[U:1:3]>" say_team "my fault" +L 07/15/2025 - 13:06:25: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "32") +L 07/15/2025 - 13:06:26: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "sniperrifle") +L 07/15/2025 - 13:06:26: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "26") +L 07/15/2025 - 13:06:27: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:27: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:27: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:27: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "34") +L 07/15/2025 - 13:06:28: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "25") +L 07/15/2025 - 13:06:28: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "1") +L 07/15/2025 - 13:06:28: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "1") +L 07/15/2025 - 13:06:29: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:06:29: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:06:29: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:06:29: "LL<16><[U:1:12]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "78") (weapon "quake_rl") +L 07/15/2025 - 13:06:29: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:06:29: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:29: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:29: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "18") (weapon "scattergun") +L 07/15/2025 - 13:06:30: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "26") +L 07/15/2025 - 13:06:30: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:06:30: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:06:30: "LL<16><[U:1:12]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "87") (weapon "quake_rl") +L 07/15/2025 - 13:06:30: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:06:31: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "8") +L 07/15/2025 - 13:06:32: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:06:32: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "26") +L 07/15/2025 - 13:06:33: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:06:33: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:06:33: "JJ<13><[U:1:10]>" spawned as "scout" +L 07/15/2025 - 13:06:33: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:06:33: "DD<6><[U:1:4]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "100") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:06:33: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:06:33: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "80") +L 07/15/2025 - 13:06:33: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:06:33: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:33: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:06:33: "LL<16><[U:1:12]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "103") (weapon "quake_rl") +L 07/15/2025 - 13:06:33: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:06:34: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:34: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:06:34: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:34: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:06:35: "DD<6><[U:1:4]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:06:35: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:35: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:35: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "48") (weapon "scattergun") +L 07/15/2025 - 13:06:35: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:06:35: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:06:35: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:06:35: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:06:35: "LL<16><[U:1:12]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "82") (realdamage "23") (weapon "quake_rl") +L 07/15/2025 - 13:06:35: "LL<16><[U:1:12]>" killed "DD<6><[U:1:4]>" with "quake_rl" (attacker_position "3704 1852 554") (victim_position "4144 1981 592") +L 07/15/2025 - 13:06:35: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:06:35: "HH<11><[U:1:8]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "79") (realdamage "12") (weapon "quake_rl") +L 07/15/2025 - 13:06:35: "HH<11><[U:1:8]>" killed "LL<16><[U:1:12]>" with "quake_rl" (attacker_position "3811 1829 854") (victim_position "3710 1837 546") +L 07/15/2025 - 13:06:35: "JJ<13><[U:1:10]>" triggered "kill assist" against "LL<16><[U:1:12]>" (assister_position "4205 1735 576") (attacker_position "3811 1829 854") (victim_position "3710 1837 546") +L 07/15/2025 - 13:06:36: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "3") +L 07/15/2025 - 13:06:36: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:06:36: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:37: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:06:37: "EE<7><[U:1:5]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "68") (weapon "crusaders_crossbow") +L 07/15/2025 - 13:06:37: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "57") +L 07/15/2025 - 13:06:37: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:38: "CC<5><[U:1:3]>" spawned as "scout" +L 07/15/2025 - 13:06:38: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:38: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:38: "II<12><[U:1:9]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "40") (weapon "scattergun") +L 07/15/2025 - 13:06:38: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:06:39: "AA<3><[U:1:1]>" picked up item "medkit_small" (healing "25") +L 07/15/2025 - 13:06:39: "AA<3><[U:1:1]>" picked up item "ammopack_small" +L 07/15/2025 - 13:06:39: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:39: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:39: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:39: "II<12><[U:1:9]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "9") (weapon "scattergun") +L 07/15/2025 - 13:06:40: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:06:40: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:41: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "25") +L 07/15/2025 - 13:06:42: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "24") +L 07/15/2025 - 13:06:43: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "21") +L 07/15/2025 - 13:06:43: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "5") +L 07/15/2025 - 13:06:44: "HH<11><[U:1:8]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:06:44: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "11") +L 07/15/2025 - 13:06:44: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "14") +L 07/15/2025 - 13:06:45: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:45: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:45: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:45: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "66") +L 07/15/2025 - 13:06:46: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "25") +L 07/15/2025 - 13:06:46: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "19") +L 07/15/2025 - 13:06:46: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "17") +L 07/15/2025 - 13:06:47: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:06:47: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "25") +L 07/15/2025 - 13:06:48: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "43") +L 07/15/2025 - 13:06:49: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:49: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:49: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:49: "II<12><[U:1:9]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 13:06:49: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:49: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:49: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 13:06:49: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "35") +L 07/15/2025 - 13:06:49: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "5") +L 07/15/2025 - 13:06:49: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:49: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:49: "II<12><[U:1:9]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:06:50: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:50: "AA<3><[U:1:1]>" picked up item "ammopack_small" +L 07/15/2025 - 13:06:50: "LL<16><[U:1:12]>" spawned as "soldier" +L 07/15/2025 - 13:06:51: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "16") +L 07/15/2025 - 13:06:52: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "5") +L 07/15/2025 - 13:06:52: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "9") +L 07/15/2025 - 13:06:52: "DD<6><[U:1:4]>" spawned as "demoman" +L 07/15/2025 - 13:06:52: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "16") +L 07/15/2025 - 13:06:53: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "11") +L 07/15/2025 - 13:06:53: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "6") +L 07/15/2025 - 13:06:54: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:54: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:54: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "26") +L 07/15/2025 - 13:06:54: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "41") +L 07/15/2025 - 13:06:54: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:06:55: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "2") +L 07/15/2025 - 13:06:55: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "19") +L 07/15/2025 - 13:06:55: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "20") +L 07/15/2025 - 13:06:55: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:06:56: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "6") +L 07/15/2025 - 13:06:57: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "8") +L 07/15/2025 - 13:06:57: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "26") +L 07/15/2025 - 13:06:58: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "2") +L 07/15/2025 - 13:06:58: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "24") +L 07/15/2025 - 13:06:58: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:06:58: "KK<15><[U:1:11]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "96") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:58: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:58: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:58: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:58: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:58: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "46") (weapon "scattergun") +L 07/15/2025 - 13:06:58: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:58: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:58: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "12") (weapon "scattergun") +L 07/15/2025 - 13:06:59: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:06:59: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "15") +L 07/15/2025 - 13:06:59: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:06:59: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:06:59: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "16") (weapon "scattergun") +L 07/15/2025 - 13:07:00: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:00: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:00: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "4") (weapon "scattergun") +L 07/15/2025 - 13:07:00: "LL<16><[U:1:12]>" picked up item "medkit_small" (healing "40") +L 07/15/2025 - 13:07:00: "LL<16><[U:1:12]>" picked up item "ammopack_small" +L 07/15/2025 - 13:07:00: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:07:00: "KK<15><[U:1:11]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "74") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:00: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:00: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:00: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:00: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:07:00: "HH<11><[U:1:8]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "42") (weapon "quake_rl") +L 07/15/2025 - 13:07:00: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:01: "KK<15><[U:1:11]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "34") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:01: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:01: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:01: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "23") +L 07/15/2025 - 13:07:01: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "25") +L 07/15/2025 - 13:07:01: "AA<3><[U:1:1]>" picked up item "ammopack_medium" +L 07/15/2025 - 13:07:02: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:02: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:07:02: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:02: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:02: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:02: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "14") (weapon "scattergun") +L 07/15/2025 - 13:07:02: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:07:02: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "18") +L 07/15/2025 - 13:07:02: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "sniperrifle") +L 07/15/2025 - 13:07:02: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:03: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:03: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:03: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "86") (weapon "scattergun") +L 07/15/2025 - 13:07:03: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:03: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:07:03: "LL<16><[U:1:12]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "82") (weapon "quake_rl") +L 07/15/2025 - 13:07:03: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:07:03: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "26") +L 07/15/2025 - 13:07:03: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:03: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:03: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:03: "JJ<13><[U:1:10]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "25") (weapon "scattergun") +L 07/15/2025 - 13:07:03: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "smg") +L 07/15/2025 - 13:07:03: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:03: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "smg") +L 07/15/2025 - 13:07:04: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "smg") +L 07/15/2025 - 13:07:04: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "smg") +L 07/15/2025 - 13:07:04: "GG<14><[U:1:7]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "11") (weapon "smg") +L 07/15/2025 - 13:07:04: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "smg") +L 07/15/2025 - 13:07:04: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:04: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "smg") +L 07/15/2025 - 13:07:04: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "smg") +L 07/15/2025 - 13:07:04: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:04: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "smg") +L 07/15/2025 - 13:07:04: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "smg") +L 07/15/2025 - 13:07:04: "GG<14><[U:1:7]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "11") (realdamage "4") (weapon "smg") +L 07/15/2025 - 13:07:04: "GG<14><[U:1:7]>" killed "LL<16><[U:1:12]>" with "smg" (attacker_position "3561 1291 583") (victim_position "3623 1028 566") +L 07/15/2025 - 13:07:04: "JJ<13><[U:1:10]>" triggered "kill assist" against "LL<16><[U:1:12]>" (assister_position "3787 826 576") (attacker_position "3561 1291 583") (victim_position "3623 1028 566") +L 07/15/2025 - 13:07:04: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:04: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "smg") +L 07/15/2025 - 13:07:04: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "smg") +L 07/15/2025 - 13:07:04: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "smg") +L 07/15/2025 - 13:07:04: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:04: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "37") +L 07/15/2025 - 13:07:04: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "smg") +L 07/15/2025 - 13:07:05: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:05: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:05: "AA<3><[U:1:1]>" triggered "damage" against "II<12><[U:1:9]>" (damage "51") (weapon "scattergun") +L 07/15/2025 - 13:07:05: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:05: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:05: "II<12><[U:1:9]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "21") (weapon "scattergun") +L 07/15/2025 - 13:07:05: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:05: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:05: "AA<3><[U:1:1]>" triggered "damage" against "II<12><[U:1:9]>" (damage "9") (weapon "scattergun") +L 07/15/2025 - 13:07:05: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "25") +L 07/15/2025 - 13:07:05: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "53") +L 07/15/2025 - 13:07:05: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "6") +L 07/15/2025 - 13:07:06: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:07:06: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "sniperrifle") +L 07/15/2025 - 13:07:06: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:06: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:06: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "16") +L 07/15/2025 - 13:07:06: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "8") +L 07/15/2025 - 13:07:06: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "9") +L 07/15/2025 - 13:07:06: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "9") +L 07/15/2025 - 13:07:06: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:07:06: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:06: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:06: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:07:06: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:07:06: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:07:06: "HH<11><[U:1:8]>" triggered "damage" against "II<12><[U:1:9]>" (damage "49") (weapon "quake_rl") +L 07/15/2025 - 13:07:07: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:07:07: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:07:07: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:07:07: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:07:07: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "pistol_scout") +L 07/15/2025 - 13:07:07: "II<12><[U:1:9]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "22") (weapon "pistol_scout") +L 07/15/2025 - 13:07:07: "II<12><[U:1:9]>" killed "GG<14><[U:1:7]>" with "pistol_scout" (attacker_position "3370 1400 578") (victim_position "3409 1422 629") +L 07/15/2025 - 13:07:07: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:07: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:07: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:07: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:07: "JJ<13><[U:1:10]>" triggered "damage" against "II<12><[U:1:9]>" (damage "27") (realdamage "16") (weapon "scattergun") +L 07/15/2025 - 13:07:07: "JJ<13><[U:1:10]>" killed "II<12><[U:1:9]>" with "scattergun" (attacker_position "3518 1201 583") (victim_position "3349 1412 577") +L 07/15/2025 - 13:07:07: "HH<11><[U:1:8]>" triggered "kill assist" against "II<12><[U:1:9]>" (assister_position "3492 1397 654") (attacker_position "3518 1201 583") (victim_position "3349 1412 577") +L 07/15/2025 - 13:07:07: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:07:07: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "26") +L 07/15/2025 - 13:07:07: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "26") +L 07/15/2025 - 13:07:08: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "12") +L 07/15/2025 - 13:07:08: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "13") +L 07/15/2025 - 13:07:08: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "8") +L 07/15/2025 - 13:07:09: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "59") +L 07/15/2025 - 13:07:09: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "7") +L 07/15/2025 - 13:07:09: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "28") +L 07/15/2025 - 13:07:09: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "17") +L 07/15/2025 - 13:07:10: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:10: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:10: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:10: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:10: "AA<3><[U:1:1]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:07:10: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "26") +L 07/15/2025 - 13:07:10: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "14") +L 07/15/2025 - 13:07:12: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "26") +L 07/15/2025 - 13:07:12: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:12: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:12: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "31") (weapon "scattergun") +L 07/15/2025 - 13:07:12: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:12: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:13: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:13: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:13: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "16") +L 07/15/2025 - 13:07:13: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "14") +L 07/15/2025 - 13:07:13: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "17") +L 07/15/2025 - 13:07:13: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:13: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:13: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:13: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:14: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "29") +L 07/15/2025 - 13:07:14: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "13") +L 07/15/2025 - 13:07:14: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:14: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:14: "DD<6><[U:1:4]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "73") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:14: "KK<15><[U:1:11]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "75") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:14: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:14: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:14: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:14: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:14: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:14: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:14: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:15: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:15: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:15: "JJ<13><[U:1:10]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:07:15: "JJ<13><[U:1:10]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:07:15: "JJ<13><[U:1:10]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 13:07:15: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "38") +L 07/15/2025 - 13:07:15: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "32") +L 07/15/2025 - 13:07:15: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:07:15: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "pistol_scout") +L 07/15/2025 - 13:07:15: "JJ<13><[U:1:10]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "9") (weapon "pistol_scout") +L 07/15/2025 - 13:07:15: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:07:16: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:07:16: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:07:16: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "5") +L 07/15/2025 - 13:07:16: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "7") +L 07/15/2025 - 13:07:16: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:07:16: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "pistol_scout") +L 07/15/2025 - 13:07:16: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "8") (weapon "pistol_scout") +L 07/15/2025 - 13:07:16: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:16: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:16: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:07:17: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:17: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:17: "AA<3><[U:1:1]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "19") (weapon "scattergun") +L 07/15/2025 - 13:07:17: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "18") +L 07/15/2025 - 13:07:17: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "8") +L 07/15/2025 - 13:07:17: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "25") +L 07/15/2025 - 13:07:17: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:17: "DD<6><[U:1:4]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "100") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:17: "DD<6><[U:1:4]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "50") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:17: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:17: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:17: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:07:17: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:07:17: "BB<10><[U:1:2]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "59") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:07:18: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "25") +L 07/15/2025 - 13:07:18: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "2") +L 07/15/2025 - 13:07:18: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "14") +L 07/15/2025 - 13:07:18: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:18: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "5") +L 07/15/2025 - 13:07:18: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:19: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:19: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:19: "AA<3><[U:1:1]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "30") (weapon "scattergun") +L 07/15/2025 - 13:07:19: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:07:19: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "10") +L 07/15/2025 - 13:07:19: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:07:19: "BB<10><[U:1:2]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "61") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:07:19: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:19: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:19: "AA<3><[U:1:1]>" triggered "damage" against "EE<7><[U:1:5]>" (damage "96") (realdamage "43") (weapon "scattergun") +L 07/15/2025 - 13:07:19: "AA<3><[U:1:1]>" triggered "medic_death" against "EE<7><[U:1:5]>" (healing "2529") (ubercharge "0") +L 07/15/2025 - 13:07:19: "EE<7><[U:1:5]>" triggered "medic_death_ex" (uberpct "77") +L 07/15/2025 - 13:07:19: "AA<3><[U:1:1]>" killed "EE<7><[U:1:5]>" with "scattergun" (attacker_position "1922 1506 704") (victim_position "1718 1536 704") +L 07/15/2025 - 13:07:19: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:19: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:20: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:07:20: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:07:20: "BB<10><[U:1:2]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "56") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:07:20: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:20: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:20: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:20: "AA<3><[U:1:1]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "36") (weapon "scattergun") +L 07/15/2025 - 13:07:21: "CC<5><[U:1:3]>" picked up item "medkit_small" (healing "25") +L 07/15/2025 - 13:07:21: "CC<5><[U:1:3]>" picked up item "ammopack_medium" +L 07/15/2025 - 13:07:22: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "11") +L 07/15/2025 - 13:07:22: "BB<10><[U:1:2]>" picked up item "ammopack_small" +L 07/15/2025 - 13:07:22: "II<12><[U:1:9]>" spawned as "scout" +L 07/15/2025 - 13:07:22: "LL<16><[U:1:12]>" spawned as "soldier" +L 07/15/2025 - 13:07:22: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "12") +L 07/15/2025 - 13:07:22: "AA<3><[U:1:1]>" picked up item "medkit_medium" (healing "63") +L 07/15/2025 - 13:07:23: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "24") +L 07/15/2025 - 13:07:23: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:23: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:23: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:23: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "38") (weapon "scattergun") +L 07/15/2025 - 13:07:24: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:24: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:24: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "15") (weapon "scattergun") +L 07/15/2025 - 13:07:24: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:24: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:24: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "5") (weapon "scattergun") +L 07/15/2025 - 13:07:24: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "4") +L 07/15/2025 - 13:07:24: "KK<15><[U:1:11]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "113") (realdamage "102") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:24: "KK<15><[U:1:11]>" killed "AA<3><[U:1:1]>" with "tf_projectile_pipe_remote" (attacker_position "1588 1615 480") (victim_position "1562 1347 480") +L 07/15/2025 - 13:07:24: "CC<5><[U:1:3]>" triggered "kill assist" against "AA<3><[U:1:1]>" (assister_position "1539 1755 472") (attacker_position "1588 1615 480") (victim_position "1562 1347 480") +L 07/15/2025 - 13:07:24: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "23") +L 07/15/2025 - 13:07:24: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:24: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:25: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:25: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:26: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:26: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:27: "GG<14><[U:1:7]>" changed role to "soldier" +L 07/15/2025 - 13:07:27: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:27: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:27: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:27: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "11") (weapon "scattergun") +L 07/15/2025 - 13:07:27: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:28: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:07:28: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:28: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:28: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "7") (weapon "scattergun") +L 07/15/2025 - 13:07:28: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:07:29: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:29: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:29: "CC<5><[U:1:3]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:07:29: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:07:29: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:07:29: "HH<11><[U:1:8]>" triggered "damage" against "II<12><[U:1:9]>" (damage "35") (weapon "quake_rl") +L 07/15/2025 - 13:07:29: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:29: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:29: "DD<6><[U:1:4]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "37") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:29: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:29: "DD<6><[U:1:4]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "100") (realdamage "49") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:29: "DD<6><[U:1:4]>" killed "CC<5><[U:1:3]>" with "tf_projectile_pipe" (attacker_position "1641 2386 768") (victim_position "764 1616 547") +L 07/15/2025 - 13:07:29: "FF<8><[U:1:6]>" triggered "kill assist" against "CC<5><[U:1:3]>" (assister_position "2072 2446 619") (attacker_position "1641 2386 768") (victim_position "764 1616 547") +L 07/15/2025 - 13:07:29: "DD<6><[U:1:4]>" triggered "revenge" against "CC<5><[U:1:3]>" +L 07/15/2025 - 13:07:29: "FF<8><[U:1:6]>" triggered "revenge" against "CC<5><[U:1:3]>" (assist "1") +L 07/15/2025 - 13:07:29: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:07:29: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "8") +L 07/15/2025 - 13:07:29: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:30: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "53") +L 07/15/2025 - 13:07:31: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:31: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:31: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:31: "BB<10><[U:1:2]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:07:31: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:07:31: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:31: "KK<15><[U:1:11]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "34") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:31: "KK<15><[U:1:11]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "32") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:31: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:31: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:31: "GG<14><[U:1:7]>" spawned as "soldier" +L 07/15/2025 - 13:07:31: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:31: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "19") +L 07/15/2025 - 13:07:32: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:32: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:32: "II<12><[U:1:9]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 13:07:32: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:32: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:07:33: "KK<15><[U:1:11]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "32") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:33: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:33: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:34: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "26") +L 07/15/2025 - 13:07:34: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:34: "KK<15><[U:1:11]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "50") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:34: "KK<15><[U:1:11]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "56") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:34: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:07:34: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:34: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:34: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:07:34: "BB<10><[U:1:2]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "51") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:07:34: "BB<10><[U:1:2]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "86") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:07:34: "BB<10><[U:1:2]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "56") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:07:34: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:34: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:34: "EE<7><[U:1:5]>" spawned as "medic" +L 07/15/2025 - 13:07:35: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "25") +L 07/15/2025 - 13:07:35: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:35: "EE<7><[U:1:5]>" triggered "empty_uber" +L 07/15/2025 - 13:07:35: "FF<8><[U:1:6]>" triggered "chargedeployed" (medigun "medigun") +L 07/15/2025 - 13:07:35: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:07:35: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:35: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:35: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:07:35: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:35: "KK<15><[U:1:11]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "100") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:36: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "24") +L 07/15/2025 - 13:07:36: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:36: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:36: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:36: "JJ<13><[U:1:10]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "32") (weapon "scattergun") +L 07/15/2025 - 13:07:36: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:36: "DD<6><[U:1:4]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:36: "DD<6><[U:1:4]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "100") (realdamage "65") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:36: "DD<6><[U:1:4]>" killed "BB<10><[U:1:2]>" with "tf_projectile_pipe" (attacker_position "1924 2568 610") (victim_position "2020 2421 576") +L 07/15/2025 - 13:07:36: "JJ<13><[U:1:10]>" triggered "kill assist" against "BB<10><[U:1:2]>" (assister_position "1732 2656 664") (attacker_position "1924 2568 610") (victim_position "2020 2421 576") +L 07/15/2025 - 13:07:36: "JJ<13><[U:1:10]>" triggered "domination" against "BB<10><[U:1:2]>" (assist "1") +L 07/15/2025 - 13:07:36: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:36: "KK<15><[U:1:11]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "0") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:36: "KK<15><[U:1:11]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "0") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:36: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:07:37: "DD<6><[U:1:4]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:07:37: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "26") +L 07/15/2025 - 13:07:38: "LL<16><[U:1:12]>" picked up item "medkit_medium" (healing "55") +L 07/15/2025 - 13:07:39: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:39: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:39: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:39: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:39: "JJ<13><[U:1:10]>" triggered "damage" against "II<12><[U:1:9]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 13:07:39: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:39: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:39: "II<12><[U:1:9]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:07:40: "GG<14><[U:1:7]>" picked up item "ammopack_small" +L 07/15/2025 - 13:07:40: "GG<14><[U:1:7]>" picked up item "medkit_small" (healing "40") +L 07/15/2025 - 13:07:41: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "26") +L 07/15/2025 - 13:07:42: "FF<8><[U:1:6]>" triggered "empty_uber" +L 07/15/2025 - 13:07:42: "FF<8><[U:1:6]>" triggered "chargeended" (duration "6.6") +L 07/15/2025 - 13:07:42: Team "Red" triggered "pointcaptured" (cp "3") (cpname "Red Mini-Spire") (numcappers "1") (player1 "JJ<13><[U:1:10]>") (position1 "1560 2225 774") +L 07/15/2025 - 13:07:42: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:07:43: "EE<7><[U:1:5]>" triggered "first_heal_after_spawn" (time "8.7") +L 07/15/2025 - 13:07:43: "HH<11><[U:1:8]>" picked up item "ammopack_medium" +L 07/15/2025 - 13:07:43: "FF<8><[U:1:6]>" picked up item "medkit_small" (healing "30") +L 07/15/2025 - 13:07:44: "DD<6><[U:1:4]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:07:44: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "25") +L 07/15/2025 - 13:07:45: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "24") +L 07/15/2025 - 13:07:45: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "16") +L 07/15/2025 - 13:07:45: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "6") +L 07/15/2025 - 13:07:46: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "11") +L 07/15/2025 - 13:07:46: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "19") +L 07/15/2025 - 13:07:46: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:07:46: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:07:46: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "80") +L 07/15/2025 - 13:07:47: "KK<15><[U:1:11]>" picked up item "ammopack_small" +L 07/15/2025 - 13:07:47: "AA<3><[U:1:1]>" spawned as "scout" +L 07/15/2025 - 13:07:47: "CC<5><[U:1:3]>" spawned as "scout" +L 07/15/2025 - 13:07:47: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "6") +L 07/15/2025 - 13:07:48: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:48: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:48: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:49: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "25") +L 07/15/2025 - 13:07:49: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:07:49: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:49: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:49: "II<12><[U:1:9]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:07:50: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "6") +L 07/15/2025 - 13:07:50: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:07:50: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:50: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:50: "II<12><[U:1:9]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:07:50: "II<12><[U:1:9]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:07:50: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:50: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:50: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "21") +L 07/15/2025 - 13:07:50: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "20") +L 07/15/2025 - 13:07:51: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "3") +L 07/15/2025 - 13:07:51: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "25") +L 07/15/2025 - 13:07:52: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "11") +L 07/15/2025 - 13:07:52: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:52: "KK<15><[U:1:11]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:07:52: "HH<11><[U:1:8]>" picked up item "ammopack_medium" +L 07/15/2025 - 13:07:52: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "11") +L 07/15/2025 - 13:07:53: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:53: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:53: "II<12><[U:1:9]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 13:07:54: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "15") +L 07/15/2025 - 13:07:54: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "26") +L 07/15/2025 - 13:07:55: "FF<8><[U:1:6]>" triggered "healed" against "DD<6><[U:1:4]>" (healing "10") +L 07/15/2025 - 13:07:55: "BB<10><[U:1:2]>" spawned as "soldier" +L 07/15/2025 - 13:07:55: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "25") +L 07/15/2025 - 13:07:55: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:55: "GG<14><[U:1:7]>" picked up item "medkit_small" (healing "19") +L 07/15/2025 - 13:07:55: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:07:56: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:07:56: "LL<16><[U:1:12]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "108") (weapon "quake_rl") +L 07/15/2025 - 13:07:56: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:56: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "10") +L 07/15/2025 - 13:07:56: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:56: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:56: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:07:56: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:57: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:07:57: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "1") +L 07/15/2025 - 13:07:57: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:57: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:07:57: "HH<11><[U:1:8]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "69") (weapon "quake_rl") +L 07/15/2025 - 13:07:57: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:57: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:57: "II<12><[U:1:9]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "29") (weapon "scattergun") +L 07/15/2025 - 13:07:57: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:57: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:07:57: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:07:57: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "86") +L 07/15/2025 - 13:07:58: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:58: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:58: "II<12><[U:1:9]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "59") (weapon "scattergun") +L 07/15/2025 - 13:07:58: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "2") +L 07/15/2025 - 13:07:58: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:58: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:07:58: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:07:58: "II<12><[U:1:9]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:07:58: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:07:59: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:07:59: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "32") +L 07/15/2025 - 13:07:59: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "24") +L 07/15/2025 - 13:07:59: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:07:59: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:07:59: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "pistol_scout") +L 07/15/2025 - 13:07:59: "II<12><[U:1:9]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "23") (weapon "pistol_scout") +L 07/15/2025 - 13:07:59: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:07:59: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:07:59: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:07:59: "EE<7><[U:1:5]>" picked up item "ammopack_small" +L 07/15/2025 - 13:07:59: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:59: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:59: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:07:59: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:59: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:07:59: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:08:00: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:00: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:00: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:08:00: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:00: "FF<8><[U:1:6]>" triggered "healed" against "AA<3><[U:1:1]>" (healing "60") +L 07/15/2025 - 13:08:00: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "28") +L 07/15/2025 - 13:08:00: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "4") +L 07/15/2025 - 13:08:00: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:00: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:00: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "pistol_scout") +L 07/15/2025 - 13:08:00: "II<12><[U:1:9]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "22") (weapon "pistol_scout") +L 07/15/2025 - 13:08:00: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:08:00: "GG<14><[U:1:7]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:08:00: "GG<14><[U:1:7]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "60") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:08:00: "GG<14><[U:1:7]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "55") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:08:00: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:00: "LL<16><[U:1:12]>" picked up item "medkit_medium" (healing "100") +L 07/15/2025 - 13:08:00: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:00: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:00: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "58") (weapon "scattergun") +L 07/15/2025 - 13:08:00: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:00: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:01: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:01: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:08:01: "GG<14><[U:1:7]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:08:01: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "5") +L 07/15/2025 - 13:08:01: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "11") +L 07/15/2025 - 13:08:01: "KK<15><[U:1:11]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "98") (realdamage "68") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:08:01: "KK<15><[U:1:11]>" killed "GG<14><[U:1:7]>" with "tf_projectile_pipe_remote" (attacker_position "619 -652 751") (victim_position "671 -110 606") +L 07/15/2025 - 13:08:01: "EE<7><[U:1:5]>" triggered "kill assist" against "GG<14><[U:1:7]>" (assister_position "672 -576 544") (attacker_position "619 -652 751") (victim_position "671 -110 606") +L 07/15/2025 - 13:08:01: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:01: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:08:01: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:08:01: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:01: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:01: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "7") (weapon "scattergun") +L 07/15/2025 - 13:08:01: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 13:08:01: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:02: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:02: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:02: "CC<5><[U:1:3]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "15") (weapon "scattergun") +L 07/15/2025 - 13:08:02: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:02: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:02: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:02: "JJ<13><[U:1:10]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "11") (weapon "scattergun") +L 07/15/2025 - 13:08:02: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:02: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:08:02: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:02: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "8") +L 07/15/2025 - 13:08:02: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:08:02: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:02: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:02: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:02: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:02: "AA<3><[U:1:1]>" triggered "damage" against "II<12><[U:1:9]>" (damage "15") (weapon "scattergun") +L 07/15/2025 - 13:08:02: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:02: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "pistol_scout") +L 07/15/2025 - 13:08:02: "II<12><[U:1:9]>" triggered "damage" against "DD<6><[U:1:4]>" (damage "24") (realdamage "10") (weapon "pistol_scout") +L 07/15/2025 - 13:08:02: "II<12><[U:1:9]>" killed "DD<6><[U:1:4]>" with "pistol_scout" (attacker_position "-22 733 465") (victim_position "-86 878 491") +L 07/15/2025 - 13:08:02: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:02: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:08:02: "DD<6><[U:1:4]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:08:02: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:02: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "24") +L 07/15/2025 - 13:08:03: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:03: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:03: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:03: "II<12><[U:1:9]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:08:03: "LL<16><[U:1:12]>" picked up item "medkit_medium" (healing "94") +L 07/15/2025 - 13:08:03: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "11") +L 07/15/2025 - 13:08:03: "KK<15><[U:1:11]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:08:03: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:08:03: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:08:03: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:04: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:08:04: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "19") +L 07/15/2025 - 13:08:04: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "20") +L 07/15/2025 - 13:08:04: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:04: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:05: "BB<10><[U:1:2]>" picked up item "medkit_small" (healing "40") +L 07/15/2025 - 13:08:05: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:08:05: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:05: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:08:05: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:08:05: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:08:05: "KK<15><[U:1:11]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "38") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:08:05: "KK<15><[U:1:11]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "32") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:08:05: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:08:05: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:08:05: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:08:05: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "1") +L 07/15/2025 - 13:08:05: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "10") +L 07/15/2025 - 13:08:05: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:08:05: "LL<16><[U:1:12]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "70") (weapon "quake_rl") +L 07/15/2025 - 13:08:05: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:06: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:08:06: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:08:06: "LL<16><[U:1:12]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "54") (weapon "quake_rl") +L 07/15/2025 - 13:08:06: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:06: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:06: "CC<5><[U:1:3]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "16") (weapon "scattergun") +L 07/15/2025 - 13:08:06: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:06: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:08:06: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:07: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:07: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:07: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:08:07: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:07: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "26") +L 07/15/2025 - 13:08:07: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:08:07: "LL<16><[U:1:12]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "68") (realdamage "26") (weapon "quake_rl") +L 07/15/2025 - 13:08:07: "LL<16><[U:1:12]>" killed "AA<3><[U:1:1]>" with "quake_rl" (attacker_position "-593 909 533") (victim_position "-249 713 624") +L 07/15/2025 - 13:08:07: "CC<5><[U:1:3]>" triggered "kill assist" against "AA<3><[U:1:1]>" (assister_position "-135 538 671") (attacker_position "-593 909 533") (victim_position "-249 713 624") +L 07/15/2025 - 13:08:07: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:08:07: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:07: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:07: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:08:07: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "12") +L 07/15/2025 - 13:08:07: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "1") +L 07/15/2025 - 13:08:07: "II<12><[U:1:9]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:08:08: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:08: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:08: "JJ<13><[U:1:10]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 13:08:08: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "11") +L 07/15/2025 - 13:08:09: "LL<16><[U:1:12]>" picked up item "ammopack_small" +L 07/15/2025 - 13:08:09: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:09: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 13:08:09: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "20") +L 07/15/2025 - 13:08:09: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "6") +L 07/15/2025 - 13:08:10: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:10: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:08:10: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:10: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "pistol_scout") +L 07/15/2025 - 13:08:10: "JJ<13><[U:1:10]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "8") (weapon "pistol_scout") +L 07/15/2025 - 13:08:10: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "26") +L 07/15/2025 - 13:08:10: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "20") +L 07/15/2025 - 13:08:10: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:10: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:10: "KK<15><[U:1:11]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "100") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:10: "KK<15><[U:1:11]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "50") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:11: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:11: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:11: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "pistol_scout") +L 07/15/2025 - 13:08:11: "JJ<13><[U:1:10]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "8") (weapon "pistol_scout") +L 07/15/2025 - 13:08:11: "HH<11><[U:1:8]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:08:11: "HH<11><[U:1:8]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "28") (weapon "quake_rl") +L 07/15/2025 - 13:08:11: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:11: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:11: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:11: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:08:11: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "2") +L 07/15/2025 - 13:08:11: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "4") +L 07/15/2025 - 13:08:11: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "6") +L 07/15/2025 - 13:08:11: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "pistol_scout") +L 07/15/2025 - 13:08:11: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "24") +L 07/15/2025 - 13:08:12: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:12: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:13: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:08:13: "JJ<13><[U:1:10]>" picked up item "medkit_small" (healing "25") +L 07/15/2025 - 13:08:13: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:08:13: "BB<10><[U:1:2]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "49") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:08:13: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "24") +L 07/15/2025 - 13:08:13: "JJ<13><[U:1:10]>" picked up item "ammopack_medium" +L 07/15/2025 - 13:08:13: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "5") +L 07/15/2025 - 13:08:13: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "6") +L 07/15/2025 - 13:08:13: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "3") +L 07/15/2025 - 13:08:14: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:14: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:14: "CC<5><[U:1:3]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "14") (weapon "scattergun") +L 07/15/2025 - 13:08:15: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:15: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:15: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 13:08:15: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "26") +L 07/15/2025 - 13:08:15: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:08:15: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:08:15: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "82") +L 07/15/2025 - 13:08:15: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:15: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:15: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:15: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "16") (weapon "scattergun") +L 07/15/2025 - 13:08:16: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "5") +L 07/15/2025 - 13:08:16: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "25") +L 07/15/2025 - 13:08:16: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:16: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:08:16: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:16: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "15") +L 07/15/2025 - 13:08:17: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "32") +L 07/15/2025 - 13:08:17: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "16") +L 07/15/2025 - 13:08:17: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "2") +L 07/15/2025 - 13:08:17: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:17: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:17: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:08:17: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:08:17: "BB<10><[U:1:2]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "42") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:08:17: "BB<10><[U:1:2]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "97") (realdamage "38") (weapon "tf_projectile_rocket") (crit "mini") +L 07/15/2025 - 13:08:17: "BB<10><[U:1:2]>" killed "HH<11><[U:1:8]>" with "tf_projectile_rocket" (attacker_position "1453 2159 897") (victim_position "2861 2442 586") +L 07/15/2025 - 13:08:17: "CC<5><[U:1:3]>" triggered "kill assist" against "HH<11><[U:1:8]>" (assister_position "1889 2471 771") (attacker_position "1453 2159 897") (victim_position "2861 2442 586") +L 07/15/2025 - 13:08:17: "CC<5><[U:1:3]>" triggered "domination" against "HH<11><[U:1:8]>" (assist "1") +L 07/15/2025 - 13:08:17: "JJ<13><[U:1:10]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:08:17: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:08:17: "GG<14><[U:1:7]>" changed role to "sniper" +L 07/15/2025 - 13:08:17: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:08:17: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "76") +L 07/15/2025 - 13:08:18: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "28") +L 07/15/2025 - 13:08:18: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "5") +L 07/15/2025 - 13:08:18: "GG<14><[U:1:7]>" spawned as "sniper" +L 07/15/2025 - 13:08:18: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:08:19: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "19") +L 07/15/2025 - 13:08:19: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "24") +L 07/15/2025 - 13:08:20: "EE<7><[U:1:5]>" triggered "healed" against "CC<5><[U:1:3]>" (healing "60") +L 07/15/2025 - 13:08:20: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "23") +L 07/15/2025 - 13:08:21: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:21: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:21: "II<12><[U:1:9]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:08:21: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "24") +L 07/15/2025 - 13:08:21: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:21: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:21: "II<12><[U:1:9]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "6") (weapon "scattergun") +L 07/15/2025 - 13:08:22: "II<12><[U:1:9]>" picked up item "ammopack_small" +L 07/15/2025 - 13:08:22: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "25") +L 07/15/2025 - 13:08:22: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "23") +L 07/15/2025 - 13:08:23: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "24") +L 07/15/2025 - 13:08:23: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "24") +L 07/15/2025 - 13:08:24: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "25") +L 07/15/2025 - 13:08:24: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "22") +L 07/15/2025 - 13:08:24: "GG<14><[U:1:7]>" changed role to "heavyweapons" +L 07/15/2025 - 13:08:24: "GG<14><[U:1:7]>" spawned as "heavyweapons" +L 07/15/2025 - 13:08:24: "KK<15><[U:1:11]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "38") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:08:24: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:08:24: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:08:25: "FF<8><[U:1:6]>" triggered "healed" against "JJ<13><[U:1:10]>" (healing "9") +L 07/15/2025 - 13:08:25: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "39") +L 07/15/2025 - 13:08:25: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:25: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:25: "JJ<13><[U:1:10]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "34") (weapon "scattergun") +L 07/15/2025 - 13:08:25: "EE<7><[U:1:5]>" picked up item "ammopack_small" +L 07/15/2025 - 13:08:26: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:26: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:26: "JJ<13><[U:1:10]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "21") (weapon "scattergun") +L 07/15/2025 - 13:08:26: "AA<3><[U:1:1]>" spawned as "scout" +L 07/15/2025 - 13:08:26: "DD<6><[U:1:4]>" spawned as "demoman" +L 07/15/2025 - 13:08:26: Team "Blue" triggered "pointcaptured" (cp "3") (cpname "Red Mini-Spire") (numcappers "1") (player1 "CC<5><[U:1:3]>") (position1 "1792 2171 768") +L 07/15/2025 - 13:08:27: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:08:27: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:27: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:27: "JJ<13><[U:1:10]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "9") (weapon "scattergun") +L 07/15/2025 - 13:08:27: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:08:27: "LL<16><[U:1:12]>" picked up item "medkit_small" (healing "40") +L 07/15/2025 - 13:08:27: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:28: "KK<15><[U:1:11]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "72") (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:08:28: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:28: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:28: "II<12><[U:1:9]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:08:28: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:08:28: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe_remote") +L 07/15/2025 - 13:08:28: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "12") +L 07/15/2025 - 13:08:29: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:29: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:30: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:08:30: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:30: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:30: "GG<14><[U:1:7]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "3") (weapon "minigun") +L 07/15/2025 - 13:08:30: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:30: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:30: "JJ<13><[U:1:10]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:30: "JJ<13><[U:1:10]>" triggered "damage" against "II<12><[U:1:9]>" (damage "101") (weapon "scattergun") +L 07/15/2025 - 13:08:30: "GG<14><[U:1:7]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "3") (weapon "minigun") +L 07/15/2025 - 13:08:30: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:30: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:30: "CC<5><[U:1:3]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "28") (weapon "scattergun") +L 07/15/2025 - 13:08:30: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:30: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:30: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:08:31: "GG<14><[U:1:7]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "5") (weapon "minigun") +L 07/15/2025 - 13:08:31: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:31: "JJ<13><[U:1:10]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:31: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:08:31: "LL<16><[U:1:12]>" triggered "damage" against "JJ<13><[U:1:10]>" (damage "99") (realdamage "8") (weapon "quake_rl") +L 07/15/2025 - 13:08:31: "LL<16><[U:1:12]>" killed "JJ<13><[U:1:10]>" with "quake_rl" (attacker_position "3213 1949 576") (victim_position "3488 1722 484") +L 07/15/2025 - 13:08:31: "CC<5><[U:1:3]>" triggered "kill assist" against "JJ<13><[U:1:10]>" (assister_position "2915 1737 576") (attacker_position "3213 1949 576") (victim_position "3488 1722 484") +L 07/15/2025 - 13:08:31: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:08:31: "GG<14><[U:1:7]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "5") (weapon "minigun") +L 07/15/2025 - 13:08:31: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:08:31: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:31: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:31: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:31: "AA<3><[U:1:1]>" triggered "damage" against "II<12><[U:1:9]>" (damage "7") (weapon "scattergun") +L 07/15/2025 - 13:08:31: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:31: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:31: "II<12><[U:1:9]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:08:31: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "10") +L 07/15/2025 - 13:08:31: "GG<14><[U:1:7]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "8") (weapon "minigun") +L 07/15/2025 - 13:08:32: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:32: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:32: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "18") (weapon "scattergun") +L 07/15/2025 - 13:08:32: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:32: "GG<14><[U:1:7]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "7") (weapon "minigun") +L 07/15/2025 - 13:08:32: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:08:32: "GG<14><[U:1:7]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "7") (weapon "minigun") +L 07/15/2025 - 13:08:32: "GG<14><[U:1:7]>" triggered "damage" against "BB<10><[U:1:2]>" (damage "7") (weapon "minigun") +L 07/15/2025 - 13:08:32: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 13:08:32: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "maxgun") +L 07/15/2025 - 13:08:32: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "9") (weapon "maxgun") +L 07/15/2025 - 13:08:32: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:08:32: "BB<10><[U:1:2]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "67") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:08:32: "BB<10><[U:1:2]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "27") (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:08:32: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 13:08:32: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "maxgun") +L 07/15/2025 - 13:08:32: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "9") (weapon "maxgun") +L 07/15/2025 - 13:08:33: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 13:08:33: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 13:08:33: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 13:08:33: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "maxgun") +L 07/15/2025 - 13:08:33: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "10") (weapon "maxgun") +L 07/15/2025 - 13:08:33: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:33: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 13:08:33: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:33: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:33: "II<12><[U:1:9]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "3") (weapon "scattergun") +L 07/15/2025 - 13:08:33: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:08:33: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 13:08:33: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "maxgun") +L 07/15/2025 - 13:08:33: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "10") (weapon "maxgun") +L 07/15/2025 - 13:08:33: "GG<14><[U:1:7]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "6") (weapon "minigun") +L 07/15/2025 - 13:08:33: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 13:08:33: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "maxgun") +L 07/15/2025 - 13:08:33: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "10") (weapon "maxgun") +L 07/15/2025 - 13:08:33: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:33: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:33: "AA<3><[U:1:1]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "13") (weapon "scattergun") +L 07/15/2025 - 13:08:33: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "maxgun") +L 07/15/2025 - 13:08:34: "GG<14><[U:1:7]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "11") (weapon "minigun") +L 07/15/2025 - 13:08:34: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:34: "GG<14><[U:1:7]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "5") (weapon "minigun") +L 07/15/2025 - 13:08:34: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:34: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:34: "II<12><[U:1:9]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:08:34: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:08:34: "HH<11><[U:1:8]>" spawned as "soldier" +L 07/15/2025 - 13:08:34: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:34: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:34: "AA<3><[U:1:1]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "11") (weapon "scattergun") +L 07/15/2025 - 13:08:34: "LL<16><[U:1:12]>" triggered "shot_hit" (weapon "quake_rl") +L 07/15/2025 - 13:08:34: "LL<16><[U:1:12]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "39") (weapon "quake_rl") +L 07/15/2025 - 13:08:34: "LL<16><[U:1:12]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "38") (weapon "quake_rl") +L 07/15/2025 - 13:08:34: "LL<16><[U:1:12]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "87") (weapon "quake_rl") +L 07/15/2025 - 13:08:34: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "26") +L 07/15/2025 - 13:08:35: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "25") +L 07/15/2025 - 13:08:35: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:08:36: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:36: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "24") +L 07/15/2025 - 13:08:36: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:36: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:36: "AA<3><[U:1:1]>" triggered "damage" against "KK<15><[U:1:11]>" (damage "9") (weapon "scattergun") +L 07/15/2025 - 13:08:36: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:36: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:36: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:36: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "7") (weapon "scattergun") +L 07/15/2025 - 13:08:37: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:37: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:37: "II<12><[U:1:9]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:08:37: "AA<3><[U:1:1]>" spawned as "scout" +L 07/15/2025 - 13:08:37: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:08:37: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:08:37: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:37: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:37: "II<12><[U:1:9]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:08:38: "GG<14><[U:1:7]>" triggered "damage" against "II<12><[U:1:9]>" (damage "10") (weapon "minigun") +L 07/15/2025 - 13:08:38: "FF<8><[U:1:6]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:08:38: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "91") +L 07/15/2025 - 13:08:38: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "21") +L 07/15/2025 - 13:08:38: "LL<16><[U:1:12]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:08:38: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:38: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:38: "II<12><[U:1:9]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:08:38: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:08:39: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:08:39: "EE<7><[U:1:5]>" triggered "healed" against "LL<16><[U:1:12]>" (healing "12") +L 07/15/2025 - 13:08:39: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:39: "FF<8><[U:1:6]>" triggered "healed" against "GG<14><[U:1:7]>" (healing "26") +L 07/15/2025 - 13:08:39: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:39: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:39: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "14") (weapon "scattergun") +L 07/15/2025 - 13:08:39: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:40: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:40: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:40: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "4") (weapon "scattergun") +L 07/15/2025 - 13:08:40: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:08:40: "CC<5><[U:1:3]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "4") (weapon "scattergun") +L 07/15/2025 - 13:08:40: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:40: "EE<7><[U:1:5]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:08:40: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:40: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:40: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "7") (weapon "scattergun") +L 07/15/2025 - 13:08:40: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:40: "KK<15><[U:1:11]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "100") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:40: "KK<15><[U:1:11]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "50") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:41: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:41: "EE<7><[U:1:5]>" triggered "shot_hit" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:08:41: "EE<7><[U:1:5]>" triggered "healed" against "BB<10><[U:1:2]>" (healing "129") +L 07/15/2025 - 13:08:41: "GG<14><[U:1:7]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "9") (weapon "minigun") +L 07/15/2025 - 13:08:41: "LL<16><[U:1:12]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "65") (weapon "unique_pickaxe_escape") +L 07/15/2025 - 13:08:41: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:41: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:41: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "48") (weapon "scattergun") +L 07/15/2025 - 13:08:41: "GG<14><[U:1:7]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "7") (weapon "minigun") +L 07/15/2025 - 13:08:41: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:41: "GG<14><[U:1:7]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "14") (weapon "minigun") +L 07/15/2025 - 13:08:41: "GG<14><[U:1:7]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "15") (weapon "minigun") +L 07/15/2025 - 13:08:42: "CC<5><[U:1:3]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:42: "CC<5><[U:1:3]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:42: "CC<5><[U:1:3]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "7") (weapon "scattergun") +L 07/15/2025 - 13:08:42: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:08:42: "GG<14><[U:1:7]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "12") (weapon "minigun") +L 07/15/2025 - 13:08:42: "LL<16><[U:1:12]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "65") (weapon "unique_pickaxe_escape") +L 07/15/2025 - 13:08:42: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:42: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:42: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "24") (weapon "scattergun") +L 07/15/2025 - 13:08:42: "FF<8><[U:1:6]>" triggered "shot_fired" (weapon "crusaders_crossbow") +L 07/15/2025 - 13:08:42: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:08:42: "GG<14><[U:1:7]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "5") (weapon "minigun") +L 07/15/2025 - 13:08:42: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:42: "KK<15><[U:1:11]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "55") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:42: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:43: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:43: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:43: "AA<3><[U:1:1]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "23") (weapon "scattergun") +L 07/15/2025 - 13:08:43: "HH<11><[U:1:8]>" triggered "shot_fired" (weapon "quake_rl") +L 07/15/2025 - 13:08:43: "GG<14><[U:1:7]>" triggered "damage" against "CC<5><[U:1:3]>" (damage "5") (realdamage "2") (weapon "minigun") +L 07/15/2025 - 13:08:43: "GG<14><[U:1:7]>" killed "CC<5><[U:1:3]>" with "minigun" (attacker_position "3743 1169 576") (victim_position "3212 1892 641") +L 07/15/2025 - 13:08:43: "AA<3><[U:1:1]>" triggered "kill assist" against "CC<5><[U:1:3]>" (assister_position "3234 1568 480") (attacker_position "3743 1169 576") (victim_position "3212 1892 641") +L 07/15/2025 - 13:08:43: "GG<14><[U:1:7]>" triggered "revenge" against "CC<5><[U:1:3]>" +L 07/15/2025 - 13:08:43: "LL<16><[U:1:12]>" triggered "damage" against "GG<14><[U:1:7]>" (damage "65") (realdamage "44") (weapon "unique_pickaxe_escape") +L 07/15/2025 - 13:08:43: "LL<16><[U:1:12]>" killed "GG<14><[U:1:7]>" with "unique_pickaxe_escape" (attacker_position "3727 1103 576") (victim_position "3741 1158 576") +L 07/15/2025 - 13:08:43: "KK<15><[U:1:11]>" triggered "kill assist" against "GG<14><[U:1:7]>" (assister_position "3588 2070 576") (attacker_position "3727 1103 576") (victim_position "3741 1158 576") +L 07/15/2025 - 13:08:43: "KK<15><[U:1:11]>" triggered "domination" against "GG<14><[U:1:7]>" (assist "1") +L 07/15/2025 - 13:08:43: "LL<16><[U:1:12]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:08:43: "BB<10><[U:1:2]>" triggered "shot_fired" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:08:43: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "19") +L 07/15/2025 - 13:08:43: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:43: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:44: "II<12><[U:1:9]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:44: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:44: "II<12><[U:1:9]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "10") (weapon "scattergun") +L 07/15/2025 - 13:08:44: "EE<7><[U:1:5]>" triggered "healed" against "KK<15><[U:1:11]>" (healing "24") +L 07/15/2025 - 13:08:45: "KK<15><[U:1:11]>" triggered "shot_hit" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:45: "KK<15><[U:1:11]>" triggered "damage" against "HH<11><[U:1:8]>" (damage "30") (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:45: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:45: "AA<3><[U:1:1]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:45: "AA<3><[U:1:1]>" triggered "damage" against "LL<16><[U:1:12]>" (damage "57") (realdamage "44") (weapon "scattergun") (crit "mini") +L 07/15/2025 - 13:08:45: "AA<3><[U:1:1]>" killed "LL<16><[U:1:12]>" with "scattergun" (attacker_position "3005 1553 572") (victim_position "3506 1196 583") +L 07/15/2025 - 13:08:45: "AA<3><[U:1:1]>" triggered "revenge" against "LL<16><[U:1:12]>" +L 07/15/2025 - 13:08:46: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "11") +L 07/15/2025 - 13:08:46: "KK<15><[U:1:11]>" triggered "shot_fired" (weapon "tf_projectile_pipe") +L 07/15/2025 - 13:08:46: "AA<3><[U:1:1]>" triggered "shot_fired" (weapon "scattergun") +L 07/15/2025 - 13:08:46: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "13") +L 07/15/2025 - 13:08:46: Team "Blue" triggered "pointcaptured" (cp "4") (cpname "Red Final Point") (numcappers "3") (player1 "BB<10><[U:1:2]>") (position1 "3652 1385 576") (player2 "II<12><[U:1:9]>") (position2 "3577 1325 583") (player3 "KK<15><[U:1:11]>") (position3 "3531 1344 583") +L 07/15/2025 - 13:08:46: World triggered "Round_Win" (winner "Blue") +L 07/15/2025 - 13:08:46: World triggered "Round_Length" (seconds "237.21") +L 07/15/2025 - 13:08:46: Team "Red" current score "0" with "5" players +L 07/15/2025 - 13:08:46: Team "Blue" current score "5" with "6" players +L 07/15/2025 - 13:08:46: "EE<7><[U:1:5]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:08:46: "GG<14><[U:1:7]>" changed role to "soldier" +L 07/15/2025 - 13:08:47: "KK<15><[U:1:11]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:08:47: "BB<10><[U:1:2]>" triggered "shot_hit" (weapon "tf_projectile_rocket") +L 07/15/2025 - 13:08:47: "BB<10><[U:1:2]>" triggered "damage" against "AA<3><[U:1:1]>" (damage "270") (realdamage "75") (weapon "tf_projectile_rocket") (crit "crit") +L 07/15/2025 - 13:08:47: "BB<10><[U:1:2]>" killed "AA<3><[U:1:1]>" with "tf_projectile_rocket" (attacker_position "3598 1412 576") (victim_position "3484 1318 583") +L 07/15/2025 - 13:08:47: "FF<8><[U:1:6]>" triggered "healed" against "HH<11><[U:1:8]>" (healing "2") +L 07/15/2025 - 13:08:47: "II<12><[U:1:9]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:08:51: "II<12><[U:1:9]>" triggered "shot_hit" (weapon "scattergun") +L 07/15/2025 - 13:08:51: "II<12><[U:1:9]>" triggered "damage" against "FF<8><[U:1:6]>" (damage "180") (realdamage "150") (weapon "scattergun") (crit "crit") +L 07/15/2025 - 13:08:51: "II<12><[U:1:9]>" triggered "medic_death" against "FF<8><[U:1:6]>" (healing "2955") (ubercharge "0") +L 07/15/2025 - 13:08:51: "II<12><[U:1:9]>" killed "FF<8><[U:1:6]>" with "scattergun" (attacker_position "4438 1297 576") (victim_position "4456 1462 576") +L 07/15/2025 - 13:08:51: "II<12><[U:1:9]>" picked up item "tf_ammo_pack" +L 07/15/2025 - 13:08:52: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "37") +L 07/15/2025 - 13:08:53: "EE<7><[U:1:5]>" triggered "healed" against "II<12><[U:1:9]>" (healing "60") +L 07/15/2025 - 13:09:03: World triggered "Game_Over" reason "Reached Win Limit" +L 07/15/2025 - 13:09:03: Team "Red" final score "0" with "1" players +L 07/15/2025 - 13:09:03: Team "Blue" final score "5" with "1" players +L 07/15/2025 - 13:09:03: Team "BLUE" triggered "Intermission_Win_Limit" +L 07/15/2025 - 13:09:03: "JJ<13><[U:1:10]>" spawned as "scout" +L 07/15/2025 - 13:09:03: "LL<16><[U:1:12]>" spawned as "soldier" +L 07/15/2025 - 13:09:03: "LL<16><[U:1:12]>" spawned as "soldier" +L 07/15/2025 - 13:09:03: "JJ<13><[U:1:10]>" spawned as "scout" \ No newline at end of file diff --git a/logstf/README.md b/logstf/README.md index a25abc1..3389a50 100644 --- a/logstf/README.md +++ b/logstf/README.md @@ -2,7 +2,7 @@ Features: -- **Note:** Requires the [SteamWorks](http://users.alliedmods.net/~kyles/builds/SteamWorks/) ([mirror](https://github.com/hexa-core-eu/SteamWorks/releases)) extension, or the cURL extension. +- **Note:** Requires the [SteamWorks](http://users.alliedmods.net/~kyles/builds/SteamWorks/) ([mirror](https://github.com/hexa-core-eu/SteamWorks/releases)) extension, or the [cURL extension](https://github.com/sapphonie/SM-neocurl-ext/releases). - Automatically uploads logs to [logs.tf](https://logs.tf) - You can see the logs in-game by typing `!logs` or `.ss` - Uploads logs after each round (the log will be updated on logs.tf after each round), so you can use `!logs`/`.ss` after each round diff --git a/logstf/logstf.sp b/logstf/logstf.sp index e29ce53..cacba2b 100644 --- a/logstf/logstf.sp +++ b/logstf/logstf.sp @@ -116,10 +116,14 @@ Release notes: ---- 2.6.4 (16/11/2024) ---- - Fixed some logs having the wrong score count on logs.tf + ---- 2.6.5 (18/03/2025) ---- - logs.tf html motd now highlights the client's user +---- 2.6.6 (11/07/2025) ---- +- Updated code to be compatible with SourceMod 1.12 + TODO: - Some people run multiple instances of the same server (located in the same directory). This is a problem, because they all write to the same logstf.log file. Make the logstf.log and -partial files have dynamic names, and don't forget to clean them up. @@ -129,6 +133,7 @@ TODO: */ #pragma semicolon 1 +#pragma newdecls required #include #include @@ -141,9 +146,8 @@ TODO: #undef REQUIRE_PLUGIN #include - -#define PLUGIN_VERSION "2.6.5" -#define UPDATE_URL "http://sourcemod.krus.dk/logstf/update.txt" +#define PLUGIN_VERSION "2.6.6" +#define UPDATE_URL "https://sourcemod.krus.dk/logstf/update.txt" #define LOG_PATH "logstf.log" #define PLOG_PATH "logstf-partial.log" @@ -151,8 +155,6 @@ TODO: #define LOG_FLUSHCNT 100 #define LOG_BUFFERCNT 150 -#pragma newdecls required - public Plugin myinfo = { name = "Logs.TF Uploader", author = "F2", @@ -174,16 +176,16 @@ bool g_bIsUploading; int g_iUploadAttempt; int g_iPlayersInMatch; -Handle g_hCvarHostname, - g_hCvarRedTeamName, - g_hCvarBlueTeamName, - g_hCvarLogsDir, - g_hCvarApikey, - g_hCvarTitle, - g_hCvarAutoUpload, - g_hCvarMidGameUpload, - g_hCvarMidGameNotice, - g_hCvarSuppressChat; +ConVar g_hCvarHostname, + g_hCvarRedTeamName, + g_hCvarBlueTeamName, + g_hCvarLogsDir, + g_hCvarApikey, + g_hCvarTitle, + g_hCvarAutoUpload, + g_hCvarMidGameUpload, + g_hCvarMidGameNotice, + g_hCvarSuppressChat; char g_sLastLogURL[128]; char g_sCachedHostname[64]; @@ -197,7 +199,7 @@ bool g_bIsPartialUpload; Handle g_hTimerUploadPartialLog; char g_sCurrentLogID[32]; bool g_bReuploadASAP; -bool g_bPartialUploadNotice[TFMAXPLAYERS+1]; // true if the player should receive a Partial Upload notice upon death +bool g_bPartialUploadNotice[TFMAXPLAYERS + 1]; // true if the player should receive a Partial Upload notice upon death bool g_bFirstPartialUploaded; bool g_bDisableSS; @@ -206,27 +208,27 @@ public void OnPluginStart() { // Set up auto updater if (LibraryExists("updater")) Updater_AddPlugin(UPDATE_URL); - + // Check for HTTP extension AnyHttp.Require(); - + // Match.inc Match_OnPluginStart(); - + // Hook GameLog AddGameLogHook(GameLog); - + // A player says something // Purpose: When an admin says !ul then upload logs and suppress the message // Purpose: React when someone says .ss RegConsoleCmd("say", Command_say); - + // Remember handles to some cvars g_hCvarHostname = FindConVar("hostname"); g_hCvarRedTeamName = FindConVar("mp_tournament_redteamname"); g_hCvarBlueTeamName = FindConVar("mp_tournament_blueteamname"); g_hCvarLogsDir = FindConVar("sv_logsdir"); - + // Create LogsTF cvars g_hCvarApikey = CreateConVar("logstf_apikey", "", "Your logs.tf API key", FCVAR_PROTECTED); g_hCvarTitle = CreateConVar("logstf_title", "{server}: {blu} vs {red}", "Title to use on logs.tf", FCVAR_NONE); @@ -239,22 +241,22 @@ public void OnPluginStart() { HookEvent("teamplay_round_win", Event_RoundEnd); HookEvent("teamplay_round_stalemate", Event_RoundEnd); HookEvent("player_death", Event_PlayerDeath); - + // Make it possible for other plugins to get notified when a log has been uploaded g_hLogUploaded = new GlobalForward("LogUploaded", ET_Ignore, Param_Cell, Param_String, Param_String); - + // Let other plugins block log lines g_hBlockLogLine = new GlobalForward("BlockLogLine", ET_Event, Param_String); - + // Remember the plugin version FormatEx(g_sPluginVersion, sizeof(g_sPluginVersion), "LogsTF %s", PLUGIN_VERSION); - + // Detect if Sizzling Stats is installed (if so, disable .ss) Handle sizz_stats_version = FindConVar("sizz_stats_version"); if (sizz_stats_version != null) { g_bDisableSS = true; } - + // Simulate a map start OnMapStart(); } @@ -279,7 +281,7 @@ public void OnPluginEnd() { char path[64]; GetLogPath(LOG_PATH, path, sizeof(path)); DeleteFile(path); - CloseHandle(g_hLogUploaded); + delete g_hLogUploaded; } @@ -291,7 +293,7 @@ public void OnPluginEnd() { void StartMatch() { FlushLog(); g_sLastLogURL = ""; // Avoid people typing .ss towards the end of the match, only to show the old stats - + g_iPlayersInMatch = 0; for (int client = 1; client <= MaxClients; client++) { if (!IsRealPlayer(client)) @@ -299,7 +301,7 @@ void StartMatch() { TFTeam team = TF2_GetClientTeam(client); if (team == TFTeam_Red || team == TFTeam_Blue) g_iPlayersInMatch++; - + // Write "changed role to" log lines to the log, such that logs.tf can calculate the "class play-time" correctly. char playerName[64]; char playerSteamID[64]; @@ -309,14 +311,14 @@ void StartMatch() { GetPlayerTeamStr(GetClientTeam(client), playerTeam, sizeof(playerTeam)); LogToGame("\"%s<%i><%s><%s>\" changed role to \"%s\"", playerName, GetClientUserId(client), playerSteamID, playerTeam, g_sClassNamesLower[TF2_GetPlayerClass(client)]); } - + // Clear the log file and make sure it exists char path[64]; GetLogPath(LOG_PATH, path, sizeof(path)); File file = OpenFile(path, "w"); file.Close(); g_bLogReady = false; - + // Set up Partial Upload // It is too much of a performance hit to upload regularly. Only do it at the end of each round. //g_hTimerUploadPartialLog = CreateTimer(120.0, Timer_UploadPartialLog, _, TIMER_FLAG_NO_MAPCHANGE | TIMER_REPEAT); @@ -324,30 +326,30 @@ void StartMatch() { g_bReuploadASAP = false; g_bFirstPartialUploaded = false; Array_Fill(g_bPartialUploadNotice, sizeof(g_bPartialUploadNotice), false); - + // Cache the current match values, in case the map is about to change CacheMatchValues(); } void ResetMatch() { if (g_hTimerUploadPartialLog != null) { - CloseHandle(g_hTimerUploadPartialLog); + delete g_hTimerUploadPartialLog; g_hTimerUploadPartialLog = null; } - + FlushLog(); } void EndMatch(bool endedMidgame) { if (g_hTimerUploadPartialLog != null) { - CloseHandle(g_hTimerUploadPartialLog); + delete g_hTimerUploadPartialLog; g_hTimerUploadPartialLog = null; } - + g_bLogReady = true; g_iUploadAttempt = 1; - - int autoupload = GetConVarInt(g_hCvarAutoUpload); + + int autoupload = g_hCvarAutoUpload.IntValue; if (autoupload == 1) { if (g_iPlayersInMatch >= 4 && GetEngineTime() - g_fMatchStartTime >= 90) { UploadLog(false); @@ -362,14 +364,14 @@ void EndMatch(bool endedMidgame) { } void CacheMatchValues() { - GetConVarString(g_hCvarHostname, g_sCachedHostname, sizeof(g_sCachedHostname)); - GetConVarString(g_hCvarBlueTeamName, g_sCachedBluTeamName, sizeof(g_sCachedBluTeamName)); - GetConVarString(g_hCvarRedTeamName, g_sCachedRedTeamName, sizeof(g_sCachedRedTeamName)); + g_hCvarHostname.GetString(g_sCachedHostname, sizeof(g_sCachedHostname)); + g_hCvarBlueTeamName.GetString(g_sCachedBluTeamName, sizeof(g_sCachedBluTeamName)); + g_hCvarRedTeamName.GetString(g_sCachedRedTeamName, sizeof(g_sCachedRedTeamName)); String_Trim(g_sCachedHostname, g_sCachedHostname, sizeof(g_sCachedHostname)); String_Trim(g_sCachedBluTeamName, g_sCachedBluTeamName, sizeof(g_sCachedBluTeamName)); String_Trim(g_sCachedRedTeamName, g_sCachedRedTeamName, sizeof(g_sCachedRedTeamName)); GetCurrentMap(g_sCachedMap, sizeof(g_sCachedMap)); - + // Remove last word in hostname int spacepos = -1; for (int i = strlen(g_sCachedHostname) - 1; i >= 17; i--) { @@ -405,24 +407,23 @@ void AnnounceLogReady() { // ----------------------------------- // Partial Upload (Midgame Logs) // ----------------------------------- - -public Action Event_RoundEnd(Handle event, const char[] name, bool dontBroadcast) { - if (GetConVarInt(g_hCvarMidGameUpload) <= 0) +public Action Event_RoundEnd(Event event, const char[] name, bool dontBroadcast) { + if (g_hCvarMidGameUpload.IntValue <= 0) return Plugin_Continue; - + // Don't upload if the map is about to end int timeleft = GetTimeLeft(); if (timeleft != -1 && timeleft < 15) return Plugin_Continue; - + if (!g_bInMatch) return Plugin_Continue; - - int autoupload = GetConVarInt(g_hCvarAutoUpload); + + int autoupload = g_hCvarAutoUpload.IntValue; bool shouldUpload = (autoupload == 1 && g_iPlayersInMatch >= 4 && GetEngineTime() - g_fMatchStartTime >= 90) || (autoupload == 2); if (!shouldUpload) return Plugin_Continue; - + // Make a timer to be sure the relevant log lines have been written CreateTimer(0.1, Timer_UploadPartialLog, _, TIMER_FLAG_NO_MAPCHANGE); @@ -433,20 +434,20 @@ public Action Timer_UploadPartialLog(Handle timer) { // Only upload a partial log if the match is still running. if (!g_bInMatch) return Plugin_Stop; - + // If the match is about to end, then don't do a partial upload now. It will cause an "updating too fast" error from logs.tf. if (IsWinConditionMet()) return Plugin_Stop; - + UploadLog(true); return Plugin_Continue; } -public Action Event_PlayerDeath(Handle event, const char[] name, bool dontBroadcast) { - if (GetConVarInt(g_hCvarMidGameUpload) <= 0) +public Action Event_PlayerDeath(Event event, const char[] name, bool dontBroadcast) { + if (g_hCvarMidGameUpload.IntValue <= 0) return Plugin_Continue; - if (!GetConVarBool(g_hCvarMidGameNotice)) // Is midgame notices disabled? + if (!g_hCvarMidGameNotice.BoolValue) // Is midgame notices disabled? return Plugin_Continue; if (!g_bInMatch) // Partial Upload is only relevant during the match return Plugin_Continue; @@ -454,15 +455,15 @@ public Action Event_PlayerDeath(Handle event, const char[] name, bool dontBroadc return Plugin_Continue; if (!g_bFirstPartialUploaded) // Has there not been a partial upload yet? return Plugin_Continue; - - int userid = GetEventInt(event, "userid"); + + int userid = event.GetInt("userid"); int client = GetClientOfUserId(userid); - + if (!g_bPartialUploadNotice[client]) // Does the user need to be notified? If not ... return Plugin_Continue; if ((GetEngineTime() - g_fLastRoundEnd) <= 15.0) // Ignore deaths in beginning of the round return Plugin_Continue; - + g_bPartialUploadNotice[client] = false; MC_PrintToChat(client, "%s%s", "{lightgreen}[LogsTF] {blue}To see the stats from the previous rounds, type: {yellow}", g_sDefaultTrigger); @@ -478,7 +479,7 @@ public Action Event_PlayerDeath(Handle event, const char[] name, bool dontBroadc // ----------------------------------- // Handle user input // ----------------------------------- -float g_fSSTime[TFMAXPLAYERS+1]; +float g_fSSTime[TFMAXPLAYERS + 1]; public Action Command_say(int client, int args) { if (client == 0) return Plugin_Continue; @@ -487,10 +488,10 @@ public Action Command_say(int client, int args) { GetCmdArgString(text, sizeof(text)); if (text[0] == '"' && strlen(text) >= 2) { strcopy(text, sizeof(text), text[1]); - text[strlen(text)-1] = '\0'; + text[strlen(text) - 1] = '\0'; } String_Trim(text, text, sizeof(text)); - + if (StrEqual(text, "!ul", false) || StrEqual(text, ".ul", false)) { if (Client_IsAdmin(client)) { char nickname[32]; @@ -516,41 +517,40 @@ public Action Command_say(int client, int args) { if (strlen(g_sLastLogURL) != 0) { // If the person has used .ss, don't show the Partial Upload notice g_bPartialUploadNotice[client] = false; - + // Check if the client has disable html motd. g_fSSTime[client] = GetTickedTime(); QueryClientConVar(client, "cl_disablehtmlmotd", QueryConVar_DisableHtmlMotd); } - if (GetConVarBool(g_hCvarSuppressChat)) { + if (g_hCvarSuppressChat.BoolValue) { return Plugin_Stop; } } - + return Plugin_Continue; } public void QueryConVar_DisableHtmlMotd(QueryCookie cookie, int client, ConVarQueryResult result, const char[] cvarName, const char[] cvarValue) { if (!IsClientValid(client)) return; - + if (result == ConVarQuery_Okay) { if (StringToInt(cvarValue) != 0) { char nickname[32]; GetClientName(client, nickname, sizeof(nickname)); - + MC_PrintToChat(client, "%s%s%s", "{lightgreen}[LogsTF] {default}", nickname, ": To see logs in-game, you need to set: {aqua}cl_disablehtmlmotd 0"); return; } } - + float waitTime = 0.3; waitTime -= GetTickedTime() - g_fSSTime[client]; - if (waitTime <= 0.0) - { + if (waitTime <= 0.0) { waitTime = 0.1; } - + // Using a timer avoids an error where the stats close immediately due to the user pressing ENTER when typing .ss CreateTimer(waitTime, Timer_ShowStats, client, TIMER_FLAG_NO_MAPCHANGE); } @@ -561,13 +561,13 @@ public Action BlockSay(int client, const char[] text, bool teamSay) { return Plugin_Continue; if (StrEqual(text, "!ul", false) && Client_IsAdmin(client)) return Plugin_Handled; - if (GetConVarBool(g_hCvarSuppressChat) && ( + if (g_hCvarSuppressChat.BoolValue && ( (!g_bDisableSS && (StrEqual(text, ".ss", false) || StrEqual(text, "!ss", false))) - || StrEqual(text, ".stats", false) - || StrEqual(text, "!stats", false) - || StrEqual(text, ".log", false) - || StrEqual(text, "!log", false) - || StrEqual(text, ".logs", false) + || StrEqual(text, ".stats", false) + || StrEqual(text, "!stats", false) + || StrEqual(text, ".log", false) + || StrEqual(text, "!log", false) + || StrEqual(text, ".logs", false) || StrEqual(text, "!logs", false) )) return Plugin_Handled; @@ -592,7 +592,7 @@ public Action Timer_ShowStats(Handle timer, any client) { KvSetString(Kv, "msg", lastLogURL); KvSetNum(Kv, "customsvr", 1); ShowVGUIPanel(client, "info", Kv); - CloseHandle(Kv); + delete Kv; return Plugin_Stop; } @@ -611,14 +611,14 @@ public Action GameLog(const char[] message) { return Plugin_Continue; } -void AddLogLine(const char [] message) { +void AddLogLine(const char[] message) { if (strlen(message) >= LOG_BUFFERSIZE) { LogError("Log line too long (%i): %s", strlen(message), message); return; } if (g_iNextLogBuffer >= LOG_BUFFERCNT) SetFailState("%s", "Wrong log buffer"); - + char time[32]; FormatTime(time, sizeof(time), "%m/%d/%Y - %H:%M:%S"); FormatEx(g_sLogBuffer[g_iNextLogBuffer++], LOG_BUFFERSIZE, "L %s: %s", time, message); @@ -629,9 +629,9 @@ void AddLogLine(const char [] message) { void FlushLog() { if (g_iNextLogBuffer == 0) return; - + int lastLine = g_iNextLogBuffer; - + if (g_bInMatch) { char path[64]; GetLogPath(LOG_PATH, path, sizeof(path)); @@ -641,14 +641,13 @@ void FlushLog() { LogError("FlushLog: Could not open file %s", path); return; } - - for (int line = 0; line < lastLine; line++) - { + + for (int line = 0; line < lastLine; line++) { file.WriteString(g_sLogBuffer[line], false); } file.Close(); } - + g_iNextLogBuffer = 0; } @@ -666,42 +665,42 @@ void UploadLog(bool partial) { if (!partial && !g_bLogReady) { return; } - + if (g_bIsUploading) { if (!partial && g_bIsPartialUpload) { g_bReuploadASAP = true; } - + return; } - + char apiKey[64]; - GetConVarString(g_hCvarApikey, apiKey, sizeof(apiKey)); + g_hCvarApikey.GetString(apiKey, sizeof(apiKey)); TrimString(apiKey); if (strlen(apiKey) == 0) { if (!partial) MC_PrintToChatAll("%s", "{lightgreen}[LogsTF] {red}To upload logs, please\nset {green}logstf_apikey {red}to your logs.tf API key.\nPut it in server.cfg"); return; } - + FlushLog(); - + if (!partial) g_bLogReady = false; g_bIsUploading = true; g_bIsPartialUpload = partial; - + char title[128]; - GetConVarString(g_hCvarTitle, title, sizeof(title)); + g_hCvarTitle.GetString(title, sizeof(title)); ReplaceString(title, sizeof(title), "{server}", g_sCachedHostname, false); ReplaceString(title, sizeof(title), "{blu}", g_sCachedBluTeamName, false); ReplaceString(title, sizeof(title), "{blue}", g_sCachedBluTeamName, false); ReplaceString(title, sizeof(title), "{red}", g_sCachedRedTeamName, false); - + char path[64], partialpath[64]; GetLogPath(LOG_PATH, path, sizeof(path)); GetLogPath(PLOG_PATH, partialpath, sizeof(partialpath)); - + if (partial) { DeleteFile(partialpath); if (!CopyFile(path, partialpath)) { @@ -713,56 +712,56 @@ void UploadLog(bool partial) { } return; } - + // We should NOT add a Round_Stalemate just after a round has ended (logs.tf will not understand it) //char buffer[128]; //char time[32]; //FormatTime(time, sizeof(time), "%m/%d/%Y - %H:%M:%S"); //FormatEx(buffer, sizeof(buffer), "\nL %s: %s\n", time, "World triggered \"Round_Stalemate\""); - + //Handle file = OpenFile(partialpath, "a"); //WriteFileString(file, buffer, false); - //CloseHandle(file); + //delete file; } - + if (!partial) MC_PrintToChatAll("%s", "{lightgreen}[LogsTF] {blue}Uploading logs..."); - + AnyHttpRequest req = AnyHttp.CreatePost("http://logs.tf/upload"); - + req.PutFile("logfile", partial ? partialpath : path); req.PutString("title", title); req.PutString("map", g_sCachedMap); req.PutString("key", apiKey); req.PutString("uploader", g_sPluginVersion); - + if (g_sCurrentLogID[0] != '\0') req.PutString("updatelog", g_sCurrentLogID); - + AnyHttp.Send(req, UploadLog_Complete); } public void UploadLog_Complete(bool success, const char[] contents, int responseCode) { g_bIsUploading = false; - + if (success) { success = ParseLogsResponse(contents); } else { if (!g_bIsPartialUpload) MC_PrintToChatAll("%s", "{lightgreen}[LogsTF] {red}Error occurred when uploading logs :("); - + char truncatedContents[512]; strcopy(truncatedContents, sizeof(truncatedContents), contents); LogError("Error uploading %slogs (HTTP %i)\n%s", g_bIsPartialUpload ? "partial " : "", responseCode, truncatedContents); } - + if (!g_bIsPartialUpload && success) { g_sCurrentLogID = ""; } - + if (g_bIsPartialUpload) { g_bIsPartialUpload = false; - + if (g_bReuploadASAP) { g_bReuploadASAP = false; UploadLog(false); @@ -772,7 +771,7 @@ public void UploadLog_Complete(bool success, const char[] contents, int response for (int i = 1; i <= MaxClients; i++) { if (!IsRealPlayer(i)) continue; - + g_bPartialUploadNotice[i] = true; } } @@ -787,7 +786,7 @@ public void UploadLog_Complete(bool success, const char[] contents, int response CreateTimer(float(waittime), RetryUploadLog); } else { g_sCurrentLogID = ""; - + // Call the global forward LogUploaded() CallLogUploaded(false, "", ""); } @@ -799,26 +798,25 @@ public bool ParseLogsResponse(const char[] contents) { int size = strlen(contents) + 1; char[] resBuff = new char[size]; strcopy(resBuff, size, contents); - + char url[64], success[16]; if (FindJsonValue(resBuff, "success", success, sizeof(success)) && StrEqual(success, "true", false) && FindJsonValue(resBuff, "url", url, sizeof(url))) { if (!FindJsonValue(resBuff, "log_id", g_sCurrentLogID, sizeof(g_sCurrentLogID))) { MC_PrintToChatAll("%s", "{lightgreen}[LogsTF] {blue}log_id not found"); return false; } - + FormatEx(g_sLastLogURL, sizeof(g_sLastLogURL), "%s%s", "logs.tf", url); if (!g_bIsPartialUpload) { MC_PrintToChatAll("%s%s", "{lightgreen}[LogsTF] {blue}Logs were uploaded to: ", g_sLastLogURL); MC_PrintToChatAll("%s%s", "{lightgreen}[LogsTF] {blue}To see the stats, type: {yellow}", g_sDefaultTrigger); } Format(g_sLastLogURL, sizeof(g_sLastLogURL), "%s%s", "http://", g_sLastLogURL); - - + // Call the global forward LogUploaded() if (!g_bIsPartialUpload) CallLogUploaded(true, g_sCurrentLogID, g_sLastLogURL); - + return true; } else { char error[128] = "Unknown error."; @@ -826,19 +824,19 @@ public bool ParseLogsResponse(const char[] contents) { String_Trim(resBuff, resBuff, size); Format(error, sizeof(error), "Unknown error:\n%s", resBuff); } - + ReplaceString(error, size, "\n", ""); ReplaceString(error, size, "\\n", " "); ReplaceString(error, size, "\r", ""); ReplaceString(error, size, "\t", ""); String_Trim(error, error, size); - + if (!g_bIsPartialUpload) MC_PrintToChatAll("%s%s", "{lightgreen}[LogsTF] {red}Unsuccesful upload: ", error); LogError("Error uploading %slogs: %s", g_bIsPartialUpload ? "partial " : "", error); if (StrContains(error, "Invalid log file", false) != -1 || StrContains(error, "Not enough", false) != -1) return true; // Retrying won't help - + return false; } } @@ -884,10 +882,10 @@ Action CallBlockLogLine(const char[] logline) { void GetLogPath(const char[] file, char[] destpath, int destpathLen) { char logsdir[64]; - GetConVarString(g_hCvarLogsDir, logsdir, sizeof(logsdir)); + g_hCvarLogsDir.GetString(logsdir, sizeof(logsdir)); if (DirExists(logsdir) == false) { // Setting use_valve_fs=true somehow allows it true create nested directories. - CreateDirectory(logsdir, FPERM_O_READ|FPERM_O_EXEC|FPERM_G_READ|FPERM_G_EXEC|FPERM_U_READ|FPERM_U_WRITE|FPERM_U_EXEC, true); + CreateDirectory(logsdir, FPERM_O_READ | FPERM_O_EXEC | FPERM_G_READ | FPERM_G_EXEC | FPERM_U_READ | FPERM_U_WRITE | FPERM_U_EXEC, true); } if (logsdir[0] == '\0') strcopy(destpath, destpathLen, file); @@ -908,29 +906,27 @@ bool FindJsonValue(const char[] input, const char[] key, char[] value, int maxle matches: 4 match 0: "log_id":29897, match 1: 29897 - match 2: + match 2: match 3: 29897 */ char regex_str[128]; Format(regex_str, sizeof(regex_str), "\"%s\"\\s*:\\s*(\"(.*?)\"|(.+?))\\s*[,}]", key); Regex regex = CompileRegex(regex_str, PCRE_CASELESS); - if (regex == INVALID_HANDLE) + if (regex == null) return false; int matches = regex.Match(input); if (matches < 3) { - CloseHandle(regex); + delete regex; return false; } if (!GetRegexSubString(regex, matches == 4 ? 3 : 2, value, maxlen)) { - CloseHandle(regex); + delete regex; return false; } - CloseHandle(regex); + delete regex; return true; } // ----------------------------------- - - diff --git a/logstf/update.txt b/logstf/update.txt index ff274a8..030388d 100644 --- a/logstf/update.txt +++ b/logstf/update.txt @@ -4,11 +4,11 @@ { "Version" { - "Latest" "2.6.5" + "Latest" "2.6.6" } - "Notes" "Changes in 2.6.5:" - "Notes" "- logs.tf html motd now highlights the client's user" + "Notes" "Changes in 2.6.6:" + "Notes" "- Updated code to be compatible with SourceMod 1.12" } "Files" diff --git a/medicstats/README.md b/medicstats/README.md new file mode 100644 index 0000000..bf11a29 --- /dev/null +++ b/medicstats/README.md @@ -0,0 +1,15 @@ +# Medic Stats + +Features: + +- Logs buff heals (~95% accurate) +- Logs average time to build über +- Logs average time the über lasts +- Logs number of über advantages lost +- Logs how many times the medic dies shortly after übering +- Logs other additional medic stats +- See [example on logs.tf](https://logs.tf/154545) + +| CVAR | Default | Description | +| ---------------------------- | ------- | --------------------------- | +| `medicstats_logbuffs <0\|1>` | `1` | Set to 1 to log buff heals. | diff --git a/medicstats/medicstats.sp b/medicstats/medicstats.sp index 859db28..7f94a95 100644 --- a/medicstats/medicstats.sp +++ b/medicstats/medicstats.sp @@ -57,6 +57,10 @@ Release notes: - Internal updates - by Leigh MacDonald +---- 1.4.2 (14/07/2025) ---- +- Updated code to be compatible with SourceMod 1.12 + + TODO: - The log lines should include which medigun is wielded @@ -78,8 +82,8 @@ Known Bugs: #include -#define PLUGIN_VERSION "1.4.1" -#define UPDATE_URL "http://sourcemod.krus.dk/medicstats/update.txt" +#define PLUGIN_VERSION "1.4.2" +#define UPDATE_URL "https://sourcemod.krus.dk/medicstats/update.txt" #define TIMER_TICK 0.15 @@ -108,7 +112,7 @@ enum struct MedicInfo { float MedicLastUberTime; // The GameTime of last uber float MedicLastDeath; // The GameTime of last death - bool MedicHasHadAdvantage; // True if the medic has 100% uber and he got it significantly earlier than the opposing medic + bool MedicHasHadAdvantage; // True if the medic has 100% uber and they got it significantly earlier than the opposing medic float MedicCurrentBiggestAdvantage; // If MedicHasHadAdvantage is true, this value indicates how big the uber advantage was (in seconds) } @@ -140,11 +144,11 @@ public void OnPluginStart() { HookConVarChange(g_hCvarLogBuffs, Cvar_LogBuffs); ConVar tftrue_logs_includebuffs = FindConVar("tftrue_logs_includebuffs"); if (tftrue_logs_includebuffs != null) { - if (GetConVarBool(tftrue_logs_includebuffs)) - SetConVarString(g_hCvarLogBuffs, "0"); + if (tftrue_logs_includebuffs.BoolValue) + g_hCvarLogBuffs.SetString("0"); } char cvarLogBuffs[16]; - GetConVarString(g_hCvarLogBuffs, cvarLogBuffs, sizeof(cvarLogBuffs)); + g_hCvarLogBuffs.GetString(cvarLogBuffs, sizeof(cvarLogBuffs)); Cvar_LogBuffs(g_hCvarLogBuffs, "", cvarLogBuffs); HookEvent("player_connect", Event_player_connect, EventHookMode_Post); @@ -217,8 +221,8 @@ public void Cvar_LogBuffs(Handle cvar, const char[] oldValue, const char[] newVa Array_Fill(g_iBuffed, sizeof(g_iBuffed), 0); } -public Action Event_player_connect(Handle event, const char[] name, bool dontBroadcast) { - int userid = GetEventInt(event, "userid"); +public Action Event_player_connect(Event event, const char[] name, bool dontBroadcast) { + int userid = event.GetInt("userid"); int client = GetClientOfUserId(userid); // ==== Buffs ==== @@ -227,8 +231,8 @@ public Action Event_player_connect(Handle event, const char[] name, bool dontBro return Plugin_Continue; } -public Action Event_player_spawn(Handle event, const char[] name, bool dontBroadcast) { - int userid = GetEventInt(event, "userid"); +public Action Event_player_spawn(Event event, const char[] name, bool dontBroadcast) { + int userid = event.GetInt("userid"); int client = GetClientOfUserId(userid); // ==== Buffs ==== @@ -267,8 +271,8 @@ public Action Event_player_spawn(Handle event, const char[] name, bool dontBroad return Plugin_Continue; } -public Action Event_player_death(Handle event, const char[] name, bool dontBroadcast) { - int userid = GetEventInt(event, "userid"); +public Action Event_player_death(Event event, const char[] name, bool dontBroadcast) { + int userid = event.GetInt("userid"); int client = GetClientOfUserId(userid); // ==== Buffs ==== @@ -301,8 +305,8 @@ public Action Event_player_death(Handle event, const char[] name, bool dontBroad return Plugin_Continue; } -public Action Event_player_chargedeployed(Handle event, const char[] name, bool dontBroadcast) { - int userid = GetEventInt(event, "userid"); +public Action Event_player_chargedeployed(Event event, const char[] name, bool dontBroadcast) { + int userid = event.GetInt("userid"); int client = GetClientOfUserId(userid); // ==== Medic stats ==== @@ -337,12 +341,12 @@ public Action Event_player_chargedeployed(Handle event, const char[] name, bool return Plugin_Continue; } -public Action Event_player_healed(Handle event, const char[] name, bool dontBroadcast) { - int patientId = GetEventInt(event, "patient"); - int healerId = GetEventInt(event, "healer"); +public Action Event_player_healed(Event event, const char[] name, bool dontBroadcast) { + int patientId = event.GetInt("patient"); + int healerId = event.GetInt("healer"); int patient = GetClientOfUserId(patientId); int healer = GetClientOfUserId(healerId); - //int amount = GetEventInt(event, "amount"); + //int amount = event.GetInt("amount"); if (healer == 0) { // Caused by medpacks return Plugin_Continue; @@ -370,16 +374,16 @@ public Action Event_player_healed(Handle event, const char[] name, bool dontBroa return Plugin_Continue; } -public void Event_round_win(Handle event, const char[] name, bool dontBroadcast) { +public void Event_round_win(Event event, const char[] name, bool dontBroadcast) { IsBonusRoundTime = true; } -public void Event_round_restart_seconds(Handle event, const char[] name, bool dontBroadcast) { +public void Event_round_restart_seconds(Event event, const char[] name, bool dontBroadcast) { CountdownStarted = true; IsInMatch = false; } -public void Event_teamplay_round_start(Handle event, const char[] name, bool dontBroadcast) { +public void Event_teamplay_round_start(Event event, const char[] name, bool dontBroadcast) { if (CountdownStarted) { CountdownStarted = false; @@ -395,7 +399,7 @@ public void Event_teamplay_round_start(Handle event, const char[] name, bool don LastRoundStart = GetGameTime(); } -public Action Event_game_over(Handle event, const char[] name, bool dontBroadcast) { +public Action Event_game_over(Event event, const char[] name, bool dontBroadcast) { if (!IsInMatch) return Plugin_Continue; @@ -463,7 +467,7 @@ public Action Timer_CollectInfo(Handle timer) { // Medic has not started building yet. if (!(medic[team].MedicHasUber || medic[team].MedicIsUbering)) { - // If the medic does not have the uber and is not ubering, he has now started building uber. + // If the medic does not have the uber and is not ubering, they have now started building uber. medic[team].MedicStartedBuildTime = gameTime; LogEmptyUber(client); } diff --git a/medicstats/update.txt b/medicstats/update.txt index 7c3263e..a5f82bb 100644 --- a/medicstats/update.txt +++ b/medicstats/update.txt @@ -4,11 +4,11 @@ { "Version" { - "Latest" "1.4.1" + "Latest" "1.4.2" } - "Notes" "Changes in 1.4.1:" - "Notes" "- Internal updates - by Leigh MacDonald" + "Notes" "Changes in 1.4.2:" + "Notes" "- Updated code to be compatible with SourceMod 1.12" } "Files" diff --git a/pause/README.md b/pause/README.md index dd295b3..8130bc1 100644 --- a/pause/README.md +++ b/pause/README.md @@ -1,4 +1,4 @@ -# Pause +# Improved Pause Features: diff --git a/pause/pause.sp b/pause/pause.sp index 1c77cd5..43ec8c9 100644 --- a/pause/pause.sp +++ b/pause/pause.sp @@ -42,9 +42,15 @@ Release notes: This is achieved by setting any spy's cloak meter to a very large number, effectively making it permanent. - Improved handling of map changes and reloading the plugin + +---- 1.6.3 (12/07/2025) ---- +- Updated code to be compatible with SourceMod 1.12 + + */ #pragma semicolon 1 +#pragma newdecls required #include #include @@ -54,10 +60,9 @@ Release notes: #undef REQUIRE_PLUGIN #include -#pragma newdecls required -#define PLUGIN_VERSION "1.6.2" -#define UPDATE_URL "http://sourcemod.krus.dk/pause/update.txt" +#define PLUGIN_VERSION "1.6.3" +#define UPDATE_URL "https://sourcemod.krus.dk/pause/update.txt" #define PAUSE_UNPAUSE_TIME 2.0 #define UNPAUSE_WAIT_TIME 5 @@ -190,12 +195,12 @@ public void OnClientDisconnect_Post(int client) { } } -public Action Event_player_spawn(Event event, const char[] name, bool dontBroadcast) { +public void Event_player_spawn(Event event, const char[] name, bool dontBroadcast) { // While paused, if a player stands in spawn and changes class, // this event is immediately fired. We reset the state so we do not restore // the previous class's attributes. - int userid = GetEventInt(event, "userid"); + int userid = event.GetInt("userid"); int client = GetClientOfUserId(userid); ResetState(client); diff --git a/pause/update.txt b/pause/update.txt index 1c6c81c..5c8504c 100644 --- a/pause/update.txt +++ b/pause/update.txt @@ -4,14 +4,11 @@ { "Version" { - "Latest" "1.6.2" + "Latest" "1.6.3" } - "Notes" "Changes in 1.6.2:" - "Notes" "- Added support for restoring player positions, angles, and velocities when unpausing - by Shigbeard" - "Notes" "- Also saved and restored player health along side this, incase fall damage still applied - by Shigbeard" - "Notes" "- Added support for restoring spy cloak after pause, much like how uber is restored - by Shigbeard" - "Notes" "- Improved handling of map changes and reloading the plugin" + "Notes" "Changes in 1.6.3:" + "Notes" "- Updated code to be compatible with SourceMod 1.12" } "Files" diff --git a/prepare-publish.ps1 b/prepare-publish.ps1 index 103c58a..2413a53 100644 --- a/prepare-publish.ps1 +++ b/prepare-publish.ps1 @@ -2,6 +2,7 @@ $ErrorActionPreference = "Stop" Set-Location $PSScriptRoot +. ./keyvalues-parser.ps1 function ZipFiles($zipfilename, $sourcedir) { Add-Type -Assembly System.IO.Compression.FileSystem @@ -38,14 +39,23 @@ New-Item -ItemType directory -Path (Join-Path "dist" "source") New-Item -ItemType directory -Path (Join-Path "dist" "ftp") Copy-Item -Path "includes" -Destination (Join-Path "dist" "source") -Recurse +# The github action (rumblefrog/setup-sp) will rename the executable to "spcomp64_original". +# The "spcomp64" would then instead be a bash script, which we can't directly run from powershell. +$spcomp = (Get-Command "spcomp64_original" -ErrorAction SilentlyContinue) ? "spcomp64_original" : "spcomp64" + $plugins = @("waitforstv", "medicstats", "supstats2", "logstf", "restorescore", "countdown", "fixstvslot", "pause", "recordstv", "classwarning", "afk"); foreach ($p in $plugins) { Write-Host "Compiling $p..." - & "spcomp" "$p.sp" "-i" (Join-Path ".." "includes") "-D" $p + & "$spcomp" "$p.sp" "-i" (Join-Path ".." "includes") "-D" "$p" if ($LASTEXITCODE -ne 0) { - Write-Host "Failed compilation of $p" + Write-Error "Failed compilation of $p" + Exit 1 + } + + if (-not (Test-UpdaterFile "./$p/update.txt")) { + Write-Error "Failed validation of $p/update.txt" Exit 1 } diff --git a/recordstv/README.md b/recordstv/README.md new file mode 100644 index 0000000..5d1a94c --- /dev/null +++ b/recordstv/README.md @@ -0,0 +1,23 @@ +# Record SourceTV + +Features: + +- Automatically records SourceTV demos when a match starts +- Automatically stops recording when the match ends +- Set up the path and the filenames of the demos with cvars: **recordstv_path** and **recordstv_filename** + +| CVAR | Default | Description | +| ------------------------------- | ------------------------ | --------------------------------------- | +| `recordstv_path ` | (empty) | The path to put the recorded STV demos. | +| `recordstv_filename ` | `match-#Y#m#d-#H#M-#map` | The name of the demo files. | + +In both of these CVARs, you can use these placeholders: + +- `#Y` = Year +- `#m` = Month +- `#d` = Day +- `#H` = Hour +- `#M` = Minute +- `#map` = Map name +- `#red` = Red Team Name +- `#blue` = Blue Team Name diff --git a/recordstv/recordstv.sp b/recordstv/recordstv.sp index c6fa017..819c9e8 100644 --- a/recordstv/recordstv.sp +++ b/recordstv/recordstv.sp @@ -15,6 +15,10 @@ Release notes: - Support for new ready-up behaviour +---- 1.1.2 (13/07/2025) ---- +- Updated code to be compatible with SourceMod 1.12 + + TODO: - Automatic zipping of match*.dem files @@ -22,6 +26,7 @@ TODO: */ #pragma semicolon 1 +#pragma newdecls required #include #include @@ -31,31 +36,31 @@ TODO: #include -#define PLUGIN_VERSION "1.1.1" -#define UPDATE_URL "http://sourcemod.krus.dk/recordstv/update.txt" +#define PLUGIN_VERSION "1.1.2" +#define UPDATE_URL "https://sourcemod.krus.dk/recordstv/update.txt" -new String:g_sAutoRecordFormat[] = "auto-%Y%m%d-%H%M-%map"; -new Handle:g_cvarAutoRecord = INVALID_HANDLE; +char g_sAutoRecordFormat[] = "auto-%Y%m%d-%H%M-%map"; +ConVar g_cvarAutoRecord = null; -new Handle:g_hCvarRedTeamName = INVALID_HANDLE; -new Handle:g_hCvarBlueTeamName = INVALID_HANDLE; +ConVar g_hCvarRedTeamName = null; +ConVar g_hCvarBlueTeamName = null; -new Handle:g_cvarRecordPath = INVALID_HANDLE; -new Handle:g_cvarFilename = INVALID_HANDLE; +ConVar g_cvarRecordPath = null; +ConVar g_cvarFilename = null; -public Plugin:myinfo = { +public Plugin myinfo = { name = "Record SourceTV", author = "F2", description = "Records SourceTV during matches", version = PLUGIN_VERSION, - url = "http://sourcemod.krus.dk/" + url = "https://sourcemod.krus.dk/" }; -public OnPluginStart() { +public void OnPluginStart() { // Set up auto updater if (LibraryExists("updater")) Updater_AddPlugin(UPDATE_URL); @@ -73,13 +78,13 @@ public OnPluginStart() { Match_OnPluginStart(); } -public OnLibraryAdded(const String:name[]) { +public void OnLibraryAdded(const char[] name) { // Set up auto updater if (StrEqual(name, "updater")) Updater_AddPlugin(UPDATE_URL); } -public OnMapStart() { +public void OnMapStart() { Match_OnMapStart(); } @@ -88,10 +93,10 @@ public void OnMapEnd() { } -public CvarChange_FileName(Handle:cvar, const String:oldVal[], const String:newVal[]) { +public void CvarChange_FileName(ConVar cvar, const char[] oldVal, const char[] newVal) { if (StrContains(newVal, "/") != -1 || StrContains(newVal, "\\") != -1) { ReplyToCommand(0, "recordstv_filename must not contain forward slash or backslash."); - SetConVarString(g_cvarFilename, oldVal); + g_cvarFilename.SetString(oldVal); } } @@ -99,44 +104,44 @@ public CvarChange_FileName(Handle:cvar, const String:oldVal[], const String:newV // Match - start / end // ----------------------------------- -StartMatch() { +void StartMatch() { StartRecording(); } -ResetMatch() { +void ResetMatch() { StopRecording(); } -EndMatch(bool:endedMidgame) { +void EndMatch(bool endedMidgame) { StopRecording(); } // ----------------------------------- -StartRecording() { +void StartRecording() { ServerCommand("tv_stoprecord"); - decl String:path[128]; - GetConVarString(g_cvarRecordPath, path, sizeof(path)); + char path[128]; + g_cvarRecordPath.GetString(path, sizeof(path)); - decl String:filename[128]; - GetConVarString(g_cvarFilename, filename, sizeof(filename)); + char filename[128]; + g_cvarFilename.GetString(filename, sizeof(filename)); RecordToFile(path, filename); } -StopRecording() { +void StopRecording() { ServerCommand("tv_stoprecord"); - if (GetConVarBool(g_cvarAutoRecord)) + if (g_cvarAutoRecord.BoolValue) RecordToFile("", g_sAutoRecordFormat); } -RecordToFile(const String:path[], const String:format[]) { - decl String:filename[256]; +void RecordToFile(const char[] path, const char[] format) { + char filename[256]; strcopy(filename, sizeof(filename), format); // Prepend the path to the filename - decl String:path2[128]; + char path2[128]; strcopy(path2, sizeof(path2), path); ReplaceString(path2, sizeof(path2), "\\", "/"); TrimString(path2); @@ -151,22 +156,22 @@ RecordToFile(const String:path[], const String:format[]) { ReplaceString(filename, sizeof(filename), "#", "%"); // Replace %map with current map - decl String:map[128]; + char map[128]; GetCurrentMap(map, sizeof(map)); ReplaceString(filename, sizeof(filename), "%map", map, false); // Replace %red and %blue with current team names - decl String:teamname[128]; - GetConVarString(g_hCvarRedTeamName, teamname, sizeof(teamname)); + char teamname[128]; + g_hCvarRedTeamName.GetString(teamname, sizeof(teamname)); CleanFilename(teamname); ReplaceString(filename, sizeof(filename), "%red", teamname, false); - GetConVarString(g_hCvarBlueTeamName, teamname, sizeof(teamname)); + g_hCvarBlueTeamName.GetString(teamname, sizeof(teamname)); CleanFilename(teamname); ReplaceString(filename, sizeof(filename), "%blue", teamname, false); ReplaceString(filename, sizeof(filename), "%blu", teamname, false); // Replace time placeholders - decl String:filename2[256]; + char filename2[256]; FormatTime(filename2, sizeof(filename2), filename); // Remove illegal path characters @@ -174,13 +179,13 @@ RecordToFile(const String:path[], const String:format[]) { // Create the demo directory if (filename2[0] != '\0') { - new slashPos = StrContains(filename2, "/"); + int slashPos = StrContains(filename2, "/"); while (slashPos != -1) { filename2[slashPos] = '\0'; CreateDirectory(filename2, FPERM_O_READ | FPERM_O_EXEC | FPERM_G_READ | FPERM_G_EXEC | FPERM_U_READ | FPERM_U_WRITE | FPERM_U_EXEC); filename2[slashPos] = '/'; - new newSlashPos = StrContains(filename2[slashPos + 1], "/"); + int newSlashPos = StrContains(filename2[slashPos + 1], "/"); if (newSlashPos == -1) slashPos = -1; else @@ -192,10 +197,10 @@ RecordToFile(const String:path[], const String:format[]) { ServerCommand("tv_record %s", filename2); } -CleanFilename(String:filename[], bool:allowSlash = false) { - new srcpos = 0, destpos = 0; +void CleanFilename(char[] filename, bool allowSlash = false) { + int srcpos = 0, destpos = 0; while (filename[srcpos] != '\0') { - new c = filename[srcpos]; + int c = filename[srcpos]; if (IsCharAlpha(c) || IsCharNumeric(c) || c == '-' || c == '_' || c == '.' || (allowSlash && c == '/')) { filename[destpos] = c; destpos++; diff --git a/recordstv/update.txt b/recordstv/update.txt index 0b0c0ea..f2f1bf1 100644 --- a/recordstv/update.txt +++ b/recordstv/update.txt @@ -4,11 +4,11 @@ { "Version" { - "Latest" "1.1.1" + "Latest" "1.1.2" } - "Notes" "Changes in 1.1.1:" - "Notes" "- Support for new ready-up behaviour" + "Notes" "Changes in 1.1.2:" + "Notes" "- Updated code to be compatible with SourceMod 1.12" } "Files" diff --git a/restorescore/README.md b/restorescore/README.md new file mode 100644 index 0000000..3694ee2 --- /dev/null +++ b/restorescore/README.md @@ -0,0 +1,5 @@ +# Restore Score + +Features: + +- Restores a player's score on the scoreboard when they reconnect diff --git a/restorescore/restorescore.sp b/restorescore/restorescore.sp index a24bc21..eaab643 100644 --- a/restorescore/restorescore.sp +++ b/restorescore/restorescore.sp @@ -2,7 +2,7 @@ Release notes: ---- 1.0.0 (01/11/2013) ---- -- Restores a player's score when he reconnects +- Restores a player's score when they reconnect - Stored scores are trashed on mapchange and when a new match starts @@ -15,11 +15,16 @@ Release notes: - Fixed a bug that sometimes caused RestoreScore not to work for certain players (SteamID fix) -Known errors: +---- 1.1.3 (14/07/2025) ---- +- Updated code to be compatible with SourceMod 1.12 + + +Known issues: - Not compatible with TFTrue. */ #pragma semicolon 1 +#pragma newdecls required #include #include @@ -29,11 +34,11 @@ Known errors: #include -#define PLUGIN_VERSION "1.1.2" -#define UPDATE_URL "http://sourcemod.krus.dk/restorescore/update.txt" +#define PLUGIN_VERSION "1.1.3" +#define UPDATE_URL "https://sourcemod.krus.dk/restorescore/update.txt" -public Plugin:myinfo = { +public Plugin myinfo = { name = "Restore Score", author = "F2", description = "Restores the score of a player when reconnecting", @@ -41,14 +46,14 @@ public Plugin:myinfo = { url = "https://github.com/F2/F2s-sourcemod-plugins" }; -new bool:g_bHookActivated = false; +bool g_bHookActivated = false; -new g_iAddScore[MAXPLAYERS+1]; // The old scores that are currently being added to the clients. -new Handle:g_kvOldScores = INVALID_HANDLE; // Keys are steamids of players disconnected, and values are their old scores. +int g_iAddScore[MAXPLAYERS+1]; // The old scores that are currently being added to the clients. +KeyValues g_kvOldScores = null; // Keys are steamids of players disconnected, and values are their old scores. -public OnPluginStart() { +public void OnPluginStart() { HookEvent("player_activate", Event_player_activate, EventHookMode_Post); HookEvent("player_disconnect", Event_player_disconnect, EventHookMode_Pre); HookEvent("teamplay_restart_round", Event_restart_round, EventHookMode_Post); @@ -59,36 +64,36 @@ public OnPluginStart() { Updater_AddPlugin(UPDATE_URL); } -public OnLibraryAdded(const String:name[]) { +public void OnLibraryAdded(const char[] name) { if (StrEqual(name, "updater")) Updater_AddPlugin(UPDATE_URL); } -public OnPluginEnd() { +public void OnPluginEnd() { StopHook(); - CloseHandle(g_kvOldScores); + delete g_kvOldScores; } // Clear the old scores when the match is reset and on mapchange. -ResetOldScores() { +void ResetOldScores() { // Stop the hook (for performance reasons) StopHook(); // Clear the old scores - CloseHandle(g_kvOldScores); + delete g_kvOldScores; g_kvOldScores = CreateKeyValues("OldScores"); - for (new client = 1; client <= MaxClients; client++) + for (int client = 1; client <= MaxClients; client++) g_iAddScore[client] = 0; } -public Action:Event_restart_round(Handle:event, const String:name[], bool:dontBroadcast) { +public void Event_restart_round(Event event, const char[] name, bool dontBroadcast) { ResetOldScores(); } -public OnMapStart() { +public void OnMapStart() { ResetOldScores(); } @@ -96,33 +101,34 @@ public OnMapStart() { // When a player connects, check if it is a returning player, and adjust his score accordingly. -public Action:Event_player_activate(Handle:event, const String:name[], bool:dontBroadcast) { - new userid = GetEventInt(event, "userid"); - new client = GetClientOfUserId(userid); +public void Event_player_activate(Event event, const char[] name, bool dontBroadcast) { + int userid = event.GetInt("userid"); + int client = GetClientOfUserId(userid); if (!IsRealPlayer(client)) return; - decl String:steamid[64]; - GetClientAuthId(client, AuthId_Steam2, steamid, sizeof(steamid), false); + char steamid[64]; + if (!GetClientAuthId(client, AuthId_Steam2, steamid, sizeof(steamid), false)) + return; KvRewind(g_kvOldScores); if (KvJumpToKey(g_kvOldScores, steamid) == false) return; - new oldscore = KvGetNum(g_kvOldScores, "score"); + int oldscore = KvGetNum(g_kvOldScores, "score"); KvGoBack(g_kvOldScores); KvDeleteKey(g_kvOldScores, steamid); g_iAddScore[client] = oldscore; - //SetEntProp(client, Prop_Send, "m_iFrags", KvGetNum(g_kvOldScores, "kills")); - //SetEntProp(client, Prop_Send, "m_iDeaths", KvGetNum(g_kvOldScores, "deaths")); + //SetEntProp(client, Prop_Data, "m_iFrags", KvGetNum(g_kvOldScores, "kills")); + //SetEntProp(client, Prop_Data, "m_iDeaths", KvGetNum(g_kvOldScores, "deaths")); //SetEntProp(client, Prop_Data, "m_iAssists", KvGetNum(g_kvOldScores, "assists")); StartHook(); } // When a player disconnects, remember the score. -public Action:Event_player_disconnect(Handle:event, const String:name[], bool:dontBroadcast) { - new userid = GetEventInt(event, "userid"); - new client = GetClientOfUserId(userid); +public void Event_player_disconnect(Event event, const char[] name, bool dontBroadcast) { + int userid = event.GetInt("userid"); + int client = GetClientOfUserId(userid); g_iAddScore[client] = 0; @@ -136,19 +142,20 @@ public Action:Event_player_disconnect(Handle:event, const String:name[], bool:do return; // Save the score if it is above 0 - new score = TF2_GetPlayerScore(client); + int score = TF2_GetPlayerScore(client); if (score <= 0) return; - decl String:steamid[64]; - GetClientAuthId(client, AuthId_Steam2, steamid, sizeof(steamid), false); + char steamid[64]; + if (!GetClientAuthId(client, AuthId_Steam2, steamid, sizeof(steamid), false)) + return; KvRewind(g_kvOldScores); if (KvJumpToKey(g_kvOldScores, steamid, true) == false) return; KvSetNum(g_kvOldScores, "score", score); - //KvSetNum(g_kvOldScores, "kills", GetEntProp(client, Prop_Send, "m_iFrags")); - //KvSetNum(g_kvOldScores, "deaths", GetEntProp(client, Prop_Send, "m_iDeaths")); + //KvSetNum(g_kvOldScores, "kills", GetEntProp(client, Prop_Data, "m_iFrags")); + //KvSetNum(g_kvOldScores, "deaths", GetEntProp(client, Prop_Data, "m_iDeaths")); //KvSetNum(g_kvOldScores, "assists", GetEntProp(client, Prop_Data, "m_iAssists")); KvGoBack(g_kvOldScores); } @@ -156,39 +163,39 @@ public Action:Event_player_disconnect(Handle:event, const String:name[], bool:do // --- This is where the magic happens! --- -StartHook() { +void StartHook() { if (g_bHookActivated) return; g_bHookActivated = true; - new iIndex = FindEntityByClassname(-1, "tf_player_manager"); + int iIndex = FindEntityByClassname(-1, "tf_player_manager"); if (iIndex == -1) SetFailState("Unable to find tf_player_manager entity"); SDKHook(iIndex, SDKHook_ThinkPost, Hook_OnThinkPost); } -StopHook() { +void StopHook() { if (!g_bHookActivated) return; g_bHookActivated = false; - new iIndex = FindEntityByClassname(-1, "tf_player_manager"); + int iIndex = FindEntityByClassname(-1, "tf_player_manager"); if (iIndex == -1) SetFailState("Unable to find tf_player_manager entity"); SDKUnhook(iIndex, SDKHook_ThinkPost, Hook_OnThinkPost); } -public Hook_OnThinkPost(iEnt) { - static iTotalScoreOffset = -1; +public void Hook_OnThinkPost(int iEnt) { + static int iTotalScoreOffset = -1; if (iTotalScoreOffset == -1) iTotalScoreOffset = FindSendPropInfo("CTFPlayerResource", "m_iTotalScore"); // Get all players' current scores - new iTotalScore[MAXPLAYERS+1]; + int iTotalScore[MAXPLAYERS+1]; GetEntDataArray(iEnt, iTotalScoreOffset, iTotalScore, MaxClients+1); // Add the old scores - for (new i = 1; i <= MaxClients; i++) { + for (int i = 1; i <= MaxClients; i++) { if (IsClientInGame(i)) { iTotalScore[i] += g_iAddScore[i]; } diff --git a/restorescore/update.txt b/restorescore/update.txt index 11a0f50..839dc3f 100644 --- a/restorescore/update.txt +++ b/restorescore/update.txt @@ -4,12 +4,11 @@ { "Version" { - "Latest" "1.1.2" + "Latest" "1.1.3" } - "Notes" "Changes in 1.1.2:" - "Notes" "- Fixed a minor error when the server is closing" - "Notes" "- Fixed SteamIDs sometimes being wrong in the logs" + "Notes" "Changes in 1.1.3:" + "Notes" "- Updated code to be compatible with SourceMod 1.12" } "Files" diff --git a/setup.ps1 b/setup.ps1 index 70b5b51..4b2f8b8 100644 --- a/setup.ps1 +++ b/setup.ps1 @@ -9,21 +9,38 @@ $env:PATH += [IO.Path]::PathSeparator + $PSScriptRoot + [IO.Path]::PathSeparator $env:PATH += Join-Path $PSScriptRoot "sourcemod-binaries" "addons" "sourcemod" "scripting" Write-Host "DONE!" +function Get-SpcompVersion { + try { + $spcompVersionString = (& "spcomp64") | Select-Object -First 1 + if ($spcompVersionString -match "SourcePawn Compiler (\d+\.\d+)(\.\d+)*") { + return $Matches[1] + } + } + catch { + } + return "" +} + Write-Host -NoNewline "Installing SourceMod binaries... " -if (Test-Path "sourcemod-binaries") { +if ((Test-Path "sourcemod-binaries") -and (Get-SpcompVersion) -eq "1.12") { Write-Host "already installed." } else { + if (Test-Path "sourcemod-binaries") { + $timestamp = (Get-Date).ToString("yyyyMMdd_HHmmss") + Rename-Item "sourcemod-binaries" ("sourcemod-binaries-backup-" + $timestamp) + } + if ($IsWindows) { - $sourcemodFilename = "sourcemod-1.10.0-git6545-windows.zip" - $sourcemodUrl = "https://sm.alliedmods.net/smdrop/1.10/" + $sourcemodFilename + $sourcemodFilename = "sourcemod-1.12.0-git7210-windows.zip" + $sourcemodUrl = "https://sm.alliedmods.net/smdrop/1.12/" + $sourcemodFilename Invoke-WebRequest $sourcemodUrl -OutFile $sourcemodFilename Expand-Archive $sourcemodFilename -DestinationPath "sourcemod-binaries" Remove-Item $sourcemodFilename } elseif ($IsLinux) { - $sourcemodFilename = "sourcemod-1.10.0-git6545-linux.tar.gz" - $sourcemodUrl = "https://sm.alliedmods.net/smdrop/1.10/" + $sourcemodFilename + $sourcemodFilename = "sourcemod-1.12.0-git7210-linux.tar.gz" + $sourcemodUrl = "https://sm.alliedmods.net/smdrop/1.12/" + $sourcemodFilename Invoke-WebRequest $sourcemodUrl -OutFile $sourcemodFilename mkdir sourcemod-binaries if (!$?) { exit $LASTEXITCODE } diff --git a/supstats2/README.md b/supstats2/README.md new file mode 100644 index 0000000..d5a5a8f --- /dev/null +++ b/supstats2/README.md @@ -0,0 +1,21 @@ +# Supplemental Stats v2 + +Features: + +- Logs damage and real damage per weapon +- Logs damage taken +- Logs airshots +- Logs self-healing (eg. by blackbox) +- Logs headshots (not just headshot kills) +- Logs medkit pickups including amount of healing +- Logs which medigun is used when ubering +- Logs crits and mini crits +- Logs non-buffed heals +- Logs ammo pickups +- Logs players spawning +- Logs game pauses +- Logs shots fired and shots hit (for certain weapons) + +| CVAR | Default | Description | +| -------------------------- | ------- | -------------------- | +| `supstats_accuracy <0\|1>` | `1` | Enable accuracy logs | diff --git a/supstats2/supstats2.sp b/supstats2/supstats2.sp index 32a8e36..0c133bd 100644 --- a/supstats2/supstats2.sp +++ b/supstats2/supstats2.sp @@ -87,6 +87,10 @@ Release notes: - Prevent script execution timeout on startup +---- 2.5.4 (14/07/2025) ---- +- Updated code to be compatible with SourceMod 1.12 + + TODO: - Use GetGameTime() instead of GetEngineTime()? - Write comments in code :D @@ -95,7 +99,7 @@ TODO: - Log Blackbox healing more precisely (perhaps use player_healonhit instead) */ -#pragma semicolon 1 // Force strict semicolon mode. +#pragma semicolon 1 #pragma newdecls required #include @@ -103,11 +107,11 @@ TODO: #include #include #include -#include +#include #undef REQUIRE_PLUGIN #include -#define PLUGIN_VERSION "2.5.3" +#define PLUGIN_VERSION "2.5.4" #define UPDATE_URL "https://sourcemod.krus.dk/supstats2/update.txt" #define NAMELEN 64 @@ -219,10 +223,10 @@ public void OnPluginStart() { g_tShotTypes.SetValue("tf_weapon_sniperrifle", SHOT_HITSCAN); g_tShotTypes.SetValue("tf_weapon_revolver", SHOT_HITSCAN); - g_hCvarEnableAccuracy = CreateConVar("supstats_accuracy", "1", "Enable accuracy"); + g_hCvarEnableAccuracy = CreateConVar("supstats_accuracy", "1", "Enable accuracy logs"); HookConVarChange(g_hCvarEnableAccuracy, CvarChange_EnableAccuracy); char cvarEnableAccuracy[16]; - GetConVarString(g_hCvarEnableAccuracy, cvarEnableAccuracy, sizeof(cvarEnableAccuracy)); + g_hCvarEnableAccuracy.GetString(cvarEnableAccuracy, sizeof(cvarEnableAccuracy)); CvarChange_EnableAccuracy(g_hCvarEnableAccuracy, cvarEnableAccuracy, cvarEnableAccuracy); char map[64]; @@ -355,7 +359,7 @@ public Action CheckPause(Handle timer, int client) { return Plugin_Continue; } -public Action Event_PlayerHealed(Handle event, const char[] name, bool dontBroadcast) { +public Action Event_PlayerHealed(Event event, const char[] name, bool dontBroadcast) { char patientName[NAMELEN]; char healerName[NAMELEN]; char patientSteamId[64]; @@ -364,11 +368,11 @@ public Action Event_PlayerHealed(Handle event, const char[] name, bool dontBroad char healerTeam[64]; char strAirshot[64] = ""; - int patientId = GetEventInt(event, "patient"); - int healerId = GetEventInt(event, "healer"); + int patientId = event.GetInt("patient"); + int healerId = event.GetInt("healer"); int patient = GetClientOfUserId(patientId); int healer = GetClientOfUserId(healerId); - int amount = GetEventInt(event, "amount"); + int amount = event.GetInt("amount"); if (lastAirshot[healer]) { Format(strAirshot, sizeof(strAirshot), " (airshot \"1\") (height \"%i\")", lastAirshotHeight[healer]); @@ -432,18 +436,18 @@ char classNames[][] = { }; -//public void Event_PlayerHealOnHit(Handle event, const string name[], bool dontBroadcast) { -// PrintToChatAll("heal on hit - amount(%i) client(%i)", GetEventInt(event, "amount"), GetEventInt(event, "entindex")); +//public void Event_PlayerHealOnHit(Event event, const string name[], bool dontBroadcast) { +// PrintToChatAll("heal on hit - amount(%i) client(%i)", event.GetInt("amount"), event.GetInt("entindex")); //} -public void Event_PlayerSpawned(Handle event, const char[] name, bool dontBroadcast) { +public void Event_PlayerSpawned(Event event, const char[] name, bool dontBroadcast) { char playerName[NAMELEN]; char playerSteamID[64]; char playerTeam[64]; - int userid = GetEventInt(event, "userid"); + int userid = event.GetInt("userid"); int client = GetClientOfUserId(userid); - int clss = GetEventInt(event, "class"); + int clss = event.GetInt("class"); if (!IsRealPlayer(client)) return; // eg. SourceTV @@ -467,12 +471,12 @@ public void Event_PlayerSpawned(Handle event, const char[] name, bool dontBroadc // "%s<%i><%s><%s>" triggered "chargedeployed" (medigun "%s") -public void EventPre_player_chargedeployed(Handle event, const char[] name, bool dontBroadcast) { +public void EventPre_player_chargedeployed(Event event, const char[] name, bool dontBroadcast) { g_bBlockLog = true; strcopy(g_sBlockLog, sizeof(g_sBlockLog), "chargedeployed"); } -public void Event_player_chargedeployed(Handle event, const char[] name, bool dontBroadcast) { +public void Event_player_chargedeployed(Event event, const char[] name, bool dontBroadcast) { g_bBlockLog = false; g_sBlockLog = ""; @@ -481,7 +485,7 @@ public void Event_player_chargedeployed(Handle event, const char[] name, bool do char playerTeam[16]; char medigun[64]; - int userid = GetEventInt(event, "userid"); + int userid = event.GetInt("userid"); int client = GetClientOfUserId(userid); GetClientName(client, playerName, sizeof(playerName)); GetClientAuthStringNew(client, playerAuth, sizeof(playerAuth), false); @@ -510,10 +514,10 @@ void GetMedigunName(int client, char[] medigun, int medigunLen) { // Medkit pickup with healing -public void Event_ItemPickup(Handle event, const char[] name, bool dontBroadcast) { +public void Event_ItemPickup(Event event, const char[] name, bool dontBroadcast) { char item[64]; - GetEventString(event, "item", item, sizeof(item)); - int userid = GetEventInt(event, "userid"); + event.GetString("item", item, sizeof(item)); + int userid = event.GetInt("userid"); int client = GetClientOfUserId(userid); if (strncmp(item, "medkit_", 7, true) == 0 && medpackHealAmount[client] != 0) { @@ -779,15 +783,15 @@ public Action OnTakeDamage(int victim, int &attacker, int &inflictor, float &dam return Plugin_Continue; } -public void Event_PlayerHurt(Handle event, const char[] name, bool dontBroadcast) { - int victimid = GetEventInt(event, "userid"); +public void Event_PlayerHurt(Event event, const char[] name, bool dontBroadcast) { + int victimid = event.GetInt("userid"); int victim = GetClientOfUserId(victimid); - int attackerid = GetEventInt(event, "attacker"); + int attackerid = event.GetInt("attacker"); int attacker = GetClientOfUserId(attackerid); - int damage = GetEventInt(event, "damageamount"); + int damage = event.GetInt("damageamount"); - bool crit = GetEventBool(event, "crit"); - bool minicrit = GetEventBool(event, "minicrit"); + bool crit = event.GetBool("crit"); + bool minicrit = event.GetBool("minicrit"); if (victim != attacker && attacker != 0) { char attackerName[NAMELEN]; @@ -1161,7 +1165,7 @@ float DistanceAboveGroundBox(int victim) { LogError("trace error. victim %N(%d)", victim, victim); } - CloseHandle(trace); + delete trace; return distance; } diff --git a/supstats2/update.txt b/supstats2/update.txt index 1851a56..f74518a 100644 --- a/supstats2/update.txt +++ b/supstats2/update.txt @@ -4,11 +4,11 @@ { "Version" { - "Latest" "2.5.3" + "Latest" "2.5.4" } - "Notes" "Changes in 2.5.3:" - "Notes" "- Prevent script execution timeout on startup" + "Notes" "Changes in 2.5.4:" + "Notes" "- Updated code to be compatible with SourceMod 1.12" } "Files" diff --git a/waitforstv/README.md b/waitforstv/README.md new file mode 100644 index 0000000..d58f6bc --- /dev/null +++ b/waitforstv/README.md @@ -0,0 +1,8 @@ +# Wait For SourceTV + +- Waits up to 90 seconds when changing map +- Doesn't wait more time than necessary + +| RCON Command | Description | +| ----------------- | ------------------------------ | +| `stopchangelevel` | Stops the map change countdown | diff --git a/waitforstv/update.txt b/waitforstv/update.txt index f110339..48c7690 100644 --- a/waitforstv/update.txt +++ b/waitforstv/update.txt @@ -4,11 +4,11 @@ { "Version" { - "Latest" "1.1.1" + "Latest" "1.1.2" } - "Notes" "Changes in 1.1.1:" - "Notes" "- Internal updates" + "Notes" "Changes in 1.1.2:" + "Notes" "- Updated code to be compatible with SourceMod 1.12" } "Files" diff --git a/waitforstv/waitforstv.sp b/waitforstv/waitforstv.sp index 29d2331..21d006e 100644 --- a/waitforstv/waitforstv.sp +++ b/waitforstv/waitforstv.sp @@ -24,6 +24,10 @@ Release notes: - Internal updates +---- 1.1.2 (14/07/2025) ---- +- Updated code to be compatible with SourceMod 1.12 + + BUG: - When using sm_map twice during a match, you cannot override the 90secs delay [Not a problem with waitforstv - ForceLevelChange simply doesn't call changelevel more than once per map.] @@ -31,6 +35,7 @@ BUG: */ #pragma semicolon 1 +#pragma newdecls required #include #include @@ -41,11 +46,11 @@ BUG: #include -#define PLUGIN_VERSION "1.1.1" -#define UPDATE_URL "http://sourcemod.krus.dk/waitforstv/update.txt" +#define PLUGIN_VERSION "1.1.2" +#define UPDATE_URL "https://sourcemod.krus.dk/waitforstv/update.txt" -public Plugin:myinfo = { +public Plugin myinfo = { name = "Wait For STV", author = "F2", description = "Waits for STV when changing map", @@ -54,21 +59,21 @@ public Plugin:myinfo = { }; -new Float:g_fMatchEndTime; // time when match ended -new g_iStvCountdown = 0, g_iStvCountdownStartAmount; -new String:g_sStvCountdownNextMap[128]; // which map to switch to after the countdown -new bool:g_bMatchPlayed = false; -new Handle:g_hCountdownTimer = INVALID_HANDLE; -new Handle:g_cvarDelayMapChange = INVALID_HANDLE; +float g_fMatchEndTime; // time when match ended +int g_iStvCountdown = 0, g_iStvCountdownStartAmount; +char g_sStvCountdownNextMap[128]; // which map to switch to after the countdown +bool g_bMatchPlayed = false; +Handle g_hCountdownTimer = null; +ConVar g_cvarDelayMapChange = null; -public OnPluginStart() { +public void OnPluginStart() { RegServerCmd("changelevel", Cmd_Changelevel); RegServerCmd("stopchangelevel", Cmd_StopChangelevel); g_cvarDelayMapChange = FindConVar("tv_delaymapchange_protect"); HookConVarChange(g_cvarDelayMapChange, ConVar_DelayMapChange); - SetConVarInt(g_cvarDelayMapChange, 0); + g_cvarDelayMapChange.IntValue = 0; Match_OnPluginStart(); @@ -77,47 +82,47 @@ public OnPluginStart() { Updater_AddPlugin(UPDATE_URL); } -public OnLibraryAdded(const String:name[]) { +public void OnLibraryAdded(const char[] name) { // Set up auto updater if (StrEqual(name, "updater")) Updater_AddPlugin(UPDATE_URL); } -public OnMapStart() { +public void OnMapStart() { Match_OnMapStart(); g_bMatchPlayed = false; - g_hCountdownTimer = INVALID_HANDLE; + g_hCountdownTimer = null; g_iStvCountdown = 0; } -public OnMapEnd() { +public void OnMapEnd() { Match_OnMapEnd(); } -StartMatch() { +void StartMatch() { g_bMatchPlayed = false; } -ResetMatch() { +void ResetMatch() { EndMatch(true); } -EndMatch(bool:endedMidgame) { +void EndMatch(bool endedMidgame) { g_bMatchPlayed = true; g_fMatchEndTime = GetEngineTime(); // Remember the match end-time } -public ConVar_DelayMapChange(Handle:cvar, const String:oldVal[], const String:newVal[]) { - new v = StringToInt(newVal); +public void ConVar_DelayMapChange(ConVar cvar, const char[] oldVal, const char[] newVal) { + int v = StringToInt(newVal); if (v == 0) return; - SetConVarInt(g_cvarDelayMapChange, 0); + g_cvarDelayMapChange.IntValue = 0; } -public Action:Cmd_Changelevel(args) { +public Action Cmd_Changelevel(int args) { // If no arguments are given then show the standard syntax message if (args == 0) return Plugin_Continue; @@ -127,19 +132,19 @@ public Action:Cmd_Changelevel(args) { return Plugin_Continue; // If tv is disabled then just change the map - new bool:tvenabled = GetConVarBool(FindConVar("tv_enable")); + bool tvenabled = FindConVar("tv_enable").BoolValue; if (tvenabled == false) return Plugin_Continue; // Check if the map is on the server. If not, show an error message. - decl String:map[128]; + char map[128]; GetCmdArg(1, map, sizeof(map)); if (!IsMapValid(map)) return Plugin_Continue; // Retrieve the stvdelay - new Float:stvdelayf = GetConVarFloat(FindConVar("tv_delay")); - new stvdelay = RoundToCeil(stvdelayf); + float stvdelayf = FindConVar("tv_delay").FloatValue; + int stvdelay = RoundToCeil(stvdelayf); if (stvdelay < 0) stvdelay = 0; @@ -160,7 +165,7 @@ public Action:Cmd_Changelevel(args) { // A match is over, find out how much more time we need to wait stvdelay += 2; // add some extra delay, just in case - new Float:timeuntilchange = (g_fMatchEndTime + stvdelay) - GetEngineTime(); + float timeuntilchange = (g_fMatchEndTime + stvdelay) - GetEngineTime(); if (timeuntilchange < 1.0) return Plugin_Continue; @@ -179,16 +184,16 @@ public Action:Cmd_Changelevel(args) { return Plugin_Stop; } -public Action:Cmd_StopChangelevel(args) { +public Action Cmd_StopChangelevel(int args) { KillTimer(g_hCountdownTimer); - g_hCountdownTimer = INVALID_HANDLE; + g_hCountdownTimer = null; g_iStvCountdown = 0; CPrintToChatAll2("{lightgreen}[Wait for STV] {default}Map change cancelled!"); return Plugin_Continue; } -public Action:StvCountdownTrigger(Handle:timer, any:edict) { +public Action StvCountdownTrigger(Handle timer) { g_iStvCountdown--; if (g_iStvCountdown <= 0) { @@ -210,9 +215,6 @@ public Action:StvCountdownTrigger(Handle:timer, any:edict) { return Plugin_Continue; } -PrintTimeRemainingUntilMapChange() { +void PrintTimeRemainingUntilMapChange() { CPrintToChatAll2("{lightgreen}[Wait for STV] {default}Changing map to %s in %i second%s...", g_sStvCountdownNextMap, g_iStvCountdown, g_iStvCountdown == 1 ? "" : "s"); } - - -