示例#1
0
	def add_experience(self, d, stat=None):
		if isinstance(d, dict):
			d2 = []
			for s, amt in d.items():
				self.__dict__[s+"_exp"] += amt
				while self.__dict__[s+"_exp"] >= 2 * self.__dict__["base_"+s] + 1:
					self.__dict__[s+"_exp"] -= 2 * self.__dict__["base_"+s] + 1
					self.__dict__["base_"+s] += 1
					if not s in d2:
						d2.append(s)
			self.save()
			self.update_vars(d2)
			return d
		elif isinstance(d, int):
			if stat:
				return self.add_experience({stat:d})
			else:
				from main.utils import distribute
				weights = [1,3,2,2,1,1]
				exp = distribute(d, weights)
				s = ['brawn','charm','finesse','lore','magery','stamina']
				stats = dict(zip(s,exp))
				return self.add_experience(stats)
		else:
			return None
示例#2
0
	def next_round(self):
		from main.utils import distribute
		self.turn += 1
		self.save()
		for hero in self.heros():
			hero.combat_messages.append([])
			hero.save()
		combatants = Combatant.objects.filter(combat=self, alive=True).all()
		magerys = map(lambda s: s.__getattribute__("magery"), combatants)
		num_mp = 5 * len(combatants)
		mp_gains = distribute(num_mp, magerys)
		for i in xrange(len(combatants)):
			combatants[i].mp = min(combatants[i].max_mp, combatants[i].mp + mp_gains[i])
			combatants[i].save()
			Trigger.invoke_triggers(combatants[i], "end of round")