McDuck/tapdata/models.py

74 lines
3.3 KiB
Python
Raw Normal View History

2024-08-29 09:21:58 +00:00
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 = 'Призы'