Guest User

Untitled

a guest
Dec 10th, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 4.73 KB | None | 0 0
  1. #!/usr/bin/perl
  2.  
  3. # imagotrigger@gmail.com - Innocent Bystander DOA
  4.  
  5. use common::sense;
  6. use DateTime;
  7. use DBI;
  8. use File::Tail;
  9.  
  10. our $bWin;
  11.  
  12. BEGIN {
  13.     $bWin = ($^O eq "MSWin32") ? 1 : 0;
  14.     if (!$bWin) {
  15.         eval "use App::Daemon qw( daemonize )";
  16.         die "$@" if $@;
  17.         $App::Daemon::as_user = "root";
  18.         daemonize();
  19.     }
  20. }
  21.  
  22. our $dbh ||= DBI->connect('DBI:mysql:database=arma2;host=arma2.db.9377707.hostedresource.com', 'arma2', 'GB77HRQi31546R') || die "Could not connect to database: $DBI::errstr";
  23. our $ts3_dbh ||= DBI->connect("dbi:SQLite:dbname=D:\\ts3\\ts3server.sqlitedb","","",{RaiseError => 0}) || die "Could not connect to database: $DBI::errstr";
  24.  
  25. $dbh->{PrintError} = 0;
  26.  
  27. our $logfile = "D:/zl/createvehicle.log";
  28. our $match_re = q{(.*?) (.*?) (.*?) \((\d+).(\d+).(\d+).(\d+):(\d+)\) (.*) - #(\d+) "(.*)" (.*)};
  29.  
  30. our $selc = $ts3_dbh->prepare(q{SELECT client_nickname, client_lastconnected FROM clients where client_lastip == ? ORDER BY client_lastconnected ASC}) or die $!;
  31. our $selp = $dbh->prepare(q{SELECT name,num FROM players WHERE ip = ? ORDER BY TimeEnter ASC}) or die $!;
  32. our $insa = $dbh->prepare(q{INSERT INTO actions (action,minutes,target,targetnum,reason,server,name,complete) values (?,?,?,?,?,?,?,0)}) or die $!;
  33.  
  34. while(!-e $logfile) {
  35.     sleep 5;
  36. }
  37.  
  38. our %actions = ();
  39.  
  40. my $ref=tie *FH,"File::Tail",(name=>$logfile);
  41. while (<FH>) {
  42.     my $ping = $dbh->ping;
  43.     if (!$ping) {
  44.         $dbh = DBI->connect('DBI:mysql:database=arma2;host=arma2.db.9377707.hostedresource.com', 'arma2', 'GB77HRQi31546R') || die "Could not connect to database: $DBI::errstr";
  45.         $selp = $dbh->prepare(q{SELECT name,num FROM players WHERE ip = ? ORDER BY TimeEnter ASC}) or die $!;
  46.         $insa = $dbh->prepare(q{INSERT INTO actions (action,minutes,target,targetnum,reason,server,name,complete) values (?,?,?,?,?,?,?,0)}) or die $!;
  47.     }
  48.     my $ping2 = $ts3_dbh->ping;
  49.     if (!$ping) {
  50.         $ts3_dbh = DBI->connect("dbi:SQLite:dbname=D:\\ts3\\ts3server.sqlitedb","","",{RaiseError => 0}) || die "Could not connect to database: $DBI::errstr";
  51.         $selc = $ts3_dbh->prepare(q{SELECT client_nickname, client_lastconnected FROM clients where client_lastip == ? ORDER BY client_lastconnected ASC}) or die $!;
  52.     }
  53.     DoKicks();
  54.     my $line = $_;
  55.     chomp $line;
  56.     if ($line =~ /$match_re/) {
  57.         if ($11 eq 'Soldier_Crew_PMC') {
  58.             my $ip = "$4.$5.$6.$7";
  59.             my $name = $3;
  60.             print "$name - $ip spawned as a cop\n";
  61.             $selc->execute($ip);
  62.             my $ts3_client = $selc->fetchrow_hashref;
  63.             if (!$ts3_client->{client_lastconnected}) {
  64.                 print "$name is not in TS3\n";
  65.                 Action($name,$ip);
  66.             } else {
  67.                 my $ts3_name = $ts3_client->{client_nickname};
  68.                 my $ts3_time = $ts3_client->{client_lastconnected};
  69.                 my $delta = time - $ts3_time;
  70.                 my $delta_min = $delta / 60;
  71.                 print "$name is in TS3 as $ts3_name connected $delta_min minutes ago\n";
  72.                 if ($delta_min > (60 * 24)) {
  73.                     print " ^^INVALID ^^\n";
  74.                     Action($name,$ip);
  75.                 }
  76.             }
  77.         }
  78.     }
  79. }
  80.  
  81. sub Action {
  82.     my ($name,$ip) = @_;
  83.     print " --- taking action $name - $ip\n";
  84.    
  85.     if (!$actions{$ip}) {
  86.         $actions{$ip}{NAME} = $name;
  87.         $actions{$ip}{LAST} = time;
  88.         print "warn...\n";
  89.         $selp->execute($ip);
  90.         my $player = $selp->fetchrow_hashref;
  91.         $insa->execute('warn','0',$name,$player->{num},"You must be on GC TS3 (72.20.13.74) to continue playing cop.",'zl','tail_createvehicle.pl');
  92.        
  93.     } else {
  94.         print "kick...\n";
  95.         $selp->execute($ip);
  96.         my $player = $selp->fetchrow_hashref;
  97.         $insa->execute('kick','0',$name,$player->{num},"Join GC TS3 (72.20.13.74) to play cop.",'zl','tail_createvehicle.pl');     
  98.         delete $actions{$ip};
  99.     }
  100.    
  101. }
  102.  
  103. sub DoKicks {
  104.     foreach my $ip (keys %actions) {
  105.         if ( (time - $actions{$ip}{LAST}) > 180) {
  106.             $selc->execute($ip);
  107.             my $ts3_client = $selc->fetchrow_hashref;
  108.             if (!$ts3_client->{client_lastconnected}) {
  109.                 print "kicking ".$actions{$ip}{NAME}. " 3 min of warning still not in ts3...\n";
  110.                 $selp->execute($ip);
  111.                 my $player = $selp->fetchrow_hashref;
  112.                 $insa->execute('kick','0',$actions{$ip}{NAME},$player->{num},"Join GC TS3 (72.20.13.74) to play cop.",'zl','tail_createvehicle.pl');       
  113.                 delete $actions{$ip};          
  114.             } else {
  115.                 my $ts3_name = $ts3_client->{client_nickname};
  116.                 my $ts3_time = $ts3_client->{client_lastconnected};
  117.                 my $delta = time - $ts3_time;
  118.                 my $delta_min = $delta / 60;
  119.                 if ($delta_min > (60 * 24)) {
  120.                     print "kicking ".$actions{$ip}{NAME}. " 3 min of warning still not in ts3 RECENTLY...\n";
  121.                     $selp->execute($ip);
  122.                     my $player = $selp->fetchrow_hashref;
  123.                     $insa->execute('kick','0',$actions{$ip}{NAME},$player->{num},"Join GC TS3 (72.20.13.74) to play cop.",'zl','tail_createvehicle.pl');       
  124.                     delete $actions{$ip};                          
  125.                 } else {
  126.                     delete $actions{$ip};
  127.                 }
  128.             }
  129.         }
  130.     }
  131.    
  132. }
  133.  
  134. __END__
Add Comment
Please, Sign In to add comment