IRCDiceScript
From Exalted - Unofficial Wiki
== mIRC Dice Script == http://hammerand.com/IRCDiceScript.jpg
Has functionality for nWod, Exalted, WOTG, and any sided dice rolls. make sure to copy this from the Modify Page screen, as wiki formatting may cause some odd behavior in displaying the script.
Currently at Version 1.0
Add this to aliases
/nwod {
var %display = $null
%2 = $calc($2)
if (%2 > 200) {
if ($chan != $null) /msg $chan $nick: 200 dice or less. example: !ex 5
if ($chan == $null) {
if ($nick == $me) /say $nick : 200 dice or less. example: !ex 5
if ($nick != $me) /msg $nick $nick : 200 dice or less. example: !ex 5
}
goto end
}
var %iter = 0
var %tot = 0
var %tens = 0
var %target = 8
%display = %display $nick ( $+ %2 $+ )
:next1
inc %iter
var %die = $rand(1,10)
%display = %display $+ , %die
if (%die >= %target) var %tot = %tot + 1
if (%die == 10) var %iter = %iter - 1
if (%iter < %2) goto next1
if (+ isin $3) {
var %p = $len($3) - 1
var %add = $right($3,%p)
if (%add > 0) && (%add < 30) var %tot = %tot + %add
}
if (+ isin $4) {
var %p = $len($4) - 1
var %add = $right($4,%p)
if (%add > 0) && (%add < 30) var %tot = %tot + %add
}
if (- isin $3) {
var %p = $len($3) - 1
var %add = $right($3,%p)
if (%add > 0) && (%add < 30) var %tot = %tot - %add
}
if (- isin $4) {
var %p = $len($4) - 1
var %add = $right($4,%p)
if (%add > 0) && (%add < 30) var %tot = %tot - %add
}
if (%tot < 0) %tot = 0
%display = %display $+ , Successes : %tot
if ($chan != $null) /msg $chan %display
if ($chan == $null) {
if ($nick == $me) /say %display
if ($nick != $me) /msg $nick %display
}
:end
}
/statistics {
/clear @Statistics
/window -depR +t @Statistics 1 1 600 400
var %all = $calc(%statsone + %statstwo + %statsthree + %statsfour + %statsfive + %statssix + %statsseven + %statseight + %statsnine + %statsten)
var %mult = $calc(2000/%all)
/drawline @Statistics 3 5 50 $calc(50 + (%mult * %statsone )) 50 50
/drawtext @Statistics 2 fixedsys 9 30 50 1
/drawline @Statistics 3 5 100 $calc(50 + (%mult * %statstwo )) 100 50
/drawtext @Statistics 2 fixedsys 9 80 50 2
/drawline @Statistics 3 5 150 $calc(50 + (%mult * %statsthree )) 150 50
/drawtext @Statistics 2 fixedsys 9 130 50 3
/drawline @Statistics 3 5 200 $calc(50 + (%mult * %statsfour )) 200 50
/drawtext @Statistics 2 fixedsys 9 180 50 4
/drawline @Statistics 3 5 250 $calc(50 + (%mult * %statsfive)) 250 50
/drawtext @Statistics 2 fixedsys 9 230 50 5
/drawline @Statistics 3 5 300 $calc(50 + (%mult * %statssix)) 300 50
/drawtext @Statistics 2 fixedsys 9 280 50 6
/drawline @Statistics 3 5 350 $calc(50 + (%mult * %statsseven)) 350 50
/drawtext @Statistics 2 fixedsys 9 330 50 7
/drawline @Statistics 3 5 400 $calc(50 + (%mult * %statseight)) 400 50
/drawtext @Statistics 2 fixedsys 9 380 50 8
/drawline @Statistics 3 5 450 $calc(50 + (%mult * %statsnine)) 450 50
/drawtext @Statistics 2 fixedsys 9 430 50 9
/drawline @Statistics 3 5 500 $calc(50 + (%mult * %statsten)) 500 50
/drawtext @Statistics 2 fixedsys 9 480 50 10
}
/roll {
var %display = $null
var %atim = $pos($1,+,0)
var %stim = $pos($1,-,0)
var %dtim = $pos($1,d,0)
var %len = $len($1)
if (%len < 3) goto error
var %ops = %atim + %stim
var %dlef = $pos($1,d,1)
/dec %dlef 1
var %dnum = $mid($1,0,%dlef)
if (%dnum < 1) || (%dnum > 100) goto error
/inc %dlef 2
if ($pos($1,+,1) == $null) var %pos = $len($1)
else var %pos = $pos($1,+,1)
if ($pos($1,-,1) == $null) var %sub = $len($1)
else var %sub = $pos($1,-,1)
if (%atim == 0) && (%stim == 0) {
%drig = $len($1)
/inc %drig 1
}
else {
if (%pos < %sub) var %drig = $pos($1,+,1)
if (%sub < %pos) var %drig = $pos($1,-,1)
}
%dlen = %drig - %dlef
var %dsid = $mid($1,%dlef,%dlen)
if (%dsid < 1) || (%dsid > 1000) goto error
var %tot = 0
var %iter = 0
if (%ops = 0) goto adde
var %text = $replace($1,-,+-)
:add
/inc %iter 1
if (%iter = %ops) var %rig = $len(%text)
else {
var %iter2 = %iter + 1
var %rig = $pos(%text,+,%iter2)
/dec %rig 1
}
var %lef = $pos(%text,+,%iter)
%len = %rig - %lef
/inc %lef 1
var %ad = $mid(%text,%lef,%len)
if (%ad < -30) || (%ad > 30) goto error
%tot = %tot + %ad
if (%iter < %ops) goto add
:adde
%iter = 0
var %display = %display $nick $+ : $1-
:next
var %die = $rand(1,%dsid)
%display = %display $+ , %die
var %tot = %tot + %die
inc %iter
if (%iter < %dnum) goto next
if ($chan != $null) /msg $chan $nick: %display $+ , Total: %tot
if ($chan == $null) {
if ($nick == $me) /say $nick : %display $+ , Total: %tot
if ($nick != $me) /msg $nick $nick : %display $+ , Total: %tot
}
goto end
:error
if ($chan != $null) /msg $chan $nick : Can only have 1 to 1000 sides and 1 to 100
dice and may only add or subtract up to 30. Example: !roll 100d1000+30-30
if ($chan == $null) {
if ($nick == $me) /say $nick : Can only have 1 to 1000 sides and 1 to 100
dice and may only add or subtract up to 30. Example: !roll 100d1000+30-30
if ($nick != $me) /msg $nick $nick : Can only have 1 to 1000 sides and 1 to 100
dice and may only add or subtract up to 30. Example: !roll 100d1000+30-30
}
:end
}
/e {
var %display = $null
%2 = $calc($2)
if (%2 > 200) {
if ($chan != $null) /msg $chan $nick: 200 dice or less. example: !ex 5
if ($chan == $null) {
if ($nick == $me) /say $nick : 200 dice or less. example: !ex 5
if ($nick != $me) /msg $nick $nick : 200 dice or less. example: !ex 5
}
goto end
}
var %iter = 0
var %tot = 0
; force botch
var %bot = 0
var %when = $rand(1,%two)
var %target = 7
if (s isin $1) %target = $3
%display = %display $nick ( $+ %2 $+ )
:next1
inc %iter
; force botch
if (b isin $1) {
var %die = $rand(1,6)
if (%iter == %when) var %die = 1
}
elseif (o isin $1) {
var %die = $rand(1,10)
var %die = %die + $rand(1,10)
if (%die > 10) var %die = %die - 10
}
elseif (a isin $1) {
var %die = $rand(1,10)
if (%die > 5) var %die = %die - 5
else var %die = %die + 5
}
else {
var %die = $rand(1,11)
if (%die == 2) var %die = 1
else if (%die == 1) var %die = 2
else if (%die == 3) var %die = 9
else if (%die == 9) var %die = 3
else if (%die == 4) var %die = 10
else if (%die == 10) {
if ($calc($rand(1,2) - 1)) var %die = 2
else var %die = 4
}
else if (%die == 11) var %die = 4
if (%die == 3) var %die = 10
else if (%die == 10) var %die = 3
}
%display = %display $+ , %die
if (%die == 1) var %bot = %bot + 1
if (%die >= %target) var %tot = %tot + 1
if (m isin $1) var %tot = %tot
else if (%die == 10) var %tot = %tot + 1
if (%die == 1) inc %statsone
else if (%die == 2) inc %statstwo
else if (%die == 3) inc %statsthree
else if (%die == 4) inc %statsfour
else if (%die == 5) inc %statsfive
else if (%die == 6) inc %statssix
else if (%die == 7) inc %statsseven
else if (%die == 8) inc %statseight
else if (%die == 9) inc %statsnine
else if (%die == 10) inc %statsten
if (%iter < %2) goto next1
if (+ isin $3) {
var %p = $len($3) - 1
var %add = $right($3,%p)
if (%add > 0) && (%add < 30) var %tot = %tot + %add
}
if (+ isin $4) {
var %p = $len($4) - 1
var %add = $right($4,%p)
if (%add > 0) && (%add < 30) var %tot = %tot + %add
}
if (- isin $3) {
var %p = $len($3) - 1
var %add = $right($3,%p)
if (%add > 0) && (%add < 30) var %tot = %tot - %add
}
if (- isin $4) {
var %p = $len($4) - 1
var %add = $right($4,%p)
if (%add > 0) && (%add < 30) var %tot = %tot - %add
}
if (+WP isin $3) {
var %tot = %tot + 1
}
if (%tot < 0) %tot = 0
%display = %display $+ , Successes : %tot
if (%bot > 0) if (%tot == 0) %display = %display $+ , Botch
if ($chan != $null) /msg $chan %display
if ($chan == $null) {
if ($nick == $me) /say %display
if ($nick != $me) /msg $nick %display
}
:end
}
/wotg {
var %reps = $2
if ($left($3,1) == +) {
var %sum = $3
var %river = $4-
}
else {
var %river = $3-
var %sum = $null
}
if (%river) {
var %tempriver = %river
var %river = $null
:riverrep
var %match = $gettok(%tempriver,1,32)
if ($match > 99) || ($match < 10) {
echo 1 Error bad River, ignoring river
var %river = $null
goto riverabort
}
var %matchnum = $left(%match,1)
var %matchdie = $right(%match,1)
:matchrep
var %river = %river %matchdie
dec %matchnum
if (%matchnum) goto matchrep
var %tempriver = $deltok(%tempriver,1,32)
if (%tempriver) goto riverrep
:riverabort
}
var %inc = 1
if (%reps > 150) {
/msg $chan $nick : Warning! 150 dice maximum. Truncating.
var %reps = 150
}
else if (%reps < 1) {
/msg $chan $nick : Warning! 1 die minimum.
var %reps = 1
}
var %die = $rand(1,10)
var %dice = %die
:reps
if (%inc == %reps) goto end
inc %inc
var %die = $rand(1,10)
var %dice = %dice %die
goto reps
:end
var %display = $null
if ($findtok( %dice ,1,0,32)) var %display = %display $findtok( %dice ,1,0,32) $+ 1
if ($findtok( %dice ,2,0,32)) var %display = %display $findtok( %dice ,2,0,32) $+ 2
if ($findtok( %dice ,3,0,32)) var %display = %display $findtok( %dice ,3,0,32) $+ 3
if ($findtok( %dice ,4,0,32)) var %display = %display $findtok( %dice ,4,0,32) $+ 4
if ($findtok( %dice ,5,0,32)) var %display = %display $findtok( %dice ,5,0,32) $+ 5
if ($findtok( %dice ,6,0,32)) var %display = %display $findtok( %dice ,6,0,32) $+ 6
if ($findtok( %dice ,7,0,32)) var %display = %display $findtok( %dice ,7,0,32) $+ 7
if ($findtok( %dice ,8,0,32)) var %display = %display $findtok( %dice ,8,0,32) $+ 8
if ($findtok( %dice ,9,0,32)) var %display = %display $findtok( %dice ,9,0,32) $+ 9
if ($findtok( %dice ,10,0,32)) var %display = %display $calc( $findtok( %dice ,10,0,32) * 10 )
if (%display == $null) goto abort
var %display = $sorttok( %display ,32,r)
if (%sum) {
var %tempdisp = %display
var %display = $null
var %stupid = -1
:adding
inc %stupid
if (%stupid > 0) var %display = %display $+ , $gettok(%tempdisp,1,32) ( $+ $calc( $gettok(%tempdisp,1,32) + %sum) $+ )
else var %display = %display $gettok(%tempdisp,1,32) ( $+ $calc( $gettok(%tempdisp,1,32) + %sum) $+ )
if (%river != $null) {
var %match = $gettok(%tempdisp,1,32)
var %matchnum = $left(%match,1)
var %matchdie = $right(%match,1)
:rivermatchdie
if ($findtok(%river,%matchdie,32)) {
inc %matchnum
var %river = $deltok(%river,$findtok(%river,%matchdie,1,32),32)
if ($findtok(%river,%matchdie,32)) goto rivermatchdie
var %display = %display �4 $+ ( $+ %matchnum $+ $calc( %matchdie + %sum ) $+ ) $+ �
}
}
var %tempdisp = $deltok(%tempdisp,1,32)
if (%tempdisp) goto adding
}
else if (%river != $null) {
var %tempdisp = %display
var %display = $null
var %stupid = -1
:riveradding
inc %stupid
var %match = $gettok(%tempdisp,1,32)
var %matchnum = $left(%match,1)
var %matchdie = $right(%match,1)
:rivermatchdie2
if ($findtok(%river,%matchdie,32)) {
inc %matchnum
var %river = $deltok(%river,$findtok(%river,%matchdie,1,32),32)
if ($findtok(%river,%matchdie,32)) goto rivermatchdie2
if (%stupid > 0) var %display = %display $+ , $gettok(%tempdisp,1,32) �4 $+ ( $+ %matchnum $+ %matchdie $+ ) $+ �
else var %display = %display $gettok(%tempdisp,1,32) �4 $+ ( $+ %matchnum $+ %matchdie $+ ) $+ �
}
else if (%stupid > 0) var %display = %display $+ , $gettok(%tempdisp,1,32)
else var %display = %display $gettok(%tempdisp,1,32)
var %tempdisp = $deltok(%tempdisp,1,32)
if (%tempdisp) goto riveradding
}
if (o isin $1) var %display = %display - ( $+ %dice $+ )
/msg $chan $nick ( $+ %reps $+ ): %display
:abort
}
add this to Popups > 2 Channel
dice
.active: {
/writeini ws.ini $network $chan on
/msg $chan �6Dice Script Active
}
.deactive: {
/writeini ws.ini $network $chan off
/msg $chan �6Dice Script Deactivated
}
Add this to remote
on 1:TEXT:*Dice Script Active*:#: {
if ($readini(ws.ini, $network, $chan) != off) {
/writeini ws.ini $network $chan off
/msg $chan �6Dice Script Deactivated
}
}
on 1:TEXT:!roll*:*: if ($readini(ws.ini, $network, $chan) != off) /roll $2-
on 1:TEXT:!e*:*: if ($readini(ws.ini, $network, $chan) != off) /e $1-
on 1:TEXT:!w*:*: if ($readini(ws.ini, $network, $chan) != off) /wotg $1-
on 1:TEXT:!n*:*: if ($readini(ws.ini, $network, $chan) != off) /nwod $1-
on 1:INPUT:* {
var %length = $len($1-)
if (%length > 400) {
haltdef
:say
if ($len($1-) > 400) {
var %lenny = $calc($pos($1-,$chr(32),$calc($count($left($1-,400),$chr(32)) -1))))
if ($left($1-,3) == /me) $left($1-,%lenny)
else /say $left($1-,%lenny)
dec %length %lenny
if (%length > 0) {
if ($left($1-,3) == /me) { tokenize 32 $1 $mid($1-,$calc(%lenny + 1)) | goto say }
else { tokenize 32 $mid($1-,$calc(%lenny + 1)) | goto say }
}
else halt
}
else {
if ($left($1-,3) == /me) $left($1-,%lenny)
else /say $left($1-,%lenny)
}
}
if ($readini(ws.ini, $network, $chan) == on) {
if (!roll isin $1) /roll $2-
if (!e isin $1) /e $1-
if (!w isin $1) /wotg $1-
if (!d isin $1) /sbs $1-
if (!n isin $1) /nwod $1-
}
}