def unlock_user_achievements(user, ach_definitions): """Calculate and unlock user activity achievements on SkyLines """ unlocked_achievements = {a.name: a for a in user.achievements} achievements = get_user_achievements(user, ach_definitions) now = datetime.now() newunlocked = [] for a in achievements: if a.name in unlocked_achievements: # This achievement is already unlocked, do not unlock it twice continue newach = UnlockedAchievement(name=a.name, pilot=user, time_achieved=now) newunlocked.append(newach) db.session.add(newach) create_achievement_notification(newach) return newunlocked
def unlock_user_achievements(user, ach_definitions): """Calculate and unlock user activity achievements on SkyLines """ unlocked_achievements = {a.name: a for a in user.achievements} achievements = get_user_achievements(user, ach_definitions) now = datetime.now() newunlocked = [] for a in achievements: if a.name in unlocked_achievements: # This achievement is already unlocked, do not unlock it twice continue newach = UnlockedAchievement(name=a.name, pilot=user, time_achieved=now) newunlocked.append(newach) db.session.add(newach) create_achievement_notification(newach) return newunlocked
def unlock_flight_achievements(flight): """Calculate new flight achievements for the pilot and store them in database. """ pilot = flight.pilot assert pilot is not None unlocked_achievements = {a.name: a for a in pilot.achievements} achievements = get_flight_achievements(flight) newunlocked = [] for a in achievements: time_achieved = flight.landing_time if a.name in unlocked_achievements: # check if flight was started prior the flight in existing # achievement and update both acievement and notification event in # this case. oldach = unlocked_achievements[a.name] if oldach.time_achieved > time_achieved: # reassign the flight oldach.flight = flight oldach.time_achieved = time_achieved # Update achievement event too event = Event.query(achievement_id=oldach.id).one() event.flight = flight else: newach = UnlockedAchievement(name=a.name, pilot=pilot, flight=flight, time_achieved=flight.landing_time) newunlocked.append(newach) db.session.add(newach) create_achievement_notification(newach) return newunlocked
def unlock_flight_achievements(flight): """Calculate new flight achievements for the pilot and store them in database. """ pilot = flight.pilot assert pilot is not None unlocked_achievements = {a.name: a for a in pilot.achievements} achievements = get_flight_achievements(flight) newunlocked = [] for a in achievements: time_achieved = flight.landing_time if a.name in unlocked_achievements: # check if flight was started prior the flight in existing # achievement and update both acievement and notification event in # this case. oldach = unlocked_achievements[a.name] if oldach.time_achieved > time_achieved: # reassign the flight oldach.flight = flight oldach.time_achieved = time_achieved # Update achievement event too event = Event.query(achievement_id=oldach.id).one() event.flight = flight else: newach = UnlockedAchievement(name=a.name, pilot=pilot, flight=flight, time_achieved=flight.landing_time) newunlocked.append(newach) db.session.add(newach) create_achievement_notification(newach) return newunlocked