Exemple #1
0
async def order(cmd):
    user_data = EwUser(member=cmd.message.author)
    poi = ewcfg.id_to_poi.get(user_data.poi)

    if (poi == None) or (len(poi.vendors) == 0):
        # Only allowed in the food court.
        response = ewcfg.str_food_channelreq.format(action="order")
    else:
        value = None
        togo = False
        if cmd.tokens_count > 1:
            for token in cmd.tokens[1:]:
                if token.startswith('<@') == False and token.lower(
                ) not in "togo":  # togo can be spelled together or separate
                    value = token
                    break
            for token in cmd.tokens[1:]:
                if token.lower(
                ) in "togo":  # lets people get away with just typing only to or only go (or only t etc.) but whatever
                    togo = True
                    break

        food = ewcfg.food_map.get(value.lower() if value != None else value)
        if food != None and food.vendor == ewcfg.vendor_vendingmachine:
            togo = True

        member = None
        if not togo:  # cant order togo for someone else, you can just give it to them in person
            if cmd.mentions_count == 1:
                member = cmd.mentions[0]
                if member.id == cmd.message.author.id:
                    member = None

        member_data = EwUser(member=member)

        if food == None or food.vendor not in poi.vendors:
            response = "Check the {} for a list of items you can {}.".format(
                ewcfg.cmd_menu, ewcfg.cmd_order)
        elif member is not None and member_data.poi != user_data.poi:
            response = "The delivery service has become unavailable due to unforeseen circumstances."
        else:
            market_data = EwMarket(id_server=cmd.message.server.id)

            target_data = None
            if member != None:
                target_data = EwUser(member=member)

            value = food.price if not togo else food.price * ewcfg.togo_price_increase

            # Kingpins eat free.
            if user_data.life_state == ewcfg.life_state_kingpin or user_data.life_state == ewcfg.life_state_grandfoe:
                value = 0

            if value > user_data.slimecredit:
                # Not enough money.
                response = "A {food} is {cost:,} SlimeCoin (and you only have {credits:,}).".format(
                    food=food.str_name,
                    cost=value,
                    credits=user_data.slimecredit)
            else:
                user_data.change_slimecredit(
                    n=-value, coinsource=ewcfg.coinsource_spending)

                if not togo:

                    if target_data != None:
                        target_data.hunger -= food.recover_hunger
                        if target_data.hunger < 0:
                            target_data.hunger = 0
                        target_data.inebriation += food.inebriation
                        if target_data.inebriation > ewcfg.inebriation_max:
                            target_data.inebriation = ewcfg.inebriation_max
                        if food.id_food == "coleslaw":
                            target_data.ghostbust = True

                    else:
                        user_data.hunger -= food.recover_hunger
                        if user_data.hunger < 0:
                            user_data.hunger = 0
                        user_data.inebriation += food.inebriation
                        if user_data.inebriation > ewcfg.inebriation_max:
                            user_data.inebriation = ewcfg.inebriation_max
                        if food.id_food == "coleslaw":
                            user_data.ghostbust = True

                else:  # if it's togo
                    inv = ewitem.inventory(id_user=cmd.message.author.id,
                                           id_server=cmd.message.server.id)
                    food_in_inv = 0
                    for item in inv:
                        if item.get('item_type') == ewcfg.it_food:
                            food_in_inv += 1

                    if food_in_inv >= math.ceil(
                            user_data.slimelevel / ewcfg.max_food_in_inv_mod):
                        # user_data never got persisted so the player won't lose money unnecessarily
                        response = "You can't carry any more food than that."
                        return await cmd.client.send_message(
                            cmd.message.channel,
                            ewutils.formatMessage(cmd.message.author,
                                                  response))

                    item_props = {
                        'food_name':
                        food.str_name,
                        'food_desc':
                        food.str_desc,
                        'recover_hunger':
                        food.recover_hunger,
                        'price':
                        food.price,
                        'inebriation':
                        food.inebriation,
                        'vendor':
                        food.vendor,
                        'str_eat':
                        food.str_eat,
                        'time_expir':
                        time.time() + (food.time_expir if food.time_expir
                                       is not None else ewcfg.std_food_expir)
                    }

                    ewitem.item_create(item_type=ewcfg.it_food,
                                       id_user=cmd.message.author.id,
                                       id_server=cmd.message.server.id,
                                       item_props=item_props)

                response = "You slam {cost:,} SlimeCoin down at the {vendor} for a {food}{togo}{sharetext}{flavor}".format(
                    cost=value,
                    vendor=food.vendor,
                    food=food.str_name,
                    togo=" to go" if togo else "",
                    sharetext=(". " if member == None else
                               " and give it to {}.\n\n{}".format(
                                   member.display_name,
                                   ewutils.formatMessage(member, ""))),
                    flavor=food.str_eat if not togo else "")
                if member == None and user_data.hunger <= 0 and not togo:
                    response += "\n\nYou're stuffed!"

                user_data.persist()
                market_data.persist()

                if target_data != None:
                    target_data.persist()

    # Send the response to the player.
    await cmd.client.send_message(
        cmd.message.channel, ewutils.formatMessage(cmd.message.author,
                                                   response))
Exemple #2
0
async def order(cmd):
    resp = await ewcmd.start(cmd=cmd)

    if cmd.message.channel.name != ewcfg.channel_foodcourt:
        # Only allowed in the food court.
        response = ewcfg.str_food_channelreq.format(action="order")
    else:
        value = None
        if cmd.tokens_count > 1:
            for token in cmd.tokens[1:]:
                if token.startswith('<@') == False:
                    value = token
                    break

        food = ewcfg.food_map.get(value)

        member = None
        if cmd.mentions_count == 1:
            member = cmd.mentions[0]
            if member.id == cmd.message.author.id:
                member = None

        if food == None:
            response = "Check the {} for a list of items you can {}.".format(
                ewcfg.cmd_menu, ewcfg.cmd_order)
        else:
            try:
                conn = ewutils.databaseConnect()
                cursor = conn.cursor()

                user_data = EwUser(member=cmd.message.author,
                                   conn=conn,
                                   cursor=cursor)
                market_data = EwMarket(id_server=cmd.message.server.id,
                                       conn=conn,
                                       cursor=cursor)

                target_data = None
                if member != None:
                    target_data = EwUser(member=member,
                                         conn=conn,
                                         cursor=cursor)
            finally:
                cursor.close()
                conn.close()

            value = int(food.price / (market_data.rate_exchange / 1000000.0))
            if value <= 0:
                value = 1

            # Kingpins eat free.
            roles_map_user = ewutils.getRoleMap(cmd.message.author.roles)
            if ewcfg.role_rowdyfucker in roles_map_user or ewcfg.role_copkiller in roles_map_user:
                value = 0

            if value > user_data.slimecredit:
                # Not enough money.
                response = "A {food} is {cost:,} SlimeCoin (and you only have {credits:,}).".format(
                    food=food.str_name,
                    cost=value,
                    credits=user_data.slimecredit)
            else:
                user_data.slimecredit -= value

                if target_data != None:
                    target_data.stamina -= food.recover_stamina
                    if target_data.stamina < 0:
                        target_data.stamina = 0
                    target_data.inebriation += food.inebriation
                    if target_data.inebriation > 20:
                        target_data.inebriation = 20

                else:
                    user_data.stamina -= food.recover_stamina
                    if user_data.stamina < 0:
                        user_data.stamina = 0
                    user_data.inebriation += food.inebriation
                    if user_data.inebriation > 20:
                        user_data.inebriation = 20

                market_data.slimes_casino += food.price

                response = "You slam {cost:,} SlimeCoin down at the {vendor} for a {food}{sharetext}{flavor}".format(
                    cost=value,
                    vendor=food.vendor,
                    food=food.str_name,
                    sharetext=(". " if member == None else
                               " and give it to {}.\n\n{}".format(
                                   member.display_name,
                                   ewutils.formatMessage(member, ""))),
                    flavor=food.str_eat)
                if member == None and user_data.stamina <= 0:
                    response += "\n\nYou're stuffed!"

                try:
                    conn = ewutils.databaseConnect()
                    cursor = conn.cursor()

                    user_data.persist(conn=conn, cursor=cursor)
                    market_data.persist(conn=conn, cursor=cursor)

                    if target_data != None:
                        target_data.persist(conn=conn, cursor=cursor)

                    conn.commit()
                finally:
                    cursor.close()
                    conn.close()

    # Send the response to the player.
    await cmd.client.edit_message(
        resp, ewutils.formatMessage(cmd.message.author, response))