도전 과제
Achievement 모듈을 사용하면 플레이어에게 도전 과제를 부여하거나 초기화하고, 달성 여부를 확인할 수 있습니다. 도전 과제의 진행도도 기록할 수 있습니다.
기본적으로 도전 과제 정보는 영구 데이터 파일에 저장됩니다. Steam 지원을 사용할 수 있고 활성화되어 있으면 Steam과 자동으로 동기화합니다.
Steam 파트너 프로그램에 승인된 제작자만 배포할 수 있도록 Steam 지원은 Ren'Py에 별도로 추가해야 합니다. 설치하려면 “환경설정(preferences)”, “라이브러리 설치(Install libraries)”, “Steam 지원 설치(Install Steam Support)”를 선택하세요.
- achievement.Sync()
achievement.sync()를 호출하는 액션입니다. 도전 과제가 동기화되지 않은 경우에만 활성화됩니다.
- achievement.clear(name)
name 도전 과제를 초기화합니다.
- achievement.clear_all()
모든 도전 과제를 초기화합니다.
- achievement.get_progress(name)
name 도전 과제의 현재 진행도를 반환합니다. 기록된 진행도가 없거나 알 수 없는 도전 과제이면 0을 반환합니다.
- achievement.grant(name)
name 도전 과제가 아직 부여되지 않았다면 부여합니다.
- achievement.has(name)
플레이어에게 name 도전 과제가 부여되었으면 true를 반환합니다.
- achievement.progress(name, complete)
name 도전 과제가 아직 부여되지 않았다면 진행도를 보고합니다. 해당 도전 과제에는 달성에 필요한 양이 정의되어 있어야 합니다.
- name
도전 과제의 이름입니다. 통계 이름이 아니라 도전 과제 이름이어야 합니다.
- complete
도전 과제 달성을 위해 완료한 단위 수를 나타내는 정수입니다.
- achievement.register(name, **kwargs)
도전 과제를 등록합니다. 등록은 필수가 아니지만, 등록하면 백엔드에 정보를 전달할 수 있습니다.
- name
등록할 도전 과제의 이름입니다.
다음 키워드 매개변수는 선택 사항입니다.
- steam
Steam에서 사용할 이름입니다. 지정하지 않으면 name이 기본값입니다.
- stat_max
도전 과제가 잠금 해제되는 통계의 정숫값입니다.
- stat_modulo
진행도를 stat_max로 나눈 나머지가 0이면 사용자에게 진행도를 표시합니다. 예를 들어 stat_modulo가 10이면 진행도가 10, 20, 30 등에 도달할 때 표시합니다. 지정하지 않으면 기본값은 0입니다.
- achievement.sync()
등록된 도전 과제를 로컬 저장소와 다른 백엔드(Steam 등) 사이에서 동기화합니다.
도전 과제를 제어하는 변수는 다음과 같습니다.
- achievement.steam_position = None
None이 아니면 Steam 알림 팝업의 위치를 설정합니다. "top left", "top right", "bottom left", "bottom right" 중 하나인 문자열이어야 합니다.
- define config.steam_appid = None
None이 아니면 Steam appid여야 합니다. Ren'Py는 시작할 때 이 appid를 자동으로 설정합니다. define 문으로 설정해야 합니다.
define config.steam_appid = 12345
- define config.automatic_steam_timeline = True
true이면 Steam에서 실행할 때 게임이 Steam 타임라인을 자동으로 갱신합니다.
현재는 다음 작업을 수행합니다.
save_name변수가 설정되어 있으면 그 값에 맞춰 게임 진행 단계를 갱신합니다.플레이어가 메뉴 안에 있는지 반영하도록 게임 모드를 갱신합니다.
Steamworks API
Steam을 사용할 수 있으면 achievement.steamapi로 Steamworks API의 ctypes 기반 바인딩을 사용할 수 있습니다. 이 바인딩은 여기에 있는 steamapi 모듈의 인스턴스이며 C++ Steamworks API를 Python으로 기계적으로 변환한 것입니다.
또한 Steamworks API를 사용할 수 있을 때에만 achievement.steam 객체의 여러 함수를 사용할 수 있습니다.
- achievement.steam
Steam 초기화에 성공하면 고수준 Steam 메서드가 있는 네임스페이스입니다. 초기화되지 않았으면 None입니다. 메서드를 호출하기 전에 항상 None이 아닌지 확인하세요.
Steam 앱
- achievement.steam.dlc_installed(appid)
dlc가 설치되어 있으면 True, 아니면 False를 반환합니다.
- achievement.steam.dlc_progress(appid)
DLC 다운로드 완료까지의 진행도를 보고합니다.
- achievement.steam.get_app_build_id()
설치된 게임의 빌드 ID를 반환합니다.
- achievement.steam.get_current_beta_name()
현재 베타의 이름을 반환합니다. 확인할 수 없으면 None을 반환합니다.
- achievement.steam.get_current_game_language()
사용자가 선택한 언어의 이름을 반환합니다.
- achievement.steam.get_steam_ui_language()
Steam UI에서 사용하는 언어의 이름을 반환합니다.
- achievement.steam.install_dlc(appid)
appid에 해당하는 DLC의 설치를 요청합니다.
- achievement.steam.is_subscribed_app(appid)
사용자가 appid 앱을 소유하면 true, 아니면 false를 반환합니다.
- achievement.steam.uninstall_dlc(appid)
appid에 해당하는 DLC의 제거를 요청합니다.
Steam 오버레이
- achievement.steam.activate_overlay(dialog)
Steam 오버레이를 활성화합니다.
- dialog
오버레이에서 열 대화 상자입니다. "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements" 중 하나입니다.
- achievement.steam.activate_overlay_to_store(appid, flag=None)
Steam 오버레이에서 스토어를 엽니다.
- appid
열 앱의 appid입니다.
- flag
achievement.steam.STORE_NONE, .STORE_ADD_TO_CART, .STORE_ADD_TO_CART_AND_SHOW 중 하나입니다.
- achievement.steam.activate_overlay_to_web_page(url)
Steam 오버레이를 활성화하고 url의 웹 페이지를 엽니다.
- achievement.steam.is_overlay_enabled()
Steam 오버레이가 활성화되어 있으면 true를 반환합니다. (게임 시작 후 true를 반환하기까지 시간이 걸릴 수 있습니다.)
- achievement.steam.overlay_needs_present()
Steam 오버레이가 활성화되어 있으면 true를 반환합니다. (게임 시작 후 true를 반환하기까지 시간이 걸릴 수 있습니다.)
- achievement.steam.set_overlay_notification_position(position)
Steam 오버레이의 위치를 설정합니다. Position은 achievement.steam.POSITION_TOP_LEFT, .POSITION_TOP_RIGHT, .POSITION_BOTTOM_LEFT, .POSITION_BOTTOM_RIGHT 중 하나여야 합니다.
Steam 통계
- achievement.steam.clear_achievement(name)
name 도전 과제를 초기화합니다. 변경 사항을 서버에 반영하려면
_renpysteam.store_stats()를 호출하세요.
- achievement.steam.get_achievement(name)
name 도전 과제의 상태를 가져옵니다. 부여되었으면 True, 아직 부여되지 않았으면 False, 알 수 없는 도전 과제이거나 오류가 발생하면 None을 반환합니다.
- achievement.steam.get_float_stat(name)
name 통계의 값을 반환합니다. 해당 통계가 없으면 None을 반환합니다.
- achievement.steam.get_int_stat(name)
name 통계의 값을 반환합니다. 해당 통계가 없으면 None을 반환합니다.
- achievement.steam.grant_achievement(name)
name 도전 과제를 부여합니다. 변경 사항을 서버에 반영하려면
_renpysteam.store_stats()를 호출하세요.
- achievement.steam.indicate_achievement_progress(name, cur_progress, max_progress)
사용자에게 도전 과제 진행도를 알립니다. 도전 과제의 잠금을 해제하지는 않습니다.
- achievement.steam.list_achievements()
도전 과제 이름의 목록을 반환합니다.
- achievement.steam.retrieve_stats()
Steam에서 도전 과제와 통계를 가져옵니다.
- achievement.steam.set_float_stat(name, value)
name 통계의 값을 설정합니다. 해당 통계의 자료형은 FLOAT여야 합니다. 변경 사항을 서버에 반영하려면
_renpysteam.store_stats()를 호출하세요.
- achievement.steam.set_int_stat(name, value)
name 통계의 값을 설정합니다. 해당 통계의 자료형은 INT여야 합니다. 변경 사항을 서버에 반영하려면
_renpysteam.store_stats()를 호출하세요.
- achievement.steam.store_stats()
Steam 서버에 통계와 도전 과제를 저장합니다.
Steam 타임라인
- achievement.steam.add_timeline_event(icon, title, description, priority=0, start_offset=0.0, duration=0.0, possible_clip=None)
타임라인에 이벤트를 추가합니다. 여기서 인수 순서는 Steam API와 다릅니다.
- icon
이벤트에 표시할 아이콘입니다. 표준 Steam 아이콘 또는 Steam에 업로드한 아이콘을 나타내는 문자열이어야 합니다.
- title
이벤트 제목입니다.
- description
이벤트 설명입니다.
- priority
충돌 해결에 사용하는 이벤트 우선순위입니다. 0~1000 사이의 정수여야 합니다.
- start_offset
현재 시각을 기준으로 한 이벤트 시작 시각의 오프셋이며 단위는 초입니다.
- duration
이벤트의 지속 시간이며 단위는 초입니다.
- possible_clip
이벤트를 클립으로 만들 수 있는지 결정합니다. achievement.steam.CLIP_PRIORITY... 상수 중 CLIP_PRIORITY_NONE, CLIP_PRIORITY_STANDARD, CLIP_PRIORITY_FEATURED 중 하나여야 합니다.
- achievement.steam.clear_timeline_state_description(time_delta)
타임라인의 현재 상태 설명을 지웁니다.
- achievement.steam.set_timeline_state_description(description, time_delta=0.0)
타임라인의 현재 상태 설명을 설정합니다.
- description
현재 상태의 설명을 나타내는 문자열입니다.
- time_delta
마지막 상태 변경 이후 경과한 시간입니다.
Steam 사용자
- achievement.steam.cancel_ticket()
achievement.steam.get_session_ticket()이 반환한 티켓을 취소합니다.
- achievement.steam.get_account_id()
사용자의 계정 ID를 반환합니다.
- achievement.steam.get_csteam_id()
사용자의 전체 CSteamID를 64비트 숫자로 반환합니다.
- achievement.steam.get_game_badge_level(series, foil)
사용자가 이 게임에서 획득한 Steam 배지의 레벨을 가져옵니다.
- achievement.steam.get_persona_name()
사용자의 공개 이름을 반환합니다.
- achievement.steam.get_session_ticket(identity=None)
서버에 보내 사용자를 인증할 수 있는 티켓을 가져옵니다.
Steam 창작마당
- achievement.steam.get_subscribed_item_path(item_id)
사용자 제작 콘텐츠 항목의 설치 경로를 반환합니다. 설치되지 않았으면 None을 반환합니다.
- item_id
항목 ID입니다.
- achievement.steam.get_subscribed_items(include_disabled=False)
사용자가 Steam 창작마당에서 구독한 항목의 ID 목록을 반환합니다.
- include_disabled
true이면 비활성화된 항목도 포함합니다.