def handle(self, *args, **options):
        with transaction.atomic():
            ladder = LadderSettings.get_solo()
            ladder.current_season += 1
            ladder.save()

            for player in Player.objects.all():
                PlayerManager.init_score(player)
    def handle(self, *args, **options):
        for player in Player.objects.all():
            initial_mmr = PlayerManager.dota_to_ladder_mmr(player.dota_mmr)

            print('Player: %s   Dota MMR: %s   Ladder MMR: %s' % \
                  (player, player.dota_mmr, initial_mmr))

            player.min_allowed_mmr = initial_mmr - 20
            player.max_allowed_mmr = initial_mmr + 20
            player.save()

            print('min: %s   max: %s' % \
                  (player.min_allowed_mmr, player.max_allowed_mmr))
            print()

            if player.ladder_mmr < player.min_allowed_mmr:
                ScoreChange.objects.create(
                    player=player,
                    score_change=0,
                    mmr_change=player.min_allowed_mmr - player.ladder_mmr,
                    info='Introducing MMR boundaries',
                )
            elif player.ladder_mmr > player.max_allowed_mmr:
                ScoreChange.objects.create(
                    player=player,
                    score_change=0,
                    mmr_change=player.max_allowed_mmr - player.ladder_mmr,
                    info='Introducing MMR boundaries',
                )
Beispiel #3
0
    def save(self, *args, **kwargs):
        # TODO: Move this to clean_fields() later
        # TODO: (can't do it atm, because of empty dota_id in test data).
        # TODO: Or even better move this to manager.update_scores()
        # TODO  (this will allow us bulk_update in future)
        self.score = max(self.score or 0, 0)
        self.ladder_mmr = max(self.ladder_mmr or 0, 0)

        created = not self.pk
        if created:
            self.roles = RolesPreference.objects.create()

        super(Player, self).save(*args, **kwargs)

        # give player initial score and mmr
        if created:
            PlayerManager.init_score(self, reset_mmr=True)
Beispiel #4
0
class Player(models.Model):
    name = models.CharField(max_length=200, unique=True)
    dota_mmr = models.PositiveIntegerField()
    dota_id = models.CharField(max_length=200, null=True, blank=True)
    discord_id = models.CharField(max_length=200, null=True, blank=True)
    slug = AutoSlugField(populate_from='name')

    ladder_mmr = models.PositiveIntegerField(default=0)
    score = models.PositiveIntegerField(default=0)
    rank_ladder_mmr = models.PositiveIntegerField(default=0)
    rank_score = models.PositiveIntegerField(default=0)

    voice_issues = models.BooleanField(default=False)
    bot_access = models.BooleanField(default=False)
    vouched = models.BooleanField(default=False)
    blacklist = models.ManyToManyField('self',
                                       symmetrical=False,
                                       related_name='blacklisted_by')

    # boundaries for ladder mmr
    min_allowed_mmr = models.PositiveIntegerField(default=0)
    max_allowed_mmr = models.PositiveIntegerField(default=0)

    # ban levels
    BAN_PLAYING = 1
    BAN_PLAYING_AND_LOBBY = 2
    BAN_CHOICES = (
        (None, "Not banned"),
        (BAN_PLAYING, 'Banned from playing only'),
        (BAN_PLAYING_AND_LOBBY, 'Banned from playing and lobby'),
    )
    banned = models.PositiveSmallIntegerField(choices=BAN_CHOICES,
                                              null=True,
                                              blank=True)

    new_reg_pings = models.BooleanField(default=False)
    queue_afk_ping = models.BooleanField(default=True)

    description = models.CharField(max_length=200, null=True, blank=True)
    vouch_info = models.CharField(max_length=200, null=True, blank=True)

    roles = AutoOneToOneField(RolesPreference)

    objects = PlayerManager()

    class Meta:
        ordering = ['rank_ladder_mmr']

    def __str__(self):
        return '%s' % self.name

    @property
    def filter_mmr(self):
        filter = LadderSettings.get_solo().queue_mmr_filter
        return self.dota_mmr if filter == LadderSettings.DOTA_MMR else self.ladder_mmr

    def save(self, *args, **kwargs):
        # TODO: Move this to clean_fields() later
        # TODO: (can't do it atm, because of empty dota_id in test data).
        # TODO: Or even better move this to manager.update_scores()
        # TODO  (this will allow us bulk_update in future)
        self.score = max(self.score or 0, 0)
        self.ladder_mmr = max(self.ladder_mmr or 0, 0)

        created = not self.pk
        if created:
            self.roles = RolesPreference.objects.create()

        super(Player, self).save(*args, **kwargs)

        # give player initial score and mmr
        if created:
            PlayerManager.init_score(self, reset_mmr=True)