예제 #1
0
def sellInventoryItem(command):
    # GET THE NAME FROM COMMAND ID
    target = None
    for player in PLAYERS:
        if (player["id"] == command["id"]):
            target = player
    if not target:
        return
    player_db = database.getPlayerData(target["name"])
    # The incoming index doesn't account for the root, so we need to account for that
    fish = player_db["inventory"][command["index"]]
    if fish == "SERGIO":
        player_db["money"] = player_db["money"] + 10
    else:
        player_db["money"] = player_db["money"] + 1
    del player_db["inventory"][command["index"]]
    # Update the database
    database.setPlayerData(command["name"], player_db)
    # REFRESH THE INVENTORY/MONEY INFO FOR THE PLAYER ONCE UPDATED
    sendMessageTo({
        "command": "inventory",
        "inventory": player_db["inventory"]
    }, command["id"])
    sendMessageTo({
        "command": "money",
        "money": player_db["money"]
    }, command["id"])
예제 #2
0
def _getRosterPlayers(rosters):

    # flatten player list
    simpleRosters = [roster["players"] for roster in rosters]
    allIds = [player for roster in simpleRosters for player in roster]

    # get players from DB
    db = getDB()
    return getPlayerData(db, allIds)
예제 #3
0
def createPlayer(name, session_id, websocket):
    # Make sure the player exists in the database
    database.getPlayerData(name)
    wardrobe = database.getPlayerWardrobeData(name)
    # Notify the client of existing clients
    messages = []
    for player in PLAYERS:
        messages.append({
            "command": "create",
            "id": player["id"],
            "name": player["name"],
            "x": player["x"],
            "y": player["y"],
            "state": player["state"],
            "hair": player["hair"]
        })
    # Add the player to our list of players
    PLAYERS.append({
        "id": session_id,
        "name": name,
        "x": 480,
        "y": 480,
        "socket": websocket,
        "messages": messages,
        "state": "default",
        "hair": wardrobe["hair"]["current"]
    })
    # Notify all clients of the new player
    sendMessage({
        "command": "create",
        # TODO: THIS ID SHOULD REALLY NOT BE BROADCASTED TO ALL PLAYERS
        "id": session_id,
        "name": name,
        "x": 480,
        "y": 480,
        "state": "default",
        "hair": wardrobe["hair"]["current"],
        "debug": database.getPlayerData("default")["name"]
    })
예제 #4
0
def sendMoneyInfo(command):
    # GET THE NAME FROM COMMAND ID
    target = None
    for player in PLAYERS:
        if (player["id"] == command["id"]):
            target = player
    if not target:
        return
    player_db = database.getPlayerData(target["name"])
    sendMessageTo({
        "command": "money",
        "money": player_db["money"]
    }, command["id"])
예제 #5
0
def buy(command):
    item = command["item"]
    # Handle the hairs
    if item == 0 or item == 1:
        wardrobe = database.getPlayerWardrobeData(command["name"])
        if item not in wardrobe["hair"]["unlocked"]:
            # Also need to check that the player has enough money
            player = database.getPlayerData(command["name"])
            if item == 0 and player["money"] >= 50:
                player["money"] = player["money"] - 50
                wardrobe["hair"]["unlocked"] += [0]
                database.setPlayerWardrobeData(command["name"], wardrobe)
                database.setPlayerData(command["name"], player)
                players.sendMoneyInfo(command)
                # Also send the wardrobe info so we can update it on client side
                players.sendWardrobeInfo({"name": command["name"], "id": command["id"]})
            elif item == 1 and player["money"] >= 100:
                player["money"] = player["money"] - 100
                wardrobe["hair"]["unlocked"] += [1]
                database.setPlayerWardrobeData(command["name"], wardrobe)
                database.setPlayerData(command["name"], player)
                players.sendMoneyInfo(command)
                # Also send the wardrobe info so we can update it on client side
                players.sendWardrobeInfo({"name": command["name"], "id": command["id"]})
예제 #6
0
def getTrades(currentWeek=None, teams=None, n=5):
    """Gets recent transactions"""
    leagueID = os.getenv("LEAGUE_ID")
    currentWeek = currentWeek or getTimeframe()["week"]
    teams = teams or getTeams(True)
    db = getDB()

    # recursively search until I find 5 trades
    tradesData = []

    def findTrades(week):
        txns = requests.get(
            f"https://api.sleeper.app/v1/league/{leagueID}/transactions/{week}"
        ).json()

        # filter for only trades of two teams
        tradesData.extend([
            trade for trade in txns
            if trade["type"] == "trade" and len(trade["roster_ids"]) == 2
        ])
        if len(tradesData) < n:
            findTrades(week - 1)

    findTrades(currentWeek)
    tradesData = tradesData[:n]

    # get player info
    id_list_list = [trade["adds"].keys() for trade in tradesData]
    id_list = set([item for sublist in id_list_list for item in sublist])
    allPlayers = getPlayerData(db, id_list)

    trades = []

    def getTradeData(roster_id):
        players = [
            key for key in tradeData["adds"].keys()
            if tradeData["adds"][key] == roster_id
        ]
        picks = [
            pick for pick in tradeData["draft_picks"]
            if pick["owner_id"] == roster_id
        ]
        draftConvert = {1: "1st", 2: "2nd", 3: "3rd"}
        voteData = db.trade_votes.find({
            "transaction_id":
            tradeData["transaction_id"],
            "roster_id":
            roster_id,
        })
        voteUsers = [vote["user_id"] for vote in voteData]

        return {
            "team": [
                team for team in teams
                if team["id"].split("|")[1] == str(roster_id)
            ][0],
            "players": [allPlayers[player_id] for player_id in players],
            "picks": [{
                "season":
                pick["season"],
                "round":
                draftConvert[pick["round"]],
                "owner": [
                    team for team in teams
                    if team["id"].split("|")[1] == str(pick["roster_id"])
                ][0]["owner"],
            } for pick in picks],
            "votes":
            voteUsers,
        }

    for tradeData in tradesData:
        trade = {
            "transaction_id": tradeData["transaction_id"],
            "team1": getTradeData(tradeData["roster_ids"][0]),
            "team2": getTradeData(tradeData["roster_ids"][1]),
        }
        trades.append(trade)

    return trades
예제 #7
0
def sendInventoryInfo(command):
    player_db = database.getPlayerData(command["name"])
    sendMessageTo({
        "command": "inventory",
        "inventory": player_db["inventory"]
    }, command["id"])