구버전 낮/밤 구분은 어떻게 이루어지나요?
컨텐츠 정보
- 752 조회
- 14 댓글
- 목록
본문
많은분들이 작업해두신 java 서버의 코드를 보고 c++ 과 nodejs 로 서버를 만들어보고 있습니다.
월드에서 낮/밤 을 구분하는 방식이 gametime 이라고하는 옵코드에 시간을 담아서 보내도 낮/밤 구분을 못하던데, 낮과 밤을 처리하는 방식을 혹시 알고 계시면 정보 좀 부탁 드립니다.
gametime 외에 light 가 있어서 패킷을 아무리 날려도 light 는 그냥 어두울때 양초 같은 처리를 하는 패킷인거 같고,
그 외에 패킷은 안보이는거 같은데 도무지 모르겠네요.
월드에서 낮/밤 을 구분하는 방식이 gametime 이라고하는 옵코드에 시간을 담아서 보내도 낮/밤 구분을 못하던데, 낮과 밤을 처리하는 방식을 혹시 알고 계시면 정보 좀 부탁 드립니다.
gametime 외에 light 가 있어서 패킷을 아무리 날려도 light 는 그냥 어두울때 양초 같은 처리를 하는 패킷인거 같고,
그 외에 패킷은 안보이는거 같은데 도무지 모르겠네요.
관련자료
댓글 14
시루비님의 댓글의 댓글
저도 다른 서버팩들 패킷 데이터와 처리 코드를 모두 확인해보니,
world_time: function (time) {
const p = new PacketBuilder();
p.writeC(33);
p.writeD(time);
return p.toBuffer();
},
33번 옵코드가 s_opcode_gametime 으로 자바에서 사용하고 있더라구요.
그래서 시간을 만들어서 보냈는데, 1.63버전 클라이언트를 c++ 과 nodejs 로 서버를 접속해서 테스트해보고 있는데 밤/낮 구분은 명확하게 되는데 화면이 어두워지지를 않아서요.
light 패킷도 옵코드도 별도로 있는거보니 다른 방법이 존재하는건가해서 질문 했습니다.
1.38, 1.63 이 암호화 구조가 비교적 쉬워서 해보고 있는데, 클라이언트 seedkey 보낼때 패킷데이터에 밤/낮 구분하는 값이 따로 있는건지 의심을 해보고 있습니다.
다른 서버팩들을 받아서 테스트해보니 1.63 에 밤이 구현되어 있지 않더라구요.
world_time: function (time) {
const p = new PacketBuilder();
p.writeC(33);
p.writeD(time);
return p.toBuffer();
},
33번 옵코드가 s_opcode_gametime 으로 자바에서 사용하고 있더라구요.
그래서 시간을 만들어서 보냈는데, 1.63버전 클라이언트를 c++ 과 nodejs 로 서버를 접속해서 테스트해보고 있는데 밤/낮 구분은 명확하게 되는데 화면이 어두워지지를 않아서요.
light 패킷도 옵코드도 별도로 있는거보니 다른 방법이 존재하는건가해서 질문 했습니다.
1.38, 1.63 이 암호화 구조가 비교적 쉬워서 해보고 있는데, 클라이언트 seedkey 보낼때 패킷데이터에 밤/낮 구분하는 값이 따로 있는건지 의심을 해보고 있습니다.
다른 서버팩들을 받아서 테스트해보니 1.63 에 밤이 구현되어 있지 않더라구요.
시루비님의 댓글의 댓글
뭐가 다르기 때문인지 모르겠지만, 30번 옵코드를 이용해서 패킷 테스트를 해보니 스킬 옵코드 였습니다.
계속 시간값을 담아서 던지면 클라가 계속 팅겨서 이상해서 확인해보니 30번 옵코드로 스킬번호를 입력해보니 스킬이 스킬창에 추가되네요.
자료를 조금 더 찾아봐야할거 같습니다.
자료실에 2.0 서버팩이 있어서 확인해보니 2.0 버전은 30번이 gametime 으로 되어 있는것 같더라구요.
말씀하신대로 구버전이 옵코드가 거의 안바꼈다면 2.0 버전이 blowfish 암호화 적용된 버전이라 옵코드가 바뀐게 생각됩니다.
시루비님의 댓글의 댓글
말씀주셔서 감사합니다.
제가 구버전 서버 자체를 만들어보는건 처음이라 정확히 기존에 작업하시던분들의 방식이나 용어 사용을 잘몰라 이해가 느린거 같습니다.
1.63 버전 이하는 XOR 패턴으로 패딩 처리만 클라이언트가 요구하는 규칙에 맞도록 빌더를 만드니까 모든 옵코드와 패킷처리가 가능했고 blowfish 는 전혀 사용하지 않고 접속을 해서 구현을 했거든요.
오히려 1.38 은 blowfish 가 아니라, 단방향 암호화 처리만 받고 있어서 1.63 버전하고 처리 방식이 달라서 c++ 로 작업하면서 iocp 를 안쓰고 boost/asio 를 사용해서 작업하고 하는 과정에서 java 서버의 netty 나 hikaricp 같은 통신 라이브러리를 사용하지 않아 생기는 패킷 버퍼의 차이점이 생기는건가? 하는 생각도 해보고 있습니다.
다양한 관점에서 한번 확인해보도록 하겠습니다.
단순히 재미로 만들어보고 있는거라, 이런저런 기능 만들어보다가 왜? 밤이 안되지? 하고 light 패킷을 보내도, gametime 패킷을 보내도 동작을 안하길래 질문글 올렸던것 입니다.
조언 감사합니다.
제가 구버전 서버 자체를 만들어보는건 처음이라 정확히 기존에 작업하시던분들의 방식이나 용어 사용을 잘몰라 이해가 느린거 같습니다.
1.63 버전 이하는 XOR 패턴으로 패딩 처리만 클라이언트가 요구하는 규칙에 맞도록 빌더를 만드니까 모든 옵코드와 패킷처리가 가능했고 blowfish 는 전혀 사용하지 않고 접속을 해서 구현을 했거든요.
오히려 1.38 은 blowfish 가 아니라, 단방향 암호화 처리만 받고 있어서 1.63 버전하고 처리 방식이 달라서 c++ 로 작업하면서 iocp 를 안쓰고 boost/asio 를 사용해서 작업하고 하는 과정에서 java 서버의 netty 나 hikaricp 같은 통신 라이브러리를 사용하지 않아 생기는 패킷 버퍼의 차이점이 생기는건가? 하는 생각도 해보고 있습니다.
다양한 관점에서 한번 확인해보도록 하겠습니다.
단순히 재미로 만들어보고 있는거라, 이런저런 기능 만들어보다가 왜? 밤이 안되지? 하고 light 패킷을 보내도, gametime 패킷을 보내도 동작을 안하길래 질문글 올렸던것 입니다.
조언 감사합니다.
시루비님의 댓글의 댓글
이런 저런 말씀 많이해주셔서 해결 했습니다.
그런데, 1.63 버전 gametime 옵코드는 저는 자료실에 있는 순정클라를 받아서 사용중인데 33번이 맞더라구요.
30번은 스킬 추가에 사용되고 있었습니다.
그리고 주원인은 gametime 은 잘동작하고 있었는데 제가 월드진입때 잘못 파악한 패킷을 같이 던지면서 클라이언트가 월드정보를 잘못 파악하면서 밤이 제대로 표현되지 않았던 상황이었습니다.
그래도 밤/낮을 사용중이신분이 계셔서 몇일 계속 파고들다가 겨우 찾았네요.
덕분에 해결 되었습니다.
감사합니다.














