- // ==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]);
- }
- }
- }