// ==UserScript== // @name Wykrywacz herosów aldous // @version 0.1 // @description Wykrywacz herosów aldous // @author Tesu // @match http://aldous.margonem.pl/ // @grant none // ==/UserScript== new class { constructor() { this.storageName = 'wykrywacz-herosow-informacje'; this.webHookUrl = 'https://discordapp.com/api/webhooks/638407799231217695/LnT7ss23CE5iLh8nR7_v-h3di082Keoya7csCNhnsvkLoz4MzNrzK6SW0JHe6kAeWIil'; this.informations = JSON.parse(localStorage.getItem(this.storageName)) || {}; this.newInterface = window.Engine !== undefined; this.world = window.location.host.split('.')[0]; this.worlName = this.world[0].toUpperCase() + this.world.substring(1); this.initListener(); } get npcs() { return this.newInterface ? this.npcsOnNewInterface : window.g.npc; } get map() { return this.newInterface ? window.Engine.map.d : window.map; } get hero() { return this.newInterface ? window.Engine.hero.d : window.hero; } get ts() { return Date.now() / 1000; } get npcsOnNewInterface() { const npcs = {}; Object.entries(window.Engine.npcs.check()).forEach(([id, value]) => { npcs[id] = value.d; }); return npcs; } saveStorage() { localStorage.setItem(this.storageName, JSON.stringify(this.informations)); } checkInInformations(id) { if (this.informations[id] === undefined) { this.informations[id] = this.ts; this.saveStorage(); return true; } if (this.informations[id] + 600 < this.ts) { this.informations[id] = this.ts; this.saveStorage(); return true; } return false; } checkNpcType(npc) { return npc.wt > 79; } checkNpc([id, value]) { if (this.npcs[id] !== undefined) return; if (!this.checkNpcType(value)) return; if (this.checkInInformations(id)) { this.sendInformationsToDiscord(value); } } sendInformationsToDiscord(npc) { fetch(this.webHookUrl, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ embeds: [{ 'title': `${this.hero.nick} · ${this.hero.lvl}${this.hero.prof} znalazł herosa/tytana!`, 'color': ((Math.floor(npc.lvl / 300 * 221) + 32) * 256 + (Math.floor(npc.lvl / 300 * (-112)) + 120)) * 256 + Math.floor(npc.lvl / 300 * (-204)) + 217, 'description': `${npc.nick} (${npc.lvl}lvl)\n${this.map.name} (${npc.x}, ${npc.y})\n${new Date().toLocaleTimeString()}\n${this.worlName}`, 'thumbnail': { 'url': `http://berufs.margonem.pl/obrazki/npc/${npc.icon}` } }], content: `Znaleźli mnie na mapie ${this.map.name}`, username: npc.nick, avatar_url: `http://berufs.margonem.pl/obrazki/npc/${npc.icon}` }) }) } parseInput(data) { if (data.hasOwnProperty('npc') && data.npc !== undefined) { Object.entries(data.npc).forEach(this.checkNpc.bind(this)); } } initListener() { const self = this; const _ajax = window.$.ajax; window.$.ajax = (xhr, ...args) => { if (xhr.url.includes('/engine?t=')) { const oldsucc = xhr.success; xhr.success = (data, ...args) => { const canEmit = typeof data === 'object' && data !== undefined && data.e === 'ok'; if (canEmit) { self.parseInput(data); } return oldsucc.apply(this, [data, ...args]); } } return _ajax.apply(this, [xhr, ...args]); } } }