DIEP.IO 프로토콜
DIEP.IO는 탱크, 총알 및 얼룩이있는 작은 온라인 전쟁 게임입니다. 몇 가지 게임 모드가 있지만이 문서는 FFA 모드에만 집중합니다.
- 의사소통
- 데이터 유형
- 패킷 형식
- 패킷
- 서버 바운드
- 클라이언트
의사소통
데이터는 HTTP WebSocket 파이프를 통해 전송됩니다.
데이터 유형
이 게임은 표준 데이터 형식을 사용합니다. 바이트는 큰 엔디 언 순서입니다. 각 유형의 크기는 일정하지 않을 수 있습니다 (예 : 문자열, Varints).
이름 | 크기 (바이트) | 데이터 범위 | 메모 |
---|
UINT8 | 1 | 0에서 255 사이의 정수 | 서명되지 않은 8 비트 정수 |
UINT16 | 2 | 0과 65535 사이의 정수 | 서명되지 않은 16 비트 정수 |
UINT32 | 4 | 0과 4294967295 사이의 정수 | 서명되지 않은 32 비트 정수 |
int8 | 1 | -128과 127 사이의 정수 | 8 비트 정수에 서명했습니다 |
int16 | 2 | -32768과 32767 사이의 정수 | 16 비트 정수에 서명했습니다 |
int32 | 4 | -2147483647과 2147483646 사이의 정수 | 32 비트 정수에 서명했습니다 |
float32 | 4 | 부동 소수점 번호 | 32 비트 정밀도의 부동 소수점 번호 |
플로트 64 | 8 | 부동 소수점 번호 | 64 비트 정밀도의 부동 소수점 번호 |
끈 | ≥ 1 | 가변 길이 UTF-8 문자열 | 바이트 0x00 에 도달하면 문자열이 끝납니다 |
t [i] | ? | 유형의 고정 크기 배열 | 배열에는 모든 유형의 데이터가 포함될 수 있습니다 |
패킷 형식
모든 패킷은 패킷 ID를 나타내는 하나의 바이트로 시작하여 내용이 다음과 같습니다. 패킷이 너무 크면 패킷을 분할 할 수 있지만이 동작은 버퍼 관리자가 자동으로 수정합니다.
유형 | 크기 (바이트) | 메모 |
---|
패킷 ID | 1 | 256 개의 서로 다른 패킷이있을 수 있지만 실제로는 몇 개뿐입니다. 알 수없는 패킷 ID를 보내면 즉시 연결이 닫힙니다. |
콘텐츠 | ≥ 0 | 패킷은 빈 몸체를 가질 수 있습니다 |
패킷
일부 패킷이 누락되어 목적이 완전히 발견되지 않았습니다.
서버 바운드
클라이언트에서 서버로 전송 된 패킷.
요약
패킷 ID | 임의의 이름 | 목적 |
---|
0x00 | 사용자 ID | 연결 초기에 전송 된 플레이어의 ID가 포함되어 있습니다. |
0x01 | 플레이어 제어 | 플레이어가 촬영중인 경우 마우스의 위치와 4 방향 키의 상태를 포함합니다. |
0x02 | 게임을 시작하십시오 | 플레이어가 입력 한 별명이 포함되어 있습니다 |
0x03 | 탱크 업그레이드 | 플레이어가 선택하고자하는 서버에 알려줍니다. |
0x04 | 탱크 진화 | 플레이어가 선택하고 싶어하는 진화 서버에 알려줍니다. |
0x05 | 심장 박동 | 서버는 플레이어가 여전히 온라인 상태인지 확인합니다. 이 패킷은 0.1 초마다 전송됩니다. |
0x00
사용자 ID
필드 | 유형 | 메모 |
---|
사용자 ID | 끈 | 최대 길이가 지정되지 않았습니다 |
0x01
플레이어 컨트롤
필드 | 유형 | 메모 |
---|
? | 8 ~ 10 바이트 | 마우스 위치 (?) |
열쇠 | UINT8 | 비트로 인코딩 된 5 개의 키의 상태 (누르거나 릴리스) |
각 키에 대한 코드는 다음 표에서 찾을 수 있습니다. 각 키 상태는 로직 또는 (= |) 연산자를 사용하여 스택에 추가됩니다.
열쇠 | 코드 (바이트) | 코드 (이진) |
---|
마우스 왼쪽 버튼 | 0x01 | 0b00000001 |
화살표 위로 | 0x02 | 0b00000010 |
화살표가 남았습니다 | 0x04 | 0b00000100 |
화살 아래 | 0x08 | 0b00001000 |
화살표 오른쪽 | 0x10 | 0b00010000 |
0x02
시작 게임
필드 | 유형 | 메모 |
---|
별명 | 끈 | 닉네임의 길이는 0에서 15 사이이어야합니다 |
0x03
탱크 업그레이드
필드 | 유형 | 메모 |
---|
업그레이드 ID | UINT8 | 업그레이드 수준은 중요하지 않습니다 |
업그레이드 ID는 다음 표에서 찾을 수 있습니다.
치받이 | 코드 (바이트) |
---|
건강 재생 | 0x0e |
최대 건강 | 0x0c |
신체 손상 | 0x0a |
총알 속도 | 0x08 |
총알 침투 | 0x06 |
총알 손상 | 0x04 |
새로 고침 | 0x02 |
운동 속도 | 0x00 |
0x04
탱크 진화
필드 | 유형 | 메모 |
---|
탱크 ID | UINT8 | 각 탱크에는 자체 ID가 있습니다 |
탱크 ID는 다음과 같습니다.
층 | 레벨이 필요했습니다 |
---|
0 | 0 |
1 | 15 |
2 | 30 |
3 | 45 |
층 | 탱크 이름 | 후에 얻을 수 있습니다 | 코드 (바이트) |
---|
1 | 쌍 | 정상 | 0x02 |
1 | 측면 가드 | 정상 | 0x10 |
1 | 기관총 | 정상 | 0x0e |
1 | 저격병 | 정상 | 0x0c |
2 | 트리플 샷 | 쌍 | 0x06 |
2 | 쌍둥이 측면 | 쌍둥이 또는 측면 가드 | 0x1a |
2 | 쿼드 탱크 | 쌍둥이 또는 측면 가드 | 0x08 |
2 | 트라이 각도 | 측면 가드 | 0x12 |
2 | 파괴자 | 기관총 | 0x14 |
2 | 포수 | 기관총 | 0x28 |
2 | 암살자 | 저격병 | 0x1e |
2 | 감독 | 저격병 | 0x16 |
2 | 사냥꾼 | 저격병 | 0x26 |
3 | 세 쌍둥이 | 트리플 샷 | 0x04 |
3 | 펜타 샷 | 트리플 샷 | 0x1c |
3 | 트리플 쌍둥이 | 쌍둥이 측면 | 0x24 |
3 | 옥토 탱크 | 트윈 측면 또는 쿼드 탱크 | 0x0a |
3 | 부스터 | 트라이 각도 | 0x2e |
3 | 전투기 | 트라이 각도 | 0x30 |
3 | 잡종 | 파괴자 | 0x32 |
3 | 스토커 | 암살자 | 0x2a |
3 | 레인저 | 암살자 | 0x2c |
3 | 관리자 | 감독 | 0x34 |
3 | 과부하 | 감독 | 0x18 |
3 | 점쟁이 | 감독 | 0x22 |
0x05
하트 비트
이 패킷은 비어 있습니다.
클라이언트
서버에서 클라이언트로 전송 된 패킷.
요약
패킷 ID | 임의의 이름 | 목적 |
---|
0x00 | ? | ? |
0x02 | ? | 때때로 상점 데이터와 리더 보드 (?)가 포함됩니다. |
0x04 | 서버 위치 | 고객에게 위치를 알려줍니다 |
0x05 | 심장 박동 | 클라이언트는 서버가 여전히 온라인 상태인지 확인합니다. 이 패킷은 0.1 초마다 전송됩니다. |
0x00
???
필드 | 유형 | 메모 |
---|
계수기 | UINT8 | 128에서 255까지 수 (?) |
? | ? | ? |
0x02
???
필드 | 유형 | 메모 |
---|
? | ? | ? |
별명 | 문자열 [10] | 서버에서 10 명의 최고의 플레이어 |
? | ? | ? |
점수 | float32 [10] | 그리고 그들의 점수 |
? | ? | ? |
0x04
서버 위치
필드 | 유형 | 메모 |
---|
위치 이름 | 끈 | 서버 위치에 대한 정보가 포함되어 있습니다 |
0x05
하트 비트
이 패킷은 비어 있습니다.