mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
97 lines
3.0 KiB
Python
97 lines
3.0 KiB
Python
import random
|
|
def rtd(data,debug,sender):
|
|
backo = data
|
|
try:
|
|
arg1,arg2 = backo.split("d")
|
|
except ValueError, err:
|
|
return("Too many or too small amount of arguments")
|
|
else:
|
|
if debug:
|
|
print sender+":!rtd "+arg1+"d"+arg2 #faster than using %s's
|
|
die,die2 = [],[]
|
|
current_mark = ""
|
|
outcome = 0
|
|
realnumberfound = False
|
|
checks = []
|
|
count = 0
|
|
arg1 = arg1.replace(" ","")
|
|
arg2 = arg2.replace(" ","")
|
|
try:
|
|
i_arg1 = int(arg1)
|
|
a_arg1 = abs(i_arg1)
|
|
if "+" in arg2 or "-" in arg2:
|
|
plus_spot = arg2.find("+")
|
|
minus_spot = arg2.find("-")
|
|
if plus_spot == -1 and minus_spot == -1:
|
|
nicer_form = ""
|
|
elif plus_spot != -1 and minus_spot == -1:
|
|
nicer_form = arg2[plus_spot:]
|
|
elif plus_spot == -1 and minus_spot != -1:
|
|
nicer_form = arg2[minus_spot:]
|
|
else:
|
|
if plus_spot < minus_spot:
|
|
nicer_form = arg2[plus_spot:]
|
|
else:
|
|
nicer_form = arg2[minus_spot:]
|
|
for letter in arg2:
|
|
if letter == "+" or letter == "-":
|
|
current_mark = letter
|
|
checks = []
|
|
count += 1
|
|
continue
|
|
checks.append(letter)
|
|
try:
|
|
next_up = arg2[count+1]
|
|
except:
|
|
if realnumberfound == False:
|
|
i_arg2 = int("".join(checks))
|
|
checks = []
|
|
realnumberfound = True
|
|
elif current_mark == "+":
|
|
outcome += int("".join(checks))
|
|
else:
|
|
outcome -= int("".join(checks))
|
|
else:
|
|
if next_up == "+" or next_up == "-":
|
|
if realnumberfound == False:
|
|
i_arg2 = int("".join(checks))
|
|
checks = []
|
|
realnumberfound = True
|
|
else:
|
|
if current_mark == "+":
|
|
outcome += int("".join(checks))
|
|
else:
|
|
outcome -= int("".join(checks))
|
|
checks = []
|
|
count += 1
|
|
else:
|
|
i_arg2 = int(arg2)
|
|
if a_arg1 == 0 or abs(i_arg2) == 0:
|
|
raise RuntimeError
|
|
except ValueError:
|
|
return("You lied! That's not a number!")
|
|
except RuntimeError:
|
|
return("Too many zeroes!")
|
|
else:
|
|
if a_arg1 > 100:
|
|
return("Too many rolls, I can only do one hundred at max.")
|
|
else:
|
|
for i in xrange(0,a_arg1):
|
|
if i_arg2 < 0:
|
|
dice = random.randint(i_arg2,0)
|
|
else:
|
|
dice = random.randint(1,i_arg2)
|
|
die.append(dice)
|
|
die2.append(str(dice))
|
|
if i_arg2 < 0:
|
|
flist = "".join(die2)
|
|
else:
|
|
flist = "+".join(die2)
|
|
if len(flist) > 350:
|
|
return(str(reduce(lambda x,y: x+y, die)+outcome))
|
|
else:
|
|
if current_mark == "":
|
|
return(flist+" = "+str(reduce(lambda x,y: x+y, die)+outcome))
|
|
else:
|
|
return(flist+" ("+nicer_form+") = "+str(reduce(lambda x,y: x+y, die)+outcome))
|