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와, 구급대원 권한 확인을 위한 플레이어의 직업 이름 및 등급, 딱 두 가지를 제공합니다.
데이터 흐름
ox_lib콜백을 통해 서버로 쓰기 요청이 전달됩니다. 클라이언트는 절대 신뢰되지 않습니다 — 신원, 권한, 제한, 지속 시간 및 텍스트 정화(sanitising)는 모두 서버 측에서 처리됩니다.- 어노테이션은 캐릭터의 citizen id를 기준으로 MySQL에 저장됩니다.
- 캐릭터의 전체 목록이
bupaStatuses플레이어 statebag에 푸시됩니다. - 주변의 모든 클라이언트가 해당 statebag을 읽고 일치하는 본(bone)에 텍스트를 렌더링합니다.
의존성
| 리소스 | 필수 여부 | 용도 |
|---|---|---|
ox_lib |
예 | 콜백, 알림 및 로케일 시스템 |
oxmysql |
예 | 캐릭터별 어노테이션 저장 |
데이터베이스 테이블은 최초 시작 시 자동으로 생성되므로 — 별도로 임포트할 SQL이 없습니다.