Ejemplo n.º 1
0
 def change_pvp_battles_1x1_victories(self, value):
     with achievements_storage.verify(type=ACHIEVEMENT_TYPE.PVP_BATTLES_1X1,
                                      object=self.hero):
         with achievements_storage.verify(
                 type=ACHIEVEMENT_TYPE.PVP_VICTORIES_1X1, object=self.hero):
             self.hero._model.stat_pvp_battles_1x1_number += value
             self.hero._model.stat_pvp_battles_1x1_victories += value
Ejemplo n.º 2
0
    def create(cls, owner, bill, type):  # pylint: disable=W0622

        with achievements_storage.verify(type=ACHIEVEMENT_TYPE.POLITICS_VOTES_AGAINST, object=owner):
            with achievements_storage.verify(type=ACHIEVEMENT_TYPE.POLITICS_VOTES_FOR, object=owner):
                with achievements_storage.verify(type=ACHIEVEMENT_TYPE.POLITICS_VOTES_TOTAL, object=owner):
                    model = Vote.objects.create(owner=owner._model, bill=bill._model, type=type)

        return cls(model)
Ejemplo n.º 3
0
    def create(cls, owner, bill, type): # pylint: disable=W0622

        with achievements_storage.verify(type=ACHIEVEMENT_TYPE.POLITICS_VOTES_AGAINST, object=owner):
            with achievements_storage.verify(type=ACHIEVEMENT_TYPE.POLITICS_VOTES_FOR, object=owner):
                with achievements_storage.verify(type=ACHIEVEMENT_TYPE.POLITICS_VOTES_TOTAL, object=owner):
                    model = Vote.objects.create(owner=owner._model,
                                                bill=bill._model,
                                                type=type)

        return cls(model)
Ejemplo n.º 4
0
    def apply(self):
        if not self.state.is_VOTING:
            raise exceptions.ApplyBillInWrongStateError(bill_id=self.id)

        if not self.approved_by_moderator:
            raise exceptions.ApplyUnapprovedBillError(bill_id=self.id)

        if self.time_before_voting_end != datetime.timedelta(seconds=0):
            raise exceptions.ApplyBillBeforeVoteWasEndedError(bill_id=self.id)

        self.recalculate_votes()

        self._model.min_votes_percents_required = bills_settings.MIN_VOTES_PERCENT

        results_text = 'Итоги голосования: %d «за», %d «против» (итого %.1f%% «за»), %d «воздержалось».' % (self.votes_for,
                                                                                                            self.votes_against,
                                                                                                            round(self.votes_for_percents, 3)*100,
                                                                                                            self.votes_refrained)

        self._model.voting_end_at = datetime.datetime.now()

        self.applyed_at_turn = TimePrototype.get_current_turn_number()

        with transaction.atomic():

            if self.is_percents_barier_not_passed:
                self.state = BILL_STATE.REJECTED
                self.save()

                PostPrototype.create(ThreadPrototype(self._model.forum_thread),
                                     get_system_user(),
                                     'Законопроект отклонён.\n\n%s' % results_text,
                                     technical=True)

                signals.bill_processed.send(self.__class__, bill=self)
                return False

            self.data.apply(self)

            self.state = BILL_STATE.ACCEPTED

            with achievements_storage.verify(type=ACHIEVEMENT_TYPE.POLITICS_ACCEPTED_BILLS, object=self.owner):
                self.save()

            PostPrototype.create(ThreadPrototype(self._model.forum_thread),
                                 get_system_user(),
                                 'Законопроект принят. Изменения вступят в силу в ближайшее время.\n\n%s' % results_text,
                                 technical=True)


            for actor in self.data.actors:
                if isinstance(actor, places_objects.Place):
                    actor.effects.add(effects.Effect(name='закон №{}'.format(self.id),
                                                     attribute=places_relations.ATTRIBUTE.STABILITY,
                                                     value=-self.type.stability))

        logic.initiate_actual_bills_update(self._model.owner_id)

        signals.bill_processed.send(self.__class__, bill=self)
        return True
Ejemplo n.º 5
0
    def process_rare_operations(self):
        from the_tale.accounts.achievements.storage import achievements_storage
        from the_tale.accounts.achievements.relations import ACHIEVEMENT_TYPE

        from the_tale.game.companions import storage as companions_storage
        from the_tale.game.companions import logic as companions_logic

        current_turn = TimePrototype.get_current_turn_number()

        passed_interval = current_turn - self.last_rare_operation_at_turn

        if passed_interval < heroes_settings.RARE_OPERATIONS_INTERVAL:
            return

        if self.companion is None and random.random(
        ) < float(passed_interval
                  ) / c.TURNS_IN_HOUR / c.COMPANIONS_GIVE_COMPANION_AFTER:
            companions_choices = [
                companion for companion in
                companions_storage.companions.enabled_companions()
                if any(ability.effect.TYPE.is_LEAVE_HERO
                       for ability in companion.abilities.start)
            ]
            if companions_choices:
                self.set_companion(
                    companions_logic.create_companion(
                        random.choice(companions_choices)))

        self.quests.sync_interfered_persons()

        with achievements_storage.verify(type=ACHIEVEMENT_TYPE.TIME,
                                         object=self):
            self.last_rare_operation_at_turn = current_turn
Ejemplo n.º 6
0
    def apply(self):
        if not self.state.is_VOTING:
            raise exceptions.ApplyBillInWrongStateError(bill_id=self.id)

        if not self.approved_by_moderator:
            raise exceptions.ApplyUnapprovedBillError(bill_id=self.id)

        if self.time_before_voting_end != datetime.timedelta(seconds=0):
            raise exceptions.ApplyBillBeforeVoteWasEndedError(bill_id=self.id)

        self.recalculate_votes()

        self._model.min_votes_percents_required = bills_settings.MIN_VOTES_PERCENT

        results_text = u'Итоги голосования: %d «за», %d «против» (итого %.1f%% «за»), %d «воздержалось».' % (
            self.votes_for, self.votes_against,
            round(self.votes_for_percents, 3) * 100, self.votes_refrained)

        self._model.voting_end_at = datetime.datetime.now()

        self.applyed_at_turn = TimePrototype.get_current_turn_number()

        if self.is_percents_barier_not_passed:
            self.state = BILL_STATE.REJECTED
            self.save()

            PostPrototype.create(ThreadPrototype(self._model.forum_thread),
                                 get_system_user(),
                                 u'Законопроект отклонён.\n\n%s' %
                                 results_text,
                                 technical=True)

            signals.bill_processed.send(self.__class__, bill=self)
            return False

        self.data.apply(self)

        self.state = BILL_STATE.ACCEPTED

        with achievements_storage.verify(
                type=ACHIEVEMENT_TYPE.POLITICS_ACCEPTED_BILLS,
                object=self.owner):
            self.save()

        PostPrototype.create(
            ThreadPrototype(self._model.forum_thread),
            get_system_user(),
            u'Законопроект принят. Изменения вступят в силу в ближайшее время.\n\n%s'
            % results_text,
            technical=True)

        for actor in self.data.actors:
            if isinstance(actor, PlacePrototype):
                actor.stability_modifiers.append(
                    (u'закон №%d' % self.id, -self.type.stability))

        logic.initiate_actual_bills_update(self._model.owner_id)

        signals.bill_processed.send(self.__class__, bill=self)
        return True
Ejemplo n.º 7
0
    def set_might(self, might):
        from the_tale.accounts.achievements.relations import ACHIEVEMENT_TYPE
        from the_tale.accounts.achievements.storage import achievements_storage

        Account.objects.filter(id=self.id).update(might=might)

        with achievements_storage.verify(type=ACHIEVEMENT_TYPE.KEEPER_MIGHT, object=self):
            self._model.might = might
Ejemplo n.º 8
0
    def set_might(self, might):
        from the_tale.accounts.achievements.relations import ACHIEVEMENT_TYPE
        from the_tale.accounts.achievements.storage import achievements_storage

        Account.objects.filter(id=self.id).update(might=might)

        with achievements_storage.verify(type=ACHIEVEMENT_TYPE.KEEPER_MIGHT, object=self):
            self._model.might = might
Ejemplo n.º 9
0
    def change_money(self, source, value):

        with achievements_storage.verify(type=ACHIEVEMENT_TYPE.MONEY,
                                         object=self.hero):
            if source.is_EARNED_FROM_LOOT:
                self.money_earned_from_loot += value
            elif source.is_EARNED_FROM_ARTIFACTS:
                self.money_earned_from_artifacts += value
            elif source.is_EARNED_FROM_QUESTS:
                self.money_earned_from_quests += value
            elif source.is_EARNED_FROM_HELP:
                self.money_earned_from_help += value
            elif source.is_EARNED_FROM_HABITS:
                self.money_earned_from_habits += value
            elif source.is_EARNED_FROM_COMPANIONS:
                self.money_earned_from_companions += value
            elif source.is_EARNED_FROM_MASTERS:
                self.money_earned_from_masters += value

            elif source.is_SPEND_FOR_HEAL:
                self.money_spend_for_heal += value
            elif source.is_SPEND_FOR_ARTIFACTS:
                self.money_spend_for_artifacts += value
            elif source.is_SPEND_FOR_SHARPENING:
                self.money_spend_for_sharpening += value
            elif source.is_SPEND_FOR_USELESS:
                self.money_spend_for_useless += value
            elif source.is_SPEND_FOR_IMPACT:
                self.money_spend_for_impact += value
            elif source.is_SPEND_FOR_EXPERIENCE:
                self.money_spend_for_experience += value
            elif source.is_SPEND_FOR_REPAIRING:
                self.money_spend_for_repairing += value
            elif source.is_SPEND_FOR_TAX:
                self.money_spend_for_tax += value
            elif source.is_SPEND_FOR_COMPANIONS:
                self.money_spend_for_companions += value

            else:
                raise exceptions.UnknownMoneySourceError(source=source)
Ejemplo n.º 10
0
    def change_money(self, source, value):

        with achievements_storage.verify(type=ACHIEVEMENT_TYPE.MONEY, object=self.hero):
            if source.is_EARNED_FROM_LOOT:
                self.money_earned_from_loot += value
            elif source.is_EARNED_FROM_ARTIFACTS:
                self.money_earned_from_artifacts += value
            elif source.is_EARNED_FROM_QUESTS:
                self.money_earned_from_quests += value
            elif source.is_EARNED_FROM_HELP:
                self.money_earned_from_help += value
            elif source.is_EARNED_FROM_HABITS:
                self.money_earned_from_habits += value
            elif source.is_EARNED_FROM_COMPANIONS:
                self.money_earned_from_companions += value
            elif source.is_EARNED_FROM_MASTERS:
                self.money_earned_from_masters += value

            elif source.is_SPEND_FOR_HEAL:
                self.money_spend_for_heal += value
            elif source.is_SPEND_FOR_ARTIFACTS:
                self.money_spend_for_artifacts += value
            elif source.is_SPEND_FOR_SHARPENING:
                self.money_spend_for_sharpening += value
            elif source.is_SPEND_FOR_USELESS:
                self.money_spend_for_useless += value
            elif source.is_SPEND_FOR_IMPACT:
                self.money_spend_for_impact += value
            elif source.is_SPEND_FOR_EXPERIENCE:
                self.money_spend_for_experience += value
            elif source.is_SPEND_FOR_REPAIRING:
                self.money_spend_for_repairing += value
            elif source.is_SPEND_FOR_TAX:
                self.money_spend_for_tax += value
            elif source.is_SPEND_FOR_COMPANIONS:
                self.money_spend_for_companions += value

            else:
                raise exceptions.UnknownMoneySourceError(source=source)
Ejemplo n.º 11
0
    def process_rare_operations(self):
        from the_tale.accounts.achievements.storage import achievements_storage
        from the_tale.accounts.achievements.relations import ACHIEVEMENT_TYPE

        from the_tale.game.companions import storage as companions_storage
        from the_tale.game.companions import logic as companions_logic

        current_turn = TimePrototype.get_current_turn_number()

        passed_interval = current_turn - self.last_rare_operation_at_turn

        if passed_interval < conf.heroes_settings.RARE_OPERATIONS_INTERVAL:
            return

        if self.companion is None and random.random() < float(passed_interval) / c.TURNS_IN_HOUR / c.COMPANIONS_GIVE_COMPANION_AFTER:
            companions_choices = [companion for companion in companions_storage.companions.enabled_companions()
                                  if any(ability.effect.TYPE.is_LEAVE_HERO for ability in companion.abilities.start)]
            if companions_choices:
                self.set_companion(companions_logic.create_companion(random.choice(companions_choices)))

        self.quests.sync_interfered_persons()

        with achievements_storage.verify(type=ACHIEVEMENT_TYPE.TIME, object=self):
            self.last_rare_operation_at_turn = current_turn
Ejemplo n.º 12
0
 def change_pve_kills(self, value):
     with achievements_storage.verify(type=ACHIEVEMENT_TYPE.MOBS, object=self.hero):
         self.hero._model.stat_pve_kills += value
Ejemplo n.º 13
0
 def change_pvp_battles_1x1_defeats(self, value):
     with achievements_storage.verify(type=ACHIEVEMENT_TYPE.PVP_BATTLES_1X1, object=self.hero):
         self.hero._model.stat_pvp_battles_1x1_number += value
Ejemplo n.º 14
0
 def change_quests_done(self, value):
     with achievements_storage.verify(type=ACHIEVEMENT_TYPE.QUESTS, object=self.hero):
         self.hero._model.stat_quests_done += value
Ejemplo n.º 15
0
 def change_cards_combined(self, value):
     with achievements_storage.verify(type=ACHIEVEMENT_TYPE.KEEPER_CARDS_COMBINED, object=self.hero):
         self.hero._model.stat_cards_combined += value
Ejemplo n.º 16
0
 def change_pvp_battles_1x1_victories(self, value):
     with achievements_storage.verify(type=ACHIEVEMENT_TYPE.PVP_BATTLES_1X1, object=self.hero):
         with achievements_storage.verify(type=ACHIEVEMENT_TYPE.PVP_VICTORIES_1X1, object=self.hero):
             self.pvp_battles_1x1_number += value
             self.pvp_battles_1x1_victories += value
Ejemplo n.º 17
0
    def apply(self):
        if not self.state.is_VOTING:
            raise exceptions.ApplyBillInWrongStateError(bill_id=self.id)

        if not self.approved_by_moderator:
            raise exceptions.ApplyUnapprovedBillError(bill_id=self.id)

        if self.time_before_voting_end != datetime.timedelta(seconds=0):
            raise exceptions.ApplyBillBeforeVoteWasEndedError(bill_id=self.id)

        self.recalculate_votes()

        self._model.min_votes_percents_required = bills_settings.MIN_VOTES_PERCENT

        results_text = 'Итоги голосования: %d «за», %d «против» (итого %.1f%% «за»), %d «воздержалось».' % (
            self.votes_for, self.votes_against,
            round(self.votes_for_percents, 3) * 100, self.votes_refrained)

        self._model.voting_end_at = datetime.datetime.now()

        self.applyed_at_turn = turn.number()

        with transaction.atomic():

            if self.is_percents_barier_not_passed:
                self.state = BILL_STATE.REJECTED
                self.save()

                PostPrototype.create(ThreadPrototype(self._model.forum_thread),
                                     get_system_user(),
                                     'Запись отклонена.\n\n%s' % results_text,
                                     technical=True)

                signals.bill_processed.send(self.__class__, bill=self)
                return False

            self.data.apply(self)

            self.state = BILL_STATE.ACCEPTED

            with achievements_storage.verify(
                    type=ACHIEVEMENT_TYPE.POLITICS_ACCEPTED_BILLS,
                    object=self.owner):
                self.save()

            PostPrototype.create(
                ThreadPrototype(self._model.forum_thread),
                get_system_user(),
                'Запись одобрена. Изменения вступят в силу в ближайшее время.\n\n%s'
                % results_text,
                technical=True)

            for actor in self.actors:
                if isinstance(actor, places_objects.Place):
                    actor.effects.add(
                        effects.Effect(
                            name='запись №{}'.format(self.id),
                            attribute=places_relations.ATTRIBUTE.STABILITY,
                            value=-self.type.stability))

        logic.initiate_actual_bills_update(self._model.owner_id)

        signals.bill_processed.send(self.__class__, bill=self)
        return True
Ejemplo n.º 18
0
 def change_pve_kills(self, value):
     with achievements_storage.verify(type=ACHIEVEMENT_TYPE.MOBS,
                                      object=self.hero):
         self.hero._model.stat_pve_kills += value
Ejemplo n.º 19
0
 def change_pve_deaths(self, value):
     with achievements_storage.verify(type=ACHIEVEMENT_TYPE.DEATHS,
                                      object=self.hero):
         self.pve_deaths += value
Ejemplo n.º 20
0
 def change_quests_done(self, value):
     with achievements_storage.verify(type=ACHIEVEMENT_TYPE.QUESTS,
                                      object=self.hero):
         self.hero._model.stat_quests_done += value
Ejemplo n.º 21
0
 def change_cards_combined(self, value):
     with achievements_storage.verify(
             type=ACHIEVEMENT_TYPE.KEEPER_CARDS_COMBINED, object=self.hero):
         self.hero._model.stat_cards_combined += value
Ejemplo n.º 22
0
 def change_help_count(self, value):
     with achievements_storage.verify(
             type=ACHIEVEMENT_TYPE.KEEPER_HELP_COUNT, object=self.hero):
         self.hero._model.stat_help_count += value
Ejemplo n.º 23
0
 def change_artifacts_had(self, value):
     with achievements_storage.verify(type=ACHIEVEMENT_TYPE.ARTIFACTS,
                                      object=self.hero):
         self.hero._model.stat_artifacts_had += value
Ejemplo n.º 24
0
 def change_pvp_battles_1x1_defeats(self, value):
     with achievements_storage.verify(type=ACHIEVEMENT_TYPE.PVP_BATTLES_1X1,
                                      object=self.hero):
         self.pvp_battles_1x1_number += value
Ejemplo n.º 25
0
 def change(self, delta):
     with achievements_storage.verify(type=ACHIEVEMENT_TYPE.HABITS_PEACEFULNESS, object=self.owner):
         super(Peacefulness, self).change(delta)
Ejemplo n.º 26
0
 def change(self, delta):
     with achievements_storage.verify(type=ACHIEVEMENT_TYPE.HABITS_HONOR, object=self.owner):
         super(Honor, self).change(delta)
Ejemplo n.º 27
0
 def change(self, delta):
     with achievements_storage.verify(type=ACHIEVEMENT_TYPE.HABITS_PEACEFULNESS, object=self.owner):
         super(Peacefulness, self).change(delta)
Ejemplo n.º 28
0
 def change_cards_used(self, value):
     with achievements_storage.verify(
             type=ACHIEVEMENT_TYPE.KEEPER_CARDS_USED, object=self.hero):
         self.cards_used += value
Ejemplo n.º 29
0
 def change_cards_used(self, value):
     with achievements_storage.verify(type=ACHIEVEMENT_TYPE.KEEPER_CARDS_USED, object=self.hero):
         self.cards_used += value
Ejemplo n.º 30
0
 def change_artifacts_had(self, value):
     with achievements_storage.verify(type=ACHIEVEMENT_TYPE.ARTIFACTS, object=self.hero):
         self.hero._model.stat_artifacts_had += value
Ejemplo n.º 31
0
 def change_help_count(self, value):
     with achievements_storage.verify(type=ACHIEVEMENT_TYPE.KEEPER_HELP_COUNT, object=self.hero):
         self.hero._model.stat_help_count += value
Ejemplo n.º 32
0
 def change(self, delta):
     with achievements_storage.verify(type=ACHIEVEMENT_TYPE.HABITS_HONOR, object=self.owner):
         super(Honor, self).change(delta)
Ejemplo n.º 33
0
 def change_pve_deaths(self, value):
     with achievements_storage.verify(type=ACHIEVEMENT_TYPE.DEATHS, object=self.hero):
         self.pve_deaths += value