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
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)
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
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
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
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
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)
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
def change_pve_kills(self, value): with achievements_storage.verify(type=ACHIEVEMENT_TYPE.MOBS, object=self.hero): self.hero._model.stat_pve_kills += value
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
def change_quests_done(self, value): with achievements_storage.verify(type=ACHIEVEMENT_TYPE.QUESTS, object=self.hero): self.hero._model.stat_quests_done += value
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
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
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
def change_pve_deaths(self, value): with achievements_storage.verify(type=ACHIEVEMENT_TYPE.DEATHS, object=self.hero): self.pve_deaths += value
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
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
def change_artifacts_had(self, value): with achievements_storage.verify(type=ACHIEVEMENT_TYPE.ARTIFACTS, object=self.hero): self.hero._model.stat_artifacts_had += value
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
def change(self, delta): with achievements_storage.verify(type=ACHIEVEMENT_TYPE.HABITS_PEACEFULNESS, object=self.owner): super(Peacefulness, self).change(delta)
def change(self, delta): with achievements_storage.verify(type=ACHIEVEMENT_TYPE.HABITS_HONOR, object=self.owner): super(Honor, self).change(delta)
def change_cards_used(self, value): with achievements_storage.verify( type=ACHIEVEMENT_TYPE.KEEPER_CARDS_USED, object=self.hero): self.cards_used += value
def change_cards_used(self, value): with achievements_storage.verify(type=ACHIEVEMENT_TYPE.KEEPER_CARDS_USED, object=self.hero): self.cards_used += value
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