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 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))