개인 자료란 (JE)

  서버 커뮤니티

Profile 분열 대표칭호 없음
Profile

강좌 자바 에디션(JE) 플러그인 개발

[ 심화 ] 스크립트로 패킷을 다뤄보자

2020.04.03 조회 수 2538 추천 수 2
분야 스크립트 
게임버전 모든버전 

주의! 이번 강좌는 글쓴이도 잘 모르는 내용입니다! 그래서 어떤건지 소개만 하고 넘어갈 예정입니다

(저도 연구중)


우선 패킷이란 클라이언트(접속자)와 서버간의 정보를 주고받을때 대표적으로 사용됩니다.

예를 들자면 플레이어가 WASD등으로 클라이언트 상에서 움직이게 될경우 "움직임 패킷"에다 어디로 움직였는지에 대한 정보를 담아서 서버로 보내게 됩니다. 서버는 이 패킷을 받아서 그대로 서버에 반영하게 되어 플레이어의 위치가 변하게 되는것이죠.

반대로, 서버에서 클라이언트에게 "움직임 패킷"에다가 좌표를 담아서 보내주게 된다면 클라이언트는 패킷을 받는순간 해당 좌표로 이동한것 처럼 보이게 됩니다. (tp)


대표적으로 Crackshot의 애드온으로 사용되는 CrackshotPlus 플러그인의 화면 반동 구현부도 PlayerPosition의 패킷부분에  

pitch(상하), yaw(좌우)값을 담아서 클라이언트에게 보내게 되고, 클라이언트는 해당 패킷을 받게 되며 화면이 상하, 좌우로 움직이게 됩니다.


우선 패킷을 다루기 위해 Mundosk 혹은 Thatpacketaddon 애드온이 필요합니다.

on packet event %packet%:
      #패킷 이벤트 인식 (event-packet, event-player)
      #Client에서 보낸 패킷을 인식하는 이벤트
command /sendpacket:
      trigger:
             set {_packet} to new %packet% packet 
             #클라이언트로 전송하기 위한 패킷 생성
             set int pnum 0 of {_packet} to field value
             #생성한 패킷에다 패킷 필드 입력
             send %player% packet {_packet}
             #해당 플레이어에게 생성한 패킷 전송

int pnum, string pinfo는 해당 패킷의 필드를 가리키며,

https://forums.skunity.com/threads/packets.320/ 

https://wiki.vg/Protocol 

여기 두곳을 참조하셔서 알아내시는 방법 밖에는 없습니다.ㅜㅜ

만약 클라이언트가 탭 자동완성 (/탭 치면 명령어 뜨는것) 패킷을 보내는걸 예시로 들자면

해당 구문 출처 (https://cafe.naver.com/goldbigdragon/86144 , 강좌가 도움이 많이 됬어용)

a9db350e3f2990b8d2c4820b63b8dc13.png

우선 탭 부분의 /포함 입력값  (/ 탭치니 /만 나오겠네요 )는 Match부분의 string에 저장이 됩니다.

string부분은 위에서부터 찾아봐도 없으니 필드 번호값은 0이 될겁니다.

그러면 해당 패킷의 0번 필드를 가져오면 입력한 명령어를 받아 올 수 있겠죠?

on packet event play_client_tab_complete:
     set {_string} to string field 0 of event-packet
     if {_string} is "/": #/만 포함된 경우
          cancel event #이벤트를 캔슬시킨다. (탭 자동완성 불가능)
     else if {_string} is "/?" #/?를 치고 탭 치는경우
          cancel event

패킷이 어렵긴 하지만 배우다보면 상당히 매력있는 부분이 될거에요. (feat NMS)




3개의 댓글

YeeV
2020.04.03

skript로 패킷을 프로그래밍 할 수 있다니! 놀랍네요.

AGLASS
2020.05.09

키야 역시 빛브혼님 감사합니다 ㅎㅎ

logdev
2020.06.30

패킷은 서버와 클라이언트 간의 신호라 할 수 있습니다. 하지만 모장은 패킷을 쉽게 사용하게 만들어놓지 않았기 때문에 라이브러리나 여타 다른 것들로 패킷을 만질수 있습니다. 하지만 패킷 쪽 내용은 스크립트로 하기 적합하지 않습니다. 일반 프로그래밍에서의 관리 신호이기 때문이죠.

뉴스 및 창작물
/files/thumbnails/483/916/003/262x150.crop.jpg?20241127115329

레드스톤

[노트블럭 커버] 뉴진스 - ETA

노트블럭전문가

2024-11-27

0

/files/thumbnails/150/925/003/262x150.crop.jpg?20241123005717

건축

응답하라 1988 ?

팀뉴일리시

2024-11-23

4

/files/thumbnails/761/908/003/262x150.crop.jpg?20241025153749

건축

서울 숭례문(崇禮門) 5

KHC

2024-10-25

2

/files/thumbnails/578/899/003/262x150.crop.jpg?20241010142350

건축

경주 월정교 1

KHC

2024-10-10

2

/files/thumbnails/219/899/003/262x150.crop.jpg?20241009200950

건축

송전탑+도시 2

dbasd12

2024-10-09

2

/files/thumbnails/246/898/003/262x150.crop.jpg?20241008102328

레드스톤

단다단 - 오토노케(オトノケ) | 마인크래프트 노트블럭 커버

노트블럭전문가

2024-10-08

1

/files/thumbnails/348/896/003/262x150.crop.jpg?20241006103035

디도스/봇테러등등을 낚는 방법 4

물귀신

2024-10-06

3