From ada12c546cb51e958d067ce649e066464032b414 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E4=B8=87=E4=B8=80?= Date: Sat, 1 Oct 2022 18:37:48 +0800 Subject: [PATCH] =?UTF-8?q?TS=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 2 +- src/class/UrlMatch.ts | 729 +------------------ src/class/ZhongIcon.ts | 9 +- src/class/utils/InfoUtils.ts | 2 +- src/func/module/christmasTownHelper.ts | 287 ++++++++ src/html/buyBeer/add_beer_head.html | 5 + src/html/buyBeer/shop_beer_static_item.html | 69 ++ src/html/quick_crimes.html | 55 ++ src/html/rw_rider.html | 16 + src/html/xmasTown/wt.html | 33 + src/html/xmasTown/wt_among_us.html | 15 + src/html/xmasTown/wt_chedburn_towers.html | 13 + src/html/xmasTown/wt_doggoQuest.html | 29 + src/html/xmasTown/wt_holiday_terror.html | 17 + src/html/xmasTown/wt_kidnapped_santa.html | 24 + src/html/xmasTown/wt_kiss_my_festivus.html | 19 + src/html/xmasTown/wt_long_way_from_home.html | 21 + src/html/xmasTown/wt_maltese_snow_globe.html | 17 + src/html/xmasTown/wt_pokemon_ct.html | 36 + src/html/xmasTown/wt_stanley_hotel.html | 7 + src/html/xmasTown/wt_winter_in_gatlin.html | 9 + src/html/xmasTown/wt_xmas_town.html | 7 + src/html/xmasTown/xmas_town_notify.html | 52 ++ 23 files changed, 764 insertions(+), 709 deletions(-) create mode 100644 src/func/module/christmasTownHelper.ts create mode 100644 src/html/buyBeer/add_beer_head.html create mode 100644 src/html/buyBeer/shop_beer_static_item.html create mode 100644 src/html/quick_crimes.html create mode 100644 src/html/rw_rider.html create mode 100644 src/html/xmasTown/wt.html create mode 100644 src/html/xmasTown/wt_among_us.html create mode 100644 src/html/xmasTown/wt_chedburn_towers.html create mode 100644 src/html/xmasTown/wt_doggoQuest.html create mode 100644 src/html/xmasTown/wt_holiday_terror.html create mode 100644 src/html/xmasTown/wt_kidnapped_santa.html create mode 100644 src/html/xmasTown/wt_kiss_my_festivus.html create mode 100644 src/html/xmasTown/wt_long_way_from_home.html create mode 100644 src/html/xmasTown/wt_maltese_snow_globe.html create mode 100644 src/html/xmasTown/wt_pokemon_ct.html create mode 100644 src/html/xmasTown/wt_stanley_hotel.html create mode 100644 src/html/xmasTown/wt_winter_in_gatlin.html create mode 100644 src/html/xmasTown/wt_xmas_town.html create mode 100644 src/html/xmasTown/xmas_town_notify.html diff --git a/package-lock.json b/package-lock.json index 9edc207..b6b78ec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2297,7 +2297,7 @@ }, "typescript": { "version": "4.8.3", - "resolved": "https://registry.npmmirror.com/typescript/-/typescript-4.8.3.tgz", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz", "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==", "dev": true }, diff --git a/src/class/UrlMatch.ts b/src/class/UrlMatch.ts index 65636f2..1fdda5c 100644 --- a/src/class/UrlMatch.ts +++ b/src/class/UrlMatch.ts @@ -1,6 +1,4 @@ -import getWhSettingObj from "../func/utils/getWhSettingObj"; import cityFinder from "../func/module/cityFinder"; -import elementReady from "../func/utils/elementReady"; import { missionDict } from "../dictionary/translation"; import getTaskHint from "../func/translate/getTaskHint"; import Device from "../enum/Device"; @@ -10,16 +8,17 @@ import Log from "./Log"; import WuhuConfig from "./WuhuConfig"; import Alert from "./utils/Alert"; import InfoUtils from "./utils/InfoUtils"; +import SHOP_BEER_STATIC_ITEM_HTML from "../html/buyBeer/shop_beer_static_item.html"; +import ADD_BEER_HEAD_HTML from "../html/buyBeer/add_beer_head.html"; +import QUICK_CRIMES_HTML from "../html/quick_crimes.html"; +import RW_RIDER_HTML from "../html/rw_rider.html"; +import christmasTownHelper from "../func/module/christmasTownHelper"; export default class UrlPattern extends WuhuBase { - constructor() { - super(); - } - static resolve() { let { href, beer } = UrlPattern.glob; // 捡垃圾助手 - if (href.includes('city.php') && getWhSettingObj()['cityFinder']) { + if (href.includes('city.php') && WuhuConfig.get('cityFinder')) { cityFinder(); } @@ -53,7 +52,7 @@ export default class UrlPattern extends WuhuBase { if (href.includes('gym.php')) { let cont = null; const switch_node = document.createElement('div'); - switch_node.innerHTML = ``; + switch_node.innerHTML = ``; switch_node.id = 'wh-gym-info-cont'; switch_node.querySelector('input').onchange = e => { let target = e.target as HTMLInputElement; @@ -62,7 +61,7 @@ export default class UrlPattern extends WuhuBase { }; CommonUtils.elementReady('#gymroot').then(node => { cont = node; - if (getWhSettingObj()['SEProtect']) node.classList.add('wh-display-none'); + if (WuhuConfig.get('SEProtect')) node.classList.add('wh-display-none'); node.before(switch_node); }); } @@ -70,10 +69,10 @@ export default class UrlPattern extends WuhuBase { // 啤酒店 if (href.includes('shops.php?step=bitsnbobs')) { // 加入啤酒 - elementReady('ul.items-list').then(node => { + CommonUtils.elementReady('ul.items-list').then(node => { const add_btn_node = document.createElement('div'); add_btn_node.id = 'wh-gym-info-cont'; - add_btn_node.innerHTML = `

如果当前商店没有啤酒这个商品可以提前显示以省去刷新步骤,增加抢酒成功率。

`; + add_btn_node.innerHTML = ADD_BEER_HEAD_HTML; add_btn_node.querySelector('button').addEventListener('click', e => { const msg_node = add_btn_node.querySelector('#wh-msg'); if (node.querySelector('span[id="180-name"]')) { @@ -84,73 +83,7 @@ export default class UrlPattern extends WuhuBase { const beer = document.createElement('li'); beer.classList.add('torn-divider', 'divider-vertical'); beer.style.backgroundColor = '#c8c8c8'; - beer.innerHTML = `
- - - - - - - - - -啤酒 -$10 -酒 (1100存货) - - - - - - -
-
-
-
-
- - -点击确定购买 - - -100 -瓶啤酒 -$1,000 - - - -确定 - - - -不 - - - - -
-
- - - - - - -
-
- - - -
-
-
-
-
- -
-
-
`; + beer.innerHTML = SHOP_BEER_STATIC_ITEM_HTML; if (clear_node) clear_node.before(beer); else node.append(beer); (e.target).remove(); @@ -171,19 +104,19 @@ $1,000 } // 快速crime TODO 重构、与翻译解藕 - if (href.contains(/crimes\.php/) && getWhSettingObj()['quickCrime']) { + if (href.contains(/crimes\.php/) && WuhuConfig.get('quickCrime')) { if (self !== top) { const isValidate = document.querySelector('h4#skip-to-content').innerText.toLowerCase().includes('validate'); - elementReady('#header-root').then(e => e.style.display = 'none'); - elementReady('#sidebarroot').then(e => e.style.display = 'none'); - elementReady('#chatRoot').then(e => e.style.display = 'none'); + CommonUtils.elementReady('#header-root').then(e => e.style.display = 'none'); + CommonUtils.elementReady('#sidebarroot').then(e => e.style.display = 'none'); + CommonUtils.elementReady('#chatRoot').then(e => e.style.display = 'none'); if (!isValidate) document.body.style.overflow = 'hidden'; - elementReady('.content-wrapper').then(e => { + CommonUtils.elementReady('.content-wrapper').then(e => { e.style.margin = '0px'; e.style.position = 'absolute'; e.style.top = '-35px'; }); - elementReady('#go-to-top-btn button').then(e => e.style.display = 'none'); + CommonUtils.elementReady('#go-to-top-btn button').then(e => e.style.display = 'none'); } const $$ = document.querySelector('.content-wrapper'); const OB = new MutationObserver(() => { @@ -199,50 +132,7 @@ $1,000 }); }); const trans = () => { - const dom = `
常用犯罪
- -
- - - -
- -
- - - -
- -
- - - -
- -
- - - -
- -
- - - -
- -
- - - -
- -
- - - -
-

`; + const dom = QUICK_CRIMES_HTML; const is_wh_translate = $$.querySelector('.wh-translate') !== null; const is_captcha = $$.querySelector('div#tab-menu.captcha') !== null; const $title = $('div.content-title'); @@ -262,7 +152,7 @@ $1,000 } // 任务助手 TODO 重构、与翻译解藕 - if (href.contains(/loader\.php\?sid=missions/) && getWhSettingObj()['missionHint']) { + if (href.contains(/loader\.php\?sid=missions/) && WuhuConfig.get('missionHint')) { const $$ = $('.content-wrapper'); const OB = new MutationObserver(() => { OB.disconnect(); @@ -307,560 +197,9 @@ $1,000 childList: true }); } - // 圣诞小镇 - if (href.contains(/christmas_town\.php/)) { - let $root = document.querySelector('#christmastownroot'); - const [xmasTownWT, xmasTownNotify] = WuhuConfig.get(['xmasTownWT', 'xmasTownNotify']); - // 解密攻略 - if (xmasTownWT) { - const insert_html = `
-
水晶球解密地图攻略
- -
-
-`; - const wt_dict = { - "None": { title: '', wt: ``, }, - "Christmas Town": { - title: '圣诞小镇', wt: ``, - }, - "Maltese Snow Globe": { - title: 'Maltese Snow Globe', wt: ``, - }, - "Long way from home": { - title: 'Long way from home', wt: ``, - }, - "Chedburn Towers": { - title: 'Chedburn Towers', wt: ``, - }, - "Kidnapped Santa": { - title: 'Kidnapped Santa', wt: ``, - }, - "Holiday terror": { - title: 'Holiday terror', wt: ``, - }, - "Among Us": { - title: 'Among Us', wt: ``, - }, - "Kiss My Festivus": { - title: 'Kiss My Festivus', wt: ``, - }, - "Stanley Hotel": { - title: 'Stanley Hotel', wt: ``, - }, - "DoggoQuest": { - title: 'DoggoQuest', wt: ``, - }, - "Pokemon CT": { - title: 'Pokemon CT', wt: ``, - }, - "Winter in Gatlin": { - title: 'Winter in Gatlin', wt: ``, - }, - }; - const $city_wrapper = $root.querySelectorAll('div[class^="core-layout__"]'); - $city_wrapper.forEach(el => { - let $wh_container = $root.querySelector('#wh-xmas-cont'); - if (!$wh_container) { - $(el).prepend(insert_html); - $wh_container = $root.querySelector('#wh-xmas-cont'); - // 显示 隐藏 - const jquery$wh_container = $($wh_container); - const $cont_gray = jquery$wh_container.find('.cont-gray'); - jquery$wh_container.find('button').click(e => { - if (e.target.innerText === '[隐藏]') { - $cont_gray.hide(); - e.target.innerText = '[显示]'; - } else { - $cont_gray.show(); - e.target.innerText = '[隐藏]'; - } - }); - // 内容 - const $wt_content = jquery$wh_container.find('#wt-content'); - jquery$wh_container.find('select').change(e => { - const selected = e.target.value; - $wt_content.html(`

${ wt_dict[selected].title }

${ wt_dict[selected].wt }

`) - }); - } - }); - } - // 宝箱检测 - if (xmasTownNotify) { - const chestTypeDict = { '1': '金', '2': '银', '3': '铜', }; - const chestTypeColorDict = { '1': 'gold', '2': 'silver', '3': 'sandybrown', }; - const lootTypeDict = { - 'chests': '钥匙箱', - 'gifts': '礼物', - 'combinationChest': '密码箱', - 'keys': '钥匙', - }; - const keyTypeDict = { 'b': '铜', 's': '银', 'g': '金', }; - let dropHist = localStorage.getItem('wh-loot-store') - ? JSON.parse(localStorage.getItem('wh-loot-store')) - : {}; - const alertSettings = localStorage.getItem('wh-loot-setting') - ? JSON.parse(localStorage.getItem('wh-loot-setting')) - : { blink: 'y', sound: 'y', chest: 'y' }; - let $ct_wrap; - let soundLoopFlag = false; - const getDOMOb = new MutationObserver(() => { - $ct_wrap = $root.querySelector('#ct-wrap'); - if ($ct_wrap) { - getDOMOb.disconnect(); - const insert_html = `
- -
附近物品
-
- 物品 -
- 箱子 -
-
-
-
-
-
-
-
-

- 长时间不清空会出现奇怪的问题

-
-
历史记录
坐标地图类型发现获取
-
-
-
-
-`; - $($ct_wrap).before(insert_html); - const $wh_loot_container = $root.querySelector('#wh-loot-container') as HTMLElement; - const $btn = $wh_loot_container.querySelector('#wh-loot-btn button') as HTMLButtonElement; - const $clear_btn = $wh_loot_container.querySelector('#wh-hist-clear button') as HTMLButtonElement; - const $ex = $wh_loot_container.querySelector('#wh-loot-container-ex'); - const $tbody = $wh_loot_container.querySelector('tbody'); - const $blink = $wh_loot_container.querySelector('#wh-loot-setting-blink') as HTMLInputElement; - const $sound = $wh_loot_container.querySelector('#wh-loot-setting-sound') as HTMLInputElement; - const $chest = $wh_loot_container.querySelector('#wh-loot-setting-chest') as HTMLInputElement; - const $audio = $wh_loot_container.querySelector('audio'); - $btn.onclick = e => { - let target = e.target as HTMLButtonElement; - target.innerText = target.innerText === '设置' ? '收起' : '设置'; - $($ex).toggleClass('wh-hide'); - target.blur(); - }; - $clear_btn.onclick = e => { - let target = e.target as HTMLButtonElement; - target.blur(); - dropHist = {}; - $tbody.innerHTML = ''; - localStorage.setItem('wh-loot-store', JSON.stringify(dropHist)); - }; - $blink.onchange = e => { - if ((e.target).checked) { - alertSettings.blink = 'y'; - if ($wh_loot_container.querySelector('#wh-loot-item-count').innerText !== '(0)') { - ($wh_loot_container.querySelector('#wh-loot-container-main')).style.animation = 'lootFoundAlert 2s infinite'; - } - } else { - alertSettings.blink = 'n'; - ($wh_loot_container.querySelector('#wh-loot-container-main')).style.animation = ''; - } - localStorage.setItem('wh-loot-setting', JSON.stringify(alertSettings)); - }; - $sound.onchange = e => { - if ((e.target).checked) { - alertSettings.sound = 'y'; - if ($wh_loot_container.querySelector('#wh-loot-item-count').innerText !== '(0)') { - soundLoopFlag = true; - } - } else { - alertSettings.sound = 'n'; - soundLoopFlag = false; - } - localStorage.setItem('wh-loot-setting', JSON.stringify(alertSettings)); - }; - $chest.onchange = e => { - alertSettings.chest = (e.target).checked ? 'y' : 'n'; - localStorage.setItem('wh-loot-setting', JSON.stringify(alertSettings)); - }; - const soundIntervalID = window.setInterval(() => { - if (soundLoopFlag) $audio.play().then(); - }, 1200); - ob.observe($root, { childList: true, subtree: true }); - } - }); - const ob = new MutationObserver(() => { - ob.disconnect(); - // 页面刷新重新获取dom - $root = document.querySelector('#christmastownroot'); - $ct_wrap = $root.querySelector('#ct-wrap'); - if (!$ct_wrap) { - ob.observe($root, { childList: true, subtree: true }); - return; - } - const $ct_title = $ct_wrap.querySelector('.status-title'); - const $pos = $ct_wrap.querySelector('.map-title span[class^="position___"]') || $ct_wrap.querySelector('.status-title span[class^="position___"]'); - if (!$pos) { - ob.observe($root, { childList: true, subtree: true }); - return; - } - const $pos_spl = $pos.innerText.trim().split(','); - const player_position = { - x: parseInt($pos_spl[0]), - y: parseInt($pos_spl[1]), - }; - // player_position.x = parseInt($pos_spl[0]); - // player_position.y = parseInt($pos_spl[1]); - const $wh_loot_container = $root.querySelector('#wh-loot-container'); - if (!$wh_loot_container) { - console.error('掉落助手未找到DOM容器'); - ob.observe($root, { childList: true, subtree: true }); - return; - } - const $blink = $wh_loot_container.querySelector('#wh-loot-setting-blink') as HTMLInputElement; - const $sound = $wh_loot_container.querySelector('#wh-loot-setting-sound') as HTMLInputElement; - const $chest = $wh_loot_container.querySelector('#wh-loot-setting-chest') as HTMLInputElement; - const $tbody = $wh_loot_container.querySelector('tbody'); - const nearby_arr = []; - const items = $root.querySelectorAll('div.grid-layer div.items-layer div.ct-item'); - // 附近的所有物品 - items.forEach(el => { - const item_props = { x: 0, y: 0, name: '', type: '', url: '', }; - item_props.x = parseInt((el).style.left.replaceAll('px', '')) / 30; - item_props.y = -parseInt((el).style.top.replaceAll('px', '')) / 30; - item_props.url = el.firstElementChild.src; - const srcSpl = item_props.url.trim().split('/'); - item_props.name = srcSpl[6]; - item_props.type = srcSpl[8].slice(0, 1); - nearby_arr.push(item_props); - }); - const $wh_loot_container_items = $wh_loot_container.querySelector('#wh-loot-container-items'); - const $wh_loot_container_chests = $wh_loot_container.querySelector('#wh-loot-container-chests'); - let item_count = 0, chest_count = 0; - $wh_loot_container_items.innerHTML = ''; - $wh_loot_container_chests.innerHTML = ''; - nearby_arr.forEach(nearby_item => { - let path = '='; - if (nearby_item.x < player_position.x && nearby_item.y < player_position.y) path = '↙'; - else if (nearby_item.x < player_position.x && nearby_item.y === player_position.y) path = '←'; - else if (nearby_item.x < player_position.x && nearby_item.y > player_position.y) path = '↖'; - else if (nearby_item.x === player_position.x && nearby_item.y > player_position.y) path = '↑'; - else if (nearby_item.x > player_position.x && nearby_item.y > player_position.y) path = '↗'; - else if (nearby_item.x > player_position.x && nearby_item.y === player_position.y) path = '→'; - else if (nearby_item.x > player_position.x && nearby_item.y < player_position.y) path = '↘'; - else if (nearby_item.x === player_position.x && nearby_item.y < player_position.y) path = '↓'; - let item_name; - if (nearby_item.name === 'chests') { - chest_count++; - item_name = chestTypeDict[nearby_item.type] + lootTypeDict[nearby_item.name]; - $wh_loot_container_chests.innerHTML += `${ path }[${ nearby_item.x },${ nearby_item.y }] ${ item_name }` - } else { - item_count++; - item_name = (nearby_item.name === 'keys' ? keyTypeDict[nearby_item.type] || '' : '') + lootTypeDict[nearby_item.name] || nearby_item.name; - $wh_loot_container_items.innerHTML += `${ path }[${ nearby_item.x },${ nearby_item.y }] ${ item_name }` - } - // 确认地图坐标存在 - if ($ct_title) { - const hist_key = `[${ nearby_item.x },${ nearby_item.y }]"${ $ct_title.firstChild.nodeValue.trim() }"${ item_name }`; - const el = dropHist[hist_key]; - if (el) { - if (path === '=' && (nearby_item.name === 'keys' || nearby_item.name === 'gifts')) { - el.isPassed = true; - } - } else { - if (!(nearby_item.name === 'chests' && $chest.checked)) { - const now = new Date(); - dropHist[hist_key] = { - pos: `[${ nearby_item.x },${ nearby_item.y }]`, - map: $ct_title.firstChild.nodeValue.trim(), - last: `${ now.getFullYear() }-${ now.getMonth() + 1 }-${ now.getDate() } ${ now.getHours() }:${ now.getMinutes() }:${ now.getSeconds() }`, - name: item_name, - id: Object.keys(dropHist).length, - }; - } - } - } - }); - $wh_loot_container.querySelector('#wh-loot-item-count').innerText = `(${ item_count })`; - if (item_count === 0) { - $wh_loot_container_items.innerText = '暂无'; - ($wh_loot_container.querySelector('#wh-loot-container-main')).style.animation = ''; - soundLoopFlag = false; - } else { - if ($blink.checked) ($wh_loot_container.querySelector('#wh-loot-container-main')).style.animation = 'lootFoundAlert 2s infinite'; - if ($sound.checked) soundLoopFlag = true; - } - $wh_loot_container.querySelector('#wh-loot-chest-count').innerText = `(${ chest_count })`; - if (chest_count === 0) $wh_loot_container_chests.innerText = '暂无'; - const history = Object.keys(dropHist).map(key => dropHist[key]).sort((a, b) => a.id - b.id); - let table_html = ''; - history.forEach(e => { - table_html += `${ e.pos }${ e.map }${ e.name }${ e.last }${ e.isPassed ? '已取得' : '不确定' }`; - }); - $tbody.innerHTML = table_html; - localStorage.setItem('wh-loot-store', JSON.stringify(dropHist)); - ob.observe($root, { childList: true, subtree: true }); - }); - getDOMOb.observe($root, { childList: true, subtree: true }); - } - } + // 圣诞小镇 + if (href.contains(/christmas_town\.php/) && new Date().getMonth() > 9) christmasTownHelper(); // rw雷达 if (href.includes('profiles.php?XID=0')) { @@ -897,24 +236,9 @@ margin: 0 0 3px; CommonUtils.addStyle('div.content-title,div.info-msg-cont{display:none;}'); const wh_node = document.createElement('div'); wh_node.id = 'wh-rd-cont'; - wh_node.innerHTML = `
-

RW 雷达

-
-
-
- -
-woohoo - - - - - - -
123456
789012
-
`; + wh_node.innerHTML = RW_RIDER_HTML; // 原页面完全加载 - await elementReady('div.msg[role="alert"]'); + await CommonUtils.elementReady('div.msg[role="alert"]'); const t_cont = document.querySelector('div.content-wrapper'); // t t_cont.append(wh_node); @@ -925,16 +249,13 @@ margin: 0 0 3px; rw_raider().then(); } - // 特定代码块 TODO 修复 + // 特定 if (InfoUtils.getInstance().getPlayerInfo().userID === 2687093 && CommonUtils.getDeviceType() === Device.PC) { InfoUtils.getInstance().getSidebarData().then(data => { - Log.info({ data }) let item = document.getElementById('nav-items'); if (item) { let copy = item.cloneNode(true); - // TODO 待验证 - (copy.firstChild).style.backgroundColor = '#ff5722'; - // copy.firstChild.style.backgroundColor = '#ff5722'; + (copy.firstChild).style.backgroundColor = '#678c00'; let a = copy.firstChild.firstChild as HTMLAnchorElement; a.href = '/item.php?temp=1'; let span = a.lastChild as HTMLElement; diff --git a/src/class/ZhongIcon.ts b/src/class/ZhongIcon.ts index bbe5d23..b402d98 100644 --- a/src/class/ZhongIcon.ts +++ b/src/class/ZhongIcon.ts @@ -1300,9 +1300,12 @@ color:black; domType: 'button', domId: null, domText: '查看日志', - clickFunc: ev => { - let pop = new Popup('', '查看日志'); - pop.getElement().querySelector('textarea').innerHTML = Log.getLogs(); + clickFunc: () => { + let pop = new Popup('
', '查看日志'); + let text = pop.getElement().querySelector('textarea'); + text.innerHTML = Log.getLogs(); + pop.getElement().querySelector('button').onclick = () => text.select(); + // } }); // 更多设定 diff --git a/src/class/utils/InfoUtils.ts b/src/class/utils/InfoUtils.ts index cc98aa8..73bebb2 100644 --- a/src/class/utils/InfoUtils.ts +++ b/src/class/utils/InfoUtils.ts @@ -14,7 +14,7 @@ export default class InfoUtils extends WuhuBase { if (node) { return { playername: node.getAttribute('name'), - userID: node.getAttribute('uid') as unknown as number, + userID: parseInt(node.getAttribute('uid')), } } else { new Alert('严重错误:芜湖助手无法获取用户数据,已退出'); diff --git a/src/func/module/christmasTownHelper.ts b/src/func/module/christmasTownHelper.ts new file mode 100644 index 0000000..641b915 --- /dev/null +++ b/src/func/module/christmasTownHelper.ts @@ -0,0 +1,287 @@ +import WuhuConfig from "../../class/WuhuConfig"; +import WT_HTML from "../../html/xmasTown/wt.html"; +import WT_XMAS_TOWN_HTML from "../../html/xmasTown/wt_xmas_town.html"; +import WT_MALTESE_SNOW_GLOBE_HTML from "../../html/xmasTown/wt_maltese_snow_globe.html"; +import WT_LONG_WAY_FROM_HOME_HTML from "../../html/xmasTown/wt_long_way_from_home.html"; +import WT_CHEDBURN_TOWERS_HTML from "../../html/xmasTown/wt_chedburn_towers.html"; +import WT_KIDNAPPED_SANTA_HTML from "../../html/xmasTown/wt_kidnapped_santa.html"; +import WT_HOLIDAY_TERROR_HTML from "../../html/xmasTown/wt_holiday_terror.html"; +import WT_AMONG_US_HTML from "../../html/xmasTown/wt_among_us.html"; +import WT_KISS_MY_FESTIVUS_HTML from "../../html/xmasTown/wt_kiss_my_festivus.html"; +import WT_STANLEY_HOTEL_HTML from "../../html/xmasTown/wt_stanley_hotel.html"; +import WT_DOGGOQUEST_HTML from "../../html/xmasTown/wt_doggoQuest.html"; +import WT_POKEMON_CT_HTML from "../../html/xmasTown/wt_pokemon_ct.html"; +import WT_WINTER_IN_GATLIN_HTML from "../../html/xmasTown/wt_winter_in_gatlin.html"; +import XMAS_TOWN_NOTIFY_HTML from "../../html/xmasTown/xmas_town_notify.html"; + +export default function christmasTownHelper() { + let $root = document.querySelector('#christmastownroot'); + const [xmasTownWT, xmasTownNotify] = WuhuConfig.get(['xmasTownWT', 'xmasTownNotify']); + // 解密攻略 + if (xmasTownWT) { + const insert_html = WT_HTML; + const wt_dict = { + "None": { title: '', wt: ``, }, + "Christmas Town": { + title: '圣诞小镇', wt: WT_XMAS_TOWN_HTML, + }, + "Maltese Snow Globe": { + title: 'Maltese Snow Globe', wt: WT_MALTESE_SNOW_GLOBE_HTML, + }, + "Long way from home": { + title: 'Long way from home', wt: WT_LONG_WAY_FROM_HOME_HTML, + }, + "Chedburn Towers": { + title: 'Chedburn Towers', wt: WT_CHEDBURN_TOWERS_HTML, + }, + "Kidnapped Santa": { + title: 'Kidnapped Santa', wt: WT_KIDNAPPED_SANTA_HTML, + }, + "Holiday terror": { + title: 'Holiday terror', wt: WT_HOLIDAY_TERROR_HTML, + }, + "Among Us": { + title: 'Among Us', wt: WT_AMONG_US_HTML, + }, + "Kiss My Festivus": { + title: 'Kiss My Festivus', wt: WT_KISS_MY_FESTIVUS_HTML, + }, + "Stanley Hotel": { + title: 'Stanley Hotel', wt: WT_STANLEY_HOTEL_HTML, + }, + "DoggoQuest": { + title: 'DoggoQuest', wt: WT_DOGGOQUEST_HTML, + }, + "Pokemon CT": { + title: 'Pokemon CT', wt: WT_POKEMON_CT_HTML, + }, + "Winter in Gatlin": { + title: 'Winter in Gatlin', wt: WT_WINTER_IN_GATLIN_HTML, + }, + }; + const $city_wrapper = $root.querySelectorAll('div[class^="core-layout__"]'); + $city_wrapper.forEach(el => { + let $wh_container = $root.querySelector('#wh-xmas-cont'); + if (!$wh_container) { + $(el).prepend(insert_html); + $wh_container = $root.querySelector('#wh-xmas-cont'); + // 显示 隐藏 + const jquery$wh_container = $($wh_container); + const $cont_gray = jquery$wh_container.find('.cont-gray'); + jquery$wh_container.find('button').click(e => { + if (e.target.innerText === '[隐藏]') { + $cont_gray.hide(); + e.target.innerText = '[显示]'; + } else { + $cont_gray.show(); + e.target.innerText = '[隐藏]'; + } + }); + // 内容 + const $wt_content = jquery$wh_container.find('#wt-content'); + jquery$wh_container.find('select').change(e => { + const selected = e.target.value; + $wt_content.html(`

${ wt_dict[selected].title }

${ wt_dict[selected].wt }

`) + }); + } + }); + } + // 宝箱检测 + if (xmasTownNotify) { + const chestTypeDict = { '1': '金', '2': '银', '3': '铜', }; + const chestTypeColorDict = { '1': 'gold', '2': 'silver', '3': 'sandybrown', }; + const lootTypeDict = { + 'chests': '钥匙箱', + 'gifts': '礼物', + 'combinationChest': '密码箱', + 'keys': '钥匙', + }; + const keyTypeDict = { 'b': '铜', 's': '银', 'g': '金', }; + let dropHist = localStorage.getItem('wh-loot-store') + ? JSON.parse(localStorage.getItem('wh-loot-store')) + : {}; + const alertSettings = localStorage.getItem('wh-loot-setting') + ? JSON.parse(localStorage.getItem('wh-loot-setting')) + : { blink: 'y', sound: 'y', chest: 'y' }; + let $ct_wrap; + let soundLoopFlag = false; + const getDOMOb = new MutationObserver(() => { + $ct_wrap = $root.querySelector('#ct-wrap'); + if ($ct_wrap) { + getDOMOb.disconnect(); + const insert_html = XMAS_TOWN_NOTIFY_HTML + .replace('{{}}', alertSettings.blink === 'y' ? 'checked' : '') + .replace('{{}}', alertSettings.sound === 'y' ? 'checked' : '') + .replace('{{}}', alertSettings.chest === 'y' ? 'checked' : ''); + $($ct_wrap).before(insert_html); + const $wh_loot_container = $root.querySelector('#wh-loot-container') as HTMLElement; + const $btn = $wh_loot_container.querySelector('#wh-loot-btn button') as HTMLButtonElement; + const $clear_btn = $wh_loot_container.querySelector('#wh-hist-clear button') as HTMLButtonElement; + const $ex = $wh_loot_container.querySelector('#wh-loot-container-ex'); + const $tbody = $wh_loot_container.querySelector('tbody'); + const $blink = $wh_loot_container.querySelector('#wh-loot-setting-blink') as HTMLInputElement; + const $sound = $wh_loot_container.querySelector('#wh-loot-setting-sound') as HTMLInputElement; + const $chest = $wh_loot_container.querySelector('#wh-loot-setting-chest') as HTMLInputElement; + const $audio = $wh_loot_container.querySelector('audio'); + $btn.onclick = e => { + let target = e.target as HTMLButtonElement; + target.innerText = target.innerText === '设置' ? '收起' : '设置'; + $($ex).toggleClass('wh-hide'); + target.blur(); + }; + $clear_btn.onclick = e => { + let target = e.target as HTMLButtonElement; + target.blur(); + dropHist = {}; + $tbody.innerHTML = ''; + localStorage.setItem('wh-loot-store', JSON.stringify(dropHist)); + }; + $blink.onchange = e => { + if ((e.target).checked) { + alertSettings.blink = 'y'; + if ($wh_loot_container.querySelector('#wh-loot-item-count').innerText !== '(0)') { + ($wh_loot_container.querySelector('#wh-loot-container-main')).style.animation = 'lootFoundAlert 2s infinite'; + } + } else { + alertSettings.blink = 'n'; + ($wh_loot_container.querySelector('#wh-loot-container-main')).style.animation = ''; + } + localStorage.setItem('wh-loot-setting', JSON.stringify(alertSettings)); + }; + $sound.onchange = e => { + if ((e.target).checked) { + alertSettings.sound = 'y'; + if ($wh_loot_container.querySelector('#wh-loot-item-count').innerText !== '(0)') { + soundLoopFlag = true; + } + } else { + alertSettings.sound = 'n'; + soundLoopFlag = false; + } + localStorage.setItem('wh-loot-setting', JSON.stringify(alertSettings)); + }; + $chest.onchange = e => { + alertSettings.chest = (e.target).checked ? 'y' : 'n'; + localStorage.setItem('wh-loot-setting', JSON.stringify(alertSettings)); + }; + const soundIntervalID = window.setInterval(() => { + if (soundLoopFlag) $audio.play().then(); + }, 1200); + ob.observe($root, { childList: true, subtree: true }); + } + }); + const ob = new MutationObserver(() => { + ob.disconnect(); + // 页面刷新重新获取dom + $root = document.querySelector('#christmastownroot'); + $ct_wrap = $root.querySelector('#ct-wrap'); + if (!$ct_wrap) { + ob.observe($root, { childList: true, subtree: true }); + return; + } + const $ct_title = $ct_wrap.querySelector('.status-title'); + const $pos = $ct_wrap.querySelector('.map-title span[class^="position___"]') || $ct_wrap.querySelector('.status-title span[class^="position___"]'); + if (!$pos) { + ob.observe($root, { childList: true, subtree: true }); + return; + } + const $pos_spl = $pos.innerText.trim().split(','); + const player_position = { + x: parseInt($pos_spl[0]), + y: parseInt($pos_spl[1]), + }; + // player_position.x = parseInt($pos_spl[0]); + // player_position.y = parseInt($pos_spl[1]); + const $wh_loot_container = $root.querySelector('#wh-loot-container'); + if (!$wh_loot_container) { + console.error('掉落助手未找到DOM容器'); + ob.observe($root, { childList: true, subtree: true }); + return; + } + const $blink = $wh_loot_container.querySelector('#wh-loot-setting-blink') as HTMLInputElement; + const $sound = $wh_loot_container.querySelector('#wh-loot-setting-sound') as HTMLInputElement; + const $chest = $wh_loot_container.querySelector('#wh-loot-setting-chest') as HTMLInputElement; + const $tbody = $wh_loot_container.querySelector('tbody'); + const nearby_arr = []; + const items = $root.querySelectorAll('div.grid-layer div.items-layer div.ct-item'); + // 附近的所有物品 + items.forEach(el => { + const item_props = { x: 0, y: 0, name: '', type: '', url: '', }; + item_props.x = parseInt((el).style.left.replaceAll('px', '')) / 30; + item_props.y = -parseInt((el).style.top.replaceAll('px', '')) / 30; + item_props.url = el.firstElementChild.src; + const srcSpl = item_props.url.trim().split('/'); + item_props.name = srcSpl[6]; + item_props.type = srcSpl[8].slice(0, 1); + nearby_arr.push(item_props); + }); + const $wh_loot_container_items = $wh_loot_container.querySelector('#wh-loot-container-items'); + const $wh_loot_container_chests = $wh_loot_container.querySelector('#wh-loot-container-chests'); + let item_count = 0, chest_count = 0; + $wh_loot_container_items.innerHTML = ''; + $wh_loot_container_chests.innerHTML = ''; + nearby_arr.forEach(nearby_item => { + let path = '='; + if (nearby_item.x < player_position.x && nearby_item.y < player_position.y) path = '↙'; + else if (nearby_item.x < player_position.x && nearby_item.y === player_position.y) path = '←'; + else if (nearby_item.x < player_position.x && nearby_item.y > player_position.y) path = '↖'; + else if (nearby_item.x === player_position.x && nearby_item.y > player_position.y) path = '↑'; + else if (nearby_item.x > player_position.x && nearby_item.y > player_position.y) path = '↗'; + else if (nearby_item.x > player_position.x && nearby_item.y === player_position.y) path = '→'; + else if (nearby_item.x > player_position.x && nearby_item.y < player_position.y) path = '↘'; + else if (nearby_item.x === player_position.x && nearby_item.y < player_position.y) path = '↓'; + let item_name; + if (nearby_item.name === 'chests') { + chest_count++; + item_name = chestTypeDict[nearby_item.type] + lootTypeDict[nearby_item.name]; + $wh_loot_container_chests.innerHTML += `${ path }[${ nearby_item.x },${ nearby_item.y }] ${ item_name }` + } else { + item_count++; + item_name = (nearby_item.name === 'keys' ? keyTypeDict[nearby_item.type] || '' : '') + lootTypeDict[nearby_item.name] || nearby_item.name; + $wh_loot_container_items.innerHTML += `${ path }[${ nearby_item.x },${ nearby_item.y }] ${ item_name }` + } + // 确认地图坐标存在 + if ($ct_title) { + const hist_key = `[${ nearby_item.x },${ nearby_item.y }]"${ $ct_title.firstChild.nodeValue.trim() }"${ item_name }`; + const el = dropHist[hist_key]; + if (el) { + if (path === '=' && (nearby_item.name === 'keys' || nearby_item.name === 'gifts')) { + el.isPassed = true; + } + } else { + if (!(nearby_item.name === 'chests' && $chest.checked)) { + const now = new Date(); + dropHist[hist_key] = { + pos: `[${ nearby_item.x },${ nearby_item.y }]`, + map: $ct_title.firstChild.nodeValue.trim(), + last: `${ now.getFullYear() }-${ now.getMonth() + 1 }-${ now.getDate() } ${ now.getHours() }:${ now.getMinutes() }:${ now.getSeconds() }`, + name: item_name, + id: Object.keys(dropHist).length, + }; + } + } + } + }); + $wh_loot_container.querySelector('#wh-loot-item-count').innerText = `(${ item_count })`; + if (item_count === 0) { + $wh_loot_container_items.innerText = '暂无'; + ($wh_loot_container.querySelector('#wh-loot-container-main')).style.animation = ''; + soundLoopFlag = false; + } else { + if ($blink.checked) ($wh_loot_container.querySelector('#wh-loot-container-main')).style.animation = 'lootFoundAlert 2s infinite'; + if ($sound.checked) soundLoopFlag = true; + } + $wh_loot_container.querySelector('#wh-loot-chest-count').innerText = `(${ chest_count })`; + if (chest_count === 0) $wh_loot_container_chests.innerText = '暂无'; + const history = Object.keys(dropHist).map(key => dropHist[key]).sort((a, b) => a.id - b.id); + let table_html = ''; + history.forEach(e => { + table_html += `${ e.pos }${ e.map }${ e.name }${ e.last }${ e.isPassed ? '已取得' : '不确定' }`; + }); + $tbody.innerHTML = table_html; + localStorage.setItem('wh-loot-store', JSON.stringify(dropHist)); + ob.observe($root, { childList: true, subtree: true }); + }); + getDOMOb.observe($root, { childList: true, subtree: true }); + } +} \ No newline at end of file diff --git a/src/html/buyBeer/add_beer_head.html b/src/html/buyBeer/add_beer_head.html new file mode 100644 index 0000000..718dfe0 --- /dev/null +++ b/src/html/buyBeer/add_beer_head.html @@ -0,0 +1,5 @@ +
+ +

如果当前商店没有啤酒这个商品可以提前显示以省去刷新步骤,增加抢酒成功率。

+

+
\ No newline at end of file diff --git a/src/html/buyBeer/shop_beer_static_item.html b/src/html/buyBeer/shop_beer_static_item.html new file mode 100644 index 0000000..ed6956e --- /dev/null +++ b/src/html/buyBeer/shop_beer_static_item.html @@ -0,0 +1,69 @@ +
+ + + + + + + + + +啤酒 +$10 +酒 (1100存货) + + + + + + +
+
+
+
+
+ + +点击确定购买 + + +100 +瓶啤酒 +$1,000 + + + +确定 + + + +不 + + + + +
+
+ + + + + + +
+
+ + + +
+
+
+
+
+ +
+
+
\ No newline at end of file diff --git a/src/html/quick_crimes.html b/src/html/quick_crimes.html new file mode 100644 index 0000000..24e93a8 --- /dev/null +++ b/src/html/quick_crimes.html @@ -0,0 +1,55 @@ +
+
常用犯罪
+
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+
+
+
\ No newline at end of file diff --git a/src/html/rw_rider.html b/src/html/rw_rider.html new file mode 100644 index 0000000..7abf7e8 --- /dev/null +++ b/src/html/rw_rider.html @@ -0,0 +1,16 @@ +
+

RW 雷达

+
+
+
+ +
+ woohoo + + + + + + +
123456
789012
+
\ No newline at end of file diff --git a/src/html/xmasTown/wt.html b/src/html/xmasTown/wt.html new file mode 100644 index 0000000..f49d041 --- /dev/null +++ b/src/html/xmasTown/wt.html @@ -0,0 +1,33 @@ +
+
水晶球解密地图攻略
+ +
+
+ \ No newline at end of file diff --git a/src/html/xmasTown/wt_among_us.html b/src/html/xmasTown/wt_among_us.html new file mode 100644 index 0000000..9b28d93 --- /dev/null +++ b/src/html/xmasTown/wt_among_us.html @@ -0,0 +1,15 @@ +
    +
  • 出生点步行到传送点进入地图 1 [399,12]
  • +
  • 到达地图1,你出现在食堂,往下走,绕到红色按钮处[502,-1]
  • +
  • 答案:D B A A D D B B B C A D D D 最终: B (Green)
  • +
  • 然后你会被传送到地图2
  • +
  • 在地图2中,你需要沿着小路向南走,然后向东进入通风口,前往下一个部分[556,24]
  • +
  • 穿过通风口后,进入食堂。向南走到红色按钮所在的位置 [571,32]
  • +
  • 答题阶段,答案如下BBACBDC A
  • + +
  • 被传送到地图3
  • +
  • 先直接向南走一点,再沿着走廊走。进入左边的一个通风口[345,170]
  • +
  • 会传送到办公室,在那里找到最后一个红色按钮[356,173]
  • +
  • 答题阶段,答案如下CCADABBCD
  • +
  • 进入"PEEP SHOW",获得本地图的水晶球
  • +
\ No newline at end of file diff --git a/src/html/xmasTown/wt_chedburn_towers.html b/src/html/xmasTown/wt_chedburn_towers.html new file mode 100644 index 0000000..8698242 --- /dev/null +++ b/src/html/xmasTown/wt_chedburn_towers.html @@ -0,0 +1,13 @@ +
    +
  • 进入地图后,使用附近的FAST的T下方的厕所传送到Chedburn Towers
  • +
  • 进入大厅,"之"字形上楼,每层都是如此。
  • +
  • 最终会进入问答题区域,通过在相应的数字上穿过来回答问题
  • +
  • 答案是:3 9 5 4 9 2 6 8
  • +
  • 答题后,进入Ched的办公室,向西走,然后一直走到左边的楼梯上
  • +
  • 向南走下楼梯,然后向东走,沿着小楼梯到地下室
  • +
  • 向东走到牢房区域
  • +
  • 先踩下开关,打开牢房门前往右上角的最后一个牢房
  • +
  • 开关位于JAIL文字的左上方
  • +
  • 沿着挖出来的隧道一直走,岔路口向左走
  • +
  • 到金库,Chedburn NPC会给你本地图的水晶球
  • +
\ No newline at end of file diff --git a/src/html/xmasTown/wt_doggoQuest.html b/src/html/xmasTown/wt_doggoQuest.html new file mode 100644 index 0000000..d72e0fa --- /dev/null +++ b/src/html/xmasTown/wt_doggoQuest.html @@ -0,0 +1,29 @@ +
    +
  • 你出现在一个房间里
  • +
  • 向东走,然后向南走,沿着小走廊就可以离开这个房间
  • +
  • 来到这个地牢的01层
  • +
  • 首先向南走,然后绕过墙,攻击你看到的第一个怪物[101,1]
  • +
  • 然后向西走到墙边,向北攻击史莱姆
  • +
  • 继续向北,攻击下一个怪物
  • +
  • 向北走到拐角处,然后向东走到楼梯处继续前进[坐标为101,1]
  • +
  • 来到第二层,直接向东走上楼梯[11,-19]
  • +
  • 来到了这个地牢的第03层
  • +
  • 向东再向南走到墙边,然后向东走,与绿色史莱姆战斗
  • +
  • 继续向东走,经过被打败的史莱姆,然后向南和向西绕过墙,向北走一格,向西打败另一个史莱姆
  • +
  • 向西南方向走下楼梯[53,-49]
  • +
  • 来到了第 04 层
  • +
  • 走到墙边,撞右边两个镣铐之间的墙,然后向北直接走到墙里[15,-65]
  • +
  • 直接向北走,踏上红色的东西
  • +
  • 沿着楼梯向南和东南方向走右边楼梯[39,-69]
  • +
  • 来到第5层
  • +
  • 向北走,然后向西绕过中间的十字架,向南走到下一个楼梯[29,-93]
  • +
  • 来到第 6 层
  • +
  • 杀死那只大绿狗
  • +
  • 回到刚才的楼梯,来到05层[33,-114]
  • +
  • 在第05层,你会看到原来的十字架位置附近出现了新的楼梯口
  • +
  • 走上该楼梯[54, -99]
  • +
  • 到达了最后的?层
  • +
  • 沿着小路向下走,然后沿着冰冷的台阶走到Rudolph NPC
  • +
  • 在他身边来回走动
  • +
  • 踩在他身上的次数足够多时,Rudolph会把该图的水晶球交给你
  • +
\ No newline at end of file diff --git a/src/html/xmasTown/wt_holiday_terror.html b/src/html/xmasTown/wt_holiday_terror.html new file mode 100644 index 0000000..93489a3 --- /dev/null +++ b/src/html/xmasTown/wt_holiday_terror.html @@ -0,0 +1,17 @@ +
    +
  • 1. 从出生地沿着路向东,然后向北。过桥并沿着穿过城镇的小路继续前行,避开任何明显的陷阱(道路上的洞、打开的井盖等)。
  • +
  • 2. 继续向东和向北前进,直到到达 Mansion's Labyrinth(豪宅迷宫)[121,29]
  • +
  • 3. 豪宅入口在[131,41]
  • +
  • 4. 进入豪宅后向北走,你会看到一条由骷髅守卫的道路
  • +
  • 5. 沿着棕色的小路走,在黑色的区域前停下
  • +
  • 6. 按照如下的方式行进
  • +
  • 上3格,左2,上2,右4,下1,右3,上6,左2,下1,左6,下2,左2,上4,右5,上4
  • +
  • 7. 来到一个区域,在这里你必须在两个洞穴中做出选择
  • +
  • 第一次选择,答案是Christmas Miracle,选择左边的洞窟。
  • +
  • 第二次选择,答案是24/12/2019,选择左边的洞窟。
  • +
  • 第三次选择,答案是Hohoho Coldington,选择右边的洞窟。
  • +
  • 第四次选择,答案是Christmas Miracle Cave,选择左边的洞窟。
  • +
  • 8. 出现在一个用糖果棒装饰的红色地板的房间里,去地图的右上角一个冰洞的入口[101,-74]
  • +
  • 9. 进入冰洞。向西走,寻找叫Erik the last elf的黄色小NPC
  • +
  • 10. 拿到水晶球
  • +
\ No newline at end of file diff --git a/src/html/xmasTown/wt_kidnapped_santa.html b/src/html/xmasTown/wt_kidnapped_santa.html new file mode 100644 index 0000000..76485e8 --- /dev/null +++ b/src/html/xmasTown/wt_kidnapped_santa.html @@ -0,0 +1,24 @@ +
    +
  • 出生在一个类似城镇的地方
  • +
  • 沿着这条路向东走,然后向南走
  • +
  • 到达道路尽头的一个码头时,向西走一段路,踩在精灵的上面,乘坐渡船[124, -30]
  • +
  • 搭船来到了Fantasy Island
  • +
  • 小心那个游荡的绿色NPC,不惜一切代价避开他,否则他会把你打回出发点
  • +
  • 向西走,然后向北走,再向西绕过岩石。要非常小心,不要踩到水里或掉下悬崖,否则你会死
  • +
  • 然后回到南边,在那里你会看到一些门
  • +
  • 走进蓝色的门(左二)[111,-60]
  • +
  • 过了蓝门后继续沿路向南
  • +
  • 然后沿路向东,再向南
  • +
  • 再向东走,会看到“恐怖之家”,进入这栋楼[137, -84]
  • +
  • 向北走,进入洞口[164, -81]
  • +
  • 穿过隧道到达另一端的洞穴口[142, -63],避开所有怪物和NPC
  • +
  • 来到另一个岛上
  • +
  • 向南走,然后向东绕过建筑物,可以进入圣诞老人的洞穴[133, -2]
  • +
  • 在建筑物内向西走,再向北走,在圣诞老人家work shop的东北角,你会看到一个楼梯,走下去[169,4]
  • +
  • 在这一区域,要避开所有出现破损或有异样的地砖,也要避开四处游荡的邪恶的格林奇NPC
  • +
  • 沿着地牢里的走廊向东走,然后向南走,避开所有看起来不同的瓷砖
  • +
  • 它们上面有一些小裂缝和花纹,如果你是用手机的话,我建议你把亮度调高,以防万一
  • +
  • 最终会看到一个发绿光的小开关
  • +
  • 走到开关上[165, 18],激活它,然后进入向北打开的大门
  • +
  • 走到黄色精灵NPC脸上[166,25],可以得到本地图的水晶球
  • +
\ No newline at end of file diff --git a/src/html/xmasTown/wt_kiss_my_festivus.html b/src/html/xmasTown/wt_kiss_my_festivus.html new file mode 100644 index 0000000..d8a997d --- /dev/null +++ b/src/html/xmasTown/wt_kiss_my_festivus.html @@ -0,0 +1,19 @@ +
    +
  • 从起点出发,沿着小路向北走到出租车处,乘坐前往Dark Forest的出租车 [96,16]
  • +
  • 沿着公路向东走,继续向东进入雪地
  • +
  • 沿着暗淡的蓝色轨迹向东南方向走,穿过树林,直到你到达一个铁栅栏[坐标为114,-89]
  • +
  • 铁栅栏进不去。有人会告诉你乘坐他们的雪地车。
  • +
  • 向西走到雪地车旁,注意不要踩到任何冬青树(鲜艳黄红色的矮树),否则你将回到起点。
  • +
  • 被传送到锯木厂,在伐木工那里获得钥匙。
  • +
  • 然后向南走,然后向东走(向东走很长一段路),沿着小路返回铁栅栏处。
  • +
  • 来到一个炫酷的45°视角迷宫,你要走到地图的东北部,抵达另一个洞穴口[156,-74]
  • +
  • 先往左下方走到岔路口,然后往右上方走,接下来将只有一条路
  • +
  • 到达岛屿沿着小楼梯上去,绕到正下方那艘天鹅船
  • +
  • 到一个新的岛屿,向南走几步,踩在[12, -79]的蓝色火花上
  • +
  • 被传送到另一个有几辆拖车的岛上
  • +
  • 向北走,进入一个新的山洞口
  • +
  • 人被挡住了,要在冰层下向西北方向一直走,主要是向上和向左走
  • +
  • 沿着这条路一直往上走,然后在开阔的地方往东走,你会看到一座房子[房子的入口在26,58]
  • +
  • 进入房子,向北走几步,穿过闪闪发光的入口,你就可以进入房子了
  • +
  • 沿着东南方向走,你会看到Evil-Duck NPC,他将给你本地图的水晶球
  • +
\ No newline at end of file diff --git a/src/html/xmasTown/wt_long_way_from_home.html b/src/html/xmasTown/wt_long_way_from_home.html new file mode 100644 index 0000000..85ca1f4 --- /dev/null +++ b/src/html/xmasTown/wt_long_way_from_home.html @@ -0,0 +1,21 @@ +
    +
  • 1.随便动一下
  • +
  • 2.左边的管道口
  • +
  • 3.右走到十字路口,往上,往右,从偏左的那个管道往上。
  • +
  • 3.出小门,往右到底,往上到底,往右,进上面房间,右上角的电脑,电脑显示的是下面房间的走法,任意移动退出
  • +
  • 4.去下面房间,右边橙色电力符号,进入解密。下,右下,右下,右上,右上,右,右下,右下,下,左下,左下,
  • +
  • 左,左,左下,左下,进圈。
  • +
  • 5.进入新的房间按钮
  • +
  • 6.一直左走,走到有两个怪兽把手的桥那,进上面的房间,左上角的机器,*是重输密码
  • +
  • 作者随时改密码,建议看纸条上的提示自己去数
  • +
  • 7.桥上怪兽消失, 往左走到底,按钮
  • +
  • 8.右走,走到雪地走大路,按钮开铁门,上darkforest的蓝车
  • +
  • 9.右走十几步,传送
  • +
  • 10.右下走,看到铁丝网,顺着铁丝网右走,有个缺口,进去。
  • +
  • 11.右走,直到看见三颗倒下的圣诞树(记住这里),顺着血迹和脚印走,进山洞。
  • +
  • 12.顺着山洞走到一滩血,原路出山洞。
  • +
  • 13.原路回到三颗倒下的圣诞树,正上方有个红色仓库,进入。
  • +
  • 14.上,上,上,右,上,左,上,路就通了,去拿到右上角的锯子,原路出仓库。
  • +
  • 15.出来就在车下面,上车,再上车。
  • +
  • 16.左边的小橘人,完成
  • +
\ No newline at end of file diff --git a/src/html/xmasTown/wt_maltese_snow_globe.html b/src/html/xmasTown/wt_maltese_snow_globe.html new file mode 100644 index 0000000..78f0af7 --- /dev/null +++ b/src/html/xmasTown/wt_maltese_snow_globe.html @@ -0,0 +1,17 @@ +
    +
  • 1.想办法进入前几层的楼梯口
  • +
  • 2.出来之后往南走, 在码头找到天鹅船
  • +
  • 3.按着数字1-12走过乐高博物馆
  • +
  • 4.跟着大路走到天鹅船。
  • +
  • 5.走到901,486的银行
  • +
  • 6.最左上的楼梯
  • +
  • 7.B-D-C-E-F-G-C-A
  • +
  • 8.右,右,右,北,北,右,右
  • +
  • 9.走到右上角铁路
  • +
  • 10.小游戏:
  • +
  • 移动1到最右,移动2到中间,移动1到2上面,移动3到最右,移动1到最左,移动2到3.上面,移动1到2上面。
  • +
  • 11.往上走出铁丝网,往左绕一个大圈走到300,476
  • +
  • 12.走到363,406的隧道,走到361,400的隧道 ,往南走。
  • +
  • 13.走到352,334的迷宫,好像有好几条路,我说我的走法,往左下走,走倒最下了往右走,走到1个不一样的绿色的时候,往上走。
  • +
  • 14.走到迷宫中间的小人,后面就只有一条路走了,完成。
  • +
\ No newline at end of file diff --git a/src/html/xmasTown/wt_pokemon_ct.html b/src/html/xmasTown/wt_pokemon_ct.html new file mode 100644 index 0000000..bcca233 --- /dev/null +++ b/src/html/xmasTown/wt_pokemon_ct.html @@ -0,0 +1,36 @@ +
    +
  • 宝可梦新增了战斗系统,路过高草丛会几率进入战斗
  • +
  • 战斗系统为一个十字形界面,上:技能/精灵球捕捉,下:逃跑,左:回血,右:攻击
  • +
  • 战斗守则:攻击,当你血量为33时回血
  • +
  • 打败最终BOSS需要捕捉两只,捕捉地点:
  • +
  • 一:把包裹交给大木博士后,去常磐市的路上
  • +
  • 二:进入森林后遇到的毛毛虫
  • +
  • 捕捉时需要将其打到残血。
  • +
  • 最终BOSS打法:
  • +
  • 第一个敌方精灵,毛虫进化的蝴蝶,先放技能,使其眩晕,在眩晕期间攻击,一旦醒过来就眩晕,重复。
  • +
  • 第一个BOSS死后,第二个BOSS会秒杀蝴蝶, 此时用第二个精灵。
  • +
  • 第二个精灵打法:攻击,看见它放absorbing技能就去回血(当然你没血了也要去回血),重复。
  • +
  • 【游戏开始】
  • +
  • 出生在你房间的二楼
  • +
  • 下楼梯离开房间。走出家门。从那里向东北方向进入高草丛,将被传送到大木博士(Professor Oak)的实验室
  • +
  • 踩大木博士
  • +
  • 踏上桌子,选择你的宝可梦
  • +
  • 现在出门去常磐市(Veridian City)拿一个包裹
  • +
  • 离开大木博士的实验室,向北走,穿过草地,前往常磐市(Veridian City)
  • +
  • 进入城市后,前往 Poke Mart [134,-3]
  • +
  • 回到大木博士的实验室,返回时可以跳下小路西侧的山崖,避开高草丛
  • +
  • 把包裹交给大木博士后。回常磐市
  • +
  • 在房子和两个精灵之间的小路上继续向北走,穿过城市[79,-21]
  • +
  • 过了精灵后一路向北
  • +
  • 进入一所房子,经过它才能进入常磐森林
  • +
  • 穿过常磐森林才能到达尼比市
  • +
  • 森林的入口向东走,直到看到高草,然后向北走,直到下一片高草
  • +
  • 绕过树木向东走,然后向北走
  • +
  • 现在绕过树木向西走,然后向北走
  • +
  • 然后穿过草地向西和向南走
  • +
  • 沿着这条小路蜿蜒穿过高高的草丛
  • +
  • 沿着小路穿过草地,最终离开森林
  • +
  • 离开森林后,沿着草丛旁小路向北走,到达 Pewter City。向北向西绕到大房子处,到达道馆
  • +
  • 走到大胡桃夹子前,挑战小刚
  • +
  • 赢得这场战斗后你会被带到大木博士那里,他会给本地图的水晶球
  • +
\ No newline at end of file diff --git a/src/html/xmasTown/wt_stanley_hotel.html b/src/html/xmasTown/wt_stanley_hotel.html new file mode 100644 index 0000000..fecca5b --- /dev/null +++ b/src/html/xmasTown/wt_stanley_hotel.html @@ -0,0 +1,7 @@ +
    +
  • 从起点开始,你会看到正北方有一座房子。向北走几步到门前,进入房子。
  • +
  • 传送到一个有门的地方。绕过并向上走,激活位于[188,72]的大门开关。
  • +
  • 向东北方向前进,沿着血迹穿过森林,直到你到达一个山洞。
  • +
  • 依次使用使用防御(踩盾牌标记),然后攻击(剑),然后魔法(闪亮的蓝色气泡)来杀死怪物。
  • +
  • 最后,你会来到工人Bob的房间,他将给你本地图的水晶球。
  • +
\ No newline at end of file diff --git a/src/html/xmasTown/wt_winter_in_gatlin.html b/src/html/xmasTown/wt_winter_in_gatlin.html new file mode 100644 index 0000000..3806533 --- /dev/null +++ b/src/html/xmasTown/wt_winter_in_gatlin.html @@ -0,0 +1,9 @@ +
    +
  • 从出生点出发
  • +
  • 往右走到达树林,往右上走跨过铁栅栏,再往右走,经过红车时从右边缝隙穿过往下走
  • +
  • 沿公路向下走到第一个岔路向右走到废弃的小屋[14,80]
  • +
  • 进入小屋时,你会在一个黑色的小房间里,走到亮起的圆圈处
  • +
  • 在下一个房间里,会有一连串的数字,按以下顺序走到数字上
  • +
  • 1,4,6,8,7,6,4
  • +
  • 在最后一个房间,Epic_Heasley NPC 会给你本图的水晶球
  • +
\ No newline at end of file diff --git a/src/html/xmasTown/wt_xmas_town.html b/src/html/xmasTown/wt_xmas_town.html new file mode 100644 index 0000000..06288f4 --- /dev/null +++ b/src/html/xmasTown/wt_xmas_town.html @@ -0,0 +1,7 @@ +
    +
  • 旧攻略提到的驯鹿车已被移除,只能手动找一条蓝色的小路[94,3]
  • +
  • 向南走,然后上木桥,沿着它向西走到达冰湖
  • +
  • 在冰湖[55,7][61,64]附近找Labyrinth传送门进入迷宫
  • +
  • 迷宫的出口在中间的方向[395,397]一个冰湖,走进冰湖传送
  • +
  • 走到企鹅
  • +
\ No newline at end of file diff --git a/src/html/xmasTown/xmas_town_notify.html b/src/html/xmasTown/xmas_town_notify.html new file mode 100644 index 0000000..a19e045 --- /dev/null +++ b/src/html/xmasTown/xmas_town_notify.html @@ -0,0 +1,52 @@ +
+ +
附近物品
+
+ 物品 +
+ 箱子 +
+
+
+
+
+
+
+
+

- 长时间不清空会出现奇怪的问题

+
+
历史记录
坐标地图类型发现获取
+
+
+
+
+ \ No newline at end of file