mirror of
https://github.com/TheLovinator1/wutheringwaves.git
synced 2025-11-27 20:49:48 +01:00
Compare commits
24 Commits
copilot/fi
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1590f5581f | ||
|
|
ec003ebfcb | ||
|
|
62d212be1e | ||
|
|
a2ebaadc00 | ||
|
|
bec55b241b | ||
|
|
bba567c147 | ||
|
|
73caaa06f7 | ||
|
|
3a1b5f343d | ||
|
|
3e19e06893 | ||
|
|
27f2db72bd | ||
|
|
654594d608 | ||
|
|
930db9b97c | ||
| 49abdd8160 | |||
| fe3181d9a3 | |||
| 6acf030e74 | |||
| 7f102a30ed | |||
|
|
27b14909df | ||
| b2d4ad5946 | |||
| 8b505af889 | |||
| a09ea0bd9a | |||
| 192615fddb | |||
| 572b863adb | |||
| 92078ed39a | |||
| 282a5fdf75 |
17
.github/workflows/main.yml
vendored
17
.github/workflows/main.yml
vendored
@@ -2,35 +2,28 @@ name: Run Scraper
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 * * * *' # Every hour
|
||||
- cron: "0 */15 * * *" # Every 15 minutes
|
||||
workflow_dispatch:
|
||||
push:
|
||||
paths:
|
||||
- 'scrape.py'
|
||||
- '.github/workflows/main.yml'
|
||||
- "scrape.py"
|
||||
- ".github/workflows/main.yml"
|
||||
|
||||
jobs:
|
||||
scrape:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-slim
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.13'
|
||||
|
||||
- name: Install uv
|
||||
id: setup-uv
|
||||
uses: astral-sh/setup-uv@v4
|
||||
with:
|
||||
enable-cache: true
|
||||
|
||||
- name: Install dependencies
|
||||
run: uv sync
|
||||
run: uv sync --all-groups -U
|
||||
|
||||
- name: Run script
|
||||
run: uv run python scrape.py
|
||||
|
||||
220
.gitignore
vendored
220
.gitignore
vendored
@@ -1,6 +1,218 @@
|
||||
articles/ArticleMenu.json
|
||||
# Byte-compiled / optimized / DLL files
|
||||
__pycache__/
|
||||
*.pyc
|
||||
*.pyo
|
||||
*.pyd
|
||||
*.py[codz]
|
||||
*$py.class
|
||||
|
||||
# C extensions
|
||||
*.so
|
||||
|
||||
# Distribution / packaging
|
||||
.Python
|
||||
build/
|
||||
develop-eggs/
|
||||
dist/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
lib/
|
||||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
wheels/
|
||||
share/python-wheels/
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
MANIFEST
|
||||
|
||||
# PyInstaller
|
||||
# Usually these files are written by a python script from a template
|
||||
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||
*.manifest
|
||||
*.spec
|
||||
|
||||
# Installer logs
|
||||
pip-log.txt
|
||||
pip-delete-this-directory.txt
|
||||
|
||||
# Unit test / coverage reports
|
||||
htmlcov/
|
||||
.tox/
|
||||
.nox/
|
||||
.coverage
|
||||
.coverage.*
|
||||
.cache
|
||||
nosetests.xml
|
||||
coverage.xml
|
||||
*.cover
|
||||
*.py.cover
|
||||
.hypothesis/
|
||||
.pytest_cache/
|
||||
cover/
|
||||
|
||||
# Translations
|
||||
*.mo
|
||||
*.pot
|
||||
|
||||
# Django stuff:
|
||||
*.log
|
||||
local_settings.py
|
||||
db.sqlite3
|
||||
db.sqlite3-journal
|
||||
|
||||
# Flask stuff:
|
||||
instance/
|
||||
.webassets-cache
|
||||
|
||||
# Scrapy stuff:
|
||||
.scrapy
|
||||
|
||||
# Sphinx documentation
|
||||
docs/_build/
|
||||
|
||||
# PyBuilder
|
||||
.pybuilder/
|
||||
target/
|
||||
|
||||
# Jupyter Notebook
|
||||
.ipynb_checkpoints
|
||||
|
||||
# IPython
|
||||
profile_default/
|
||||
ipython_config.py
|
||||
|
||||
# pyenv
|
||||
# For a library or package, you might want to ignore these files since the code is
|
||||
# intended to run in multiple environments; otherwise, check them in:
|
||||
# .python-version
|
||||
|
||||
# pipenv
|
||||
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
||||
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
||||
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
||||
# install all needed dependencies.
|
||||
# Pipfile.lock
|
||||
|
||||
# UV
|
||||
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
||||
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
||||
# commonly ignored for libraries.
|
||||
uv.lock
|
||||
|
||||
# poetry
|
||||
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
||||
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
||||
# commonly ignored for libraries.
|
||||
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
||||
# poetry.lock
|
||||
# poetry.toml
|
||||
|
||||
# pdm
|
||||
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
||||
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
|
||||
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
|
||||
# pdm.lock
|
||||
# pdm.toml
|
||||
.pdm-python
|
||||
.pdm-build/
|
||||
|
||||
# pixi
|
||||
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
|
||||
# pixi.lock
|
||||
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
|
||||
# in the .venv directory. It is recommended not to include this directory in version control.
|
||||
.pixi
|
||||
|
||||
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
||||
__pypackages__/
|
||||
|
||||
# Celery stuff
|
||||
celerybeat-schedule
|
||||
celerybeat.pid
|
||||
|
||||
# Redis
|
||||
*.rdb
|
||||
*.aof
|
||||
*.pid
|
||||
|
||||
# RabbitMQ
|
||||
mnesia/
|
||||
rabbitmq/
|
||||
rabbitmq-data/
|
||||
|
||||
# ActiveMQ
|
||||
activemq-data/
|
||||
|
||||
# SageMath parsed files
|
||||
*.sage.py
|
||||
|
||||
# Environments
|
||||
.env
|
||||
.envrc
|
||||
.venv
|
||||
env/
|
||||
venv/
|
||||
ENV/
|
||||
env.bak/
|
||||
venv.bak/
|
||||
|
||||
# Spyder project settings
|
||||
.spyderproject
|
||||
.spyproject
|
||||
|
||||
# Rope project settings
|
||||
.ropeproject
|
||||
|
||||
# mkdocs documentation
|
||||
/site
|
||||
|
||||
# mypy
|
||||
.mypy_cache/
|
||||
.dmypy.json
|
||||
dmypy.json
|
||||
|
||||
# Pyre type checker
|
||||
.pyre/
|
||||
|
||||
# pytype static type analyzer
|
||||
.pytype/
|
||||
|
||||
# Cython debug symbols
|
||||
cython_debug/
|
||||
|
||||
# PyCharm
|
||||
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
||||
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
||||
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
||||
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
||||
# .idea/
|
||||
|
||||
# Abstra
|
||||
# Abstra is an AI-powered process automation framework.
|
||||
# Ignore directories containing user credentials, local state, and settings.
|
||||
# Learn more at https://abstra.io/docs
|
||||
.abstra/
|
||||
|
||||
# Visual Studio Code
|
||||
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
|
||||
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
|
||||
# and can be added to the global gitignore or merged into this file. However, if you prefer,
|
||||
# you could uncomment the following to ignore the entire vscode folder
|
||||
# .vscode/
|
||||
|
||||
# Ruff stuff:
|
||||
.ruff_cache/
|
||||
|
||||
# PyPI configuration file
|
||||
.pypirc
|
||||
|
||||
# Marimo
|
||||
marimo/_static/
|
||||
marimo/_lsp/
|
||||
__marimo__/
|
||||
|
||||
# Streamlit
|
||||
.streamlit/secrets.toml
|
||||
|
||||
articles/ArticleMenu.json
|
||||
|
||||
22
README.md
22
README.md
@@ -11,6 +11,28 @@ Stay updated with the latest Wuthering Waves news through these RSS feeds:
|
||||
|
||||
## Articles
|
||||
|
||||
- [[Tactical Simulacra: Off Tune] Featured Combat Event](https://wutheringwaves.kurogames.com/en/main/news/detail/3672) [[json]](articles/3672.json)
|
||||
- [V2.8 Wuthering Waves Battle Rush](https://wutheringwaves.kurogames.com/en/main/news/detail/3665) [[json]](articles/3665.json)
|
||||
- [Wuthering Waves Fan Creation Event "To the City Set in Amber" is now live!](https://wutheringwaves.kurogames.com/en/main/news/detail/3664) [[json]](articles/3664.json)
|
||||
- [Patch Notes for Version 2.8: To the City Set in Amber](https://wutheringwaves.kurogames.com/en/main/news/detail/3657) [[json]](articles/3657.json)
|
||||
- [Wuthering Waves Fan Creation Event Winners Reveal](https://wutheringwaves.kurogames.com/en/main/news/detail/3648) [[json]](articles/3648.json)
|
||||
- [[Absolute Pulsation] Featured Weapon Convene: Boosted Drop Rate for Luminous Hymn](https://wutheringwaves.kurogames.com/en/main/news/detail/3639) [[json]](articles/3639.json)
|
||||
- [Resonator Review | Graceful Luminescence—Phoebe](https://wutheringwaves.kurogames.com/en/main/news/detail/3637) [[json]](articles/3637.json)
|
||||
- [[With Hushed Whispers] Featured Resonator Convene: Boosted Drop Rate for Phoebe](https://wutheringwaves.kurogames.com/en/main/news/detail/3631) [[json]](articles/3631.json)
|
||||
- [[Absolute Pulsation] Featured Weapon Convene: Boosted Drop Rate for Kumokiri](https://wutheringwaves.kurogames.com/en/main/news/detail/3623) [[json]](articles/3623.json)
|
||||
- [[Horizon of Dawnbreak] Featured Resonator Convene: Boosted Drop Rate for Chisa](https://wutheringwaves.kurogames.com/en/main/news/detail/3616) [[json]](articles/3616.json)
|
||||
- [Wuthering Waves Update Content | Version 2.8 "To the City Set in Amber" Planned for Release on November 20th (UTC+8)](https://wutheringwaves.kurogames.com/en/main/news/detail/3613) [[json]](articles/3613.json)
|
||||
- [Event Preview | [Stranger Things in Honami] Combat Event, Coming Soon!](https://wutheringwaves.kurogames.com/en/main/news/detail/3603) [[json]](articles/3603.json)
|
||||
- [Profile Reveal | Eye of Unraveling — Chisa](https://wutheringwaves.kurogames.com/en/main/news/detail/3595) [[json]](articles/3595.json)
|
||||
- [Post-Lament Anthropocene: Stars Intertwined | Chisa](https://wutheringwaves.kurogames.com/en/main/news/detail/3592) [[json]](articles/3592.json)
|
||||
- [Zani's Deluxe Outfit "Downtown Repose"](https://wutheringwaves.kurogames.com/en/main/news/detail/3588) [[json]](articles/3588.json)
|
||||
- [Wuthering Waves Version 2.8 Update Maintenance Notice](https://wutheringwaves.kurogames.com/en/main/news/detail/3583) [[json]](articles/3583.json)
|
||||
- [Wuthering Waves Version Preview | Version 2.8 "To the City Set in Amber" Scheduled for Release on November 20th (UTC+8)](https://wutheringwaves.kurogames.com/en/main/news/detail/3572) [[json]](articles/3572.json)
|
||||
- [[Chord Cleansing] Limited-Time Echo Double Drop Event](https://wutheringwaves.kurogames.com/en/main/news/detail/3554) [[json]](articles/3554.json)
|
||||
- [Insider Channel: Special Program | Signs of Imprisonment: Part Three](https://wutheringwaves.kurogames.com/en/main/news/detail/3549) [[json]](articles/3549.json)
|
||||
- [Insider Channel: Special Program | Signs of Imprisonment: Part Two](https://wutheringwaves.kurogames.com/en/main/news/detail/3547) [[json]](articles/3547.json)
|
||||
- [[Lollo Campaign: Ice Savior] Featured Commission Event](https://wutheringwaves.kurogames.com/en/main/news/detail/3541) [[json]](articles/3541.json)
|
||||
- [Insider Channel: Special Program | Signs of Imprisonment: Part One](https://wutheringwaves.kurogames.com/en/main/news/detail/3538) [[json]](articles/3538.json)
|
||||
- [Tidal Photography: Capture Your Action Highlights of Resonators!](https://wutheringwaves.kurogames.com/en/main/news/detail/3532) [[json]](articles/3532.json)
|
||||
- [[Freeze Frame: Action Highlights] Combat Photography Event](https://wutheringwaves.kurogames.com/en/main/news/detail/3523) [[json]](articles/3523.json)
|
||||
- [[Absolute Pulsation] Featured Weapon Convene: Boosted Drop Rate for Blazing Justice](https://wutheringwaves.kurogames.com/en/main/news/detail/3516) [[json]](articles/3516.json)
|
||||
|
||||
14
articles/3538.json
generated
Normal file
14
articles/3538.json
generated
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"articleContent": "<div>\n<div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">Qiuyuan once investigated a medicinal-herb corruption case at Mingting's order during his service as the senior agent of the Internal Security Agency.</div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\"> </div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1762272000000/mh9nwk3fq095xijyrw-1762311677850.jpg\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"></div>\n</div>\n</div>",
|
||||
"articleId": 3538,
|
||||
"articleTitle": "Insider Channel: Special Program | Signs of Imprisonment: Part One",
|
||||
"articleType": 58,
|
||||
"articleTypeName": "Notice",
|
||||
"endTime": "2099-01-01 00:00:00",
|
||||
"gameId": "G152-en",
|
||||
"startTime": "2025-11-05 12:00:00",
|
||||
"articleDesc": "",
|
||||
"createTime": "2025-11-05 11:01:50",
|
||||
"suggestCover": "",
|
||||
"top": 0
|
||||
}
|
||||
15
articles/3541.json
generated
Normal file
15
articles/3541.json
generated
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"articleContent": "<div><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1762272000000/vcqovqgon5keki591t-1762312534821.jpg\" width=\"800\" height=\"450\" data-media-source=\"production_G152_en\" data-desc=\"succ\">\n<p><span style=\"font-size: 14pt;\">The Lollo Campaign is facing an unexpected crisis! To save Maji's old reliable delivery legs, and to keep those convenient services running, help him complete his new program, Lollo Ice Drinks!</span><br><span style=\"font-size: 14pt;\">Complete the campaigns to claim your Lollo Stamps—a gift of gratitude from Lollo Logistics. Lollo Stamps can be exchanged for Lollo Helper special deliveries.</span><br><br><span style=\"font-size: 14pt;\">✦Duration✦</span><br><span style=\"font-size: 14pt;\">2025-11-06 04:00 - 2025-11-19 03:59 (server time)</span><br><br><span style=\"font-size: 14pt;\">✦Rewards✦</span><br><span style=\"font-size: 14pt;\">Astrite x400, Lustrous Tide x5, Premium Enclosure Tank x5, Forgery Premium Supply x10, Crystal Solvent x5, Shell Credit x340000, and other Materials.</span><br><br><span style=\"font-size: 14pt;\">✦Eligibility✦</span><br><span style=\"font-size: 14pt;\">Reach Union Level 14 and complete Main Quest Chapter II Act V \"\"Shadow of Glory.\"\"</span><br><br><span style=\"font-size: 14pt;\">✦Event Details✦</span><br><span style=\"font-size: 14pt;\">- During the event, complete Lollo Campaigns to obtain Lollo Stamps.</span><br><span style=\"font-size: 14pt;\">- Each Lollo Stamp can be exchanged for a Lollo Helper special delivery.</span><br><span style=\"font-size: 14pt;\">- There are 3 Inventories for the Lollo Helper special deliveries. Once you collect all deliveries in an Inventory, the next Inventory will be unlocked.</span><br><span style=\"font-size: 14pt;\">- If you win the Lollo Express special delivery service, you can claim all deliveries in the current Inventory.</span><br><br><span style=\"font-size: 14pt;\">※After the event ends, any remaining Lollo Helper special delivery will become unavailable, and any unused Lollo Stamp will be cleared. Please take note of the event period and participate in the event accordingly.</span></p>\n</div>",
|
||||
"articleCover": "",
|
||||
"articleId": 3541,
|
||||
"articleTitle": "[Lollo Campaign: Ice Savior] Featured Commission Event",
|
||||
"articleType": 58,
|
||||
"articleTypeName": "Notice",
|
||||
"contentCover": "",
|
||||
"gameId": "G152-en",
|
||||
"startTime": "2025-11-05 11:00:00",
|
||||
"articleDesc": "",
|
||||
"createTime": "2025-11-05 11:15:55",
|
||||
"suggestCover": "",
|
||||
"top": 0
|
||||
}
|
||||
14
articles/3547.json
generated
Normal file
14
articles/3547.json
generated
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"articleContent": "<div>\n<div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">Qiuyuan once investigated a medicinal-herb corruption case at Mingting's order during his service as the senior agent of the Internal Security Agency. But there's more to it than meets the eye on his trip to capture the fugitive...<img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1762272000000/e6d739gbrr8jsp3knj-1762345950424.jpg\" width=\"800\" height=\"17602\" data-media-source=\"production_G152_en\" data-desc=\"succ\"></div>\n</div>\n</div>",
|
||||
"articleId": 3547,
|
||||
"articleTitle": "Insider Channel: Special Program | Signs of Imprisonment: Part Two",
|
||||
"articleType": 58,
|
||||
"articleTypeName": "Notice",
|
||||
"endTime": "2099-01-01 00:00:00",
|
||||
"gameId": "G152-en",
|
||||
"startTime": "2025-11-06 12:00:00",
|
||||
"articleDesc": "",
|
||||
"createTime": "2025-11-05 20:33:41",
|
||||
"suggestCover": "",
|
||||
"top": 0
|
||||
}
|
||||
15
articles/3549.json
generated
Normal file
15
articles/3549.json
generated
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"articleContent": "<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">Qiuyuan once investigated a medicinal-herb corruption case at Mingting's order during his service as the senior agent of the Internal Security Agency. But there's more to it than meets the eye on his trip to capture the fugitive...</div>\n<div data-zone-id=\"0\" data-line-index=\"1\" data-line=\"true\">\n<div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">Beneath the surface of an odd case, hidden motives lurked. What appeared to be a routine order quietly signaled trouble was on the horizon.</div>\n</div>\n</div>\n<div data-zone-id=\"0\" data-line-index=\"1\" data-line=\"true\"> </div>\n<div data-zone-id=\"0\" data-line-index=\"1\" data-line=\"true\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1762444800000/fgbqbrqeirp5emnbg4-1762482878492.jpg\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"></div>",
|
||||
"articleCover": "",
|
||||
"articleId": 3549,
|
||||
"articleTitle": "Insider Channel: Special Program | Signs of Imprisonment: Part Three",
|
||||
"articleType": 58,
|
||||
"articleTypeName": "Notice",
|
||||
"contentCover": "",
|
||||
"gameId": "G152-en",
|
||||
"startTime": "2025-11-07 12:00:00",
|
||||
"articleDesc": "",
|
||||
"createTime": "2025-11-06 15:15:18",
|
||||
"suggestCover": "",
|
||||
"top": 0
|
||||
}
|
||||
14
articles/3554.json
generated
Normal file
14
articles/3554.json
generated
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"articleContent": "<div><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1762704000000/7hqt0oebqm8w5fr18d-1762764686796.jpg\" width=\"800\" height=\"450\" data-media-source=\"production_G152_en\" data-desc=\"succ\">\n<p><span style=\"font-size: 14pt;\">The Tacet Fields are experiencing a surge in energy due to the Waveworn Phenomenon.</span><br><span style=\"font-size: 14pt;\">Use the Waveplates to maximize your rewards from the Tacetite Blooms!</span><br><br><span style=\"font-size: 14pt;\">✦Duration✦</span><br><span style=\"font-size: 14pt;\">2025-11-12 04:00 - 2025-11-19 03:59 (server time)</span><br><br><span style=\"font-size: 14pt;\">✦Eligibility✦</span><br><span style=\"font-size: 14pt;\">Reach Union Level 19.</span><br><br><span style=\"font-size: 14pt;\">✦Details✦</span><br><span style=\"font-size: 14pt;\">- Complete Tacet Suppression challenges during the event and spend Waveplates for double rewards.</span><br><span style=\"font-size: 14pt;\">- During [Chord Cleansing], you can claim double rewards 3 times a day, and the remaining double rewards claims can be viewed on the [Chord Cleansing] event page.</span><br><span style=\"font-size: 14pt;\">- During [Chord Cleansing], double rewards claims refresh daily at 04:00 (server time).</span></p>\n</div>",
|
||||
"articleId": 3554,
|
||||
"articleTitle": "[Chord Cleansing] Limited-Time Echo Double Drop Event",
|
||||
"articleType": 58,
|
||||
"articleTypeName": "Notice",
|
||||
"endTime": "2099-01-01 00:00:00",
|
||||
"gameId": "G152-en",
|
||||
"startTime": "2025-11-11 11:00:00",
|
||||
"articleDesc": "",
|
||||
"createTime": "2025-11-10 16:51:46",
|
||||
"suggestCover": "",
|
||||
"top": 0
|
||||
}
|
||||
14
articles/3572.json
generated
Normal file
14
articles/3572.json
generated
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"articleContent": "<div>\n<div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">The Preview Special Broadcast has concluded. Take a look back at all these exciting updates:</div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\"> </div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/80lk8p3zq0f06k7meo-1763102612556.jpg\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/m6odgabp8gfpmbc937-1763102627210.jpg\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/0gy70in8ksod74rbj9-1763102656359.jpg\" width=\"800\" height=\"8404\" data-media-source=\"production_G152_en\" data-desc=\"succ\"></div>\n</div>\n</div>",
|
||||
"articleId": 3572,
|
||||
"articleTitle": "Wuthering Waves Version Preview | Version 2.8 \"To the City Set in Amber\" Scheduled for Release on November 20th (UTC+8)",
|
||||
"articleType": 58,
|
||||
"articleTypeName": "Notice",
|
||||
"endTime": "2099-01-01 00:00:00",
|
||||
"gameId": "G152-en",
|
||||
"startTime": "2025-11-14 20:00:00",
|
||||
"articleDesc": "",
|
||||
"createTime": "2025-11-14 14:44:48",
|
||||
"suggestCover": "",
|
||||
"top": 0
|
||||
}
|
||||
14
articles/3583.json
generated
Normal file
14
articles/3583.json
generated
Normal file
File diff suppressed because one or more lines are too long
14
articles/3588.json
generated
Normal file
14
articles/3588.json
generated
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"articleContent": "<div>\n<div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">\"She leans casually against the railing, her sweater soft against the light, appearing equally elegant as she is relaxed. Changing up the style every now and then isn't so bad.</div>\n<div data-zone-id=\"0\" data-line-index=\"1\" data-line=\"true\">Turning slightly, Zani looks down at the city stretching beneath her. The afternoon sunlight spills over the buildings, their outlines shimmering in the glow. She gazes quietly, letting the city's clamor become the backdrop to this moment of ease.\"</div>\n<div data-zone-id=\"0\" data-line-index=\"2\" data-line=\"true\"> </div>\n<div data-zone-id=\"0\" data-line-index=\"3\" data-line=\"true\">Zani's Deluxe Outfit \"Downtown Repose\" will become available once Version 2.8 goes live. Get a sneak peek now!</div>\n<div data-zone-id=\"0\" data-line-index=\"4\" data-line=\"true\"> </div>\n<div data-zone-id=\"0\" data-line-index=\"5\" data-line=\"true\">✦How to Obtain✦</div>\n<div data-zone-id=\"0\" data-line-index=\"6\" data-line=\"true\">Zani's Deluxe Outfit \"Downtown Repose\" will be made permanently available in the Store once Version 2.8 goes live.</div>\n<div data-zone-id=\"0\" data-line-index=\"7\" data-line=\"true\">Purchase the Outfit during Version 2.8 at a discount, for 1980 Lunites only. After Version 2.8 ends, the Outfit will cost 2480 Lunites.</div>\n<div data-zone-id=\"0\" data-line-index=\"8\" data-line=\"true\">From the time Version 2.8 goes live until 2025-12-24 11:59 (server time), there will be a trial event where you can try out Downtown Repose. Complete the trial event to claim rewards.<img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/wq3ziy2rccqu97o1if-1763125379579.jpg\" width=\"800\" height=\"450\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/fwcbp3rmid4meihbhv-1763125399619.jpg\" width=\"800\" height=\"1272\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/2de1n4u4vysp2so5r9-1763125636047.gif\" width=\"800\" height=\"1421\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/3m6k2b33r2f1nkwbhm-1763125656263.gif\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/qrxyfz8s2ocbx9cs9h-1763125699983.gif\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/if07fhjaf7w30ladck-1763125716913.gif\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/zo43n9evpdy3uo4kol-1763125732828.gif\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/zzy2qnd222ubs9m1ll-1763125745756.jpg\" width=\"800\" height=\"1422\" data-media-source=\"production_G152_en\" data-desc=\"succ\"></div>\n</div>\n</div>",
|
||||
"articleId": 3588,
|
||||
"articleTitle": "Zani's Deluxe Outfit \"Downtown Repose\"",
|
||||
"articleType": 58,
|
||||
"articleTypeName": "Notice",
|
||||
"endTime": "2099-01-01 00:00:00",
|
||||
"gameId": "G152-en",
|
||||
"startTime": "2025-11-15 11:00:00",
|
||||
"articleDesc": "",
|
||||
"createTime": "2025-11-14 20:42:36",
|
||||
"suggestCover": "",
|
||||
"top": 0
|
||||
}
|
||||
14
articles/3592.json
generated
Normal file
14
articles/3592.json
generated
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"articleContent": "<div>\n<div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">\"Kuchiba Chisa. Tactical Development Program, Department of Engineering, Startorch Academy. Forte Specialization: structural dissection... Apologies, this might not be the time for formalities.\"—Chisa</div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/8mo5g0ez8yh4tqdh2b-1763126375972.jpg\" width=\"800\" height=\"450\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/7wl7dhwcf6rnnb75aj-1763126391523.jpg\" width=\"800\" height=\"5012\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/mvost8tdegosefrf15-1763126414477.jpg\" width=\"800\" height=\"3150\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/nzu8onk6t8fjbcad4z-1763126466514.jpg\" width=\"800\" height=\"3134\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/0dels41peppqosldca-1763126486040.gif\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/k844e8vq4umkf12pxo-1763126608314.gif\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/l5bqkqgkgvtzt12419-1763126625486.gif\" width=\"800\" height=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/8xwma7cxh5kmtm38g2-1763126682626.gif\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/h0smpxd26tov8ip4ix-1763126696478.jpg\" width=\"800\" height=\"1422\" data-media-source=\"production_G152_en\" data-desc=\"succ\"></div>\n</div>\n</div>",
|
||||
"articleId": 3592,
|
||||
"articleTitle": "Post-Lament Anthropocene: Stars Intertwined | Chisa",
|
||||
"articleType": 58,
|
||||
"articleTypeName": "Notice",
|
||||
"endTime": "2099-01-01 00:00:00",
|
||||
"gameId": "G152-en",
|
||||
"startTime": "2025-11-15 18:00:00",
|
||||
"articleDesc": "",
|
||||
"createTime": "2025-11-14 21:10:52",
|
||||
"suggestCover": "",
|
||||
"top": 0
|
||||
}
|
||||
14
articles/3595.json
generated
Normal file
14
articles/3595.json
generated
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"articleContent": "<div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">Loading Data>>></div>\n<div data-zone-id=\"0\" data-line-index=\"1\" data-line=\"true\">✦Chisa✦</div>\n<div data-zone-id=\"0\" data-line-index=\"2\" data-line=\"true\">\"Just an ordinary student.\"</div>\n<div data-zone-id=\"0\" data-line-index=\"3\" data-line=\"true\">Calmly, she introduces herself, a faint iridescent shimmer flickering in her eyes. Again, the structures of the world reveal themselves in her vision. Narrowing her eyes, she singles out the very thread that tugs at life itself.</div>\n<div data-zone-id=\"0\" data-line-index=\"3\" data-line=\"true\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/tcz1fpjdqkq0ra8ntk-1763198623393.jpg\" width=\"800\" height=\"1422\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/hpr01unab7lqnskowi-1763198642805.jpg\" width=\"800\" height=\"1556\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/jpn5h8dpbq401v7eyh-1763198658324.gif\" width=\"800\" height=\"1455\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/y3dx66ba9y3f6vk5yk-1763198671685.gif\" width=\"800\" height=\"1357\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/bzxanra03of92wdjef-1763198685129.gif\" width=\"800\" height=\"1230\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/rfbhh1lqk2tm8e9qpt-1763198698636.gif\" width=\"800\" height=\"1775\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/m51y3ba8bpelsza8zt-1763198742175.gif\" width=\"800\" height=\"1081\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/bwss4p2fk24t05vpw7-1763198756676.gif\" width=\"800\" height=\"1258\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/bvkfihh6czehzhx87t-1763208460141.jpg\" data-media-source=\"production_G152_en\" data-desc=\"succ\"></div>\n</div>",
|
||||
"articleId": 3595,
|
||||
"articleTitle": "Profile Reveal | Eye of Unraveling — Chisa",
|
||||
"articleType": 58,
|
||||
"articleTypeName": "Notice",
|
||||
"endTime": "2099-01-01 00:00:00",
|
||||
"gameId": "G152-en",
|
||||
"startTime": "2025-11-16 11:05:00",
|
||||
"articleDesc": "",
|
||||
"createTime": "2025-11-15 17:26:41",
|
||||
"suggestCover": "",
|
||||
"top": 0
|
||||
}
|
||||
14
articles/3603.json
generated
Normal file
14
articles/3603.json
generated
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"articleContent": "<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">Event Preview | [Stranger Things in Honami] Combat Event, Coming Soon!</div>\n<div data-zone-id=\"0\" data-line-index=\"1\" data-line=\"true\"> </div>\n<div data-zone-id=\"0\" data-line-index=\"2\" data-line=\"true\">✦Duration✦</div>\n<div data-zone-id=\"0\" data-line-index=\"3\" data-line=\"true\">Version 2.8 update - 2025-12-24 11:59 (server time)</div>\n<div data-zone-id=\"0\" data-line-index=\"4\" data-line=\"true\"> </div>\n<div data-zone-id=\"0\" data-line-index=\"5\" data-line=\"true\">✦Rewards✦</div>\n<div data-zone-id=\"0\" data-line-index=\"6\" data-line=\"true\">Astrite x1200, Title: Honami Doom Walker, Avatar: Post-Doomsday Coffee, Phantom: The False Sovereign, Modifier, Premium Tuner, Premium Enclosure Tank, Shell Credit, and other Materials.</div>\n<div data-zone-id=\"0\" data-line-index=\"7\" data-line=\"true\"> </div>\n<div data-zone-id=\"0\" data-line-index=\"8\" data-line=\"true\">✦As a Permanent Event✦</div>\n<div data-zone-id=\"0\" data-line-index=\"9\" data-line=\"true\">This event offers two types of rewards: Limited-time Rewards and Standard Rewards. When the initial period ends, the event will continue as a Permanent Event. The Limited-time Rewards will no longer be available when the event becomes a Permanent Event. You can participate in the Permanent Event to win Standard Rewards.</div>\n<div data-zone-id=\"0\" data-line-index=\"9\" data-line=\"true\"> </div>\n<div data-zone-id=\"0\" data-line-index=\"9\" data-line=\"true\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763308800000/kocst41ot3jkzu7tsq-1763348669828.jpg\" width=\"800\" height=\"450\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763308800000/c2stvv7raa0p56dg21-1763348699248.jpg\" width=\"800\" height=\"2593\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763308800000/xcg1t72xos2hlhapkj-1763348717347.jpg\" width=\"800\" height=\"4000\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763308800000/p1ty9w5roazf7i2vpg-1763348733832.jpg\" width=\"800\" height=\"3198\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763308800000/oo1dbkz57j7a3tn7wo-1763348746651.jpg\" width=\"800\" height=\"3198\" data-media-source=\"production_G152_en\" data-desc=\"succ\"></div>",
|
||||
"articleId": 3603,
|
||||
"articleTitle": "Event Preview | [Stranger Things in Honami] Combat Event, Coming Soon!",
|
||||
"articleType": 58,
|
||||
"articleTypeName": "Notice",
|
||||
"endTime": "2099-01-01 00:00:00",
|
||||
"gameId": "G152-en",
|
||||
"startTime": "2025-11-17 18:00:00",
|
||||
"articleDesc": "",
|
||||
"createTime": "2025-11-17 11:06:15",
|
||||
"suggestCover": "",
|
||||
"top": 0
|
||||
}
|
||||
14
articles/3613.json
generated
Normal file
14
articles/3613.json
generated
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"articleContent": "<div>\n<div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">Wuthering Waves Update Content | Version 2.8 \"To the City Set in Amber\" Planned for Release on November 20th (UTC+8)</div>\n<div data-zone-id=\"0\" data-line-index=\"1\" data-line=\"true\">Here's the event calendar for Version 2.8. Check it out for a quick overview of the event schedule! Full details about the update content can be viewed on our official website—be sure to take a look!</div>\n<div data-zone-id=\"0\" data-line-index=\"3\" data-line=\"true\"> </div>\n<div data-zone-id=\"0\" data-line-index=\"4\" data-line=\"true\">#WutheringWaves<br><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763395200000/jdw0n19tqkiq3h7ztp-1763448460525.jpg\" width=\"800\" height=\"6535\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763395200000/46ywdxjpf60zbqsugc-1763448496990.jpg\" width=\"800\" height=\"10953\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763395200000/3yu1888i3fxnfdlfbc-1763448512501.jpg\" width=\"800\" height=\"6087\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763395200000/abckxxubxu4vxt4eg6-1763448526782.jpg\" width=\"800\" height=\"5077\" data-media-source=\"production_G152_en\" data-desc=\"succ\"></div>\n</div>\n</div>",
|
||||
"articleId": 3613,
|
||||
"articleTitle": "Wuthering Waves Update Content | Version 2.8 \"To the City Set in Amber\" Planned for Release on November 20th (UTC+8)",
|
||||
"articleType": 58,
|
||||
"articleTypeName": "Notice",
|
||||
"endTime": "2099-01-01 00:00:00",
|
||||
"gameId": "G152-en",
|
||||
"startTime": "2025-11-18 18:00:00",
|
||||
"articleDesc": "",
|
||||
"createTime": "2025-11-18 14:49:10",
|
||||
"suggestCover": "",
|
||||
"top": 0
|
||||
}
|
||||
14
articles/3616.json
generated
Normal file
14
articles/3616.json
generated
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"articleContent": "<div><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/alol7tdeppuhk6xejy-1763520543500.jpg\" width=\"800\" height=\"450\" data-media-source=\"production_G152_en\" data-desc=\"succ\">\n<p><span style=\"font-size: 14pt;\">During the event, 5-Star Resonator: Chisa, 4-Star Resonators: Taoqi, Yuanwu and Aalto receive boosted drop rates!</span><br><br><span style=\"font-size: 14pt;\">✦Duration✦</span><br><span style=\"font-size: 14pt;\">Version 2.8 update - 2025-12-11 09:59 (server time)</span><br><br><span style=\"font-size: 14pt;\">✦Eligibility✦</span><br><span style=\"font-size: 14pt;\">Reach Union Level 8 or complete the combat trial in \"\"First Resonance\"\" and activate the Convene function.</span><br><br><span style=\"font-size: 14pt;\">✦Convene Rules✦</span><br><span style=\"font-size: 14pt;\">- [Horizon of Dawnbreak] is a Featured Resonator Convene event banner.</span><br><span style=\"font-size: 14pt;\">- Use Radiant Tide to convene. You are guaranteed at least one 4-Star or higher rarity Resonator or Weapon every 10 attempts.</span><br><span style=\"font-size: 14pt;\">- The guarantee count is shared among all Featured Resonator Convene events and is carried over until a 5-Star Resonator is obtained.</span><br><span style=\"font-size: 14pt;\">- Featured Resonator Chisa is exclusive to the [Horizon of Dawnbreak] Featured Resonator Convene and will not be available by other means once the event ends.</span><br><span style=\"font-size: 14pt;\">- Featured Resonator Chisa's Waveband will be simultaneously made available in the Afterglow Coral Store with a limit of 2 purchases, and it will be removed once the Convene event ends.</span><br><span style=\"font-size: 14pt;\">- During the event, all the Resonators who receive boosted drop rates will become available in Ascendant Aces as Trial Resonators. Complete their Ascendant Aces challenges to obtain rewards.</span><br><br><span style=\"font-size: 14pt;\">※For more details, please refer to the in-game Convene page.</span></p>\n</div>",
|
||||
"articleId": 3616,
|
||||
"articleTitle": "[Horizon of Dawnbreak] Featured Resonator Convene: Boosted Drop Rate for Chisa",
|
||||
"articleType": 58,
|
||||
"articleTypeName": "Notice",
|
||||
"endTime": "2099-01-01 00:00:00",
|
||||
"gameId": "G152-en",
|
||||
"startTime": "2025-11-19 11:00:00",
|
||||
"articleDesc": "",
|
||||
"createTime": "2025-11-19 10:49:21",
|
||||
"suggestCover": "",
|
||||
"top": 0
|
||||
}
|
||||
14
articles/3623.json
generated
Normal file
14
articles/3623.json
generated
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"articleContent": "<div><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/jfm0n54ovtdyqru36k-1763521065372.jpg\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\">\n<p><span style=\"font-size: 14pt;\">During the event, 5-Star Weapon: Kumokiri, 4-Star Weapons: Commando of Conviction, Fusion Accretion, and Helios Cleaver receive boosted drop rates!</span><br><br><span style=\"font-size: 14pt;\">✦Duration✦</span><br><span style=\"font-size: 14pt;\">Version 2.8 update - 2025-12-11 09:59 (server time)</span><br><br><span style=\"font-size: 14pt;\">✦Eligibility✦</span><br><span style=\"font-size: 14pt;\">Reach Union Level 8 or complete the combat trial in \"\"First Resonance\"\" and activate the Convene function.</span><br><br><span style=\"font-size: 14pt;\">✦Convene Rules✦</span><br><span style=\"font-size: 14pt;\">- [Absolute Pulsation] is a Featured Weapon Convene event banner.</span><br><span style=\"font-size: 14pt;\">- Use Forging Tide to convene. You are guaranteed at least one 4-Star or higher rarity Resonator or Weapon every 10 attempts.</span><br><span style=\"font-size: 14pt;\">- The guarantee count is shared among all Featured Weapon Convene events and is carried over until a 5-Star Weapon is obtained.</span><br><span style=\"font-size: 14pt;\">- The 5-Star Weapon you Convene is guaranteed to be Kumokiri.</span><br><span style=\"font-size: 14pt;\">- Featured Weapon Kumokiri is exclusive to the Featured Weapon Convene and will not be available by other means once the event ends.</span><br><br><span style=\"font-size: 14pt;\">※For more details, please refer to the in-game Convene page.</span></p>\n</div>",
|
||||
"articleId": 3623,
|
||||
"articleTitle": "[Absolute Pulsation] Featured Weapon Convene: Boosted Drop Rate for Kumokiri",
|
||||
"articleType": 58,
|
||||
"articleTypeName": "Notice",
|
||||
"endTime": "2099-01-01 00:00:00",
|
||||
"gameId": "G152-en",
|
||||
"startTime": "2025-11-19 11:05:00",
|
||||
"articleDesc": "",
|
||||
"createTime": "2025-11-19 10:58:01",
|
||||
"suggestCover": "",
|
||||
"top": 0
|
||||
}
|
||||
15
articles/3631.json
generated
Normal file
15
articles/3631.json
generated
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"articleContent": "<div><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/twbu78z48nmmtaaftq-1763522034373.jpg\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\">\n<p><span style=\"font-size: 14pt;\">During the event, 5-Star Resonator: Phoebe, 4-Star Resonators: Taoqi, Yuanwu and Aalto receive boosted drop rates!</span><br><br><span style=\"font-size: 14pt;\">✦Duration✦</span><br><span style=\"font-size: 14pt;\">Version 2.8 update - 2025-12-11 09:59 (server time)</span><br><br><span style=\"font-size: 14pt;\">✦Eligibility✦</span><br><span style=\"font-size: 14pt;\">Reach Union Level 8 or complete the combat trial in \"\"First Resonance\"\" and activate the Convene function.</span><br><br><span style=\"font-size: 14pt;\">✦Convene Rules✦</span><br><span style=\"font-size: 14pt;\">- [With Hushed Whispers] is a Featured Resonator Convene event banner</span><br><span style=\"font-size: 14pt;\">- Use Radiant Tide to convene. You are guaranteed at least one 4-Star or higher rarity Resonator or Weapon every 10 attempts.</span><br><span style=\"font-size: 14pt;\">- The guarantee count is shared among all Featured Resonator Convene events and is carried over until a 5-Star Resonator is obtained.</span><br><span style=\"font-size: 14pt;\">- Featured Resonator Phoebe is exclusive to the [With Hushed Whispers] Featured Resonator Convene and will not be available by other means once the event ends.</span><br><span style=\"font-size: 14pt;\">- Featured Resonator Phoebe's Waveband will be simultaneously made available in the Afterglow Coral Store with a limit of 2 purchases, and it will be removed once the Convene event ends.</span><br><span style=\"font-size: 14pt;\">- During the event, all the Resonators who receive boosted drop rates will become available in Ascendant Aces as Trial Resonators. Complete their Ascendant Aces challenges to obtain rewards.</span><br><br><span style=\"font-size: 14pt;\">※For more details, please refer to the in-game Convene page.</span></p>\n</div>",
|
||||
"articleCover": "",
|
||||
"articleId": 3631,
|
||||
"articleTitle": "[With Hushed Whispers] Featured Resonator Convene: Boosted Drop Rate for Phoebe",
|
||||
"articleType": 58,
|
||||
"articleTypeName": "Notice",
|
||||
"contentCover": "",
|
||||
"gameId": "G152-en",
|
||||
"startTime": "2025-11-19 11:10:00",
|
||||
"articleDesc": "",
|
||||
"createTime": "2025-11-19 11:14:15",
|
||||
"suggestCover": "",
|
||||
"top": 0
|
||||
}
|
||||
14
articles/3637.json
generated
Normal file
14
articles/3637.json
generated
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"articleContent": "<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">Resonator Review | Graceful Luminescence—Phoebe</div>\n<div data-zone-id=\"0\" data-line-index=\"1\" data-line=\"true\"> </div>\n<div data-zone-id=\"0\" data-line-index=\"2\" data-line=\"true\">Phoebe, Acolyte of the Order of the Deep, is a young woman of quiet devotion. With a kind heart, she fulfills her duties with unwavering diligence. Her prayers, like the light she carries, offer comfort and peace to all.</div>\n<div data-zone-id=\"0\" data-line-index=\"3\" data-line=\"true\"> </div>\n<div data-zone-id=\"0\" data-line-index=\"4\" data-line=\"true\">#WutheringWaves #Phoebe<br><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/9edo53agt26cns0661-1763522290371.jpg\" width=\"800\" height=\"6020\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/tynu2pe3b4mwujro7t-1763522307473.jpg\" width=\"800\" height=\"9397\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><br><br></div>",
|
||||
"articleId": 3637,
|
||||
"articleTitle": "Resonator Review | Graceful Luminescence—Phoebe",
|
||||
"articleType": 58,
|
||||
"articleTypeName": "Notice",
|
||||
"endTime": "2099-01-01 00:00:00",
|
||||
"gameId": "G152-en",
|
||||
"startTime": "2025-11-19 19:00:00",
|
||||
"articleDesc": "",
|
||||
"createTime": "2025-11-19 11:18:53",
|
||||
"suggestCover": "",
|
||||
"top": 0
|
||||
}
|
||||
15
articles/3639.json
generated
Normal file
15
articles/3639.json
generated
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"articleContent": "<div><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/zxey5yua1ksodf8nqs-1763522369708.jpg\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\">\n<p><span style=\"font-size: 14pt;\">During the event, 5-Star Weapon: Luminous Hymn, 4-Star Weapons: Commando of Conviction, Fusion Accretion, and Helios Cleaver receive boosted drop rates!</span><br><br><span style=\"font-size: 14pt;\">✦Duration✦</span><br><span style=\"font-size: 14pt;\">Version 2.8 update - 2025-12-11 09:59 (server time)</span><br><br><span style=\"font-size: 14pt;\">✦Eligibility✦</span><br><span style=\"font-size: 14pt;\">Reach Union Level 8 or complete the combat trial in \"\"First Resonance\"\" and activate the Convene function.</span><br><br><span style=\"font-size: 14pt;\">✦Convene Rules✦</span><br><span style=\"font-size: 14pt;\">- [Absolute Pulsation] is a Featured Weapon Convene event banner.</span><br><span style=\"font-size: 14pt;\">- Use Forging Tide to convene. You are guaranteed at least one 4-Star or higher rarity Resonator or Weapon every 10 attempts.</span><br><span style=\"font-size: 14pt;\">- The guarantee count is shared among all Featured Weapon Convene events and is carried over until a 5-Star Weapon is obtained.</span><br><span style=\"font-size: 14pt;\">- The 5-Star Weapon you Convene is guaranteed to be Luminous Hymn.</span><br><span style=\"font-size: 14pt;\">- Featured Weapon Luminous Hymn is exclusive to the Featured Weapon Convene and will not be available by other means once the event ends.</span><br><br><span style=\"font-size: 14pt;\">※For more details, please refer to the in-game Convene page.</span></p>\n</div>",
|
||||
"articleCover": "",
|
||||
"articleId": 3639,
|
||||
"articleTitle": "[Absolute Pulsation] Featured Weapon Convene: Boosted Drop Rate for Luminous Hymn",
|
||||
"articleType": 58,
|
||||
"articleTypeName": "Notice",
|
||||
"contentCover": "",
|
||||
"gameId": "G152-en",
|
||||
"startTime": "2025-11-19 11:15:00",
|
||||
"articleDesc": "",
|
||||
"createTime": "2025-11-19 11:19:45",
|
||||
"suggestCover": "",
|
||||
"top": 0
|
||||
}
|
||||
14
articles/3648.json
generated
Normal file
14
articles/3648.json
generated
Normal file
File diff suppressed because one or more lines are too long
14
articles/3657.json
generated
Normal file
14
articles/3657.json
generated
Normal file
File diff suppressed because one or more lines are too long
14
articles/3664.json
generated
Normal file
14
articles/3664.json
generated
Normal file
File diff suppressed because one or more lines are too long
14
articles/3665.json
generated
Normal file
14
articles/3665.json
generated
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"articleContent": "<div><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763568000000/cxsrylia22we4cxm7r-1763609239807.jpg\" width=\"800\" height=\"450\" data-media-source=\"production_G152_en\" data-desc=\"succ\">\n<div data-page-id=\"VyQ4df97WopF9ax2dSxcEWI7n8g\" data-lark-html-role=\"root\" data-docx-has-block-data=\"false\">\n<div>Dear Rovers,</div>\n<div> </div>\n<div>The Wuthering Waves Battle Rush is now live! Record and share your most exciting battle moments with the hashtags #WutheringWaves and #WuwaBattle on X (Twitter)/YouTube Shorts/TikTok to compete for a reward of Astrite x2,000 and a chance to get featured on our social media with direct credits! Other than these rewards, 10 extra winners will be selected to receive a $50 Amazon Gift Card.</div>\n<div> </div>\n<div>Showcase your outstanding battle tactics in a condensed clip and share them with us!</div>\n<div> </div>\n<div> </div>\n<div><strong>Content Requirement</strong></div>\n<div> </div>\n<div>Create your own combat video featuring Wuthering Waves.</div>\n<div> </div>\n<div>We require no limits to the characters, level, or scenes. All entries that feature your combat in Wuthering Waves are qualified to join the event and compete for rewards!</div>\n<div> </div>\n<div> </div>\n<div><strong>How to Submit</strong></div>\n<div> </div>\n<div>Post your work on X (Twitter)/YouTube Shorts/TikTok with both hashtags #WutheringWaves and #WuwaBattle included publicly.</div>\n<div> </div>\n<div> </div>\n<div><strong>Submission Period</strong></div>\n<div> </div>\n<div>2025/11/20 - 2025/12/18 (PT)</div>\n<div> </div>\n<div> </div>\n<div><strong>Judging Criteria</strong></div>\n<div> </div>\n<div>All eligible works will undergo evaluation based on their adherence to the theme, degree of completion, reception among players, and other relevant factors.</div>\n<div> </div>\n<div> </div>\n<div><strong>Notes</strong></div>\n<div> </div>\n<div>To qualify for participation, you should include both hashtags #WutheringWaves and #WuwaBattle in your post.</div>\n<div> </div>\n<div>Deleted posts will not be qualified for entitlement of rewards.</div>\n<div> </div>\n<div>You can submit multiple entries. However, the same work published on different platforms will not count towards the rewards.</div>\n<div> </div>\n<div>Entries listed below may be excluded from the judging process:</div>\n<div> </div>\n<div>*Works not created in accordance with Wuthering Waves</div>\n<div> </div>\n<div>*Works found to contain plagiarism or infringement of intellectual property rights</div>\n<div> </div>\n<div>*Works submitted outside the event period</div>\n<div> </div>\n<div>*Works created with the assistance of AI technology</div>\n<div> </div>\n<div>*Works featuring extremely aggressive content, including but not limited to themes of pornography, violence, politics, or racism</div>\n<div> </div>\n<div>*Works that have already been used for commercial purposes</div>\n<div> </div>\n<div>*Works deemed inappropriate by the judges</div>\n<div> </div>\n<div>Failure to reply to the official staff within 7 days from the date of notification will be considered a waiver of entitlement to the rewards.</div>\n<div> </div>\n<div>This event is open to submissions from all languages, as creators proficient in any language are eligible to compete for rewards. Entries differing only in language will be treated as equivalent works.</div>\n</div>\n</div>",
|
||||
"articleId": 3665,
|
||||
"articleTitle": "V2.8 Wuthering Waves Battle Rush",
|
||||
"articleType": 58,
|
||||
"articleTypeName": "Notice",
|
||||
"endTime": "2099-01-01 00:00:00",
|
||||
"gameId": "G152-en",
|
||||
"startTime": "2025-11-20 18:00:00",
|
||||
"articleDesc": "",
|
||||
"createTime": "2025-11-20 11:25:03",
|
||||
"suggestCover": "",
|
||||
"top": 0
|
||||
}
|
||||
15
articles/3672.json
generated
Normal file
15
articles/3672.json
generated
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"articleContent": "<div><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1764086400000/ldt3k8vm9hq09qzl7v-1764152839874.jpg\" width=\"800\" height=\"450\" data-media-source=\"production_G152_en\" data-desc=\"succ\">\n<p><span style=\"font-size: 14pt;\">As the Tactical Simulacra project advances, the Huaxu Academy has successfully achieved the measurement of Tunability, a property through which countless Reverberations converge into Tacet Discords. Disrupting their Tunability would mean a lethal blow that paralyzes them...</span><br><br><span style=\"font-size: 14pt;\">✦Duration✦</span><br><span style=\"font-size: 14pt;\">2025-11-27 04:00 - 2025-12-15 03:59 (server time)</span><br><br><span style=\"font-size: 14pt;\">✦Rewards✦</span><br><span style=\"font-size: 14pt;\">Astrite x600, Premium Resonance Potion x16, Premium Energy Core x16, Premium Sealed Tube x16, Premium Tuner x100, Shell Credit x608888, and other Materials.</span><br><br><span style=\"font-size: 14pt;\">✦Eligibility✦</span><br><span style=\"font-size: 14pt;\">Reach Union Level 14.</span><br><br><span style=\"font-size: 14pt;\">✦Event Rules✦</span><br><span style=\"font-size: 14pt;\">- In Tactical Simulacra: Off Tune, challenge waves of powerful enemies using special buffs across different simulation domains.</span><br><span style=\"font-size: 14pt;\">- Tactical Simulacra: Off Tune has a total of 6 stages. Reach 1000 points in a stage to unlock the next one.</span><br><span style=\"font-size: 14pt;\">- As you complete more challenges, new special buffs will be available to you in the subsequent challenges.</span><br><span style=\"font-size: 14pt;\">- The results of each challenge will be tallied based on Monster Points, Time Points, and Technical Points. Monster Points are earned by defeating enemies in challenges; Time Points are earned based on the time remaining at challenge completion and a conversation factor that increases with the number of enemies that are defeated; Technical Points are earned by triggering Counterattacks, successful Dodges, and Dodge Counters.</span><br><br><span style=\"font-size: 14pt;\">※In Tactical Simulacra: Off Tune, some of your attacks build up certain enemies' Off-Tune Level. Once their Off-Tune Level reaches the limit, they enter the Mistune state. During this state, you can unleash a powerful Tune Break to shatter their defenses. Landing a Tune Break resets the enemies' Off-Tune Level and inflicts Tune Disruption, leaving them vulnerable to follow-up attacks.</span></p>\n</div>",
|
||||
"articleCover": "",
|
||||
"articleId": 3672,
|
||||
"articleTitle": "[Tactical Simulacra: Off Tune] Featured Combat Event",
|
||||
"articleType": 58,
|
||||
"articleTypeName": "Notice",
|
||||
"contentCover": "",
|
||||
"gameId": "G152-en",
|
||||
"startTime": "2025-11-26 10:00:00",
|
||||
"articleDesc": "",
|
||||
"createTime": "2025-11-26 18:27:39",
|
||||
"suggestCover": "",
|
||||
"top": 0
|
||||
}
|
||||
1382
articles_all.xml
generated
1382
articles_all.xml
generated
File diff suppressed because it is too large
Load Diff
1866
articles_latest.xml
generated
1866
articles_latest.xml
generated
File diff suppressed because it is too large
Load Diff
6
html/3538.html
generated
Normal file
6
html/3538.html
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<p>
|
||||
Qiuyuan once investigated a medicinal-herb corruption case at Mingting's order during his service as the senior agent of the Internal Security Agency.
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1762272000000/mh9nwk3fq095xijyrw-1762311677850.jpg"/>
|
||||
</p>
|
||||
57
html/3541.html
generated
Normal file
57
html/3541.html
generated
Normal file
@@ -0,0 +1,57 @@
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1762272000000/vcqovqgon5keki591t-1762312534821.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
The Lollo Campaign is facing an unexpected crisis! To save Maji's old reliable delivery legs, and to keep those convenient services running, help him complete his new program, Lollo Ice Drinks!
|
||||
</p>
|
||||
<p>
|
||||
Complete the campaigns to claim your Lollo Stamps—a gift of gratitude from Lollo Logistics. Lollo Stamps can be exchanged for Lollo Helper special deliveries.
|
||||
</p>
|
||||
<h1>
|
||||
Duration
|
||||
</h1>
|
||||
<p>
|
||||
2025-11-06 04:00 - 2025-11-19 03:59 (server time)
|
||||
</p>
|
||||
<h1>
|
||||
Rewards
|
||||
</h1>
|
||||
<p>
|
||||
Astrite x400, Lustrous Tide x5, Premium Enclosure Tank x5, Forgery Premium Supply x10, Crystal Solvent x5, Shell Credit x340000, and other Materials.
|
||||
</p>
|
||||
<h1>
|
||||
Eligibility
|
||||
</h1>
|
||||
<p>
|
||||
Reach Union Level 14 and complete Main Quest Chapter II Act V ""Shadow of Glory.""
|
||||
</p>
|
||||
<h1>
|
||||
Event Details
|
||||
</h1>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
During the event, complete Lollo Campaigns to obtain Lollo Stamps.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Each Lollo Stamp can be exchanged for a Lollo Helper special delivery.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
There are 3 Inventories for the Lollo Helper special deliveries. Once you collect all deliveries in an Inventory, the next Inventory will be unlocked.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
If you win the Lollo Express special delivery service, you can claim all deliveries in the current Inventory.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
<em>
|
||||
After the event ends, any remaining Lollo Helper special delivery will become unavailable, and any unused Lollo Stamp will be cleared. Please take note of the event period and participate in the event accordingly.
|
||||
</em>
|
||||
</p>
|
||||
4
html/3547.html
generated
Normal file
4
html/3547.html
generated
Normal file
@@ -0,0 +1,4 @@
|
||||
<p>
|
||||
Qiuyuan once investigated a medicinal-herb corruption case at Mingting's order during his service as the senior agent of the Internal Security Agency. But there's more to it than meets the eye on his trip to capture the fugitive...
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1762272000000/e6d739gbrr8jsp3knj-1762345950424.jpg"/>
|
||||
</p>
|
||||
9
html/3549.html
generated
Normal file
9
html/3549.html
generated
Normal file
@@ -0,0 +1,9 @@
|
||||
<p>
|
||||
Qiuyuan once investigated a medicinal-herb corruption case at Mingting's order during his service as the senior agent of the Internal Security Agency. But there's more to it than meets the eye on his trip to capture the fugitive...
|
||||
</p>
|
||||
<p>
|
||||
Beneath the surface of an odd case, hidden motives lurked. What appeared to be a routine order quietly signaled trouble was on the horizon.
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1762444800000/fgbqbrqeirp5emnbg4-1762482878492.jpg"/>
|
||||
</p>
|
||||
41
html/3554.html
generated
Normal file
41
html/3554.html
generated
Normal file
@@ -0,0 +1,41 @@
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1762704000000/7hqt0oebqm8w5fr18d-1762764686796.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
The Tacet Fields are experiencing a surge in energy due to the Waveworn Phenomenon.
|
||||
</p>
|
||||
<p>
|
||||
Use the Waveplates to maximize your rewards from the Tacetite Blooms!
|
||||
</p>
|
||||
<h1>
|
||||
Duration
|
||||
</h1>
|
||||
<p>
|
||||
2025-11-12 04:00 - 2025-11-19 03:59 (server time)
|
||||
</p>
|
||||
<h1>
|
||||
Eligibility
|
||||
</h1>
|
||||
<p>
|
||||
Reach Union Level 19.
|
||||
</p>
|
||||
<h1>
|
||||
Details
|
||||
</h1>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
Complete Tacet Suppression challenges during the event and spend Waveplates for double rewards.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
During [Chord Cleansing], you can claim double rewards 3 times a day, and the remaining double rewards claims can be viewed on the [Chord Cleansing] event page.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
During [Chord Cleansing], double rewards claims refresh daily at 04:00 (server time).
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
8
html/3572.html
generated
Normal file
8
html/3572.html
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
<p>
|
||||
The Preview Special Broadcast has concluded. Take a look back at all these exciting updates:
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/80lk8p3zq0f06k7meo-1763102612556.jpg"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/m6odgabp8gfpmbc937-1763102627210.jpg"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/0gy70in8ksod74rbj9-1763102656359.jpg"/>
|
||||
</p>
|
||||
425
html/3583.html
generated
Normal file
425
html/3583.html
generated
Normal file
@@ -0,0 +1,425 @@
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/761szl5r2xcbwxzpbi-1763115743180.png"/>
|
||||
</p>
|
||||
<p>
|
||||
Dear Rover,
|
||||
</p>
|
||||
<p>
|
||||
To bring you exciting new content and a better gaming experience, we will soon be conducting the update maintenance for Version 2.8: To the City Set in Amber.
|
||||
</p>
|
||||
<p>
|
||||
During the maintenance, you will be unable to log in to the game, so please plan your time accordingly. Additionally, due to the large size of the update, we recommend updating the game while connected to a Wi-Fi network. We apologize for any inconvenience this may cause.
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
[Maintenance Time & Compensation Details]
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
✦Maintenance Time: 2025-11-20 04:00 - 2025-11-20 11:00 (UTC+8)
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
✦Maintenance Compensation: Astrite x300, Crystal Solvent x2
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
✦Compensation Eligibility: Create a character and unlock the Mail feature before 2025-11-20 04:00 (UTC+8). The compensation will remain claimable until the next version update.
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<em>
|
||||
In the event that the maintenance is extended, the dev team will issue a follow-up notice and adjust the compensation accordingly.
|
||||
</em>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
[How to Update]
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
Once the maintenance for the version update begins, you can follow the following instructions to update your client.
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
✦PC: Close the game, restart the launcher, and then click on "Update."
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
✦Android: Launch the game and follow the instructions in the update pop-up window to complete the update.
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
✦iOS: Download/update the game in the App Store.
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
✦Mac: Download/update the game in the App Store.
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
✦PS5™: Open the home screen > Select Wuthering Waves > Press the OPTIONS button to Check for Update
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
[Pre-download]
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
✦Pre-download Start Time: 2025-11-18 10:00 (UTC+8)
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
[Pre-download Storage Requirements]
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
✦PC: 20 GB. To ensure smoother subsequent processes, such as decompressing, it is recommended that you have at least 30 GB of spare storage space on your PC.
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<em>
|
||||
We will be updating some of the existing game resources in order to optimize the overall performance of Version 2.8. Consequently, the pre-download feature will only available on PC for Version 2.8. We sincerely apologize for any inconvenience you may experience. Thank you for your support for Wuthering Waves.
|
||||
</em>
|
||||
</p>
|
||||
<p>
|
||||
<em>
|
||||
Please note that pre-download may not be possible if your device does not have enough spare storage space.
|
||||
</em>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
[How to Pre-download]
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
✦PC: When pre-download for the latest version becomes available, "New Version Pre-download" appears below the "Start" button on the launcher interface. Select this option to pre-download the resources.
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<em>
|
||||
You can continue playing the game while the pre-downloading process is ongoing on the PC launcher. The process can be paused at any time. Whether it is complete or not, the update maintenance will speed up to a certain degree when initiated.
|
||||
</em>
|
||||
</p>
|
||||
<p>
|
||||
<em>
|
||||
Please ensure that you have a stable network connection during the pre-downloading process.
|
||||
</em>
|
||||
</p>
|
||||
<hr/>
|
||||
<p>
|
||||
<strong>
|
||||
[Version 2.8 Preview]
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
[New Resonators]
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
5-Star Resonator: Chisa (Havoc/Broadblade)
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
※Obtainable through the [Horizon of Dawnbreak] Featured Resonator Convene.
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
4-Star Resonator: Buling (Electro/Rectifier)
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
※Obtainable through the [Requiem Without End] and [Neptune's Lullaby] Featured Resonator Convene banners. After the event ends, starting from the next version, 4-Star Resonator Buling will be permanently available in Featured Resonator/Weapon Convene and Standard Resonator/Weapon Convene.
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
※4-Star Resonator Buling will be simultaneously made available in the Afterglow Coral Store and will be removed at the end of the next version.
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
[New Weapon]
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
5-Star Weapon: Kumokiri (Broadblade)
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
※Obtainable through the [Absolute Pulsation - Kumokiri] Featured Weapon Convene.
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
[New Location]
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
Chronorift Metropolis
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
※Reach the location during Main Quest Chapter II Act XII "Stagnant Dawn on Wastelands."
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
[New Echoes]
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
Nightmare: Roseshroom, Nightmare: Tick Tack, Nightmare: Dwarf Cassowary
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
New Sonata Effect: Thread of Severed Fate (3pcs Set)
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
New Nightmare Purification challenge: Honami City Nightmare Nest
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
※In Nightmare Purification, a set number of Nightmare Tacet Discords are available daily. Defeat them to claim the corresponding Echoes without spending Waveplates.
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
[New Stories]
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
[Main Quest] Chapter II Act XII "Stagnant Dawn on Wastelands"
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
[Main Quest] Chapter II Segue "Flowing Starlight in the Iris"
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
[New Features]
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
Added the "one-click absorption of all absorbable Echoes" feature
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
Added the "Auto Supplement" feature to the Upgrade function
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
Added the "Mute when Game is in the Background" option on PC
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
[Performance Optimizations]
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
- Optimized the performance of Ray Tracing
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
- Optimized the performance of visual assets
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
[Other New Content]
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
New "Tactical Hologram: Phantom Pain" challenge: The False Sovereign
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
New Outfit: Downtown Repose (Zani - Deluxe Outfit)
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
New Phantom Echo: Phantom - The False Sovereign
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
New Avatar: Post-Doomsday Coffee
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
New Title: Honami Doom Walker
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
※Partipate in the combat event "Stranger Things in Honami" to win Phantom: The False Sovereign (Phantom Echo), Post-Doomsday Coffee (Avatar), Honami Doom Walker (Title).
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
[Special Events]
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
[Stranger Things in Honami] Combat Event
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
[Whispers of the Waves] Photo Collection Event
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
[Tactical Simulacra: Off Tune] Featured Combat Event
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
[Lollo Campaign: Rising Anew] Featured Commission Event
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
[Search for It! Bits of Lahai-Roi] Showcase Event
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
[Gifts of Amber] 7-Day Login Event
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
※For more details on the new content, optimizations, and bug fixes coming to the game in Version 2.8, please stay tuned for the upcoming release notes.
|
||||
</strong>
|
||||
</p>
|
||||
<hr/>
|
||||
<h1>
|
||||
Device Requirements
|
||||
</h1>
|
||||
<p>
|
||||
To ensure a smooth experience, please refer to the following requirements:
|
||||
</p>
|
||||
<ol>
|
||||
<li>
|
||||
Minimum
|
||||
</li>
|
||||
</ol>
|
||||
<p>
|
||||
Android: [System] Android 7.0 or later; [Processor] Snapdragon 835, MediaTek G71/72 or processors of better/equivalent performance; [RAM] 4 GB or more
|
||||
</p>
|
||||
<p>
|
||||
iOS: [System] iOS 14 or later; [Model] iPhone 11 or newer, iPad with A13 Bionic or processors of better/equivalent performance; [RAM] 4 GB or more
|
||||
</p>
|
||||
<p>
|
||||
Mac: [System] macOS 12.0 or later; [Model] m1 or newer; [RAM] 16 GB or more
|
||||
</p>
|
||||
<p>
|
||||
PC: [System] Windows 10 64-bit; [CPU] Intel I5 (9th Gen)/Ryzen 2700; [GPU] Geforce 1060/RX570/Intel ARC A380, [RAM] 16 GB or more
|
||||
</p>
|
||||
<ol start="2">
|
||||
<li>
|
||||
Recommended
|
||||
</li>
|
||||
</ol>
|
||||
<p>
|
||||
Android: [System] Android 7.0 or later; [Processor] Snapdragon 8 Gen1+/Gen2/Gen3 or MediaTek processors of better/equivalent performance; [RAM] 6 GB or more
|
||||
</p>
|
||||
<p>
|
||||
iOS: [System] iOS 15 or later; [Model] iPhone 13 or newer, iPad with A15 Bionic or processors of better/equivalent performance; [RAM] 6 GB or more
|
||||
</p>
|
||||
<p>
|
||||
Mac: [System] macOS 15.0 or later; [Model] m3 or newer; [RAM] 16 GB or more
|
||||
</p>
|
||||
<p>
|
||||
PC: [System] Windows 10 64-bit; [CPU] Intel I7 (9th Gen)/Ryzen 3700, [GPU] Geforce 2060/RX5700XT/Intel ARC A750; [RAM] 16 GB or more
|
||||
</p>
|
||||
<ol start="3">
|
||||
<li>
|
||||
Required Storage Space
|
||||
</li>
|
||||
</ol>
|
||||
<p>
|
||||
Android/iOS: 35 GB
|
||||
</p>
|
||||
<p>
|
||||
Mac: 85 GB
|
||||
</p>
|
||||
<p>
|
||||
PC: 85 GB; it's recommended to install the game on an SSD.
|
||||
</p>
|
||||
<p>
|
||||
PS5™: Please make sure your device has sufficient available storage to complete the update successfully.
|
||||
</p>
|
||||
<ol start="4">
|
||||
<li>
|
||||
Controller Support
|
||||
</li>
|
||||
</ol>
|
||||
<p>
|
||||
Wuthering Waves currently supports the following controllers on Mobile.
|
||||
</p>
|
||||
<p>
|
||||
Wireless Controllers: Xbox series, Xbox Elite series, DualShock®4, DualSense®, DualSense Edge™
|
||||
</p>
|
||||
<p>
|
||||
Wuthering Waves currently supports the following controllers on Mac.
|
||||
</p>
|
||||
<p>
|
||||
Wired/Wireless Controllers: Xbox series, Xbox Elite series, DualShock®4, DualSense®, DualSense Edge™
|
||||
</p>
|
||||
<p>
|
||||
Wuthering Waves currently supports the following controllers on PC.
|
||||
</p>
|
||||
<p>
|
||||
Wired/Wireless Controllers: Xbox series, Xbox Elite series, DualSense®、DualSense Edge™
|
||||
</p>
|
||||
<p>
|
||||
Wired Controllers: DualShock®4
|
||||
</p>
|
||||
<p>
|
||||
<em>
|
||||
When you connect any other controller that supports multiple input modes to a PC, it is recommended that you set the controller to XInput mode for the best experience.
|
||||
</em>
|
||||
</p>
|
||||
29
html/3588.html
generated
Normal file
29
html/3588.html
generated
Normal file
@@ -0,0 +1,29 @@
|
||||
<p>
|
||||
"She leans casually against the railing, her sweater soft against the light, appearing equally elegant as she is relaxed. Changing up the style every now and then isn't so bad.
|
||||
</p>
|
||||
<p>
|
||||
Turning slightly, Zani looks down at the city stretching beneath her. The afternoon sunlight spills over the buildings, their outlines shimmering in the glow. She gazes quietly, letting the city's clamor become the backdrop to this moment of ease."
|
||||
</p>
|
||||
<p>
|
||||
Zani's Deluxe Outfit "Downtown Repose" will become available once Version 2.8 goes live. Get a sneak peek now!
|
||||
</p>
|
||||
<h1>
|
||||
How to Obtain
|
||||
</h1>
|
||||
<p>
|
||||
Zani's Deluxe Outfit "Downtown Repose" will be made permanently available in the Store once Version 2.8 goes live.
|
||||
</p>
|
||||
<p>
|
||||
Purchase the Outfit during Version 2.8 at a discount, for 1980 Lunites only. After Version 2.8 ends, the Outfit will cost 2480 Lunites.
|
||||
</p>
|
||||
<p>
|
||||
From the time Version 2.8 goes live until 2025-12-24 11:59 (server time), there will be a trial event where you can try out Downtown Repose. Complete the trial event to claim rewards.
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/wq3ziy2rccqu97o1if-1763125379579.jpg"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/fwcbp3rmid4meihbhv-1763125399619.jpg"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/2de1n4u4vysp2so5r9-1763125636047.gif"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/3m6k2b33r2f1nkwbhm-1763125656263.gif"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/qrxyfz8s2ocbx9cs9h-1763125699983.gif"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/if07fhjaf7w30ladck-1763125716913.gif"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/zo43n9evpdy3uo4kol-1763125732828.gif"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/zzy2qnd222ubs9m1ll-1763125745756.jpg"/>
|
||||
</p>
|
||||
14
html/3592.html
generated
Normal file
14
html/3592.html
generated
Normal file
@@ -0,0 +1,14 @@
|
||||
<p>
|
||||
"Kuchiba Chisa. Tactical Development Program, Department of Engineering, Startorch Academy. Forte Specialization: structural dissection... Apologies, this might not be the time for formalities."—Chisa
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/8mo5g0ez8yh4tqdh2b-1763126375972.jpg"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/7wl7dhwcf6rnnb75aj-1763126391523.jpg"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/mvost8tdegosefrf15-1763126414477.jpg"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/nzu8onk6t8fjbcad4z-1763126466514.jpg"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/0dels41peppqosldca-1763126486040.gif"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/k844e8vq4umkf12pxo-1763126608314.gif"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/l5bqkqgkgvtzt12419-1763126625486.gif"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/8xwma7cxh5kmtm38g2-1763126682626.gif"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/h0smpxd26tov8ip4ix-1763126696478.jpg"/>
|
||||
</p>
|
||||
23
html/3595.html
generated
Normal file
23
html/3595.html
generated
Normal file
@@ -0,0 +1,23 @@
|
||||
<p>
|
||||
Loading Data>>>
|
||||
</p>
|
||||
<h1>
|
||||
Chisa
|
||||
</h1>
|
||||
<p>
|
||||
"Just an ordinary student."
|
||||
</p>
|
||||
<p>
|
||||
Calmly, she introduces herself, a faint iridescent shimmer flickering in her eyes. Again, the structures of the world reveal themselves in her vision. Narrowing her eyes, she singles out the very thread that tugs at life itself.
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/tcz1fpjdqkq0ra8ntk-1763198623393.jpg"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/hpr01unab7lqnskowi-1763198642805.jpg"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/jpn5h8dpbq401v7eyh-1763198658324.gif"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/y3dx66ba9y3f6vk5yk-1763198671685.gif"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/bzxanra03of92wdjef-1763198685129.gif"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/rfbhh1lqk2tm8e9qpt-1763198698636.gif"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/m51y3ba8bpelsza8zt-1763198742175.gif"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/bwss4p2fk24t05vpw7-1763198756676.gif"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/bvkfihh6czehzhx87t-1763208460141.jpg"/>
|
||||
</p>
|
||||
28
html/3603.html
generated
Normal file
28
html/3603.html
generated
Normal file
@@ -0,0 +1,28 @@
|
||||
<p>
|
||||
Event Preview | [Stranger Things in Honami] Combat Event, Coming Soon!
|
||||
</p>
|
||||
<h1>
|
||||
Duration
|
||||
</h1>
|
||||
<p>
|
||||
Version 2.8 update - 2025-12-24 11:59 (server time)
|
||||
</p>
|
||||
<h1>
|
||||
Rewards
|
||||
</h1>
|
||||
<p>
|
||||
Astrite x1200, Title: Honami Doom Walker, Avatar: Post-Doomsday Coffee, Phantom: The False Sovereign, Modifier, Premium Tuner, Premium Enclosure Tank, Shell Credit, and other Materials.
|
||||
</p>
|
||||
<h1>
|
||||
As a Permanent Event
|
||||
</h1>
|
||||
<p>
|
||||
This event offers two types of rewards: Limited-time Rewards and Standard Rewards. When the initial period ends, the event will continue as a Permanent Event. The Limited-time Rewards will no longer be available when the event becomes a Permanent Event. You can participate in the Permanent Event to win Standard Rewards.
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763308800000/kocst41ot3jkzu7tsq-1763348669828.jpg"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763308800000/c2stvv7raa0p56dg21-1763348699248.jpg"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763308800000/xcg1t72xos2hlhapkj-1763348717347.jpg"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763308800000/p1ty9w5roazf7i2vpg-1763348733832.jpg"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763308800000/oo1dbkz57j7a3tn7wo-1763348746651.jpg"/>
|
||||
</p>
|
||||
15
html/3613.html
generated
Normal file
15
html/3613.html
generated
Normal file
@@ -0,0 +1,15 @@
|
||||
<p>
|
||||
Wuthering Waves Update Content | Version 2.8 "To the City Set in Amber" Planned for Release on November 20th (UTC+8)
|
||||
</p>
|
||||
<p>
|
||||
Here's the event calendar for Version 2.8. Check it out for a quick overview of the event schedule! Full details about the update content can be viewed on our official website—be sure to take a look!
|
||||
</p>
|
||||
<h1>
|
||||
WutheringWaves
|
||||
</h1>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763395200000/jdw0n19tqkiq3h7ztp-1763448460525.jpg"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763395200000/46ywdxjpf60zbqsugc-1763448496990.jpg"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763395200000/3yu1888i3fxnfdlfbc-1763448512501.jpg"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763395200000/abckxxubxu4vxt4eg6-1763448526782.jpg"/>
|
||||
</p>
|
||||
58
html/3616.html
generated
Normal file
58
html/3616.html
generated
Normal file
@@ -0,0 +1,58 @@
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/alol7tdeppuhk6xejy-1763520543500.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
During the event, 5-Star Resonator: Chisa, 4-Star Resonators: Taoqi, Yuanwu and Aalto receive boosted drop rates!
|
||||
</p>
|
||||
<h1>
|
||||
Duration
|
||||
</h1>
|
||||
<p>
|
||||
Version 2.8 update - 2025-12-11 09:59 (server time)
|
||||
</p>
|
||||
<h1>
|
||||
Eligibility
|
||||
</h1>
|
||||
<p>
|
||||
Reach Union Level 8 or complete the combat trial in ""First Resonance"" and activate the Convene function.
|
||||
</p>
|
||||
<h1>
|
||||
Convene Rules
|
||||
</h1>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
[Horizon of Dawnbreak] is a Featured Resonator Convene event banner.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Use Radiant Tide to convene. You are guaranteed at least one 4-Star or higher rarity Resonator or Weapon every 10 attempts.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
The guarantee count is shared among all Featured Resonator Convene events and is carried over until a 5-Star Resonator is obtained.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Featured Resonator Chisa is exclusive to the [Horizon of Dawnbreak] Featured Resonator Convene and will not be available by other means once the event ends.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Featured Resonator Chisa's Waveband will be simultaneously made available in the Afterglow Coral Store with a limit of 2 purchases, and it will be removed once the Convene event ends.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
During the event, all the Resonators who receive boosted drop rates will become available in Ascendant Aces as Trial Resonators. Complete their Ascendant Aces challenges to obtain rewards.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
<em>
|
||||
For more details, please refer to the in-game Convene page.
|
||||
</em>
|
||||
</p>
|
||||
53
html/3623.html
generated
Normal file
53
html/3623.html
generated
Normal file
@@ -0,0 +1,53 @@
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/jfm0n54ovtdyqru36k-1763521065372.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
During the event, 5-Star Weapon: Kumokiri, 4-Star Weapons: Commando of Conviction, Fusion Accretion, and Helios Cleaver receive boosted drop rates!
|
||||
</p>
|
||||
<h1>
|
||||
Duration
|
||||
</h1>
|
||||
<p>
|
||||
Version 2.8 update - 2025-12-11 09:59 (server time)
|
||||
</p>
|
||||
<h1>
|
||||
Eligibility
|
||||
</h1>
|
||||
<p>
|
||||
Reach Union Level 8 or complete the combat trial in ""First Resonance"" and activate the Convene function.
|
||||
</p>
|
||||
<h1>
|
||||
Convene Rules
|
||||
</h1>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
[Absolute Pulsation] is a Featured Weapon Convene event banner.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Use Forging Tide to convene. You are guaranteed at least one 4-Star or higher rarity Resonator or Weapon every 10 attempts.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
The guarantee count is shared among all Featured Weapon Convene events and is carried over until a 5-Star Weapon is obtained.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
The 5-Star Weapon you Convene is guaranteed to be Kumokiri.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Featured Weapon Kumokiri is exclusive to the Featured Weapon Convene and will not be available by other means once the event ends.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
<em>
|
||||
For more details, please refer to the in-game Convene page.
|
||||
</em>
|
||||
</p>
|
||||
58
html/3631.html
generated
Normal file
58
html/3631.html
generated
Normal file
@@ -0,0 +1,58 @@
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/twbu78z48nmmtaaftq-1763522034373.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
During the event, 5-Star Resonator: Phoebe, 4-Star Resonators: Taoqi, Yuanwu and Aalto receive boosted drop rates!
|
||||
</p>
|
||||
<h1>
|
||||
Duration
|
||||
</h1>
|
||||
<p>
|
||||
Version 2.8 update - 2025-12-11 09:59 (server time)
|
||||
</p>
|
||||
<h1>
|
||||
Eligibility
|
||||
</h1>
|
||||
<p>
|
||||
Reach Union Level 8 or complete the combat trial in ""First Resonance"" and activate the Convene function.
|
||||
</p>
|
||||
<h1>
|
||||
Convene Rules
|
||||
</h1>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
[With Hushed Whispers] is a Featured Resonator Convene event banner
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Use Radiant Tide to convene. You are guaranteed at least one 4-Star or higher rarity Resonator or Weapon every 10 attempts.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
The guarantee count is shared among all Featured Resonator Convene events and is carried over until a 5-Star Resonator is obtained.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Featured Resonator Phoebe is exclusive to the [With Hushed Whispers] Featured Resonator Convene and will not be available by other means once the event ends.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Featured Resonator Phoebe's Waveband will be simultaneously made available in the Afterglow Coral Store with a limit of 2 purchases, and it will be removed once the Convene event ends.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
During the event, all the Resonators who receive boosted drop rates will become available in Ascendant Aces as Trial Resonators. Complete their Ascendant Aces challenges to obtain rewards.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
<em>
|
||||
For more details, please refer to the in-game Convene page.
|
||||
</em>
|
||||
</p>
|
||||
13
html/3637.html
generated
Normal file
13
html/3637.html
generated
Normal file
@@ -0,0 +1,13 @@
|
||||
<p>
|
||||
Resonator Review | Graceful Luminescence—Phoebe
|
||||
</p>
|
||||
<p>
|
||||
Phoebe, Acolyte of the Order of the Deep, is a young woman of quiet devotion. With a kind heart, she fulfills her duties with unwavering diligence. Her prayers, like the light she carries, offer comfort and peace to all.
|
||||
</p>
|
||||
<h1>
|
||||
WutheringWaves #Phoebe
|
||||
</h1>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/9edo53agt26cns0661-1763522290371.jpg"/>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/tynu2pe3b4mwujro7t-1763522307473.jpg"/>
|
||||
</p>
|
||||
53
html/3639.html
generated
Normal file
53
html/3639.html
generated
Normal file
@@ -0,0 +1,53 @@
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/zxey5yua1ksodf8nqs-1763522369708.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
During the event, 5-Star Weapon: Luminous Hymn, 4-Star Weapons: Commando of Conviction, Fusion Accretion, and Helios Cleaver receive boosted drop rates!
|
||||
</p>
|
||||
<h1>
|
||||
Duration
|
||||
</h1>
|
||||
<p>
|
||||
Version 2.8 update - 2025-12-11 09:59 (server time)
|
||||
</p>
|
||||
<h1>
|
||||
Eligibility
|
||||
</h1>
|
||||
<p>
|
||||
Reach Union Level 8 or complete the combat trial in ""First Resonance"" and activate the Convene function.
|
||||
</p>
|
||||
<h1>
|
||||
Convene Rules
|
||||
</h1>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
[Absolute Pulsation] is a Featured Weapon Convene event banner.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Use Forging Tide to convene. You are guaranteed at least one 4-Star or higher rarity Resonator or Weapon every 10 attempts.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
The guarantee count is shared among all Featured Weapon Convene events and is carried over until a 5-Star Weapon is obtained.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
The 5-Star Weapon you Convene is guaranteed to be Luminous Hymn.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Featured Weapon Luminous Hymn is exclusive to the Featured Weapon Convene and will not be available by other means once the event ends.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
<em>
|
||||
For more details, please refer to the in-game Convene page.
|
||||
</em>
|
||||
</p>
|
||||
470
html/3648.html
generated
Normal file
470
html/3648.html
generated
Normal file
@@ -0,0 +1,470 @@
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/4q4r5uoutkkrevv9cw-1763548342588.png"/>
|
||||
Wuthering Waves Fan Creation Event "Dawn Breaks on Dark Tides" has concluded, and we want to express our heartfelt appreciation to all participants for their dedication and creativity in our fan art event. Let's view the winning entries and their contributors!
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
1st Place
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/cl87sevf3ekn1vzewi-1763539646144.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/yirin3617">
|
||||
@yirin3617
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/pfzq877x7m9adto0vj-1763539703688.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/Jupito_b">
|
||||
@Jupito_b
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/hj2r1uoq6d40deseoh-1763539729687.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/Soare_lucien_">
|
||||
@Soare_lucien_
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/0ngpf89xjr82llkgaf-1763539773828.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/HanasawaHsu">
|
||||
@HanasawaHsu
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/qiemor1vwfef229okb-1763539829360.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/Rockwell_n1">
|
||||
@Rockwell_n1
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
**2nd Place
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/uemycp9revujmveghd-1763540435968.jpg"/>
|
||||
**
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/Azipou_">
|
||||
@Azipou_
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/9vgi3l4ljrv84vbe21-1763540464664.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/_toriumu">
|
||||
@_toriumu
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/0omubjyevh6f8tshlw-1763540579817.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/vxy_1000">
|
||||
@vxy_1000
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/6wjydrv1ukzfivcxrq-1763540610660.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/ooC1iD7XwimLOou">
|
||||
@ooC1iD7XwimLOou
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/s2wc73sauryzaomohu-1763540633690.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/chucky1000sun">
|
||||
@chucky1000sun
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
3rd Place
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/g54i4ya2f69v17p15o-1763540708732.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/shim0rin">
|
||||
@shim0rin
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/flk0x6gxm6so063e8r-1763540731153.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/Nadenade_27">
|
||||
@Nadenade_27
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/f7nzax0a65x6mo4ep4-1763540753929.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/vankusman">
|
||||
@vankusman
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/ip0by9gp8phkspdcwi-1763540781212.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/yoshi_houndbell">
|
||||
@yoshi_houndbell
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/y39rxkuse43hqhfst7-1763540800919.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/chaochaochun">
|
||||
@chaochaochun
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/08u7zwgcpf4ffuce95-1763540824020.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/rhaspiece">
|
||||
@rhaspiece
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/lfylx6uv9qqaoo5l0o-1763540888702.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://www.instagram.com/ui_uiiiiiiiii/">
|
||||
@ui_uiiiiiiiii
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/umqj48p3nemeuucuvb-1763541836147.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://www.instagram.com/samvisk281/">
|
||||
@samvisk281
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/sgp0jd24lwgxycppfx-1763542438485.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/Angelo2602_">
|
||||
@Angelo2602_
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/ejqe994axxa273yvad-1763542463991.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/ErikVarts">
|
||||
@ErikVarts
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
4th Place
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/n5zq08cec11m8brxcc-1763546837159.jpg"/>
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/Bibimbub15">
|
||||
@Bibimbub15
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/uoin7q9tg6szz5j1a9-1763546859687.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/namaconZ_006">
|
||||
@namaconZ_006
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/xhbqhslurfn3qaqzen-1763546880025.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/no_eat_cucumber">
|
||||
@no_eat_cucumber
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/yxiv5fi3ex9tom7983-1763546943874.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/hina1103__">
|
||||
@hina1103__
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/0m6cct7xrnesfan46l-1763546979830.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/YeniiHuenii">
|
||||
@YeniiHuenii
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/tor1ou888rissectoy-1763546995686.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/MarronCaramel_I">
|
||||
@MarronCaramel_I
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/extpd3h4jsvz543pcq-1763547017295.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/maki_MK0104">
|
||||
@maki_MK0104
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/eqzl1ladw4lemdmqq3-1763547035011.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/yoru_shiki">
|
||||
@yoru_shiki
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/096o6xap5whrfxzq6z-1763547128527.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/puddlemud_art">
|
||||
@puddlemud_art
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/le3u6ko07fo0xe1vre-1763547343628.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/xxxina_inaxxx">
|
||||
@xxxina_inaxxx
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/rpv1u66ow2q85zote6-1763547362222.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/AnchierArt">
|
||||
@AnchierArt
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/u9d2sik4ryac1703o2-1763547378643.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/ayakaze_aoi">
|
||||
@ayakaze_aoi
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/oq1llum1z0ojfyggyt-1763547400012.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/yuuuuu045792630">
|
||||
@yuuuuu045792630
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/tdvc77fcdv4c11p0cn-1763547422319.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/J_Hwan0810">
|
||||
@J_Hwan0810
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/5t2gq6zo4pazo4i4yp-1763547443450.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/dusqhd66">
|
||||
@dusqhd66
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
5th Place
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/rar8t5tgqd8i9xac9z-1763547201933.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/Fsuusux">
|
||||
@Fsuusux
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/fviwfqa33hezd8wwtq-1763547485387.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/aceken12">
|
||||
@aceken12
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/p4f9ibdqj467196gqg-1763547549178.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/aceken12">
|
||||
@aceken12
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/cdl2bzlfs0l6zb9u7g-1763547571836.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/dolgom927">
|
||||
@dolgom927
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/j42cg4k17k2pl52l2r-1763547586646.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/Rvm2222">
|
||||
@Rvm2222
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/b3vzz2o97rrj8iy6yy-1763547619313.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/hirokiart">
|
||||
@hirokiart
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/xt28n38kd18mta6zgl-1763547636052.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/Aete_">
|
||||
@Aete_
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/94gropmunff38veu7q-1763547653982.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/lee_euijin6">
|
||||
@lee_euijin6
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/z1by84xdh2e3bnmomw-1763547676766.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/LewdLily66">
|
||||
@LewdLily66
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/ylg4gw400g27mxjl5m-1763547692656.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/alyxtarr">
|
||||
@alyxtarr
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/8vrgulqqydxylerofa-1763547707728.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/madine08260">
|
||||
@madine08260
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/wveyv9dhmr3xbe03xh-1763547740518.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/uminonimu532">
|
||||
@uminonimu532
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/nkw8ktqydysqlm20vx-1763547758312.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/gujrv">
|
||||
@gujrv
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/q9hqc3dxj3t9n31c2e-1763547775465.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/mieen22">
|
||||
@mieen22
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/o6vofnx7kktjeju8zb-1763547792013.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/wooddak1">
|
||||
@wooddak1
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/htjkp4rzaxq00z58ap-1763547889116.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/Meul2958">
|
||||
@Meul2958
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/udphu1b4gbnq27uo9y-1763547907576.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/DriedFishArt">
|
||||
@DriedFishArt
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/do8h9wtt8luo6vzoaa-1763547926501.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/AgitoIsHere">
|
||||
@AgitoIsHere
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/kqnzshsxpb3ndbae2b-1763547945060.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/3RD_01">
|
||||
@3RD_01
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/r0sqo2r83k0kleaeyu-1763547960938.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://x.com/Gu_lina_">
|
||||
@Gu_lina_
|
||||
</a>
|
||||
</p>
|
||||
1072
html/3657.html
generated
Normal file
1072
html/3657.html
generated
Normal file
File diff suppressed because it is too large
Load Diff
179
html/3664.html
generated
Normal file
179
html/3664.html
generated
Normal file
@@ -0,0 +1,179 @@
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763568000000/j5h70wh49t95udrhhr-1763608727246.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
Dear Rovers,
|
||||
</p>
|
||||
<p>
|
||||
Wuthering Waves Fan Creation Event "To the City Set in Amber" is now live! Post your work with hashtags #WutheringWaves and #WuWaFanart on X (Twitter)/Instagram/Facebook and fill out the form for a chance to win iPhone 16 Pro 512GB, Astrites and more!
|
||||
</p>
|
||||
<p>
|
||||
Create your works of boundless imagination to present the world of Wuthering Waves!
|
||||
</p>
|
||||
<p>
|
||||
Proceed to submit: <https://forms.gle/wkPmsgEBDouGWghL6>
|
||||
</p>
|
||||
<p>
|
||||
Content Requirement
|
||||
</p>
|
||||
<p>
|
||||
Create your own artwork about Wuthering Waves Version 2.8 "To the City Set in Amber"!
|
||||
</p>
|
||||
<p>
|
||||
Whether it's an illustration of your beloved character, comical moments from your adventures, or difficult combos you've mastered—anything that aligns with the theme is eligible for submission. Share your artwork or video for a chance to win exciting prizes!
|
||||
</p>
|
||||
<p>
|
||||
How to Submit
|
||||
</p>
|
||||
<ol>
|
||||
<li>
|
||||
<p>
|
||||
Post your artwork on X (Twitter)/Instagram/Facebook with both hashtags #WutheringWaves and #WuWaFanart included.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Complete the submission form with your submission details. Once done, your submission will be considered successful.
|
||||
</p>
|
||||
</li>
|
||||
</ol>
|
||||
<ul>
|
||||
<li>
|
||||
Please quote your post link with the right hashtags published publicly on the designated platforms.
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
Submission form: <https://forms.gle/wkPmsgEBDouGWghL6>
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763568000000/u168qq2zjwcxhk1bz6-1763608773908.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
Submission Period
|
||||
</p>
|
||||
<p>
|
||||
2025/11/20 - 2025/12/14 (PT)
|
||||
</p>
|
||||
<p>
|
||||
Rewards
|
||||
</p>
|
||||
<p>
|
||||
1st Place (5 Winners): iPhone 17 Pro 512GB
|
||||
</p>
|
||||
<p>
|
||||
2nd Place (5 Winners): 6,000 Astrites & 800 USD
|
||||
</p>
|
||||
<p>
|
||||
3rd Place (10 Winners): 3,000 Astrites & 400 USD
|
||||
</p>
|
||||
<p>
|
||||
4th Place (15 Winners): 2,000 Astrites & 200 USD
|
||||
</p>
|
||||
<p>
|
||||
5th Place (20 Winners): 1,000 Astrites & $50 Amazon Gift Card
|
||||
</p>
|
||||
<p>
|
||||
Lucky Prize (20 Winners): $20 Amazon Gift Card
|
||||
</p>
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763568000000/rhlswxapuo1ndc0psh-1763608890819.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
Judging Criteria
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
All eligible works will undergo evaluation based on their adherence to the theme, degree of completion, reception among players, and other relevant factors.
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
Notes
|
||||
</strong>
|
||||
</p>
|
||||
<ol>
|
||||
<li>
|
||||
<p>
|
||||
To qualify for participation, you should include both hashtags #WutheringWaves and #WuWaFanart in your post and fill out the submission form.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Deleted posts will not be qualified for entitlement of rewards.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
You can submit multiple entries and win multiple rewards. However, the same work published on different platforms will not count towards the rewards.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Entries listed below may be excluded from the judging process:
|
||||
</p>
|
||||
</li>
|
||||
</ol>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
Works not created in accordance with Wuthering Waves
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Works found to contain plagiarism or infringement of intellectual property rights
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Works submitted outside the event period
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Works created with the assistance of AI technology
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Works featuring extremely aggressive content, including but not limited to themes of pornography, violence, politics, or racism
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Works that have already been used for commercial purposes
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Works previously entered into other fan creation events
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Works deemed inappropriate by the judges
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<ol start="5">
|
||||
<li>
|
||||
<p>
|
||||
Failure to reply to the official staff within 7 days from the date of notification will be considered a waiver of entitlement to the rewards.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
This event is open to submissions from all languages, as creators proficient in any language are eligible to compete for rewards. Entries differing only in language will be treated as equivalent works.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
By participating in the event, you grant KURO GAMES the right to freely republish your submitted content on the internet and social media platforms, with appropriate credit given to the creator. No additional notice will be provided prior to publication.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
This event is available solely to participants on the designated servers listed below: America, Europe, Asia, SEA, HMT(HK,MO,TW).
|
||||
</p>
|
||||
</li>
|
||||
</ol>
|
||||
107
html/3665.html
generated
Normal file
107
html/3665.html
generated
Normal file
@@ -0,0 +1,107 @@
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763568000000/cxsrylia22we4cxm7r-1763609239807.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
Dear Rovers,
|
||||
</p>
|
||||
<p>
|
||||
The Wuthering Waves Battle Rush is now live! Record and share your most exciting battle moments with the hashtags #WutheringWaves and #WuwaBattle on X (Twitter)/YouTube Shorts/TikTok to compete for a reward of Astrite x2,000 and a chance to get featured on our social media with direct credits! Other than these rewards, 10 extra winners will be selected to receive a $50 Amazon Gift Card.
|
||||
</p>
|
||||
<p>
|
||||
Showcase your outstanding battle tactics in a condensed clip and share them with us!
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
Content Requirement
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
Create your own combat video featuring Wuthering Waves.
|
||||
</p>
|
||||
<p>
|
||||
We require no limits to the characters, level, or scenes. All entries that feature your combat in Wuthering Waves are qualified to join the event and compete for rewards!
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
How to Submit
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
Post your work on X (Twitter)/YouTube Shorts/TikTok with both hashtags #WutheringWaves and #WuwaBattle included publicly.
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
Submission Period
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
2025/11/20 - 2025/12/18 (PT)
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
Judging Criteria
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
All eligible works will undergo evaluation based on their adherence to the theme, degree of completion, reception among players, and other relevant factors.
|
||||
</p>
|
||||
<p>
|
||||
<strong>
|
||||
Notes
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
To qualify for participation, you should include both hashtags #WutheringWaves and #WuwaBattle in your post.
|
||||
</p>
|
||||
<p>
|
||||
Deleted posts will not be qualified for entitlement of rewards.
|
||||
</p>
|
||||
<p>
|
||||
You can submit multiple entries. However, the same work published on different platforms will not count towards the rewards.
|
||||
</p>
|
||||
<p>
|
||||
Entries listed below may be excluded from the judging process:
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
Works not created in accordance with Wuthering Waves
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Works found to contain plagiarism or infringement of intellectual property rights
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Works submitted outside the event period
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Works created with the assistance of AI technology
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Works featuring extremely aggressive content, including but not limited to themes of pornography, violence, politics, or racism
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Works that have already been used for commercial purposes
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Works deemed inappropriate by the judges
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
Failure to reply to the official staff within 7 days from the date of notification will be considered a waiver of entitlement to the rewards.
|
||||
</p>
|
||||
<p>
|
||||
This event is open to submissions from all languages, as creators proficient in any language are eligible to compete for rewards. Entries differing only in language will be treated as equivalent works.
|
||||
</p>
|
||||
54
html/3672.html
generated
Normal file
54
html/3672.html
generated
Normal file
@@ -0,0 +1,54 @@
|
||||
<p>
|
||||
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1764086400000/ldt3k8vm9hq09qzl7v-1764152839874.jpg"/>
|
||||
</p>
|
||||
<p>
|
||||
As the Tactical Simulacra project advances, the Huaxu Academy has successfully achieved the measurement of Tunability, a property through which countless Reverberations converge into Tacet Discords. Disrupting their Tunability would mean a lethal blow that paralyzes them...
|
||||
</p>
|
||||
<h1>
|
||||
Duration
|
||||
</h1>
|
||||
<p>
|
||||
2025-11-27 04:00 - 2025-12-15 03:59 (server time)
|
||||
</p>
|
||||
<h1>
|
||||
Rewards
|
||||
</h1>
|
||||
<p>
|
||||
Astrite x600, Premium Resonance Potion x16, Premium Energy Core x16, Premium Sealed Tube x16, Premium Tuner x100, Shell Credit x608888, and other Materials.
|
||||
</p>
|
||||
<h1>
|
||||
Eligibility
|
||||
</h1>
|
||||
<p>
|
||||
Reach Union Level 14.
|
||||
</p>
|
||||
<h1>
|
||||
Event Rules
|
||||
</h1>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
In Tactical Simulacra: Off Tune, challenge waves of powerful enemies using special buffs across different simulation domains.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Tactical Simulacra: Off Tune has a total of 6 stages. Reach 1000 points in a stage to unlock the next one.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
As you complete more challenges, new special buffs will be available to you in the subsequent challenges.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
The results of each challenge will be tallied based on Monster Points, Time Points, and Technical Points. Monster Points are earned by defeating enemies in challenges; Time Points are earned based on the time remaining at challenge completion and a conversation factor that increases with the number of enemies that are defeated; Technical Points are earned by triggering Counterattacks, successful Dodges, and Dodge Counters.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
<em>
|
||||
In Tactical Simulacra: Off Tune, some of your attacks build up certain enemies' Off-Tune Level. Once their Off-Tune Level reaches the limit, they enter the Mistune state. During this state, you can unleash a powerful Tune Break to shatter their defenses. Landing a Tune Break resets the enemies' Off-Tune Level and inflicts Tune Disruption, leaving them vulnerable to follow-up attacks.
|
||||
</em>
|
||||
</p>
|
||||
@@ -3,13 +3,67 @@ name = "wutheringwaves"
|
||||
version = "0.1.0"
|
||||
description = "Wuthering Waves archive"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.13"
|
||||
requires-python = ">=3.14"
|
||||
dependencies = [
|
||||
"aiofiles",
|
||||
"beautifulsoup4",
|
||||
"httpx",
|
||||
"markdown>=3.8",
|
||||
"markdown",
|
||||
"markdownify",
|
||||
"markupsafe",
|
||||
"mdformat",
|
||||
]
|
||||
|
||||
[tool.ruff]
|
||||
preview = true
|
||||
line-length = 160
|
||||
lint.select = ["ALL"]
|
||||
lint.pydocstyle.convention = "google"
|
||||
|
||||
lint.ignore = [
|
||||
"ANN201", # Checks that public functions and methods have return type annotations.
|
||||
"ARG001", # Checks for the presence of unused arguments in function definitions.
|
||||
"B008", # Allow Form() as a default value
|
||||
"CPY001", # Missing copyright notice at top of file
|
||||
"D100", # Checks for undocumented public module definitions.
|
||||
"D101", # Checks for undocumented public class definitions.
|
||||
"D102", # Checks for undocumented public method definitions.
|
||||
"D104", # Missing docstring in public package.
|
||||
"D105", # Missing docstring in magic method.
|
||||
"D105", # pydocstyle - missing docstring in magic method
|
||||
"D106", # Checks for undocumented public class definitions, for nested classes.
|
||||
"ERA001", # Found commented-out code
|
||||
"FBT003", # Checks for boolean positional arguments in function calls.
|
||||
"FIX002", # Line contains TODO
|
||||
"G002", # Allow % in logging
|
||||
"PGH003", # Check for type: ignore annotations that suppress all type warnings, as opposed to targeting specific type warnings.
|
||||
"PLR6301", # Checks for the presence of unused self parameter in methods definitions.
|
||||
"RUF029", # Checks for functions declared async that do not await or otherwise use features requiring the function to be declared async.
|
||||
"TD003", # Checks that a TODO comment is associated with a link to a relevant issue or ticket.
|
||||
"PLR0913", # Checks for function definitions that include too many arguments.
|
||||
"PLR0917", # Checks for function definitions that include too many positional arguments.
|
||||
"N815", # Checks for class variable names that follow the mixedCase convention.
|
||||
|
||||
# Conflicting lint rules when using Ruff's formatter
|
||||
# https://docs.astral.sh/ruff/formatter/#conflicting-lint-rules
|
||||
"COM812", # Checks for the absence of trailing commas.
|
||||
"COM819", # Checks for the presence of prohibited trailing commas.
|
||||
"D206", # Checks for docstrings that are indented with tabs.
|
||||
"D300", # Checks for docstrings that use '''triple single quotes''' instead of """triple double quotes""".
|
||||
"E111", # Checks for indentation with a non-multiple of 4 spaces.
|
||||
"E114", # Checks for indentation of comments with a non-multiple of 4 spaces.
|
||||
"E117", # Checks for over-indented code.
|
||||
"ISC001", # Checks for implicitly concatenated strings on a single line.
|
||||
"ISC002", # Checks for implicitly concatenated strings that span multiple lines.
|
||||
"Q000", # Checks for inline strings that use single quotes or double quotes, depending on the value of the lint.flake8-quotes.inline-quotes option.
|
||||
"Q001", # Checks for multiline strings that use single quotes or double quotes, depending on the value of the lint.flake8-quotes.multiline-quotes setting.
|
||||
"Q002", # Checks for docstrings that use single quotes or double quotes, depending on the value of the lint.flake8-quotes.docstring-quotes setting.
|
||||
"Q003", # Checks for strings that include escaped quotes, and suggests changing the quote style to avoid the need to escape them.
|
||||
"W191", # Checks for indentation that uses tabs.
|
||||
]
|
||||
|
||||
[tool.ruff.lint.per-file-ignores]
|
||||
"tests/*" = ["S101", "D103", "PLR2004"]
|
||||
|
||||
[tool.ruff.lint.isort]
|
||||
force-single-line = true
|
||||
|
||||
319
scrape.py
319
scrape.py
@@ -1,4 +1,4 @@
|
||||
import asyncio # noqa: CPY001, D100
|
||||
import asyncio
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
@@ -6,57 +6,52 @@ import re
|
||||
import shutil
|
||||
import subprocess # noqa: S404
|
||||
import time
|
||||
from datetime import UTC, datetime
|
||||
from datetime import UTC
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
from typing import TYPE_CHECKING, Any, Literal
|
||||
from typing import TYPE_CHECKING
|
||||
from typing import Any
|
||||
from typing import Literal
|
||||
|
||||
import aiofiles
|
||||
import anyio
|
||||
import httpx
|
||||
import markdown
|
||||
import mdformat
|
||||
from markdownify import MarkdownConverter # pyright: ignore[reportMissingTypeStubs]
|
||||
from markupsafe import Markup, escape
|
||||
from bs4 import BeautifulSoup
|
||||
from markdownify import MarkdownConverter
|
||||
from markupsafe import Markup
|
||||
from markupsafe import escape
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from collections.abc import Coroutine
|
||||
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format="%(message)s",
|
||||
)
|
||||
logging.basicConfig(level=logging.INFO, format="%(message)s")
|
||||
|
||||
logger: logging.Logger = logging.getLogger("wutheringwaves")
|
||||
|
||||
# Compile regex patterns for better performance
|
||||
DISCORD_LINK_PATTERN = re.compile(r'\[([^\]]+)\]\((https?://[^\s)]+) "\2"\)')
|
||||
SQUARE_BRACKETS_PATTERN = re.compile(r"^\s*\[([^\]]+)\]\s*$", re.MULTILINE)
|
||||
BALL_PATTERN = re.compile(r"●\s*(.*?)\n", re.MULTILINE)
|
||||
REFERENCE_MARK_PATTERN = re.compile(r"^\s*※\s*(\S.*?)\s*$", re.MULTILINE)
|
||||
ESCAPED_STAR_PATTERN = re.compile(r"\\\*(.*)", re.MULTILINE)
|
||||
NON_BREAKING_SPACE_PATTERN = re.compile(r"[\xa0\u2002\u2003\u2009]") # Various nbsp characters
|
||||
EMPTY_CODE_BLOCK_PATTERN = re.compile(r"```[ \t]*\n[ \t]*\n```")
|
||||
DISCORD_LINK_PATTERN: re.Pattern[str] = re.compile(r'\[([^\]]+)\]\((https?://[^\s)]+) "\2"\)')
|
||||
URL_PREFIX_PATTERN: re.Pattern[str] = re.compile(r"^https?://(www\.)?")
|
||||
NON_BREAKING_SPACE_PATTERN: re.Pattern[str] = re.compile(r"\xa0")
|
||||
EMPTY_CODE_BLOCK_PATTERN: re.Pattern[str] = re.compile(r"```[ \t]*\n[ \t]*\n```")
|
||||
SQUARE_BRACKETS_PATTERN: re.Pattern[str] = re.compile(r"^\s*\[([^\]]+)\]\s*$", re.MULTILINE)
|
||||
BALL_PATTERN: re.Pattern[str] = re.compile(r"●\s*(.*?)\n", re.MULTILINE)
|
||||
REFERENCE_MARK_PATTERN: re.Pattern[str] = re.compile(r"^\s*※\s*(\S.*?)\s*$", re.MULTILINE)
|
||||
ESCAPED_STAR_PATTERN: re.Pattern[str] = re.compile(r"\\\*(.*)", re.MULTILINE)
|
||||
|
||||
# Circled number patterns - precompile for better performance
|
||||
CIRCLED_NUMBERS = {
|
||||
"①": ("1", re.compile(r"^\s*①\s*(.*?)\s*$", re.MULTILINE)),
|
||||
"②": ("2", re.compile(r"^\s*②\s*(.*?)\s*$", re.MULTILINE)),
|
||||
"③": ("3", re.compile(r"^\s*③\s*(.*?)\s*$", re.MULTILINE)),
|
||||
"④": ("4", re.compile(r"^\s*④\s*(.*?)\s*$", re.MULTILINE)),
|
||||
"⑤": ("5", re.compile(r"^\s*⑤\s*(.*?)\s*$", re.MULTILINE)),
|
||||
"⑥": ("6", re.compile(r"^\s*⑥\s*(.*?)\s*$", re.MULTILINE)),
|
||||
"⑦": ("7", re.compile(r"^\s*⑦\s*(.*?)\s*$", re.MULTILINE)),
|
||||
"⑧": ("8", re.compile(r"^\s*⑧\s*(.*?)\s*$", re.MULTILINE)),
|
||||
"⑨": ("9", re.compile(r"^\s*⑨\s*(.*?)\s*$", re.MULTILINE)),
|
||||
"⑩": ("10", re.compile(r"^\s*⑩\s*(.*?)\s*$", re.MULTILINE)),
|
||||
CIRCLED_NUMBER_PATTERNS: dict[str, tuple[re.Pattern[str], str]] = {
|
||||
"①": (re.compile(r"^\s*①\s*(.*?)\s*$", re.MULTILINE), "1"),
|
||||
"②": (re.compile(r"^\s*②\s*(.*?)\s*$", re.MULTILINE), "2"),
|
||||
"③": (re.compile(r"^\s*③\s*(.*?)\s*$", re.MULTILINE), "3"),
|
||||
"④": (re.compile(r"^\s*④\s*(.*?)\s*$", re.MULTILINE), "4"),
|
||||
"⑤": (re.compile(r"^\s*⑤\s*(.*?)\s*$", re.MULTILINE), "5"),
|
||||
"⑥": (re.compile(r"^\s*⑥\s*(.*?)\s*$", re.MULTILINE), "6"),
|
||||
"⑦": (re.compile(r"^\s*⑦\s*(.*?)\s*$", re.MULTILINE), "7"),
|
||||
"⑧": (re.compile(r"^\s*⑧\s*(.*?)\s*$", re.MULTILINE), "8"),
|
||||
"⑨": (re.compile(r"^\s*⑨\s*(.*?)\s*$", re.MULTILINE), "9"),
|
||||
"⑩": (re.compile(r"^\s*⑩\s*(.*?)\s*$", re.MULTILINE), "10"),
|
||||
}
|
||||
|
||||
# Markdown converter instance - reuse instead of creating for each article
|
||||
MARKDOWN_CONVERTER = MarkdownConverter(
|
||||
heading_style="ATX",
|
||||
strip=["pre", "code"],
|
||||
)
|
||||
|
||||
|
||||
|
||||
async def fetch_json(url: str, client: httpx.AsyncClient) -> dict[Any, Any] | None:
|
||||
"""Fetch JSON data from a URL.
|
||||
@@ -112,9 +107,7 @@ def set_file_timestamp(filepath: Path, timestamp_str: str) -> bool:
|
||||
"""
|
||||
try:
|
||||
# Parse the timestamp string
|
||||
dt: datetime = datetime.strptime(timestamp_str, "%Y-%m-%d %H:%M:%S").replace(
|
||||
tzinfo=UTC
|
||||
)
|
||||
dt: datetime = datetime.strptime(timestamp_str, "%Y-%m-%d %H:%M:%S").replace(tzinfo=UTC)
|
||||
|
||||
# Convert to Unix timestamp
|
||||
timestamp: float = dt.timestamp()
|
||||
@@ -145,9 +138,7 @@ def get_file_timestamp(timestamp_str: str) -> float:
|
||||
|
||||
try:
|
||||
# Parse the timestamp string
|
||||
dt: datetime = datetime.strptime(timestamp_str, "%Y-%m-%d %H:%M:%S").replace(
|
||||
tzinfo=UTC
|
||||
)
|
||||
dt: datetime = datetime.strptime(timestamp_str, "%Y-%m-%d %H:%M:%S").replace(tzinfo=UTC)
|
||||
# Convert to Unix timestamp
|
||||
return dt.timestamp()
|
||||
except ValueError:
|
||||
@@ -166,13 +157,7 @@ def commit_file_with_timestamp(filepath: Path) -> bool: # noqa: PLR0911
|
||||
|
||||
"""
|
||||
# Check in Git history if we already have this file
|
||||
git_log_cmd: list[str] = [
|
||||
"git",
|
||||
"log",
|
||||
"--pretty=format:%H",
|
||||
"--follow",
|
||||
str(filepath),
|
||||
]
|
||||
git_log_cmd: list[str] = ["git", "log", "--pretty=format:%H", "--follow", str(filepath)]
|
||||
try:
|
||||
git_log_output: str = subprocess.check_output(git_log_cmd, text=True).strip() # noqa: S603
|
||||
if git_log_output:
|
||||
@@ -196,25 +181,14 @@ def commit_file_with_timestamp(filepath: Path) -> bool: # noqa: PLR0911
|
||||
|
||||
# Get the file's modification time
|
||||
timestamp: float = filepath.stat().st_mtime
|
||||
git_time: str = datetime.fromtimestamp(timestamp, tz=UTC).strftime(
|
||||
"%Y-%m-%dT%H:%M:%S"
|
||||
)
|
||||
git_time: str = datetime.fromtimestamp(timestamp, tz=UTC).strftime("%Y-%m-%dT%H:%M:%S")
|
||||
|
||||
# Stage the file
|
||||
subprocess.run([git_executable, "add", str(filepath)], check=True, text=True) # noqa: S603
|
||||
|
||||
# Commit the file with the modification time as the commit time
|
||||
env: dict[str, str] = {
|
||||
**os.environ,
|
||||
"GIT_AUTHOR_DATE": git_time,
|
||||
"GIT_COMMITTER_DATE": git_time,
|
||||
}
|
||||
subprocess.run( # noqa: S603
|
||||
[git_executable, "commit", "-m", f"Add {filepath.name}"],
|
||||
check=True,
|
||||
env=env,
|
||||
text=True,
|
||||
)
|
||||
env: dict[str, str] = {**os.environ, "GIT_AUTHOR_DATE": git_time, "GIT_COMMITTER_DATE": git_time}
|
||||
subprocess.run([git_executable, "commit", "-m", f"Add {filepath.name}"], check=True, env=env, text=True) # noqa: S603
|
||||
except subprocess.CalledProcessError:
|
||||
logger.exception("Subprocess error occurred while committing the file.")
|
||||
return False
|
||||
@@ -251,9 +225,7 @@ def add_articles_to_readme(articles: dict[Any, Any] | None = None) -> None:
|
||||
# Create new content
|
||||
new_lines: list[str] = []
|
||||
if articles_section_index >= 0:
|
||||
new_lines = lines[
|
||||
: articles_section_index + 1
|
||||
] # Keep everything up to "## Articles"
|
||||
new_lines = lines[: articles_section_index + 1] # Keep everything up to "## Articles"
|
||||
else:
|
||||
new_lines = lines
|
||||
if new_lines and not new_lines[-1].endswith("\n"):
|
||||
@@ -262,17 +234,11 @@ def add_articles_to_readme(articles: dict[Any, Any] | None = None) -> None:
|
||||
|
||||
# Add articles
|
||||
new_lines.append("\n") # Add a blank line after the heading
|
||||
for article in sorted(
|
||||
articles, key=lambda x: x.get("createTime", ""), reverse=True
|
||||
):
|
||||
for article in sorted(articles, key=lambda x: x.get("createTime", ""), reverse=True):
|
||||
article_id: str = str(article.get("articleId", ""))
|
||||
article_title: str = article.get("articleTitle", "No Title")
|
||||
article_url: str = (
|
||||
f"https://wutheringwaves.kurogames.com/en/main/news/detail/{article_id}"
|
||||
)
|
||||
new_lines.append(
|
||||
f"- [{article_title}]({article_url}) [[json]](articles/{article_id}.json)\n",
|
||||
)
|
||||
article_url: str = f"https://wutheringwaves.kurogames.com/en/main/news/detail/{article_id}"
|
||||
new_lines.append(f"- [{article_title}]({article_url}) [[json]](articles/{article_id}.json)\n")
|
||||
|
||||
# Add articles directory section
|
||||
new_lines.append("\n## Articles Directory\n\n")
|
||||
@@ -349,12 +315,14 @@ def format_discord_links(md: str) -> str:
|
||||
|
||||
def repl(match: re.Match[str]) -> str:
|
||||
url: str | Any = match.group(2)
|
||||
display: str = re.sub(pattern=r"^https?://(www\.)?", repl="", string=url)
|
||||
display: str = URL_PREFIX_PATTERN.sub("", url)
|
||||
return f"[{display}]({url})"
|
||||
|
||||
# Before: [Link](https://example.com "Link")
|
||||
# After: [Link](https://example.com)
|
||||
return DISCORD_LINK_PATTERN.sub(repl, md)
|
||||
formatted_links_md: str = DISCORD_LINK_PATTERN.sub(repl, md)
|
||||
|
||||
return formatted_links_md
|
||||
|
||||
|
||||
def handle_stars(text: str) -> str:
|
||||
@@ -395,7 +363,7 @@ def handle_stars(text: str) -> str:
|
||||
return "\n\n".join(output)
|
||||
|
||||
|
||||
def generate_atom_feed(articles: list[dict[Any, Any]], file_name: str) -> str: # noqa: PLR0914, PLR0915
|
||||
def generate_atom_feed(articles: list[dict[Any, Any]], file_name: str) -> str: # noqa: C901, PLR0914, PLR0915
|
||||
"""Generate an Atom feed from a list of articles.
|
||||
|
||||
Args:
|
||||
@@ -413,11 +381,7 @@ def generate_atom_feed(articles: list[dict[Any, Any]], file_name: str) -> str:
|
||||
if articles:
|
||||
latest_entry = articles[0].get("createTime", "")
|
||||
if latest_entry:
|
||||
latest_entry = (
|
||||
datetime.strptime(str(latest_entry), "%Y-%m-%d %H:%M:%S")
|
||||
.replace(tzinfo=UTC)
|
||||
.isoformat()
|
||||
)
|
||||
latest_entry = datetime.strptime(str(latest_entry), "%Y-%m-%d %H:%M:%S").replace(tzinfo=UTC).isoformat()
|
||||
|
||||
for article in articles:
|
||||
article_id: str = str(article.get("articleId", ""))
|
||||
@@ -434,65 +398,72 @@ def generate_atom_feed(articles: list[dict[Any, Any]], file_name: str) -> str:
|
||||
if not article_content:
|
||||
article_content = article_title
|
||||
|
||||
article_content_converted = str(MARKDOWN_CONVERTER.convert(article_content).strip()) # type: ignore # noqa: PGH003
|
||||
converter: MarkdownConverter = MarkdownConverter(heading_style="ATX", strip=["pre", "code"])
|
||||
article_content_converted = str(converter.convert(article_content).strip())
|
||||
|
||||
if not article_content_converted:
|
||||
msg: str = f"Article content is empty for article ID: {article_id}"
|
||||
logger.warning(msg)
|
||||
article_content_converted = "No content available"
|
||||
|
||||
# Combine non-breaking space replacements in one pass
|
||||
content = NON_BREAKING_SPACE_PATTERN.sub(" ", article_content_converted)
|
||||
|
||||
# Remove empty code blocks
|
||||
content = EMPTY_CODE_BLOCK_PATTERN.sub("", content)
|
||||
|
||||
# [How to Update] should be # How to Update
|
||||
content = SQUARE_BRACKETS_PATTERN.sub(r"# \1", content)
|
||||
|
||||
content = handle_stars(content)
|
||||
|
||||
# If `● Word` is in the content, replace it `## Word` instead
|
||||
content = BALL_PATTERN.sub(r"\n\n## \1\n\n", content)
|
||||
|
||||
# If `※ Word` is in the content, replace it `* word * ` instead
|
||||
content = REFERENCE_MARK_PATTERN.sub(r"\n\n*\1*\n\n", content)
|
||||
|
||||
# Replace circled Unicode numbers with plain numbered text (using precompiled patterns)
|
||||
for number, pattern in CIRCLED_NUMBERS.values():
|
||||
content = pattern.sub(rf"\n\n{number}. \1\n\n", content)
|
||||
|
||||
content = ESCAPED_STAR_PATTERN.sub(r"* \1", content)
|
||||
# Remove non-breaking spaces
|
||||
xa0_removed: str = NON_BREAKING_SPACE_PATTERN.sub(" ", article_content_converted) # Replace non-breaking spaces with regular spaces
|
||||
|
||||
markdown_formatted: str = mdformat.text( # type: ignore # noqa: PGH003
|
||||
content,
|
||||
options={
|
||||
"number": True, # Allow 1., 2., 3. numbering
|
||||
},
|
||||
# Replace non-breaking spaces with regular spaces
|
||||
non_breaking_space_removed: str = xa0_removed.replace(" ", " ") # noqa: RUF001
|
||||
|
||||
# Remove code blocks that has only spaces and newlines inside them
|
||||
empty_code_block_removed: str = EMPTY_CODE_BLOCK_PATTERN.sub("", non_breaking_space_removed)
|
||||
|
||||
# [How to Update] should be # How to Update
|
||||
square_brackets_converted: str = SQUARE_BRACKETS_PATTERN.sub(r"# \1", empty_code_block_removed)
|
||||
|
||||
stars_converted: str = handle_stars(square_brackets_converted)
|
||||
|
||||
# If `● Word` is in the content, replace it `## Word` instead with regex
|
||||
ball_converted: str = BALL_PATTERN.sub(r"\n\n## \1\n\n", stars_converted)
|
||||
|
||||
# If `※ Word` is in the content, replace it `* word * ` instead with regex
|
||||
reference_mark_converted: str = REFERENCE_MARK_PATTERN.sub(r"\n\n*\1*\n\n", ball_converted)
|
||||
|
||||
# Replace circled Unicode numbers (①-⑩) with plain numbered text (e.g., "1. ", "2. ", ..., "10. ")
|
||||
for pattern, number in CIRCLED_NUMBER_PATTERNS.values():
|
||||
reference_mark_converted = pattern.sub(
|
||||
rf"\n\n{number}. \1\n\n",
|
||||
reference_mark_converted,
|
||||
)
|
||||
|
||||
space_before_star_added: str = ESCAPED_STAR_PATTERN.sub(
|
||||
r"* \1",
|
||||
reference_mark_converted,
|
||||
)
|
||||
|
||||
# Format Markdown safely. mdformat doesn't support a "number" option here,
|
||||
# and unknown options can raise at runtime. We avoid passing invalid options
|
||||
# and fall back to the raw text if formatting fails for any reason.
|
||||
try:
|
||||
formatter: Any = mdformat # Help the type checker by treating mdformat as Any here
|
||||
markdown_formatted: str = str(formatter.text(space_before_star_added))
|
||||
except Exception:
|
||||
logger.exception("mdformat failed; using unformatted markdown text")
|
||||
markdown_formatted = space_before_star_added
|
||||
|
||||
links_fixed: str = format_discord_links(markdown_formatted)
|
||||
article_escaped: Markup = escape(links_fixed)
|
||||
|
||||
article_url: str = (
|
||||
f"https://wutheringwaves.kurogames.com/en/main/news/detail/{article_id}"
|
||||
)
|
||||
article_url: str = f"https://wutheringwaves.kurogames.com/en/main/news/detail/{article_id}"
|
||||
article_create_time: str = article.get("createTime", "")
|
||||
published: str = ""
|
||||
updated: str = latest_entry
|
||||
|
||||
if article_create_time:
|
||||
timestamp: datetime = datetime.strptime(
|
||||
str(article_create_time), "%Y-%m-%d %H:%M:%S"
|
||||
).replace(tzinfo=UTC)
|
||||
timestamp: datetime = datetime.strptime(str(article_create_time), "%Y-%m-%d %H:%M:%S").replace(tzinfo=UTC)
|
||||
iso_time: str = timestamp.isoformat()
|
||||
published = f"<published>{iso_time}</published>"
|
||||
updated = iso_time
|
||||
|
||||
article_category: str = article.get("articleTypeName", "Wuthering Waves")
|
||||
category: str = (
|
||||
f'<category term="{escape(article_category)}"/>' if article_category else ""
|
||||
)
|
||||
category: str = f'<category term="{escape(article_category)}"/>' if article_category else ""
|
||||
|
||||
html: str = markdown.markdown(
|
||||
text=article_escaped,
|
||||
@@ -526,7 +497,7 @@ def generate_atom_feed(articles: list[dict[Any, Any]], file_name: str) -> str:
|
||||
html_file: Path = html_dir / f"{article_id}.html"
|
||||
if not html_file.is_file():
|
||||
with html_file.open("w", encoding="utf-8") as f:
|
||||
f.write(html)
|
||||
f.write(str(BeautifulSoup(html, "html.parser").prettify()))
|
||||
logger.info("Saved HTML for article %s to %s", article_id, html_file)
|
||||
|
||||
# Set the file timestamp
|
||||
@@ -553,35 +524,12 @@ def generate_atom_feed(articles: list[dict[Any, Any]], file_name: str) -> str:
|
||||
</author>
|
||||
{"".join(atom_entries)}
|
||||
</feed>
|
||||
""" # noqa: E501
|
||||
"""
|
||||
|
||||
return atom_feed
|
||||
|
||||
|
||||
def load_all_articles(output_dir: Path) -> list[dict[Any, Any]]:
|
||||
"""Load all article JSON files from the output directory.
|
||||
|
||||
Args:
|
||||
output_dir (Path): The directory containing article JSON files.
|
||||
|
||||
Returns:
|
||||
list[dict[Any, Any]]: List of article data dictionaries.
|
||||
"""
|
||||
articles: list[dict[Any, Any]] = []
|
||||
for file in output_dir.glob("*.json"):
|
||||
if file.stem == "ArticleMenu":
|
||||
continue
|
||||
with file.open("r", encoding="utf-8") as f:
|
||||
try:
|
||||
article_data: dict[Any, Any] = json.load(f)
|
||||
articles.append(article_data)
|
||||
except json.JSONDecodeError:
|
||||
logger.exception("Error decoding JSON from %s", file)
|
||||
continue
|
||||
return articles
|
||||
|
||||
|
||||
def create_atom_feeds(articles: list[dict[Any, Any]], output_dir: Path) -> None:
|
||||
def create_atom_feeds(output_dir: Path) -> None:
|
||||
"""Create Atom feeds for the articles.
|
||||
|
||||
Current feeds are:
|
||||
@@ -589,16 +537,28 @@ def create_atom_feeds(articles: list[dict[Any, Any]], output_dir: Path) -> None:
|
||||
- All articles
|
||||
|
||||
Args:
|
||||
articles (list[dict[Any, Any]]): List of article data.
|
||||
output_dir (Path): The directory to save the RSS feed files.
|
||||
|
||||
"""
|
||||
if not articles:
|
||||
logger.error("Can't create Atom feeds, no articles provided")
|
||||
menu_data: list[dict[Any, Any]] = []
|
||||
# Load data from all the articles
|
||||
for file in output_dir.glob("*.json"):
|
||||
if file.stem == "ArticleMenu":
|
||||
continue
|
||||
with file.open("r", encoding="utf-8") as f:
|
||||
try:
|
||||
article_data: dict[Any, Any] = json.load(f)
|
||||
menu_data.append(article_data)
|
||||
except json.JSONDecodeError:
|
||||
logger.exception("Error decoding JSON from %s", file)
|
||||
continue
|
||||
|
||||
if not menu_data:
|
||||
logger.error("Can't create Atom feeds, no articles found in %s", output_dir)
|
||||
return
|
||||
|
||||
articles_sorted: list[dict[Any, Any]] = sorted(
|
||||
articles,
|
||||
menu_data,
|
||||
key=lambda x: get_file_timestamp(x.get("createTime", "")),
|
||||
reverse=True,
|
||||
)
|
||||
@@ -614,9 +574,7 @@ def create_atom_feeds(articles: list[dict[Any, Any]], output_dir: Path) -> None:
|
||||
article_create_time: str = article.get("createTime", "")
|
||||
logger.info("\tArticle ID: %s, Date: %s", article_id, article_create_time)
|
||||
|
||||
atom_feed: str = generate_atom_feed(
|
||||
articles=latest_articles, file_name=atom_feed_path.name
|
||||
)
|
||||
atom_feed: str = generate_atom_feed(articles=latest_articles, file_name=atom_feed_path.name)
|
||||
with atom_feed_path.open("w", encoding="utf-8") as f:
|
||||
f.write(atom_feed)
|
||||
logger.info(
|
||||
@@ -627,9 +585,7 @@ def create_atom_feeds(articles: list[dict[Any, Any]], output_dir: Path) -> None:
|
||||
|
||||
# Create the Atom feed for all articles
|
||||
atom_feed_path_all: Path = Path("articles_all.xml")
|
||||
atom_feed_all_articles: str = generate_atom_feed(
|
||||
articles=articles_sorted, file_name=atom_feed_path_all.name
|
||||
)
|
||||
atom_feed_all_articles: str = generate_atom_feed(articles=articles_sorted, file_name=atom_feed_path_all.name)
|
||||
with atom_feed_path_all.open("w", encoding="utf-8") as f:
|
||||
f.write(atom_feed_all_articles)
|
||||
logger.info("Created Atom feed for all articles: %s", atom_feed_path_all)
|
||||
@@ -692,13 +648,11 @@ async def main() -> Literal[1, 0]:
|
||||
"""
|
||||
# Setup
|
||||
current_time = int(time.time() * 1000) # Current time in milliseconds
|
||||
base_url = (
|
||||
"https://hw-media-cdn-mingchao.kurogame.com/akiwebsite/website2.0/json/G152/en"
|
||||
)
|
||||
base_url = "https://hw-media-cdn-mingchao.kurogame.com/akiwebsite/website2.0/json/G152/en"
|
||||
article_menu_url: str = f"{base_url}/ArticleMenu.json?t={current_time}"
|
||||
article_base_url: str = f"{base_url}/article/"
|
||||
output_dir = Path("articles")
|
||||
output_dir.mkdir(exist_ok=True)
|
||||
await anyio.Path(output_dir).mkdir(exist_ok=True)
|
||||
|
||||
logger.info("Fetching article menu from %s", article_menu_url)
|
||||
|
||||
@@ -716,29 +670,19 @@ async def main() -> Literal[1, 0]:
|
||||
|
||||
# Extract article IDs
|
||||
logger.info("Extracting article IDs...")
|
||||
article_ids: list[str] = [
|
||||
str(item["articleId"]) for item in menu_data if item.get("articleId")
|
||||
]
|
||||
article_ids: list[str] = [str(item["articleId"]) for item in menu_data if item.get("articleId")]
|
||||
|
||||
if not article_ids:
|
||||
logger.warning(
|
||||
"No article IDs found. Please check the JSON structure of ArticleMenu.json."
|
||||
)
|
||||
logger.warning("No article IDs found. Please check the JSON structure of ArticleMenu.json.")
|
||||
logger.warning("Full menu response for debugging:")
|
||||
logger.warning(json.dumps(menu_data, indent=2))
|
||||
return 1
|
||||
|
||||
# Get list of already downloaded article IDs
|
||||
existing_files: list[str] = [
|
||||
file.stem
|
||||
for file in output_dir.glob("*.json")
|
||||
if file.stem != "ArticleMenu"
|
||||
]
|
||||
existing_files: list[str] = [file.stem async for file in anyio.Path(output_dir).glob("*.json") if file.stem != "ArticleMenu"]
|
||||
|
||||
# Filter out already downloaded articles
|
||||
new_article_ids: list[str] = [
|
||||
article_id for article_id in article_ids if article_id not in existing_files
|
||||
]
|
||||
# Filter out already downloaded articles
|
||||
new_article_ids: list[str] = [article_id for article_id in article_ids if article_id not in existing_files]
|
||||
|
||||
if new_article_ids:
|
||||
logger.info("Found %s new articles to download", len(new_article_ids))
|
||||
@@ -746,18 +690,14 @@ async def main() -> Literal[1, 0]:
|
||||
# Download each new article
|
||||
download_tasks: list[Coroutine[Any, Any, dict[Any, Any] | None]] = []
|
||||
for article_id in new_article_ids:
|
||||
article_url: str = (
|
||||
f"{article_base_url}{article_id}.json?t={current_time}"
|
||||
)
|
||||
article_url: str = f"{article_base_url}{article_id}.json?t={current_time}"
|
||||
output_file: Path = output_dir / f"{article_id}.json"
|
||||
|
||||
logger.info("Downloading article %s from %s", article_id, article_url)
|
||||
download_tasks.append(fetch_json(article_url, client))
|
||||
|
||||
# Wait for all downloads to complete
|
||||
results: list[dict[Any, Any] | BaseException | None] = await asyncio.gather(
|
||||
*download_tasks, return_exceptions=True
|
||||
)
|
||||
results: list[dict[Any, Any] | BaseException | None] = await asyncio.gather(*download_tasks, return_exceptions=True)
|
||||
|
||||
# Process the downloaded articles
|
||||
for i, result in enumerate(results):
|
||||
@@ -769,27 +709,18 @@ async def main() -> Literal[1, 0]:
|
||||
continue
|
||||
|
||||
if not result:
|
||||
logger.warning(
|
||||
"Downloaded article %s is empty or invalid", article_id
|
||||
)
|
||||
logger.warning("Downloaded article %s is empty or invalid", article_id)
|
||||
continue
|
||||
|
||||
# Save the article JSON
|
||||
if isinstance(result, dict) and await save_prettified_json(
|
||||
result, output_file
|
||||
):
|
||||
logger.info(
|
||||
"Successfully downloaded and prettified %s", output_file
|
||||
)
|
||||
if isinstance(result, dict) and await save_prettified_json(result, output_file):
|
||||
logger.info("Successfully downloaded and prettified %s", output_file)
|
||||
else:
|
||||
logger.info("No new articles to download")
|
||||
|
||||
# Load all articles once for efficient processing
|
||||
all_articles = load_all_articles(output_dir)
|
||||
|
||||
add_data_to_articles(menu_data, output_dir)
|
||||
add_articles_to_readme(menu_data)
|
||||
create_atom_feeds(all_articles, output_dir)
|
||||
create_atom_feeds(output_dir)
|
||||
batch_process_timestamps(menu_data, output_dir)
|
||||
|
||||
logger.info("Script finished. Articles are in the '%s' directory.", output_dir)
|
||||
|
||||
237
uv.lock
generated
237
uv.lock
generated
@@ -1,237 +0,0 @@
|
||||
version = 1
|
||||
revision = 2
|
||||
requires-python = ">=3.13"
|
||||
|
||||
[[package]]
|
||||
name = "aiofiles"
|
||||
version = "24.1.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/0b/03/a88171e277e8caa88a4c77808c20ebb04ba74cc4681bf1e9416c862de237/aiofiles-24.1.0.tar.gz", hash = "sha256:22a075c9e5a3810f0c2e48f3008c94d68c65d763b9b03857924c99e57355166c", size = 30247, upload-time = "2024-06-24T11:02:03.584Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/a5/45/30bb92d442636f570cb5651bc661f52b610e2eec3f891a5dc3a4c3667db0/aiofiles-24.1.0-py3-none-any.whl", hash = "sha256:b4ec55f4195e3eb5d7abd1bf7e061763e864dd4954231fb8539a0ef8bb8260e5", size = 15896, upload-time = "2024-06-24T11:02:01.529Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anyio"
|
||||
version = "4.9.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "idna" },
|
||||
{ name = "sniffio" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/95/7d/4c1bd541d4dffa1b52bd83fb8527089e097a106fc90b467a7313b105f840/anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028", size = 190949, upload-time = "2025-03-17T00:02:54.77Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c", size = 100916, upload-time = "2025-03-17T00:02:52.713Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "beautifulsoup4"
|
||||
version = "4.13.4"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "soupsieve" },
|
||||
{ name = "typing-extensions" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067, upload-time = "2025-04-15T17:05:13.836Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285, upload-time = "2025-04-15T17:05:12.221Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "certifi"
|
||||
version = "2025.7.9"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/de/8a/c729b6b60c66a38f590c4e774decc4b2ec7b0576be8f1aa984a53ffa812a/certifi-2025.7.9.tar.gz", hash = "sha256:c1d2ec05395148ee10cf672ffc28cd37ea0ab0d99f9cc74c43e588cbd111b079", size = 160386, upload-time = "2025-07-09T02:13:58.874Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/66/f3/80a3f974c8b535d394ff960a11ac20368e06b736da395b551a49ce950cce/certifi-2025.7.9-py3-none-any.whl", hash = "sha256:d842783a14f8fdd646895ac26f719a061408834473cfc10203f6a575beb15d39", size = 159230, upload-time = "2025-07-09T02:13:57.007Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "h11"
|
||||
version = "0.16.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "httpcore"
|
||||
version = "1.0.9"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "certifi" },
|
||||
{ name = "h11" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "httpx"
|
||||
version = "0.28.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "anyio" },
|
||||
{ name = "certifi" },
|
||||
{ name = "httpcore" },
|
||||
{ name = "idna" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "idna"
|
||||
version = "3.10"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490, upload-time = "2024-09-15T18:07:39.745Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload-time = "2024-09-15T18:07:37.964Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "markdown"
|
||||
version = "3.8.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d7/c2/4ab49206c17f75cb08d6311171f2d65798988db4360c4d1485bd0eedd67c/markdown-3.8.2.tar.gz", hash = "sha256:247b9a70dd12e27f67431ce62523e675b866d254f900c4fe75ce3dda62237c45", size = 362071, upload-time = "2025-06-19T17:12:44.483Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/96/2b/34cc11786bc00d0f04d0f5fdc3a2b1ae0b6239eef72d3d345805f9ad92a1/markdown-3.8.2-py3-none-any.whl", hash = "sha256:5c83764dbd4e00bdd94d85a19b8d55ccca20fe35b2e678a1422b380324dd5f24", size = 106827, upload-time = "2025-06-19T17:12:42.994Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "markdown-it-py"
|
||||
version = "3.0.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "mdurl" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload-time = "2023-06-03T06:41:14.443Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload-time = "2023-06-03T06:41:11.019Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "markdownify"
|
||||
version = "1.1.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "beautifulsoup4" },
|
||||
{ name = "six" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/2f/78/c48fed23c7aebc2c16049062e72de1da3220c274de59d28c942acdc9ffb2/markdownify-1.1.0.tar.gz", hash = "sha256:449c0bbbf1401c5112379619524f33b63490a8fa479456d41de9dc9e37560ebd", size = 17127, upload-time = "2025-03-05T11:54:40.574Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/64/11/b751af7ad41b254a802cf52f7bc1fca7cabe2388132f2ce60a1a6b9b9622/markdownify-1.1.0-py3-none-any.whl", hash = "sha256:32a5a08e9af02c8a6528942224c91b933b4bd2c7d078f9012943776fc313eeef", size = 13901, upload-time = "2025-03-05T11:54:39.454Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "markupsafe"
|
||||
version = "3.0.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537, upload-time = "2024-10-18T15:21:54.129Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274, upload-time = "2024-10-18T15:21:24.577Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352, upload-time = "2024-10-18T15:21:25.382Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122, upload-time = "2024-10-18T15:21:26.199Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085, upload-time = "2024-10-18T15:21:27.029Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978, upload-time = "2024-10-18T15:21:27.846Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208, upload-time = "2024-10-18T15:21:28.744Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357, upload-time = "2024-10-18T15:21:29.545Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344, upload-time = "2024-10-18T15:21:30.366Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101, upload-time = "2024-10-18T15:21:31.207Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603, upload-time = "2024-10-18T15:21:32.032Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510, upload-time = "2024-10-18T15:21:33.625Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486, upload-time = "2024-10-18T15:21:34.611Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480, upload-time = "2024-10-18T15:21:35.398Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914, upload-time = "2024-10-18T15:21:36.231Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796, upload-time = "2024-10-18T15:21:37.073Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473, upload-time = "2024-10-18T15:21:37.932Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114, upload-time = "2024-10-18T15:21:39.799Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098, upload-time = "2024-10-18T15:21:40.813Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208, upload-time = "2024-10-18T15:21:41.814Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739, upload-time = "2024-10-18T15:21:42.784Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mdformat"
|
||||
version = "0.7.22"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "markdown-it-py" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/fc/eb/b5cbf2484411af039a3d4aeb53a5160fae25dd8c84af6a4243bc2f3fedb3/mdformat-0.7.22.tar.gz", hash = "sha256:eef84fa8f233d3162734683c2a8a6222227a229b9206872e6139658d99acb1ea", size = 34610, upload-time = "2025-01-30T18:00:51.418Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/f2/6f/94a7344f6d634fe3563bea8b33bccedee37f2726f7807e9a58440dc91627/mdformat-0.7.22-py3-none-any.whl", hash = "sha256:61122637c9e1d9be1329054f3fa216559f0d1f722b7919b060a8c2a4ae1850e5", size = 34447, upload-time = "2025-01-30T18:00:48.708Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mdurl"
|
||||
version = "0.1.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "six"
|
||||
version = "1.17.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sniffio"
|
||||
version = "1.3.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "soupsieve"
|
||||
version = "2.7"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418, upload-time = "2025-04-20T18:50:08.518Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677, upload-time = "2025-04-20T18:50:07.196Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typing-extensions"
|
||||
version = "4.14.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/98/5a/da40306b885cc8c09109dc2e1abd358d5684b1425678151cdaed4731c822/typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36", size = 107673, upload-time = "2025-07-04T13:28:34.16Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76", size = 43906, upload-time = "2025-07-04T13:28:32.743Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wutheringwaves"
|
||||
version = "0.1.0"
|
||||
source = { virtual = "." }
|
||||
dependencies = [
|
||||
{ name = "aiofiles" },
|
||||
{ name = "beautifulsoup4" },
|
||||
{ name = "httpx" },
|
||||
{ name = "markdown" },
|
||||
{ name = "markdownify" },
|
||||
{ name = "markupsafe" },
|
||||
{ name = "mdformat" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [
|
||||
{ name = "aiofiles" },
|
||||
{ name = "beautifulsoup4" },
|
||||
{ name = "httpx" },
|
||||
{ name = "markdown", specifier = ">=3.8" },
|
||||
{ name = "markdownify" },
|
||||
{ name = "markupsafe" },
|
||||
{ name = "mdformat" },
|
||||
]
|
||||
Reference in New Issue
Block a user