PathCreator

Create path has never been so easy

当前为 2018-01-27 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         PathCreator
// @namespace    http://tampermonkey.net/
// @version      1.1.7
// @description  Create path has never been so easy
// @author       Drigtime
// @match        https://dofus-map.com/
// @grant        none
// @require https://code.jquery.com/jquery-3.2.1.slim.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js
// ==/UserScript==

(function () {
    'use strict';


    var icon = {
        top: {
            move: L.icon({
                iconUrl: 'https://svgshare.com/i/54N.svg',
                className: 'top-arrow'
            }),
            gather: L.icon({
                iconUrl: 'https://svgshare.com/i/556.svg',
                className: 'top-arrow'
            }),
            fight: L.icon({
                iconUrl: 'https://svgshare.com/i/53n.svg',
                className: 'top-arrow'
            }),
            bank: L.icon({
                iconUrl: 'https://svgshare.com/i/54G.svg',
                className: 'top-arrow'
            }),
            phoenix: L.icon({
                iconUrl: 'https://svgshare.com/i/54x.svg',
                className: 'top-arrow'
            }),
        },
        left: {
            move: L.icon({
                iconUrl: 'https://svgshare.com/i/54m.svg',
                className: 'left-arrow'
            }),
            gather: L.icon({
                iconUrl: 'https://svgshare.com/i/555.svg',
                className: 'left-arrow'
            }),
            fight: L.icon({
                iconUrl: 'https://svgshare.com/i/54H.svg',
                className: 'left-arrow'
            }),
            bank: L.icon({
                iconUrl: 'https://svgshare.com/i/54v.svg',
                className: 'left-arrow'
            }),
            phoenix: L.icon({
                iconUrl: 'https://svgshare.com/i/557.svg',
                className: 'left-arrow'
            }),
        },
        bottom: {
            move: L.icon({
                iconUrl: 'https://svgshare.com/i/51x.svg',
                className: 'bottom-arrow'
            }),
            gather: L.icon({
                iconUrl: 'https://svgshare.com/i/54b.svg',
                className: 'bottom-arrow'
            }),
            fight: L.icon({
                iconUrl: 'https://svgshare.com/i/54o.svg',
                className: 'bottom-arrow'
            }),
            bank: L.icon({
                iconUrl: 'https://svgshare.com/i/53x.svg',
                className: 'bottom-arrow'
            }),
            phoenix: L.icon({
                iconUrl: 'https://svgshare.com/i/54q.svg',
                className: 'bottom-arrow'
            }),
        },
        right: {
            move: L.icon({
                iconUrl: 'https://svgshare.com/i/53t.svg',
                className: 'right-arrow'
            }),
            gather: L.icon({
                iconUrl: 'https://svgshare.com/i/54p.svg',
                className: 'right-arrow'
            }),
            fight: L.icon({
                iconUrl: 'https://svgshare.com/i/527.svg',
                className: 'right-arrow'
            }),
            bank: L.icon({
                iconUrl: 'https://svgshare.com/i/54w.svg',
                className: 'right-arrow'
            }),
            phoenix: L.icon({
                iconUrl: 'https://svgshare.com/i/543.svg',
                className: 'right-arrow'
            }),
        },
        havenbag: {
            move: L.icon({
                iconUrl: 'https://svgshare.com/i/58M.svg',
                className: 'havenbag-icon'
            }),
            gather: L.icon({
                iconUrl: 'https://svgshare.com/i/58N.svg',
                className: 'havenbag-icon'
            }),
            fight: L.icon({
                iconUrl: 'https://svgshare.com/i/5BW.svg',
                className: 'havenbag-icon'
            }),
            bank: L.icon({
                iconUrl: 'https://svgshare.com/i/5BL.svg',
                className: 'havenbag-icon'
            }),
            phoenix: L.icon({
                iconUrl: 'https://svgshare.com/i/5BB.svg',
                className: 'havenbag-icon'
            }),
        }
    };

    function preloader() {
        if (document.images) {
            var img1 = new Image();
            var img2 = new Image();
            var img3 = new Image();
            var img4 = new Image();
            var img5 = new Image();
            var img6 = new Image();
            var img7 = new Image();
            var img8 = new Image();
            var img9 = new Image();
            var img10 = new Image();
            var img11 = new Image();
            var img12 = new Image();
            var img13 = new Image();
            var img14 = new Image();
            var img15 = new Image();
            var img16 = new Image();
            var img17 = new Image();
            var img18 = new Image();
            var img19 = new Image();
            var img20 = new Image();
            var img21 = new Image();
            var img22 = new Image();
            var img23 = new Image();
            var img24 = new Image();
            var img25 = new Image();

            img1.src = "https://svgshare.com/i/54N.svg";
            img2.src = "https://svgshare.com/i/54m.svg";
            img3.src = "https://svgshare.com/i/51x.svg";
            img4.src = "https://svgshare.com/i/53t.svg";
            img5.src = "https://svgshare.com/i/556.svg";
            img6.src = "https://svgshare.com/i/555.svg";
            img7.src = "https://svgshare.com/i/54b.svg";
            img8.src = "https://svgshare.com/i/54p.svg";
            img9.src = "https://svgshare.com/i/53n.svg";
            img10.src = "https://svgshare.com/i/54H.svg";
            img11.src = "https://svgshare.com/i/54o.svg";
            img12.src = "https://svgshare.com/i/527.svg";
            img13.src = "https://svgshare.com/i/54G.svg";
            img14.src = "https://svgshare.com/i/54w.svg";
            img15.src = "https://svgshare.com/i/54v.svg";
            img16.src = "https://svgshare.com/i/53x.svg";
            img17.src = "https://svgshare.com/i/54x.svg";
            img18.src = "https://svgshare.com/i/557.svg";
            img19.src = "https://svgshare.com/i/54q.svg";
            img20.src = "https://svgshare.com/i/543.svg";
            img21.src = "https://svgshare.com/i/58M.svg";
            img22.src = "https://svgshare.com/i/58N.svg";
            img23.src = "https://svgshare.com/i/5BW.svg";
            img24.src = "https://svgshare.com/i/5BL.svg";
            img25.src = "https://svgshare.com/i/5BB.svg";
        }
    }

    function addLoadEvent(func) {
        var oldonload = window.onload;
        if (typeof window.onload != 'function') {
            window.onload = func;
        } else {
            window.onload = function () {
                if (oldonload) {
                    oldonload();
                }
                func();
            };
        }
    }
    addLoadEvent(preloader);

    var actualMap;
    var pathData = [];
    var bankData = [];
    var phenixData = [];
    var havenBagData = [];

    var ressources = [
        [1, "Frêne"],
        [8, "Chêne"],
        [17, "Fer"],
        [24, "Argent"],
        [25, "Or"],
        [26, "Pierre de Bauxite"],
        [28, "If"],
        [29, "Ebène"],
        [30, "Orme"],
        [31, "Erable"],
        [32, "Charme"],
        [33, "Châtaignier"],
        [34, "Noyer"],
        [35, "Merisier"],
        [37, "Pierre de Kobalte"],
        [38, "Blé"],
        [39, "Houblon"],
        [42, "Lin"],
        [43, "Orge"],
        [44, "Seigle"],
        [45, "Avoine"],
        [46, "Chanvre"],
        [47, "Malt"],
        [48, "Tas de patates"],
        [52, "Etain"],
        [53, "Pierre Cuivrée"],
        [54, "Manganèse"],
        [55, "Bronze"],
        [61, "Edelweiss"],
        [63, "Froment"],
        [64, "Epeautre"],
        [65, "Sorgho"],
        [66, "Menthe Sauvage"],
        [67, "Trèfle à 5 feuilles"],
        [68, "Orchidée Freyesque"],
        [71, "Greuvette"],
        [72, "Somoon Agressif"],
        [73, "Pwoulpe"],
        [74, "Truite"],
        [75, "Goujon"],
        [76, "Poisson-Chaton"],
        [77, "Crabe"],
        [78, "Poisson Pané"],
        [79, "Carpe d'Iem"],
        [80, "Truite Vaseuse"],
        [81, "Sardine Brillante"],
        [82, "Coton"],
        [84, "Puits"],
        [98, "Bombu"],
        [99, "Ombre étrange"],
        [100, "Pichon"],
        [101, "Oliviolet"],
        [102, "Machine de force"],
        [104, "Koinkoin"],
        [108, "Bambou"],
        [109, "Bambou sombre"],
        [110, "Bambou sacré"],
        [111, "Riz"],
        [112, "Pandouille"],
        [113, "Dolomite"],
        [114, "Silicate"],
        [121, "Kaliptus"],
        [131, "Perce-neige"],
        [132, "Poisskaille"],
        [133, "Tremble"],
        [134, "Frostiz"],
        [135, "Obsidienne"],
        [136, "Coquillage"],
        [137, "Machine à coudre de Poss'Ybel"],
        [138, "Fabrique"],
        [141, "Établi de mauvaise qualité"],
        [142, "Machine à coudre de mauvaise qualité"],
        [143, "Machine à jouets"],
        [144, "Pressoir à poisson"],
        [146, "Paquet Cadeau"],
        [167, "Arène"],
        [168, "Banque"],
        [169, "Bar Akouda"],
        [170, "Bibliothèque"],
        [171, "Boutiques de Nowel"],
        [172, "Dojo"],
        [173, "Église"],
        [174, "Épicerie"],
        [175, "Fabricant de skis"],
        [176, "Hôtel de ville"],
        [177, "Hôtel des métiers"],
        [178, "Kanojedo"],
        [179, "Kolizéum"],
        [180, "Milice"],
        [181, "Médecin de Frigost"],
        [206, "Sous-marin Steamer"],
        [207, "Autel"],
        [208, "Krosmaster"],
        [219, "Métier d'Avenir"],
        [220, "Tonneau d'explosifs"],
        [221, "Fleur de Sutol"],
        [222, "Barbecue"],
        [223, "Cawotte fraîche"],
        [224, "Alambic patiné de l'hôtel des métiers"],
        [225, "Bouteille de Rhum"],
        [226, "Ascenseur"],
        [227, "Champignon"],
        [230, "Portail des Bworks"],
        [231, "Distributeur de missions"],
        [232, "Portail"],
        [234, "Glaçon"],
        [235, "Aller vers"],
        [236, "Pupitre"],
        [253, "Portail Eliotrope"],
        [254, "Ortie"],
        [255, "Sauge"],
        [256, "Ginseng"],
        [257, "Belladone"],
        [258, "Mandragore"],
        [259, "Noisetier"],
        [260, "Maïs"],
        [261, "Millet"],
        [262, "Bloc de pierre"],
        [263, "Brochet"],
        [264, "Kralamoure"],
        [265, "Anguille"],
        [266, "Dorade Grise"],
        [267, "Perche"],
        [268, "Raie"],
        [269, "Lotte"],
        [270, "Requin Marteau-Faucille"],
        [271, "Bar Rikain"],
        [272, "Morue"],
        [273, "Tanche"],
        [274, "Espadon"],
        [275, "Enclume de Mulic Bere"],
        [276, "Établi de Mulic Bere"],
        [278, "Assembleur de Mulic Bere"],
        [280, "Plate-forme Huppermage"],
        [281, "Trèfle à 4 feuilles"],
        [282, "Indiquer une sortie"],
        [283, "Chathon"],
        [284, "Escalier"],
        [285, "Porte blindée"],
        [287, "Aquajou"],
        [288, "Salikrone"],
        [289, "Quisnoa"],
        [290, "Patelle"],
        [291, "Écume de mer"],
        [293, "Écume de mer"],
        [294, "Aquajou"],
        [295, "Salikrone"],
        [296, "Quisnoa"],
        [297, "Patelle"],
        [299, "Œufs frais"]
    ];
    var picker = 4;
    var gatherData = [];
    var loadingFile = false;
    var havenToggle = false;

    setTimeout(function () {
        var script2 = document.createElement('script');
        script2.type = 'text/javascript';
        script2.src = 'https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-beta.3/js/bootstrap.js';
        document.getElementsByTagName('head')[0].appendChild(script2);
    }, 0);

    var css = document.createElement('style');
    css.type = 'text/css';
    css.textContent = '.checkbox.checkbox-inline,.radio.radio-inline{margin-top:0}#pathcreator{background:#212121;border-radius:5px;padding:10px;color:#fff;box-shadow:0 0 10px 0 rgba(0,0,0,.6);font-family:arial;opacity:.95}.row{padding-top:.5rem;padding-left:1rem}.checkbox{padding-left:20px}.checkbox label{display:inline-block;position:relative;padding-left:5px}.checkbox label::after,.checkbox label::before{position:absolute;margin-left:-20px;display:inline-block;left:0}.checkbox label::before{content:"";width:17px;height:17px;border:1px solid #ccc;border-radius:3px;background-color:#fff;-webkit-transition:border .15s ease-in-out,color .15s ease-in-out;-o-transition:border .15s ease-in-out,color .15s ease-in-out;transition:border .15s ease-in-out,color .15s ease-in-out}.checkbox label::after{width:16px;height:16px;top:0;padding-left:3px;padding-top:1px;font-size:11px;color:#555}.checkbox input[type=checkbox]{opacity:0}.checkbox input[type=checkbox]:checked+label::after{font-family:FontAwesome;content:"\\f00c"}.checkbox input[type=checkbox]:disabled+label{opacity:.65}.checkbox input[type=checkbox]:disabled+label::before{background-color:#eee;cursor:not-allowed}.checkbox.checkbox-circle label::before{border-radius:50%}.checkbox-primary input[type=checkbox]:checked+label::before{background-color:#428bca;border-color:#428bca}.checkbox-primary input[type=checkbox]:checked+label::after{color:#fff}.radio{padding-left:20px}.radio label{display:inline-block;position:relative;padding-left:5px}.radio label::after,.radio label::before{display:inline-block;position:absolute;margin-left:-20px}.radio label::before{content:"";width:17px;height:17px;left:0;border:1px solid #ccc;border-radius:50%;background-color:#fff;-webkit-transition:border .15s ease-in-out;-o-transition:border .15s ease-in-out;transition:border .15s ease-in-out}.radio label::after{content:" ";width:11px;height:11px;left:3px;top:3px;border-radius:50%;background-color:#555;-webkit-transform:scale(0,0);-ms-transform:scale(0,0);-o-transform:scale(0,0);transform:scale(0,0);-webkit-transition:-webkit-transform .1s cubic-bezier(.8,-.33,.2,1.33);-moz-transition:-moz-transform .1s cubic-bezier(.8,-.33,.2,1.33);-o-transition:-o-transform .1s cubic-bezier(.8,-.33,.2,1.33);transition:transform .1s cubic-bezier(.8,-.33,.2,1.33)}.radio-primary input[type=radio]+label::after,.radio-primary input[type=radio]:checked+label::after{background-color:#428bca}.radio input[type=radio]{opacity:0}.radio input[type=radio]:checked+label::after{-webkit-transform:scale(1,1);-ms-transform:scale(1,1);-o-transform:scale(1,1);transform:scale(1,1)}.radio input[type=radio]:disabled+label{opacity:.65}.radio input[type=radio]:disabled+label::before{cursor:not-allowed}.radio-primary input[type=radio]:checked+label::before{border-color:#428bca}.radio-phenix input[type=radio]+label::after,.radio-phenix input[type=radio]:checked+label::after{background-color:#ab37c8}.radio-phenix input[type=radio]:checked+label::before{border-color:#ab37c8}.radio-danger input[type=radio]+label::after,.radio-danger input[type=radio]:checked+label::after{background-color:#d9534f}.radio-danger input[type=radio]:checked+label::before{border-color:#d9534f}.radio-success input[type=radio]+label::after,.radio-success input[type=radio]:checked+label::after{background-color:#5cb85c}.radio-success input[type=radio]:checked+label::before{border-color:#5cb85c}.btn-secondary{color:#bfbfbf;background-color:#0d0d0d;border-color:#1a1a1a}.btn-secondary.active,.btn-secondary:active,.btn-secondary:focus,.btn-secondary:hover,.open .dropdown-toggle.btn-secondary{color:#bfbfbf;background-color:#1a1a1a;border-color:#0d0d0d}.btn-file{position:relative;overflow:hidden}.btn-file input[type=file]{position:absolute;top:0;right:0;min-width:100%;min-height:100%;font-size:100px;text-align:right;filter:alpha(opacity=0);opacity:0;outline:0;background:#fff;cursor:inherit;display:block}#mapContainer[data-zoom="7"] .top-arrow{width:145px;margin-left:528.5px}#mapContainer[data-zoom="6"] .top-arrow{width:75px;margin-left:262.5px}#mapContainer[data-zoom="5"] .top-arrow{width:36px;margin-left:131.5px}#mapContainer[data-zoom="4"] .top-arrow{width:19px;margin-left:65.75px}#mapContainer[data-zoom="3"] .top-arrow{width:15px;margin-left:30.13px}#mapContainer[data-zoom="2"] .top-arrow{width:9.9px;margin-left:13.86px}#mapContainer[data-zoom="1"] .top-arrow{width:7px;margin-left:5.91px}#mapContainer[data-zoom="0"] .top-arrow{width:5.38px;margin-left:5.01px}#mapContainer[data-zoom="7"] .havenbag-icon{width:500.83px;margin-left:350.5833333px;margin-top:135.8px}#mapContainer[data-zoom="6"] .havenbag-icon{width:250px;margin-left:175px;margin-top:67.5px}#mapContainer[data-zoom="5"] .havenbag-icon{width:124.58px;margin-left:87.20833333px;margin-top:33.35px}#mapContainer[data-zoom="4"] .havenbag-icon{width:61.88px;margin-left:43.3125px;margin-top:16.28px}#mapContainer[data-zoom="3"] .havenbag-icon{width:30.52px;margin-left:21.36458333px;margin-top:7.74px}#mapContainer[data-zoom="2"] .havenbag-icon{width:14.84px;margin-left:10.390625px;margin-top:3.47px}#mapContainer[data-zoom="1"] .havenbag-icon{width:7.01px;margin-left:4.903645833px;margin-top:1.33px}#mapContainer[data-zoom="0"] .havenbag-icon{width:3.09px;margin-left:2.16015625px;margin-top:.27px}#mapContainer[data-zoom="7"] .left-arrow{width:324.26px;margin-top:356.5px}#mapContainer[data-zoom="6"] .left-arrow{width:161.59px;margin-top:177.75px}#mapContainer[data-zoom="5"] .left-arrow{width:80.53px;margin-top:88.38px}#mapContainer[data-zoom="4"] .left-arrow{width:40.13px;margin-top:44.19px}#mapContainer[data-zoom="3"] .left-arrow{width:30.87px;margin-top:19.34px}#mapContainer[data-zoom="2"] .left-arrow{width:23.75px;margin-top:7.42px}#mapContainer[data-zoom="1"] .left-arrow{width:18.27px;margin-top:1.86px}#mapContainer[data-zoom="0"] .left-arrow{width:14.05px;margin-top:1px}#mapContainer[data-zoom="7"] .right-arrow{width:324.26px;margin-left:878.74px;margin-top:356.5px}#mapContainer[data-zoom="6"] .right-arrow{width:161.59px;margin-left:439.41px;margin-top:177.75px}#mapContainer[data-zoom="5"] .right-arrow{width:80.53px;margin-left:219.47px;margin-top:88.38px}#mapContainer[data-zoom="4"] .right-arrow{width:40.13px;margin-left:110.37px;margin-top:44.19px}#mapContainer[data-zoom="3"] .right-arrow{width:30.87px;margin-left:43.38px;margin-top:19.34px}#mapContainer[data-zoom="2"] .right-arrow{width:23.75px;margin-left:12.88px;margin-top:7.42px}#mapContainer[data-zoom="1"] .right-arrow{width:18.27px;margin-left:1px;margin-top:1.86px}#mapContainer[data-zoom="0"] .right-arrow{width:14.05px;margin-left:1px;margin-top:1px}#mapContainer[data-zoom="7"] .bottom-arrow{width:145px;margin-left:528.5px;margin-top:648.2px}#mapContainer[data-zoom="6"] .bottom-arrow{width:75px;margin-left:262.5px;margin-top:319.5px}#mapContainer[data-zoom="5"] .bottom-arrow{width:36px;margin-left:131.5px;margin-top:160.91px}#mapContainer[data-zoom="4"] .bottom-arrow{width:19px;margin-left:65.75px;margin-top:78.02px}#mapContainer[data-zoom="3"] .bottom-arrow{width:15px;margin-left:30.13px;margin-top:31.09px}#mapContainer[data-zoom="2"] .bottom-arrow{width:9.9px;margin-left:13.86px;margin-top:11.59px}#mapContainer[data-zoom="1"] .bottom-arrow{width:7px;margin-left:5.91px;margin-top:3px}#mapContainer[data-zoom="0"] .bottom-arrow{width:5.38px;margin-left:5.01px;margin-top:0}#mapContainer[data-zoom="7"] .leaflet-popup{margin-left:601px}#mapContainer[data-zoom="6"] .leaflet-popup{margin-left:3005px}#mapContainer[data-zoom="5"] .leaflet-popup{margin-left:149.5px}#mapContainer[data-zoom="4"] .leaflet-popup{margin-left:74.25px}#mapContainer[data-zoom="3"] .leaflet-popup{margin-left:36.625px}#mapContainer[data-zoom="2"] .leaflet-popup{margin-left:17.8125px}#mapContainer[data-zoom="1"] .leaflet-popup{margin-left:8.40625px}#mapContainer[data-zoom="0"] .leaflet-popup{margin-left:3.703125px}';
    document.getElementsByTagName('head')[0].appendChild(css);


    document.getElementById('pickRessourceContainer').innerHTML += `
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.2.0/css/font-awesome.min.css">
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-beta.2/css/bootstrap.css">
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/flag-icon-css/2.9.0/css/flag-icon.css">
<div id="pathcreator" class="container">
<div style="text-align: right;">
<div class="btn-group">
<button type="button" class="btn dropdown-toggle btn-dark" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><div id="languageDisplayer" class="flag-icon flag-icon-fr"></div>
</button>
<div class="dropdown-menu dropdown-menu-right">
<a class="dropdown-item" href="#" id="fr"><div class="flag-icon flag-icon-fr"></div> Français</a>
<a class="dropdown-item" href="#" id="en"><div class="flag-icon flag-icon-gb"></div> English</a>
<a class="dropdown-item" href="#" id="es"><div class="flag-icon flag-icon-es"></div> Español</a>
</div>
</div>
</div>
<div class="row no-gutters">
<div class="col checkbox checkbox-primary">
<input type="checkbox" id="pathTop" value="option1">
<label id="top" for="pathTop">Haut</label>
</div>
<div class="col checkbox checkbox-primary">
<input type="checkbox" id="pathBottom" value="option1">
<label id="bottom" for="pathBottom">Bas</label>
</div>
<div class="w-100"></div>
<div class="col checkbox checkbox-primary">
<input type="checkbox" id="pathLeft" value="option1">
<label id="left" for="pathLeft">Gauche</label>
</div>
<div class="col checkbox checkbox-primary">
<input type="checkbox" id="pathRight" value="option1">
<label id="right" for="pathRight">Droite</label>
</div>
<div class="w-100"></div>
<div class="col checkbox checkbox-primary">
<input type="checkbox" id="pathHavenBag" value="option1">
<label id="havenBag" for="pathHavenBag">Havre-sac</label>
</div>
</div>
<hr style="border-top: 3px solid #111;" />
<form>
<div class="row no-gutters">
<div class="col radio radio-success">
<input type="radio" id="gather" name="radioOption">
<label id="tdgather" for="gather">Recolte</label>
</div>
<div class="col radio radio-danger">
<input type="radio" id="fight" name="radioOption">
<label id="tdfight" for="fight">Combat</label>
</div>
<div class="w-100"></div>
<div class="col radio radio-primary">
<input type="radio" id="bank" name="radioOption">
<label id="tdbank" for="bank">Banque</label>
</div>
<div class="col radio radio-phenix">
<input type="radio" id="phenix" name="radioOption">
<label id="tdphoenix" for="phenix">Phenix</label>
</div>
<div class="w-100"></div>
<div class="col radio">
<input type="radio" id="move" name="radioOption" checked>
<label id="tdMove" for="move">Deplacement</label>
</div>
</div>
</form>
<hr style="border-top: 3px solid #111;" />
<p style="text-align: center;" id="restogather">Ressources à récolter</p>
<div id="ressourcePickerBot" style="text-align: center;"><span id="ressourcePickerCreator" class="pickRessource" style="background-color: #0000008a; background-position: -260px 0px;">+</span></div>
<hr style="border-top: 3px solid #111;" />
<div class="btn-group btn-block">
<button type="button" class="btn btn-dark btn-block" id="saveFile">Sauvegarder</button>
<button type="button" class="btn btn-dark dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
</button>
<div class="dropdown-menu dropdown-menu-right">
<input type="text" placeholder="Nom du trajet" id="fileName">
</div>
</div>
<button class="btn btn-dark btn-block" id="deletePath">Supprimer</button>
<label class="btn btn-dark btn-block btn-file"><div id="loadAFile">Charger</div><input id="file" type="file" style="display: none;">
</label>
</div>
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true" style=" top: 300px;">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Zaap</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<form>
<div class="form-group">
<label for="recipient-name" class="form-control-label">Zaap d'arrivée :</label>
<select class="form-control" id="sel1">
<option value='{"map": "4,-19", "mapid": "84674563"}'>Astrub | 4,-19</option>
<option value='{"map": "-32,-56", "mapid": "147768"}'>Bonta | -32,-56</option>
<option value='{"map": "-26,35", "mapid": "144419"}'>Brâkmar | -26,35</option>
<option value='{"map": "-1,13", "mapid": "88212746"}'>Amakna (Bord de la forêt maléfique) | -1,13</option>
<option value='{"map": "3,-5", "mapid": "68552706"}'>Amakna (Château d'Amakna) | 3,-5</option>
<option value='{"map": "5,7", "mapid": "88082704"}'>Amakna (Coins des Bouftous) | 5,7</option>
<option value='{"map": "7,-4", "mapid": "68419587"}'>Amakna (Port de Madrestam) | 7,-4</option>
<option value='{"map": "-2,0", "mapid": "88213271"}'>Amakna (Village d'Amakna) | -2,0</option>
<option value='{"map": "-1,24", "mapid": "88212481"}'>Amakna (Plaîne des Scarafeuilles) | -1,24</option>
<option value='{"map": "10,22", "mapid": "88085249"}'>Baie de Sufokia (Rivage Sufokien) | 10,22</option>
<option value='{"map": "13,26", "mapid": "95422468"}'>Baie de Sufokia (Sufokia) | 13,26</option>
<option value='{"map": "-46,18", "mapid": "154642"}'>Île d'Otomaïl (Village côtier) | -46,18</option>
<option value='{"map": "-79,-41", "mapid": "54172969"}'>Île de Frigost (La Bourgade) | -79,-41</option>
<option value='{"map": "-77,-73", "mapid": "54172489"}'>Île de Frigost (Village enseveli) | -77,-73</option>
<option value='{"map": "35,12", "mapid": "156762120"}'>Île de Moon (Plage de la Tortue) | 35,12</option>
<option value='{"map": "-16,1", "mapid": "73400320"}'>Montagne des Koalaks (Village des Eleveurs) | -16,1</option>
<option value='{"map": "26,-37", "mapid": "13605"}'>Pandala Neutre (Faubourgs de Pandala) | 26,-37</option>
<option value='{"map": "29,-49", "mapid": "15153"}'>Pandala Feu (Village de Feudala) | 29,-49</option>
<option value='{"map": "-27,-36", "mapid": "142087694"}'>Plaine de Cania (Champs de Cania) | -27,-36</option>
<option value='{"map": "-3,-42", "mapid": "156240386"}'>Plaine de Cania (Lac de Cania) | -3,-42</option>
<option value='{"map": "-13,-28", "mapid": "165152263"}'>Plaine de Cania (Massif de Cania) | -13,-28</option>
<option value='{"map": "-5,-23", "mapid": "84806401"}'>Plaine de Cania (Plaine des Porkass) | -5,-23</option>
<option value='{"map": "-17,-47", "mapid": "147590153"}'>Plaine de Cania (Plaines Rocheuses) | -17,-47</option>
<option value='{"map": "-20,-20", "mapid": "164364304"}'>Plaine de Cania (Route Rocailleuse) | -20,-20</option>
<option value='{"map": "15,-58", "mapid": "173278210"}'>Saharach (Dunes des ossements) | 15,-58</option>
<option value='{"map": "-25,12", "mapid": "171967506"}'>Landes de Sidimote (Route des Roulottes) | -25,12</option>
</select>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Fermer</button>
<button type="button" class="btn btn-primary">Valider</button>
</div>
</div>
</div>
</div>`;

    function checkMaps(mapcoord, array) {
        for (let key = 0; key < array.length; key++) {
            if (array[key][0] == mapcoord) {
                return true;
            }
        }
        return false;
    }

    function getMapIndex(mapcoord, array) {
        for (let key = 0; key < array.length; key++) {
            if (array[key][0] == mapcoord) {
                return key;
            }
        }
    }

    function onMapClick() {

        if (!loadingFile)
            actualMap = document.getElementById('mapCoordinates').innerText;

        if (document.getElementById("pathHavenBag").checked) {
            document.getElementById("pathTop").checked = false;
            document.getElementById("pathLeft").checked = false;
            document.getElementById("pathBottom").checked = false;
            document.getElementById("pathRight").checked = false;
            if (!havenToggle) {
                if (!checkMaps(actualMap.split(', ')[0] + ',' + actualMap.split(', ')[1], havenBagData)) {
                    havenToggle = true;
                    $('#exampleModal').modal('show');
                    return;
                } else {
                    havenBagData.splice(getMapIndex(actualMap.split(', ')[0] + ',' + actualMap.split(', ')[1], havenBagData), 1);
                }
            } else {
                havenToggle = false;
            }
        }
        if (document.getElementById("bank").checked) {
            if (!checkMaps(actualMap, bankData)) {
                bankData.push([actualMap, false, undefined, false, undefined, false, undefined, false, undefined, false, undefined, false]);
                createMarker(getMapIndex(actualMap, bankData), bankData);
                deleteEmptyPath(bankData);
            } else if (checkMaps(actualMap, bankData)) {
                removeArrow(getMapIndex(actualMap, bankData), bankData);
                deleteEmptyPath(bankData);
            }
            console.clear();
            for (let key in bankData) {
                console.log(key + ', map : ' + bankData[key][0] + ', top : ' + bankData[key][1] + ', bottom : ' + bankData[key][5] + ', right : ' + bankData[key][7] + ', left : ' + bankData[key][3] + ', havenbag : ' + bankData[key][9]);
            }
        } else if (document.getElementById("phenix").checked) {
            if (!checkMaps(actualMap, phenixData)) {
                phenixData.push([actualMap, false, undefined, false, undefined, false, undefined, false, undefined, false, undefined, false]);
                createMarker(getMapIndex(actualMap, phenixData), phenixData);
                deleteEmptyPath(phenixData);
            } else if (checkMaps(actualMap, phenixData)) {
                removeArrow(getMapIndex(actualMap, phenixData), phenixData);
                deleteEmptyPath(phenixData);
            }
            console.clear();
            for (let key in phenixData) {
                console.log(key + ', map : ' + phenixData[key][0] + ', top : ' + phenixData[key][1] + ', bottom : ' + phenixData[key][5] + ', right : ' + phenixData[key][7] + ', left : ' + phenixData[key][3] + ', havenbag : ' + phenixData[key][9]);
            }
        } else {
            if (!checkMaps(actualMap, pathData)) {
                pathData.push([actualMap, false, undefined, false, undefined, false, undefined, false, undefined, false, undefined, false, false]);
                createMarker(getMapIndex(actualMap, pathData), pathData);
                deleteEmptyPath(pathData);
            } else if (checkMaps(actualMap, pathData)) {
                removeArrow(getMapIndex(actualMap, pathData), pathData);
                deleteEmptyPath(pathData);
            }
            console.clear();
            for (let key in pathData) {
                console.log(key + ', map : ' + pathData[key][0] + ', top : ' + pathData[key][1] + ', bottom : ' + pathData[key][5] + ', right : ' + pathData[key][7] + ', left : ' + pathData[key][3] + ', havenbag : ' + pathData[key][9] + ', gather : ' + pathData[key][11] + ', fight : ' + pathData[key][12]);
            }
        }
    }

    function deleteEmptyPath(array) {
        if (!array[getMapIndex(actualMap, array)][1] && !array[getMapIndex(actualMap, array)][3] && !array[getMapIndex(actualMap, array)][5] && !array[getMapIndex(actualMap, array)][7] && !array[getMapIndex(actualMap, array)][9]) {
            array.splice(getMapIndex(actualMap, array), 1);
        }
    }

    function removeArrow(key, array) {
        removeArrowWay(key, array, "pathTop", 2, "top", 1);
        removeArrowWay(key, array, "pathLeft", 4, "left", 1, 3);
        removeArrowWay(key, array, "pathBottom", 6, "bottom", 5);
        removeArrowWay(key, array, "pathRight", 8, "right", 7);
        removeArrowWay(key, array, "pathHavenBag", 10, "havenbag", 9);
    }

    function removeArrowWay(key, array, className, wayMarker, iconType, wayToggle) {
        if (document.getElementById(className).checked) {
            if (array[key][wayMarker] !== undefined) {
                array[key][wayToggle] = false;
                map.removeLayer(array[key][wayMarker]);
                array[key][wayMarker] = undefined;
            } else createMarkerWay(key, array, className, wayMarker, iconType, wayToggle);
        }
    }

    function createMarker(key, array) {
        createMarkerWay(key, array, "pathTop", 2, "top", 1);
        createMarkerWay(key, array, "pathLeft", 4, "left", 3);
        createMarkerWay(key, array, "pathBottom", 6, "bottom", 5);
        createMarkerWay(key, array, "pathRight", 8, "right", 7);
        createMarkerWay(key, array, "pathHavenBag", 10, "havenbag", 9);
    }

    function createMarkerWay(key, array, className, wayMarker, iconType, wayToggle) {
        if (document.getElementById(className).checked) {
            if (document.getElementById("gather").checked) {
                if (iconType == "havenbag"){
                    array[key][wayMarker] = L.marker(dofusXYToMapXY(actualMap.split(", ")[0], actualMap.split(", ")[1]), {
                        interactive: true,
                        zIndexOffset: 5000,
                        icon: icon[iconType].gather
                    }).addTo(map).bindPopup('Téléportation au zaap map : ' + havenBagData[havenBagData.length-1][1] + ' | mapID : ' + havenBagData[havenBagData.length-1][2]);
                } else {
                    array[key][wayMarker] = L.marker(dofusXYToMapXY(actualMap.split(", ")[0], actualMap.split(", ")[1]), {
                        interactive: false,
                        zIndexOffset: 5000,
                        icon: icon[iconType].gather
                    }).addTo(map);
                }
                array[key][11] = true;
            } else if (document.getElementById("fight").checked) {
                if (iconType == "havenbag"){
                    array[key][wayMarker] = L.marker(dofusXYToMapXY(actualMap.split(", ")[0], actualMap.split(", ")[1]), {
                        interactive: true,
                        zIndexOffset: 5000,
                        icon: icon[iconType].fight
                    }).addTo(map).bindPopup('Téléportation au zaap map : ' + havenBagData[havenBagData.length-1][1] + ' | mapID : ' + havenBagData[havenBagData.length-1][2]);
                } else {
                    array[key][wayMarker] = L.marker(dofusXYToMapXY(actualMap.split(", ")[0], actualMap.split(", ")[1]), {
                        interactive: false,
                        zIndexOffset: 5000,
                        icon: icon[iconType].fight

                    }).addTo(map);
                }
                array[key][12] = true;
            } else if (document.getElementById("bank").checked) {
                if (iconType == "right" || iconType == "left") {
                    array[key][wayMarker] = L.marker(dofusXYToMapXY(actualMap.split(", ")[0], actualMap.split(", ")[1] * 1 + (0.2)), {
                        interactive: false,
                        zIndexOffset: 4500,
                        icon: icon[iconType].bank
                    }).addTo(map);
                } else if (iconType == "top" || iconType == "bottom") {
                    array[key][wayMarker] = L.marker(dofusXYToMapXY(actualMap.split(", ")[0] * 1 + (0.1), actualMap.split(", ")[1]), {
                        interactive: false,
                        zIndexOffset: 4500,
                        icon: icon[iconType].bank
                    }).addTo(map);
                } else if (iconType == "havenbag"){
                    array[key][wayMarker] = L.marker(dofusXYToMapXY(actualMap.split(", ")[0], actualMap.split(", ")[1]), {
                        interactive: true,
                        zIndexOffset: 5000,
                        icon: icon[iconType].bank
                    }).addTo(map).bindPopup('Téléportation au zaap map : ' + havenBagData[havenBagData.length-1][1] + ' | mapID : ' + havenBagData[havenBagData.length-1][2]);
                }
                array[key][11] = true;
            } else if (document.getElementById("phenix").checked) {
                if (iconType == "right" || iconType == "left") {
                    array[key][wayMarker] = L.marker(dofusXYToMapXY(actualMap.split(", ")[0], actualMap.split(", ")[1] * 1 - (0.2)), {
                        interactive: false,
                        zIndexOffset: 4000,
                        icon: icon[iconType].phoenix
                    }).addTo(map);
                } else if (iconType == "top" || iconType == "bottom") {
                    array[key][wayMarker] = L.marker(dofusXYToMapXY(actualMap.split(", ")[0] * 1 - (0.1), actualMap.split(", ")[1]), {
                        interactive: false,
                        zIndexOffset: 4000,
                        icon: icon[iconType].phoenix
                    }).addTo(map);
                } else if (iconType == "havenbag"){
                    array[key][wayMarker] = L.marker(dofusXYToMapXY(actualMap.split(", ")[0], actualMap.split(", ")[1]), {
                        interactive: true,
                        zIndexOffset: 5000,
                        icon: icon[iconType].phoenix
                    }).addTo(map).bindPopup('Téléportation au zaap map : ' + havenBagData[havenBagData.length-1][1] + ' | mapID : ' + havenBagData[havenBagData.length-1][2]);
                }
                array[key][11] = true;
            } else {
                if (iconType == "havenbag"){
                    array[key][wayMarker] = L.marker(dofusXYToMapXY(actualMap.split(", ")[0], actualMap.split(", ")[1]), {
                        interactive: true,
                        zIndexOffset: 5000,
                        icon: icon[iconType].move
                    }).addTo(map).bindPopup('Téléportation au zaap map : ' + havenBagData[havenBagData.length-1][1] + ' | mapID : ' + havenBagData[havenBagData.length-1][2]);
                } else {
                    array[key][wayMarker] = L.marker(dofusXYToMapXY(actualMap.split(", ")[0], actualMap.split(", ")[1]), {
                        interactive: false,
                        zIndexOffset: 5000,
                        icon: icon[iconType].move
                    }).addTo(map);
                }
            }
            array[key][wayToggle] = true;
        }
    }

    function newRessourcePicker() {
        document.getElementById("ressourcePickerBot").innerHTML = '<span id="pickRessource' + picker + '" class="pickRessource ressourceColor1" onclick="clickOnTypePicker(\'' + picker + '\');" data-name="" data-ressourceid=""' +
            'style="background-position: -260px 0px; line-height: 49px !important; width: 49px !important; margin: 2px !important; height: 49px !important;">?</span>' + document.getElementById("ressourcePickerBot").innerHTML;
        gatherData.push('pickRessource' + picker);
        picker += 1;
        document.getElementById("ressourcePickerCreator").addEventListener("click", newRessourcePicker, false);
    }

    function pathGenerator(index, array) {
        var path = "";
        if (index !== undefined) {
            if (array.length !== 0) {
                if (array[index][9])
                    path = "havenbag";
                else {
                    if (array[index][1])
                        path = "top";
                    if (array[index][5])
                        path += (path === "" ? "" : "|") + "bottom";
                    if (array[index][3])
                        path += (path === "" ? "" : "|") + "left";
                    if (array[index][7])
                        path += (path === "" ? "" : "|") + "right";
                }
                return path;
            }
        }
    }

    function afterPhenix(map) {
        for (let index = 0; index < pathData.length; index++) {
            if (map == pathData[index][0]) {
                return index;
            }
        }
    }

    function gatherFigh(index) {
        var path = "";
        if (pathData[index][11])
            path = ", gather = true";
        if (pathData[index][12])
            path += ", fight = true";
        return path;
    }

    function addGather() {
        let res = "";
        for (let index = 0; index < gatherData.length; index++) {
            let str = document.getElementById(gatherData[index]).outerHTML;
            let regex = /data-name=\"(.*?)\"/g;
            let matche = regex.exec(str);
            for (let i = 0; i < ressources.length; i++) {
                if (ressources[i][1] == matche[1]) {
                    res += '\t' + ressources[i][0] + ',' + ' -- ' + ressources[i][1] + '\r\n';
                }
            }
        }
        return res;
    }

    function havenbagCheck(option) {
        for (let index = 0; index < havenBagData.length; index++) {
            if (havenBagData[index][option]) {
                return true;
            }
        }
        return false;
    }

    function generate() {
        var firstIf = false;
        var txt = "-- Generated On Dofus-Map with Drigtime's SwiftPath Script Maker --\r\n";
        txt += "GATHER = {\r\n";
        txt += addGather();
        txt += "} -- Les éléments à récolter\r\n" +
            "OPEN_BAGS = true -- Ouvrir les sacs de ressources au fur et à mesure\r\n" +
            "AUTO_DELETE = { } -- Les éléments à supprimer\r\n\r\n" +
            "MAX_MONSTERS = 8 -- Le nombre maximum de monstres dans un groupe à combattre.\r\n" +
            "MIN_MONSTERS = 1 -- Le nombre minimum de monstres dans un groupe à combattre.\r\n\r\n" +
            "FORBIDDEN_MONSTERS = { } -- Monstres interdits\r\n" +
            "FORCE_MONSTERS = { } -- Monstres obligatoires\r\n\r\n" +
            "MAX_COMBAT = 800 -- Nombre de combats maximum\r\n" +
            "\r\nfunction move()\r\n";
        if (havenbagCheck(3)) {
            txt += "\tif map:onMap(\"0,0\") then\r\n";
            firstIf = false;
            for (let index = 0; index < havenBagData.length; index++) {
                if (havenBagData[index][3]) {
                    if (!firstIf) {
                        txt += "\t\tif actualMap == \"" + havenBagData[index][0] + "\" then\r\n\t\t\tmap:changeMap(\"zaap(" + havenBagData[index][2] + ")\")\r\n";
                        firstIf = true;
                    } else
                        txt += "\t\telseif actualMap == \"" + havenBagData[index][0] + "\" then\r\n\t\t\tmap:changeMap(\"zaap(" + havenBagData[index][2] + ")\")\r\n";
                }
            }
            txt += "\t\tend\r\n" +
                "\telse\r\n" +
                "\t\tactualMap = map:currentMap()\r\n" +
                "\tend\r\n";
        }
        txt += "\treturn {\r\n" +
            "\t\t{map = \"83887104\", path = \"396\"}, --Interieur banque Astrub vers Sortie--\r\n" +
            "\t\t{map = \"54534165\", path = \"424\"}, --Interieur banque Frigost vers Sortie--\r\n" +
            "\t\t{map = \"2885641\", path = \"424\"}, --Interieur banque Bonta vers Sortie--\r\n" +
            "\t\t{map = \"99095051\", path = \"410\"}, --Interieur banque Amakna vers Sortie--\r\n" +
            "\t\t{map = \"8912911\", path = \"424\"}, --Interieur banque Brakmar vers Sortie--\r\n" +
            "\t\t{map = \"91753985\", path = \"396\"}, --Interieur banque Sufokia vers Sortie (Non fait)--\r\n" +
            "\t\t{map = \"86511105\", door = \"452\"}, --Interieur banque Ottomaï vers Sortie--\r\n" +
            "\t\t{map = \"8129542\", path = \"409\"}, --Interieur banque Pandala vers Sortie--\r\n" +
            "\t\t{map = \"84935175\", path = \"425\"}, --Interieur banque Montagne Koalak vers Sortie--\r\n";
        for (let key in pathData) {
            txt += '\t\t{map = "' + pathData[key][0].replace(" ", "") + '", path = "' + pathGenerator(key, pathData) + '"' + gatherFigh(key) + '},\r\n';
        }
        txt += "\t}\r\nend\r\n\r\nfunction bank()\r\n";
        if (havenbagCheck(4)) {
            txt += "\tif map:onMap(\"0,0\") then\r\n";
            firstIf = false;
            for (let index = 0; index < havenBagData.length; index++) {
                if (havenBagData[index][4]) {
                    if (!firstIf) {
                        txt += "\t\tif actualMap == \"" + havenBagData[index][0] + "\" then\r\n\t\t\tmap:changeMap(\"zaap(" + havenBagData[index][2] + ")\")\r\n";
                        firstIf = true;
                    } else
                        txt += "\t\telseif actualMap == \"" + havenBagData[index][0] + "\" then\r\n\t\t\tmap:changeMap(\"zaap(" + havenBagData[index][2] + ")\")\r\n";
                }
            }
            txt += "\t\tend\r\n" +
                "\telse\r\n" +
                "\t\tactualMap = map:currentMap()\r\n" +
                "\tend\r\n";
        }
        txt += "\treturn {\r\n";
        for (let key in bankData) {
            txt += '\t\t{map = "' + bankData[key][0].replace(" ", "") + '", path = "' + pathGenerator(key, bankData) + '"},\r\n';
        }
        txt += "\t\t{map = \"84674566\", door = \"303\"}, --Devant banque Astrub--\r\n" +
            "\t\t{map = \"83887104\", path = \"396\", npcBank = true}, --Banque Astrub--\r\n" +
            "\t\t{map = \"54172457\", door = \"358\"}, --Devant banque Frigost--\r\n" +
            "\t\t{map = \"54534165\", path = \"424\", npcBank = true}, --Banque Frigost--\r\n" +
            "\t\t{map = \"147254\", door = \"383\"}, --Devant banque Bonta--\r\n" +
            "\t\t{map = \"2885641\", path = \"424\", npcBank = true}, --Banque Bonta--\r\n" +
            "\t\t{map = \"88081177\", door = \"216\"}, --Devant banque Amakna--\r\n" +
            "\t\t{map = \"99095051\", path = \"410\", npcBank = true}, --Banque Amakna--\r\n" +
            "\t\t{map = \"144931\", door = \"248\"}, --Devant banque Brakmar--\r\n" +
            "\t\t{map = \"8912911\", path = \"424\", npcBank = true}, --Banque Brakmar--\r\n" +
            "\t\t{map = \"90703872\", door = \"302\"}, --Devant banque Sufokia --\r\n" +
            "\t\t{map = \"91753985\", path = \"494\", npcBank = true}, --Banque Sufokia--\r\n" +
            "\t\t{map = \"155157\", door = \"355\"}, --Devant banque Ottomaï--\r\n" +
            "\t\t{map = \"86511105\", door = \"452\", npcBank = true}, --Banque Ottomaï--\r\n" +
            "\t\t{map = \"12580\", door = \"284\"}, --Devant banque Pandala--\r\n" +
            "\t\t{map = \"8129542\", path = \"409\", npcBank = true}, --Banque Pandala--\r\n" +
            "\t\t{map = \"73400323\", door = \"330\"}, --Devant banque Montagne Koalak--\r\n" +
            "\t\t{map = \"84935175\", path = \"425\", npcBank = true}, --Banque Montagne Koalak--\r\n\t}\r\nend\r\n" +
            "\r\n\r\nfunction phenix()\r\n";
        if (havenbagCheck(5)) {
            txt += "\tif map:onMap(\"0,0\") then\r\n";
            firstIf = false;
            for (let index = 0; index < havenBagData.length; index++) {
                if (havenBagData[index][5]) {
                    if (!firstIf) {
                        txt += "\t\tif actualMap == \"" + havenBagData[index][0] + "\" then\r\n\t\t\tmap:changeMap(\"zaap(" + havenBagData[index][2] + ")\")\r\n";
                        firstIf = true;
                    } else
                        txt += "\t\telseif actualMap == \"" + havenBagData[index][0] + "\" then\r\n\t\t\tmap:changeMap(\"zaap(" + havenBagData[index][2] + ")\")\r\n";
                }
            }
            txt += "\t\tend\r\n" +
                "\telse\r\n" +
                "\t\tactualMap = map:currentMap()\r\n" +
                "\tend\r\n";
        }
        txt += "\treturn {\r\n";
        for (let key in phenixData) {
            txt += '\t\t{map = "' + phenixData[key][0].replace(" ", "") + '", path = "' + pathGenerator(key, phenixData) + '"},\r\n';
        }
        txt += "\t\t{map = \"12,12\", phenix = \"184\", path = \"" + pathGenerator(afterPhenix("12, 12"), pathData) + "\"},\r\n" +
            "\t\t{map = \"7,36\", phenix = \"0\", path = \"" + pathGenerator(afterPhenix("7, 36"), pathData) + "\"},\r\n" +
            "\t\t{map = \"22,22\", phenix = \"272\", path = \"" + pathGenerator(afterPhenix("22, 22"), pathData) + "\"},\r\n" +
            "\t\t{map = \"10,19\", phenix = \"192\", path = \"" + pathGenerator(afterPhenix("10, 19"), pathData) + "\"},\r\n" +
            "\t\t{map = \"5,1\", phenix = \"0\", path = \"" + pathGenerator(afterPhenix("5, 1"), pathData) + "\"},\r\n" +
            "\t\t{map = \"2,-1\", phenix = \"0\", path = \"" + pathGenerator(afterPhenix("2, -1"), pathData) + "\"},\r\n" +
            "\t\t{map = \"13,-7\", phenix = \"0\", path = \"" + pathGenerator(afterPhenix("13, -7"), pathData) + "\"},\r\n" +
            "\t\t{map = \"5,-9\", phenix = \"116\", path = \"" + pathGenerator(afterPhenix("5, -9"), pathData) + "\"},\r\n" +
            "\t\t{map = \"2,-12\", phenix = \"272\", path = \"" + pathGenerator(afterPhenix("2, -12"), pathData) + "\"},\r\n" +
            "\t\t{map = \"-6,-12\", phenix = \"0\", path = \"" + pathGenerator(afterPhenix("-6, -12"), pathData) + "\"},\r\n" +
            "\t\t{map = \"36,10\", phenix = \"330\", path = \"" + pathGenerator(afterPhenix("36, 10"), pathData) + "\"},\r\n" +
            "\t\t{map = \"25,-4\", phenix = \"450\", path = \"" + pathGenerator(afterPhenix("25, -4"), pathData) + "\"},\r\n" +
            "\t\t{map = \"27,-33\", phenix = \"0\", path = \"" + pathGenerator(afterPhenix("27, -33"), pathData) + "\"},\r\n" +
            "\t\t{map = \"24,-43\", phenix = \"245\", path = \"" + pathGenerator(afterPhenix("24, -43"), pathData) + "\"},\r\n" +
            "\t\t{map = \"17,-36\", phenix = \"0\", path = \"" + pathGenerator(afterPhenix("17, -36"), pathData) + "\"},\r\n" +
            "\t\t{map = \"-13,-29\", phenix = \"0\", path = \"" + pathGenerator(afterPhenix("-13, -29"), pathData) + "\"},\r\n" +
            "\t\t{map = \"-10,-54\", phenix = \"342\", path = \"" + pathGenerator(afterPhenix("-10, -54"), pathData) + "\"},\r\n" +
            "\t\t{map = \"-33,-56\", phenix = \"0\", path = \"" + pathGenerator(afterPhenix("-33, -56"), pathData) + "\"},\r\n" +
            "\t\t{map = \"-10,13\", phenix = \"354\", path = \"" + pathGenerator(afterPhenix("-10, 13"), pathData) + "\"},\r\n" +
            "\t\t{map = \"-14,31\", phenix = \"243\", path = \"" + pathGenerator(afterPhenix("-14, 31"), pathData) + "\"},\r\n" +
            "\t\t{map = \"-26,34\", phenix = \"0\", path = \"" + pathGenerator(afterPhenix("-26, 34"), pathData) + "\"},\r\n" +
            "\t\t{map = \"-26,36\", phenix = \"0\", path = \"" + pathGenerator(afterPhenix("-26, 36"), pathData) + "\"},\r\n" +
            "\t\t{map = \"-55,40\", phenix = \"240\", path = \"" + pathGenerator(afterPhenix("-55, 40"), pathData) + "\"},\r\n" +
            "\t\t{map = \"-58,18\", phenix = \"354\", path = \"" + pathGenerator(afterPhenix("-58, 18"), pathData) + "\"},\r\n" +
            "\t\t{map = \"-60,-3\", phenix = \"0\", path = \"" + pathGenerator(afterPhenix("-60, -3"), pathData) + "\"},\r\n" +
            "\t\t{map = \"-43,0\", phenix = \"259\", path = \"" + pathGenerator(afterPhenix("-43, 0"), pathData) + "\"},\r\n" +
            "\t\t{map = \"-41,-17\", phenix = \"0\", path = \"" + pathGenerator(afterPhenix("-41, -17"), pathData) + "\"},\r\n" +
            "\t\t{map = \"-43,-19\", phenix = \"0\", path = \"" + pathGenerator(afterPhenix("-43, -19"), pathData) + "\"},\r\n" +
            "\t\t{map = \"-53,-40\", phenix = \"0\", path = \"" + pathGenerator(afterPhenix("-53, -40"), pathData) + "\"},\r\n" +
            "\t\t{map = \"-67,-44\", phenix = \"219\", path = \"" + pathGenerator(afterPhenix("-67 ,-44"), pathData) + "\"},\r\n" +
            "\t\t{map = \"-60,-79\", phenix = \"0\", path = \"" + pathGenerator(afterPhenix("-60, -79"), pathData) + "\"}\r\n\t}\r\nend\r\n";

        saveTextAsFile(txt);
    }

    function saveTextAsFile(txt) {
        var textToSaveAsBlob = new Blob([txt], {
            type: "text/plain"
        });
        var textToSaveAsURL = window.URL.createObjectURL(textToSaveAsBlob);
        var fileNameToSaveAs;
        if (document.getElementById('fileName').value == "") fileNameToSaveAs = "Trajet.lua";
        else fileNameToSaveAs = document.getElementById('fileName').value + ".lua";
        var downloadLink = document.createElement("a");
        downloadLink.download = fileNameToSaveAs;
        downloadLink.innerHTML = "Download File";
        downloadLink.href = textToSaveAsURL;
        downloadLink.style.display = "none";
        document.body.appendChild(downloadLink);
        downloadLink.click();
    }

    function deletePath() {
        for (let index = 0; index < pathData.length; index) {
            if (pathData[index][2]) map.removeLayer(pathData[index][2]);
            if (pathData[index][4]) map.removeLayer(pathData[index][4]);
            if (pathData[index][6]) map.removeLayer(pathData[index][6]);
            if (pathData[index][8]) map.removeLayer(pathData[index][8]);
            if (pathData[index][10]) map.removeLayer(pathData[index][10]);
            pathData.splice(index, 1);
        }
        for (let index = 0; index < bankData.length; index) {
            if (bankData[index][2]) map.removeLayer(bankData[index][2]);
            if (bankData[index][4]) map.removeLayer(bankData[index][4]);
            if (bankData[index][6]) map.removeLayer(bankData[index][6]);
            if (bankData[index][8]) map.removeLayer(bankData[index][8]);
            if (bankData[index][10]) map.removeLayer(bankData[index][10]);
            bankData.splice(index, 1);
        }
        for (let index = 0; index < phenixData.length; index) {
            if (phenixData[index][2]) map.removeLayer(phenixData[index][2]);
            if (phenixData[index][4]) map.removeLayer(phenixData[index][4]);
            if (phenixData[index][6]) map.removeLayer(phenixData[index][6]);
            if (phenixData[index][8]) map.removeLayer(phenixData[index][8]);
            if (phenixData[index][10]) map.removeLayer(phenixData[index][10]);
            phenixData.splice(index, 1);
        }
        console.clear();
    }

    function languageSelector(params) {
        switch (params) {
            case "fr":
                document.getElementById('top').innerHTML = 'Haut';
                document.getElementById('bottom').innerHTML = 'Bas';
                document.getElementById('left').innerHTML = 'Gauche';
                document.getElementById('right').innerHTML = 'Droite';
                document.getElementById('havenBag').innerHTML = 'Havre-sac';
                document.getElementById('tdgather').innerHTML = 'Récolte';
                document.getElementById('tdfight').innerHTML = 'Combat';
                document.getElementById('tdbank').innerHTML = 'Banque';
                document.getElementById('tdphoenix').innerHTML = 'Phenix';
                document.getElementById('tdMove').innerHTML = 'Deplacement';
                document.getElementById('restogather').innerText = 'Ressources à récolter :';
                document.getElementById('saveFile').innerText = 'Sauvegarder';
                document.getElementById('fileName').placeholder = 'Nom du fichier';
                document.getElementById('deletePath').innerText = 'Supprimer';
                document.getElementById('loadAFile').innerText = 'Charger';
                document.getElementById('languageDisplayer').classList.add('flag-icon-fr');
                document.getElementById('languageDisplayer').classList.remove('flag-icon-es');
                document.getElementById('languageDisplayer').classList.remove('flag-icon-gb');
                break;
            case "en":
                document.getElementById('top').innerHTML = 'Top';
                document.getElementById('bottom').innerHTML = 'Bottom';
                document.getElementById('left').innerHTML = 'Left';
                document.getElementById('right').innerHTML = 'Right';
                document.getElementById('havenBag').innerHTML = 'Haven bag';
                document.getElementById('tdgather').innerHTML = 'Gather';
                document.getElementById('tdfight').innerHTML = 'Fight';
                document.getElementById('tdbank').innerHTML = 'Bank';
                document.getElementById('tdphoenix').innerHTML = 'Phoenix';
                document.getElementById('tdMove').innerHTML = 'Move';
                document.getElementById('restogather').innerText = 'Resources to gather :';
                document.getElementById('saveFile').innerText = 'Save';
                document.getElementById('fileName').placeholder = 'Name of the file';
                document.getElementById('deletePath').innerText = 'Delete';
                document.getElementById('loadAFile').innerText = 'Load';
                document.getElementById('languageDisplayer').classList.remove('flag-icon-fr');
                document.getElementById('languageDisplayer').classList.remove('flag-icon-es');
                document.getElementById('languageDisplayer').classList.add('flag-icon-gb');
                break;
            case "es":
                document.getElementById('top').innerHTML = 'Arriba';
                document.getElementById('bottom').innerHTML = 'Abajo';
                document.getElementById('left').innerHTML = 'Izquierda';
                document.getElementById('right').innerHTML = 'Derecho';
                document.getElementById('havenBag').innerHTML = 'Merkasako';
                document.getElementById('tdgather').innerHTML = 'Cosecha';
                document.getElementById('tdfight').innerHTML = 'Lucha';
                document.getElementById('tdbank').innerHTML = 'Banco';
                document.getElementById('tdphoenix').innerHTML = 'Fénix';
                document.getElementById('tdMove').innerHTML = 'Desplazamiento';
                document.getElementById('restogather').innerText = 'Recursos para cosechar :';
                document.getElementById('saveFile').innerText = 'Salvar';
                document.getElementById('fileName').placeholder = 'Nombre del archivo';
                document.getElementById('deletePath').innerText = 'Borrar';
                document.getElementById('loadAFile').innerText = 'Carga';
                document.getElementById('languageDisplayer').classList.remove('flag-icon-fr');
                document.getElementById('languageDisplayer').classList.add('flag-icon-es');
                document.getElementById('languageDisplayer').classList.remove('flag-icon-gb');
                break;
            default:
                document.getElementById('top').innerHTML = 'Haut';
                document.getElementById('bottom').innerHTML = 'Bas';
                document.getElementById('left').innerHTML = 'Gauche';
                document.getElementById('right').innerHTML = 'Droite';
                document.getElementById('tdgather').innerHTML = 'Récolte';
                document.getElementById('tdfight').innerHTML = 'Combat';
                document.getElementById('tdbank').innerHTML = 'Banque';
                document.getElementById('tdphoenix').innerHTML = 'Phenix';
                document.getElementById('tdMove').innerHTML = 'Deplacement';
                document.getElementById('restogather').innerText = 'Ressources à récolter :';
                document.getElementById('saveFile').innerText = 'Sauvegarder';
                document.getElementById('fileName').placeholder = 'Nom du fichier';
                document.getElementById('deletePath').innerText = 'Supprimer';
                document.getElementById('loadAFile').innerText = 'Charger';
                document.getElementById('languageDisplayer').classList.add('flag-icon-fr');
                document.getElementById('languageDisplayer').classList.remove('flag-icon-es');
                document.getElementById('languageDisplayer').classList.remove('flag-icon-gb');
                break;
        }
    }

    document.getElementById('file').onchange = function () {

        var file = this.files[0];
        var content;
        var reader = new FileReader();
        reader.onload = function (progressEvent) {
            // Entire file
            content = this.result;
            let regexPath = /function move\(\)[\s\S]+?return.*?{\r\n([\s\S]+?)}\r\n.*end/g;
            let regexBank = /function bank\(\)[\s\S]+?return.*?{\r\n([\s\S]+?)}\r\n.*end/g;
            let regexPhenix = /function phenix\(\)[\s\S]+?return.*?{\r\n([\s\S]+?)}\r\n.*end/g;
            let result;
            let matche = regexBank.exec(content);
            loadingFile = true;
            document.getElementById("pathTop").checked = false;
            document.getElementById("pathLeft").checked = false;
            document.getElementById("pathBottom").checked = false;
            document.getElementById("pathRight").checked = false;
            document.getElementById("pathHavenBag").checked = false;
            if (matche !== null) {
                result = matche[1];
                result = result.split('\r\n');
                for (let index = 0; index < result.length; index++) {
                    matche = /map.?=.?"(.*?)"/g.exec(result[index]);
                    if (matche !== null) actualMap = matche[1];
                    actualMap = actualMap.replace(/,/g, ", ");
                    if (/(-|)[0-9]+?,\s(-|)[0-9]+?/g.exec(actualMap)) {
                        matche = /top/g.exec(result[index]);
                        if (matche !== null) document.getElementById("pathTop").checked = true;
                        matche = /left/g.exec(result[index]);
                        if (matche !== null) document.getElementById("pathLeft").checked = true;
                        matche = /bottom/g.exec(result[index]);
                        if (matche !== null) document.getElementById("pathBottom").checked = true;
                        matche = /right/g.exec(result[index]);
                        if (matche !== null) document.getElementById("pathRight").checked = true;
                        document.getElementById("bank").checked = true;
                        onMapClick();
                        document.getElementById("pathTop").checked = false;
                        document.getElementById("pathLeft").checked = false;
                        document.getElementById("pathBottom").checked = false;
                        document.getElementById("pathRight").checked = false;
                    }
                }
            }
            matche = regexPath.exec(content);
            if (matche !== null) {
                result = matche[1];
                result = result.split('\r\n');
                for (let index = 0; index < result.length; index++) {
                    matche = /map.?=.?"(.*?)"/g.exec(result[index]);
                    if (matche !== null) actualMap = matche[1];
                    actualMap = actualMap.replace(/,/g, ", ");
                    if (/(-|)[0-9]+?,\s(-|)[0-9]+?/g.exec(actualMap)) {
                        matche = /top/g.exec(result[index]);
                        if (matche !== null) document.getElementById("pathTop").checked = true;
                        matche = /left/g.exec(result[index]);
                        if (matche !== null) document.getElementById("pathLeft").checked = true;
                        matche = /bottom/g.exec(result[index]);
                        if (matche !== null) document.getElementById("pathBottom").checked = true;
                        matche = /right/g.exec(result[index]);
                        if (matche !== null) document.getElementById("pathRight").checked = true;
                        matche = /gather/g.exec(result[index]);
                        if (matche !== null) document.getElementById("gather").checked = true;
                        matche = /fight/g.exec(result[index]);
                        if (matche !== null) document.getElementById("fight").checked = true;
                        onMapClick();
                        document.getElementById("pathTop").checked = false;
                        document.getElementById("pathLeft").checked = false;
                        document.getElementById("pathBottom").checked = false;
                        document.getElementById("pathRight").checked = false;
                        document.getElementById("gather").checked = false;
                        document.getElementById("fight").checked = false;
                    }
                }
            }
            matche = regexPhenix.exec(content);
            if (matche !== null) {
                result = matche[1];
                result = result.split('\r\n');
                for (let index = 0; index < result.length; index++) {
                    matche = /map.?=.?"(.*?)"/g.exec(result[index]);
                    if (matche !== null) actualMap = matche[1];
                    actualMap = actualMap.replace(/,/g, ", ");
                    if (/(-|)[0-9]+?,\s(-|)[0-9]+?/g.exec(actualMap)) {
                        matche = /top/g.exec(result[index]);
                        if (matche !== null) document.getElementById("pathTop").checked = true;
                        matche = /left/g.exec(result[index]);
                        if (matche !== null) document.getElementById("pathLeft").checked = true;
                        matche = /bottom/g.exec(result[index]);
                        if (matche !== null) document.getElementById("pathBottom").checked = true;
                        matche = /right/g.exec(result[index]);
                        if (matche !== null) document.getElementById("pathRight").checked = true;
                        document.getElementById("phenix").checked = true;
                        onMapClick();
                        document.getElementById("pathTop").checked = false;
                        document.getElementById("pathLeft").checked = false;
                        document.getElementById("pathBottom").checked = false;
                        document.getElementById("pathRight").checked = false;
                    }
                }
            }
            document.getElementById("move").checked = true;
            loadingFile = false;
        };
        reader.readAsText(file);
    };

    function keypressHandler(evt) {
        var keyCode = evt.key;
        switch (keyCode) {
            case "z":
                if (!document.getElementById("pathTop").checked)
                    document.getElementById("pathTop").checked = true;
                else
                    document.getElementById("pathTop").checked = false;
                break;
            case "q":
                if (!document.getElementById("pathLeft").checked)
                    document.getElementById("pathLeft").checked = true;
                else
                    document.getElementById("pathLeft").checked = false;
                break;
            case "s":
                if (!document.getElementById("pathBottom").checked)
                    document.getElementById("pathBottom").checked = true;
                else
                    document.getElementById("pathBottom").checked = false;
                break;
            case "d":
                if (!document.getElementById("pathRight").checked)
                    document.getElementById("pathRight").checked = true;
                else
                    document.getElementById("pathRight").checked = false;
                break;
            default:
                break;
        }
    }

    setTimeout(function () {
        $('#exampleModal').on('click', '.btn-primary', function () {
            let e = document.getElementById("sel1");
            var objMap = JSON.parse(e.options[e.selectedIndex].value);
            if (document.getElementById('move').checked || document.getElementById('gather').checked || document.getElementById('fight').checked)
                havenBagData.push([actualMap.split(", ")[0] + "," + actualMap.split(", ")[1], objMap.map, objMap.mapid, true, false, false]);
            else if (document.getElementById('bank').checked)
                havenBagData.push([actualMap.split(", ")[0] + "," + actualMap.split(", ")[1], objMap.map, objMap.mapid, false, true, false]);
            else if (document.getElementById('phenix').checked)
                havenBagData.push([actualMap.split(", ")[0] + "," + actualMap.split(", ")[1], objMap.map, objMap.mapid, false, false, true]);
            $('#exampleModal').modal('hide');
            onMapClick();
        });
    }, 0);

    setTimeout(function () {
        $('#exampleModal').on('click', '.btn-secondary', function () {
            havenToggle = false;
            $('#exampleModal').modal('hide');
        });
    }, 0);

    setTimeout(function () {
        $('#exampleModal').on('click', '.close', function () {
            havenToggle = false;
            $('#exampleModal').modal('hide');
        });
    }, 0);

    setTimeout(function () {
        map.on('click', onMapClick);
    }, 0);

    document.addEventListener("keypress", keypressHandler, false);
    document.getElementById("saveFile").addEventListener("click", generate, false);
    document.getElementById("ressourcePickerCreator").addEventListener("click", newRessourcePicker, false);
    document.getElementById("deletePath").addEventListener("click", deletePath, false);
    document.getElementById("fr").addEventListener("click", function () {
        languageSelector("fr");
    }, false);
    document.getElementById("en").addEventListener("click", function () {
        languageSelector("en");
    }, false);
    document.getElementById("es").addEventListener("click", function () {
        languageSelector("es");
    }, false);
})();