import json, random from funcs import getName, logThis from . import monopolyDraw rulesAndTerms = { "pass go money" : 200, "money term" : "GP" } def monopolyStart(channel): logThis("Starting a monopoly game") with open("resources/games/monopolyGames.json", "r") as f: data = json.load(f) if channel not in data: buildings = [0] * 40 data[channel] = {"players" : {}, "player list" : [],"turn" : 0, "buildings" : buildings, "last roll" : [0,0], "started" : False} with open("resources/games/monopolyGames.json", "w") as f: json.dump(data,f,indent=4) try: monopolyDraw.drawImage(channel) except: logThis("Error drawing board (error code 1640)") return "Started a monopoly game. Use \"!monopoly join\" to join within the next minute.", True, False, True, True else: return "There's already a monopoly game going on.", False, False, False, False def monopolyJoin(channel,user): with open("resources/games/monopolyGames.json", "r") as f: data = json.load(f) if channel in data: if not data[channel]["started"]: if user not in data[channel]["players"]: if len(data[channel]["players"]) < 6: data[channel]["players"][user] = {"position" : 0, "properties" : [], "money" : 1500, "doubles" : 0} with open("resources/games/monopolyGames.json", "w") as f: json.dump(data,f,indent=4) return getName(user)+" has joined the game.", False, False, False, False else: return "There are already 6 players in the game.", False, False, False, False else: return "You're already in the game!", False, False, False, False else: return "It's too late to join.", False, False, False, False else: return "There's no game going on.", False, False, False, False def parseMonopoly(command, channel, user): logThis("Parsing "+command) commands = command.split() if command in [" ", ""] or commands[0] == "start": try: return monopolyStart(channel) except: logThis("Error starting game (error code 1620)") elif commands[0] == "join": try: return monopolyJoin(channel,user) except: logThis("Error joining game (error code 1630)") elif commands[0] == "roll": try: return monopolyRoll(channel,user) except: logThis("Error rolling (error code 1650)") else: return "I didn't understand that (error code 1602)", False, False, False, False def monopolyContinue(channel): with open("resources/games/monopolyGames.json", "r") as f: data = json.load(f) if channel in data: if data[channel]["started"] == False: data[channel]["started"] = True playerList = list(data[channel]["players"].keys()) random.shuffle(playerList) data[channel]["player list"] = playerList turn = 0 else: if data[channel]["last roll"][0] == data[channel]["last roll"][1]: turn = data[channel]["turn"] else: turn = (data[channel]["turn"] + 1)%len(data[channel]["player list"]) data[channel]["turn"] = turn playerList = list(data[channel]["players"].keys()) with open("resources/games/monopolyGames.json", "w") as f: json.dump(data,f,indent=4) try: monopolyDraw.drawImage(channel) except: logThis("Error drawing board (error code 1640)") message = "It's "+getName(playerList[turn])+"'s turn. Use the 🎲 reaction to roll. You can also use \"!monopoly trade\" at any time." return message, True, True, False def monopolyRoll(channel,user): with open("resources/games/monopolyGames.json", "r") as f: data = json.load(f) turn = data[channel]["turn"] currentPlayer = data[channel]["player list"][turn] if user == currentPlayer: rolls = [random.randint(1,6),random.randint(1,6)] message = getName(user)+" rolled a "+str(rolls[0])+" and a "+str(rolls[1])+"." if rolls[0] == rolls[1]: message += " Doubbles!" roll = rolls[0] + rolls[1] oldPosition = data[channel]["players"][user]["position"] newPosition = (oldPosition + roll)%40 if newPosition < oldPosition: data[channel]["players"][user]["money"] += rulesAndTerms["pass go money"] message += "\nYou passed go and got "+str(rulesAndTerms["pass go money"])+" "+rulesAndTerms["money term"]+"." data[channel]["players"][user]["position"] = newPosition data[channel]["last roll"] = rolls with open("resources/games/monopolyGames.json", "w") as f: json.dump(data,f,indent=4) try: monopolyDraw.drawImage(channel) except: logThis("Error drawing board (error code 1640)") return message, True, True, False, True else: return "", False, False, False, False