전일 아카이브

DJMAX RESPECT V 비공식 기록 저장 및 랭킹 페이지를 제작했습니다.

  8/23/2023

JavaScript
Python

프로젝트 소개

게임 DJMAX RESPECT V에는 타인의 기록을 확인할 수 있는 랭킹 시스템이 있습니다. 게임에는 '노멀 판정' 모드, 강화된 '하드 판정' 모드 그리고 '맥스 판정' 모드가 있지만, 노멀 판정 모드의 랭킹 정보만 제공하고 있습니다.

그래서 유저들이 모여 구글 시트를 이용해 '하드 판정' 랭킹 시스템을 구축하고 운영하고 있었습니다.

게임이 업데이트되면서 시트 관리의 어려움 및 랭킹 시스템의 몇몇 문제들이 생겨 웹 사이트 형태로 제작하게 되었습니다.

웹 사이트 소개

전일 아카이브 웹 사이트

게임 DJMAX RESPECT V의 하드 판정 및 맥스 판정 모드의 랭킹 및 레이팅 기능을 제공합니다.

(* '전일 아카이브' 웹 사이트는 DJMAX RESPECT V의 공식 사이트 및 프로젝트가 아닙니다.)

점수 구조 설명

점수: 게임에서 달성한 점수

달성 판정: 게임에서 달성한 판정 (정확도)

환산 점수: 점수를 달성 공식(점수 구간에 따라 반영 비율 및 가중치가 다름)으로 환산한 점수 값

레이팅 점수: 환산 점수를 난이도로 환산한 점수 값

레이팅: 해당 플레이어의 버튼별 레이팅 점수가 높은 50개의 평균 값

퍼펙트 점수: 달성 판정이 100%라면 획득하는 점수 (난이도마다 획득 점수가 다름)

기능 소개

기록 등록 및 조회

해당 화면은 사이트에 기록을 등록하는 메뉴입니다.


기록을 등록하려면 우선 몇가지 분류를 선택합니다. (버튼, 난이도)

이후 '곡 검색하기' 버튼을 클릭해 선택한 분류에 해당되는 패턴을 선택합니다.


게임 플레이 결과를 입력합니다. (판정 모드, 달성 점수, 달성 판정)


해당 기록을 증명하기 위한 스크린샷 혹은 유튜브 영상 링크를 첨부하고 저장합니다.


이후 기록 관리자가 유효성 여부를 확인하고 사이트에 공개됩니다.

유저가 자신이 등록한 기록을 조회하는 메뉴입니다.


먼저 정렬 조건을 설정해야합니다. (등록 시점, 점수, 오름차순, 내림차순)

그리고 기록을 조회하기 위해 필터를 설정합니다. 추가한 필터는 클릭해 취소할 수 있고 중복 설정이 불가능합니다. (= 점수 필터는 1개만 설정 가능)

필터는 점수(혹은 판정, 승인 여부, ...)가 350000점(혹은 100%, 참거짓, ...) 이상(혹은 미만, 같음)의 조건을 조합해 사용합니다.

버튼별 기록 페이지

동일한 노래여도 버튼에 따라 게임 난이도(패턴)가 달라집니다.

따라서 버튼별 기록 페이지에서는 간략한 노래 정보와 각 패턴별 1위 기록을 표시하고 있습니다.

난이도를 클릭하면 해당 패턴의 전체 랭킹 메뉴로 이동할 수 있습니다.

레이팅 및 랭킹

레이팅이란, 각 패턴의 점수와 기록을 내부 공식를 활용하여 레이팅 점수를 계산하고 점수가 높은 50개의 평균 값을 말합니다. (* 전일 아카이브 사이트 기준, 다른 게임이나 서비스에서는 기준이 다를 수 있습니다.)

또 레이팅은 버튼별로 계산됩니다. 버튼별 상위 10명은 종합 레이팅 랭킹 페이지에 노출되며 나머지 순위는 버튼별 레이팅 랭킹 페이지에서 확인할 수 있습니다.


레이팅은 해당 유저의 실력을 보여주는 장치로도 사용됩니다. 따라서 점수 구간마다 폰트 색상을 다르게 설정하고 있습니다. (일종의 수집 및 칭호 시스템)

팀 랭킹 시스템

팀 점수는 팀원들의 환산 점수의 평균 값을 사용합니다. 따라서 1인팀을 만들 경우 점수 패널티가 있습니다. (팀원은 팀장을 포함해서 최대 10명까지 구성할 수 있습니다.)

이때 팀원들의 환산 점수는 현재 진행되는 시즌에 달성한 기록만 포함시킵니다. 따라서 팀 점수 및 랭킹은 시즌마다 초기화됩니다.


추가로 팀 점수가 0점보다 작다면 유령 팀으로 취급해 랭킹 및 팀 목록 페이지에서 표시하지 않습니다.

팀 관리 메뉴

팀장은 팀을 만든 사람으로 정해지며, 관리 메뉴를 사용할 수 있습니다.

기본 설정 메뉴에서는 팀의 이름 및 설명을 설정할 수 있습니다. 이름은 중복될 수 없으며 랭킹에 표시됩니다. 설명은 팀 목록 메뉴와 정보 메뉴에 표시됩니다.

가입 코드 메뉴에서는 팀에 가입하려면 필요한 코드를 확인하거나 재설정할 수 있습니다.

꾸미기 메뉴에서는 팀의 아이콘으로 사용할 이미지 파일을 업로드 할 수 있습니다.

강제 점수 계산 메뉴는 팀 점수를 다시 계산하는 기능입니다. 기본적으로 팀 점수는 소속 유저가 기록을 등록하면 반영됩니다. 따라서 자주 사용되지 않는 만약을 대비한 메뉴입니다.

백그라운드 작업

APScheduler를 이용해 제작된 백그라운드 프로그램은 특정 작업이 일정 시간마다 실행됩니다.

# 하드 판정 퍼펙트 현황 계산
add_cron(hard_perfect, minute="*/5")
# 맥스 저지 빈집 현황 계산
add_cron(max_count, minute="*/5")
# 전일 랭킹 계산
add_cron(top_rank_rate, minute=0)
# 종합 랭킹 계산
add_cron(ranking, minute="*/10")
# 레이팅 계산
add_cron(rating, minute=0)

각 작업의 중요도의 따라 몇분마다 혹은 정각마다 실행되도록 설정되어있습니다.