201 lines
6.6 KiB
Python
201 lines
6.6 KiB
Python
import random
|
|
import re
|
|
import string
|
|
import json
|
|
import os
|
|
|
|
from . import swchar
|
|
|
|
with open("resources/swskills.json", "r") as f:
|
|
skillData = json.load(f)
|
|
|
|
def roll(abi : int = 1, prof : int = 0, dif : int = 3, cha : int = 0, boo : int = 0, setb : int = 0, force : int = 0):
|
|
result = ""
|
|
for x in range(abi):
|
|
result += random.choice(["","S","S","SS","A","A","SA","AA"])
|
|
|
|
for x in range(prof):
|
|
result += random.choice(["","S","S","SS","SS","A","SA","SA","SA","AA","AA","R"])
|
|
|
|
for x in range(dif):
|
|
result += random.choice(["","F","FF","H","H","H","HH","FH"])
|
|
|
|
for x in range(cha):
|
|
result += random.choice(["","F","F","FF","FF","H","H","FH","FH","HH","HH","D"])
|
|
|
|
for x in range(boo):
|
|
result += random.choice(["","","S","SA","AA","A"])
|
|
|
|
for x in range(setb):
|
|
result += random.choice(["","","F","F","H","H"])
|
|
|
|
for x in range (force):
|
|
result += random.choice(["B","B","B","B","B","B","BB","L","L","Ll","LL","LL"])
|
|
|
|
return result
|
|
|
|
def simplify(result : str):
|
|
simp = ""
|
|
success = (result.count('S') + result.count('R')) - (result.count('F') + result.count('D'))
|
|
advantage = result.count('A') - result.count('H')
|
|
result = re.sub("S|A|F|H","",result)
|
|
|
|
if success > 0:
|
|
for x in range(success):
|
|
simp += "S"
|
|
elif success < 0:
|
|
for x in range(abs(success)):
|
|
simp += "F"
|
|
|
|
if advantage > 0:
|
|
for x in range(advantage):
|
|
simp += "A"
|
|
elif advantage < 0:
|
|
for x in range(abs(advantage)):
|
|
simp += "H"
|
|
|
|
simp += result
|
|
|
|
return simp
|
|
|
|
def resultToEmoji(result : str):
|
|
emoji = ""
|
|
for char in result:
|
|
if char == 'S':
|
|
emoji += "<:success:690971244971163718> "
|
|
if char == 'A':
|
|
emoji += "<:advantage:690970761611051079> "
|
|
if char == 'R':
|
|
emoji += "<:swtriumph:690971267486187643> "
|
|
if char == 'F':
|
|
emoji += "<:failure:690970957786906664> "
|
|
if char == 'H':
|
|
emoji += "<:threat:690971009469382656> "
|
|
if char == 'D':
|
|
emoji += "<:despair:690971200163414238> "
|
|
if char == 'L':
|
|
emoji += "<:light:691010089905029171>"
|
|
if char == 'B':
|
|
emoji += "<:dark:691010101901000852>"
|
|
|
|
return emoji
|
|
|
|
def emojiToResult(emoji : str):
|
|
result = ""
|
|
for char in emoji:
|
|
if char == "<:light:691010089905029171>":
|
|
emoji += 'L'
|
|
if char == "<:dark:691010101901000852>":
|
|
emoji += 'B'
|
|
|
|
return result
|
|
|
|
def diceToEmoji(dice : list):
|
|
emoji = ""
|
|
|
|
for x in range(dice[0]):
|
|
emoji += "<:ability:690974213397282826> "
|
|
for x in range(dice[1]):
|
|
emoji += "<:proficiency:690973435354153071> "
|
|
for x in range(dice[2]):
|
|
emoji += "<:difficulty:690973992470708296> "
|
|
for x in range(dice[3]):
|
|
emoji += "<:challenge:690973419906400306> "
|
|
for x in range(dice[4]):
|
|
emoji += "<:boost:690972178216386561> "
|
|
for x in range(dice[5]):
|
|
emoji += "<:setback:690972157890658415> "
|
|
for x in range(dice[6]):
|
|
emoji += "<:force:690973451883774013> "
|
|
|
|
return emoji
|
|
|
|
def getDice(user : str, skill : str):
|
|
return "yes"
|
|
|
|
def obligationRoll():
|
|
with open("resources/swcharacters.json", "r") as f:
|
|
data = json.load(f)
|
|
|
|
table = []
|
|
|
|
for character in data:
|
|
for obligation in data[character]["Obligations"]:
|
|
for x in range(data[character]["Obligations"][obligation]):
|
|
table.append(data[character]["Name"]+", "+obligation)
|
|
|
|
while len(table) < 100:
|
|
table.append("Nothing")
|
|
|
|
return random.choice(table)
|
|
|
|
def parseRoll(user : str,cmd : str = ""):
|
|
cmd = re.sub(' +',' ',cmd.upper()) + " "
|
|
if cmd[0] == " ":
|
|
cmd = cmd[1:]
|
|
cmd = swchar.replaceSpaces(cmd.capitalize())
|
|
commands = cmd.split(" ")
|
|
if commands[0] == "":
|
|
rollParameters = [1,0,3,0,0,0,0]
|
|
else:
|
|
rollParameters = [0,0,0,0,0,0,0]
|
|
|
|
if string.capwords(commands[0]) == "Obligations":
|
|
return obligationRoll()
|
|
|
|
elif string.capwords(commands[0]) in skillData:
|
|
if swchar.userHasChar:
|
|
skillLevel = swchar.charData(user,"Skills " + string.capwords(commands[0]))
|
|
|
|
if string.capwords(commands[0]) == "Lightsaber":
|
|
charLevel = swchar.charData(user,"Characteristics " + swchar.lightsaberChar(user))
|
|
else:
|
|
charLevel = swchar.charData(user,"Characteristics " + skillData[string.capwords(commands[0])])
|
|
|
|
abilityDice = abs(charLevel-skillLevel)
|
|
proficiencyDice = min(skillLevel,charLevel)
|
|
|
|
commands = [str(abilityDice)] + [str(proficiencyDice)] + commands[1:]
|
|
else:
|
|
return "You don't have a user. You can make one with !swchar"
|
|
|
|
elif string.capwords(commands[0]) in ["Ranged","Piloting"]:
|
|
if string.capwords(commands[0]) == "Ranged":
|
|
return "Did you mean \"Ranged - Heavy\" or \"Ranged - Light\""
|
|
else:
|
|
return "Did you mean \"Piloting - Planetary\" or \"Piloting - Space\""
|
|
|
|
try:
|
|
for x in range(len(commands)):
|
|
if commands[x-1] != "":
|
|
if commands[x-1][0] == "A":
|
|
rollParameters[0] = int(commands[x-1].replace("A",""))
|
|
elif commands[x-1][0] == "P":
|
|
rollParameters[1] = int(commands[x-1].replace("P",""))
|
|
elif commands[x-1][0] == "D":
|
|
rollParameters[2] = int(commands[x-1].replace("D",""))
|
|
elif commands[x-1][0] == "C":
|
|
rollParameters[3] = int(commands[x-1].replace("C",""))
|
|
elif commands[x-1][0] == "B":
|
|
rollParameters[4] = int(commands[x-1].replace("B",""))
|
|
elif commands[x-1][0] == "S":
|
|
rollParameters[5] = int(commands[x-1].replace("S",""))
|
|
elif commands[x-1][0] == "F":
|
|
rollParameters[6] = int(commands[x-1].replace("F",""))
|
|
else:
|
|
rollParameters[x-1] = int(commands[x-1])
|
|
except:
|
|
return "Invalid input!"
|
|
|
|
rollResults = roll(rollParameters[0],rollParameters[1],rollParameters[2],rollParameters[3],rollParameters[4],rollParameters[5],rollParameters[6])
|
|
|
|
simplified = simplify(rollResults)
|
|
|
|
name = swchar.getName(user)
|
|
|
|
if simplified != rollResults:
|
|
return name + " rolls " + diceToEmoji(rollParameters) + "\nResult: " + resultToEmoji(rollResults) + "\nSimplified: " + resultToEmoji(simplify(rollResults))
|
|
else:
|
|
return name + " rolls " + diceToEmoji(rollParameters) + "\nResult: " + resultToEmoji(rollResults)
|
|
|