def step_up(self): # 升阶 if self.step >= HERO_MAX_STEP: raise SanguoException( errormsg.HERO_REACH_MAX_STEP, self.char_id, "Hero Step Up", "Hero {0} reach max step {1}".format(self.id, HERO_MAX_STEP) ) resource_needs = {} cost_gold = external_calculate.Hero.step_up_using_gold(self.model_hero.quality) resource_needs['gold'] = -cost_gold soul_needs_amount = external_calculate.Hero.step_up_using_soul_amount(self.model_hero.quality) hs = HeroSoul(self.char_id) self_soul_amount = hs.soul_amount(self.oid) common_soul_needs = soul_needs_amount - self_soul_amount if common_soul_needs <= 0: # don't need common soul resource_needs['souls'] = [(self.oid, soul_needs_amount)] else: # need common soul resource_needs['stuffs'] = [(22, common_soul_needs)] resource = Resource(self.char_id, "Hero Step Up", 'step up {0}'.format(self.id)) try: resource.check_and_remove(**resource_needs) except SanguoException as e: if e.error_id == errormsg.SOUL_NOT_ENOUGH or e.error_id == errormsg.STUFF_NOT_ENOUGH: raise SanguoException( errormsg.HERO_STEP_UP_ALL_NOT_ENOUGH, self.char_id, "Hero Step Up", "soul not enough" ) raise e # 扣完东西了,开始搞一次 self.hero.progress += 1 if self.hero.progress >= self.max_socket_amount: # 真正的升阶 # 否则仅仅是记录当前状态 self.hero.step += 1 self.hero.progress = 0 hero_step_up_signal.send( sender=None, char_id=self.char_id, hero_id=self.id, new_step=self.hero.step ) self.hero.save() hero_changed_signal.send( sender=None, hero_id=self.id )
def step_up(self): # 升阶 if self.step >= HERO_MAX_STEP: raise SanguoException( errormsg.HERO_REACH_MAX_STEP, self.char_id, "Hero Step Up", "Hero {0} reach max step {1}".format(self.id, HERO_MAX_STEP)) resource_needs = {} cost_gold = self.get_step_up_gold_needs() resource_needs['gold'] = -cost_gold soul_needs_amount = self.get_step_up_soul_needs() resource_needs['souls'] = [(self.oid, soul_needs_amount)] hs = HeroSoul(self.char_id) self_soul_amount = hs.soul_amount(self.oid) common_soul_needs = soul_needs_amount - self_soul_amount if common_soul_needs > 0: # need common soul resource_needs['stuffs'] = [(22, common_soul_needs)] resource = Resource(self.char_id, "Hero Step Up", 'step up {0}'.format(self.id)) try: resource.check_and_remove(**resource_needs) except SanguoException as e: if e.error_id == errormsg.SOUL_NOT_ENOUGH or e.error_id == errormsg.STUFF_NOT_ENOUGH: raise SanguoException(errormsg.HERO_STEP_UP_ALL_NOT_ENOUGH, self.char_id, "Hero Step Up", "soul not enough") raise e # 扣完东西了,开始搞一次 self.hero.progress += 1 if self.hero.progress >= self.max_socket_amount: # 真正的升阶 # 否则仅仅是记录当前状态 self.hero.step += 1 self.hero.progress = 0 hero_step_up_signal.send(sender=None, char_id=self.char_id, hero_id=self.id, new_step=self.hero.step) self.step = self.hero.step self.hero.save() hero_changed_signal.send(sender=None, hero_id=self.id) TimesLogHeroStepUp(self.char_id).inc() if self.step >= 5: ae = ActivityEntry(self.char_id, 40004) if ae: ae.enable(self.step) ActivityStatic( self.char_id).send_update_notify(activity_ids=[40004])
def step_up(self): # 升阶 if self.step >= HERO_MAX_STEP: raise SanguoException( errormsg.HERO_REACH_MAX_STEP, self.char_id, "Hero Step Up", "Hero {0} reach max step {1}".format(self.id, HERO_MAX_STEP)) resource_needs = {} cost_gold = external_calculate.Hero.step_up_using_gold( self.model_hero.quality) resource_needs['gold'] = -cost_gold soul_needs_amount = external_calculate.Hero.step_up_using_soul_amount( self.model_hero.quality) hs = HeroSoul(self.char_id) self_soul_amount = hs.soul_amount(self.oid) common_soul_needs = soul_needs_amount - self_soul_amount if common_soul_needs <= 0: # don't need common soul resource_needs['souls'] = [(self.oid, soul_needs_amount)] else: # need common soul resource_needs['stuffs'] = [(22, common_soul_needs)] resource = Resource(self.char_id, "Hero Step Up", 'step up {0}'.format(self.id)) try: resource.check_and_remove(**resource_needs) except SanguoException as e: if e.error_id == errormsg.SOUL_NOT_ENOUGH or e.error_id == errormsg.STUFF_NOT_ENOUGH: raise SanguoException(errormsg.HERO_STEP_UP_ALL_NOT_ENOUGH, self.char_id, "Hero Step Up", "soul not enough") raise e # 扣完东西了,开始搞一次 self.hero.progress += 1 if self.hero.progress >= self.max_socket_amount: # 真正的升阶 # 否则仅仅是记录当前状态 self.hero.step += 1 self.hero.progress = 0 hero_step_up_signal.send(sender=None, char_id=self.char_id, hero_id=self.id, new_step=self.hero.step) self.step = self.hero.step self.hero.save() hero_changed_signal.send(sender=None, hero_id=self.id)
def _replace_hero(self, socket_id, hero_id): off_hero = self.formation.sockets[str(socket_id)].hero hero_changed_signal.send( sender=None, hero_id=off_hero, ) self.formation.sockets[str(socket_id)].hero = hero_id self.formation.save() socket_changed_signal.send( sender=None, socket_obj=self.formation.sockets[str(socket_id)]) self.send_socket_changed_notify(socket_id, self.formation.sockets[str(socket_id)])
def _replace_hero(self, socket_id, hero_id): off_hero = self.formation.sockets[str(socket_id)].hero hero_changed_signal.send( sender=None, hero_id=off_hero, ) self.formation.sockets[str(socket_id)].hero = hero_id self.formation.save() socket_changed_signal.send( sender=None, socket_obj=self.formation.sockets[str(socket_id)] ) self.send_socket_changed_notify(socket_id, self.formation.sockets[str(socket_id)])
def wuxing_update(self, wuxing_id, souls): # 五行升级 str_id = str(wuxing_id) if str_id not in self.hero.wuxings: raise SanguoException( errormsg.WUXING_NOT_FOR_THIS_HERO, self.char_id, "Hero WuXing Update", "hero {0} has no wuxing {1}".format(self.id, wuxing_id) ) hs = HeroSoul(self.char_id) add_exp = 0 for soul_id, soul_amount in souls: if not hs.has_soul(soul_id, soul_amount): raise SanguoException( errormsg.SOUL_NOT_ENOUGH, self.char_id, "Hero WuXing Update", "soul not enough. {0}: {1}".format(soul_id, soul_amount) ) add_exp += HEROS[soul_id].wuxing_exp * soul_amount wx = HeroWuXing(wuxing_id, self.hero.wuxings[str_id].level, self.hero.wuxings[str_id].exp) wx.update(add_exp) hs.remove_soul(souls) self.hero.wuxings[str_id].level = wx.level self.hero.wuxings[str_id].exp = wx.exp self.hero.save() hero_changed_signal.send( sender=None, hero_id=self.id ) if wx.level >= 5: ae = ActivityEntry(self.char_id, 40003) if ae: ae.enable(wx.level) ActivityStatic(self.char_id).send_update_notify(activity_ids=[40003])
def wuxing_update(self, wuxing_id, souls): # 五行升级 str_id = str(wuxing_id) if str_id not in self.hero.wuxings: raise SanguoException( errormsg.WUXING_NOT_FOR_THIS_HERO, self.char_id, "Hero WuXing Update", "hero {0} has no wuxing {1}".format(self.id, wuxing_id)) hs = HeroSoul(self.char_id) add_exp = 0 for soul_id, soul_amount in souls: if not hs.has_soul(soul_id, soul_amount): raise SanguoException( errormsg.SOUL_NOT_ENOUGH, self.char_id, "Hero WuXing Update", "soul not enough. {0}: {1}".format(soul_id, soul_amount)) add_exp += HEROS[soul_id].wuxing_exp * soul_amount wx = HeroWuXing(wuxing_id, self.hero.wuxings[str_id].level, self.hero.wuxings[str_id].exp) wx.update(add_exp) hs.remove_soul(souls) self.hero.wuxings[str_id].level = wx.level self.hero.wuxings[str_id].exp = wx.exp self.hero.save() hero_changed_signal.send(sender=None, hero_id=self.id) if wx.level >= 5: ae = ActivityEntry(self.char_id, 40003) if ae: ae.enable(wx.level) ActivityStatic( self.char_id).send_update_notify(activity_ids=[40003])
def step_up(self): # 升阶 if self.step >= HERO_MAX_STEP: raise SanguoException( errormsg.HERO_REACH_MAX_STEP, self.char_id, "Hero Step Up", "Hero {0} reach max step {1}".format(self.id, HERO_MAX_STEP) ) resource_needs = {} cost_gold = self.get_step_up_gold_needs() resource_needs['gold'] = -cost_gold soul_needs_amount = self.get_step_up_soul_needs() resource_needs['souls'] = [(self.oid, soul_needs_amount)] hs = HeroSoul(self.char_id) self_soul_amount = hs.soul_amount(self.oid) common_soul_needs = soul_needs_amount - self_soul_amount if common_soul_needs > 0: # need common soul resource_needs['stuffs'] = [(22, common_soul_needs)] resource = Resource(self.char_id, "Hero Step Up", 'step up {0}'.format(self.id)) try: resource.check_and_remove(**resource_needs) except SanguoException as e: if e.error_id == errormsg.SOUL_NOT_ENOUGH or e.error_id == errormsg.STUFF_NOT_ENOUGH: raise SanguoException( errormsg.HERO_STEP_UP_ALL_NOT_ENOUGH, self.char_id, "Hero Step Up", "soul not enough" ) raise e # 扣完东西了,开始搞一次 self.hero.progress += 1 if self.hero.progress >= self.max_socket_amount: # 真正的升阶 # 否则仅仅是记录当前状态 self.hero.step += 1 self.hero.progress = 0 hero_step_up_signal.send( sender=None, char_id=self.char_id, hero_id=self.id, new_step=self.hero.step ) self.step = self.hero.step self.hero.save() hero_changed_signal.send( sender=None, hero_id=self.id ) TimesLogHeroStepUp(self.char_id).inc() if self.step >= 5: ae =ActivityEntry(self.char_id, 40004) if ae: ae.enable(self.step) ActivityStatic(self.char_id).send_update_notify(activity_ids=[40004])