게시판 제목 잘보고 올리세요 일반게시판에 홍보글 보이면 바로 회원 차단입니다

구버전 낮/밤 구분은 어떻게 이루어지나요?

컨텐츠 정보

본문

많은분들이 작업해두신 java 서버의 코드를 보고 c++ 과 nodejs 로 서버를 만들어보고 있습니다.
월드에서 낮/밤 을 구분하는 방식이 gametime 이라고하는 옵코드에 시간을 담아서 보내도 낮/밤 구분을 못하던데, 낮과 밤을 처리하는 방식을 혹시 알고 계시면 정보 좀 부탁 드립니다.

gametime 외에 light 가 있어서 패킷을 아무리 날려도 light 는 그냥 어두울때 양초 같은 처리를 하는 패킷인거 같고,
그 외에 패킷은 안보이는거 같은데 도무지 모르겠네요.

관련자료

댓글 14
profile_image

얌야밍님의 댓글

서버 옵코드 중에 GameTime 이라는게 있구요
저 옵코드를 통해서 인게임 WorldTime을 같이 보내주면
클라이언트에서 아~ 지금 시간은 이렇구나 하고 알아서 시간을 바꿔서 표현 합니다
profile_image

시루비님의 댓글의 댓글

저도 다른 서버팩들 패킷 데이터와 처리 코드를 모두 확인해보니,

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 에 밤이 구현되어 있지 않더라구요.
profile_image

얌야밍님의 댓글의 댓글

1.38
1.44
1.63
1.82
2.0

모두 게임 시간 옵코드는 33번이 아니라 30번 입니다...

게임내에 보안관련 해서 패킷을 수정하지 않던 시절이라 2.0 이하 버전은 모든 옵코드가 동일합니다.
지원을 안하는 옵코드는 있을지언정 다 똑같아요
profile_image

얌야밍님의 댓글의 댓글

혹시 몰라서 163에서 직접 확인도 해봤는데 30번으로 보내면 밤낮 잘 바꿔집니다.
공개된 팩 중 일부는 일부러 밤시간을 없애서 world 타이머에서 서버 시간을 안보내도록 주석처리 한 팩들이 있어요
World.java 를 확인해보시면 toTimer 에서 월드 시간 전송을 일부러 막아둔게 아니면 정상적으로 나올거에요
profile_image

시루비님의 댓글의 댓글

감사합니다.
다른 서버팩 소스코드 보고 확인해봐야겠네요.

방금 제가 만들고 있는 서버에 30번으로 패킷을 던지니까 바로 팅겨버려서 뭔가 다른 문제가 있는지 확인해보려고 다른 서버팩 좀 찾아보고 있습니다.
profile_image

시루비님의 댓글의 댓글



뭐가 다르기 때문인지 모르겠지만, 30번 옵코드를 이용해서 패킷 테스트를 해보니 스킬 옵코드 였습니다.
계속 시간값을 담아서 던지면 클라가 계속 팅겨서 이상해서 확인해보니 30번 옵코드로 스킬번호를 입력해보니 스킬이 스킬창에 추가되네요.

자료를 조금 더 찾아봐야할거 같습니다.
자료실에 2.0 서버팩이 있어서 확인해보니 2.0 버전은 30번이 gametime 으로 되어 있는것 같더라구요.
말씀하신대로 구버전이 옵코드가 거의 안바꼈다면 2.0 버전이 blowfish 암호화 적용된 버전이라 옵코드가 바뀐게 생각됩니다.
profile_image

얌야밍님의 댓글의 댓글

연구소 소통방 오시면 제가 잘 작동하는거 영상으로 보여드리겠는데.. 163에서 테스트 했고 30번 날려서 적용 잘 되더라고요
profile_image

얌야밍님의 댓글의 댓글

그리고 2.0이나 1.63이나 블로우피쉬도 동일하게 씁니다..
뭔가 잘못 알고 계시는거 같은데 2.0 서버팩으로 1.38 1.44 1.71 1.82 2.0 현존하는 2.0 이하 순수 클라이언트는 전부 접속 잘 됩니다. 옵코드가 거의 안바뀐게 아니라 그냥 아예 안바뀌고 2.0 까지 올라오면서 추가만 된거에요

별도의 암호화도 없고요.. 로그인 했는데 캐선하면 팅기는건 그 클라이언트에서 제공하는 spr 이 없어서 그런거고요...
profile_image

시루비님의 댓글의 댓글

말씀주셔서 감사합니다.
제가 구버전 서버 자체를 만들어보는건 처음이라 정확히 기존에 작업하시던분들의 방식이나 용어 사용을 잘몰라 이해가 느린거 같습니다.
1.63 버전 이하는 XOR 패턴으로 패딩 처리만 클라이언트가 요구하는 규칙에 맞도록 빌더를 만드니까 모든 옵코드와 패킷처리가 가능했고 blowfish 는 전혀 사용하지 않고 접속을 해서 구현을 했거든요.
오히려 1.38 은 blowfish 가 아니라, 단방향 암호화 처리만 받고 있어서 1.63 버전하고 처리 방식이 달라서 c++ 로 작업하면서 iocp 를 안쓰고 boost/asio 를 사용해서 작업하고 하는 과정에서 java 서버의 netty 나 hikaricp 같은 통신 라이브러리를 사용하지 않아 생기는 패킷 버퍼의 차이점이 생기는건가? 하는 생각도 해보고 있습니다.

다양한 관점에서 한번 확인해보도록 하겠습니다.
단순히 재미로 만들어보고 있는거라, 이런저런 기능 만들어보다가 왜? 밤이 안되지? 하고 light 패킷을 보내도, gametime 패킷을 보내도 동작을 안하길래 질문글 올렸던것 입니다.

조언 감사합니다.
profile_image

얌야밍님의 댓글의 댓글









일단 테스트 한 사진은 올려드립니다~ C++ 서버 기대 할게요
profile_image

시루비님의 댓글의 댓글

오우.. 진짜 잘되고 계시네요.
왜 제 서버는 30번이 스킬로 인식하고 있는지 다시 좀 구석구석 뜯어서 테스트해봐야겠네요.
의심되는건 처음 클라이언트와 주고 받는 seed 값으로 serverversion 패킷을 쏘는데, 이게 제가 받아서 확인한 팩마다 값이 조금씩 다르길래 이게 왜 다르지? 했는데, 이런 부분들부터 제가 뭘 놓친건지 시간될때 하나씩 열어봐야겠네요.

도움 말씀 감사합니다!
많은 도움 되었습니다.
profile_image

시루비님의 댓글의 댓글



이런 저런 말씀 많이해주셔서 해결 했습니다.
그런데, 1.63 버전 gametime 옵코드는 저는 자료실에 있는 순정클라를 받아서 사용중인데 33번이 맞더라구요.
30번은 스킬 추가에 사용되고 있었습니다.

그리고 주원인은 gametime 은 잘동작하고 있었는데 제가 월드진입때 잘못 파악한 패킷을 같이 던지면서 클라이언트가 월드정보를 잘못 파악하면서 밤이 제대로 표현되지 않았던 상황이었습니다.

그래도 밤/낮을 사용중이신분이 계셔서 몇일 계속 파고들다가 겨우 찾았네요.
덕분에 해결 되었습니다.
감사합니다.
profile_image

시루비님의 댓글의 댓글




시간 패킷도 잘 동작합니다.
감사합니다!
profile_image

얌야밍님의 댓글의 댓글

자바 소스 상에서는 1~103번 까지 지정 해두고 쓰는데
DB에서 읽어올때 1,8,9 번 옵코드 없이 읽어와서 33번 쓰는게 맞네요
하도 오래전에 한번 맞춰놓고 잊고 있었습니다 
잘 된다니 다행이네요
전체 4 / 1 페이지
번호
제목
이름

포인트 랭킹


알림 0