예제 #1
0
 def die(self, cause=None):
     if cause == ewcfg.cause_busted:
         self.busted = True
     else:
         self.busted = False  # reset busted state on normal death; potentially move this to ewspooky.revive
         self.life_state = ewcfg.life_state_corpse
         ewstats.increment_stat(user=self,
                                metric=ewcfg.stat_lifetime_deaths)
         ewstats.change_stat(user=self,
                             metric=ewcfg.stat_lifetime_slimeloss,
                             n=self.slimes)
         if cause != ewcfg.cause_killing and cause != ewcfg.cause_suicide:
             ewstats.increment_stat(user=self,
                                    metric=ewcfg.stat_lifetime_pve_deaths)
     self.slimes = 0
     self.poi = ewcfg.poi_id_thesewers
     self.bounty = 0
     self.totaldamage = 0
     self.slimelevel = 1
     self.hunger = 0
     self.inebriation = 0
     self.ghostbust = False
     # Clear weapon and weaponskill.
     self.weapon = ""
     self.weaponskill = 0
     ewutils.weaponskills_clear(id_server=self.id_server,
                                id_user=self.id_user)
     ewstats.clear_on_death(id_server=self.id_server, id_user=self.id_user)
     ewitem.item_destroyall(id_server=self.id_server, id_user=self.id_user)
예제 #2
0
파일: ew.py 프로젝트: seaniman/endless-war
	def die(self, cause = None):
		time_now = int(time.time())

		ewutils.end_trade(self.id_user)

		resp_cont = ewutils.EwResponseContainer(id_server = self.id_server)

		client = ewcfg.get_client()
		server = client.get_server(self.id_server)

		deathreport = ''
		
		# remove ghosts inhabiting player
		self.remove_inhabitation()

		# Make The death report
		deathreport = ewutils.create_death_report(cause = cause, user_data = self)
		resp_cont.add_channel_response(ewcfg.channel_sewers, deathreport)

		poi = ewcfg.id_to_poi.get(self.poi)
		if cause == ewcfg.cause_weather:
			resp_cont.add_channel_response(poi.channel, deathreport)

		# Grab necessary data for spontaneous combustion before stat reset
		explosion_block_list = [ewcfg.cause_leftserver, ewcfg.cause_cliff]
		user_hasCombustion = False
		if (cause not in explosion_block_list) and (poi.pvp):
			if ewcfg.mutation_id_spontaneouscombustion in self.get_mutations():
				user_hasCombustion = True
				explode_damage = ewutils.slime_bylevel(self.slimelevel) / 5
				explode_district = ewdistrict.EwDistrict(district = self.poi, id_server = self.id_server)
				explode_poi_channel = ewcfg.id_to_poi.get(self.poi).channel

		if cause == ewcfg.cause_busted:
			self.busted = True
			self.poi = ewcfg.poi_id_thesewers
			#self.slimes = int(self.slimes * 0.9)
		else:
			self.busted = False  # reset busted state on normal death; potentially move this to ewspooky.revive
			self.slimes = 0
			self.slimelevel = 1
			self.clear_mutations()
			self.clear_allstatuses()
			self.totaldamage = 0
			self.bleed_storage = 0
			self.hunger = 0
			self.inebriation = 0
			self.bounty = 0
			self.time_lastdeath = time_now		
	
			# if self.life_state == ewcfg.life_state_shambler:
			# 	self.degradation += 1
			# else:
			# 	self.degradation += 5

			ewstats.increment_stat(user = self, metric = ewcfg.stat_lifetime_deaths)
			ewstats.change_stat(user = self, metric = ewcfg.stat_lifetime_slimeloss, n = self.slimes)

			if cause == ewcfg.cause_cliff:
				pass
			else:
				if self.life_state == ewcfg.life_state_juvenile: # If you were a Juvenile.
					item_fraction = 4
					food_fraction = 4
					cosmetic_fraction = 4

				else:  # If you were a Gangster.
					item_fraction = 2
					food_fraction = 2
					cosmetic_fraction = 2
					self.slimecoin = int(self.slimecoin) - (int(self.slimecoin) / 10)

				ewitem.item_dropsome(id_server = self.id_server, id_user = self.id_user, item_type_filter = ewcfg.it_item, fraction = item_fraction) # Drop a random fraction of your items on the ground.
				ewitem.item_dropsome(id_server = self.id_server, id_user = self.id_user, item_type_filter = ewcfg.it_food, fraction = food_fraction) # Drop a random fraction of your food on the ground.

				ewitem.item_dropsome(id_server = self.id_server, id_user = self.id_user, item_type_filter = ewcfg.it_cosmetic, fraction = cosmetic_fraction) # Drop a random fraction of your unadorned cosmetics on the ground.
				ewitem.item_dedorn_cosmetics(id_server = self.id_server, id_user = self.id_user) # Unadorn all of your adorned hats.
				self.freshness = 0

				ewitem.item_dropsome(id_server = self.id_server, id_user = self.id_user, item_type_filter = ewcfg.it_weapon, fraction = 1) # Drop random fraction of your unequipped weapons on the ground.
				ewutils.weaponskills_clear(id_server = self.id_server, id_user = self.id_user, weaponskill = ewcfg.weaponskill_max_onrevive)

			self.life_state = ewcfg.life_state_corpse
			self.poi_death = self.poi
			self.poi = ewcfg.poi_id_thesewers
			self.weapon = -1
			self.time_expirpvp = 0

		if cause == ewcfg.cause_killing_enemy:  # If your killer was an Enemy. Duh.
			ewstats.increment_stat(user = self, metric = ewcfg.stat_lifetime_pve_deaths)

		if cause == ewcfg.cause_leftserver:
			ewitem.item_dropall(id_server=self.id_server, id_user=self.id_user)

		self.sap = 0
		self.hardened_sap = 0
		self.attack = 0
		self.defense = 0
		self.speed = 0

		ewutils.moves_active[self.id_user] = 0
		ewutils.active_target_map[self.id_user] = ""
		ewutils.active_restrictions[self.id_user] = 0
		ewstats.clear_on_death(id_server = self.id_server, id_user = self.id_user)

		self.persist()

		if cause not in explosion_block_list: # Run explosion after location/stat reset, to prevent looping onto self
			if user_hasCombustion:
				explode_resp = "\n{} spontaneously combusts, horribly dying in a fiery explosion of slime and shrapnel!! Oh, the humanity!\n".format(server.get_member(self.id_user).display_name)
				ewutils.logMsg("")
				resp_cont.add_channel_response(explode_poi_channel, explode_resp)

				explosion = ewutils.explode(damage = explode_damage, district_data = explode_district)
				resp_cont.add_response_container(explosion)

		#ewitem.item_destroyall(id_server = self.id_server, id_user = self.id_user)

		ewutils.logMsg('server {}: {} was killed by {} - cause was {}'.format(self.id_server, self.id_user, self.id_killer, cause))

		return(resp_cont)
예제 #3
0
파일: ew.py 프로젝트: seanialt/endless-war
	def die(self, cause = None):
		time_now = int(time.time())

		ewutils.end_trade(self.id_user)

		if cause == ewcfg.cause_busted:
			self.busted = True
			self.poi = ewcfg.poi_id_thesewers
			#self.slimes = int(self.slimes * 0.9)
		else:
			self.busted = False  # reset busted state on normal death; potentially move this to ewspooky.revive
			self.slimes = 0
			self.slimelevel = 1
			self.clear_mutations()
			self.clear_allstatuses()
			self.totaldamage = 0
			self.bleed_storage = 0
			self.hunger = 0
			self.inebriation = 0
			self.bounty = 0

			ewstats.increment_stat(user = self, metric = ewcfg.stat_lifetime_deaths)
			ewstats.change_stat(user = self, metric = ewcfg.stat_lifetime_slimeloss, n = self.slimes)


			if self.time_expirpvp >= time_now: # If you were Wanted.
				if cause != ewcfg.cause_cliff:
					ewitem.item_dropall(id_server = self.id_server, id_user = self.id_user)

				ewutils.weaponskills_clear(id_server = self.id_server, id_user = self.id_user, weaponskill = ewcfg.weaponskill_min_onrevive)
				self.slimecoin = 0
				self.weaponmarried = False

			if cause == ewcfg.cause_cliff:
				pass
			else:
				if self.life_state == ewcfg.life_state_juvenile: # If you were a Juvenile.
					item_fraction = 4
					food_fraction = 4
					cosmetic_fraction = 4

				else:  # If you were mired in normal Gang Violence, meaning if you were a Rowdy and your killer was a Killer, or vice versa.
					item_fraction = 2
					food_fraction = 2
					cosmetic_fraction = 2
					self.slimecoin = int(self.slimecoin) - (int(self.slimecoin) / 10)

				ewitem.item_dropsome(id_server = self.id_server, id_user = self.id_user, item_type_filter = ewcfg.it_item, fraction = item_fraction) # Drop a random fraction of your items on the ground.
				ewitem.item_dropsome(id_server = self.id_server, id_user = self.id_user, item_type_filter = ewcfg.it_food, fraction = food_fraction) # Drop a random fraction of your food on the ground.

				ewitem.item_dropsome(id_server = self.id_server, id_user = self.id_user, item_type_filter = ewcfg.it_cosmetic, fraction = cosmetic_fraction) # Drop a random fraction of your unadorned cosmetics on the ground.
				ewitem.item_dedorn_cosmetics(id_server = self.id_server, id_user = self.id_user) # Unadorn all of your adorned hats.

				ewitem.item_dropsome(id_server = self.id_server, id_user = self.id_user, item_type_filter = ewcfg.it_weapon, fraction = 1) # Drop random fraction of your unequipped weapons on the ground.
				ewutils.weaponskills_clear(id_server = self.id_server, id_user = self.id_user, weaponskill = ewcfg.weaponskill_max_onrevive)

			self.life_state = ewcfg.life_state_corpse
			self.poi_death = self.poi
			self.poi = ewcfg.poi_id_thesewers
			self.weapon = -1
			self.time_expirpvp = 0

		if cause == ewcfg.cause_killing_enemy:  # If your killer was an Enemy. Duh.
			ewstats.increment_stat(user = self, metric = ewcfg.stat_lifetime_pve_deaths)

		if cause == ewcfg.cause_leftserver:
			ewitem.item_dropall(id_server=self.id_server, id_user=self.id_user)

		self.sap = 0
		self.hardened_sap = 0
		ewutils.moves_active[self.id_user] = 0
		ewstats.clear_on_death(id_server = self.id_server, id_user = self.id_user)

		#ewitem.item_destroyall(id_server = self.id_server, id_user = self.id_user)

		ewutils.logMsg('server {}: {} was killed by {} - cause was {}'.format(self.id_server, self.id_user, self.id_killer, cause))
예제 #4
0
async def revive(cmd):
    resp = await ewcmd.start(cmd=cmd)
    time_now = int(time.time())
    response = ""

    if cmd.message.channel.name != ewcfg.channel_endlesswar and cmd.message.channel.name != ewcfg.channel_sewers:
        response = "Come to me. I hunger. #{}.".format(ewcfg.channel_sewers)
    else:
        roles_map_user = ewutils.getRoleMap(cmd.message.author.roles)

        if ewcfg.role_corpse in roles_map_user:
            player_is_pvp = False

            try:
                conn = ewutils.databaseConnect()
                cursor = conn.cursor()

                player_data = EwUser(member=cmd.message.author,
                                     conn=conn,
                                     cursor=cursor)
                market_data = EwMarket(id_server=cmd.message.server.id,
                                       conn=conn,
                                       cursor=cursor)

                # Endless War collects his fee.
                fee = (player_data.slimecredit / 10)
                player_data.slimecredit -= fee
                market_data.slimes_revivefee += fee

                # Preserve negaslime
                if player_data.slimes < 0:
                    market_data.negaslime += player_data.slimes

                # Give player some initial slimes.
                player_data.slimes = ewcfg.slimes_onrevive

                # Clear fatigue, totaldamage, bounty, killcount.
                player_data.stamina = 0
                player_data.totaldamage = 0
                player_data.bounty = 0
                player_data.kills = 0

                # Clear PvP flag.
                player_data.time_expirpvp = time_now - 1

                # Clear weapon and weaponskill.
                player_data.weapon = ""
                player_data.weaponskill = 0
                ewutils.weaponskills_clear(member=cmd.message.author,
                                           conn=conn,
                                           cursor=cursor)

                # Set time of last revive. This used to provied spawn protection, but currently isn't used.
                player_data.time_lastrevive = time_now

                if (player_data.time_expirpvp > time_now):
                    player_is_pvp = True

                # Set initial slime level. It's probably 2.
                player_data.slimelevel = len(str(player_data.slimes))

                player_data.persist(conn=conn, cursor=cursor)
                market_data.persist(conn=conn, cursor=cursor)

                # Give some slimes to every living player (currently online)
                for member in cmd.message.server.members:
                    if member.id != cmd.message.author.id and member.id != cmd.client.user.id:
                        if ewcfg.role_corpse not in ewutils.getRoleMap(
                                member.roles):
                            member_data = EwUser(member=member,
                                                 conn=conn,
                                                 cursor=cursor)
                            member_data.slimes += ewcfg.slimes_onrevive_everyone
                            member_data.persist(conn=conn, cursor=cursor)

                # Commit all transactions at once.
                conn.commit()
            finally:
                cursor.close()
                conn.close()

            if player_is_pvp:
                await cmd.client.replace_roles(
                    cmd.message.author, cmd.roles_map[ewcfg.role_juvenile],
                    cmd.roles_map[ewcfg.role_juvenile_pvp])
            else:
                await cmd.client.replace_roles(
                    cmd.message.author, cmd.roles_map[ewcfg.role_juvenile])

            response = '{slime4} A geyser of fresh slime erupts, showering Rowdy, Killer, and Juvenile alike. {slime4} {name} has been reborn in slime. {slime4}'.format(
                slime4=ewcfg.emote_slime4,
                name=cmd.message.author.display_name)
        else:
            response = 'You\'re not dead just yet.'

    # Send the response to the player.
    await cmd.client.edit_message(
        resp, ewutils.formatMessage(cmd.message.author, response))