P-GO Auto SEARCH

P-GOを自動で

As of 2016-12-26. See the latest version.

// ==UserScript==
// @name         P-GO Auto SEARCH
// @version      0.25
// @description  P-GOを自動で
// @match        https://pmap.kuku.lu/*
// @grant        none
// @namespace    https://greasyfork.org/users/89773
// ==/UserScript==

(function() {
    'use strict';
    var latlng = [35.690695, 139.699694];    //座標[緯度, 経度] (デフォルトは新宿駅)
    var x = 7;    //東に→
    var y = 7;    //南に↓

    //未確定ソースを確定に 下を'var kakutei = true;'に
    var kakutei;

    function floatFormat(number){
        var _pow = Math.pow(10, 6);
        return Math.round(number * _pow) / _pow;
    }

    var x_margin = 0.0025;
    var y_margin = 0.002;
    function gene(latlng, range, adjust){
        var list=[];
        for (var i=0; i<range.lat; i++){
            var v = floatFormat((latlng[0] - y_margin*i));
            var r = (!adjust && i%2 !== 0) ? range.lng-1 : range.lng;
            for (var j=0; j<r; j++){
                var w = floatFormat((latlng[1] + x_margin*j));
                if (i%2 !== 0) w = floatFormat(w + x_margin/2);
                list.push([v, w]);
            }
        }
        return list;
    }

    var list = gene(latlng, {lat: y, lng: x});

    if (kakutei){
        var t_lat = 1;
        var t_lng = 3;
        var m_lat = y_margin * t_lat;
        var m_lng = x_margin * t_lng;
        var c_lat = localStorage.getItem("lat") ? localStorage.getItem("lat") : 0;
        var c_lng = localStorage.getItem("lng") ? localStorage.getItem("lng") : 0;
        var adjust = (t_lat%2 !== 0 && c_lat%2 !== 0) ? floatFormat(x_margin/2) : 0;
        list = gene([latlng[0] - m_lat*c_lat, latlng[1] + m_lng*c_lng + adjust], {lat: t_lat, lng: t_lng}, true);
        setInterval(function(){
            c_lat++;
            if (c_lat>10){
                c_lat = 0;
                c_lng++;
                localStorage.setItem("lng", c_lng);
            }
            localStorage.setItem("lat", c_lat);
            adjust = (t_lat%2 !== 0 && c_lat%2 !== 0) ? floatFormat(x_margin/2) : 0;
            list = gene([latlng[0] - m_lat*c_lat, latlng[1] + m_lng*c_lng + adjust], {lat: t_lat, lng: t_lng}, true);
            for (var i=0; i<list.length; i++){
                L.circle([list[i][0], list[i][1]], 150, {opacity: 0.2, fillOpacity: 0.1, color: 'red'}).addTo(map);
            }
        }, 60*60*1000);
    }

    var jump, random, lat, lng, marker, timeout;
    var auto = true;
    var done = true;
    var count = Math.floor( Math.random() * list.length );
    var option = {
        opacity: 0.8,
        zIndexOffset: 999999,
        icon : L.icon({
            iconUrl: 'https://github.com/pointhi/leaflet-color-markers/raw/master/img/marker-icon-red.png',
            shadowUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.7/images/marker-shadow.png',
            iconSize: [25, 41],
            iconAnchor: [12, 41],
            popupAnchor: [1, -34],
            shadowSize: [41, 41]
        })
    };

    function serch(){
        if (done){
            done = false;
            if (random){
                count = Math.floor( Math.random() * list.length );
            }else{
                count++;
                if (count>=list.length) count = 0;
            }
            lat = list[count][0];
            lng = list[count][1];
            console.info(count + ': ' + lat + ', ' + lng);

            if (marker) map.removeLayer(marker);
            marker = L.marker([lat, lng], option).addTo(map);
            if (jump) map.setView([lat, lng], 17);
        }

        research_key = "psearch-"+uuid();

        viewTopMessage("リクエスト");
        $.ajax({
            url: "https://sv-webdb1.pmap.kuku.lu/_server.php",
            type: "GET",
            data: {
                action: 'addServerQueue',
                //p-goのソースをuukeyで検索して&uukey=***&sysversionの***を下を'***'に入れてね
                uukey: '',
                sysversion: 1001,
                run_key: research_key,
                loc1: lat,
                loc2: lng
            },
            timeout: 6000,
            cache: false
        }).done(function(data, status, xhr) {
            var t = 5;
            if(data.match("連打")){
                viewTopMessage("連打");
            }else if(data.match("busy")){
                viewTopMessage("大混雑");
            }else if (data.match("OK")){
                done = true;
                t = 20;
                viewTopMessage("更新中");

                research_runserver = parseValue(data.split("OK:")[1]);
                if (research_timeout) {
                    clearInterval(research_timeout);
                    research_timeout = false;
                }
                research_timeout = setInterval(researchResult, 1000);
            }
            nextRefreshResearch(t);
            timeout = setTimeout(function(){serch();}, t*1000);
        }).fail(function(xhr, status, error) {
            serch();
        });
    }

    setTimeout(function(){
        if (auto) serch();
        for (var i=0; i<list.length; i++){
            L.circle([list[i][0], list[i][1]], 150, {opacity: 0.2, fillOpacity: 0.1, color: 'red'}).addTo(map);
        }

        var _class='leaflet-bar leaflet-control leaflet-control-custom leaflet-control-command-interior';
        var css ='background:white;width:80px;height:35px;padding:10px;text-align:center;cursor:pointer;background:#';
        $('.leaflet-bottom.leaflet-left').append(
            $('<div>', {
                text: 'Random',
                class: _class,
                style: css + (random ? 'dddddd;' : 'ffffff'),
                on: {
                    click: function(){
                        if (random) {
                            random = false;
                            $(this).css('background', '#ffffff');
                        } else {
                            random = true;
                            $(this).css('background', '#dddddd');
                        }
                    }
                }
            }),
            $('<div>', {
                text: 'Jamp',
                class: _class,
                style: css + (jump ? 'dddddd;' : 'ffffff'),
                on: {
                    click: function(){
                        if (jump) {
                            jump = false;
                            $(this).css('background', '#ffffff');
                        } else {
                            jump = true;
                            $(this).css('background', '#dddddd');
                        }
                    }
                }
            }),
            $('<div>', {
                text: 'Auto',
                class: _class,
                style: css + (auto ? 'dddddd;' : 'ffffff'),
                on: {
                    click: function(){
                        if (auto) {
                            auto = false;
                            clearTimeout(timeout);
                            $(this).css('background', '#ffffff');
                        } else {
                            auto = true;
                            serch();
                            $(this).css('background', '#dddddd');
                        }
                    }
                }
            })
        );
    }, 3000);
})();