Microsoft MVP성태의 닷넷 이야기
아래 질문 상세 소스전체입니다.. [링크 복사], [링크+제목 복사]
조회: 6594
글쓴 사람
권오영 (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바이트 문자열 같은데, 글쎄요... 딱히 그 이상 뭐라고 집어낼 부분이 없군요.
정성태

... 16  17  18  19  20  21  22  [23]  24  25  26  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
4831guest5/15/20175681WPF .net 3.5에서 TextBox 한글 문제 [3]
4830초보자5/7/20178905프로그램 비정상 종료 메시지 창 없애는 방법 [4]
4829윤현수4/26/20175540System.Text.Encoding 질문 [1]
4828jaemin4/20/20173888시스템 종료시 block 함수 xp 지원가능한 방법 질문 [2]
4827ds4/13/20175633매서드 정의로 이동시 [메타데이터에서]에서 라고 나오는 것은 뭔가요? [1]
4826김솔지4/11/20174485CxImage 문자 출력 [1]
4825플메4/10/20174335덱스트 업로드 하는데 구성요소 서비스에 엑셀이 안뜨네요..ㅜㅜ [1]파일 다운로드1
4824김상경4/9/20174117win7에서 vb6.0을 이용해서 프로그램을 만들었습니다.(제가 만든건 아니고 옆 동료가 만들었습니다.) [1]파일 다운로드1
4823조상현3/28/20174644windows event log 에 대한 정보는 어디서 얻을 수 있을까요? [1]
4822부우3/24/20175911글수정이 안되어 다시올려드립니다ㅠ [12]파일 다운로드2
4821부우3/22/201714105파일이나 어셈블리 중 하나를 로드에러 좀 봐주세요 [9]파일 다운로드1
4820듀이3/20/20173997오차 없이 동시에 명령을 보내게 가능한가요? [2]파일 다운로드1
4819popo3/20/20174613C# sslstream 사용시 Cipher List 설정 [3]
4818부우3/16/201711601DllImport 사용시 진입점을 찾을수 없습니다 [2]
4817yun3/15/20174485서피스프로4의 HYPER-V로 윈도우7을 깔았는데... [1]
4816부우3/15/20176392C++ DLL함수 사용 질문드립니다 [10]
4815김지용3/14/20173501.net core linux 오류 [2]
4814김솔지3/13/20174442인쇄 시 , 출력화면을 이미지 파일로 저장하고 싶습니다. [1]파일 다운로드1
4813spowner3/8/20175444멀티 스레드 환경에서 처리하여야 할 목록을 효율적으로 사용하는 기법 질문 드립니다 [2]
4812popo2/23/20175125.NET Window ClassName 변경 질문 드립니다. [1]
4809힘찬도약2/15/20176995C# 가상 시리얼 [4]
4808이길용2/9/20176759WCF 외부 접속 관련해서 질문드립니다ㅠ [1]
4807헬조선식스웨그2/8/201711706WPF의 속도에 대해서 궁금합니다. [3]
4803헬조선식스웨그2/7/20177079WPF로 메신져 메세지 박스 구현 문의 [2]
4802spowner2/6/20174563특정 범위의 값을 다른 값으로 치환하는 메소드를 만들어야 할 때 가장 빠른 방법은? [7]
4804spowner2/7/20174737    답변글 [답변]: 특정 범위의 값을 다른 값으로 치환하는 메소드를 만들어야 할 때 가장 빠른 방법은?
... 16  17  18  19  20  21  22  [23]  24  25  26  27  28  29  30  ...