from django.db import models from users.models import User from django.utils import timezone from datetime import timedelta from django.utils.translation import gettext_lazy as _ class Farming(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) coins_per_min = models.BigIntegerField('Монет за мин', default=1, blank=True) coins = models.BigIntegerField('Количество MCDK', default=0, blank=True) start_time = models.DateTimeField('Время и дата начала фарминга', null=True, blank=True) percent = models.IntegerField("Дополнительные проценты фарминга", default=0) is_auto_collection_active = models.BooleanField('Автосбор активен', default=False) auto_collection_end_time = models.DateTimeField('Время окончания автосбора', null=True, blank=True) bonus_multiplier = models.FloatField('Множитель скорости фарминга', default=1.0, blank=True) bonus_end_time = models.DateTimeField('Время окончания бонуса', null=True, blank=True) def __str__(self): return f'{self.user.username} имеет {self.coins} MCDK' class Meta: verbose_name = 'Данные фарминга' verbose_name_plural = 'Данные фармингов' def apply_auto_collection(self, duration_days): self.is_auto_collection_active = True self.auto_collection_end_time = timezone.now() + timedelta(days=duration_days) self.save() def apply_bonus_multiplier(self, percent, duration_days): self.bonus_multiplier = 1 + (percent / 100) self.bonus_end_time = timezone.now() + timedelta(days=duration_days) self.save() def update_farming(self): current_time = timezone.now() # Обновление авто-сбора if self.is_auto_collection_active and self.auto_collection_end_time < current_time: self.is_auto_collection_active = False self.auto_collection_end_time = None self.save() # Обновление бонусного множителя if self.bonus_multiplier > 1.0 and self.bonus_end_time < current_time: self.bonus_multiplier = 1.0 self.bonus_end_time = None self.save() # Обновление монет с учетом бонусного множителя self.coins += self.coins_per_min * self.bonus_multiplier self.save() # Призы с колеса фортуны class Prizes(models.Model): class PrizeTypeEnum(models.TextChoices): COINS = 'CN', _('Coins') ACCELERATION = 'AL', _('Acceleration') AUTO_COLLECTION = 'AC', _('Auto_collection') prize_type = models.CharField('Тип приза', choices=PrizeTypeEnum.choices, max_length=250) time = models.IntegerField('Время награды в днях', null=True, blank=True) coins = models.BigIntegerField('Количество MCDK (Необязательно)', null=True, blank=True) percent = models.IntegerField('Процент (Необязательно)', null=True, blank=True) def __str__(self): return f'Тип приза - {self.prize_type}' class Meta: verbose_name = 'Приз' verbose_name_plural = 'Призы'