74 lines
3.3 KiB
Python
74 lines
3.3 KiB
Python
|
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 = 'Призы'
|