async def eat_item(cmd): user_data = EwUser(member=cmd.message.author) mutations = user_data.get_mutations() item_search = ewutils.flattenTokenListToString(cmd.tokens[1:]) food_item = None # look for a food item if a name was given if item_search: item_sought = ewitem.find_item(item_search=item_search, id_user=user_data.id_user, id_server=user_data.id_server, item_type_filter=ewcfg.it_food) if item_sought: food_item = EwItem(id_item=item_sought.get('id_item')) else: item_sought = ewitem.find_item(item_search=item_search, id_user=user_data.id_user, id_server=user_data.id_server) if item_sought and ewcfg.mutation_id_trashmouth in mutations: return await devour(cmd=cmd) # otherwise find the first useable food else: food_inv = ewitem.inventory(id_user=user_data.id_user, id_server=user_data.id_server, item_type_filter=ewcfg.it_food) for food in food_inv: food_item = EwItem(id_item=food.get('id_item')) # check if the user can eat this item if float(getattr(food_item, "time_expir", 0)) > time.time() or \ food_item.item_props.get('perishable') not in ['true', '1'] or \ ewcfg.mutation_id_spoiledappetite in user_data.get_mutations(): break if food_item != None: response = user_data.eat(food_item) user_data.persist() else: if item_search: response = "Are you sure you have that item?" else: response = "You don't have anything to eat." await ewutils.send_message( cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response))
async def clear_mutations(cmd): user_data = EwUser(member = cmd.message.author) market_data = EwMarket(id_server = user_data.id_server) response = "" if cmd.message.channel.name != ewcfg.channel_slimeoidlab: response = "You require the advanced equipment at the Slimeoid Lab to modify your mutations." return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) if user_data.life_state == ewcfg.life_state_corpse: response = "How do you expect to mutate without exposure to slime, dumbass?" return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) mutations = user_data.get_mutations() if len(mutations) == 0: response = "You have not developed any specialized mutations yet." return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) poudrin = ewitem.find_item(item_search = "slimepoudrin", id_user = cmd.message.author.id, id_server = cmd.message.server.id if cmd.message.server is not None else None, item_type_filter = ewcfg.it_item) if poudrin == None: response = "You need a slime poudrin to replace a mutation." return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) else: ewitem.item_delete(id_item = poudrin.get('id_item')) # Remove Poudrins market_data.donated_poudrins += 1 market_data.persist() user_data.poudrin_donations += 1 user_data.persist() user_data.clear_mutations() response = "After several minutes long elevator descents, in the depths of some basement level far below the laboratory's lobby, you lay down on a reclined medical chair. A SlimeCorp employee finishes the novel length terms of service they were reciting and asks you if you have any questions. You weren’t listening so you just tell them to get on with it so you can go back to getting slime. They oblige.\nThey grab a random used syringe with just a dash of black serum still left inside it. They carefully stab you with it, injecting the mystery formula into your bloodstream. Almost immediately, normalcy returns to your inherently abnormal life… your body returns to whatever might be considered normal for your species. You hand off one of your hard-earned poudrins to the SlimeCorp employee for their troubles." return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response))
async def crush(cmd): member = cmd.message.author user_data = EwUser(member=member) response = "" poudrin = ewitem.find_item(item_search="slimepoudrin", id_user=cmd.message.author.id, id_server=cmd.message.server.id if cmd.message.server is not None else None) if user_data.life_state == ewcfg.life_state_corpse: response = "Alas, you try to shatter the hardened slime crystal, but your ghostly form cannot firmly grasp it." return await ewutils.send_message( cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) if poudrin is None: response = "You need a slime poudrin." else: # delete a slime poudrin from the player's inventory ewitem.item_delete(id_item=poudrin.get('id_item')) user_data.slimes += ewcfg.crush_slimes user_data.persist() response = "You crush the hardened slime crystal with your bare hands.\nYou gain 10,000 slime. Sick, dude!!" # Send the response to the player. await ewutils.send_message( cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response))
async def take(cmd): user_data = EwUser(member=cmd.message.author) response = "" poi = ewcfg.id_to_poi.get(user_data.poi) if poi.community_chest == None: response = "There is no community chest here." return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) else: if len(poi.factions) > 0 and user_data.faction not in poi.factions: response = "Get real, asshole. You haven't even enlisted into this gang yet, so it's not like they'd trust you with a key to their valubles." return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) item_search = ewutils.flattenTokenListToString(cmd.tokens[1:]) item_sought = ewitem.find_item(item_search = item_search, id_user = poi.community_chest, id_server = cmd.guild.id if cmd.guild is not None else None) if item_sought: if item_sought.get('item_type') == ewcfg.it_food: food_items = ewitem.inventory( id_user = cmd.message.author.id, id_server = cmd.guild.id, item_type_filter = ewcfg.it_food ) if len(food_items) >= user_data.get_food_capacity(): response = "You can't carry any more food items." return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) if item_sought.get('item_type') == ewcfg.it_weapon: weapons_held = ewitem.inventory( id_user = cmd.message.author.id, id_server = cmd.guild.id, item_type_filter = ewcfg.it_weapon ) if user_data.life_state == ewcfg.life_state_corpse: response = "Ghosts can't hold weapons." return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) elif len(weapons_held) >= user_data.get_weapon_capacity(): response = "You can't carry any more weapons." return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) ewitem.give_item(id_item = item_sought.get('id_item'), id_server = user_data.id_server, id_user = user_data.id_user) response = "You retrieve a {} from the community chest.".format(item_sought.get("name")) else: if item_search: response = "There isn't one here." else: response = "{} which item? (check **{}**)".format(cmd.tokens[0], ewcfg.cmd_communitychest) await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response))
async def store(cmd): user_data = EwUser(member=cmd.message.author) response = "" poi = ewcfg.id_to_poi.get(user_data.poi) if poi.community_chest == None: response = "There is no community chest here." return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) else: if len(poi.factions) > 0 and user_data.faction not in poi.factions: response = "Get real, asshole. You haven't even enlisted into this gang yet, so it's not like they'd trust you with a key to their valubles." return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) item_search = ewutils.flattenTokenListToString(cmd.tokens[1:]) item_sought = ewitem.find_item(item_search = item_search, id_user = cmd.message.author.id, id_server = cmd.guild.id if cmd.guild is not None else None) if item_sought: item = EwItem(id_item = item_sought.get("id_item")) if not item.soulbound: if item.item_type == ewcfg.it_weapon: if user_data.weapon >= 0 and item.id_item == user_data.weapon: if user_data.weaponmarried: weapon = ewcfg.weapon_map.get(item.item_props.get("weapon_type")) response = "Your cuckoldry is appreciated, but your {} will always remain faithful to you.".format(item_sought.get('name')) return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) else: user_data.weapon = -1 user_data.persist() elif item.id_item == user_data.sidearm: user_data.sidearm = -1 user_data.persist() if item.item_type == ewcfg.it_cosmetic: if "adorned" in item.item_props: item.item_props["adorned"] = "false" if "slimeoid" in item.item_props: item.item_props["slimeoid"] = "false" item.persist() ewitem.give_item(id_item = item.id_item, id_server = item.id_server, id_user = poi.community_chest) response = "You store your {} in the community chest.".format(item_sought.get("name")) else: response = "You can't {} soulbound items.".format(cmd.tokens[0]) else: if item_search: response = "You don't have one" else: response = "{} which item? (check **!inventory**)".format(cmd.tokens[0]) await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response))
async def smeltsoul(cmd): item = ewitem.find_item(item_search="reanimatedcorpse", id_user=cmd.message.author.id, id_server=cmd.message.server.id) if not item: response = "You can't rip a soul out of a nonexistent object." else: item_obj = ewitem.EwItem(id_item=item.get('id_item')) if item_obj.item_props.get('target') != None and item_obj.item_props.get('target') != "": targetid = item_obj.item_props.get('target') ewitem.give_item(id_user=cmd.message.author.id, id_item=targetid, id_server=cmd.message.server.id) response = "You ripped the soul out of the reanimated corpse. It's in mangled bits now." ewitem.item_delete(id_item=item.get('id_item')) else: response = "That's not a reanimated corpse. It only looks like one. Get rid of the fake shit and we'll get started." await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response))
async def embiggen(cmd): user_data = EwUser(member = cmd.message.author) market_data = EwMarket(id_server = user_data.id_server) item_search = ewutils.flattenTokenListToString(cmd.tokens[1:]) item_sought = ewitem.find_item(item_search = item_search, id_user = cmd.message.author.id, id_server = cmd.message.server.id if cmd.message.server is not None else None) if cmd.message.channel.name != ewcfg.channel_slimeoidlab: response = "How are you going to embiggen your fish on the side of the street? You’ve got to see a professional for this, man. Head to the SlimeCorp Laboratory, they’ve got dozens of modern day magic potions ‘n shit over there." elif item_sought: name = item_sought.get('name') fish = EwItem(id_item = item_sought.get('id_item')) acquisition = fish.item_props.get('acquisition') if acquisition != ewcfg.acquisition_fishing: response = "You can only embiggen fishes, dummy. Otherwise everyone would be walking around with colossal nunchucks and huge chicken buckets. Actually, that gives me an idea..." else: size = fish.item_props.get('size') poudrin_cost = 0 if size == ewcfg.fish_size_miniscule: poudrin_cost = 2 if size == ewcfg.fish_size_small: poudrin_cost = 4 if size == ewcfg.fish_size_average: poudrin_cost = 8 if size == ewcfg.fish_size_big: poudrin_cost = 16 if size == ewcfg.fish_size_huge: poudrin_cost = 32 poudrins_owned = ewitem.find_item_all(item_search = "slimepoudrin", id_user = user_data.id_user, id_server = user_data.id_server) poudrin_amount = len(poudrins_owned) if poudrin_cost == 0: response = "Your {} is already as colossal as a fish can get!".format(name) elif poudrin_amount < poudrin_cost: response = "You need {} poudrins to embiggen your {}, but you only have {}!!".format(poudrin_cost, name, poudrin_amount) else: if size == ewcfg.fish_size_miniscule: fish.item_props['size'] = ewcfg.fish_size_small if size == ewcfg.fish_size_small: fish.item_props['size'] = ewcfg.fish_size_average if size == ewcfg.fish_size_average: fish.item_props['size'] = ewcfg.fish_size_big if size == ewcfg.fish_size_big: fish.item_props['size'] = ewcfg.fish_size_huge if size == ewcfg.fish_size_huge: fish.item_props['size'] = ewcfg.fish_size_colossal fish.persist() for delete in range(poudrin_cost): poudrin = poudrins_owned.pop() ewitem.item_delete(id_item = poudrin.get("id_item")) market_data.donated_poudrins += poudrin_cost market_data.persist() user_data.poudrin_donations += poudrin_cost user_data.persist() response = "After several minutes long elevator descents, in the depths of some basement level far below the laboratory's lobby, you lay down your {} on a reclined medical chair. A SlimeCorp employee finishes the novel length terms of service they were reciting and asks you if you have any questions. You weren’t listening so you just tell them to get on with it so you can go back to haggling prices with Captain Albert Alexander. They oblige.\nThey grab a butterfly needle and carefully stab your fish with it, injecting filled with some bizarre, multi-colored serum you’ve never seen before. Sick, it’s bigger now!!".format(name) else: if item_search: # If they didn't forget to specify an item and it just wasn't found. response = "You don't have one." else: response = "Embiggen which fish? (check **!inventory**)" await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response))
async def mill(cmd): user_data = EwUser(member=cmd.message.author) market_data = EwMarket(id_server=user_data.id_server) item_search = ewutils.flattenTokenListToString(cmd.tokens[1:]) item_sought = ewitem.find_item(item_search=item_search, id_user=cmd.message.author.id, id_server=cmd.message.server.id if cmd.message.server is not None else None) # Checking availability of milling if user_data.life_state != ewcfg.life_state_juvenile: response = "Only Juveniles of pure heart and with nothing better to do can mill their vegetables." elif user_data.poi not in [ ewcfg.poi_id_jr_farms, ewcfg.poi_id_og_farms, ewcfg.poi_id_ab_farms ]: response = "Alas, there doesn’t seem to be an official SlimeCorp milling station anywhere around here. Probably because you’re in the middle of the f*****g city. Try looking where you reaped your vegetable in the first place, dumbass." elif user_data.slimes < ewcfg.slimes_permill: response = "It costs {} to !mill, and you only have {}.".format( ewcfg.slimes_permill, user_data.slimes) elif item_sought: items = [] vegetable = EwItem(id_item=item_sought.get('id_item')) for result in ewcfg.mill_results: if result.ingredients != vegetable.item_props.get('id_food'): pass else: items.append(result) if len(items) > 0: item = random.choice(items) item_props = ewitem.gen_item_props(item) ewitem.item_create(item_type=item.item_type, id_user=cmd.message.author.id, id_server=cmd.message.server.id, item_props=item_props) response = "You walk up to the official SlimeCorp Milling Station and shove your irradiated produce into the hand-crank. You painfully grip the needle-covered crank handle, dripping {} slime into a small compartment on the device’s side which supposedly fuels it. You begin slowly churning them into a glorious, pastry goo. As the goo tosses and turns inside the machine, it solidifies, and after a few moments a {} pops out!".format( ewcfg.slimes_permill, item.str_name) market_data.donated_slimes += ewcfg.slimes_permill market_data.persist() ewitem.item_delete(id_item=item_sought.get('id_item')) user_data.change_slimes(n=-ewcfg.slimes_permill, source=ewcfg.source_spending) user_data.slime_donations += ewcfg.slimes_permill user_data.persist() else: response = "You can only mill fresh vegetables! SlimeCorp obviously wants you to support local farmers." else: if item_search: # if they didn't forget to specify an item and it just wasn't found response = "You don't have one." else: response = "Mill which item? (check **!inventory**)" await ewutils.send_message( cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response))
async def cast(cmd): time_now = round(time.time()) has_reeled = False user_data = EwUser(member = cmd.message.author) if user_data.life_state == ewcfg.life_state_shambler: response = "You lack the higher brain functions required to {}.".format(cmd.tokens[0]) return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) if ewutils.channel_name_is_poi(cmd.message.channel.name) == False: return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, "You must {} in a zone's channel.".format(cmd.tokens[0]))) market_data = EwMarket(id_server = cmd.message.author.guild.id) statuses = user_data.getStatusEffects() if cmd.message.author.id not in fishers.keys(): fishers[cmd.message.author.id] = EwFisher() fisher = fishers[cmd.message.author.id] # Ghosts cannot fish. if user_data.life_state == ewcfg.life_state_corpse: response = "You can't fish while you're dead. Try {}.".format(ewcfg.cmd_revive) # Players who are already cast a line cannot cast another one. elif fisher.fishing == True: response = "You've already cast a line." # Only fish at The Pier elif user_data.poi in ewcfg.piers: poi = ewcfg.id_to_poi.get(user_data.poi) district_data = EwDistrict(district = poi.id_poi, id_server = user_data.id_server) if district_data.is_degraded(): response = "{} has been degraded by shamblers. You can't {} here anymore.".format(poi.str_name, cmd.tokens[0]) return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) if user_data.hunger >= ewutils.hunger_max_bylevel(user_data.slimelevel): response = "You're too hungry to fish right now." else: has_fishingrod = False if user_data.weapon >= 0: weapon_item = EwItem(id_item = user_data.weapon) weapon = ewcfg.weapon_map.get(weapon_item.item_props.get("weapon_type")) if weapon.id_weapon == "fishingrod": has_fishingrod = True #if user_data.sidearm >= 0: # sidearm_item = EwItem(id_item=user_data.sidearm) # sidearm = ewcfg.weapon_map.get(sidearm_item.item_props.get("weapon_type")) # if sidearm.id_weapon == "fishingrod": # has_fishingrod = True if ewcfg.status_high_id in statuses: fisher.high = True fisher.fishing = True fisher.bait = False fisher.pier = ewcfg.id_to_poi.get(user_data.poi) fisher.current_fish = gen_fish(market_data, fisher, has_fishingrod) high_value_bait_used = False global fishing_counter fishing_counter += 1 current_fishing_id = fisher.fishing_id = fishing_counter item_search = ewutils.flattenTokenListToString(cmd.tokens[1:]) author = cmd.message.author server = cmd.guild item_sought = ewitem.find_item(item_search = item_search, id_user = author.id, id_server = server.id) if item_sought: item = EwItem(id_item = item_sought.get('id_item')) if item.item_type == ewcfg.it_food: str_name = item.item_props['food_name'] id_food = item.item_props.get('id_food') fisher.bait = True if id_food in ewcfg.plebe_bait: fisher.current_fish = "plebefish" elif id_food == "doublestuffedcrust": if random.randrange(5) == 3: fisher.current_fish = "doublestuffedflounder" elif id_food in ["chickenbucket", "familymeal"]: if random.randrange(5) == 3: fisher.current_fish = "seacolonel" elif id_food in ["steakvolcanoquesomachorito", "nachosupreme"]: if random.randrange(5) == 3: fisher.current_fish = "marlinsupreme" elif id_food in ["blacklimes", "blacklimesour"]: if random.randrange(2) == 1: fisher.current_fish = "blacklimesalmon" elif id_food in ["pinkrowddishes", "pinkrowdatouille"]: if random.randrange(2) == 1: fisher.current_fish = "thrash" elif id_food in ["purplekilliflowercrustpizza", "purplekilliflower"]: if random.randrange(2) == 1: fisher.current_fish = "dab" elif id_food == "kingpincrab": if random.randrange(5) == 1: fisher.current_fish = "uncookedkingpincrab" elif id_food == "masterbait": high_value_bait_used = True elif float(item.time_expir if item.time_expir is not None else 0) < time.time(): if random.randrange(2) == 1: fisher.current_fish = "plebefish" ewitem.item_delete(item_sought.get('id_item')) if fisher.current_fish == "item": fisher.current_size = "item" else: fisher.current_size = gen_fish_size(has_fishingrod) if fisher.bait == False: response = "You cast your fishing line into the " else: response = "You attach your {} to the hook as bait and then cast your fishing line into the ".format(str_name) if fisher.pier.pier_type == ewcfg.fish_slime_saltwater: response += "vast Slime Sea." else: response += "glowing Slime Lake." user_data.hunger += ewcfg.hunger_perfish * ewutils.hunger_cost_mod(user_data.slimelevel) user_data.persist() await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) bite_text = gen_bite_text(fisher.current_size) # User has a 1/10 chance to get a bite fun = 100 if fisher.bait == True: # Bait attatched, chance to get a bite increases from 1/10 to 1/7 fun -= 30 if fisher.pier == ewcfg.poi_id_ferry: # Fisher is on the ferry, chance to get a bite increases from 1/10 to 1/8 fun -= 20 if high_value_bait_used: fun = 5 bun = 0 while not ewutils.TERMINATE: if fun <= 0: fun = 1 else: damp = random.randrange(fun) if fisher.high: await asyncio.sleep(30) elif high_value_bait_used: await asyncio.sleep(5) else: await asyncio.sleep(60) # Cancel if fishing was interrupted if current_fishing_id != fisher.fishing_id: return if fisher.fishing == False: return user_data = EwUser(member=cmd.message.author) if fisher.pier == "" or user_data.poi != fisher.pier.id_poi: fisher.stop() return if user_data.life_state == ewcfg.life_state_corpse: fisher.stop() return if damp > 10: await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, random.choice(ewcfg.nobite_text))) fun -= 2 bun += 1 if bun >= 5: fun -= 1 if bun >= 15: fun -= 1 continue else: break fisher.bite = True await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, bite_text)) await asyncio.sleep(8) if fisher.bite != False: fisher.stop() return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, "The fish got away...")) else: has_reeled = True else: response = "You can't fish here. Go to a pier." # Don't send out a response if the user actually reeled in a fish, since that gets sent by the reel command instead. if has_reeled == False: await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response))
async def barter(cmd): user_data = EwUser(member = cmd.message.author) market_data = EwMarket(id_server = user_data.id_server) item_search = ewutils.flattenTokenListToString(cmd.tokens[1:]) item_sought = ewitem.find_item(item_search = item_search, id_user = cmd.message.author.id, id_server = cmd.message.server.id if cmd.message.server is not None else None) # Checking availability of appraisal #if market_data.clock < 8 or market_data.clock > 17: # response = "You ask the bartender if he knows someone who would want to trade you something for your recently caught fish. Apparently, at night, an old commodore by the name of Captain Albert Alexander comes to drown his sorrows at this very tavern. You guess you’ll just have to sit here and wait for him, then." if cmd.message.channel.name != ewcfg.channel_speakeasy: if cmd.message.channel.name in [ewcfg.channel_tt_pier, ewcfg.channel_jp_pier, ewcfg.channel_cl_pier, ewcfg.channel_afb_pier, ewcfg.channel_vc_pier, ewcfg.channel_se_pier, ewcfg.channel_ferry]: response = 'You ask a nearby fisherman if he wants to trade you anything for this fish you just caught. He tells you to f**k off, but also helpfully informs you that there’s an old sea captain that frequents the Speakeasy that might be able to help you. What an inexplicably helpful/grouchy fisherman!' else: response = 'What random passerby is going to give two shits about your fish? You’ll have to consult a fellow fisherman… perhaps you’ll find some on a pier?' elif item_sought: name = item_sought.get('name') fish = EwItem(id_item = item_sought.get('id_item')) id_fish = fish.id_item # str_fish = fish.item_props.get('str_name') item_props = fish.item_props acquisition = item_props.get('acquisition') response = "You approach a man of particularly swashbuckling appearance, adorned in an old sea captain's uniform and bicorne cap, and surrounded by empty glass steins. You ask him if he is Captain Albert Alexander and he replies that he hasn’t heard that name in a long time. You submit your {} for bartering".format(name) if acquisition != ewcfg.acquisition_fishing: response += '. \n"Have you lost yer mind, laddy? That’s not a fish!! Just what’re you trying to pull??"' else: value = int(item_props['value']) items = [] # Filters out all non-generic items without the current fish as an ingredient. for result in ewcfg.appraise_results: if result.ingredients == fish.item_props.get('id_item') or result.ingredients == "generic" and result.acquisition == ewcfg.acquisition_bartering: # Generic means that it can be made with any fish. items.append(result) else: pass # Filters out items of greater value than your fish. for value_filter in items: if value < value_filter.context: items.remove(value_filter) else: pass else: offer = EwOffer( id_server = cmd.message.server.id, id_user = cmd.message.author.id, offer_give = id_fish ) cur_time_min = time.time() / 60 time_offered = cur_time_min - offer.time_sinceoffer if offer.time_sinceoffer > 0 and time_offered < ewcfg.fish_offer_timeout: offer_receive = str(offer.offer_receive) if offer_receive.isdigit() == True: slime_gain = int(offer.offer_receive) response = '\n"Well, back again I see! My offer still stands, I’ll trade ya {} slime for your {}"'.format(slime_gain, name) else: for result in ewcfg.appraise_results: if hasattr(result, 'id_item'): if result.id_item != offer.offer_receive: pass else: item = result if hasattr(result, 'id_food'): if result.id_food != offer.offer_receive: pass else: item = result if hasattr(result, 'id_cosmetic'): if result.id_cosmetic != offer.offer_receive: pass else: item = result response = '\n"Well, back again I see! My offer still stands, I’ll trade ya a {} for your {}"'.format(item.str_name, name) response += "\n**!accept** or **!refuse** Captain Albert Alexander's deal." await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) else: # Random choice between 0, 1, and 2 offer_decision = random.randint(0, 2) if offer_decision != 2: # If Captain Albert Alexander wants to offer you slime for your fish. 66% chance. max_value = value * 6000 # 600,000 slime for a colossal promo fish, 120,000 for a miniscule common fish. min_value = max_value / 10 # 60,000 slime for a colossal promo fish, 12,000 for a miniscule common fish. slime_gain = round(random.triangular(min_value, max_value, min_value * 2)) offer.offer_receive = slime_gain response = '"Hm, alright… for this {}... I’ll offer you {} slime! Trust me, you’re not going to get a better deal anywhere else, laddy."'.format(name, slime_gain) else: # If Captain Albert Alexander wants to offer you an item for your fish. 33% chance. Once there are more unique items, we'll make this 50%. item = random.choice(items) if hasattr(item, 'id_item'): offer.offer_receive = item.id_item if hasattr(item, 'id_food'): offer.offer_receive = item.id_food if hasattr(item, 'id_cosmetic'): offer.offer_receive = item.id_cosmetic response = '"Hm, alright… for this {}... I’ll offer you a {}! Trust me, you’re not going to get a better deal anywhere else, laddy."'.format(name, item.str_name) offer.time_sinceoffer = int(time.time() / 60) offer.persist() response += "\n**!accept** or **!refuse** Captain Albert Alexander's deal." await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) # Wait for an answer accepted = False try: message = await cmd.client.wait_for_message(timeout = 20, author = cmd.message.author, check = ewutils.check_accept_or_refuse) if message != None: if message.content.lower() == "!accept": accepted = True if message.content.lower() == "!refuse": accepted = False except: accepted = False offer = EwOffer( id_server = cmd.message.server.id, id_user = cmd.message.author.id, offer_give = id_fish ) user_data = EwUser(member = cmd.message.author) fish = EwItem(id_item = id_fish) # cancel deal if fish is no longer in user's inventory if fish.id_owner != user_data.id_user: accepted = False # cancel deal if the user has left the speakeasy if user_data.poi != ewcfg.poi_id_speakeasy: accepted = False # cancel deal if the offer has been deleted if offer.time_sinceoffer == 0: accepted = False if accepted == True: offer_receive = str(offer.offer_receive) response = "" if offer_receive.isdigit() == True: slime_gain = int(offer_receive) user_initial_level = user_data.slimelevel levelup_response = user_data.change_slimes(n = slime_gain, source = ewcfg.source_fishing) was_levelup = True if user_initial_level < user_data.slimelevel else False # Tell the player their slime level increased. if was_levelup: response += levelup_response response += "\n\n" else: item_props = ewitem.gen_item_props(item) ewitem.item_create( item_type = item.item_type, id_user = cmd.message.author.id, id_server = cmd.message.server.id, item_props = item_props ) ewitem.item_delete(id_item = item_sought.get('id_item')) user_data.persist() offer.deal() response += '"Pleasure doing business with you, laddy!"' else: response = '"Ah, what a shame. Maybe you’ll change your mind in the future…?"' else: if item_search: # If they didn't forget to specify an item and it just wasn't found. response = "You don't have one." else: response = "Offer Captain Albert Alexander which fish? (check **!inventory**)" await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response))
async def reroll_last_mutation(cmd): last_mutation_counter = -1 last_mutation = "" user_data = EwUser(member=cmd.message.author) market_data = EwMarket(id_server=user_data.id_server) response = "" if user_data.poi != ewcfg.poi_id_slimeoidlab: response = "You require the advanced equipment at the Slimeoid Lab to modify your mutations." return await ewutils.send_message( cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) if user_data.life_state == ewcfg.life_state_corpse: response = "How do you expect to mutate without exposure to slime, dumbass?" return await ewutils.send_message( cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) mutations = user_data.get_mutations() if len(mutations) == 0: response = "You have not developed any specialized mutations yet." return await ewutils.send_message( cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) for id_mutation in mutations: mutation_data = EwMutation(id_server=user_data.id_server, id_user=user_data.id_user, id_mutation=id_mutation) if mutation_data.mutation_counter > last_mutation_counter: last_mutation_counter = mutation_data.mutation_counter last_mutation = id_mutation poudrin = ewitem.find_item(item_search="slimepoudrin", id_user=cmd.message.author.id, id_server=cmd.message.server.id if cmd.message.server is not None else None) if poudrin == None: response = "You need a slime poudrin to replace a mutation." return await ewutils.send_message( cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) else: ewitem.item_delete(id_item=poudrin.get('id_item')) # Remove Poudrins market_data.donated_poudrins += 1 market_data.persist() user_data.poudrin_donations += 1 user_data.persist() mutation_data = EwMutation(id_server=user_data.id_server, id_user=user_data.id_user, id_mutation=last_mutation) new_mutation = random.choice(list(ewcfg.mutation_ids)) while new_mutation in mutations: new_mutation = random.choice(list(ewcfg.mutation_ids)) mutation_data.id_mutation = new_mutation mutation_data.time_lastuse = int(time.time()) mutation_data.persist() response = "After several minutes long elevator descents, in the depths of some basement level far below the laboratory's lobby, you lay down on a reclined medical chair. A SlimeCorp employee finishes the novel length terms of service they were reciting and asks you if you have any questions. You weren’t listening so you just tell them to get on with it so you can go back to getting slime. They oblige.\nThey grab a butterfly needle and carefully stab you with it, draining some strangely colored slime from your bloodstream. Almost immediately, the effects of your last mutation fade away… but, this feeling of respite is fleeting. The SlimeCorp employee writes down a few notes, files away the freshly drawn sample, and soon enough you are stabbed with syringes. This time, it’s already filled with some bizarre, multi-colored serum you’ve never seen before. The effects are instantaneous. {}\nYou hand off one of your hard-earned poudrins to the SlimeCorp employee for their troubles.".format( ewcfg.mutations_map[new_mutation].str_acquire) return await ewutils.send_message( cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response))
async def donate(cmd): user_data = EwUser(member=cmd.message.author) market_data = EwMarket(id_server=user_data.id_server) time_now = round(time.time()) if user_data.poi == ewcfg.poi_id_slimecorphq: value = None if cmd.tokens_count > 1: value = ewutils.getIntToken(tokens=cmd.tokens, allow_all=True) if value != None: if value < 0: value = user_data.slimes if value <= 0: value = None if value != None and value < ewcfg.slimecoin_exchangerate: response = "You must volunteer to donate at least %d slime to receive compensation." % ewcfg.slimecoin_exchangerate elif value != None: # Amount of slime invested. cost_total = round(value) coin_total = round(value / ewcfg.slimecoin_exchangerate) if user_data.slimes < cost_total: response = "Acid-green flashes of light and bloodcurdling screams emanate from small window of SlimeCorp HQ. Unfortunately, you did not survive the procedure. Your body is dumped down a disposal chute to the sewers." market_data.donated_slimes += user_data.slimes market_data.persist() user_data.die(cause=ewcfg.cause_donation) user_data.persist() # Assign the corpse role to the player. He dead. await ewrolemgr.updateRoles(client=cmd.client, member=cmd.message.author) sewerchannel = ewutils.get_channel(cmd.message.server, ewcfg.channel_sewers) await ewutils.send_message( cmd.client, sewerchannel, "{} ".format(ewcfg.emote_slimeskull) + ewutils.formatMessage( cmd.message.author, "You have died in a medical mishap. {}".format( ewcfg.emote_slimeskull))) else: # Do the transfer if the player can afford it. market_data.donated_slimes += cost_total market_data.persist() user_data.change_slimes(n=-cost_total, source=ewcfg.source_spending) user_data.change_slimecoin( n=coin_total, coinsource=ewcfg.coinsource_donation) user_data.slime_donations += cost_total # Persist changes user_data.persist() response = "You stumble out of a Slimecorp HQ vault room in a stupor. You don't remember what happened in there, but your body hurts and you've got {slimecoin:,} shiny new SlimeCoin in your pocket.".format( slimecoin=coin_total) else: response = ewcfg.str_exchange_specify.format(currency="slime", action="donate") elif user_data.poi == ewcfg.poi_id_slimeoidlab: poudrins = ewitem.find_item(item_search="slimepoudrin", id_user=cmd.message.author.id, id_server=cmd.message.server.id if cmd.message.server is not None else None) if poudrins == None: response = "You have to own a poudrin in order to donate a poudrin. Duh." else: ewitem.item_delete( id_item=poudrins.get('id_item')) # Remove Poudrins market_data.donated_poudrins += 1 market_data.persist() user_data.poudrin_donations += 1 user_data.persist() response = "You hand off one of your hard-earned poudrins to the front desk receptionist, who is all too happy to collect it. Pretty uneventful, but at the very least you’re glad donating isn’t physically painful anymore." else: response = "To donate slime, go to the SlimeCorp HQ in Downtown. To donate poudrins, go to the SlimeCorp Lab in Brawlden." # Send the response to the player. await ewutils.send_message( cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response))
async def read_book(cmd = None, dm = False): user_data = EwUser(member=cmd.message.author) if not dm: response = "ENDLESS WAR politely asks that you !read in his DMs." elif len(cmd.tokens) < 2: response = "What zine do you want to read?" else: if len(cmd.tokens) < 3: book_title = ewutils.flattenTokenListToString(cmd.tokens) page_number = 0 else: book_title = ewutils.flattenTokenListToString(cmd.tokens[1:len(cmd.tokens) - 1]) page_number = ewutils.getIntToken(cmd.tokens) book_sought = ewitem.find_item(item_search=book_title, id_user=cmd.message.author.id, id_server=cmd.message.server.id if cmd.message.server is not None else None, item_type_filter = ewcfg.it_book) if book_sought: book = EwItem(id_item = book_sought.get('id_item')) id_book = book.item_props.get("id_book") book = EwBook(id_book=id_book) if page_number not in range(0, book.pages+1): page_number = 0 accepted = True if book.genre == 3: accepted = False response = "ENDLESS WAR sees you about to open up a p**n zine and wants to make sure you're 18 years or older. Use **!accept** to open or **!refuse** to abstain." await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) try: message = await cmd.client.wait_for_message(timeout=20, author=cmd.message.author, check=check) if message != None: if message.content.lower() == "!accept": accepted = True if message.content.lower() == "!refuse": accepted = False except: accepted = False if book.book_state < 0: response = "You simply can't make out the letters on the page. Maybe it's better this way." elif accepted: page_contents = get_page(id_book, page_number) if page_number == 0 and page_contents == "": page_contents = get_page(id_book, 1) page_text = "turn to page {}".format(page_number) if page_number == 0: page_text = "look at the cover" response = "You {} and begin to read.\n\n\"{} \"".format(page_text, page_contents) readers[user_data.id_user] = (id_book, page_number) if page_contents == "": response = "You open up to page {} only to find that it's blank!".format(page_number) if page_number != 0: response += "\n\nUse **!previouspage** to go back one page." if page_number != book.pages: response += "\n\nUse **!nextpage** to go forward one page." else: response = "You decide not to indulge yourself." else: response = "You don't have that zine. Make sure you use **!read [zine title] [page]**" await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response))
async def rate_zine(cmd): if len(cmd.tokens) < 2: response = "What zine do you want to rate?" else: if len(cmd.tokens) >= 3: rating = ewutils.getIntToken(cmd.tokens) book_title = ewutils.flattenTokenListToString(cmd.tokens[1:len(cmd.tokens) - 1]) if rating == None: response = "How many f***s do you want to give the zine? (1-5)" elif rating not in range(1, 6): response = "Easy now, keep your f***s between 1 and 5." else: book_sought = ewitem.find_item(item_search=book_title, id_user=cmd.message.author.id, id_server=cmd.message.server.id if cmd.message.server is not None else None) if book_sought: book_item = EwItem(id_item=book_sought.get('id_item')) id_book = book_item.item_props.get("id_book") book = EwBook(id_book = id_book) sale = EwBookSale(id_book = id_book, member = cmd.message.author) if sale.bought == 1: if sale.rating == 0: book.rates += 1 sale.rating = rating sale.persist() try: conn_info = ewutils.databaseConnect() conn = conn_info.get('conn') cursor = conn.cursor() cursor.execute(( "SELECT {} FROM book_sales WHERE {} = %s AND {} = %s AND {} != 0".format( ewcfg.col_rating, ewcfg.col_id_server, ewcfg.col_id_user, ewcfg.col_rating, ) ), ( cmd.message.server.id, cmd.message.author.id, )) data = cursor.fetchall() ratings = [] total_rating = 0 if data != None: for row in data: ratings.append(row) total_rating += row[0] finally: # Clean up the database handles. cursor.close() ewutils.databaseClose(conn_info) book.rating = str(total_rating / len(ratings))[:4] # zine is excluded from normal browsing if book.book_state == 1: if book.rates >= 10 and float(book.rating) <= 2.0: book.book_state = 2 elif book.rates >= 4 and float(book.rating) <= 1.5: book.book_state = 2 # zine is included back into normal browsing elif book.book_state == 2: if float(book.rating) > 2.0 and book.rates > 10: book.book_state = 1 elif float(book.rating) > 1.5 and book.rates > 5: book.book_state = 1 book.persist() response = "{}, you carve a {} into the back of the zine in order to indicate how many f***s you give about it.".format(ewcfg.rating_flavor[rating], rating) else: response = "You've never bought this book." else: response = "You don't have that zine on you." else: response = "How many f***s do you want to give the zine? (1-5)" await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response))
async def cast(cmd): time_now = round(time.time()) has_reeled = False user_data = EwUser(member = cmd.message.author) market_data = EwMarket(id_server = cmd.message.author.server.id) statuses = user_data.getStatusEffects() if cmd.message.author.id not in fishers.keys(): fishers[cmd.message.author.id] = EwFisher() fisher = fishers[cmd.message.author.id] # Ghosts cannot fish. if user_data.life_state == ewcfg.life_state_corpse: response = "You can't fish while you're dead. Try {}.".format(ewcfg.cmd_revive) # Players who are already cast a line cannot cast another one. elif fisher.fishing == True: response = "You've already cast a line." # Only fish at The Pier elif cmd.message.channel.name in [ewcfg.channel_tt_pier, ewcfg.channel_jp_pier, ewcfg.channel_cl_pier, ewcfg.channel_afb_pier, ewcfg.channel_vc_pier, ewcfg.channel_se_pier, ewcfg.channel_ferry]: if user_data.hunger >= ewutils.hunger_max_bylevel(user_data.slimelevel): response = "You're too hungry to fish right now." else: has_fishingrod = False if user_data.weapon >= 0: weapon_item = EwItem(id_item = user_data.weapon) weapon = ewcfg.weapon_map.get(weapon_item.item_props.get("weapon_type")) if weapon.id_weapon == "fishingrod": has_fishingrod = True if ewcfg.status_high_id in statuses: fisher.high = True fisher.current_fish = gen_fish(market_data, cmd, has_fishingrod) fisher.fishing = True fisher.bait = False fisher.pier = user_data.poi item_search = ewutils.flattenTokenListToString(cmd.tokens[1:]) author = cmd.message.author server = cmd.message.server item_sought = ewitem.find_item(item_search = item_search, id_user = author.id, id_server = server.id) if item_sought: item = EwItem(id_item = item_sought.get('id_item')) if item.item_type == ewcfg.it_food: str_name = item.item_props['food_name'] id_food = item.item_props.get('id_food') fisher.bait = True if id_food in ewcfg.plebe_bait: fisher.current_fish = "plebefish" elif id_food == "doublestuffedcrust": if random.randrange(5) == 3: fisher.current_fish = "doublestuffedflounder" elif id_food in ["chickenbucket", "familymeal"]: if random.randrange(5) == 3: fisher.current_fish = "seacolonel" elif id_food in ["steakvolcanoquesomachorito", "nachosupreme"]: if random.randrange(5) == 3: fisher.current_fish = "marlinsupreme" elif id_food in ["blacklimes", "blacklimesour"]: if random.randrange(2) == 1: fisher.current_fish = "blacklimesalmon" elif id_food in ["pinkrowddishes", "pinkrowdatouille"]: if random.randrange(2) == 1: fisher.current_fish = "thrash" elif id_food in ["purplekilliflowercrustpizza", "purplekilliflower"]: if random.randrange(2) == 1: fisher.current_fish = "dab" elif id_food == "kingpincrab": if random.randrange(5) == 1: fisher.current_fish = "uncookedkingpincrab" elif float(item.time_expir if item.time_expir is not None else 0) < time.time(): if random.randrange(2) == 1: fisher.current_fish = "plebefish" ewitem.item_delete(item_sought.get('id_item')) if fisher.current_fish == "item": fisher.current_size = "item" else: fisher.current_size = gen_fish_size(has_fishingrod) if fisher.bait == False: response = "You cast your fishing line into the " else: response = "You attach your {} to the hook as bait and then cast your fishing line into the ".format(str_name) if cmd.message.channel.name in [ewcfg.channel_afb_pier, ewcfg.channel_vc_pier, ewcfg.channel_se_pier, ewcfg.channel_ferry]: response += "vast Slime Sea." else: response += "glowing Slime Lake." user_data.hunger += ewcfg.hunger_perfish * ewutils.hunger_cost_mod(user_data.slimelevel) user_data.persist() await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) bite_text = gen_bite_text(fisher.current_size) # User has a 1/10 chance to get a bite fun = 100 if fisher.bait == True: # Bait attatched, user has a 1/7 chance to get a bite fun = 70 bun = 0 while not ewutils.TERMINATE: if fun <= 0: fun = 1 else: damp = random.randrange(fun) if not fisher.high: await asyncio.sleep(60) else: await asyncio.sleep(30) user_data = EwUser(member=cmd.message.author) if user_data.poi != fisher.pier: fisher.fishing = False return if user_data.life_state == ewcfg.life_state_corpse: fisher.fishing = False return if fisher.fishing == False: return if damp > 10: await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, random.choice(ewcfg.nobite_text))) fun -= 2 bun += 1 if bun >= 5: fun -= 1 if bun >= 15: fun -= 1 continue else: break fisher.bite = True await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, bite_text)) await asyncio.sleep(8) if fisher.bite != False: fisher.fishing = False fisher.bite = False fisher.current_fish = "" fisher.current_size = "" fisher.bait = False return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, "The fish got away...")) else: has_reeled = True else: response = "You can't fish here. Go to a pier." # Don't send out a response if the user actually reeled in a fish, since that gets sent by the reel command instead. if has_reeled == False: await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response))
async def sow(cmd): user_data = EwUser(member = cmd.message.author) if user_data.life_state == ewcfg.life_state_shambler: response = "You lack the higher brain functions required to {}.".format(cmd.tokens[0]) return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) # check if the user has a farming tool equipped weapon_item = EwItem(id_item=user_data.weapon) weapon = ewcfg.weapon_map.get(weapon_item.item_props.get("weapon_type")) has_tool = False if weapon is not None: if ewcfg.weapon_class_farming in weapon.classes: has_tool = True # Checking availability of sow action if user_data.life_state != ewcfg.life_state_juvenile and not has_tool: response = "Only Juveniles of pure heart and with nothing better to do can farm." elif cmd.message.channel.name not in [ewcfg.channel_jr_farms, ewcfg.channel_og_farms, ewcfg.channel_ab_farms]: response = "The cracked, filthy concrete streets around you would be a pretty terrible place for a farm. Try again on more arable land." else: poi = ewcfg.id_to_poi.get(user_data.poi) district_data = EwDistrict(district = poi.id_poi, id_server = user_data.id_server) if district_data.is_degraded(): response = "{} has been degraded by shamblers. You can't {} here anymore.".format(poi.str_name, cmd.tokens[0]) return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) if user_data.poi == ewcfg.poi_id_jr_farms: farm_id = ewcfg.poi_id_jr_farms elif user_data.poi == ewcfg.poi_id_og_farms: farm_id = ewcfg.poi_id_og_farms else: # if it's the farm in arsonbrook farm_id = ewcfg.poi_id_ab_farms farm = EwFarm( id_server = cmd.guild.id, id_user = cmd.message.author.id, farm = farm_id ) if farm.time_lastsow > 0: response = "You’ve already sown something here. Try planting in another farming location. If you’ve planted in all three farming locations, you’re shit out of luck. Just wait, asshole." else: it_type_filter = None # gangsters can only plant poudrins if cmd.tokens_count > 1 and user_data.life_state == ewcfg.life_state_juvenile: item_search = ewutils.flattenTokenListToString(cmd.tokens[1:]) # if the item selected was a vegetable, use a food only filter in find_item for v in ewcfg.vegetable_list: if item_search in v.id_food or item_search in v.str_name: it_type_filter = ewcfg.it_food break else: item_search = "slimepoudrin" item_sought = ewitem.find_item(item_search = item_search, id_user = cmd.message.author.id, id_server = cmd.guild.id if cmd.guild is not None else None, item_type_filter = it_type_filter) if item_sought == None: response = "You don't have anything to plant! Try collecting a poudrin." else: slimes_onreap = ewcfg.reap_gain item_data = EwItem(id_item = item_sought.get("id_item")) if item_data.item_type == ewcfg.it_item: if item_data.item_props.get("id_item") == ewcfg.item_id_slimepoudrin: vegetable = random.choice(ewcfg.vegetable_list) slimes_onreap *= 2 elif item_data.item_props.get("context") == ewcfg.context_slimeoidheart: vegetable = random.choice(ewcfg.vegetable_list) slimes_onreap *= 2 slimeoid_data = EwSlimeoid(id_slimeoid = item_data.item_props.get("subcontext")) slimeoid_data.delete() else: response = "The soil has enough toxins without you burying your trash here." return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) elif item_data.item_type == ewcfg.it_food: food_id = item_data.item_props.get("id_food") vegetable = ewcfg.food_map.get(food_id) if ewcfg.vendor_farm not in vegetable.vendors: response = "It sure would be nice if {}s grew on trees, but alas they do not. Idiot.".format(item_sought.get("name")) return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) elif user_data.life_state != ewcfg.life_state_juvenile: response = "You lack the knowledge required to grow {}.".format(item_sought.get("name")) return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) else: response = "The soil has enough toxins without you burying your trash here." return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) mutations = user_data.get_mutations() growth_time = ewcfg.crops_time_to_grow if user_data.life_state == ewcfg.life_state_juvenile: growth_time /= 2 if ewcfg.mutation_id_greenfingers in mutations: growth_time /= 1.5 hours = int(growth_time / 60) minutes = int(growth_time % 60) str_growth_time = "{} hour{}{}".format(hours, "s" if hours > 1 else "", " and {} minutes".format(minutes) if minutes > 0 else "") # Sowing response = "You sow a {} into the fertile soil beneath you. It will grow in about {}.".format(item_sought.get("name"), str_growth_time) farm.time_lastsow = int(time.time() / 60) # Grow time is stored in minutes. farm.time_lastphase = int(time.time()) farm.slimes_onreap = slimes_onreap farm.crop = vegetable.id_food farm.phase = ewcfg.farm_phase_sow farm.action_required = ewcfg.farm_action_none farm.sow_life_state = user_data.life_state ewitem.item_delete(id_item = item_sought.get('id_item')) # Remove Poudrins farm.persist() await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response))
async def appraise(cmd): user_data = EwUser(member = cmd.message.author) market_data = EwMarket(id_server = user_data.id_server) item_search = ewutils.flattenTokenListToString(cmd.tokens[1:]) item_sought = ewitem.find_item(item_search = item_search, id_user = cmd.message.author.id, id_server = cmd.message.server.id if cmd.message.server is not None else None) payment = ewitem.find_item(item_search = "manhattanproject", id_user = cmd.message.author.id, id_server = cmd.message.server.id if cmd.message.server is not None else None) # Checking availability of appraisal #if market_data.clock < 8 or market_data.clock > 17: # response = "You ask the bartender if he knows someone who would want to trade you something for your recently caught fish. Apparently, at night, an old commodore by the name of Captain Albert Alexander comes to drown his sorrows at this very tavern. You guess you’ll just have to sit here and wait for him, then." if cmd.message.channel.name != ewcfg.channel_speakeasy: if cmd.message.channel.name in [ewcfg.channel_tt_pier, ewcfg.channel_jp_pier, ewcfg.channel_cl_pier, ewcfg.channel_afb_pier, ewcfg.channel_vc_pier, ewcfg.channel_se_pier, ewcfg.channel_ferry]: response = 'You ask a nearby fisherman if he could appraise this fish you just caught. He tells you to f**k off, but also helpfully informs you that there’s an old sea captain that frequents the Speakeasy that might be able to help you. What an inexplicably helpful/grouchy fisherman!' else: response = 'What random passerby is going to give two shits about your fish? You’ll have to consult a fellow fisherman… perhaps you’ll find some on a pier?' elif item_sought: name = item_sought.get('name') fish = EwItem(id_item = item_sought.get('id_item')) item_props = fish.item_props # str_fish = fish.item_props.get('str_name') # id_fish = item_props['id_food'] acquisition = item_props.get('acquisition') response = "You approach a man of particularly swashbuckling appearance, adorned in an old sea captain's uniform and bicorne cap, and surrounded by empty glass steins. You ask him if he is Captain Albert Alexander and he replies that he hasn’t heard that name in a long time. You submit your {} for appraisal".format(name) if acquisition != ewcfg.acquisition_fishing: response += '. \n"Have you lost yer mind, laddy? That’s not a fish!! Just what’re you trying to pull??"'.format(name) else: if payment == None: response += ", but he says he won’t provide his services for free... but, if you bring him a Manhattan Project, you might be able to get an appraisal." else: item_props = fish.item_props rarity = item_props['rarity'] size = item_props['size'] value = int(item_props['value']) response += ' and offer him a Manhattan Project as payment. \n"Hm, alright, let’s see here...' if rarity == ewcfg.fish_rarity_common: response += "Ah, a {}, that’s a pretty common fish... ".format(name) if rarity == ewcfg.fish_rarity_uncommon: response += "Interesting, a {}, that’s a pretty uncommon fish you’ve got there... ".format(name) if rarity == ewcfg.fish_rarity_rare: response += "Amazing, it’s a {}! Consider yourself lucky, that’s a pretty rare fish! ".format(name) if rarity == ewcfg.fish_rarity_promo: response += "Shiver me timbers, is that a {}?? Unbelievable, that’s an extremely rare fish!! It was only ever released as a promotional item in Japan during the late ‘90s. ".format(name) if size == ewcfg.fish_size_miniscule: response += "Or, is it just a speck of dust? Seriously, that {} is downright miniscule! ".format(name) if size == ewcfg.fish_size_small: response += "Hmmm, it’s a little small, don’t you think? " if size == ewcfg.fish_size_average: response += "It’s an average size for the species. " if size == ewcfg.fish_size_big: response += "Whoa, that’s a big one, too! " if size == ewcfg.fish_size_huge: response += "Look at the size of that thing, it’s huge! " if size == ewcfg.fish_size_colossal: response += "By Neptune’s beard, what a sight to behold, this {name} is absolutely colossal!! In all my years in the Navy, I don’t think I’ve ever seen a {name} as big as yours!! ".format(name = name) response += "So, I’d say this fish " if value <= 20: response += 'is absolutely worthless."' if value <= 40 and value >= 21: response += 'isn’t worth very much."' if value <= 60 and value >= 41: response += 'is somewhat valuable."' if value <= 80 and value >= 61: response += 'is highly valuable!"' if value <= 99 and value >= 81: response += 'is worth a fortune!!"' if value >= 100: response += 'is the most magnificent specimen I’ve ever seen!"' ewitem.item_delete(id_item = payment.get('id_item')) user_data.persist() else: if item_search: # If they didn't forget to specify an item and it just wasn't found. response = "You don't have one." else: response = "Ask Captain Albert Alexander to appraise which fish? (check **!inventory**)" await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response))
async def mill(cmd): user_data = EwUser(member = cmd.message.author) if user_data.life_state == ewcfg.life_state_shambler: response = "You lack the higher brain functions required to {}.".format(cmd.tokens[0]) return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) market_data = EwMarket(id_server = user_data.id_server) item_search = ewutils.flattenTokenListToString(cmd.tokens[1:]) item_sought = ewitem.find_item(item_search = item_search, id_user = cmd.message.author.id, id_server = cmd.guild.id if cmd.guild is not None else None, item_type_filter=ewcfg.it_food) # Checking availability of milling if user_data.life_state != ewcfg.life_state_juvenile: response = "Only Juveniles of pure heart and with nothing better to do can mill their vegetables." elif cmd.message.channel.name not in [ewcfg.channel_jr_farms, ewcfg.channel_og_farms, ewcfg.channel_ab_farms]: response = "Alas, there doesn’t seem to be an official SlimeCorp milling station anywhere around here. Probably because you’re in the middle of the f*****g city. Try looking where you reaped your vegetable in the first place, dumbass." # elif user_data.slimes < ewcfg.slimes_permill: # response = "It costs {} to !mill, and you only have {}.".format(ewcfg.slimes_permill, user_data.slimes) elif item_sought: poi = ewcfg.id_to_poi.get(user_data.poi) district_data = EwDistrict(district = poi.id_poi, id_server = user_data.id_server) if district_data.is_degraded(): response = "{} has been degraded by shamblers. You can't {} here anymore.".format(poi.str_name, cmd.tokens[0]) return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) items = [] vegetable = EwItem(id_item = item_sought.get('id_item')) for result in ewcfg.mill_results: if type(result.ingredients) == str: if vegetable.item_props.get('id_food') != result.ingredients: pass else: items.append(result) elif type(result.ingredients) == list: if vegetable.item_props.get('id_food') not in result.ingredients: pass else: items.append(result) if len(items) > 0: item = random.choice(items) item_props = ewitem.gen_item_props(item) ewitem.item_create( item_type = item.item_type, id_user = cmd.message.author.id, id_server = cmd.guild.id, item_props = item_props ) response = "You walk up to the official ~~SlimeCorp~~ Garden Gankers Milling Station and shove your irradiated produce into the hand-crank. You begin slowly churning them into a glorious, pastry goo. As the goo tosses and turns inside the machine, it solidifies, and after a few moments a {} pops out!".format(item.str_name) #market_data.donated_slimes += ewcfg.slimes_permill market_data.persist() ewitem.item_delete(id_item = item_sought.get('id_item')) #user_data.change_slimes(n = -ewcfg.slimes_permill, source = ewcfg.source_spending) #user_data.slime_donations += ewcfg.slimes_permill user_data.persist() else: response = "You can only mill fresh vegetables! SlimeCorp obviously wants you to support local farmers." else: if item_search: # if they didn't forget to specify an item and it just wasn't found response = "You don't have one." else: response = "Mill which item? (check **!inventory**)" await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response))
async def devour(cmd): user_data = EwUser(member=cmd.message.author) item_search = ewutils.flattenTokenListToString(cmd.tokens[1:]) item_sought = ewitem.find_item(id_server=cmd.message.guild.id, id_user=cmd.message.author.id, item_search=item_search) mutations = user_data.get_mutations() if ewcfg.mutation_id_trashmouth not in mutations: response = "Wait, what? Quit trying to put everything in your mouth." elif item_sought: item_obj = EwItem(id_item=item_sought.get('id_item')) if (item_obj.item_type not in [ewcfg.it_cosmetic, ewcfg.it_furniture, ewcfg.it_food] and item_obj.item_props.get('id_item') != 'slimepoudrin' ) or item_obj.item_props.get('id_cosmetic') == 'soul': response = "You swallow the {} whole, but after realizing this might be a mistake, you cough it back up.".format( item_sought.get('name')) elif item_obj.soulbound == True: response = "You attempt to consume the {}, but you realize it's soulbound and that you were about to eat your own existnece. Your life flashes before your eyes, so you decide to stop.".format( item_sought.get('name')) else: str_eat = "You unhinge your gaping maw and shove the {} right down, no chewing or anything. It's about as nutritious as you'd expect.".format( item_sought.get('name')) if item_obj.item_type == ewcfg.it_cosmetic: recover_hunger = 100 elif item_obj.item_type == ewcfg.it_furniture: furn = ewcfg.furniture_map.get( item_obj.item_props.get('id_furniture')) if furn.acquisition != ewcfg.acquisition_bazaar: recover_hunger = 100 elif furn.price < 500: recover_hunger = 0 elif furn.price < 5000: recover_hunger = 50 elif furn.price < 1000000: recover_hunger = 320 else: recover_hunger = 16000 elif item_obj.item_type == ewcfg.it_food: if item_obj.item_props.get('perishable') != None: perishable_status = item_obj.item_props.get('perishable') if perishable_status == 'true' or perishable_status == '1': item_is_non_perishable = False else: item_is_non_perishable = True else: item_is_non_perishable = False user_has_spoiled_appetite = ewcfg.mutation_id_spoiledappetite in mutations item_has_expired = float(getattr(item_obj, "time_expir", 0)) < time.time() if item_has_expired and not (user_has_spoiled_appetite or item_is_non_perishable): response = "You realize that the food you were trying to eat is already spoiled. Ugh, not eating that." return await ewutils.send_message( cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) # ewitem.item_drop(food_item.id_item) recover_hunger = item_obj.item_props.get('recover_hunger') else: recover_hunger = 100 item_obj.item_props = { 'id_food': "convertedfood", 'food_name': "", 'food_desc': "", 'recover_hunger': recover_hunger, 'inebriation': 0, 'str_eat': str_eat, 'time_expir': time.time() + ewcfg.std_food_expir, 'time_fridged': 0, 'perishable': True, } response = user_data.eat(item_obj) user_data.persist() elif item_search == "": response = "Devour what?" else: response = "Are you sure you have that item?" return await ewutils.send_message( cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response))
async def sow(cmd): user_data = EwUser(member=cmd.message.author) # Checking availability of sow action if user_data.life_state != ewcfg.life_state_juvenile: response = "Only Juveniles of pure heart and with nothing better to do can farm." elif user_data.poi not in [ ewcfg.poi_id_jr_farms, ewcfg.poi_id_og_farms, ewcfg.poi_id_ab_farms ]: response = "The cracked, filthy concrete streets around you would be a pretty terrible place for a farm. Try again on more arable land." else: if user_data.poi == ewcfg.poi_id_jr_farms: farm_id = ewcfg.poi_id_jr_farms elif user_data.poi == ewcfg.poi_id_og_farms: farm_id = ewcfg.poi_id_og_farms else: # if it's the farm in arsonbrook farm_id = ewcfg.poi_id_ab_farms farm = EwFarm(id_server=cmd.message.server.id, id_user=cmd.message.author.id, farm=farm_id) if farm.time_lastsow > 0: response = "You’ve already sown something here. Try planting in another farming location. If you’ve planted in all three farming locations, you’re shit out of luck. Just wait, asshole." else: if cmd.tokens_count > 1: item_search = ewutils.flattenTokenListToString(cmd.tokens[1:]) else: item_search = "slimepoudrin" item_sought = ewitem.find_item( item_search=item_search, id_user=cmd.message.author.id, id_server=cmd.message.server.id if cmd.message.server is not None else None) if item_sought == None: response = "You don't have anything to plant! Try collecting a poudrin." else: slimes_onreap = ewcfg.reap_gain item_data = EwItem(id_item=item_sought.get("id_item")) if item_data.item_type == ewcfg.it_item: if item_data.item_props.get( "id_item") == ewcfg.item_id_slimepoudrin: vegetable = random.choice(ewcfg.vegetable_list) slimes_onreap *= 2 elif item_data.item_props.get( "context") == ewcfg.context_slimeoidheart: vegetable = random.choice(ewcfg.vegetable_list) slimes_onreap *= 2 slimeoid_data = EwSlimeoid( id_slimeoid=item_data.item_props.get("subcontext")) slimeoid_data.delete() else: response = "The soil has enough toxins without you burying your trash here." return await ewutils.send_message( cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) elif item_data.item_type == ewcfg.it_food: food_id = item_data.item_props.get("id_food") vegetable = ewcfg.food_map.get(food_id) if ewcfg.vendor_farm not in vegetable.vendors: response = "It sure would be nice if {}s grew on trees, but alas they do not. Idiot.".format( item_sought.get("name")) return await ewutils.send_message( cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) else: response = "The soil has enough toxins without you burying your trash here." return await ewutils.send_message( cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) # Sowing response = "You sow a {} into the fertile soil beneath you. It will grow in about 3 hours.".format( item_sought.get("name")) farm.time_lastsow = int(time.time() / 60) # Grow time is stored in minutes. farm.time_lastphase = int(time.time()) farm.slimes_onreap = slimes_onreap farm.crop = vegetable.id_food farm.phase = ewcfg.farm_phase_sow farm.action_required = ewcfg.farm_action_none ewitem.item_delete( id_item=item_sought.get('id_item')) # Remove Poudrins farm.persist() await ewutils.send_message( cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response))
async def preserve(cmd): user_data = EwUser(member=cmd.message.author) mutations = user_data.get_mutations() item_search = ewutils.flattenTokenListToString(cmd.tokens[1:]) item_sought = ewitem.find_item( item_search=item_search, id_user=cmd.message.author.id, id_server=cmd.guild.id if cmd.guild is not None else None) if item_sought: item_obj = ewitem.EwItem(id_item=item_sought.get('id_item')) if item_obj.item_props.get('preserved') == None: preserve_id = 0 else: preserve_id = int(item_obj.item_props.get('preserved')) if ewcfg.mutation_id_rigormortis not in mutations: response = "You can't just preserve something by saying you're going to. Everything ends eventually." return await ewutils.send_message( cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) elif item_obj.soulbound == True: response = "This thing's bound to your soul. There's no need to preserve it twice." return await ewutils.send_message( cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) elif preserve_id == int(user_data.id_user): response = "Didn't you already preserve this? You're so paranoid." return await ewutils.send_message( cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) elif item_obj.item_props.get('preserved') == "nopreserve": response = "You shove it into your body but it just won't fit for some reason. That phrasing was completely intentional, by the way." return await ewutils.send_message( cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) else: rigor = EwMutation(id_user=cmd.message.author.id, id_server=cmd.message.guild.id, id_mutation=ewcfg.mutation_id_rigormortis) if rigor.data.isdigit() == False: num = 0 else: num = int(rigor.data) if num >= 5: response = "Your body's dried up, it's lost its ability to preserve objects." else: response = "You take the {} and embrace it with all your might. As you squeeze, it slowly but surely begins to phase inside your body. That won't get stolen anytime soon!".format( item_sought.get('name')) num += 1 rigor.data = str(num) item_obj.item_props['preserved'] = user_data.id_user rigor.persist() item_obj.persist() return await ewutils.send_message( cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) else: response = "Preserve what?" return await ewutils.send_message( cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response))
async def embiggen(cmd): user_data = EwUser(member = cmd.message.author) if user_data.life_state == ewcfg.life_state_shambler: response = "You lack the higher brain functions required to {}.".format(cmd.tokens[0]) return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) market_data = EwMarket(id_server = user_data.id_server) item_search = ewutils.flattenTokenListToString(cmd.tokens[1:]) item_sought = ewitem.find_item(item_search = item_search, id_user = cmd.message.author.id, id_server = cmd.guild.id if cmd.guild is not None else None) if cmd.message.channel.name != ewcfg.channel_slimeoidlab: response = "How are you going to embiggen your fish on the side of the street? You’ve got to see a professional for this, man. Head to the SlimeCorp Laboratory, they’ve got dozens of modern day magic potions ‘n shit over there." elif item_sought: poi = ewcfg.id_to_poi.get(user_data.poi) district_data = EwDistrict(district = poi.id_poi, id_server = user_data.id_server) if district_data.is_degraded(): response = "{} has been degraded by shamblers. You can't {} here anymore.".format(poi.str_name, cmd.tokens[0]) return await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response)) name = item_sought.get('name') fish = EwItem(id_item = item_sought.get('id_item')) acquisition = fish.item_props.get('acquisition') if fish.item_props.get('id_furniture') == "singingfishplaque": poudrins_owned = ewitem.find_item_all(item_search="slimepoudrin", id_user=user_data.id_user, id_server=user_data.id_server, item_type_filter=ewcfg.it_item) poudrin_amount = len(poudrins_owned) if poudrin_amount < 2: response = "You don't have the poudrins for it." else: for delete in range(2): poudrin = poudrins_owned.pop() ewitem.item_delete(id_item = poudrin.get("id_item")) fish.item_props['id_furniture'] = "colossalsingingfishplaque" fish.item_props['furniture_look_desc'] = "There's a fake fish mounted on the wall. Hoo boy, it's a whopper." fish.item_props['furniture_place_desc'] = "You take a nail gun to the wall to force it to hold this fish. Christ, this thing is your f*****g Ishmael. Er, Moby Dick. Whatever." fish.item_props['furniture_name'] = "colossal singing fish plaque" fish.item_props['furniture_desc'] = "You press the button on your gigantic plaque.\n***" + fish.item_props.get('furniture_desc')[38:-87].upper().replace(":NOTES:", ":notes:") + "***\nYou abruptly turn the fish off before you rupture an eardrum." fish.persist() response = "The elevator ride down to the embiggening ward feels like an eterninty. Are they going to find out the fish you're embiggening is fake? God, you hope not. But eventually, you make it down, and place the plaque in the usual reclined surgeon's chair. A stray spark from one of the defibrilators nearly gives you a heart attack. But even so, the embiggening process begins like usual. You sign the contract, and they take a butterfly needle to your beloved wall prop. And sure enough, it begins to grow. You hear the sounds of cracked plastic and grinding electronics, and catch a whiff of burnt wires. It's growing. It's 6 feet, no, 10 feet long. Good god. You were hoping for growth, but science has gone too far. Eventually, it stops. Although you raise a few eyebrows with ths anomaly, you still get back the colossal fish plaque without a hitch." elif acquisition != ewcfg.acquisition_fishing: response = "You can only embiggen fishes, dummy. Otherwise everyone would be walking around with colossal nunchucks and huge chicken buckets. Actually, that gives me an idea..." else: size = fish.item_props.get('size') poudrin_cost = 0 if size == ewcfg.fish_size_miniscule: poudrin_cost = 2 if size == ewcfg.fish_size_small: poudrin_cost = 4 if size == ewcfg.fish_size_average: poudrin_cost = 8 if size == ewcfg.fish_size_big: poudrin_cost = 16 if size == ewcfg.fish_size_huge: poudrin_cost = 32 poudrins_owned = ewitem.find_item_all(item_search = "slimepoudrin", id_user = user_data.id_user, id_server = user_data.id_server, item_type_filter = ewcfg.it_item) poudrin_amount = len(poudrins_owned) if poudrin_cost == 0: response = "Your {} is already as colossal as a fish can get!".format(name) elif poudrin_amount < poudrin_cost: response = "You need {} poudrins to embiggen your {}, but you only have {}!!".format(poudrin_cost, name, poudrin_amount) else: if size == ewcfg.fish_size_miniscule: fish.item_props['size'] = ewcfg.fish_size_small if size == ewcfg.fish_size_small: fish.item_props['size'] = ewcfg.fish_size_average if size == ewcfg.fish_size_average: fish.item_props['size'] = ewcfg.fish_size_big if size == ewcfg.fish_size_big: fish.item_props['size'] = ewcfg.fish_size_huge if size == ewcfg.fish_size_huge: fish.item_props['size'] = ewcfg.fish_size_colossal fish.persist() for delete in range(poudrin_cost): poudrin = poudrins_owned.pop() ewitem.item_delete(id_item = poudrin.get("id_item")) market_data.donated_poudrins += poudrin_cost market_data.persist() user_data.poudrin_donations += poudrin_cost user_data.persist() response = "After several minutes long elevator descents, in the depths of some basement level far below the laboratory's lobby, you lay down your {} on a reclined medical chair. A SlimeCorp employee finishes the novel length terms of service they were reciting and asks you if you have any questions. You weren’t listening so you just tell them to get on with it so you can go back to haggling prices with Captain Albert Alexander. They oblige.\nThey grab a butterfly needle and carefully stab your fish with it, injecting filled with some bizarre, multi-colored serum you’ve never seen before. Sick, it’s bigger now!!".format(name) else: if item_search: # If they didn't forget to specify an item and it just wasn't found. response = "You don't have one." else: response = "Embiggen which fish? (check **!inventory**)" await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response))