async def xfer(cmd): time_now = round(time.time()) 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 fe_utils.send_message(cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, response)) if cmd.message.channel.name != ewcfg.channel_stockexchange: # Only allowed in the stock exchange. response = ewcfg.str_exchange_channelreq.format(currency="SlimeCoin", action="transfer") return await fe_utils.send_message(cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, response)) poi = poi_static.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 fe_utils.send_message(cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, response)) if cmd.mentions_count != 1: # Must have exactly one target to send to. response = "Mention the player you want to send SlimeCoin to." return await fe_utils.send_message(cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, response)) if user_data.time_lastinvest + ewcfg.cd_invest > time_now: # Limit frequency of transfers response = ewcfg.str_exchange_busy.format(action="transfer slimecoin") return await fe_utils.send_message(cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, response)) if user_data.life_state == ewcfg.life_state_corpse: # Disallow transfers from ghosts. response = "Your slimebroker can't confirm your identity while you're dead." return await fe_utils.send_message(cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, response)) member = cmd.mentions[0] target_data = EwUser(member=member) if target_data.life_state == ewcfg.life_state_kingpin: # Disallow transfers to RF and CK kingpins. response = "You can't transfer SlimeCoin to a known criminal warlord." return await fe_utils.send_message(cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, response)) market_data = EwMarket(id_server=cmd.message.author.guild.id) if cmd.message.author.id == member.id: slimes_total = user_data.slimes slimes_drained = int(slimes_total * 0.1) slimes_todistrict = slimes_total - slimes_drained sewer_data = EwDistrict(district=ewcfg.poi_id_thesewers, id_server=user_data.id_server) sewer_data.change_slimes(n=slimes_drained) sewer_data.persist() district_data = EwDistrict(district=user_data.poi, id_server=cmd.guild.id) district_data.change_slimes(n=slimes_todistrict, source=ewcfg.source_killing) district_data.persist() # Set the id_killer to the player himself, remove his slime and slime poudrins. user_data.id_killer = cmd.message.author.id user_data.visiting = ewcfg.location_id_empty user_data.trauma = ewcfg.trauma_id_environment user_data.die(cause=ewcfg.cause_suicide) user_data.persist() await fe_utils.send_message(cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, "Gaming the slimeconomy is punishable by death. SlimeCorp soldiers execute you immediately.")) await ewrolemgr.updateRoles(client=cmd.client, member=cmd.message.author) return # Parse the slime value to send. value = None if cmd.tokens_count > 1: value = ewutils.getIntToken(tokens=cmd.tokens) if value != None: if value < 0: value = user_data.slimes if value <= 0: value = None if value != None: # Cost including the transfer fee. cost_total = round(value * 1.1) if user_data.slimecoin < cost_total: response = "You don't have enough SlimeCoin. ({:,}/{:,})".format(user_data.slimecoin, cost_total) else: # Do the transfer if the player can afford it. target_data.change_slimecoin(n=value, coinsource=ewcfg.coinsource_transfer) user_data.change_slimecoin(n=-cost_total, coinsource=ewcfg.coinsource_transfer) user_data.time_lastinvest = time_now # Persist changes response = "You transfer {slime:,} SlimeCoin to {target_name}. Your slimebroker takes his nominal fee of {fee:,} SlimeCoin.".format(slime=value, target_name=member.display_name, fee=(cost_total - value)) target_data.persist() user_data.persist() else: response = ewcfg.str_exchange_specify.format(currency="SlimeCoin", action="transfer") # Send the response to the player. await fe_utils.send_message(cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, response))
async def donate(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 fe_utils.send_message(cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, response)) market_data = EwMarket(id_server=user_data.id_server) time_now = round(time.time()) if user_data.poi == ewcfg.poi_id_slimecorphq: poi = poi_static.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 fe_utils.send_message(cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, response)) 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.trauma = ewcfg.trauma_id_environment die_resp = 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) await die_resp.post() 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: poi = poi_static.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 fe_utils.send_message(cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, response)) poudrins = bknd_item.find_item(item_search="slimepoudrin", id_user=cmd.message.author.id, id_server=cmd.guild.id if cmd.guild is not None else None, item_type_filter=ewcfg.it_item) if poudrins == None: response = "You have to own a poudrin in order to donate a poudrin. Duh." else: bknd_item.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 N.L.A.C.U. Lab in Brawlden." # Send the response to the player. await fe_utils.send_message(cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, response))
async def crush(cmd): member = cmd.message.author user_data = EwUser(member=member) response = "" # if it's not overwritten crush_slimes = ewcfg.crush_slimes command = "crush" if cmd.tokens[0] == (ewcfg.cmd_prefix + 'crunch'): command = "crunch" if user_data.life_state == ewcfg.life_state_corpse: response = "Alas, your ghostly form cannot {} anything. Lame.".format(command) return await fe_utils.send_message(cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, response)) item_search = ewutils.flattenTokenListToString(cmd.tokens[1:]) item_sought = bknd_item.find_item(item_search=item_search, id_user=user_data.id_user, id_server=user_data.id_server) if item_sought: sought_id = item_sought.get('id_item') item_data = EwItem(id_item=sought_id) response = "The item doesn't have !{} functionality".format(command) # if it's not overwritten if item_data.item_props.get("id_item") == ewcfg.item_id_slimepoudrin: # delete a slime poudrin from the player's inventory bknd_item.item_delete(id_item=sought_id) levelup_response = user_data.change_slimes(n=crush_slimes, source=ewcfg.source_crush) user_data.persist() response = "You {} the hardened slime crystal with your bare teeth.\nYou gain {} slime. Sick, dude!!".format(command, crush_slimes) if len(levelup_response) > 0: response += "\n\n" + levelup_response elif item_data.item_props.get("id_item") == ewcfg.item_id_royaltypoudrin: # delete a royalty poudrin from the player's inventory bknd_item.item_delete(id_item=sought_id) crush_slimes = 5000 levelup_response = user_data.change_slimes(n=crush_slimes, source=ewcfg.source_crush) user_data.persist() response = "You {} your hard-earned slime crystal with your bare teeth.\nYou gain {} slime. Ah, the joy of writing!".format(command, crush_slimes) if len(levelup_response) > 0: response += "\n\n" + levelup_response elif item_data.item_props.get("id_food") in static_food.vegetable_to_cosmetic_material.keys(): bknd_item.item_delete(id_item=sought_id) crop_name = item_data.item_props.get('food_name') # Turn the crop into its proper cosmetic material item. cosmetic_material_id = static_food.vegetable_to_cosmetic_material[item_data.item_props.get("id_food")] new_item = static_items.item_map.get(cosmetic_material_id) new_item_type = ewcfg.it_item if new_item != None: new_name = new_item.str_name new_item_props = itm_utils.gen_item_props(new_item) else: ewutils.logMsg("ERROR: !crunch failed to retrieve proper cosmetic material for crop {}.".format(item_data.item_props.get("id_food"))) new_name = None new_item_props = None generated_item_id = bknd_item.item_create( item_type=new_item_type, id_user=cmd.message.author.id, id_server=cmd.guild.id, item_props=new_item_props ) response = "You {} your {} in your mouth and spit it out to create some {}!!".format(command, crop_name, new_name) elif item_data.item_props.get("id_food") in static_food.candy_ids_list: bknd_item.item_delete(id_item=sought_id) item_name = item_data.item_props.get('food_name') if float(getattr(item_data, "time_expir", 0)) < time.time(): response = "The {} melts disappointingly in your hand...".format(item_name) else: gristnum = random.randrange(2) + 1 gristcount = 0 response = "You crush the {} with an iron grip. You gain {} piece(s) of Double Halloween Grist!".format(item_name, gristnum) while gristcount < gristnum: grist = static_items.item_map.get(ewcfg.item_id_doublehalloweengrist) grist_props = itm_utils.gen_item_props(grist) bknd_item.item_create( item_type=grist.item_type, id_user=cmd.message.author.id, id_server=cmd.message.guild.id, item_props=grist_props ) gristcount += 1 elif item_data.item_props.get("id_item") == ewcfg.item_id_negapoudrin: # delete a negapoudrin from the player's inventory bknd_item.item_delete(id_item=sought_id) crush_slimes = -1000000 # kill player if they have less than 1 million slime if user_data.slimes < 1000000: user_data.die(cause=ewcfg.cause_suicide) # remove 1 million slime from the player else: levelup_response = user_data.change_slimes(n = crush_slimes, source = ewcfg.source_crush) user_data.persist() response = "You {} your hard-earned slime crystal with your bare teeth.\nAs the nerve endings in your teeth explode, you realize you bit into a negapoudrin! You writhe on the ground as slime gushes from all of your orifices.".format(command) if len(levelup_response) > 0: response += "\n\n" + levelup_response else: if item_search: # if they didnt forget to specify an item and it just wasn't found response = "You don't have one." else: response = "{} which item? (check **!inventory**)".format(command) # Send the response to the player. await fe_utils.send_message(cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, response))
async def writhe(cmd): resp = await cmd_utils.start(cmd=cmd) response = "" user_data = EwUser(member=cmd.message.author) if user_data.life_state != ewcfg.life_state_grandfoe: response = "Only the NEGASLIME {} can do that.".format( ewcfg.emote_negaslime) await fe_utils.send_message( cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, response)) else: # play animation he = ewcfg.emote_he s_ = ewcfg.emote_s_ ve = ewcfg.emote_ve vt = ewcfg.emote_vt v_ = ewcfg.emote_v_ h_ = ewcfg.emote_h_ va = ewcfg.emote_va ht = ewcfg.emote_ht hs = ewcfg.emote_hs blank = ewcfg.emote_blank writhing1 = he writhing2 = s_ + he + "\n" + ve writhing3 = s_ + h_ + he + "\n" + vt + he writhing4 = s_ + h_ + ht + "\n" + vt + he + ve writhing5 = s_ + h_ + ht + "\n" + va + he + vt + he + "\n" + ve writhing6 = s_ + h_ + ht + "\n" + va + ht + va + ht + "\n" + v_ + ve + ve + ve + "\n" + ve writhing7 = s_ + h_ + ht + "\n" + va + ht + va + hs + he + "\n" + v_ + ve + v_ + vt + he + "\n" + ve + blank + ve writhing8 = s_ + h_ + ht + "\n" + va + ht + va + hs + he + "\n" + v_ + ve + v_ + vt + h_ + he + "\n" + vt + he + vt + he writhing9 = s_ + h_ + ht + "\n" + va + ht + va + hs + h_ + he + "\n" + v_ + ve + v_ + vt + h_ + ht + "\n" + vt + ht + vt + ht + blank + ve + "\n" + blank + ve + blank + ve writhing10 = s_ + h_ + ht + "\n" + va + ht + va + hs + h_ + he + "\n" + v_ + ve + v_ + vt + h_ + ht + "\n" + vt + ht + vt + ht + blank + vt + he + "\n" + blank + ve + blank + vt + he writhings = [ writhing1, writhing2, writhing3, writhing4, writhing5, writhing6, writhing7, writhing8, writhing9, writhing10 ] for writhing in writhings: cur_time = time.time() await fe_utils.edit_message(cmd.client, resp, writhing) elapsed = time.time() - cur_time await asyncio.sleep(2.0 - elapsed) id_server = cmd.guild.id targets = [] # search for players in the negaslime's location in database and put them in a list if id_server != None: try: conn_info = bknd_core.databaseConnect() conn = conn_info.get('conn') cursor = conn.cursor() cursor.execute( "SELECT id_user FROM users WHERE id_server = %s AND poi = '{}' AND life_state IN (1, 2);" .format(user_data.poi), (id_server, )) # convert pulled IDs into member objects target_ids = cursor.fetchall() for target_id in target_ids: target = cmd.guild.get_member(target_id[0]) targets.append(target) conn.commit() finally: # Clean up the database handles. cursor.close() bknd_core.databaseClose(conn_info) victim_list = [] # kill everyone in the negaslime's poi and remember their names for target in targets: if target != None: user_data_target = EwUser(member=target) user_data_target.id_killer = cmd.message.author.id user_data_target.die(cause=ewcfg.cause_grandfoe) user_data_target.persist() await ewrolemgr.updateRoles(client=cmd.client, member=target) sewerchannel = fe_utils.get_channel(cmd.guild, ewcfg.channel_sewers) await fe_utils.send_message( cmd.client, sewerchannel, "{} ".format(ewcfg.emote_slimeskull) + fe_utils.formatMessage( target, "You have been crushed by tendrils. {}".format( ewcfg.emote_slimeskull))) victim_list.append(target) # display result of the writhing if len(victim_list) > 0: victims_string = ewutils.userListToNameString(victim_list) response = "Your tendrils have successfully killed {}.".format( victims_string) else: response = "Your tendrils didn't kill anyone :(" await fe_utils.send_message( cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, response))
async def slap(cmd): if ewutils.channel_name_is_poi(cmd.message.channel.name) == False: return await fe_utils.send_message(cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, "You must {} in a zone's channel.".format(cmd.tokens[0]))) time_now = int(time.time()) user_data = EwUser(member=cmd.message.author) user_poi = poi_static.id_to_poi.get(user_data.poi) target_data = -1 mutations = user_data.get_mutations() resp_cont = EwResponseContainer(id_server=cmd.guild.id) if cmd.tokens_count < 3: response = "You'll need to specify who and where you're slapping. Try !slap <target> <location>." return await fe_utils.send_message(cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, response)) dest_poi = cmd.tokens[2].lower() dest_poi_obj = poi_static.id_to_poi.get(dest_poi) response = "" if cmd.mentions_count == 0: response = "Who are you slapping?" elif cmd.mentions_count > 1: response = "Nobody's that good at slapping. Do it to one person at a time." else: target_data = EwUser(member=cmd.mentions[0]) if response != "": return await fe_utils.send_message(cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, response)) if target_data.poi != user_data.poi: response = "Not right now. You can't slap what you can't see." elif user_data.id_user == target_data.id_user: response = "Stop hitting yourself." elif ewutils.active_restrictions.get(target_data.id_user) != None and ewutils.active_restrictions.get(target_data.id_user) > 0: response = "They're in the middle of something, be patient." elif target_data.life_state == ewcfg.life_state_corpse: response = "You give {} a good whack. They're a ghost though, so your hand passes straight through.".format(cmd.mentions[0].display_name) elif ewcfg.mutation_id_ditchslap not in mutations: response = "You wind up your good arm and tacoom {} hard in the {}. The air gets knocked out of them but they stay firmly in place.".format(cmd.mentions[0].display_name, random.choice(['face', 'face', 'face', 'ass'])) else: mutation_data = EwMutation(id_mutation=ewcfg.mutation_id_ditchslap, id_user=cmd.message.author.id, id_server=cmd.message.guild.id) if len(mutation_data.data) > 0: time_lastuse = int(mutation_data.data) else: time_lastuse = 0 if dest_poi_obj.id_poi not in user_poi.neighbors.keys(): response = "You can't hit them that far." elif move_utils.inaccessible(user_data=target_data, poi=dest_poi_obj): response = "That place is locked up good. You can't get a good launch angle to send them there." # elif time_lastuse + 180 * 60 > time_now: # response = "Your arm is spent from the last time you obliterated someone. Try again in {} minutes.".format(math.ceil((time_lastuse + 180*60 - time_now)/60)) elif user_data.faction != target_data.faction: response = "You try to slap {}, but they realize what you're doing and jump back. Welp, back to the drawing board.".format(cmd.mentions[0].display_name) elif user_poi.id_poi in [ewcfg.poi_id_rowdyroughhouse, ewcfg.poi_id_copkilltown] or user_poi.is_apartment: response = "They're currently in their room. You'd have to carry {} out of it to slap them, which would be gay.".format(cmd.mentions[0].display_name) elif ewcfg.status_slapped_id in target_data.getStatusEffects(): response = "Don't turn this into domestic abuse now. Can't you see they're still reeling from the last time?" elif (ewutils.clenched.get(target_data.id_user) == None or ewutils.clenched.get(target_data.id_user) == 0) and (user_poi.is_subzone or user_poi.is_district): response = "You wind up your slappin' hand and take a swing, but {} is all relaxed and you can't get a good angle. They end up flying into the wall. Better not touch people who aren't prepared to get hit...".format(cmd.mentions[0].display_name) else: response = "You wind up your slap. This one's gonna hurt. Steady as she goes...WHAM! {} is sent flying helplessly into {}!".format(cmd.mentions[0].display_name, dest_poi_obj.str_name) target_data.applyStatus(id_status=ewcfg.status_slapped_id) dm_response = "WHAP! {} smacked you into {}!".format(cmd.message.author.display_name, dest_poi_obj.str_name) target_response = "**CRAAAAAAAAAAAASH!** You arrive in {}!".format(dest_poi_obj.str_name) ewutils.moves_active[cmd.message.author.id] = 0 target_data.poi = dest_poi_obj.id_poi user_data.time_lastenter = int(time.time()) mutation_data.data = str(time_now) mutation_data.persist() if target_data.poi == ewcfg.poi_id_thesewers: target_data.die(cause=ewcfg.cause_suicide) target_response += " But you hit your head really hard! Your precious little dome explodes into bits and pieces and you die!" user_data.persist() await ewrolemgr.updateRoles(client=ewutils.get_client(), member=cmd.mentions[0], new_poi=target_data.poi) target_data.persist() await user_data.move_inhabitants(id_poi=dest_poi_obj.id_poi) await prank_utils.activate_trap_items(dest_poi_obj.id_poi, user_data.id_server, target_data.id_user) await fe_utils.send_message(cmd.client, cmd.mentions[0], fe_utils.formatMessage(cmd.mentions[0], dm_response)) await fe_utils.send_message(cmd.client, fe_utils.get_channel(server=cmd.mentions[0].guild, channel_name=dest_poi_obj.channel), fe_utils.formatMessage(cmd.mentions[0], target_response)) return await fe_utils.send_message(cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, response))
async def disembark(cmd): # can only use movement commands in location channels if ewutils.channel_name_is_poi(cmd.message.channel.name) == False: return await fe_utils.send_message(cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, "You must {} in a zone's channel.".format(cmd.tokens[0]))) user_data = EwUser(member=cmd.message.author) response = "" resp_cont = EwResponseContainer(client=cmd.client, id_server=user_data.id_server) # prevent ghosts currently inhabiting other players from moving on their own if user_data.get_inhabitee(): response = "You might want to **{}** of the poor soul you've been tormenting first.".format(ewcfg.cmd_letgo) return await fe_utils.send_message(cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, response)) # can only disembark when you're on a transport vehicle elif user_data.poi in poi_static.transports: transport_data = EwTransport(id_server=user_data.id_server, poi=user_data.poi) response = "{}ing.".format(cmd.tokens[0][1:].lower()).capitalize() stop_poi = poi_static.id_to_poi.get(transport_data.current_stop) # if stop_poi.is_subzone: # stop_poi = poi_static.id_to_poi.get(stop_poi.mother_district) if move_utils.inaccessible(user_data=user_data, poi=stop_poi): return await fe_utils.send_message(cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, "You're not allowed to go there (bitch).")) # schedule tasks for concurrent execution message_task = asyncio.ensure_future(fe_utils.send_message(cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, response))) wait_task = asyncio.ensure_future(asyncio.sleep(ewcfg.time_embark)) # Take control of the move for this player. move_utils.move_counter += 1 move_current = ewutils.moves_active[cmd.message.author.id] = move_utils.move_counter await message_task await wait_task # check if the user entered another movement command while waiting for the current one to be completed if move_current != ewutils.moves_active[cmd.message.author.id]: return user_data = EwUser(member=cmd.message.author) transport_data = EwTransport(id_server=user_data.id_server, poi=transport_data.poi) # cancel move, if the user has left the transport while waiting for movement to be completed (e.g. by dying) if user_data.poi != transport_data.poi: return stop_poi = poi_static.id_to_poi.get(transport_data.current_stop) # juvies can't swim if transport_data.current_stop == ewcfg.poi_id_slimesea and user_data.life_state != ewcfg.life_state_corpse: if user_data.life_state == ewcfg.life_state_kingpin: response = "You try to heave yourself over the railing as you're hit by a sudden case of sea sickness. You puke into the sea and sink back on deck." response = fe_utils.formatMessage(cmd.message.author, response) return await fe_utils.send_message(cmd.client, cmd.message.channel, response) user_data.poi = ewcfg.poi_id_slimesea user_data.trauma = ewcfg.trauma_id_environment die_resp = user_data.die(cause=ewcfg.cause_drowning) user_data.persist() resp_cont.add_response_container(die_resp) response = "{} jumps over the railing of the ferry and promptly drowns in the slime sea.".format(cmd.message.author.display_name) resp_cont.add_channel_response(channel=ewcfg.channel_slimesea, response=response) resp_cont.add_channel_response(channel=ewcfg.channel_ferry, response=response) await ewrolemgr.updateRoles(client=cmd.client, member=cmd.message.author) # they also can't fly elif transport_data.transport_type == ewcfg.transport_type_blimp and not stop_poi.is_transport_stop and user_data.life_state != ewcfg.life_state_corpse: user_mutations = user_data.get_mutations() if user_data.life_state == ewcfg.life_state_kingpin: response = "Your life flashes before your eyes, as you plummet towards your certain death. A lifetime spent being a piece of shit and playing videogames all day. You close your eyes and... BOING! You open your eyes again to see a crew of workers transporting the trampoline that broke your fall. You get up and dust yourself off, sighing heavily." response = fe_utils.formatMessage(cmd.message.author, response) resp_cont.add_channel_response(channel=stop_poi.channel, response=response) user_data.poi = stop_poi.id_poi user_data.persist() await ewrolemgr.updateRoles(client=cmd.client, member=cmd.message.author) return await resp_cont.post() elif ewcfg.mutation_id_lightasafeather in user_mutations or ewcfg.mutation_id_airlock in user_mutations: response = "With a running jump you launch yourself out of the blimp and begin falling to your soon-to-be demise... but then a strong updraft breaks your fall and you land unscathed. " response = fe_utils.formatMessage(cmd.message.author, response) resp_cont.add_channel_response(channel=stop_poi.channel, response=response) user_data.poi = stop_poi.id_poi user_data.persist() await user_data.move_inhabitants(id_poi=stop_poi.id_poi) await ewrolemgr.updateRoles(client=cmd.client, member=cmd.message.author) return await resp_cont.post() district_data = EwDistrict(id_server=user_data.id_server, district=stop_poi.id_poi) district_data.change_slimes(n=user_data.slimes) district_data.persist() user_data.poi = stop_poi.id_poi user_data.trauma = ewcfg.trauma_id_environment die_resp = user_data.die(cause=ewcfg.cause_falling) user_data.persist() resp_cont.add_response_container(die_resp) response = "SPLAT! A body collides with the asphalt with such force, that it is utterly annihilated, covering bystanders in blood and slime and guts." resp_cont.add_channel_response(channel=stop_poi.channel, response=response) await ewrolemgr.updateRoles(client=cmd.client, member=cmd.message.author) # update user location, if move successful else: # if stop_poi.is_subzone: # stop_poi = poi_static.id_to_poi.get(stop_poi.mother_district) if move_utils.inaccessible(user_data=user_data, poi=stop_poi): return await fe_utils.send_message(cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, "You're not allowed to go there (bitch).")) user_data.poi = stop_poi.id_poi user_data.persist() await user_data.move_inhabitants(id_poi=stop_poi.id_poi) response = "You enter {}".format(stop_poi.str_name) await ewrolemgr.updateRoles(client=cmd.client, member=cmd.message.author) await fe_utils.send_message(cmd.client, fe_utils.get_channel(cmd.guild, stop_poi.channel), fe_utils.formatMessage(cmd.message.author, response)) # SWILLDERMUK await prank_utils.activate_trap_items(stop_poi.id_poi, user_data.id_server, user_data.id_user) return return await resp_cont.post() else: response = "You are not currently riding any transport." return await fe_utils.send_message(cmd.client, cmd.message.channel, fe_utils.formatMessage(cmd.message.author, response))