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