This repository has been archived on 2023-01-26. You can view files and clone it, but cannot push or open issues or pull requests.
scripts-old/dist/quickbar/extendedMapPopup.js

1 line
7.7 KiB
JavaScript

!function(){function e(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function n(n){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{},r=Object.keys(a);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(a).filter((function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable})))),r.forEach((function(t){e(n,t,a[t])}))}return n}function t(e){if(null===e||!0===e||!1===e)return NaN;var n=Number(e);return isNaN(n)?n:n<0?Math.ceil(n):Math.floor(n)}function a(e,n){if(n.length<e)throw new TypeError(e+" argument"+(e>1?"s":"")+" required, but only "+n.length+" present")}function r(e){a(1,arguments);var n=Object.prototype.toString.call(e);return e instanceof Date||"object"==typeof e&&"[object Date]"===n?new Date(e.getTime()):"number"==typeof e||"[object Number]"===n?new Date(e):("string"!=typeof e&&"[object String]"!==n||"undefined"==typeof console||(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"),console.warn((new Error).stack)),new Date(NaN))}function o(e,n){a(2,arguments);var o=r(e).getTime(),i=t(n);return new Date(o+i)}const i={pl_PL:{ennobledAt:"Podbita o",never:"Nigdy",possibleLoyalty:"Prawdopodobne poparcie",canSendNoble:"Można wysłać szlachcica",yes:"Tak",no:"Nie"},en_DK:{ennobledAt:"Ennobled at",never:"Never",possibleLoyalty:"Possible loyalty",canSendNoble:"Can send noble",yes:"Yes",no:"No"},de_DE:{ennobledAt:"Adelung bei",never:"Nie",possibleLoyalty:"Mögliche Zustimmung",canSendNoble:"Kann Adelsgeschlecht senden",yes:"Ja",no:"Nein"}};var l=({query:e,variables:n={}}={})=>fetch("https://api.tribalwarshelp.com/graphql",{method:"POST",body:JSON.stringify({query:e,variables:n}),headers:{"Content-Type":"application/json"}}).then((e=>e.json())).then((({data:e,errors:n})=>{if(n&&Array.isArray(n)&&n.length>0)throw new Error(n[0].message);return new Promise((n=>n(e)))}));const s=(e,n)=>new Date(e).toLocaleDateString(void 0,n||{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"});var p=e=>image_base+`unit/unit_${e}.png`;function d(e,n){a(2,arguments);var t=r(e),o=r(n);return t.getTime()-o.getTime()}var c=(e,n)=>{let t=25+Math.abs(function(e,n){a(2,arguments);var t=d(e,n)/6e4;return t>0?Math.floor(t):Math.ceil(t)}(e,new Date))*(n/60);return t>100&&(t=100),Math.floor(t)};const u=window.location.host.split(".")[0],g="kiszkowaty_extended_map_popup_server_cfg",y=i[window.game_data.locale]||i.en_DK,b=()=>((e,n={})=>{const t=localStorage.getItem(e);let a=n;return t&&(a=JSON.parse(t)),a})(g),m=(e={})=>{var n,t;n=g,t=e,localStorage.setItem(n,JSON.stringify(t))},f=async()=>{let e=b();var n;return e&&e.server&&(n=new Date(e.loadedAt),!(Math.abs(n.getTime()-(new Date).getTime())>864e5))&&e.server.config&&e.server.config.speed&&e.server.config.snob&&e.server.config.snob.maxDist&&e.server.config.unitSpeed&&e.server.unitConfig||(e=await l({query:"\n query server($key: String!) {\n server(key: $key) {\n config {\n speed\n unitSpeed\n snob {\n maxDist\n }\n }\n unitConfig {\n spear {\n speed\n }\n sword {\n speed\n }\n axe {\n speed\n }\n archer {\n speed\n }\n spy {\n speed\n }\n light {\n speed\n }\n marcher {\n speed\n }\n heavy {\n speed\n }\n ram {\n speed\n }\n catapult {\n speed\n }\n knight {\n speed\n }\n snob {\n speed\n }\n }\n }\n }\n",variables:{key:u}}),e.loadedAt=new Date,m(e)),e&&e.server&&e.server.config?{config:e.server.config,unitConfig:e.server.unitConfig}:{}},h=async(e,{cacheOnly:n=!1}={})=>{if(e){if(n||TWMap.popup.extendedMapPopupCache[e])return TWMap.popup.extendedMapPopupCache[e];try{const n=await l({query:"\n query ennoblements($server: String!, $filter: EnnoblementFilter!, $sort: [String!], $limit: Int) {\n ennoblements(server: $server, filter: $filter, sort: $sort, limit: $limit) {\n items {\n ennobledAt\n village {\n id\n }\n }\n }\n }\n",variables:{server:u,sort:["ennobledAt DESC"],filter:{villageID:[e]},limit:1}});return TWMap.popup.extendedMapPopupCache[e]=n,n}catch(e){console.log("loadVillageData",e)}}},v=e=>e%2==0?"#f8f4e8":"#ded3b9;",w=(e,n)=>`\n <td style="padding: 2px; background-color: ${v(n)};">\n <img\n src="${e.img}"\n title="${e.name}"\n alt="${e.name}"\n />\n </td>\n `,M=(e,n)=>`\n <td style="padding: 2px; background-color: ${v(n)};">\n ${s(function(e,n){a(2,arguments);var r=t(n);return o(e,6e4*r)}(Timing.getCurrentServerTime(),e))}\n </td>\n `,S=(e,t,{config:a,unitConfig:r})=>{const o=TWMap.CoordByXY(TWMap.villageKey[e]),i=((e,n,t,a)=>{const r=e-t,o=n-a;return Math.sqrt(r*r+o*o)})(o[0],o[1],window.game_data.village.x,window.game_data.village.y),l=t&&t.ennoblements&&t.ennoblements.items&&t.ennoblements.items.length>0?t.ennoblements.items[0]:void 0,d=document.querySelector("#map_popup #info_content tbody");let u=d.querySelector("#units");u||(u=document.createElement("tr"),u.id="units",d.appendChild(u));const g=((e={})=>{const t=[];for(let a in e)0!==e[a].speed&&t.push(n({},e[a],{name:a,img:p(a)}));return t})(r);u.innerHTML=`\n <td colspan="2">\n <table style="border: 1px solid #ded3b9; max-width: 450px;"\n width="100%"\n cellpadding="0"\n cellspacing="0">\n <tbody>\n <tr class="center">\n ${g.map(w).join("")}\n </tr>\n <tr class="center">\n ${g.map(((e,n)=>M(((e,n)=>Math.round(e*n))(i,e.speed),n))).join("")}\n </tr>\n </tbody>\n </table>\n </td>\n `;let b=d.querySelector("#lastEnnobledAt");b||(b=document.createElement("tr"),b.id="lastEnnobledAt",d.appendChild(b)),b.innerHTML=`\n <td>\n ${y.ennobledAt}:\n </td>\n <td>\n ${l?s(l.ennobledAt):y.never}\n </td>\n `;let m=d.querySelector("#loyalty");m||(m=document.createElement("tr"),m.id="loyalty",d.appendChild(m)),m.innerHTML=`\n <td>\n ${y.possibleLoyalty}:\n </td>\n <td>\n ${l?c(new Date(l.ennobledAt),a.speed):100}\n </td>\n `;let f=d.querySelector("#canSendNoble");f||(f=document.createElement("tr"),f.id="canSendNoble",d.appendChild(f)),f.innerHTML=`\n <td>\n ${y.canSendNoble}:\n </td>\n <td>\n ${i<a.snob.maxDist?y.yes:y.no}\n </td>\n `};!async function(){try{const n=await f();TWMap.popup.extendedMapPopupCache={},TWMap.popup._loadVillage=TWMap.popup.loadVillage,TWMap.popup.loadVillage=(e=n,async n=>{TWMap.popup._loadVillage(n);const t=await h(parseInt(n));t&&S(parseInt(n),t,e)}),TWMap.popup._displayForVillage=TWMap.popup.displayForVillage,TWMap.popup.displayForVillage=(e=>async(n,t,a)=>{TWMap.popup._displayForVillage(n,t,a);const r=await h(parseInt(n.id),{cacheOnly:window.game_data.features.Premium.active});r&&S(parseInt(n.id),r,e)})(n)}catch(e){console.log("extended map popup",e)}var e}()}();