Microsoft MVP성태의 닷넷 이야기
아래 질문 상세 소스전체입니다.. [링크 복사], [링크+제목 복사]
조회: 12889
글쓴 사람
권오영 (zktmtjqj at naver.com)
홈페이지
첨부 파일
 

/*
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2, or (at your option)
 * any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 * 02111-1307, USA.
 *
 * http://www.gnu.org/copyleft/gpl.html
 */

package l1j.server.server.serverpackets;

import java.util.StringTokenizer;

import l1j.server.server.Opcodes;
import l1j.server.server.datatables.AdenShopTable;
import l1j.server.server.model.Instance.L1PcInstance;
import l1j.server.server.templates.L1AdenShopItem;

// Referenced classes of package l1j.server.server.serverpackets:
// ServerBasePacket

public class S_SurvivalCry extends ServerBasePacket {

    private static final String S_SURVIVAL_CRY = "[S] S_SurvivalCry";
    private byte[] _byte = null;
    public static final int LIST = 0;
    public static final int EMAIL = 1;
    public static final int POINT = 2;
    public static final int OTP_SHOW = 4;
    public static final int OTP_CHECK_MSG = 5;
    public static final int 접속모름 = 15;

    public S_SurvivalCry(int value) {
        buildPacket(value);
    }

    public S_SurvivalCry(int value, boolean ck) {
        buildPacket(value, ck);
    }

    private void buildPacket(int value, boolean ck) {
        writeC(Opcodes.S_EXTENDED);
        writeC(접속모름);
        writeD(0x00);
        writeC(0x00);

        writeC(0x70);
        writeC(0x17);

        writeH(0x00);

        writeH(0x00);
    }

    private void buildPacket(int value) {
        writeC(Opcodes.S_EXTENDED);
        writeD(0x0F);
        writeH(0x00);
        writeD(value); // 남은시간
        writeH(0x00);
    }

    public S_SurvivalCry(int value, L1PcInstance pc) {
        try {
            if (value == 0) { // 목록
                writeC(Opcodes.S_EXTENDED);
                writeC(0x02);
                writeH(0x00);
                writeD(0x00);
                writeH(AdenShopTable.getInstance().Size());
                writeH(AdenShopTable.data_length);
                writeH(AdenShopTable.data_length);
                //
                for (L1AdenShopItem item : AdenShopTable.getInstance().getList()) {
                    writeD(item.getItemId());
                    writeH(item.getItem().getGfxId());
                    writeH(0x00);
                    String name = item.getItem().getName();
                    if (item.getPackCount() > 1)
                        name = name + "(" + item.getPackCount() + ")";
                    if (item.getItem().getMaxUseTime() > 0)
                        name = name + " [" + item.getItem().getMaxUseTime() + "]";
                    else if (item.getEnchant() > 0)
                        name = "+"+ item.getEnchant() + " " + item.getItem().getName();
                    else if (item.getItemId() == 65648)
                        name = name + " [7일]";
                    else if (item.getItemId() >= 30022 && item.getItemId() <= 30025)
                        name = name + " [18000]";
                    else if (item.getItemId() >= 22320 && item.getItemId() <= 22327)
                        name = name + " [3시간]";
                    writeH(name.getBytes("UTF-16LE").length + 2); // 이름 글자 사이즈
                    writeSU16(name); // 이름
                    String html = item.getHtml();
                    int ii = 2;
                    if (!html.equalsIgnoreCase("")) {
                        byte[] test = html.getBytes("MS949");
                        for (int i = 0; i < test.length;) {
                            if ((test[i] & 0xff) >= 0x7F)
                                i += 2;
                            else
                                i += 1;
                            ii += 2;
                        }
                    }
                    writeH(ii); // html size
                    writeSS(html); // html
                    writeD(item.getPrice()); // 가격
                    writeH(item.getType()); // 2-장비 3-버프 4-편의 5-기타
                    writeH(item.getStatus()); // 0 노말 1 new 2 hot 3 sale
                    writeD(0x000C0DBF);
                    writeD(0x000063);
                }
            } else if (value == 1) { // 결제 저장된 이메일
                writeC(Opcodes.S_EXTENDED);
                /*
                 * String s = "0c 00 26 00 64 00 6c 00 64 00 75 00 64 00 67 "+
                 * "00 75 00 73 00 40 00 6e 00 61 00 76 00 65 00 72 "+
                 * "00 2e 00 63 00 6f 00 6d 00 00 00 00 24";
                 */
                 String s = "0c 00 26 00 64 00 65 00 6D 00 6f 00 6e 00 73 00 65 00 72 00 76 00 65 00 72 00 31 00 40 00 6e 00 61 00 74 00 65 00 2e 00 63 00 6f 00 6d 00 00 00 20 b8";
                 //sdpwe2 // uf //kre
                StringTokenizer st = new StringTokenizer(s);
                while (st.hasMoreTokens()) {
                    writeC(Integer.parseInt(st.nextToken(), 16));
                }
            } else if (value == 2) { // 현재 포인트 관련?
                writeC(Opcodes.S_EXTENDED);
                writeH(0x03);
                writeH(0x01);
                writeH(0x04);
                writeD(pc.getNcoin());// 베리
                writeH(0x00);
            } else if (value == 3) { // 결제 저장된 이메일
                writeC(Opcodes.S_EXTENDED);
                String s = "02 00 00 f4 ff ff ff 00 00 00 00 00 00 99 17";
                StringTokenizer st = new StringTokenizer(s);
                while (st.hasMoreTokens()) {
                    writeC(Integer.parseInt(st.nextToken(), 16));
                }
            } else if (value == 4) {// OTP 창
                writeC(Opcodes.S_EXTENDED);
                writeD(0x33);
                writeH(0x00);
            } else if (value == 5) {// OTP CHECK MSG
                writeC(Opcodes.S_EXTENDED);
                writeH(0x05);
                // OTP 틀림
                // writeH(0x0ED0B);
                // writeD(0x29FFFFFF);
                writeH(0x00);
                writeD(0x00);
                writeC(0x00);
            }
        } catch (Exception e) {
        }
    }

    @Override
    public byte[] getContent() {
        if (_byte == null) {
            _byte = getBytes();
        }
        return _byte;
    }

    @Override
    public String getType() {
        return S_SURVIVAL_CRY;
    }
    
}








[최초 등록일: ]
[최종 수정일: 11/13/2016]


비밀번호

댓글 작성자
 



2016-11-13 12시39분
그렇군요. 근데... 권오영님, 이 게시판의 제목이 뭔지 아시면서 질문하신 건가요?
정성태
2016-11-13 12시40분
[권오영] 아니여..;;;왠지 잘아실것가탕서
[guest]
2016-11-13 01시35분
소스 코드를 보니 아마도 리니지1 프리서버를 위한 소스코드 같은데 이런 역공학용 소스 코드들은 분석에 많은 시간이 걸릴 수밖에 없습니다. 질문하신 부분은 형태로 봐서는 유니코드 2바이트 문자열 같은데, 글쎄요... 딱히 그 이상 뭐라고 집어낼 부분이 없군요.
정성태

... 31  32  [33]  34  35  36  37  38  39  40  41  42  43  44  45  ...
NoWriterDateCnt.TitleFile(s)
5040농상8/14/20188602정규표현식에 대해서 [3]
5039유영태8/14/201810156비동기 소켓사용후 해당 스레드가 남아있을때 처리 방법 [4]파일 다운로드1
5038이정석8/9/20188296서버파일 로컬파일 비교 [2]
5037jjh8/8/201811691c# 으로 화면캡쳐해서 동영상으로 만드는앱을 만들고싶습니다 [6]
5036볼딱지8/8/20189520C# programming 개발 관련 질문이 있습니다. [1]
5035궁금합니...8/8/201810191C# 버전 고민 어떤 책을 사야하나요? [1]
5034신동열8/8/20188587덤프 파일 분석 관련해서 문의 드려요. [1]
5033최규성8/7/201810678C# WinForm, Oracle 9i 로 프로그래밍시 ODP.NET, 배포 설정 방법 질문입니다. [6]
5032이정석8/6/201812500C# 으로 만들 dll 등록 [7]
5031J.S.8/6/20188155System.Array class의 구조에 대한 질문 [1]
5030농상8/4/20188693람다 식을 이용한 메서드 정의 확대를 공부하고 있습니다. [2]
5029Soul...8/3/20188200C# ActiveX 컨트롤 질문드립니다. [4]
5028도토리8/1/20188716혹시 회사에서 TFS 구축시 SQL-Server 라이선스 정책 아시는분 계신지요? [2]
5027농상7/31/20189534Freachable Queue의 발음을 표기하면 어떨까요? [2]
5026농상7/31/201811986소멸자의 이름에 대해서 [2]
5025김기철7/30/20189468selenium 질문좀 드릴개요 [3]
5024농상7/29/20188711패턴 매칭 when에 대해서 질문있습니다. [2]
5023농상7/28/201811681패턴매칭에 대해서 질문 있습니다. [1]
5022농상7/28/20188712튜플에 대해서 건의가 있습니다. [1]
5021농상7/27/20188217예외필터에 대해서 질문이요 [4]
5020농상7/27/201811080null 조건 연산자 예제에서 잠깐 혼동이 일어났습니다. [1]
5019농상7/26/201813398오버플로우와 언더플로우 [2]
5018이재윤7/26/20189815정말 간단한 질문일 수 있는데요! [1]
5017나나7/24/201813277Stopwatch.ElapsedTicks와 Stopwatch.ElapsedMilliseconds [9]
5015지누7/18/201810284ASP.Net Core 를 안드로이드에서 작동하는게 가능한가요? [1]
5016지누7/19/20187451    답변글 [답변]: ASP.Net Core 를 안드로이드에서 작동하는게 가능한가요?
... 31  32  [33]  34  35  36  37  38  39  40  41  42  43  44  45  ...