Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- # imagotrigger@gmail.com - Innocent Bystander DOA
- use common::sense;
- use DateTime;
- use DBI;
- use File::Tail;
- our $bWin;
- BEGIN {
- $bWin = ($^O eq "MSWin32") ? 1 : 0;
- if (!$bWin) {
- eval "use App::Daemon qw( daemonize )";
- die "$@" if $@;
- $App::Daemon::as_user = "root";
- daemonize();
- }
- }
- our $dbh ||= DBI->connect('DBI:mysql:database=arma2;host=arma2.db.9377707.hostedresource.com', 'arma2', 'GB77HRQi31546R') || die "Could not connect to database: $DBI::errstr";
- our $ts3_dbh ||= DBI->connect("dbi:SQLite:dbname=D:\\ts3\\ts3server.sqlitedb","","",{RaiseError => 0}) || die "Could not connect to database: $DBI::errstr";
- $dbh->{PrintError} = 0;
- our $logfile = "D:/zl/createvehicle.log";
- our $match_re = q{(.*?) (.*?) (.*?) \((\d+).(\d+).(\d+).(\d+):(\d+)\) (.*) - #(\d+) "(.*)" (.*)};
- our $selc = $ts3_dbh->prepare(q{SELECT client_nickname, client_lastconnected FROM clients where client_lastip == ? ORDER BY client_lastconnected ASC}) or die $!;
- our $selp = $dbh->prepare(q{SELECT name,num FROM players WHERE ip = ? ORDER BY TimeEnter ASC}) or die $!;
- our $insa = $dbh->prepare(q{INSERT INTO actions (action,minutes,target,targetnum,reason,server,name,complete) values (?,?,?,?,?,?,?,0)}) or die $!;
- while(!-e $logfile) {
- sleep 5;
- }
- our %actions = ();
- my $ref=tie *FH,"File::Tail",(name=>$logfile);
- while (<FH>) {
- my $ping = $dbh->ping;
- if (!$ping) {
- $dbh = DBI->connect('DBI:mysql:database=arma2;host=arma2.db.9377707.hostedresource.com', 'arma2', 'GB77HRQi31546R') || die "Could not connect to database: $DBI::errstr";
- $selp = $dbh->prepare(q{SELECT name,num FROM players WHERE ip = ? ORDER BY TimeEnter ASC}) or die $!;
- $insa = $dbh->prepare(q{INSERT INTO actions (action,minutes,target,targetnum,reason,server,name,complete) values (?,?,?,?,?,?,?,0)}) or die $!;
- }
- my $ping2 = $ts3_dbh->ping;
- if (!$ping) {
- $ts3_dbh = DBI->connect("dbi:SQLite:dbname=D:\\ts3\\ts3server.sqlitedb","","",{RaiseError => 0}) || die "Could not connect to database: $DBI::errstr";
- $selc = $ts3_dbh->prepare(q{SELECT client_nickname, client_lastconnected FROM clients where client_lastip == ? ORDER BY client_lastconnected ASC}) or die $!;
- }
- DoKicks();
- my $line = $_;
- chomp $line;
- if ($line =~ /$match_re/) {
- if ($11 eq 'Soldier_Crew_PMC') {
- my $ip = "$4.$5.$6.$7";
- my $name = $3;
- print "$name - $ip spawned as a cop\n";
- $selc->execute($ip);
- my $ts3_client = $selc->fetchrow_hashref;
- if (!$ts3_client->{client_lastconnected}) {
- print "$name is not in TS3\n";
- Action($name,$ip);
- } else {
- my $ts3_name = $ts3_client->{client_nickname};
- my $ts3_time = $ts3_client->{client_lastconnected};
- my $delta = time - $ts3_time;
- my $delta_min = $delta / 60;
- print "$name is in TS3 as $ts3_name connected $delta_min minutes ago\n";
- if ($delta_min > (60 * 24)) {
- print " ^^INVALID ^^\n";
- Action($name,$ip);
- }
- }
- }
- }
- }
- sub Action {
- my ($name,$ip) = @_;
- print " --- taking action $name - $ip\n";
- if (!$actions{$ip}) {
- $actions{$ip}{NAME} = $name;
- $actions{$ip}{LAST} = time;
- print "warn...\n";
- $selp->execute($ip);
- my $player = $selp->fetchrow_hashref;
- $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');
- } else {
- print "kick...\n";
- $selp->execute($ip);
- my $player = $selp->fetchrow_hashref;
- $insa->execute('kick','0',$name,$player->{num},"Join GC TS3 (72.20.13.74) to play cop.",'zl','tail_createvehicle.pl');
- delete $actions{$ip};
- }
- }
- sub DoKicks {
- foreach my $ip (keys %actions) {
- if ( (time - $actions{$ip}{LAST}) > 180) {
- $selc->execute($ip);
- my $ts3_client = $selc->fetchrow_hashref;
- if (!$ts3_client->{client_lastconnected}) {
- print "kicking ".$actions{$ip}{NAME}. " 3 min of warning still not in ts3...\n";
- $selp->execute($ip);
- my $player = $selp->fetchrow_hashref;
- $insa->execute('kick','0',$actions{$ip}{NAME},$player->{num},"Join GC TS3 (72.20.13.74) to play cop.",'zl','tail_createvehicle.pl');
- delete $actions{$ip};
- } else {
- my $ts3_name = $ts3_client->{client_nickname};
- my $ts3_time = $ts3_client->{client_lastconnected};
- my $delta = time - $ts3_time;
- my $delta_min = $delta / 60;
- if ($delta_min > (60 * 24)) {
- print "kicking ".$actions{$ip}{NAME}. " 3 min of warning still not in ts3 RECENTLY...\n";
- $selp->execute($ip);
- my $player = $selp->fetchrow_hashref;
- $insa->execute('kick','0',$actions{$ip}{NAME},$player->{num},"Join GC TS3 (72.20.13.74) to play cop.",'zl','tail_createvehicle.pl');
- delete $actions{$ip};
- } else {
- delete $actions{$ip};
- }
- }
- }
- }
- }
- __END__
Add Comment
Please, Sign In to add comment