분야 | 스크립트 |
---|---|
게임버전 | 모든버전 |
주의! 이번 강좌는 글쓴이도 잘 모르는 내용입니다! 그래서 어떤건지 소개만 하고 넘어갈 예정입니다
(저도 연구중)
우선 패킷이란 클라이언트(접속자)와 서버간의 정보를 주고받을때 대표적으로 사용됩니다.
예를 들자면 플레이어가 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://cafe.naver.com/goldbigdragon/86144 , 강좌가 도움이 많이 됬어용)
우선 탭 부분의 /포함 입력값 (/ 탭치니 /만 나오겠네요 )는 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)
YeeV
2020.04.03skript로 패킷을 프로그래밍 할 수 있다니! 놀랍네요.
AGLASS
2020.05.09키야 역시 빛브혼님 감사합니다 ㅎㅎ
logdev
2020.06.30패킷은 서버와 클라이언트 간의 신호라 할 수 있습니다. 하지만 모장은 패킷을 쉽게 사용하게 만들어놓지 않았기 때문에 라이브러리나 여타 다른 것들로 패킷을 만질수 있습니다. 하지만 패킷 쪽 내용은 스크립트로 하기 적합하지 않습니다. 일반 프로그래밍에서의 관리 신호이기 때문이죠.