async def autocannibalize(cmd): user_data = EwUser(member = cmd.message.author) response = "" if user_data.race == ewcfg.races["food"]: time_now = int(time.time()) if time_now > user_data.time_racialability: response = "You give in to the the existential desire all foods have, and take a small bite out of yourself. It hurts like a bitch, but God **DAMN** you're tasty." user_data.time_racialability = time_now + ewcfg.cd_autocannibalize user_data.hunger = max(user_data.hunger - (user_data.get_hunger_max() * 0.01), 0) user_data.change_slimes(n = -user_data.slimes * 0.001) user_data.persist() else: response = "You're too full of yourself right now, try again later." else: response = "You people are not allowed to do that." return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response))
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))