def equip(self, weapon_item = None): if self.life_state == ewcfg.life_state_corpse: response = "Ghosts can't equip weapons." elif self.life_state == ewcfg.life_state_juvenile: response = "Juvies can't equip weapons." elif self.life_state == ewcfg.life_state_shambler: response = "Shamblers can't equip weapons." elif self.weaponmarried == True: current_weapon = ewitem.EwItem(id_item = self.weapon) if weapon_item.item_props.get("married") == self.id_user: response = "You equip your " + (weapon_item.item_props.get("weapon_type") if len(weapon_item.item_props.get("weapon_name")) == 0 else weapon_item.item_props.get("weapon_name")) self.weapon = weapon_item.id_item weapon = ewcfg.weapon_map.get(weapon_item.item_props.get("weapon_type")) if ewcfg.weapon_class_captcha in weapon.classes: captcha = ewutils.generate_captcha(n = weapon.captcha_length) weapon_item.item_props["captcha"] = captcha response += "\nSecurity code: **{}**".format(captcha) else: partner_name = current_weapon.item_props.get("weapon_name") if partner_name in [None, ""]: partner_name = "partner" response = "You reach to pick up a new weapon, but your old {} remains motionless with jealousy. You dug your grave, now decompose in it.".format(partner_name) else: response = "You equip your " + (weapon_item.item_props.get("weapon_type") if len(weapon_item.item_props.get("weapon_name")) == 0 else weapon_item.item_props.get("weapon_name")) + "." self.weapon = weapon_item.id_item weapon = ewcfg.weapon_map.get(weapon_item.item_props.get("weapon_type")) if ewcfg.weapon_class_captcha in weapon.classes: captcha = ewutils.generate_captcha(n = weapon.captcha_length) weapon_item.item_props["captcha"] = captcha response += "\nSecurity code: **{}**".format(captcha) return response
def get_fashion_stats(self): cosmetics = ewitem.inventory( id_user=self.id_user, id_server=self.id_server, item_type_filter=ewcfg.it_cosmetic ) result = [0] * 3 cosmetic_items = [] for cosmetic in cosmetics: cosmetic_items.append(ewitem.EwItem(id_item=cosmetic.get('id_item'))) for cos in cosmetic_items: if cos.item_props['adorned'] == 'true': cosmetic_count = sum(1 for cosmetic in cosmetic_items if cosmetic.item_props['cosmetic_name'] == cos.item_props['cosmetic_name'] and cosmetic.item_props['adorned'] == 'true') if cos.item_props.get('attack') == None: print('Failed to get attack stat for cosmetic with props: {}'.format(cos.item_props)) result[0] += int( int(cos.item_props['attack']) / cosmetic_count ) result[1] += int( int(cos.item_props['defense']) / cosmetic_count ) result[2] += int( int(cos.item_props['speed']) / cosmetic_count ) return result
def equip(self, weapon_item=None): if self.life_state == ewcfg.life_state_corpse: response = "Ghosts can't equip weapons." elif self.life_state == ewcfg.life_state_juvenile: response = "Juvies can't equip weapons." elif self.weaponmarried == True: current_weapon = ewitem.EwItem(id_item=self.weapon) if weapon_item.item_props.get("married") == self.id_user: response = "You equip your " + ( weapon_item.item_props.get("weapon_type") if len( weapon_item.item_props.get("weapon_name")) == 0 else weapon_item.item_props.get("weapon_name")) self.weapon = weapon_item.id_item else: partner_name = current_weapon.item_props.get("weapon_name") if partner_name in [None, ""]: partner_name = "partner" response = "You reach to pick up a new weapon, but your old {} remains motionless with jealousy. You dug your grave, now decompose in it.".format( partner_name) else: response = "You equip your " + ( weapon_item.item_props.get("weapon_type") if len( weapon_item.item_props.get("weapon_name")) == 0 else weapon_item.item_props.get("weapon_name")) self.weapon = weapon_item.id_item return 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))
def equip_sidearm(self, sidearm_item = None): sidearm = ewcfg.weapon_map.get(sidearm_item.item_props.get("weapon_type")) if self.life_state == ewcfg.life_state_corpse: response = "Ghosts can't equip weapons." elif self.life_state == ewcfg.life_state_juvenile and ewcfg.weapon_class_juvie not in sidearm.classes: response = "Juvies can't equip weapons." elif self.weaponmarried == True and sidearm_item.item_props.get("married") == self.id_user: current_weapon = ewitem.EwItem(id_item = self.weapon) partner_name = current_weapon.item_props.get("weapon_name") if partner_name in [None, ""]: partner_name = "partner" response = "Your {} is motionless in your hand, frothing with jealousy. You can't sidearm it like one of your side ho pickaxes.".format(partner_name) else: response = "You sidearm your " + (sidearm_item.item_props.get("weapon_type") if len(sidearm_item.item_props.get("weapon_name")) == 0 else sidearm_item.item_props.get("weapon_name")) + "." self.sidearm = sidearm_item.id_item if self.weapon == self.sidearm: self.weapon = -1 return 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))
def __init__(self, member = None, id_user = None, id_server = None, data_level = 0): self.combatant_type = ewcfg.combatant_type_player if(id_user == None) and (id_server == None): if(member != None): id_server = member.server.id id_user = member.id # Retrieve the object from the database if the user is provided. if(id_user != None) and (id_server != None): self.id_server = id_server self.id_user = id_user try: conn_info = ewutils.databaseConnect() conn = conn_info.get('conn') cursor = conn.cursor() # Retrieve object cursor.execute("SELECT {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {} FROM users WHERE id_user = %s AND id_server = %s".format( ewcfg.col_slimes, ewcfg.col_slimelevel, ewcfg.col_hunger, ewcfg.col_totaldamage, ewcfg.col_bounty, ewcfg.col_weapon, ewcfg.col_trauma, ewcfg.col_slimecoin, ewcfg.col_time_lastkill, ewcfg.col_time_lastrevive, ewcfg.col_id_killer, ewcfg.col_time_lastspar, ewcfg.col_time_lasthaunt, ewcfg.col_time_lastinvest, ewcfg.col_inebriation, ewcfg.col_faction, ewcfg.col_poi, ewcfg.col_life_state, ewcfg.col_busted, ewcfg.col_time_last_action, ewcfg.col_weaponmarried, ewcfg.col_time_lastscavenge, ewcfg.col_bleed_storage, ewcfg.col_time_lastenter, ewcfg.col_time_lastoffline, ewcfg.col_time_joined, ewcfg.col_poi_death, ewcfg.col_slime_donations, ewcfg.col_poudrin_donations, ewcfg.col_arrested, ewcfg.col_splattered_slimes, ewcfg.col_time_expirpvp, ewcfg.col_time_lastenlist, ewcfg.col_apt_zone, ewcfg.col_visiting, ewcfg.col_active_slimeoid, ewcfg.col_has_soul, ewcfg.col_sap, ewcfg.col_hardened_sap, ewcfg.col_festivity, ewcfg.col_festivity_from_slimecoin, ewcfg.col_slimernalia_kingpin, ewcfg.col_manuscript, ewcfg.col_swear_jar, ewcfg.col_degradation, ewcfg.col_time_lastdeath, ewcfg.col_gambit, ewcfg.col_credence, ewcfg.col_credence_used, ewcfg.col_race, ewcfg.col_time_racialability, ), ( id_user, id_server )) result = cursor.fetchone(); if result != None: # Record found: apply the data to this object. self.slimes = result[0] self.slimelevel = result[1] self.hunger = result[2] self.totaldamage = result[3] self.bounty = result[4] self.weapon = result[5] self.trauma = result[6] self.slimecoin = result[7] self.time_lastkill = result[8] self.time_lastrevive = result[9] self.id_killer = result[10] self.time_lastspar = result[11] self.time_lasthaunt = result[12] self.time_lastinvest = result[13] self.inebriation = result[14] self.faction = result[15] self.poi = result[16] self.life_state = result[17] self.busted = (result[18] == 1) self.time_last_action = result[19] self.weaponmarried = (result[20] == 1) self.time_lastscavenge = result[21] self.bleed_storage = result[22] self.time_lastenter = result[23] self.time_lastoffline = result[24] self.time_joined = result[25] self.poi_death = result[26] self.slime_donations = result[27] self.poudrin_donations = result[28] self.arrested = (result[29] == 1) self.splattered_slimes = result[30] self.time_expirpvp = result[31] self.time_lastenlist = result[32] self.apt_zone = result[33] self.visiting = result[34] self.active_slimeoid = result[35] self.has_soul = result[36] self.sap = result[37] self.hardened_sap = result[38] self.festivity = result[39] self.festivity_from_slimecoin = result[40] self.slimernalia_kingpin = (result[41] == 1) self.manuscript = result[42] self.swear_jar = result[43] self.degradation = result[44] self.time_lastdeath = result[45] self.gambit = result[46] self.credence = result[47] self.credence_used = result[48] self.race = result[49] self.time_racialability = result[50] else: self.poi = ewcfg.poi_id_downtown self.life_state = ewcfg.life_state_juvenile # Create a new database entry if the object is missing. cursor.execute("REPLACE INTO users(id_user, id_server, poi, life_state) VALUES(%s, %s, %s, %s)", ( id_user, id_server, self.poi, self.life_state )) conn.commit() if (self.time_joined == 0) and (member != None) and (member.joined_at != None): self.time_joined = int(member.joined_at.timestamp()) # Get the skill for the user's current weapon. if self.weapon != None and self.weapon >= 0: skills = ewutils.weaponskills_get( id_server = id_server, id_user = id_user ) weapon_item = ewitem.EwItem(id_item = self.weapon) skill_data = skills.get(weapon_item.item_props.get("weapon_type")) if skill_data != None: self.weaponskill = skill_data['skill'] else: self.weaponskill = 0 if self.weaponskill == None: self.weaponskill = 0 else: self.weaponskill = 0 if data_level > 0: cursor.execute("SELECT {}, {}, {} FROM fashion_stats WHERE id_user = %s AND id_server = %s".format( ewcfg.col_attack, ewcfg.col_defense, ewcfg.col_speed, ), ( id_user, id_server, )) result = cursor.fetchone() if result != None: self.attack = result[0] self.defense = result[1] self.speed = result[2] cursor.execute("SELECT {} FROM freshness WHERE id_user = %s AND id_server = %s".format( ewcfg.col_freshness, ),( id_user, id_server )) result = cursor.fetchone() if result != None: self.freshness = result[0] self.move_speed = ewutils.get_move_speed(self) self.limit_fix() finally: # Clean up the database handles. cursor.close() ewutils.databaseClose(conn_info)
async def updateRoles(client=None, member=None, server_default=None, refresh_perms=True, remove_or_apply_flag=None): time_now = int(time.time()) if server_default != None: user_data = EwUser(id_user=member.id, id_server=server_default) else: user_data = EwUser(member=member) id_server = user_data.id_server if member == None: return ewutils.logMsg("error: member was not supplied for updateRoles") #roles_map = ewutils.getRoleMap(member.guild.roles) roles_map_user = ewutils.getRoleIdMap(member.roles) if user_data.life_state != ewcfg.life_state_kingpin and ewcfg.role_kingpin in roles_map_user: # Fix the life_state of kingpins, if somehow it wasn't set. user_data.life_state = ewcfg.life_state_kingpin user_data.persist() elif user_data.life_state != ewcfg.life_state_grandfoe and ewcfg.role_grandfoe in roles_map_user: # Fix the life_state of a grand foe. user_data.life_state = ewcfg.life_state_grandfoe user_data.persist() faction_roles_remove = [ ewcfg.role_juvenile, ewcfg.role_juvenile_active, ewcfg.role_juvenile_pvp, ewcfg.role_rowdyfuckers, ewcfg.role_rowdyfuckers_pvp, ewcfg.role_rowdyfuckers_active, ewcfg.role_copkillers, ewcfg.role_copkillers_pvp, ewcfg.role_copkillers_active, ewcfg.role_corpse, ewcfg.role_corpse_pvp, ewcfg.role_corpse_active, ewcfg.role_kingpin, ewcfg.role_grandfoe, ewcfg.role_slimecorp, ewcfg.role_tutorial, ewcfg.role_shambler, ] # Manage faction roles. faction_role = ewutils.get_faction(user_data=user_data) faction_roles_remove.remove(faction_role) pvp_role = None active_role = None if faction_role in ewcfg.role_to_pvp_role: if user_data.time_expirpvp >= time_now: pvp_role = ewcfg.role_to_pvp_role.get(faction_role) faction_roles_remove.remove(pvp_role) # if ewutils.is_otp(user_data): # active_role = ewcfg.role_to_active_role.get(faction_role) # faction_roles_remove.remove(active_role) tutorial_role = None if user_data.poi in ewcfg.tutorial_pois: tutorial_role = ewcfg.role_tutorial faction_roles_remove.remove(tutorial_role) # Manage location roles. user_poi = ewcfg.id_to_poi.get(user_data.poi) #print(user_poi.id_poi) if user_poi != None: # poi_role = user_poi.role poi_major_role = user_poi.major_role poi_minor_role = user_poi.minor_role poi_permissions = user_poi.permissions else: # poi_role = None poi_major_role = None poi_minor_role = None poi_permissions = None poi_permissions_remove = [] for poi in ewcfg.poi_list: if poi.permissions != None and poi.permissions != poi_permissions: poi_permissions_remove.append(poi.id_poi) poi_roles_remove = [] for poi in ewcfg.poi_list: if poi.major_role != None and poi.major_role != poi_major_role: poi_roles_remove.append(poi.major_role) if poi.minor_role != None and poi.minor_role != poi_minor_role: poi_roles_remove.append(poi.minor_role) misc_roles_remove = [ewcfg.role_gellphone, ewcfg.role_slimernalia] # Remove user's gellphone role if they don't have a phone role_gellphone = None gellphones = ewitem.find_item_all(item_search=ewcfg.item_id_gellphone, id_user=user_data.id_user, id_server=user_data.id_server, item_type_filter=ewcfg.it_item) gellphone_active = False for phone in gellphones: phone_data = ewitem.EwItem(id_item=phone.get('id_item')) if phone_data.item_props.get('active') == 'true': gellphone_active = True break if gellphone_active == True: role_gellphone = ewcfg.role_gellphone misc_roles_remove.remove(ewcfg.role_gellphone) role_slimernalia = None #if user_data.slimernalia_kingpin == True: # role_slimernalia = ewcfg.role_slimernalia # misc_roles_remove.remove(ewcfg.role_slimernalia) role_ids = [] for role_id in roles_map_user: try: role_data = EwRole(id_server=id_server, id_role=role_id) roleName = role_data.name if roleName != None and roleName not in faction_roles_remove and roleName not in misc_roles_remove and roleName not in poi_roles_remove and role_data.id_role != '': role_ids.append(int(role_data.id_role)) except: ewutils.logMsg( 'error: couldn\'t find role with id {}'.format(role_id)) try: role_data = EwRole(id_server=id_server, name=faction_role) if not role_data.id_role in role_ids and role_data.id_role != '': role_ids.append(int(role_data.id_role)) #ewutils.logMsg('found role {} with id {}'.format(role_data.name, role_data.id_role)) except: ewutils.logMsg( 'error: couldn\'t find faction role {}'.format(faction_role)) try: role_data = EwRole(id_server=id_server, name=pvp_role) if not role_data.id_role in role_ids and role_data.id_role != '': role_ids.append(int(role_data.id_role)) #ewutils.logMsg('found role {} with id {}'.format(role_data.name, role_data.id_role)) except: ewutils.logMsg('error: couldn\'t find pvp role {}'.format(pvp_role)) try: role_data = EwRole(id_server=id_server, name=active_role) if not role_data.id_role in role_ids and role_data.id_role != '': role_ids.append(int(role_data.id_role)) #ewutils.logMsg('found role {} with id {}'.format(role_data.name, role_data.id_role)) except: ewutils.logMsg( 'error: couldn\'t find active role {}'.format(active_role)) try: role_data = EwRole(id_server=id_server, name=tutorial_role) if not role_data.id_role in role_ids and role_data.id_role != '': role_ids.append(int(role_data.id_role)) #ewutils.logMsg('found role {} with id {}'.format(role_data.name, role_data.id_role)) except: ewutils.logMsg( 'error: couldn\'t find tutorial role {}'.format(tutorial_role)) try: major_role_data = EwRole(id_server=id_server, name=poi_major_role) if not major_role_data.id_role in role_ids and major_role_data.id_role != '': role_ids.append(int(major_role_data.id_role)) #ewutils.logMsg('found role {} with id {}'.format(role_data.name, role_data.id_role)) except: ewutils.logMsg( 'error: couldn\'t find major role {}'.format(poi_major_role)) try: minor_role_data = EwRole(id_server=id_server, name=poi_minor_role) if not minor_role_data.id_role in role_ids and minor_role_data.id_role != '': role_ids.append(int(minor_role_data.id_role)) #ewutils.logMsg('found role {} with id {}'.format(role_data.name, role_data.id_role)) except: ewutils.logMsg( 'error: couldn\'t find minor role {}'.format(poi_minor_role)) try: role_data = EwRole(id_server=id_server, name=role_gellphone) if not role_data.id_role in role_ids and role_data.id_role != '': role_ids.append(int(role_data.id_role)) #ewutils.logMsg('found role {} with id {}'.format(role_data.name, role_data.id_role)) except: ewutils.logMsg( 'error: couldn\'t find gellphone role {}'.format(role_gellphone)) try: role_data = EwRole(id_server=id_server, name=role_slimernalia) if not role_data.id_role in role_ids and role_data.id_role != '': role_ids.append(int(role_data.id_role)) #ewutils.logMsg('found role {} with id {}'.format(role_data.name, role_data.id_role)) except: ewutils.logMsg('error: couldn\'t find slimernalia role {}'.format( role_slimernalia)) # if faction_role not in role_names: # role_names.append(faction_role) # if poi_role != None and poi_role not in role_names: # role_names.append(poi_role) #replacement_roles = [] #for name in role_names: # role = roles_map.get(name) # if role != None: # replacement_roles.append(role) # else: # ewutils.logMsg("error: role missing \"{}\"".format(name)) #ewutils.logMsg('looking for {} roles to replace'.format(len(role_ids))) replacement_roles = [] for role in member.guild.roles: if role.id in role_ids: # ewutils.logMsg('found role {} with id {}'.format(role.name, role.id)) replacement_roles.append(role) #ewutils.logMsg('found {} roles to replace'.format(len(replacement_roles))) try: time_now = int(time.time()) was_pvp = user_data.time_expirpvp > time_now user_is_pvp = False role_ids = [] for pvp_role in ewcfg.role_to_pvp_role.values(): role = EwRole(id_server=member.guild.id, name=pvp_role) role_ids.append(role.id_role) for role in member.roles: if role.id in role_ids: user_is_pvp = True break if remove_or_apply_flag != None: if was_pvp: if remove_or_apply_flag == 'apply': if not user_is_pvp: # ewutils.logMsg('applying flag...') await member.edit(roles=replacement_roles) elif not was_pvp: if remove_or_apply_flag == 'remove': # ewutils.logMsg('removing flag...') await member.edit(roles=replacement_roles) else: await member.edit(roles=replacement_roles) except: ewutils.logMsg('error: failed to replace roles for {}'.format( member.display_name)) if refresh_perms: await refresh_user_perms(client=client, id_server=id_server, used_member=member)
async def smelt(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)) # Find sought recipe. if cmd.tokens_count > 1: sought_result = ewutils.flattenTokenListToString(cmd.tokens[1:]) found_recipe = ewcfg.smelting_recipe_map.get(sought_result) if found_recipe != None: if 'soul' in found_recipe.products: return await smeltsoul(cmd=cmd) # Checks what ingredients are needed to smelt the recipe. necessary_ingredients = found_recipe.ingredients necessary_ingredients_list = [] owned_ingredients = [] # Seeks out the necessary ingredients in your inventory. missing_ingredients = [] for matched_item in necessary_ingredients: necessary_items = necessary_ingredients.get(matched_item) necessary_str = "{} {}".format(necessary_items, matched_item) if necessary_items > 1: necessary_str += "s" necessary_ingredients_list.append(necessary_str) sought_items = ewitem.find_item_all(item_search = matched_item, id_user = user_data.id_user, id_server = user_data.id_server) missing_items = necessary_items - len(sought_items) if missing_items > 0: missing_str = "{} {}".format(missing_items, matched_item) if missing_items > 1: missing_str += "s" missing_ingredients.append(missing_str) else: for i in range(necessary_ingredients.get(matched_item)): sought_item = sought_items.pop() owned_ingredients.append(sought_item.get('id_item')) # If you don't have all the necessary ingredients. if len(missing_ingredients) > 0: response = "You’ve never done this before, have you? To smelt {}, you’ll need to combine *{}*.".format(found_recipe.str_name, ewutils.formatNiceList(names = necessary_ingredients_list, conjunction = "and")) response += " You are missing *{}*.".format(ewutils.formatNiceList(names = missing_ingredients, conjunction = "and")) else: # If you try to smelt a random cosmetic, use old smelting code to calculate what your result will be. if found_recipe.id_recipe == "cosmetic": patrician_rarity = 20 patrician_smelted = random.randint(1, patrician_rarity) patrician = False if patrician_smelted == 1: patrician = True cosmetics_list = [] for result in ewcfg.cosmetic_items_list: if result.acquisition == ewcfg.acquisition_smelting: cosmetics_list.append(result) else: pass items = [] for cosmetic in cosmetics_list: if patrician and cosmetic.rarity == ewcfg.rarity_patrician: items.append(cosmetic) elif not patrician and cosmetic.rarity == ewcfg.rarity_plebeian: items.append(cosmetic) item = items[random.randint(0, len(items) - 1)] ewitem.item_create( item_type = ewcfg.it_cosmetic, id_user = cmd.message.author.id, id_server = cmd.message.server.id, item_props = { 'id_cosmetic': item.id_cosmetic, 'cosmetic_name': item.str_name, 'cosmetic_desc': item.str_desc, 'rarity': item.rarity, 'adorned': 'false' } ) # If you're trying to smelt a specific item. else: possible_results = [] # Matches the recipe's listed products to actual items. for result in ewcfg.smelt_results: if hasattr(result, 'id_item'): if result.id_item not in found_recipe.products: pass else: possible_results.append(result) if hasattr(result, 'id_food'): if result.id_food not in found_recipe.products: pass else: possible_results.append(result) if hasattr(result, 'id_cosmetic'): if result.id_cosmetic not in found_recipe.products: pass else: possible_results.append(result) if hasattr(result, 'id_weapon'): if result.id_weapon not in found_recipe.products: pass else: possible_results.append(result) if hasattr(result, 'id_furniture'): if result.id_furniture not in found_recipe.products: pass else: possible_results.append(result) # If there are multiple possible products, randomly select one. item = random.choice(possible_results) item_props = ewitem.gen_item_props(item) newitem_id = ewitem.item_create( item_type = item.item_type, id_user = cmd.message.author.id, id_server = cmd.message.server.id, item_props = item_props ) for id_item in owned_ingredients: item_check = ewitem.EwItem(id_item=id_item) if item_check.item_props.get('id_cosmetic') != 'soul': ewitem.item_delete(id_item = id_item) else: newitem = ewitem.EwItem(id_item=newitem_id) newitem.item_props['target'] = id_item newitem.persist() ewitem.give_item(id_item=id_item, id_user='******', id_server=cmd.message.server.id) name = "" if hasattr(item, 'str_name'): name = item.str_name elif hasattr(item, 'id_weapon'): name = item.id_weapon response = "You sacrifice your {} to smelt a {}!!".format(ewutils.formatNiceList(names = necessary_ingredients_list, conjunction = "and"), name) user_data.persist() else: response = "There is no recipe by the name." else: response = "Please specify a desired smelt result." # Send response await ewutils.send_message(cmd.client, cmd.message.channel, ewutils.formatMessage(cmd.message.author, response))
def get_freshness(self): cosmetics = ewitem.inventory( id_user=self.id_user, id_server=self.id_server, item_type_filter=ewcfg.it_cosmetic ) cosmetic_items = [] for cosmetic in cosmetics: cosmetic_items.append(ewitem.EwItem(id_item=cosmetic.get('id_item'))) adorned_cosmetics = sum(1 for cosmetic in cosmetic_items if cosmetic.item_props['adorned'] == 'true') if len(cosmetic_items) == 0 or adorned_cosmetics < 2: return 0 base_freshness = 0 hue_count = {} style_count = {} #get base freshness, hue and style counts for cos in cosmetic_items: if cos.item_props['adorned'] == 'true': cosmetic_count = sum(1 for cosmetic in cosmetic_items if cosmetic.item_props['cosmetic_name'] == cos.item_props['cosmetic_name'] and cosmetic.item_props['adorned'] == 'true') base_freshness += int(cos.item_props['freshness']) / cosmetic_count hue = ewcfg.hue_map.get(cos.item_props.get('hue')) if hue is not None: if hue_count.get(hue): hue_count[hue] += 1 else: hue_count[hue] = 1 style = cos.item_props['fashion_style'] if style_count.get(style): style_count[style] += 1 else: style_count[style] = 1 #calc hue modifier hue_mod = 1 if len(hue_count) > 0: complimentary_hue_count = 0 dominant_hue = max(hue_count, key=lambda key: hue_count[key]) for hue in hue_count: if hue.id_hue == dominant_hue.id_hue or hue.id_hue in dominant_hue.effectiveness or hue.is_neutral: complimentary_hue_count += hue_count[hue] if hue_count[dominant_hue] / adorned_cosmetics >= 0.6 and complimentary_hue_count == adorned_cosmetics: hue_mod = 5 #calc style modifier style_mod = 1 dominant_style = max(style_count, key=lambda key: style_count[key]) if style_count[dominant_style] / adorned_cosmetics >= 0.6: style_mod = style_count[dominant_style] / adorned_cosmetics * 10 return int(base_freshness * hue_mod * style_mod)