# dice / A RP Dice Simulator
#
# What is this?
#
# I often Dungeon Master on our Neverwinternights Servers called "Bund der
# alten Reiche" (eng. "Alliance of the old realms") at bundderaltenreiche.de
# (German Site) Often idling in our Channel I thought it might be Fun to have
# a script to dice. Since I found nothing for irssi I wrote this little piece
# of script. The script assumes, that if a 'd' for english dice is given it
# should print the output in english. On the other hand if a 'w' for german
# "Würfel" is given it prints the output in german.
#
# Usage.
#
# Anyone on the Channel kann ask "!dice" to toss the dice for him. He just has
# to say what dice he want to use. The notation should be well known from
# RP :-) Thus
#
# Write: !dice: d[or w for german users]
#
# Here are some examples
#
# !dice: 2d20
# !dice: 3d6
#
# OK, I think you got it already :-)
#
# Write: !dice version
# For Version Information
#
# Write: !dice help
# For Information about how to use it
use strict;
use vars qw($VERSION %IRSSI);
use Irssi qw(command_bind signal_add);
use IO::File;
$VERSION = '0.00.04';
%IRSSI = (
authors => 'Marcel Kossin',
contact => '[email protected]',
name => 'dice',
description => 'A Dice Simulator for Roleplaying in Channels or just for fun.',
license => 'GNU GPL Version 2 or later',
url => 'http://www.enumerator.org/component/option,com_docman/task,view_category/Itemid,34/subcat,7/'
);
sub own_question {
my ($server, $msg, $nick, $address, $target) = @_;
question($server, $msg, $nick, $target);
}
sub public_question {
my ($server, $msg, $nick, $address, $target) = @_;
question($server, $msg, $nick, $target);
}
sub question($server, $msg, $nick, $target) {
my ($server, $msg, $nick, $target) = @_;
$_ = $msg;
if (!/^!dice/i) { return 0; }
if (/^!dice:.+[d|w]\d+/i) {
my $value;
my $rnd;
my $forloop;
my $sides;
my $lang;
my @dice = split(/ /,$_,2);
my @dices = split(/[d|w|D|W]/,$dice[1],2);
if ($_ = /^.*[w|W].*/i) {
$lang = "DE";
} else {
$lang = "EN";
}
SWITCH: {
if ($lang eq "DE") {
$server->command('msg '.$target.' '.$nick.' würfelt mit dem '.$dice[1].'..... ');
last SWITCH;
}
if ($lang eq "EN") {
$server->command('msg '.$target.' '.$nick.' tosses with the '.$dice[1].'..... ');
last SWITCH;
}
}
if($dices[1] > 1) {
if($dices[1] < 100) {
if($dices[0] < 11) {
if($dices[0] < 1) {
$dices[0] = 1;
}
for($forloop = 1; $forloop <= $dices[0]; $forloop++) {
$rnd = int(rand($dices[1]-1));
if($rnd == 0){
$rnd = $dices[1];
}
$value = $value + $rnd;
SWITCH: {
if ($lang eq "DE") {
$server->command('msg '.$target.' '.$nick.' würfelt beim '.$forloop.'. Wurf eine '.$rnd);
last SWITCH;
}
if ($lang eq "EN") {
$server->command('msg '.$target.' '.$nick.' tosses at his '.$forloop.'. try a '.$rnd);
last SWITCH;
}
}
}
SWITCH: {
if ($lang eq "DE") {
$server->command('msg '.$target.' '.$nick.' ist fertig mit Würfeln. Sein Ergebnis lautet: '.$value);
last SWITCH;
}
if ($lang eq "EN") {
$server->command('msg '.$target.' '.$nick.' finished. His result reads: '.$value);
last SWITCH;
}
}
} else {
SWITCH: {
if ($lang eq "DE") {
$server->command('msg '.$target.' '.$nick.' meint wohl in d'.$dices[1].'´s baden zu müssen... Mal im Ernst versuch es mit weniger Würfeln!' );
last SWITCH;
}
if ($lang eq "EN") {
$server->command('msg '.$target.' '.$nick.' seems to wanna take a bath in d'.$dices[1].'´s... Seriously! Try less dice' );
last SWITCH;
}
}
}
} else {
SWITCH: {
if ($lang eq "DE") {
$server->command('msg '.$target.' '.$nick.' baut uns bald einen riiiiiesigen d'.$dices[1].'... Mal im Ernst versuch es mit weniger Augen!' );
last SWITCH;
}
if ($lang eq "EN") {
$server->command('msg '.$target.' '.$nick.' soon will build us a biiiiiiiiiig d'.$dices[1].'... Seriously! Try less sides' );
last SWITCH;
}
}
}
} else {
if($dices[1] == "0") {
SWITCH: {
if ($lang eq "DE") {
$server->command('msg '.$target.' '.$nick.' ist dumm wie Knäckebrot... Oder hat jemand schonmal einen Würfel ohne Seiten gesehen?' );
last SWITCH;
}
if ($lang eq "EN") {
$server->command('msg '.$target.' '.$nick.' is chuckleheaded... Or has anybody ever seen a dice without sides?' );
last SWITCH;
}
}
}
if($dices[1] == "1") {
SWITCH: {
if ($lang eq "DE") {
$server->command('msg '.$target.' '.$nick.' ist dumm wie Dosenthunfisch... Oder hat jemand schonmal einen Würfel mit einer Seite gesehen?' );
last SWITCH;
}
if ($lang eq "EN") {
$server->command('msg '.$target.' '.$nick.' plays possum... Or has anybody ever seen a dice with only one side?' );
last SWITCH;
}
}
}
}
return 0;
} elsif (/^!dice: version$/i){
$server->command('msg '.$target.' dice Version: '.$VERSION.' by mkossin');
return 0;
} elsif (/^!dice: help$/i){
$server->command('msg '.$target.' '.$nick.' Please explain which dice you want to toss: "!dice: d" e. g. "!dice: 2d20"');
return 0;
} elsif (/^!dice: hilfe$/i){
$server->command('msg '.$target.' '.$nick.' Sag mir welchen Würfel du werfen möchtest: "!dice: w" z. B. "!dice: 2w20"');
return 0;
} else {
if(!/^!dice.*:/i){
$server->command('msg '.$target.' '.$nick.' "!dice: help" - gives you the english help');
$server->command('msg '.$target.' '.$nick.' "!dice: hilfe" - zeigt die Deutsche Hilfe an');
return 0;
}
}
}
signal_add("message public", "public_question");
signal_add("message own_public", "own_question");