Skip to content

Commit c036159

Browse files
committed
Fix (daemon): Do not auto-remove players from livestats table if they exist in server status
1 parent 8b081c9 commit c036159

File tree

2 files changed

+56
-14
lines changed

2 files changed

+56
-14
lines changed

scripts/BASTARDrcon.pm

Lines changed: 45 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -235,12 +235,26 @@ sub getPlayers
235235

236236
my %players;
237237

238+
my $match;
239+
my $name;
240+
my $userid;
241+
my $uniqueid;
242+
my $time;
243+
my $ping;
244+
my $loss;
245+
my $state;
246+
my $address;
247+
my $port;
238248
# HL1
239249
# name userid uniqueid frag time ping loss adr
240250
# 1 "psychonic" 1 STEAM_0:1:4153990 0 00:33 13 0 192.168.5.115:27005
241251

252+
# HL1 - HLTV
253+
# name userid uniqueid frag time ping loss adr
254+
# 1 "HLTV Proxy" 1 HLTV hltv:0/128 delay:30 00:33 10.5.0.3:27020
242255
foreach my $line (@lines)
243256
{
257+
$match = 0;
244258
if ($line =~ /^\#\s*\d+\s+
245259
"(.+)"\s+ # name
246260
(\d+)\s+ # userid
@@ -250,23 +264,42 @@ sub getPlayers
250264
(\d+)\s+ # loss
251265
([^:]+): # addr
252266
(\S+) # port
253-
$/x)
267+
$/x) {
268+
$match = 1;
254269

255-
{
256-
my $name = $1;
257-
my $userid = $2;
258-
my $uniqueid = $3;
259-
my $time = $4;
260-
my $ping = $5;
261-
my $loss = $6;
262-
my $state = "";
263-
my $address = $7;
264-
my $port = $8;
270+
$name = $1;
271+
$userid = $2;
272+
$uniqueid = $3;
273+
$time = $4;
274+
$ping = $5;
275+
$loss = $6;
276+
$state = "";
277+
$address = $7;
278+
$port = $8;
265279

266280
$uniqueid =~ s/^STEAM_[0-9]+?\://i;
267281

268282
# &::printEvent("DEBUG", "USERID: '$userid', NAME: '$name', UNIQUEID: '$uniqueid', TIME: '$time', PING: '$ping', LOSS: '$loss', ADDRESS:'$address', CLI_PORT: '$port'", 1);
283+
} elsif ($line =~ /^\#\s*\d+\s+
284+
"([^"]+)"\s+ # name
285+
(\d+)\s+ # userid
286+
([^\s]+)\s+ # uniqueid
287+
hltv:[^\s]+\s+delay:[^\s]+\s+ # frag
288+
([\d:]+)\s+ # time
289+
([^:]+): # addr
290+
(\S+) # port
291+
$/x) {
292+
$match = 1;
293+
294+
$name = $1;
295+
$userid = $2;
296+
$uniqueid = $3;
297+
$time = $4;
298+
$address = $5;
299+
$port = $6;
300+
}
269301

302+
if ($match) {
270303
if ($::g_mode eq "NameTrack") {
271304
$players{$name} = {
272305
"Name" => $name,
@@ -381,4 +414,4 @@ sub getPlayer
381414
}
382415

383416
1;
384-
# end
417+
# end

scripts/hlstats.pl

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3595,6 +3595,9 @@ sub getLine
35953595
if($g_servers{$server}->{"srv_players"})
35963596
{
35973597
my %players_temp=%{$g_servers{$server}->{"srv_players"}};
3598+
my %status_players=$g_servers{$server}->rcon_getplayers();
3599+
# use Data::Dumper;
3600+
# print Dumper(\%status_players);
35983601
while ( my($pl, $player) = each(%players_temp) ) {
35993602
my $timeout = 250; # 250;
36003603
if ($g_mode eq "LAN") {
@@ -3610,8 +3613,14 @@ sub getLine
36103613
# we delete any player who is inactive for over $timeout sec
36113614
# - they probably disconnected silently somehow.
36123615
if (($player->{is_bot} == 0) || ($g_stdin)) {
3613-
&printEvent(400, "Auto-disconnecting " . $player->getInfoString() ." for idling (" . ($ev_daemontime - $player->{timestamp}) . " sec) on server (".$server.")");
3614-
removePlayer($server, $userid, $uniqueid);
3616+
if (defined($status_players{$uniqueid})) {
3617+
# Don't remove player who exists in server 'status'
3618+
&printNotice("Not auto-disconnecting " . $player->getInfoString() . " because player exists in server status");
3619+
}else {
3620+
# Remove player who does not exists in server 'status'
3621+
&printEvent(400, "Auto-disconnecting " . $player->getInfoString() ." for idling (" . ($ev_daemontime - $player->{timestamp}) . " sec) on server (".$server.")");
3622+
removePlayer($server, $userid, $uniqueid);
3623+
}
36153624
}
36163625
}
36173626
}

0 commit comments

Comments
 (0)