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

... 16  17  18  19  20  21  22  23  24  25  [26]  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
5251kss11/1/20196822c#문법질문입니다. [1]
5250이대희10/31/20196912시작하세요 C# 7.3 프로그래밍 책이 절판이네요. [1]
5249황태관10/24/20197370c# 폼안에 특정 프로그램 불러오기.. [1]파일 다운로드1
5248황태관10/23/20198251C언어로 만든 dll 를 참조해서 c#으로 만들려면.. [3]
5245민성10/21/20197407안녕하세요 Ui 스레드 접근에 대해서 질문드리도록 하겠습니다. [1]
5244hbli...10/20/20196809두개의 쓰레드에서 하나의 Queue 리스트 사용시 질문드립니다. [2]
5243최선호 donator10/18/20196354Screen Capture 와.. Overlay 질문 좀 드릴게요 ㅠ.ㅠ ( 장문 주의..... ) [2]
5241C#초보10/16/20198397C# USB 통신 구현 관련 질문 드립니다! [1]
5240김동규10/15/20198356런타임 시 Encoding.Default를 UTF-8로 설정할 수 있을까요? [3]
5239밤톨이10/13/20196609시놀리지 DSM에 asp.net core 2 웹서버 구축이 가능한가요? [1]
5238권석헌10/2/20197146C# - C++ 간의 Memorymapped file 관련 Data 질문좀 드립니다 선생님 [1]
5237유호성10/1/20196892사용자 정의 컨트롤 VS IDE에서만 Exception 발생 [2]
5234koko9/25/20199123안녕하세요. 64bit WPF -> 32bit C++ DLL Import사용 문의 드립니다. [3]
5232fox3...9/24/20196996C# Memorymappedfile 재 업로드 드립니다.(실행순서 및 질문내용 정리) [7]파일 다운로드1
5231fox3...9/24/20197440C# 메모리맵드파일 관련 질문드립니다. 최소한의 재현가능코드 첨부후 재질문 드립니다. [2]파일 다운로드1
5230질문9/23/20197098C++ 로 만든 dll 을 C#에서 사용할 때 질문 [2]
5229fox3...9/23/20199458C# 메모리맵드파일 관련 질문드립니다. [2]
5227세퉁9/23/20198099WPF Textblock 폰트 크기에 따라 글자 색이 깨지는 현상이 있습니다. [3]파일 다운로드1
5226김대훈9/23/20197765정말 황당한 경우입니다.. [2]
5223김태균9/19/20197462책 소개 링크가 7.1버전판으로 이어집니다. [1]
5222냥냥이9/14/20197993프로그래밍 논리력이 많이 부족합니다 [3]
5219티지레몬9/9/20199466c# PCB 자동화 프로그램(윈도우 폼 위주로 작업) 제작 준비 [3]
5218민성9/9/20197534안녕하세요 WPF에서 xaml 안에 다른 xaml을 넣고 싶습니다. [1]파일 다운로드1
5216WPF9/8/20198623WPF에서 XAML Islands를 사용하여 Win2D를 사용하니 그래픽 품질이 저하됩니다. [2]파일 다운로드1
5215허송세월9/5/20198446중복실행 방지 관련 문의 [2]파일 다운로드1
5214Jang...9/4/20198055[DB 테이블의 데이터 변경에 대한 알림 처리] SQL-Server말고 MySQL은 불가능하겠죠? [1]
... 16  17  18  19  20  21  22  23  24  25  [26]  27  28  29  30  ...