UOS - Dice Roller

Share your guides, how-tos, FAQs, and so forth. This is not for support -- post questions in General Discussion.
Post Reply
Haswell
Posts: 44

UOS - Dice Roller

Post by Haswell »

I made this macro so our guild could roll for artifacts, power scrolls, etc in game.
Edit the "names" list, add a new pushlist for each member and run the macro.

Code: Select all

// Author: Di
// Description: dice roller
// Names
@createlist 'names'
if not @findalias 'draw'
  @clearlist 'names'
  pushlist! 'names' 'Player A'
  pushlist! 'names' 'Player B'
  pushlist! 'names' 'Player C'
  pushlist! 'names' 'Player D'
  if list 'names' == 0
    sysmsg 'No registered players!' 25
    stop
  endif
else
  msg 'Tiebreaker...' 80
  pause 2000
endif
// Lists
@createlist 'winners'
@createlist 'rank'
@createlist 'scores'
@createlist 'sum'
if not listexists 'values'
  createlist 'values'
  // 6
  pushlist 'values' '6, 6'
  pushlist 'values' '5, 6'
  pushlist 'values' '6, 5'
  pushlist 'values' '4, 6'
  pushlist 'values' '6, 4'
  pushlist 'values' '3, 6'
  pushlist 'values' '6, 3'
  pushlist 'values' '2, 6'
  pushlist 'values' '6, 2'
  pushlist 'values' '1, 6'
  pushlist 'values' '6, 1'
  // 5
  pushlist 'values' '5, 5'
  pushlist 'values' '4, 5'
  pushlist 'values' '5, 4'
  pushlist 'values' '3, 5'
  pushlist 'values' '5, 3'
  pushlist 'values' '2, 5'
  pushlist 'values' '5, 2'
  pushlist 'values' '1, 5'
  pushlist 'values' '5, 1'
  // 4
  pushlist 'values' '4, 4'
  pushlist 'values' '3, 4'
  pushlist 'values' '4, 3'
  pushlist 'values' '2, 4'
  pushlist 'values' '4, 2'
  pushlist 'values' '1, 4'
  pushlist 'values' '4, 1'
  // 3
  pushlist 'values' '3, 3'
  pushlist 'values' '2, 3'
  pushlist 'values' '3, 2'
  pushlist 'values' '1, 3'
  pushlist 'values' '3, 1'
  // 2
  pushlist 'values' '2, 2'
  pushlist 'values' '1, 2'
  pushlist 'values' '2, 1'
  pushlist 'values' '1, 1'
endif
// Dice and cup
while not @findtype 0xfa7 0 'ground' 1 2
  headmsg '* No dice *' 25
  pause 1500
endwhile
@setalias 'dice' 'found'
// Start
@clearlist 'scores'
msg '* * * * * * *'
msg 'Rolling...' 60
pause 2000
// Roll
for 0 to 'names'
  clearjournal
  useobject! 'dice'
  waitforjournal 'rolls' 25000 'system'
  if @injournal 'rolls' 'system'
    @clearlist 'sum'
    pushlist 'sum' 12
    pushlist 'sum' 11
    pushlist 'sum' 11
    pushlist 'sum' 10
    pushlist 'sum' 10
    pushlist 'sum' 9
    pushlist 'sum' 9
    pushlist 'sum' 8
    pushlist 'sum' 8
    pushlist 'sum' 7
    pushlist 'sum' 7
    pushlist 'sum' 10
    pushlist 'sum' 9
    pushlist 'sum' 9
    pushlist 'sum' 8
    pushlist 'sum' 8
    pushlist 'sum' 7
    pushlist 'sum' 7
    pushlist 'sum' 6
    pushlist 'sum' 6
    pushlist 'sum' 8
    pushlist 'sum' 7
    pushlist 'sum' 7
    pushlist 'sum' 6
    pushlist 'sum' 6
    pushlist 'sum' 5
    pushlist 'sum' 5
    pushlist 'sum' 6
    pushlist 'sum' 5
    pushlist 'sum' 5
    pushlist 'sum' 4
    pushlist 'sum' 4
    pushlist 'sum' 4
    pushlist 'sum' 3
    pushlist 'sum' 3
    pushlist 'sum' 2
    for 0 to 'values'
      if @injournal 'values[]' 'system'
        msg 'names[]' 33
        msg 'values[]' 60
        msg 'sum[0]' 90
        pushlist 'scores' 'sum[0]'
        break
      endif
      poplist 'sum' 'front'
    endfor
  endif
  pause 1000
endfor
// Compute results
msg 'Checking results...' 60
pause 2000
@clearlist 'winners'
@removetimer 'winners'
for 0 to 'names'
  if list 'winners' != 0
    @settimer 'winners' 'winners[1]'
  endif
  if not @timerexists 'winners' or @timer 'winners' <= 'scores[0]'
    if not @inlist 'winners' 'scores[0]'
      @clearlist 'winners'
    endif
    pushlist 'winners' 'names[]'
    pushlist 'winners' 'scores[0]'
  endif
  poplist 'scores' 'front'
  pause 100
endfor
// Display winners
if list 'winners' == 2
  msg 'Winner:' 60
  @unsetalias 'draw'
else
  msg 'Tied:' 60
  @setalias 'draw' 'self'
  @clearlist 'names'
endif
@unsetalias 'jump'
for 0 to 'winners'
  if @findalias 'jump'
    @unsetalias 'jump'
    continue
  elseif @findalias 'draw'
    pushlist! 'names' 'winners[]'
  endif
  msg 'winners[]' 33
  @setalias 'jump' 'self'
endfor
if @findalias 'draw'
  replay
endif
Post Reply