#!/usr/bin/perl use IO::Socket; $server = "irc.euirc.net"; $port = 6666; @owners = ("ra","Madison",); $nick = "sr_dice"; $verbose = 1; $version = "0.73a"; #24.11.2012 $m = 50; $ident= 0; $to = 600000; $sortdice = 0; $sys = 0; $shortdes = 0; $join = 0; $pings = 0; $partmsg = "Bye chummers!\n"; $welcomemsg = "Hoi chummers!\n"; $config = "./srwb.cnf"; open(TMP,$config) || print "Kann Configfile $config nicht lesen : $!\n"; @cfile = ; close ($TMP); chomp(@cfile); for ($i=0; $i < @cfile; $i++) { @cline = split(/\ /,$cfile[$i]); if ($cline[0] eq "server") { $server=$cline[1]; } if ($cline[0] eq "port") { $port=$cline[1]; } if ($cline[0] eq "nick") { $nick=$cline[1]; } if ($cline[0] eq "verbose") { $v=$cline[1]; } if ($cline[0] eq "max") { $m=$cline[1]; } if ($cline[0] eq "sortdice") { $sortdice=$cline[1]; } if ($cline[0] eq "welcomemsg") { $welcomemsg = ""; for ($a=1;$a < @cline;$a++) { $welcomemsg .= $cline[$a] . " "; } } if ($cline[0] eq "partmsg") { $partmsg = ""; for ($a=1;$a < @cline;$a++) { $partmsg .= $cline[$a] . " "; } } if ($cline[0] eq "owners") { @owners=$cline[1]; for ($a=2;$a < @cline;$a++) { push (@owners,$cline[$a]); } } if ($cline[0] eq "system") { $sys=$cline[1]; } if ($cline[0] eq "shortdes") { $shortdes=$cline[1]; } if ($cline[0] eq "join") { $join=$cline[1]; } } for ($i=0;$i < @ARGV; $i++) { if ($ARGV[$i] eq "h") { print "\n"; print "s \n"; print "p \n"; print "o \n"; print "n \n"; print "q quite\n"; print "m \n"; print "j \n"; print "i \n"; print "sys \n"; exit; } if ($ARGV[$i] eq "j") { $join = $ARGV[$i+1]; } if ($ARGV[$i] eq "s") { $server = $ARGV[$i+1]; } if ($ARGV[$i] eq "i") { $ident = $ARGV[$i+1]; } if ($ARGV[$i] eq "p") { $port = $ARGV[$i+1]; } if ($ARGV[$i] eq "c") { $channel = $ARGV[$i+1]; } if ($ARGV[$i] eq "n") { $nick = $ARGV[$i+1]; } if ($ARGV[$i] eq "m") { $m = $ARGV[$i+1]; } if ($ARGV[$i] eq "sys") { $sys = $ARGV[$i+1]; } if ($ARGV[$i] eq "q") { $v = 0; } } $lastping = time(); print "Server : $server Port : $port Nick : $nick \nVerbinde..."; my $sock = new IO::Socket::INET ( PeerAddr => $server, PeerPort => $port, Proto => 'tcp', ); die "Kann keinen Socket erstellen: $!\n" unless $sock; $sock->autoflush; print "Verbunden\n"; print $sock "USER $nick localhost $server $nick\n"; print "--> USER $nick localhost $server $nick\n"; print $sock "NICK $nick\n"; print "--> NICK $nick\n"; while (1) { if (($ident ne 0) && ($pings > 0)) { print $sock "PRIVMSG Nickserv :identify $ident\n"; print "--> PRIVMSG Nickserv :identify $ident\n"; $ident = 0; } if (($join ne 0) && ($pings > 0)) { print $sock "JOIN $join \n"; print "--> Joining $join \n"; print $sock "PRIVMSG $join :$welcomemsg\n"; $join = 0; } $line = <$sock>; if (($v ne 0) && ($line ne "")) { print "<-- $line"; } if ($line =~ /$nick :Nickname is already in use./) { print "Nick schon vergeben\n"; exit; } if ($line =~ /PING/) { $pings++; $line =~ s/PING/PONG/g; $lastping = time(); print $sock $line; print "--> $line"; } else { if ($line =~ /PRIVMSG $nick/) { $type = 1; @tmp = split(/!/,$line); $sender = $tmp[0]; $sender =~ s/\://g; @tmp = split(/:/,$line); $msg = $tmp[2]; for ($a=3;$a < @tmp; $a++) { $msg .= ":". $tmp[$a]; } &check_adm; if ($msg =~ "SHOWVERSION") { print $sock "PRIVMSG $sender :Lloyd - SR Wuerfelbot $version by Robert Altschaffel - owner : @owners\n"; } if ($adm eq 0) { print "<$sender> $msg"; $channel = $sender; &chk_dice; } else { print "+$sender+ $msg"; &admin; } } else { if ($line =~ /PRIVMSG/) { $type = 2; @tmp = split(/!/,$line); $sender = $tmp[0]; $sender =~ s/\://g; @tmp = split(/:/,$line); $msg = $tmp[2]; for ($a=3;$a < @tmp; $a++) { $msg .= ":". $tmp[$a]; } @tmp = split(/\ /,$line); $channel = $tmp[2]; print "<$sender : $channel> $msg"; if ($msg eq "help\n") {$channel=$sender; &dice_help;} &chk_dice; } } } } sub chk_dice { #System 0 - Standart Dx ohne weiterwuerfeln #System 1 - Standart Dx mit weiterwuerfeln #System 2 - Mechwarrior #mode 0 - unset #mode 1 - offener Wurf #mode 2 - Wurf mit MW #mode 3 - MW Wurf (MW?) #mode 4 - festen Wert addieren (?) #mode 5 - festen Wert auf alle addieren (MW?) #mode 6 - MW Wurf - Schadenslokalisation, toadd : 0 - Front, 1 - Left, 2 - Right #mode 7 - MW Wurf - Cluster Hit Table, toadd : 0 - Front, 1 - Left, 2 - Right, 3 - kein Schaden #mode 8 - MW Wurf - Schadenslokalisation Punch, toadd : 0 - Front, 1 - Left, 2 - Right #mode 9 - MW Wurf - Schadenslokalisation Kick, toadd : 0 - Front, 1 - Left, 2 - Right #mode 10 - Abenteueridee #mode 11 - Karte ziehen # if($msg =~ /^[0-9]+[wW][0-9mflrcpkat][flrd]*[0-9+* ]*$/) { if($msg =~ /^[0-9]*[.]*[0-9]+[wW][0-9mflrcpkat][flrd]*[0-9+* ]*$/) { $msg =~ s/D/W/g; $msg =~ s/W/w/g; $msg =~ s/d/w/g; chomp($msg); @tmp=split(/w/,$msg); $dices = $tmp[0]; $modeline = $tmp[1]; chomp($modeline); $toadd = 0; $tomult = 0; $mw = 0; $mode = 0; $sides = 0; if ($modeline =~ /\+/) { $mode = 4; @linex=split(/\+/,$modeline); $toadd = $linex[1]; $sides = $linex[0]; @linex=split(/\ /,$toadd); $toadd = $linex[0]; if ($sides == "t") { $sides = 10; $tomult=10;} } if ($modeline =~ /\*/) { $mode = 5; @linex=split(/\*/,$modeline); $tomult = $linex[1]; $sides = $linex[0]; } @linex=split(/\ /,$modeline); if ($sides == 0) { $sides = $linex[0]; } if ($mode == 4 || $mode == 5) { if ($linex[1] == "") { $mw = 0; } else { $mw = $linex[1]; } } if ($linex[0] eq "m") { $mode = 3; $sides = 6; if ($linex[1] == "") { $mw = 0; } else { $mw = $linex[1]; } } if ($linex[0] eq "a") { $mode = 10; $sides = 6; if ($linex[1] == "") { $mw = 0; } else { $mw = $linex[1]; } } if ($linex[0] eq "k") { $mode = 11; $sides = 6; } if ($linex[0] eq "td") { $mode = 11; $sides = 6; } if ($linex[0] eq "f") { $toadd = 0; $mode = 6; $sides = 6; } if ($linex[0] eq "l") { $toadd = 1; $mode = 6; $sides = 6; } if ($linex[0] eq "r") { $toadd = 2; $mode = 6; $sides = 6; } if ($linex[0] eq "c") { $mode = 7; $sides = 6; $mw = $linex[1]; $toadd = 3; } if ($linex[0] eq "cf") { $mode = 7; $sides = 6; $mw = $linex[1]; $toadd = 0; } if ($linex[0] eq "cl") { $mode = 7; $sides = 6; $mw = $linex[1]; $toadd = 1; } if ($linex[0] eq "cr") { $mode = 7; $sides = 6; $mw = $linex[1]; $toadd = 2; } if ($linex[0] eq "pf") { $mode = 8; $sides = 6; $mw = $linex[1]; $toadd = 0; } if ($linex[0] eq "pl") { $mode = 8; $sides = 6; $mw = $linex[1]; $toadd = 1; } if ($linex[0] eq "pr") { $mode = 8; $sides = 6; $mw = $linex[1]; $toadd = 2; } if ($linex[0] eq "kf") { $mode = 9; $sides = 6; $mw = $linex[1]; $toadd = 0; } if ($linex[0] eq "kl") { $mode = 9; $sides = 6; $mw = $linex[1]; $toadd = 1; } if ($linex[0] eq "kr") { $mode = 9; $sides = 6; $mw = $linex[1]; $toadd = 2; } if ($mode == 0) { if ($linex[1] == "") { $mode = 1; } else { $mw = $linex[1]; $mode = 2; } } if ($sides < 2) { $sides = 2; } print "mode : $mode, dices : $dices, sides : $sides, mw : $mw, toadd : $toadd, tomult : $tomult, modeline : $modeline\n"; if ($mode == 1) { if ($dices > $m) { $dices = $m;} @diceres = (); for ($i = 0; $i < $dices; $i++) { $td = int(rand($sides)+1); push (@diceres,$td); } $out = "PRIVMSG $channel :Werfe $dices\W$sides fuer $sender : [ @diceres ]\n"; print $sock $out; } if ($mode == 2) { if ($dices > $m) { $dices = $m;} @diceres = (); $suc = 0; for ($i = 0; $i < $dices; $i++) { $td = 0; while ($td % $sides eq 0) { $td += int(rand($sides)+1); } if ($td >= $mw) {$suc++; } push (@diceres,$td); } if ($suc == 1) { $out = "PRIVMSG $channel :Werfe $dices\W$sides gegen $mw fuer $sender : [ @diceres ] => $suc Erfolg\n"; } else { $out = "PRIVMSG $channel :Werfe $dices\W$sides gegen $mw fuer $sender : [ @diceres ] => $suc Erfolge\n"; } print $sock $out; } if ($mode == 3) { if ($mw > 0) { $suc = 0;} if ($dices > $m) { $dices = $m;} @diceres = (); for ($i = 0; $i < $dices; $i++) { $td = int(rand($sides)+1) + int(rand($sides)+1); if ($td >= $mw) {$suc++;} push (@diceres,$td); } if ($mw > 0) { if ($suc == 1) { $out = "PRIVMSG $channel :Werfe $dices\*2W$sides gegen $mw fuer $sender : [ @diceres ] => $suc Erfolg \n"; } else { $out = "PRIVMSG $channel :Werfe $dices\*2W$sides gegen $mw fuer $sender : [ @diceres ] => $suc Erfolge \n"; } } else { $out = "PRIVMSG $channel :Werfe $dices\*2W$sides fuer $sender : [ @diceres ]\n"; } print $sock $out; } if ($mode == 4) { if ($dices > $m) { $dices = $m;} if ($dices =~ /\./) { @linex=split(/\./,$dices); $dices = $linex[1]; $tmp = $linex[0]; # print "dices $dices | tmp $tmp \n"; if ($dices < 1) {$dices = 1;} if ($tmp < 1) {$tmp = 1;} if ($mw > 0) {$suc = 0;} # print "dices $dices | tmp $tmp \n"; if ($tomult == 10) {$dices++}; $dicestr = ""; $resstr = "["; @diceres = (); for ($j = 0; $j < $tmp; $j++) { $ressum = 0; for ($i = 0; $i < $dices; $i++) { $td = int(rand($sides)+1); push (@diceres,$td); $ressum = $ressum + $td; } $ressum = $ressum + $toadd; if ($tomult == 10) { my $min = (sort { $a <=> $b } @diceres)[0]; $ressum -= $min; } if ($ressum >= $mw) {$suc++}; $dicestr = $dicestr."[ @diceres ] "; $resstr .= " $ressum"; undef @diceres; } $resstr .= " ]"; if ($tomult == 10) { $dices .= "T"; } if ($mw > 0) { if ($dices == 1) { if ($suc == 1) { $out = "PRIVMSG $channel :Werfe $tmp * $dices\W$sides\+$toadd gegen $mw fuer $sender : $resstr => $suc Erfolg \n"; } else { $out = "PRIVMSG $channel :Werfe $tmp * $dices\W$sides\+$toadd gegen $mw fuer $sender : $resstr => $suc Erfolge \n"; } } else { if ($suc == 1) { $out = "PRIVMSG $channel :Werfe $tmp * $dices\W$sides\+$toadd gegen $mw fuer $sender : $dicestr => $resstr => $suc Erfolg \n"; } else { $out = "PRIVMSG $channel :Werfe $tmp * $dices\W$sides\+$toadd gegen $mw fuer $sender : $dicestr => $resstr => $suc Erfolge \n"; } } } else { if ($dices == 1) { $out = "PRIVMSG $channel :Werfe $tmp * $dices\W$sides\+$toadd fuer $sender : $resstr \n"; } else { $out = "PRIVMSG $channel :Werfe $tmp * $dices\W$sides\+$toadd fuer $sender : $dicestr => $resstr \n"; } } } else { if ($tomult == 10) {$dices++}; @diceres = (); $ressum = 0; for ($i = 0; $i < $dices; $i++) { $td = int(rand($sides)+1); push (@diceres,$td); $ressum = $ressum + $td; } $ressum = $ressum + $toadd; if ($tomult == 10) { my $min = (sort { $a <=> $b } @diceres)[0]; $ressum -= $min; $dices .= "T"; } $out = "PRIVMSG $channel :Werfe $dices\W$sides\+$toadd fuer $sender : [ @diceres ] => $ressum\n"; } print $sock $out; } if ($mode == 5) { if ($mw > 0) {$suc = 0;} if ($dices > $m) { $dices = $m;} @diceres = (); for ($i = 0; $i < $dices; $i++) { $td = int(rand($sides)+1); $td += $tomult; if ($td >= $mw) {$suc++;} push (@diceres,$td); } if ($mw > 0) { if ($suc == 1) { $out = "PRIVMSG $channel :Werfe $dices\W$sides\+$tomult gegen $mw fuer $sender : [ @diceres ] => $suc Erfolg \n"; } else { $out = "PRIVMSG $channel :Werfe $dices\W$sides\+$tomult gegen $mw fuer $sender : [ @diceres ] => $suc Erfolge \n"; } } else { $out = "PRIVMSG $channel :Werfe $dices\W$sides\+$tomult fuer $sender : [ @diceres ]\n"; } print $sock $out; } if ($mode == 6) { if ($dices > $m) { $dices = $m;} @diceres = (); for ($i = 0; $i < $dices; $i++) { $td = int(rand($sides)+1) + int(rand($sides)+1); push (@diceres,$td); } $dmgfrom = $toadd; $dirname = &give_direction(); $out = "PRIVMSG $channel :Werfe $dices Trefferzonen von $dirname fuer $sender : [ @diceres ]\n"; print $sock $out; $intcnt = 0; $out = "PRIVMSG $channel :"; foreach (@diceres) { $location = $_; $zone = &give_location(); $out .= "[ $location ] => $zone "; $intcnt++; if ($intcnt == 5) { $out .= "\n"; print $sock $out; $intcnt = 0; $out = "PRIVMSG $channel :"; } } $out .= "\n"; print $sock $out; } if ($mode == 7) { if ($dices > $m) { $dices = $m;} @diceres = (); for ($i = 0; $i < $dices; $i++) { $td = int(rand($sides)+1) + int(rand($sides)+1); push (@diceres,$td); } $out = "PRIVMSG $channel :Werfe $dices Trefferzahlen fuer $sender : [ @diceres ]\n"; print $sock $out; if ($toadd == 3) { $intcnt = 0; $out = "PRIVMSG $channel :"; foreach (@diceres) { $clusterhit = $_; $clustersize = $mw; $clusterdamage = &get_cluster(); $out .= "[ $clusterhit ] => $clusterdamage "; $intcnt++; if ($intcnt == 5) { $out .= "\n"; print $sock $out; $intcnt = 0; $out = "PRIVMSG $channel :"; } } if ($intcnt != 0) { $out .= "\n"; print $sock $out; } } else { $dmgfrom = $toadd; $clusttype = 0; $weapname = "unbekannt"; $clustersize = $mw; if ((($clustersize == 2) || ($clustersize == 4)) || ($clustersize == 6)) { $clusttype = 1; $weapname = "SRM"; }; if (((($clustersize == 5) || ($clustersize == 10)) || ($clustersize == 15)) || ($clustersize == 20)) { $clusttype = 2; $weapname = "LRM"; } $dirname = &give_direction(); foreach(@diceres) { $clusterhit = $_; $clusterdamage = &get_cluster(); $out = "PRIVMSG $channel :Schadenszone fuer $weapname $clustersize von $dirname - $clusterdamage Treffer\n"; print $sock $out; if ($clusttype == 0) { $out = "PRIVMSG $channel :"; for ($i = 0; $i < $clusterdamage; $i++) { $location = int(rand($sides)+1) + int(rand($sides)+1); $zone = &give_location(); $out .= "[ $location ] => 1 an $zone "; } } if ($clusttype == 1) { $out = "PRIVMSG $channel :"; for ($i = 0; $i < $clusterdamage; $i++) { $location = int(rand($sides)+1) + int(rand($sides)+1); $zone = &give_location(); $out .= "[ $location ] => 2 an $zone "; } } if ($clusttype == 2) { $out = "PRIVMSG $channel :"; while ($clusterdamage > 0) { $location = int(rand($sides)+1) + int(rand($sides)+1); $zone = &give_location(); if ($clusterdamage >= 5) { $clusterdamage -= 5; $donedam = 5; } else { $donedam = $clusterdamage; $clusterdamage = 0; } $out .= "[ $location ] => $donedam an $zone "; } } $out .= "\n"; print $sock $out; } } } if ($mode == 8) { if ($dices > $m) { $dices = $m;} @diceres = (); for ($i = 0; $i < $dices; $i++) { $td = int(rand($sides)+1); push (@diceres,$td); } $dmgfrom = $toadd; $dirname = &give_direction(); $out = "PRIVMSG $channel :Werfe $dices Trefferzonen (Punch) von $dirname fuer $sender : [ @diceres ]\n"; print $sock $out; $intcnt = 0; $out = "PRIVMSG $channel :"; foreach (@diceres) { $location = $_; $zone = &give_punchlocation(); $out .= "[ $location ] => $zone "; $intcnt++; if ($intcnt == 5) { $out .= "\n"; print $sock $out; $intcnt = 0; $out = "PRIVMSG $channel :"; } } $out .= "\n"; print $sock $out; } if ($mode == 9) { if ($dices > $m) { $dices = $m;} @diceres = (); for ($i = 0; $i < $dices; $i++) { $td = int(rand($sides)+1); push (@diceres,$td); } $dmgfrom = $toadd; $dirname = &give_direction(); $out = "PRIVMSG $channel :Werfe $dices Trefferzonen (Kick) von $dirname fuer $sender : [ @diceres ]\n"; print $sock $out; $intcnt = 0; $out = "PRIVMSG $channel :"; foreach (@diceres) { $location = $_; $zone = &give_kicklocation(); $out .= "[ $location ] => $zone "; $intcnt++; if ($intcnt == 5) { $out .= "\n"; print $sock $out; $intcnt = 0; $out = "PRIVMSG $channel :"; } } $out .= "\n"; print $sock $out; } if ($mode == 10) { $sysset = 0; if ($dices > $m) { $dices = $m;} if ($mw == 1) { $sysset = 1; $sys = "DSA"; @things=("Drachen","Meuchelmord","Gift","Untote","Horasier","Vinsalt","Elementargeister","Kristalle","Edelsteine","Schaetze","Graeber","Thorwaler","Novadi","Amazonen","Niederbrennendes Dorf","Der hohe Norden","Sommer","Schwert","Verfluchter Gegenstand","Blutige Rituale","Magier","Illusionen","Hexen","Druiden","Gareth","Festum","Winter","Artefakt","Verfluchtes Artefakt","Soeldner","Orks","Elfen","Zwerge","Ritter","Andergast","Weiden","Goblins","Gold","Silber","Geister","Daemonen","Barbaren","Berge","Wasser","Kampfmagier","Druiden","Sümpfe","Urwald","Echsen","Al Anfa","Bauern","Woelfe","Verliesse","Gruftasseln","Mindorium","Punin","Der tiefe Sueden","Turnier", "Schwarzer Ritter","Bergwerk"); } if ($mw == 2) { $sysset = 1; $sys = "DH"; @things=("Ganger","Makropolen","Radikale Irre","Tau","Eldar","Dark Eldar","Orks","Ecclesiarchy","Adeptus Mechanicus","Hereteks","Adeptus Astartes","Imperiale Armee","Imperiale Flotte","Bergwerk","Handelsstation","Freihaendler","Minenstation","Mond","Schmiedewelt","Makropolwelt","Feudalwelt","Todeswelt","Artefakt","Daemonen","Xenos","Mutanten","Kultisten","Redemptionisten","Soeldnergilde","Kopfgeldjaeger","Tzeentch","Khorne","Nurgle","Slaanesh","Adlige","Verwuestete Siedlung","Space Hulk","Piraten","Monodominate","Logiker","Dschungelwelt"); } if ($mw == 3) { $sysset = 1; $sys = "SR"; @things=("Orks","Trolle","Elfen","Norms","Zwerge","Ganger","Redmond Barrens","Downtown","Renton","Tacoma","Einbruch","Konzernexec","Wissenschaftler","Taliskraemer","Ares","Aztech","Saeder-Krupp", "Extraktion", "Verrat", "Critter", "Mitsuhama", "Kurier", "Fernsehen", "Drogen", "Rassisten", "Lone Star", "DocWagon", "Konkurrenz", "toter Johnson", "Geheimdienst", "Regierung", "Zufallsereignis Magie", "GoGang", "Schreckhahn", "Militär", "Mafia", "Yakuza", "Tong", "Rotlicht", "Bestrafung", "Fischhalle","Vory y Zakone","Yamatetsu","Renraku", "Wuxing","Elfenstaat", "Versicherungsbetrug","Wetwork", "Bauernopfer","Hoellenhund","Portland","Chicago","Renrakru","Knight Errant","Hard Corps","Wolverine Security","Buechsenmacher","Schmuggler","Snohomish","Auburn","Pullyalup","Everett"); } if ($mw == 99) { $sysset = 1; $sys = "System"; @things=("SR3","SR4","D&D","DW","DH","DSA","Etwas seltsames aus Bernd's Schrank"); } if ($sysset == 0) { $sys = "Generisch"; @things=("Graeber","Verfluchter Gegenstand","Gift","Meuchelmord","Geister","Soeldner","Verwuestete Siedlung","Grossstadt"); } $out = "PRIVMSG $channel :Werfe $dices Ideen ($sys) fuer $sender : \n"; print $sock $out; for ($i = 0; $i < $dices; $i++) { $td = int(rand(@things)); $what = $things[$td]; $out = "PRIVMSG $channel :$what\n"; print $sock $out; } } if ($mode == 11) { if ($dices > $m) { $dices = $m;} for ($i = 0; $i < $dices; $i++) { @things=("Herz","Pik","Karo","Kreuz"); $td = int(rand(@things)); $what = $things[$td]; @things=("Ass", "Zehn","König","Dame","Bube","Neun","Acht","Sieben"); $td = int(rand(@things)); $what .= " ". $things[$td]; $out = "PRIVMSG $channel :$what\n"; print $sock $out; } } } } sub check_adm { $adm = 0; for ($i = 0; $i < @owners; $i++) { if ($owners[$i] eq $sender) { $adm = 1; } } } sub dice_help { print $sock "PRIVMSG $channel :Wuerfel :\n"; print $sock "PRIVMSG $channel :4w6 - Werfe 4w6\n"; print $sock "PRIVMSG $channel :2w6 10 - Werfe 2w6 gegen 10\n"; print $sock "PRIVMSG $channel :3w6+10 - Werfe 3w6 und addiere 10 (Init)\n"; print $sock "PRIVMSG $channel :3w6+10 25 - Werfe 3w6 und addiere 10 - maximum 25 (Init mit TAKC - SR2)\n"; print $sock "PRIVMSG $channel :3.4w6+5 - Werfe 3 mal 4w6 und addiere dabei 5 auf jeden Gruppe\n"; print $sock "PRIVMSG $channel :5.4w6+4 6 - Werfe 5 mal 4w6 und addiere dabei 4 auf jede Gruppe, Mindestwurf ist 6\n"; print $sock "PRIVMSG $channel :2.1wt+4 6 - Werfe 2 mal 2w10, ignoriere den niedrigens Wurf und addiere dabei 4 auf jede Gruppe, Mindestwurf ist 6\n"; print $sock "PRIVMSG $channel :3wm - Werfe 3 mal jeweils 2w6 und addiere die Augenzahlen der beiden Wuerfe\n"; print $sock "PRIVMSG $channel :2wm 5 - Werfe 2 mal jeweils 2w6 gegen 5, addiere dabei die Augenzahlen der beiden Wuerfe \n"; print $sock "PRIVMSG $channel :2wa - Werfe 2 Ideen\n"; print $sock "PRIVMSG $channel :4wk - Ziehe 4 Karten\n"; print $sock "PRIVMSG $channel :1w[flr] - BT Schadenslokation Front/Links/Rechts\n"; print $sock "PRIVMSG $channel :1wc[flr] 15 - BT Clustertreffer von 15 Geschossen Front/Links/Rechts\n"; print $sock "PRIVMSG $channel :1wp[flr] - BT Schlag Front/Links/Rechts\n"; print $sock "PRIVMSG $channel :1wk[flr] - BT Tritt Front/Links/Rechts\n"; } sub admin { @tmp = split(/\ /,$msg); $chan = $tmp[1]; chomp($chan); $omsg = $msg; $msg = $tmp[0]; chomp($msg); if ($msg eq "help") { print $sock "PRIVMSG $sender :SR Wuerfelbot $version by Robert Altschaffel\n"; print $sock "PRIVMSG $sender :Befehle :\n"; print $sock "PRIVMSG $sender :JOIN channel\n"; print $sock "PRIVMSG $sender :PART channel\n"; print $sock "PRIVMSG $sender :RAW command\n"; print $sock "PRIVMSG $sender :SAY to what\n"; print $sock "PRIVMSG $sender :MAX value\n"; print $sock "PRIVMSG $sender :SHORT value\n"; print $sock "PRIVMSG $sender :NICK nick\n"; print $sock "PRIVMSG $sender :ADD owner\n"; print $sock "PRIVMSG $sender :LIST\n"; print $sock "PRIVMSG $sender :DROP owner\n"; print $sock "PRIVMSG $sender :IDENT passwort\n"; print $sock "PRIVMSG $sender :QUIT\n"; $channel=$sender; &dice_help; } if ($msg eq "ADD") { push (@owners,$chan); print $sock "PRIVMSG $sender :$chan als Owner hinzugefuegt\n"; } if ($msg eq "LIST") { for ($i = 0; $i < @owners; $i++) { print $sock "PRIVMSG $sender :$i - $owners[$i]\n"; } } if ($msg eq "DROP") { print $sock "PRIVMSG $sender :$owners[$chan] geloescht\n"; $owners[$chan] = $owners[@owners-1]; pop(@owners); } if ($msg eq "JOIN") { print $sock "JOIN $chan\n"; print $sock "PRIVMSG $chan :$welcomemsg\n"; } if ($msg eq "PART") { print $sock "PRIVMSG $chan :$partmsg\n"; print $sock "PART $chan\n"; } if ($msg eq "QUIT") { print $sock "PRIVMSG $sender :$partmsg !\n"; print $sock "QUIT\n"; exit; } if ($msg eq "NICK") { $nick = $chan; print $sock "NICK $chan\n"; } if ($msg eq "MAX") { $m = $chan; print $sock "PRIVMSG $sender :Maxdice auf $chan gesetzt\n"; } if ($msg eq "SHORT") { $shortdes = $chan; print $sock "PRIVMSG $sender :Shortdes auf $chan gesetzt\n"; } if ($msg eq "SYS") { $sys = $chan; print $sock "PRIVMSG $sender :System auf $chan gesetzt\n"; } if ($msg eq "IDENT") { print $sock "PRIVMSG Nickserv: identify $chan\n"; } if ($msg eq "SAY") { $cmd = ""; for ($i = 2; $i < @tmp; $i++) { $cmd .= "$tmp[$i] "; } print $sock "PRIVMSG $chan :$cmd\n"; } if ($msg eq "RAW") { $cmd = ""; for ($i = 1; $i < @tmp; $i++) { $cmd .= " $tmp[$i]"; } print $sock "$cmd\n"; } $channel = $sender; $msg = $omsg; &chk_dice; } sub conirc { close ($sock); print "Server : $server Port : $port Nick : $nick \nVerbinde..."; my $sock = new IO::Socket::INET ( PeerAddr => $server, PeerPort => $port, Proto => 'tcp', ); die "Kann keinen Socket erstellen: $!\n" unless $sock; print "Verbunden\n"; print $sock "USER $nick localhost $server $nick\n"; print "--> USER $nick localhost $server $nick\n"; print $sock "NICK $nick\n"; print "--> NICK $nick\n"; if ($ident ne 0) { print $sock "PRIVMSG Nickserv :identify $ident\n"; print "--> PRIVMSG Nickserv :identify $ident\n"; } } sub give_direction { if ($dmgfrom == 0) { return ("Frontal"); } if ($dmgfrom == 1) { return ("Links"); } if ($dmgfrom == 2) { return ("Rechts"); } } sub give_punchlocation { if ($dmgfrom == 0) { if ($location == 1) { $zone = "Linker Arm"; $zones = "LA";} if ($location == 2) { $zone = "Linker Torso"; $zones = "LT";} if ($location == 3) { $zone = "Zentraler Torso"; $zones = "CT";} if ($location == 4) { $zone = "Rechter Torso"; $zones = "RT";} if ($location == 5) { $zone = "Rechter Torso"; $zones = "RA";} if ($location == 6) { $zone = "Kopf"; $zones = "HD";} } if ($dmgfrom == 1) { if ($location == 1) { $zone = "Linker Arm"; $zones = "LA";} if ($location == 2) { $zone = "Linker Torso"; $zones = "LT";} if ($location == 3) { $zone = "Zentraler Torso"; $zones = "CT";} if ($location == 4) { $zone = "Rechter Torso"; $zones = "RT";} if ($location == 5) { $zone = "Rechter Torso"; $zones = "RA";} if ($location == 6) { $zone = "Kopf"; $zones = "HD";} } if ($dmgfrom == 1) { if ($location == 1) { $zone = "Linker Arm"; $zones = "LA";} if ($location == 2) { $zone = "Linker Torso"; $zones = "LT";} if ($location == 3) { $zone = "Zentraler Torso"; $zones = "CT";} if ($location == 4) { $zone = "Rechter Torso"; $zones = "RT";} if ($location == 5) { $zone = "Rechter Torso"; $zones = "RA";} if ($location == 6) { $zone = "Kopf"; $zones = "HD";} } if ($shortdes == 0) { return ($zone); } else { return ($zones); } } sub give_kicklocation { if ($dmgfrom == 0) { $zone = "Rechtes Bein"; $zones = "RL"; if ($location > 3) { $zone = "Linker Bein"; $zones = "LL"; } } if ($dmgfrom == 1) { $zone = "Linker Bein"; $zones = "LL"; } if ($dmgfrom == 1) { $zone = "Rechtes Bein"; $zones = "RL"; } if ($shortdes == 0) { return ($zone); } else { return ($zones); } } sub give_location { if ($dmgfrom == 0) { if ($location == 2) { $zone = "Zentraler Torso, kritisch"; $zones = "CT*";} if ($location == 3) { $zone = "Rechter Arm"; $zones = "RA";} if ($location == 4) { $zone = "Rechter Arm"; $zones = "RA";} if ($location == 5) { $zone = "Rechtes Bein"; $zones = "RL";} if ($location == 6) { $zone = "Rechter Torso"; $zones = "RT";} if ($location == 7) { $zone = "Zentraler Torso"; $zones = "ZT";} if ($location == 8) { $zone = "Linker Torso"; $zones = "LT";} if ($location == 9) { $zone = "Linkes Bein"; $zones = "LL";} if ($location == 10) { $zone = "Linker Arm"; $zones = "LA";} if ($location == 11) { $zone = "Linker Arm"; $zones = "LA";} if ($location == 12) { $zone = "Kopf"; $zones = "HD";} } if ($dmgfrom == 1) { if ($location == 2) { $zone = "Linker Torso, kritisch"; $zones = "LT*";} if ($location == 3) { $zone = "Linkes Bein"; $zones = "LL";} if ($location == 4) { $zone = "Linker Arm"; $zones = "LA";} if ($location == 5) { $zone = "Linker Arm"; $zones = "LA";} if ($location == 6) { $zone = "Linkes Bein"; $zones = "LB";} if ($location == 7) { $zone = "Linker Torso"; $zones = "LT";} if ($location == 8) { $zone = "Zentraler Torso"; $zones = "ZT";} if ($location == 9) { $zone = "Rechter Torso"; $zones = "RT";} if ($location == 10) { $zone = "Rechter Arm"; $zones = "RA";} if ($location == 11) { $zone = "Rechtes Bein"; $zones = "RB";} if ($location == 12) { $zone = "Kopf"; $zones = "HD";} } if ($dmgfrom == 2) { if ($location == 2) { $zone = "Rechter Torso, kritisch"; $zones = "RT*";} if ($location == 3) { $zone = "Rechtes Bein"; $zones = "RL";} if ($location == 4) { $zone = "Rechter Arm"; $zones = "RA";} if ($location == 5) { $zone = "Rechter Arm"; $zones = "RA";} if ($location == 6) { $zone = "Rechtes Bein"; $zones = "RL";} if ($location == 7) { $zone = "Rechter Torso"; $zones = "RT";} if ($location == 8) { $zone = "Zentraler Torso"; $zones = "CT";} if ($location == 9) { $zone = "Linker Torso"; $zones = "LT";} if ($location == 10) { $zone = "Linker Arm"; $zones = "LA";} if ($location == 11) { $zone = "Linkes Bein"; $zones = "LL";} if ($location == 12) { $zone = "Kopf"; $zones = "HD";} } if ($shortdes == 0) { return ($zone); } else { return ($zones); } } sub get_cluster { $clusterdamage = 1; if ($clustersize == 2) { if ($clusterhit > 7) { $clusterdamage = 2; } } if ($clustersize == 3) { if ($clusterhit > 4) { $clusterdamage = 2; } if ($clusterhit > 9) { $clusterdamage = 3; } } if ($clustersize == 4) { if ($clusterhit > 2) { $clusterdamage = 2; } if ($clusterhit > 6) { $clusterdamage = 3; } if ($clusterhit > 10) { $clusterdamage = 4; } } if ($clustersize == 5) { if ($clusterhit > 2) { $clusterdamage = 2; } if ($clusterhit > 4) { $clusterdamage = 3; } if ($clusterhit > 8) { $clusterdamage = 4; } if ($clusterhit > 10) { $clusterdamage = 5; } } if ($clustersize == 6) { $clusterdamage = 2; if ($clusterhit > 3) { $clusterdamage = 3; } if ($clusterhit > 5) { $clusterdamage = 4; } if ($clusterhit > 8) { $clusterdamage = 5; } if ($clusterhit > 10) { $clusterdamage = 6; } } if ($clustersize == 9) { $clusterdamage = 3; if ($clusterhit > 3) { $clusterdamage = 4; } if ($clusterhit > 4) { $clusterdamage = 5; } if ($clusterhit > 8) { $clusterdamage = 7; } if ($clusterhit > 10) { $clusterdamage = 9; } } if ($clustersize == 10) { $clusterdamage = 3; if ($clusterhit > 3) { $clusterdamage = 4; } if ($clusterhit > 4) { $clusterdamage = 6; } if ($clusterhit > 8) { $clusterdamage = 8; } if ($clusterhit > 10) { $clusterdamage = 10; } } if ($clustersize == 12) { $clusterdamage = 4; if ($clusterhit > 3) { $clusterdamage = 5; } if ($clusterhit > 4) { $clusterdamage = 8; } if ($clusterhit > 8) { $clusterdamage = 10; } if ($clusterhit > 10) { $clusterdamage = 12; } } if ($clustersize == 15) { $clusterdamage = 5; if ($clusterhit > 3) { $clusterdamage = 6; } if ($clusterhit > 4) { $clusterdamage = 9; } if ($clusterhit > 8) { $clusterdamage = 12; } if ($clusterhit > 10) { $clusterdamage = 15; } } if ($clustersize == 20) { $clusterdamage = 6; if ($clusterhit > 3) { $clusterdamage = 9; } if ($clusterhit > 4) { $clusterdamage = 12; } if ($clusterhit > 8) { $clusterdamage = 16; } if ($clusterhit > 10) { $clusterdamage = 20; } } return ($clusterdamage); }