1# dice / A RP Dice Simulator
2#
3# What is this?
4#
5# I often Dungeon Master on our Neverwinternights Servers called "Bund der
6# alten Reiche" (eng. "Alliance of the old realms") at bundderaltenreiche.de
7# (German Site) Often idling in our Channel I thought it might be Fun to have
8# a script to dice. Since I found nothing for irssi I wrote this little piece
9# of script. The script assumes, that if a 'd' for english dice is given it
10# should print the output in english. On the other hand if a 'w' for german
11# "W�rfel" is given it prints the output in german.
12#
13# Usage.
14#
15# Anyone on the Channel kann ask "!dice" to toss the dice for him. He just has
16# to say what dice he want to use. The notation should be well known from
17# RP :-) Thus
18#
19# Write: !dice: <quantity of dice>d[or w for german users]<sides on dice>
20#
21# Here are some examples
22#
23# !dice: 2d20
24# !dice: 3d6
25#
26# OK, I think you got it already :-)
27#
28# Write: !dice version
29# For Version Information
30#
31# Write: !dice help
32# For Information about how to use it
33
34use strict;
35use vars qw($VERSION %IRSSI);
36
37use Irssi qw(command_bind signal_add);
38use IO::File;
39$VERSION = '0.00.04';
40%IRSSI = (
41	authors			=> 'Marcel Kossin',
42	contact			=> 'mkossin@enumerator.org',
43	name			=> 'dice',
44	description		=> 'A Dice Simulator for Roleplaying in Channels or just for fun.',
45	license			=> 'GNU GPL Version 2 or later',
46	url			=> 'http://www.enumerator.org/component/option,com_docman/task,view_category/Itemid,34/subcat,7/'
47);
48
49sub own_question {
50	my ($server, $msg, $nick, $address, $target) = @_;
51	question($server, $msg, $nick, $target);
52}
53
54sub public_question {
55	my ($server, $msg, $nick, $address, $target) = @_;
56	question($server, $msg, $nick, $target);
57}
58
59sub question($server, $msg, $nick, $target) {
60	my ($server, $msg, $nick, $target) = @_;
61	$_ = $msg;
62
63	if (!/^!dice/i) { return 0; }
64
65	if (/^!dice:.+[d|w]\d+/i) {
66		my $value;
67		my $rnd;
68		my $forloop;
69		my $sides;
70		my $lang;
71		my @dice  = split(/ /,$_,2);
72		my @dices = split(/[d|w|D|W]/,$dice[1],2);
73		if ($_ = /^.*[w|W].*/i) {
74			$lang = "DE";
75		} else {
76			$lang = "EN";
77		}
78		SWITCH: {
79			if ($lang eq "DE") {
80				$server->command('msg '.$target.' '.$nick.' w�rfelt mit dem '.$dice[1].'..... ');
81				last SWITCH;
82			}
83			if ($lang eq "EN") {
84				$server->command('msg '.$target.' '.$nick.' tosses with the '.$dice[1].'..... ');
85				last SWITCH;
86			}
87		}
88		if($dices[1] > 1) {
89			if($dices[1] < 100) {
90				if($dices[0] < 11) {
91					if($dices[0] < 1) {
92						$dices[0] = 1;
93					}
94					for($forloop = 1; $forloop <= $dices[0]; $forloop++) {
95						$rnd = int(rand($dices[1]-1));
96						if($rnd == 0){
97							$rnd = $dices[1];
98						}
99						$value = $value + $rnd;
100						SWITCH: {
101							if ($lang eq "DE") {
102								$server->command('msg '.$target.' '.$nick.' w�rfelt beim '.$forloop.'. Wurf eine '.$rnd);
103								last SWITCH;
104							}
105							if ($lang eq "EN") {
106								$server->command('msg '.$target.' '.$nick.' tosses at his '.$forloop.'. try  a '.$rnd);
107								last SWITCH;
108							}
109						}
110			   	}
111					SWITCH: {
112						if ($lang eq "DE") {
113							$server->command('msg '.$target.' '.$nick.' ist fertig mit W�rfeln. Sein Ergebnis lautet: '.$value);
114							last SWITCH;
115						}
116						if ($lang eq "EN") {
117							$server->command('msg '.$target.' '.$nick.' finished. His result reads: '.$value);
118							last SWITCH;
119						}
120					}
121				} else {
122					SWITCH: {
123						if ($lang eq "DE") {
124							$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!' );
125							last SWITCH;
126						}
127						if ($lang eq "EN") {
128							$server->command('msg '.$target.' '.$nick.' seems to wanna take a bath in d'.$dices[1].'�s... Seriously! Try less dice' );
129							last SWITCH;
130						}
131					}
132				}
133			} else {
134				SWITCH: {
135					if ($lang eq "DE") {
136						$server->command('msg '.$target.' '.$nick.' baut uns bald einen riiiiiesigen d'.$dices[1].'... Mal im Ernst versuch es mit weniger Augen!' );
137						last SWITCH;
138					}
139					if ($lang eq "EN") {
140						$server->command('msg '.$target.' '.$nick.' soon will build us a biiiiiiiiiig d'.$dices[1].'... Seriously! Try less sides' );
141						last SWITCH;
142					}
143				}
144			}
145		} else {
146			if($dices[1] == "0") {
147				SWITCH: {
148					if ($lang eq "DE") {
149						$server->command('msg '.$target.' '.$nick.' ist dumm wie Kn�ckebrot... Oder hat jemand schonmal einen W�rfel ohne Seiten gesehen?' );
150						last SWITCH;
151					}
152					if ($lang eq "EN") {
153						$server->command('msg '.$target.' '.$nick.' is chuckleheaded... Or has anybody ever seen a dice without sides?' );
154						last SWITCH;
155					}
156				}
157			}
158			if($dices[1] == "1") {
159				SWITCH: {
160					if ($lang eq "DE") {
161						$server->command('msg '.$target.' '.$nick.' ist dumm wie Dosenthunfisch... Oder hat jemand schonmal einen W�rfel mit einer Seite gesehen?' );
162						last SWITCH;
163					}
164					if ($lang eq "EN") {
165						$server->command('msg '.$target.' '.$nick.' plays possum... Or has anybody ever seen a dice with only one side?' );
166						last SWITCH;
167					}
168				}
169			}
170		}
171		return 0;
172	} elsif (/^!dice: version$/i){
173		$server->command('msg '.$target.' dice Version: '.$VERSION.' by mkossin');
174		return 0;
175	} elsif (/^!dice: help$/i){
176		$server->command('msg '.$target.' '.$nick.' Please explain which dice you want to toss: "!dice: <quantity of dice>d<sides on dice>" e. g. "!dice: 2d20"');
177		return 0;
178	} elsif (/^!dice: hilfe$/i){
179		$server->command('msg '.$target.' '.$nick.' Sag mir welchen W�rfel du werfen m�chtest: "!dice: <Anzahl der W�rfel>w<Augen des W�rfels>" z. B. "!dice: 2w20"');
180		return 0;
181	} else {
182		if(!/^!dice.*:/i){
183			$server->command('msg '.$target.' '.$nick.' "!dice: help"  - gives you the english help');
184			$server->command('msg '.$target.' '.$nick.' "!dice: hilfe" - zeigt die Deutsche Hilfe an');
185			return 0;
186		}
187	}
188}
189
190signal_add("message public", "public_question");
191signal_add("message own_public", "own_question");
192