디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

패보 뷰어 쟝타마 사용법

ㅇㅇ(118.220) 2022.08.09 17:02:31
조회 1161 추천 14 댓글 14
														


7ceb857fbd806cf339e698bf06d60403f63867e048a23ad96f




24b0d121e09c28a8699fe8b115ef046c64f02d4999ef



대충 패보 일괄로 다운로드해서 보여주는거

각국의 결과 표시, 점봉 그래프, 패보 재생, 방총 목록, 스탯 표시 등등


다운로드 링크 https://github.com/majaneye/JANTAMA/releases/download/v2.0.0/JantamaViewer_Win-v2.0.0.zip


사용하기 위해서는 패보 리스트를 다운받고 리스트에 있는 패보를 일괄 다운받고 폴더에 집어넣으면 됨



패보 리스트, 패보 일괄 다운받는 법

아래 스크립트를 브라우저 개발자 콘솔에 붙여넣고 엔터


function paifulist(type) {

    let namesub = "";
    if(type==2){ namesub = "danni"; }
    else if(type==1){ namesub = "yuujin"; }
    else if(type==4){ namesub = "taikai"; }
    else if(type==0){ namesub = "all"; }
    else {return; }

    function download(data, fileName) {
        let a = document.createElement("a");
        a.href = URL.createObjectURL(
            new Blob([JSON.stringify(data, null, "  ")],
            {type: "text/plain"}));
        a.download = fileName;
        a.style.display = "none";
        document.body.appendChild(a);
        a.click();
        document.body.removeChild(a);
    }
    function sleep(msec) {
        return new Promise(function(resolve) {setTimeout(function() {resolve();}, msec);});
    }
    async function getRecords(type,namesub) {
        let uuidArray = new Array();
        let loopEndFlag = false;
    for (let i = 0;; i += 20) {
        app.NetAgent.sendReq2Lobby(
                "Lobby",
                "fetchGameRecordList",
                // type 2 マッチング type 1 友人 type 4 大会戦 type 0 段位・友人・大会全て
                {start:i, count:20, type:type},
                function(error, Records) {
                    if (Records.record_list.length == 0) {
                        loopEndFlag = true;
                        return;
                    }
                    for (const record of Records.record_list) {
                        uuidArray.push(record.uuid);
                        console.log(i + " データ取得中 / Downloading");
                    }
                });
            if (loopEndFlag) {
                break;
            }
            await sleep(1000);
        }
        download(uuidArray, "mahjongsoul_" + namesub + "_uuid_list.txt");
    }
    getRecords(type,namesub);
}


그리고 또 아래 스크립트를 복붙하고 엔터. 숫자 2는 단위전, 3은 우인전, 4는 대회

paifulist(2)




24b0d121e09c28a8699fe8b115ef046ecc4dcff7


그럼 이렇게 .txt파일로 다운로드가 됨 아마 1000개까지밖에 못뽑는대

이제 위에 리스트에 있는 패보를 일괄로 다운로드 해야함


아래 스크립트 붙여넣고 엔터

async function paifus(array) {

    for (let index = 0; index < array.length; index++)
    {
        function sleep(msec) {
            return new Promise(function(resolve) {setTimeout(function() {resolve();}, msec);});
        }

        uuid = array[index];
        uuid = uuid.replace(/^.*=(.*)_a.*$/, '$1');
        const pbWrapper = net.ProtobufManager.lookupType(".lq.Wrapper");
        const pbGameDetailRecords = net.ProtobufManager.lookupType(".lq.GameDetailRecords");
        function parseRecords(gameDetailRecords, json) {
            try {
                if (gameDetailRecords.version == 0) {
                    for (let i in gameDetailRecords.records) {
                        const record = (pbWrapper.decode(gameDetailRecords.records[i]));
                        const pb = net.ProtobufManager.lookupType(record.name);
                        const data = JSON.parse(JSON.stringify((pb.decode(record.data))));
                        json.records[i] = {name:record.name, data:data};
                    }
                }
                else if (gameDetailRecords.version == 210715) {
                    for (let i in gameDetailRecords.actions) {
                        if (gameDetailRecords.actions[i].type == 1) {
                            const record = (pbWrapper.decode(gameDetailRecords.actions[i].result));
                            const pb = net.ProtobufManager.lookupType(record.name);
                            const data = JSON.parse(JSON.stringify((pb.decode(record.data))));
                            json.actions[i].result = {name:record.name, data:data};
                        }
                    };
                }
                else {
                    throw ("Unknown version: " + gameDetailRecords.version);
                }
            }
            catch (e) {
                console.log(e);
            }
            return json;
        }
        async function fetchData(url) {
            const response = await fetch(url);
            const arrayBuffer = await response.arrayBuffer();
            return new Uint8Array(arrayBuffer);
        }
        function download(data, uuid) {
            let a = document.createElement("a");
            a.href = URL.createObjectURL(
                new Blob([JSON.stringify(data, null, "  ")],
                {type: "text/plain"}));
            a.download = "mahjongsoul_paifu_" + uuid + ".txt";
            a.style.display = "none";
            document.body.appendChild(a);
            a.click();
            document.body.removeChild(a);
        }

        
        app.NetAgent.sendReq2Lobby(
            "Lobby",
            "fetchGameRecord",
            {game_uuid:uuid, client_version_string:GameMgr.Inst.getClientVersion()},
            async function(error, gameRecord) {
                if (gameRecord.data == "") {
                    gameRecord.data = await fetchData(gameRecord.data_url);
                }
                const gameDetailRecordsWrapper = pbWrapper.decode(gameRecord.data);
                const gameDetailRecords = pbGameDetailRecords.decode(gameDetailRecordsWrapper.data);
                let gameDetailRecordsJson = JSON.parse(JSON.stringify(gameDetailRecords));
                gameDetailRecordsJson = parseRecords(gameDetailRecords, gameDetailRecordsJson);
                gameRecord.data = "";
                let gameRecordJson = JSON.parse(JSON.stringify(gameRecord));
                gameRecordJson.data = {name:gameDetailRecordsWrapper.name, data:gameDetailRecordsJson};
                download(gameRecordJson, uuid);
            });

        console.log((index+1) + "/" + array.length + "(" + uuid + ")" + " データ取得中 / Downloading");

        await sleep(2000);
    }
}


그리고 또 아래 스크립트 양식대로 붙여넣고 엔터 "uuid" 부분에는 아까 뽑은 패보 uuid 붙여넣으면 됨

paifus(["uuid0",

  "uuid1",
  "uuid2",])



24b0d121e09c28a8699fe8b115ef046c62f32a49

24b0d121e09c28a8699fe8b115ef046547aafd


요런식으로 ㅇㅇ 하면 패보(paifu) 다운끝임 전부 아까 받은 쟝타마에 Paifu 폴더에 붙여넣으면 됨





24b0d121e09c28a8699fe8b115ef0468e1aceabf65


패보 3개만 불러왔음

위에 리그 버튼 누르면 패보에 있는 모든 플레이어 스탯 뽑고 점수도 매길 수 있음 10-20, 10-30, m리그 등등 난 잘 모르겠다


개인적으로 km리그에서 잘 쓸 수 있을지 않을까 해서 가져옴 아님말궁


추천 비추천

14

고정닉 10

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 시세차익 부러워 부동산 보는 눈 배우고 싶은 스타는? 운영자 24/05/27 - -
공지 작혼 가이드 [62] ㅋㅇ.갤로그로 이동합니다. 19.09.02 427638 162
공지 공지용으로 작성한 초보자를 위한 역설명 [112] 찬타(211.200) 13.01.22 246456 258
2076481 금탁 막 올라온 뉴비 스탯 핑까좀 다스12갤로그로 이동합니다. 16:17 0 0
2076480 다들 반갑습니다 [1] 무츠키쨩갤로그로 이동합니다. 15:30 25 0
2076479 작혼 콜라보 이제 장난 그만 쳤으면 좋겠다 [5] Rusalka갤로그로 이동합니다. 14:47 49 0
2076471 일마갤 좆목완장질 역겨워서 여기로 넘어옴 [7] ㅇㅇ(106.102) 12:39 105 10
2076467 작혼 400판 옥탁이면 평균임? [4] ㅇㅇ(210.104) 12:27 72 0
2076465 히비키 고화질콘 출시!!! [3] 뀨효미갤로그로 이동합니다. 12:16 53 1
2076464 1번가 이벤트 pv [4] 메루1갤로그로 이동합니다. 12:16 51 0
2076462 마갤 정상영업합니다 [5] 메루1갤로그로 이동합니다. 09:52 92 0
2076461 내가 갤을 멈췄다 [1] 유동(220.93) 09:37 35 0
2076455 라스에 오야랑 내가 더블론 했는데 [2] ㅇㅇ갤로그로 이동합니다. 08:47 47 0
2076408 AI랑 놀다가 재밌는 구경하네 [3] 작갤러(124.197) 02:54 99 2
2076392 속보) 바이탈 사인 실종 [4] Arachne갤로그로 이동합니다. 01:57 113 0
2076389 일기통관이 울어도 되는거던가요 [2] 작갤러(222.114) 01:48 82 0
2076385 리치는 참앗어야하나? [3] (1.235) 01:15 72 0
2076378 작가는 독자의 머리위에 있다 [3] 치즈나쵸갤로그로 이동합니다. 00:28 91 0
2076376 괭갈은 왜 재밌을까 치즈나쵸갤로그로 이동합니다. 00:11 35 0
2076375 캐르릉... 캐르릉... [1] 황조롱이갤로그로 이동합니다. 05.29 35 0
2076373 나왜 부적삿는데 350개 안주지.. [1] 작갤러(61.81) 05.29 73 0
2076352 내가 갤러리를 멈췄다 [3] 유동(220.93) 05.29 63 0
2076349 내일 1번가 서버열고 패치 [4] 메루1갤로그로 이동합니다. 05.29 99 0
2076347 이제 마작갤 새로 옮겨감? [6] 카네사다갤로그로 이동합니다. 05.29 166 0
2076346 오늘부터 뉴 작갤이다 [2] 메루1갤로그로 이동합니다. 05.29 106 0
2076343 작갤 막글 =========================== 작갤러(60.253) 05.29 60 0
2076337 후리텐 없이 국사무쌍 13면대기 맛있다 [4] 작갤러(59.2) 05.29 117 1
2076336 이번달도열심히함 [1] ㅇㅇ갤로그로 이동합니다. 05.29 46 0
2076333 뉴비 쿠이 질문 [4] 작갤러(118.47) 05.29 54 0
2076329 비명 입갤 ㅋㅋ [6] 메루1갤로그로 이동합니다. 05.29 106 0
2076327 접는다 [7] 작갤러(39.7) 05.29 86 1
2076326 내가 마작갤러리를 멈췄다!!!! [2] ㅇㅇ(112.152) 05.29 73 1
2076323 정신병자 갤러리 [1] 작갤러(117.111) 05.29 146 0
2076322 누비 이거 왜 안되는거에요? [12] 작갤러(106.101) 05.29 181 0
2076321 대전 번개하실분 [1] 작갤러(118.235) 05.29 55 0
2076320 응애 뉴비 질문있어요 [1] 작갤러(106.243) 05.29 52 0
2076319 선생님들 뉴비 질문좀... [4] 작갤러(113.59) 05.29 120 0
2076317 고자루 픽업 언제 다시함? [1] 작갤러(115.21) 05.29 71 0
2076316 오늘 시작한 뉴빈데 [2] 작갤러(118.41) 05.29 59 0
2076313 금탁이 옥탁보다 싫은 유일한점 [2] 메루1갤로그로 이동합니다. 05.29 154 0
2076311 작사면 이제 초심졸업하고 올라온사람들이잖아? [1] 작갤러(168.115) 05.29 96 0
2076304 마갤 왤케 개쳐망했노 [5] 약간맛이간사과갤로그로 이동합니다. 05.29 242 0
2076303 ㅈㄷㄴ 메루1갤로그로 이동합니다. 05.29 25 0
2076301 블아유입 뉴비인데 [3] 작갤러(124.59) 05.29 82 0
2076288 쥬글거야 [1] 단밤갤로그로 이동합니다. 05.29 53 0
2076278 게임을 지고있을때마다 마음속에서는 불길이일어나 [8] 미카엘.갤로그로 이동합니다. 05.29 113 0
2076276 마작 아무리 연승을한대도 [4] 미카엘.갤로그로 이동합니다. 05.29 114 0
2076262 완장 없지? [6] 치즈나쵸갤로그로 이동합니다. 05.29 262 5
2076260 우우 니가 죽였어 [2] FineMotion갤로그로 이동합니다. 05.29 71 1
2076256 이거잘한건지모르갯내 [2] ㅇㅇ갤로그로 이동합니다. 05.29 81 1
2076249 이번달도50판은찍겠네 [5] itsumo갤로그로 이동합니다. 05.29 104 1
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2