Microsoft MVP성태의 닷넷 이야기
아래 질문 상세 소스전체입니다.. [링크 복사], [링크+제목 복사]
조회: 7211
글쓴 사람
권오영 (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;
    }
    
}




donaricano-btn



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


비밀번호

댓글 쓴 사람
 



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

[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
5519리얼킴6/19/202117.net framwork 4.0 에서 4.8로 꼭 가야할까요?? [1]
5518한예지6/18/202130ArrayList, IList에 대해 질문 있습니다. [2]
5517wunsy6/18/202126winform에서 Button 활성화, 비활성화 [4]
5516ocm6/15/202168mips 어셈블리 연산 다시 질문드려요 (첨부파일 갱신됨) [2]파일 다운로드1
5515ocm6/14/202192mips 어셈블리 연산 [6]파일 다운로드1
5514jongs6/11/2021152GethashCode와 String대한 질문 [2]
5513labeling6/11/2021101C# Winform 에서 Label에 동일한 Color를 넣었을 때 처리방법이 궁금합니다. [2]
55126/11/202180xlwings 가 실행조차 되지 않습니다. ㅠㅠ [2]
5511Syong6/9/2021138User Control에 string array 속성 추가하는 방법 [4]
5510jay6/8/2021109string 문자열에 쌍따옴표(")를 넣고 싶습니다. [1]파일 다운로드1
5509한예지6/3/2021185ExeccuteNonQuery 질문있습니다! [2]
5508최재남6/3/2021233마우스 이벤트 관련 질문 좀 드리겠습니다. [6]
5507한예6/2/2021195static과 스택오버플로우 질문있습니다. [5]파일 다운로드1
5506이창석6/1/2021124센서의 값을 받아서 PC를 통해 모니터링 하는 것을 만들고 있습니다. [1]
5505kss5/31/2021132.net5에서 소멸자가 어떻게 바뀐건가요? [1]
5503xingTester5/24/2021208xingapinet 에 수정 요청 부탁 드립니다. [1]
5501한예지5/23/202196IProgress 사용법이 궁금합니다. [2]
5500한예ㅈ5/23/2021178비동기 코드 흐름 질문있습니다. [3]
5498곰장어5/21/2021161List에 static 변수를 추가했을때의 궁금증 [3]파일 다운로드1
5497지평선5/20/2021135윈도우 배율을 알 수 있을까요? [1]
5496cs린이5/20/2021154C# 8.0 질문입니다. [2]파일 다운로드6
5495Natie5/13/2021117객체를 생성과 동시에 초기화 하는 방법 [1]
5494지예예지5/13/2021130비동기 코드 흐름이 궁금합니다! [2]
5493xingTester5/6/2021204xing api XQCSPAT00600 질문입니다 [4]파일 다운로드1
5492한예지5/5/2021292FromCurrentSynchronizationContext 관련 코드 질문있습니다! [2]
[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...