Skip to content

BUPA Sync Status

BUPA Sync Status

BUPA Sync Status는 메디컬 롤플레이를 위한 신체 메모/기록 시스템입니다. 플레이어가 /status를 입력하면 실제 캐릭터 위에 패널이 열립니다. 스크립트 기반 카메라가 의상, 헤어, 문신, 소품이 포함된 실시간 ped를 비추며, 클릭 가능한 부위 마커가 매 프레임 ped의 뼈대에 투영되어 회전할 때도 신체에 완벽히 고정됩니다.

부위를 클릭하여 간단한 메모를 작성할 수 있습니다. 작성된 메모는 주변에 있는 모든 플레이어의 화면에서 해당 신체 부위에 공중으로 띄워져 표시됩니다. 구급대원도 /status <id>를 통해 환자에게 동일한 작업을 수행할 수 있으며, 부상을 기록하고 유지 시간을 선택하면 환자가 만료 전에 임의로 제거할 수 없도록 메모가 잠금 처리됩니다.

/status를 입력하여 자신에게 패널을 엽니다. 구급대원은 /status 12로 환자를 진찰합니다. /statusclear는 제거 권한이 있는 모든 항목을 지웁니다.

주요 기능

  • 실시간 캐릭터 미리보기 — 마네킹이나 2D 인형을 사용하지 않습니다. 카메라는 플레이어의 실제 ped를 비추며, AutoFrame이 머리부터 발끝까지 측정하여 모든 모델이 올바르게 프레임에 담기고 마커는 실제 본(bone) 좌표에 위치합니다.
  • 16개의 신체 부위 — 머리, 목, 가슴, 복부, 팔, 전완부, 손, 허벅지, 무릎, 발로 구성되며, 각각 GTA ped 본에 바인딩되어 있고 config에서 각각 제외할 수 있습니다.
  • 월드 내 플로팅 텍스트 — 다른 플레이어가 신체에 직접 부착된 어노테이션을 읽을 수 있으며, 심각도에 따라 색상이 다르게 표시되고, 프레임별 네트워킹 없이 플레이어 statebag을 통해 어노테이션이 동기화됩니다.
  • 구급대원 기록 — 설정된 직업(또는 ACE)을 가진 플레이어가 일정 거리 내의 다른 플레이어를 기록하고, 프리셋 목록에서 지속 시간을 선택하며, 제거할 수 없도록 잠긴 메모를 남길 수 있습니다.
  • 자동 만료 — 서버가 타이머에 따라 만료된 어노테이션을 주기적으로 정리하며, 사용자가 직접 처리할 필요 없이 모든 곳에서 자동으로 사라집니다.
  • 유형 및 심각도 — 부상 / 붕대 / 메모, 경미 / 보통 / 심각, 모두 일반 config 목록으로 정의됩니다.
  • 어뷰징 방지 제한 — 캐릭터별 제한, 부위당 하나의 어노테이션, 텍스트 길이 제한, 작성 쿨다운, 모든 작업에 대한 거리 확인.
  • Discord 로깅 — 어노테이션 추가, 제거, 초기화 시 색상별 임베드 제공 (작성자, 대상, 지속 시간 포함).
  • 10개 언어 지원ox_lib의 로케일 시스템을 통해 제공되며, 영어는 기본값으로 작동합니다.

프레임워크

프레임워크는 shared/bridge.lua를 통해 자동으로 감지되므로 별도로 설정할 필요가 없습니다:

프레임워크 감지되는 리소스
QBox qbx_core
QB-Core qb-core
ESX es_extended
Standalone 없음 — license: 식별자로 대체됨

프레임워크는 데이터베이스 키로 사용되는 고유한 캐릭터별 ID와, 구급대원 권한 확인을 위한 플레이어의 직업 이름 및 등급, 딱 두 가지를 제공합니다.

데이터 흐름

  1. ox_lib 콜백을 통해 서버로 쓰기 요청이 전달됩니다. 클라이언트는 절대 신뢰되지 않습니다 — 신원, 권한, 제한, 지속 시간 및 텍스트 정화(sanitising)는 모두 서버 측에서 처리됩니다.
  2. 어노테이션은 캐릭터의 citizen id를 기준으로 MySQL에 저장됩니다.
  3. 캐릭터의 전체 목록이 bupaStatuses 플레이어 statebag에 푸시됩니다.
  4. 주변의 모든 클라이언트가 해당 statebag을 읽고 일치하는 본(bone)에 텍스트를 렌더링합니다.

의존성

리소스 필수 여부 용도
ox_lib 콜백, 알림 및 로케일 시스템
oxmysql 캐릭터별 어노테이션 저장

데이터베이스 테이블은 최초 시작 시 자동으로 생성되므로 — 별도로 임포트할 SQL이 없습니다.