SHOW:
|
|
- or go back to the newest paste.
1 | // ==UserScript== | |
2 | // @name Genshin Daily Check-In | |
3 | // @namespace Violentmonkey Scripts | |
4 | // @match https://webstatic-sea.mihoyo.com/ys/event/signin-sea/index.html?act_id=e202102251931481* | |
5 | // @grant none | |
6 | // @run-at document-end | |
7 | // @version 2.0 | |
8 | // @author h010c | |
9 | // @description Genshin Daily Check-In | |
10 | // @icon https://i.imgur.com/H8yt3g7.png | |
11 | // ==/UserScript== | |
12 | ||
13 | var hoursGenshin = 16; // UTC time when Genshin jumps to the "next day" | |
14 | var lang = "en"; | |
15 | var table; | |
16 | ||
17 | if (/^(?:ru|uk)\b/.test(navigator.language) || document.URL.slice(-5) === "ru-ru") { | |
18 | lang = "ru"; | |
19 | } | |
20 | ||
21 | checkLoot(); | |
22 | ||
23 | function checkLoot(reload = false) { | |
24 | if (reload) { | |
25 | table = 0; | |
26 | document.location.reload(); | |
27 | return; | |
28 | } | |
29 | ||
30 | // element containing list of daily loot | |
31 | if (!table) { | |
32 | table = document.getElementsByClassName("components-home-assets-__sign-content_---list---3L0nzm")[0]; | |
33 | setTimeout(checkLoot, 5000); | |
34 | return; | |
35 | } | |
36 | ||
37 | let timeNow = new Date(); | |
38 | ||
39 | // show timers on webpage | |
40 | let elemNote = document.getElementsByClassName("components-home-assets-__sign-content_---desc---oUGkHX")[0]; | |
41 | if (elemNote) { | |
42 | if (lang === "ru") { | |
43 | elemNote.innerText = `Лут проверен ${timeNow.toLocaleDateString()} в ${timeNow.toLocaleTimeString()}`; | |
44 | } else { | |
45 | elemNote.innerText = `Loot checked ${timeNow.toLocaleDateString()} at ${timeNow.toLocaleTimeString()}`; | |
46 | } | |
47 | } | |
48 | console.log("Loot checked at " + timeNow.toLocaleTimeString()); | |
49 | ||
50 | // notification indicator on loot waiting to be acquired | |
51 | let elem = table.getElementsByClassName("components-home-assets-__sign-content_---badge---26v3dm")[0]; | |
52 | if (elem) { | |
53 | elem.parentNode.click(); | |
54 | } | |
55 | ||
56 | // setting up the next check | |
57 | let hoursUTCNow = timeNow.getUTCHours(); | |
58 | let hoursLeft = hoursUTCNow <= hoursGenshin ? hoursGenshin - hoursUTCNow : 24 + hoursGenshin - hoursUTCNow; | |
59 | let minutesNow = timeNow.getMinutes(); | |
60 | let minutesLeft = 60 - minutesNow; | |
61 | ||
62 | setTimeout( checkLoot, ((hoursLeft * 60 + minutesLeft + 5) * 60000), true ); | |
63 | if (elemNote) { | |
64 | if (lang === "ru") { | |
65 | elemNote.innerText += `; следующая проверка через ${minutesLeft > 54 ? hoursLeft + 1 : hoursLeft} часов ${minutesLeft > 54 ? minutesLeft - 55 : minutesLeft + 5} минут.`; | |
66 | } else { | |
67 | elemNote.innerText += `; next loot check in ${minutesLeft > 54 ? hoursLeft + 1 : hoursLeft} hours ${minutesLeft > 54 ? minutesLeft - 55 : minutesLeft + 5} minutes.`; | |
68 | } | |
69 | } | |
70 | console.log("Next loot check in %.2d:%.2d:00", (minutesLeft > 54 ? hoursLeft + 1 : hoursLeft), (minutesLeft > 54 ? minutesLeft - 55 : minutesLeft + 5)); | |
71 | return; | |
72 | } |