Example #1
0
	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
Example #2
0
	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
Example #3
0
    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
Example #4
0
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))
Example #5
0
	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
Example #6
0
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))
Example #7
0
	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)
Example #8
0
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)
Example #9
0
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))
Example #10
0
	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)