예제 #1
0
class RunScoreBadge(BadgeBase):
	slug = 'runscore'
	levels = [
		BadgeDetail("Floating point drifter", # Oh lol, thanks to heinrich5991 :)
			"Complete a run with time ending with .999", 50),
		BadgeDetail("Lucky Sevens",
			"Complete a run with time ending with .777", 50),
		BadgeDetail("Spawn of Satan",
			"Complete a run with time ending with .666", 50),
		BadgeDetail("I can see dead zeroes",
			"Complete a run with time ending with .000", 50),
		BadgeDetail("Pi",
			"Complete a run with exactly 3.142 seconds", 50),
	]
	events = [
		'run_finished',
	]
	multiple = False

	def award(self, **state):
		run = state['run']
		time = run.time
		after_dec_point = time % 1 # 7.148 -> 0.148
		if after_dec_point == Decimal('0.999'):
			return BadgeAwarded(level=1)
		if after_dec_point == Decimal('0.777'):
			return BadgeAwarded(level=2)
		if after_dec_point == Decimal('0.666'):
			return BadgeAwarded(level=3)
		if after_dec_point == Decimal('0.000'):
			return BadgeAwarded(level=4)
		if time == Decimal('3.142'):
			return BadgeAwarded(level=5)
예제 #2
0
class RunScoreBadge(BadgeBase):
    slug = "runscore"
    levels = [
        BadgeDetail(
            "Floating point drifter",  # Oh lol, thanks to heinrich5991 :)
            "Complete a run with time ending with .999",
            50,
        ),
        BadgeDetail("Lucky Sevens",
                    "Complete a run with time ending with .777", 50),
        BadgeDetail("Spawn of Satan",
                    "Complete a run with time ending with .666", 50),
        BadgeDetail("I can see dead zeroes",
                    "Complete a run with time ending with .000", 50),
        BadgeDetail("Pi", "Complete a run with exactly 3.142 seconds", 50),
    ]
    events = ["run_finished"]
    multiple = False

    def award(self, **state):
        run = state["run"]
        time = run.time
        remainder = time % 1  # 7.148 -> 0.148
        remainder_map = {
            Decimal("0.999"): BadgeAwarded(level=1),
            Decimal("0.777"): BadgeAwarded(level=2),
            Decimal("0.666"): BadgeAwarded(level=3),
            Decimal("0.000"): BadgeAwarded(level=4),
        }
        remainder_award = remainder_map.get(remainder)
        if remainder_award:
            return remainder_award
        if time == Decimal("3.142"):
            return BadgeAwarded(level=5)
예제 #3
0
class LabRatBadge(BadgeBase):
    slug = "labrat"
    levels = [
        BadgeDetail("Lab Rat", "Participate in Teerace closed beta", 200)
    ]
    events = ["logged_in"]
    multiple = False

    def award(self, **state):
        pass
예제 #4
0
class MinionBadge(BadgeBase):
    slug = "minion"
    levels = [BadgeDetail("Teerace Minion", "Teerace staff member", 200)]
    events = ["logged_in"]
    multiple = False

    def award(self, **state):
        user = state["user"]
        if user.is_staff or user.is_superuser:
            return BadgeAwarded(level=1)
예제 #5
0
class RunCountBadge(BadgeBase):
    slug = "runcount"
    levels = [
        BadgeDetail("Newcomer", "Finish one run", 10),
        BadgeDetail("Experienced", "Finish 100 runs", 30),
        BadgeDetail("Legend", "Finish 1000 runs", 70),
        BadgeDetail("???", "Finish 5000 runs", 200),
    ]
    events = ["run_finished"]
    multiple = False

    def award(self, **state):
        user = state["user"]
        runs = user.profile.completions
        if runs > 5000:
            return BadgeAwarded(level=4)
        if runs > 1000:
            return BadgeAwarded(level=3)
        if runs > 100:
            return BadgeAwarded(level=2)
        return BadgeAwarded(level=1)
예제 #6
0
class HailToTheKingBadge(BadgeBase):
    slug = "hailtotheking"
    levels = [
        BadgeDetail("Hail to the King!",
                    "Make your way to 1st place in global rank", 200)
    ]
    events = ["rank_processed"]
    multiple = False

    def award(self, **state):
        user = state["user"]
        if user.profile.position == 1:
            return BadgeAwarded(level=1)
예제 #7
0
class RuntimeBadge(BadgeBase):
    slug = "runtime"
    levels = [
        BadgeDetail("Happy Hour", "Accumulate one hour of time played", 10),
        BadgeDetail("Hang 10", "Accumulate 10 hours of time played", 30),
        BadgeDetail("Hooked", "Accumulate 24 hours of time played", 70),
    ]
    events = ["run_finished"]
    multiple = False

    def award(self, **state):
        user = state["user"]
        runtime = user.profile.runtime
        # a day
        if runtime > 86400:
            return BadgeAwarded(level=3)
            # 10 hours
        if runtime > 36000:
            return BadgeAwarded(level=2)
            # 1 hour
        if runtime > 3600:
            return BadgeAwarded(level=1)
예제 #8
0
class GlobetrotterBadge(BadgeBase):
    slug = "globetrotter"
    levels = [BadgeDetail("Globetrotter", "Complete 1 run on each map", 20)]
    events = ["run_finished"]
    multiple = False

    def award(self, **state):
        user = state["user"]
        maps = Map.objects.values_list("name", flat=True)
        maps_finished = (Run.objects.filter(user=user).values_list(
            "map__name", flat=True).distinct())
        # check if maps equals to maps_finished
        if set(maps_finished).issuperset(maps):
            return BadgeAwarded(level=1)