mirror of
https://github.com/GreenComfyTea/MHR-Overlay.git
synced 2026-01-24 04:18:11 -08:00
Compare commits
305 Commits
c68d6571ec
...
v2.7.4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9e18f27f14 | ||
|
|
b013eca872 | ||
|
|
837c45bb33 | ||
|
|
30f76efd37 | ||
|
|
dad031af4b | ||
|
|
2f355308ce | ||
|
|
c6708876b1 | ||
|
|
a6160f77fd | ||
|
|
e0e7c9d824 | ||
|
|
3bd627fdfb | ||
|
|
beeb45db46 | ||
|
|
a82168fc4e | ||
|
|
d62a72a778 | ||
|
|
2390bfe8ac | ||
|
|
7398bab9ea | ||
|
|
877a48583a | ||
|
|
ee6dfe2139 | ||
|
|
d4c52617d9 | ||
|
|
30d858b1f8 | ||
|
|
3c8f5019ab | ||
|
|
4caa69930d | ||
|
|
874c89daa5 | ||
|
|
26590a3e0b | ||
|
|
1439498a67 | ||
|
|
6a876ccdb4 | ||
|
|
9560dad602 | ||
|
|
032b77ca95 | ||
|
|
efdaae5b5a | ||
|
|
419d25070b | ||
|
|
bee2e7d873 | ||
|
|
9bcc1142f6 | ||
|
|
afec53e5f1 | ||
|
|
b3cfa61660 | ||
|
|
2f10a5d9e5 | ||
|
|
0dc74d4cc9 | ||
|
|
9b82e27725 | ||
|
|
2a3c8106d5 | ||
|
|
3b89ce8303 | ||
|
|
f2e23626cf | ||
|
|
8a55873e14 | ||
|
|
b93bdd0338 | ||
|
|
f01ec08990 | ||
|
|
b6ed4f036a | ||
|
|
fedf5bc7af | ||
|
|
009eb9ffb0 | ||
|
|
b8a7f109e0 | ||
|
|
51b824e385 | ||
|
|
c8bd65556e | ||
|
|
0781662344 | ||
|
|
5bdcd1b9cf | ||
|
|
305a78b654 | ||
|
|
6236c1e088 | ||
|
|
ba571b0426 | ||
|
|
2c7c229ec9 | ||
|
|
39dbd23791 | ||
|
|
96407c07bf | ||
|
|
1f3a7d2bf8 | ||
|
|
423635400c | ||
|
|
17b89d3d7f | ||
|
|
c3d78705a3 | ||
|
|
764b72f0ea | ||
|
|
df43908a31 | ||
|
|
0f72fba92d | ||
|
|
e586534c4d | ||
|
|
0951de24e2 | ||
|
|
480bc9c9b7 | ||
|
|
cbaa537a0b | ||
|
|
c25ceee3d6 | ||
|
|
5a29b60fca | ||
|
|
41f75d19d3 | ||
|
|
43b2946939 | ||
|
|
43fc14e01e | ||
|
|
66b192717c | ||
|
|
bfd9463c9e | ||
|
|
ae336eea2f | ||
|
|
5454bdd48e | ||
|
|
80e309a5dd | ||
|
|
f1102eaa28 | ||
|
|
bd02dab872 | ||
|
|
8887f3c235 | ||
|
|
5177a207a9 | ||
|
|
50131b08f1 | ||
|
|
89bb48602d | ||
|
|
1580b4c4c2 | ||
|
|
5c42502700 | ||
|
|
d7a4450a37 | ||
|
|
590b3b17c2 | ||
|
|
e20af6479e | ||
|
|
6bab1b2435 | ||
|
|
195252ed70 | ||
|
|
b9a3088658 | ||
|
|
a8060c8c58 | ||
|
|
49cac58bec | ||
|
|
af53399c50 | ||
|
|
a418bb0132 | ||
|
|
5f609a588a | ||
|
|
8fb02699cc | ||
|
|
b52c903af3 | ||
|
|
8ae3928fdc | ||
|
|
bf282ca13b | ||
|
|
c7b9e5b8f9 | ||
|
|
e67fbf923f | ||
|
|
1d31a86a3f | ||
|
|
e4108f7fa9 | ||
|
|
4ede59c8c2 | ||
|
|
2db41e237f | ||
|
|
f9c1d89843 | ||
|
|
f086ff2d5d | ||
|
|
5e5df84308 | ||
|
|
528d7f7238 | ||
|
|
1c83b282ef | ||
|
|
a41ec08903 | ||
|
|
89571bd2f4 | ||
|
|
1fcb9aea5a | ||
|
|
13e68d67a9 | ||
|
|
67e0e6db6b | ||
|
|
e79660010b | ||
|
|
c597d1df09 | ||
|
|
bcb6355b61 | ||
|
|
4f5350b631 | ||
|
|
475cd22610 | ||
|
|
a33b196521 | ||
|
|
d5b83eef2a | ||
|
|
2efdbd5f1a | ||
|
|
5125de6701 | ||
|
|
1c9eff6b06 | ||
|
|
6456e3bfaf | ||
|
|
f23cce3ba1 | ||
|
|
6528394876 | ||
|
|
fcfdb33dbf | ||
|
|
6f742d3234 | ||
|
|
64130aa68c | ||
|
|
1f0cd6e883 | ||
|
|
2d669a6c4a | ||
|
|
2d77b78a1c | ||
|
|
aac30e7a08 | ||
|
|
f2675e6d23 | ||
|
|
5ff6af9108 | ||
|
|
728b7f990f | ||
|
|
758a02bce8 | ||
|
|
9d16048c8d | ||
|
|
084dd9667e | ||
|
|
c509876712 | ||
|
|
7b63e34ad0 | ||
|
|
c6a520996f | ||
|
|
f6fefb19d4 | ||
|
|
1c20591b33 | ||
|
|
3e66b920ef | ||
|
|
7f38532026 | ||
|
|
b805d88205 | ||
|
|
a100932a02 | ||
|
|
692e911617 | ||
|
|
6c2d09b505 | ||
|
|
26966818b3 | ||
|
|
e09c82278d | ||
|
|
e1d3754733 | ||
|
|
6b8809b79e | ||
|
|
d20446fe37 | ||
|
|
4e4aae3c68 | ||
|
|
3e121fbd1c | ||
|
|
ade8a6bf19 | ||
|
|
0eac453bf4 | ||
|
|
c4b7f6d195 | ||
|
|
e389f6cf53 | ||
|
|
9e8c77f480 | ||
|
|
9c2bc59a37 | ||
|
|
effe5579a7 | ||
|
|
0fbf47f7ff | ||
|
|
3e508c0e28 | ||
|
|
972d874a99 | ||
|
|
50726b9291 | ||
|
|
c39e5babea | ||
|
|
d1f56f4316 | ||
|
|
d3efcb5b08 | ||
|
|
681b865f03 | ||
|
|
6f40a1dfd3 | ||
|
|
432e115aea | ||
|
|
dfb7893c1a | ||
|
|
4bdb4ee2e6 | ||
|
|
30672922c4 | ||
|
|
31b5251c75 | ||
|
|
71b1992710 | ||
|
|
63ddbff12a | ||
|
|
0359042c97 | ||
|
|
c8dab31265 | ||
|
|
405c5e4aad | ||
|
|
597d27b935 | ||
|
|
90190f5af7 | ||
|
|
b5757e3b1e | ||
|
|
0992b918a3 | ||
|
|
7865b3276c | ||
|
|
cc1fe03272 | ||
|
|
57585cb5b5 | ||
|
|
96563f92f7 | ||
|
|
ea29e20a2c | ||
|
|
0a84471abc | ||
|
|
da2af8671a | ||
|
|
474d0b9eb8 | ||
|
|
e4057b84f5 | ||
|
|
3ac048aef9 | ||
|
|
9c3085198d | ||
|
|
ecf119dd97 | ||
|
|
663b456a4f | ||
|
|
e571ca62eb | ||
|
|
3b99512bb6 | ||
|
|
0fe53700ae | ||
|
|
488da17887 | ||
|
|
25d0035c16 | ||
|
|
34ac9e3c54 | ||
|
|
ce212ff757 | ||
|
|
cd1d90b66b | ||
|
|
788152aecd | ||
|
|
e51185892a | ||
|
|
6862331ca9 | ||
|
|
59f11c4933 | ||
|
|
8bcd5e0c4a | ||
|
|
c56976b97f | ||
|
|
5af7f53962 | ||
|
|
8e77df6fed | ||
|
|
d68aacc5bf | ||
|
|
4f34f76ad7 | ||
|
|
4da0e1f0c8 | ||
|
|
7ad40bbb89 | ||
|
|
e2354eedcc | ||
|
|
20dfde17d4 | ||
|
|
72ca959581 | ||
|
|
cd2aa12d3c | ||
|
|
865512f8d6 | ||
|
|
ecd150eb4d | ||
|
|
585860666f | ||
|
|
e6556e8d9b | ||
|
|
40820f98a7 | ||
|
|
dd8a6bc2d7 | ||
|
|
5dbfcb89f4 | ||
|
|
75a7d8fa8c | ||
|
|
d4e97854c3 | ||
|
|
81a803cc7c | ||
|
|
9b1ff5b264 | ||
|
|
94e9e5d18b | ||
|
|
96afca0ade | ||
|
|
f627a0b19b | ||
|
|
ad2097b380 | ||
|
|
a08ecff5d7 | ||
|
|
3dcb55e086 | ||
|
|
23df95e30e | ||
|
|
ba3ec120b2 | ||
|
|
c8cad67d15 | ||
|
|
3090e6bb6a | ||
|
|
0a9c8488d6 | ||
|
|
c2531b77a2 | ||
|
|
6a4f4a9dfe | ||
|
|
7346b8d96f | ||
|
|
7158c0d367 | ||
|
|
c145c8a37b | ||
|
|
c1464dcc12 | ||
|
|
6723091294 | ||
|
|
650eba5568 | ||
|
|
80b6977e0f | ||
|
|
ce250961fe | ||
|
|
09d82dea54 | ||
|
|
c74a93a3b2 | ||
|
|
ccd64f534c | ||
|
|
60bcd5770d | ||
|
|
9252beba11 | ||
|
|
9958817989 | ||
|
|
fcf35d817f | ||
|
|
b1d84ab739 | ||
|
|
82033313ba | ||
|
|
23213fcab0 | ||
|
|
976abee356 | ||
|
|
d8f6e2f9bb | ||
|
|
a0a4df7b91 | ||
|
|
667be5793e | ||
|
|
b321896eeb | ||
|
|
3b94c67071 | ||
|
|
7b9e376db1 | ||
|
|
fdab487b7e | ||
|
|
b9d44a9b67 | ||
|
|
3513d77714 | ||
|
|
9a3cb399e2 | ||
|
|
a8ec321dae | ||
|
|
575b46c70d | ||
|
|
592defcd99 | ||
|
|
a84c698a4b | ||
|
|
f0eb9673b0 | ||
|
|
add4cca6f1 | ||
|
|
5b0ed78e27 | ||
|
|
12149d19f5 | ||
|
|
a6762490d0 | ||
|
|
d4c4267c35 | ||
|
|
a0e6974ad7 | ||
|
|
b36b1080df | ||
|
|
5e43efb907 | ||
|
|
d99879bd75 | ||
|
|
45aab796de | ||
|
|
673bf28451 | ||
|
|
2dde202501 | ||
|
|
ed6f59655c | ||
|
|
f2cf0ddcbc | ||
|
|
8f3ff25fd6 | ||
|
|
cc93a617f1 | ||
|
|
869656503b | ||
|
|
5d6371a05c | ||
|
|
c8a3431697 | ||
|
|
720d451a0e |
2
LICENSE
2
LICENSE
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2022 GreenComfyTea
|
||||
Copyright (c) 2023 GreenComfyTea
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
170
README.md
170
README.md
@@ -1,10 +1,130 @@
|
||||
# "MHR Overlay" Mod for Monster Hunter: Rise
|
||||
<p align="center">
|
||||
<h2 align="center"><b>"MHR Overlay" Mod for Monster Hunter: Rise</b></h2>
|
||||
<p align="center">Exposes internal game data about monsters, creatures, players, damage, buffs and debuffs. Draws a highly customizable UI.</p>
|
||||
<p align="center">This mod is solely intended to empower players with means of self-improvement. Please don't use the information provided by this tool to make hurtful comments and actions toward other players.</p>
|
||||
</p>
|
||||
|
||||
Exposes in-game data about monsters, creatures, players and damage. Draws a highly customizable UI.
|
||||
<p align="center">
|
||||
<a href="https://github.com/greencomfytea/mhr-overlay/graphs/contributors">
|
||||
<img alt="Contributors" src="https://custom-icon-badges.demolab.com/github/contributors/greencomfytea/mhr-overlay?logo=person-add" />
|
||||
</a>
|
||||
<a href="https://github.com/greencomfytea/mhr-overlay/issues">
|
||||
<img alt="Issues" src="https://custom-icon-badges.demolab.com/github/issues/greencomfytea/mhr-overlay?logo=issue-opened" />
|
||||
</a>
|
||||
<a href="https://github.com/greencomfytea/mhr-overlay/issues">
|
||||
<img alt="Issues Closed" src="https://custom-icon-badges.demolab.com/github/issues-closed/greencomfytea/mhr-overlay?logo=issue-closed" />
|
||||
</a>
|
||||
<a href="https://github.com/greencomfytea/mhr-overlay/pulls">
|
||||
<img alt="Pull Requests" src="https://custom-icon-badges.demolab.com/github/issues-pr/greencomfytea/mhr-overlay?logo=git-pull-request" />
|
||||
</a>
|
||||
<a href="https://github.com/greencomfytea/mhr-overlay/pulls">
|
||||
<img alt="Pull Requests Closed" src="https://custom-icon-badges.demolab.com/github/issues-pr-closed/greencomfytea/mhr-overlay?logo=git-pull-request-closed" />
|
||||
</a>
|
||||
<br>
|
||||
<a href="https://github.com/greencomfytea/mhr-overlay/blob/main/LICENSE">
|
||||
<img alt="License" src="https://custom-icon-badges.demolab.com/github/license/greencomfytea/mhr-overlay?logo=law" />
|
||||
</a>
|
||||
<a href="https://github.com/greencomfytea/mhr-overlay/releases">
|
||||
<img alt="Release Version" src="https://custom-icon-badges.demolab.com/github/v/release/greencomfytea/mhr-overlay?logo=tag" />
|
||||
</a>
|
||||
<a href="https://github.com/greencomfytea/mhr-overlay/releases">
|
||||
<img alt="Release Date" src="https://custom-icon-badges.demolab.com/github/release-date/greencomfytea/mhr-overlay?logo=clock" />
|
||||
</a>
|
||||
<a href="">
|
||||
<img alt="Platform" src="https://custom-icon-badges.demolab.com/badge/platform-win%20%7C%20linux%20%7C%20steam%20deck-blue?logo=device-desktop" />
|
||||
</a>
|
||||
<a href="">
|
||||
<img alt="Maintenance" src="https://custom-icon-badges.demolab.com/maintenance/yes/2024?logo=tools" />
|
||||
</a>
|
||||
<br>
|
||||
<a href="https://www.nexusmods.com/monsterhunterrise/mods/26">
|
||||
<img alt="REFramework Dependency" src="https://custom-icon-badges.demolab.com/badge/dependency-REFramework%20v1.5.7%2B-green?logo=package-dependencies" />
|
||||
</a>
|
||||
<a href="https://www.nexusmods.com/monsterhunterrise/mods/134">
|
||||
<img alt="REFramework Direct2D Dependency" src="https://custom-icon-badges.demolab.com/badge/dependency-REFramework%20Direct2D%20v1.0.1%2B-green?logo=package-dependencies" />
|
||||
</a>
|
||||
<br>
|
||||
<br>
|
||||
<a href="https://github.com/greencomfytea/mhr-overlay/commits/main">
|
||||
<img alt="Commits" src="https://custom-icon-badges.demolab.com/github/commit-activity/t/greencomfytea/mhr-overlay?logo=git-commit" />
|
||||
</a>
|
||||
<a href="https://github.com/greencomfytea/mhr-overlay/commits/main">
|
||||
<img alt="Last Commit" src="https://custom-icon-badges.demolab.com/github/last-commit/greencomfytea/mhr-overlay?logo=git-commit" />
|
||||
</a>
|
||||
<a href="https://github.com/greencomfytea/mhr-overlay/commits/main">
|
||||
<img alt="Commits Since" src="https://custom-icon-badges.demolab.com/github/commits-since/greencomfytea/mhr-overlay/latest?logo=git-commit" />
|
||||
</a>
|
||||
<br>
|
||||
<a href="https://github.com/greencomfytea/mhr-overlay/graphs/commit-activity">
|
||||
<img alt="Commit Activity (Year)" src="https://custom-icon-badges.demolab.com/github/commit-activity/y/greencomfytea/mhr-overlay?logo=pulse" />
|
||||
</a>
|
||||
<a href="https://github.com/greencomfytea/mhr-overlay/graphs/commit-activity">
|
||||
<img alt="Commit Activity (Month)" src="https://custom-icon-badges.demolab.com/github/commit-activity/m/greencomfytea/mhr-overlay?logo=pulse" />
|
||||
</a>
|
||||
<a href="https://github.com/greencomfytea/mhr-overlay/graphs/commit-activity">
|
||||
<img alt="Commit Activity (Week)" src="https://custom-icon-badges.demolab.com/github/commit-activity/w/greencomfytea/mhr-overlay?logo=pulse" />
|
||||
</a>
|
||||
<br>
|
||||
<br>
|
||||
<a href="">
|
||||
<img alt="Repo Size" src="https://custom-icon-badges.demolab.com/github/repo-size/greencomfytea/mhr-overlay?logo=database" />
|
||||
</a>
|
||||
<a href="">
|
||||
<img alt="Line Count" src="https://sloc.xyz/github/greencomfytea/mhr-overlay" />
|
||||
</a>
|
||||
<a href="">
|
||||
<img alt="COCOMO" src="https://sloc.xyz/github/greencomfytea/mhr-overlay/?category=cocomo" />
|
||||
</a>
|
||||
<a href="">
|
||||
<img alt="Goto Counter" src="https://custom-icon-badges.demolab.com/github/search/greencomfytea/mhr-overlay/goto?logo=git-compare" />
|
||||
</a>
|
||||
<br>
|
||||
<a href="https://github.com/sponsors/greencomfytea">
|
||||
<img alt="Sponsors" src="https://custom-icon-badges.demolab.com/github/sponsors/greencomfytea?logo=heart" />
|
||||
</a>
|
||||
<a href="https://github.com/GreenComfyTea/mhr-overlay/watchers">
|
||||
<img alt="Watchers" src="https://custom-icon-badges.demolab.com/github/watchers/greencomfytea/mhr-overlay?logo=eye" />
|
||||
</a>
|
||||
<a href="https://github.com/greencomfytea/mhr-overlay/forks">
|
||||
<img alt="Forks" src="https://custom-icon-badges.demolab.com/github/forks/greencomfytea/mhr-overlay?logo=repo-forked" />
|
||||
</a>
|
||||
<a href="https://github.com/greencomfytea/mhr-overlay/stargazers">
|
||||
<img alt="Stars" src="https://custom-icon-badges.demolab.com/github/stars/greencomfytea/mhr-overlay?logo=star" />
|
||||
</a>
|
||||
<a href="https://github.com/greencomfytea/mhr-overlay/graphs/traffic">
|
||||
<img alt="Hits" src="https://custom-icon-badges.demolab.com/endpoint?url=https://hits.dwyl.com/greencomfytea/mhr-overlay.json?color=blue&logo=eye" />
|
||||
</a>
|
||||
<br>
|
||||
<br>
|
||||
<a href="https://www.nexusmods.com/monsterhunterrise/mods/50">
|
||||
<img alt="Website" src="https://custom-icon-badges.demolab.com/website?down_color=red&down_message=down&up_color=brightgreen&up_message=up&logo=link&url=https://www.nexusmods.com/monsterhunterrise/mods/50" />
|
||||
</a>
|
||||
<a href="https://github.com/greencomfytea?tab=followers">
|
||||
<img alt="Followers" src="https://custom-icon-badges.demolab.com/github/followers/greencomfytea?logo=people" />
|
||||
</a>
|
||||
<a href="https://twitter.com/greencomfytea">
|
||||
<img alt="Twitter" src="https://img.shields.io/twitter/follow/greencomfytea?logo=twitter" />
|
||||
</a>
|
||||
<a href="https://www.twitch.tv/greencomfytea">
|
||||
<img alt="Twitch" src="https://img.shields.io/twitch/status/greencomfytea?logo=twitch" />
|
||||
</a>
|
||||
<br>
|
||||
<a href="https://github.com/greencomfytea">
|
||||
<img alt="Author" src="https://custom-icon-badges.demolab.com/badge/author-GreenComfyTea-green?logo=person" />
|
||||
</a>
|
||||
<a href="https://github.com/topics/open-source">
|
||||
<img alt="Open Source" src="https://img.shields.io/badge/open%20source-%20yes-brightgreen?logo=openvpn" />
|
||||
</a>
|
||||
<a href="https://cursey.github.io/reframework-book/index.html#lua-scripting">
|
||||
<img alt="Written in" src="https://custom-icon-badges.demolab.com/badge/written in-lua-000080?logo=terminal" />
|
||||
</a>
|
||||
</p>
|
||||
|
||||
**This mod is solely intended to empower players with means of self-improvement. Please don't use the information provided by this tool to make hurtful comments and actions toward other players.**
|
||||
|
||||

|
||||
<p align="center">
|
||||
<a>
|
||||
<img align="center" src="https://user-images.githubusercontent.com/30152047/183250401-9f2898dd-feb4-4903-802c-c9d398261f11.png" />
|
||||
</a>
|
||||
</p>
|
||||
|
||||
# Links
|
||||
* **[Nexus Mods](https://www.nexusmods.com/monsterhunterrise/mods/50)**
|
||||
@@ -15,28 +135,35 @@ Exposes in-game data about monsters, creatures, players and damage. Draws a high
|
||||
* **[Troubleshooting](https://github.com/GreenComfyTea/MHR-Overlay/wiki/Troubleshooting)**
|
||||
|
||||
# Requirements
|
||||
1. [REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26) (v1.3.4 or above);
|
||||
2. [REFramework Direct2D](https://www.nexusmods.com/monsterhunterrise/mods/134) (v0.4.0 or above).
|
||||
1. **[REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26)** (v1.503+);
|
||||
2. **[REFramework Direct2D](https://www.nexusmods.com/monsterhunterrise/mods/134)** (v1.0.0+) - Needed for Unicode Support.
|
||||
|
||||
# How to install:
|
||||
1. Install [REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26);
|
||||
2. (Windows only) Install [REFramework Direct2D](https://www.nexusmods.com/monsterhunterrise/mods/134);
|
||||
>**:pushpin: NOTE:** Skip this step if you are using Steam Deck/Proton/Wine/Linux. REFramework Direct2D **must not** be installed for the mod to work.
|
||||
1. Install **[REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26)**;
|
||||
2. Install **[REFramework Direct2D](https://www.nexusmods.com/monsterhunterrise/mods/134)**;
|
||||
>**:pushpin: Windows:** Works normally.
|
||||
|
||||
>**:pushpin: Linux:** Latest Experimental Proton seems to have it working normally as well (https://github.com/cursey/reframework-d2d/issues/5).
|
||||
|
||||
>**:pushpin: Steam Deck:** I've seen people getting it working but I don't have the exact instructions. You will have to figure it out yourself and/or search the nexus pages for information (**[REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26?tab=description)**, **[REFramework Direct2D](https://www.nexusmods.com/monsterhunterrise/mods/134)**, **[MHR Overlay](https://www.nexusmods.com/monsterhunterrise/mods/50)**).
|
||||
|
||||
3. Download the mod:
|
||||
* Official release can be downloaded from [Nexus Mods](https://www.nexusmods.com/monsterhunterrise/mods/50);
|
||||
* Nightly builds are available in [this repo](https://github.com/GreenComfyTea/MHR-Overlay) and can contain broken functionality, debugging info on screen, bugs and might require the latest [nightly build](https://github.com/praydog/REFramework-nightly/releases) of [REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26). Use with caution!
|
||||
4. Extract the mod from the archive and place it in MonsterHunterRise folder. Refer to [FAQ](https://github.com/GreenComfyTea/MHR-Overlay/wiki/FAQ) to verify how the file hierarchy should look like if everything is done correctly.
|
||||
* Official release can be downloaded from **[Nexus Mods](https://www.nexusmods.com/monsterhunterrise/mods/50)**;
|
||||
* Nightly builds are available in **[this repo](https://github.com/GreenComfyTea/MHR-Overlay)** and can contain broken functionality, debugging info on screen, bugs and might require the latest **[nightly build](https://github.com/praydog/REFramework-nightly/releases)** of **[REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26)**. Use with caution!
|
||||
4. Extract the mod from the archive and place it in MonsterHunterRise folder. Refer to **[FAQ](https://github.com/GreenComfyTea/MHR-Overlay/wiki/FAQ)** to verify how the file hierarchy should look like if everything is done correctly.
|
||||
|
||||
# Credits
|
||||
**GreenComfyTea** - creator of the mod and it's main contributor.
|
||||
**cursecat** - creator of [REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26), [REFramework Direct2D](https://www.nexusmods.com/monsterhunterrise/mods/134) plugin and [Monster Has HP Bar](https://www.nexusmods.com/monsterhunterrise/mods/43) mod, which provided an example on how to retrieve monster HP data.
|
||||
**praydog2** - creator of [REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26). Contributed huge improvements to the performance of the mod.
|
||||
**coavins** - creator of [coavins damage meter](https://www.nexusmods.com/monsterhunterrise/mods/68) mod.
|
||||
**[GreenComfyTea](https://github.com/GreenComfyTea)** - creator of the mod and it's main contributor.
|
||||
**[cursey](https://github.com/cursey)** - creator of [REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26), [REFramework Direct2D](https://www.nexusmods.com/monsterhunterrise/mods/134) plugin and [Monster Has HP Bar](https://www.nexusmods.com/monsterhunterrise/mods/43) mod, which provided an example on how to retrieve monster HP data.
|
||||
**[praydog](https://github.com/praydog)** - creator of [REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26). Contributed huge improvements to the performance of the mod.
|
||||
**[coavins](https://github.com/coavins)** - creator of [coavins damage meter](https://www.nexusmods.com/monsterhunterrise/mods/68) mod.
|
||||
**[lingsamuel](https://github.com/lingsamuel)** - creator of [Data Reporter and Buff Notification](https://www.nexusmods.com/monsterhunterrise/mods/1609) mod.
|
||||
|
||||
**neatnet** - Korean translation.
|
||||
**s9000008** - Traditional Chinese translation.
|
||||
**etnAtker** - Simplified Chinese translation.
|
||||
**AKILAND0214** - Japanese translation.
|
||||
**[neatnet](https://github.com/neatnet)** - Korean translation.
|
||||
**[s9000008](https://github.com/s9000008)**, **[mcc1](https://github.com/mcc1)** - Traditional Chinese translation.
|
||||
**[etnAtker](https://github.com/etnAtker)**, **[sukiqwq](https://github.com/sukiqwq)** - Simplified Chinese translation.
|
||||
**[AKILAND0214](https://github.com/AKILAND0214)** - Japanese translation.
|
||||
**[Krude](https://github.com/Krude)** - German translation.
|
||||
***
|
||||
# Support
|
||||
|
||||
@@ -48,4 +175,3 @@ You can support me by donating! I would appreciate it! But anyway, thank you for
|
||||
<a href="https://ko-fi.com/greencomfytea">
|
||||
<img alt="Qries" src="https://panels.twitch.tv/panel-48897356-image-c2fcf835-87e4-408e-81e8-790789c7acbc">
|
||||
</a>
|
||||
|
||||
|
||||
@@ -1,20 +1,63 @@
|
||||
xy = "";
|
||||
|
||||
local debug = require("MHR_Overlay.Misc.debug");
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
local keyboard = require("MHR_Overlay.Game_Handler.keyboard");
|
||||
local quest_status = require("MHR_Overlay.Game_Handler.quest_status");
|
||||
local screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
local singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
local time = require("MHR_Overlay.Game_Handler.time");
|
||||
local error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
|
||||
local config = require("MHR_Overlay.Misc.config");
|
||||
local language = require("MHR_Overlay.Misc.language");
|
||||
local table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
local unicode_helpers = require("MHR_Overlay.Misc.unicode_helpers");
|
||||
local part_names = require("MHR_Overlay.Misc.part_names");
|
||||
local utils = require("MHR_Overlay.Misc.utils");
|
||||
|
||||
local player = require("MHR_Overlay.Damage_Meter.player");
|
||||
local player_info = require("MHR_Overlay.Misc.player_info");
|
||||
|
||||
local buffs = require("MHR_Overlay.Buffs.buffs");
|
||||
local item_buffs = require("MHR_Overlay.Buffs.item_buffs");
|
||||
local melody_effects = require("MHR_Overlay.Buffs.melody_effects");
|
||||
local endemic_life_buffs = require("MHR_Overlay.Buffs.endemic_life_buffs");
|
||||
local skills = require("MHR_Overlay.Buffs.skills");
|
||||
local dango_skills = require("MHR_Overlay.Buffs.dango_skills");
|
||||
local abnormal_statuses = require("MHR_Overlay.Buffs.abnormal_statuses");
|
||||
local otomo_moves = require("MHR_Overlay.Buffs.otomo_moves");
|
||||
local weapon_skills = require("MHR_Overlay.Buffs.weapon_skills");
|
||||
local rampage_skills = require("MHR_Overlay.Buffs.rampage_skills");
|
||||
local misc_buffs = require("MHR_Overlay.Buffs.misc_buffs");
|
||||
|
||||
local players = require("MHR_Overlay.Damage_Meter.players");
|
||||
local non_players = require("MHR_Overlay.Damage_Meter.non_players");
|
||||
local damage_hook = require("MHR_Overlay.Damage_Meter.damage_hook");
|
||||
|
||||
local env_creature_hook = require("MHR_Overlay.Endemic_Life.env_creature_hook");
|
||||
@@ -33,6 +76,8 @@ local large_monster_UI = require("MHR_Overlay.UI.Modules.large_monster_UI");
|
||||
local small_monster_UI = require("MHR_Overlay.UI.Modules.small_monster_UI");
|
||||
local time_UI = require("MHR_Overlay.UI.Modules.time_UI");
|
||||
local env_creature_UI = require("MHR_Overlay.UI.Modules.env_creature_UI");
|
||||
local buff_UI = require("MHR_Overlay.UI.Modules.buff_UI");
|
||||
local stats_UI = require("MHR_Overlay.UI.Modules.stats_UI");
|
||||
|
||||
local body_part_UI_entity = require("MHR_Overlay.UI.UI_Entities.body_part_UI_entity");
|
||||
local damage_UI_entity = require("MHR_Overlay.UI.UI_Entities.damage_UI_entity");
|
||||
@@ -41,6 +86,7 @@ local stamina_UI_entity = require("MHR_Overlay.UI.UI_Entities.stamina_UI_entity"
|
||||
local rage_UI_entity = require("MHR_Overlay.UI.UI_Entities.rage_UI_entity");
|
||||
local ailment_UI_entity = require("MHR_Overlay.UI.UI_Entities.ailment_UI_entity");
|
||||
local ailment_buildup_UI_entity = require("MHR_Overlay.UI.UI_Entities.ailment_buildup_UI_entity");
|
||||
local buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
|
||||
|
||||
local customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
local label_customization = require("MHR_Overlay.UI.Customizations.label_customization");
|
||||
@@ -53,24 +99,103 @@ local rage_customization = require("MHR_Overlay.UI.Customizations.rage_customiza
|
||||
local body_parts_customization = require("MHR_Overlay.UI.Customizations.body_parts_customization");
|
||||
local ailments_customization = require("MHR_Overlay.UI.Customizations.ailments_customization");
|
||||
local ailment_buildups_customization = require("MHR_Overlay.UI.Customizations.ailment_buildups_customization");
|
||||
|
||||
local module_visibility_customization = require("MHR_Overlay.UI.Customizations.module_visibility_customization");
|
||||
local large_monster_UI_customization = require("MHR_Overlay.UI.Customizations.large_monster_UI_customization");
|
||||
|
||||
local drawing = require("MHR_Overlay.UI.drawing");
|
||||
|
||||
------------------------INIT MODULES-------------------------
|
||||
-- #region
|
||||
screen.init_module();
|
||||
singletons.init_module();
|
||||
table_helpers.init_module();
|
||||
unicode_helpers.init_module();
|
||||
time.init_module();
|
||||
|
||||
error_handler.init_dependencies();
|
||||
screen.init_dependencies();
|
||||
singletons.init_dependencies();
|
||||
utils.init_dependencies();
|
||||
time.init_dependencies();
|
||||
|
||||
language.init_dependencies();
|
||||
config.init_dependencies();
|
||||
part_names.init_dependencies();
|
||||
|
||||
damage_UI_entity.init_dependencies();
|
||||
health_UI_entity.init_dependencies();
|
||||
stamina_UI_entity.init_dependencies();
|
||||
rage_UI_entity.init_dependencies();
|
||||
ailment_UI_entity.init_dependencies();
|
||||
ailment_buildup_UI_entity.init_dependencies();
|
||||
body_part_UI_entity.init_dependencies();
|
||||
buff_UI_entity.init_dependencies();
|
||||
|
||||
player_info.init_dependencies();
|
||||
|
||||
buffs.init_dependencies();
|
||||
item_buffs.init_dependencies();
|
||||
melody_effects.init_dependencies();
|
||||
endemic_life_buffs.init_dependencies();
|
||||
skills.init_dependencies();
|
||||
dango_skills.init_dependencies();
|
||||
abnormal_statuses.init_dependencies();
|
||||
otomo_moves.init_dependencies();
|
||||
weapon_skills.init_dependencies();
|
||||
rampage_skills.init_dependencies();
|
||||
misc_buffs.init_dependencies();
|
||||
|
||||
damage_hook.init_dependencies();
|
||||
players.init_dependencies();
|
||||
non_players.init_dependencies();
|
||||
quest_status.init_dependencies();
|
||||
|
||||
env_creature_hook.init_dependencies();
|
||||
env_creature.init_dependencies();
|
||||
|
||||
body_part.init_dependencies();
|
||||
ailments.init_dependencies();
|
||||
large_monster.init_dependencies();
|
||||
monster_hook.init_dependencies();
|
||||
small_monster.init_dependencies();
|
||||
ailment_hook.init_dependencies();
|
||||
ailment_buildup.init_dependencies();
|
||||
|
||||
label_customization.init_dependencies();
|
||||
bar_customization.init_dependencies();
|
||||
line_customization.init_dependencies();
|
||||
large_monster_UI_customization.init_dependencies();
|
||||
|
||||
label_customization.init_dependencies();
|
||||
bar_customization.init_dependencies();
|
||||
health_customization.init_dependencies();
|
||||
stamina_customization.init_dependencies();
|
||||
rage_customization.init_dependencies();
|
||||
body_parts_customization.init_dependencies();
|
||||
ailments_customization.init_dependencies();
|
||||
ailment_buildups_customization.init_dependencies();
|
||||
module_visibility_customization.init_dependencies();
|
||||
customization_menu.init_dependencies();
|
||||
|
||||
drawing.init_dependencies();
|
||||
|
||||
damage_meter_UI.init_dependencies();
|
||||
large_monster_UI.init_dependencies();
|
||||
small_monster_UI.init_dependencies();
|
||||
time_UI.init_dependencies();
|
||||
env_creature_UI.init_dependencies();
|
||||
buff_UI.init_dependencies();
|
||||
stats_UI.init_dependencies();
|
||||
|
||||
keyboard.init_dependencies();
|
||||
|
||||
------------------------------------------------------------
|
||||
|
||||
error_handler.init_module();
|
||||
language.init_module();
|
||||
config.init_module();
|
||||
quest_status.init_module();
|
||||
part_names.init_module();
|
||||
|
||||
screen.init_module();
|
||||
singletons.init_module();
|
||||
utils.init_module();
|
||||
time.init_module();
|
||||
|
||||
damage_UI_entity.init_module();
|
||||
health_UI_entity.init_module();
|
||||
stamina_UI_entity.init_module();
|
||||
@@ -78,9 +203,26 @@ rage_UI_entity.init_module();
|
||||
ailment_UI_entity.init_module();
|
||||
ailment_buildup_UI_entity.init_module();
|
||||
body_part_UI_entity.init_module();
|
||||
buff_UI_entity.init_module();
|
||||
|
||||
player_info.init_module();
|
||||
|
||||
buffs.init_module();
|
||||
item_buffs.init_module();
|
||||
melody_effects.init_module();
|
||||
endemic_life_buffs.init_module();
|
||||
skills.init_module();
|
||||
dango_skills.init_module();
|
||||
abnormal_statuses.init_module();
|
||||
otomo_moves.init_module();
|
||||
weapon_skills.init_module();
|
||||
rampage_skills.init_module();
|
||||
misc_buffs.init_module();
|
||||
|
||||
damage_hook.init_module();
|
||||
player.init_module();
|
||||
players.init_module();
|
||||
non_players.init_module();
|
||||
quest_status.init_module();
|
||||
|
||||
env_creature_hook.init_module();
|
||||
env_creature.init_module();
|
||||
@@ -93,7 +235,6 @@ small_monster.init_module();
|
||||
ailment_hook.init_module();
|
||||
ailment_buildup.init_module();
|
||||
|
||||
customization_menu.init_module();
|
||||
label_customization.init_module();
|
||||
bar_customization.init_module();
|
||||
line_customization.init_module();
|
||||
@@ -107,6 +248,8 @@ rage_customization.init_module();
|
||||
body_parts_customization.init_module();
|
||||
ailments_customization.init_module();
|
||||
ailment_buildups_customization.init_module();
|
||||
module_visibility_customization.init_module();
|
||||
customization_menu.init_module();
|
||||
|
||||
drawing.init_module();
|
||||
|
||||
@@ -115,6 +258,8 @@ large_monster_UI.init_module();
|
||||
small_monster_UI.init_module();
|
||||
time_UI.init_module();
|
||||
env_creature_UI.init_module();
|
||||
buff_UI.init_module();
|
||||
stats_UI.init_module();
|
||||
|
||||
keyboard.init_module();
|
||||
|
||||
@@ -124,156 +269,255 @@ log.info("[MHR Overlay] Loaded.");
|
||||
|
||||
----------------------------LOOP-----------------------------
|
||||
-- #region
|
||||
local function main_loop()
|
||||
customization_menu.status = "OK";
|
||||
singletons.init();
|
||||
screen.update_window_size();
|
||||
player.update_myself_position();
|
||||
quest_status.update_is_online();
|
||||
quest_status.update_is_result_screen();
|
||||
quest_status.update_is_host();
|
||||
time.tick();
|
||||
|
||||
--xy = tostring(singletons.quest_manager:call("isPlayQuest")) ..
|
||||
--"\n" .. tostring(singletons.quest_manager:call("isActiveQuest")) ..
|
||||
--"\n" .. tostring(singletons.quest_manager:call("isSingleQuest")) ..
|
||||
--"\n" .. tostring(singletons.quest_manager:call("isStartQuest")) ..
|
||||
--"\n" .. tostring(quest_status.index);
|
||||
local function update_modules(module_visibility_config, flow_state_name)
|
||||
local current_config = config.current_config;
|
||||
|
||||
player.update_player_list(quest_status.index >= 2);
|
||||
if quest_status.index < 2 then
|
||||
quest_status.update_is_training_area();
|
||||
|
||||
if quest_status.is_training_area then
|
||||
local dynamic_enabled = config.current_config.large_monster_UI.dynamic.enabled and
|
||||
config.current_config.global_settings.module_visibility.training_area
|
||||
.large_monster_dynamic_UI;
|
||||
local static_enabled = config.current_config.large_monster_UI.static.enabled and
|
||||
config.current_config.global_settings.module_visibility.training_area.large_monster_static_UI;
|
||||
local highlighted_enabled = config.current_config.large_monster_UI.highlighted.enabled and
|
||||
config.current_config.global_settings.module_visibility.training_area
|
||||
.large_monster_highlighted_UI;
|
||||
|
||||
if dynamic_enabled or static_enabled or highlighted_enabled then
|
||||
local success = pcall(large_monster_UI.draw, dynamic_enabled, static_enabled, highlighted_enabled);
|
||||
if not success then
|
||||
customization_menu.status = "Large monster drawing function threw an exception";
|
||||
end
|
||||
end
|
||||
|
||||
if config.current_config.damage_meter_UI.enabled and
|
||||
config.current_config.global_settings.module_visibility.training_area.damage_meter_UI then
|
||||
local success = pcall(damage_meter_UI.draw);
|
||||
if not success then
|
||||
customization_menu.status = "Damage meter drawing function threw an exception";
|
||||
end
|
||||
end
|
||||
|
||||
if config.current_config.endemic_life_UI.enabled and
|
||||
config.current_config.global_settings.module_visibility.training_area.endemic_life_UI then
|
||||
local success = pcall(env_creature_UI.draw);
|
||||
if not success then
|
||||
customization_menu.status = "Endemic life drawing function threw an exception";
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif quest_status.is_result_screen then
|
||||
if config.current_config.small_monster_UI.enabled and
|
||||
config.current_config.global_settings.module_visibility.quest_result_screen.small_monster_UI then
|
||||
local success = pcall(small_monster_UI.draw);
|
||||
if not success then
|
||||
customization_menu.status = "Small monster drawing function threw an exception";
|
||||
end
|
||||
if module_visibility_config.small_monster_UI and current_config.small_monster_UI.enabled then
|
||||
local success, error = pcall(small_monster_UI.update);
|
||||
if not success then
|
||||
error_handler.report("MHR_Overlay.update_modules", string.format("[%s] Small Monster UI: %s", flow_state_name, tostring(error)));
|
||||
end
|
||||
end
|
||||
|
||||
local dynamic_enabled = config.current_config.large_monster_UI.dynamic.enabled and
|
||||
config.current_config.global_settings.module_visibility.quest_result_screen
|
||||
.large_monster_dynamic_UI;
|
||||
local static_enabled = config.current_config.large_monster_UI.static.enabled and
|
||||
config.current_config.global_settings.module_visibility.quest_result_screen
|
||||
.large_monster_static_UI;
|
||||
local highlighted_enabled = config.current_config.large_monster_UI.highlighted.enabled and
|
||||
config.current_config.global_settings.module_visibility.quest_result_screen
|
||||
.large_monster_highlighted_UI;
|
||||
local large_monster_UI_config = current_config.large_monster_UI;
|
||||
|
||||
local dynamic_enabled = large_monster_UI_config.dynamic.enabled and module_visibility_config.large_monster_dynamic_UI;
|
||||
local static_enabled = large_monster_UI_config.static.enabled and module_visibility_config.large_monster_static_UI;
|
||||
local highlighted_enabled = large_monster_UI_config.highlighted.enabled and module_visibility_config.large_monster_highlighted_UI;
|
||||
|
||||
if dynamic_enabled or static_enabled or highlighted_enabled then
|
||||
local success, error = pcall(large_monster_UI.update, dynamic_enabled, static_enabled, highlighted_enabled);
|
||||
if not success then
|
||||
error_handler.report("MHR_Overlay.update_modules", string.format("[%s] Large Monster UI: %s", flow_state_name, tostring(error)));
|
||||
end
|
||||
end
|
||||
|
||||
if current_config.damage_meter_UI.enabled and module_visibility_config.damage_meter_UI then
|
||||
local success, error = pcall(damage_meter_UI.update);
|
||||
if not success then
|
||||
error_handler.report("MHR_Overlay.update_modules", string.format("[%s] Damage Meter UI: %s", flow_state_name, tostring(error)));
|
||||
end
|
||||
end
|
||||
|
||||
if current_config.endemic_life_UI.enabled and module_visibility_config.endemic_life_UI then
|
||||
local success, error = pcall(env_creature_UI.update);
|
||||
if not success then
|
||||
error_handler.report("MHR_Overlay.update_modules", string.format("[%s] Endemic Life UI: %s", flow_state_name, tostring(error)));
|
||||
end
|
||||
end
|
||||
|
||||
if current_config.buff_UI.enabled and module_visibility_config.buff_UI then
|
||||
local success, error = pcall(buff_UI.update);
|
||||
if not success then
|
||||
error_handler.report("MHR_Overlay.update_modules", string.format("[%s] Buff UI: %s", flow_state_name, tostring(error)));
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function draw_modules(module_visibility_config, flow_state_name)
|
||||
local current_config = config.current_config;
|
||||
|
||||
if module_visibility_config.small_monster_UI and current_config.small_monster_UI.enabled then
|
||||
local success, error = pcall(small_monster_UI.draw);
|
||||
if not success then
|
||||
error_handler.report("MHR_Overlay.draw_modules", string.format("[%s] Small Monster UI: %s", flow_state_name, tostring(error)));
|
||||
end
|
||||
end
|
||||
|
||||
local large_monster_UI_config = current_config.large_monster_UI;
|
||||
|
||||
local dynamic_enabled = large_monster_UI_config.dynamic.enabled and module_visibility_config.large_monster_dynamic_UI;
|
||||
local static_enabled = large_monster_UI_config.static.enabled and module_visibility_config.large_monster_static_UI;
|
||||
local highlighted_enabled = large_monster_UI_config.highlighted.enabled and module_visibility_config.large_monster_highlighted_UI;
|
||||
|
||||
if dynamic_enabled or static_enabled or highlighted_enabled then
|
||||
local success, error = pcall(large_monster_UI.draw, dynamic_enabled, static_enabled, highlighted_enabled);
|
||||
if not success then
|
||||
error_handler.report("MHR_Overlay.draw_modules", string.format("[%s] Large Monster UI: %s", flow_state_name, tostring(error)));
|
||||
end
|
||||
end
|
||||
|
||||
if current_config.time_UI.enabled and module_visibility_config.time_UI then
|
||||
local success, error = pcall(time_UI.draw);
|
||||
if not success then
|
||||
error_handler.report("MHR_Overlay.draw_modules", string.format("[%s] Time UI: %s", flow_state_name, tostring(error)));
|
||||
end
|
||||
end
|
||||
|
||||
if current_config.damage_meter_UI.enabled and module_visibility_config.damage_meter_UI then
|
||||
local success, error = pcall(damage_meter_UI.draw);
|
||||
if not success then
|
||||
error_handler.report("MHR_Overlay.draw_modules", string.format("[%s] Damage Meter UI: %s", flow_state_name, tostring(error)));
|
||||
end
|
||||
end
|
||||
|
||||
if current_config.endemic_life_UI.enabled and module_visibility_config.endemic_life_UI then
|
||||
local success, error = pcall(env_creature_UI.draw);
|
||||
if not success then
|
||||
error_handler.report("MHR_Overlay.draw_modules", string.format("[%s] Endemic Life UI: %s", flow_state_name, tostring(error)));
|
||||
end
|
||||
end
|
||||
|
||||
if current_config.buff_UI.enabled and module_visibility_config.buff_UI then
|
||||
local success, error = pcall(buff_UI.draw);
|
||||
if not success then
|
||||
error_handler.report("MHR_Overlay.draw_modules", string.format("[%s] Buff UI: %s", flow_state_name, tostring(error)));
|
||||
end
|
||||
end
|
||||
|
||||
if current_config.stats_UI.enabled and module_visibility_config.stats_UI then
|
||||
local success, error = pcall(stats_UI.draw);
|
||||
if not success then
|
||||
error_handler.report("MHR_Overlay.draw_modules", string.format("[%s] Stats UI: %s", flow_state_name, tostring(error)));
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function update_UI()
|
||||
local current_config = config.current_config;
|
||||
local module_visibility_config = current_config.global_settings.module_visibility;
|
||||
local flow_states = quest_status.flow_states;
|
||||
|
||||
if quest_status.flow_state == flow_states.IN_TRAINING_AREA then
|
||||
|
||||
local large_monster_UI_config = current_config.large_monster_UI;
|
||||
local module_visibility_in_training_area_config = module_visibility_config.in_training_area;
|
||||
|
||||
local dynamic_enabled = large_monster_UI_config.dynamic.enabled and module_visibility_in_training_area_config.large_monster_dynamic_UI;
|
||||
local static_enabled = large_monster_UI_config.static.enabled and module_visibility_in_training_area_config.large_monster_static_UI;
|
||||
local highlighted_enabled = large_monster_UI_config.highlighted.enabled and module_visibility_in_training_area_config.large_monster_highlighted_UI;
|
||||
|
||||
if dynamic_enabled or static_enabled or highlighted_enabled then
|
||||
local success = pcall(large_monster_UI.draw, dynamic_enabled, static_enabled, highlighted_enabled);
|
||||
local success, error = pcall(large_monster_UI.update, dynamic_enabled, static_enabled, highlighted_enabled);
|
||||
if not success then
|
||||
customization_menu.status = "Large monster drawing function threw an exception";
|
||||
error_handler.report("MHR_Overlay.update_UI", string.format("[In Training Area] Large Monster UI: %s", tostring(error)));
|
||||
end
|
||||
end
|
||||
|
||||
if config.current_config.time_UI.enabled and
|
||||
config.current_config.global_settings.module_visibility.quest_result_screen.time_UI then
|
||||
local success = pcall(time_UI.draw);
|
||||
if current_config.damage_meter_UI.enabled and module_visibility_in_training_area_config.damage_meter_UI then
|
||||
local success, error = pcall(damage_meter_UI.update);
|
||||
if not success then
|
||||
customization_menu.status = "Time drawing function threw an exception";
|
||||
error_handler.report("MHR_Overlay.update_UI", string.format("[In Training Area] Damage Meter UI: %s", tostring(error)));
|
||||
end
|
||||
end
|
||||
|
||||
if config.current_config.damage_meter_UI.enabled and
|
||||
config.current_config.global_settings.module_visibility.quest_result_screen.damage_meter_UI then
|
||||
local success = pcall(damage_meter_UI.draw);
|
||||
if current_config.endemic_life_UI.enabled and module_visibility_in_training_area_config.endemic_life_UI then
|
||||
local success, error = pcall(env_creature_UI.update);
|
||||
if not success then
|
||||
customization_menu.status = "Damage meter drawing function threw an exception";
|
||||
error_handler.report("MHR_Overlay.update_UI", string.format("[In Training Area] Endemic Life UI: %s", tostring(error)));
|
||||
end
|
||||
end
|
||||
|
||||
if config.current_config.endemic_life_UI.enabled and
|
||||
config.current_config.global_settings.module_visibility.quest_result_screen.endemic_life_UI then
|
||||
local success = pcall(env_creature_UI.draw);
|
||||
if current_config.buff_UI.enabled and module_visibility_in_training_area_config.buff_UI then
|
||||
local success, error = pcall(buff_UI.update);
|
||||
if not success then
|
||||
customization_menu.status = "Endemic life drawing function threw an exception";
|
||||
end
|
||||
end
|
||||
elseif quest_status.index == 2 then
|
||||
|
||||
if config.current_config.small_monster_UI.enabled and
|
||||
config.current_config.global_settings.module_visibility.during_quest.small_monster_UI then
|
||||
local success = pcall(small_monster_UI.draw);
|
||||
if not success then
|
||||
customization_menu.status = "Small monster drawing function threw an exception";
|
||||
error_handler.report("MHR_Overlay.update_UI", string.format("[In Training Area] Buff UI: %s", tostring(error)));
|
||||
end
|
||||
end
|
||||
|
||||
local dynamic_enabled = config.current_config.large_monster_UI.dynamic.enabled and
|
||||
config.current_config.global_settings.module_visibility.during_quest.large_monster_dynamic_UI;
|
||||
local static_enabled = config.current_config.large_monster_UI.static.enabled and
|
||||
config.current_config.global_settings.module_visibility.during_quest.large_monster_static_UI;
|
||||
local highlighted_enabled = config.current_config.large_monster_UI.highlighted.enabled and
|
||||
config.current_config.global_settings.module_visibility.during_quest
|
||||
.large_monster_highlighted_UI;
|
||||
elseif quest_status.flow_state == flow_states.CUTSCENE then
|
||||
update_modules(module_visibility_config.cutscene, "Cutscene");
|
||||
elseif quest_status.flow_state == flow_states.LOADING_QUEST then
|
||||
update_modules(module_visibility_config.loading_quest, "Loading Quest");
|
||||
elseif quest_status.flow_state == flow_states.QUEST_START_ANIMATION then
|
||||
update_modules(module_visibility_config.quest_start_animation, "Quest Start Animation");
|
||||
elseif quest_status.flow_state >= flow_states.PLAYING_QUEST and quest_status.flow_state <= flow_states.WYVERN_RIDING_START_ANIMATION then
|
||||
update_modules(module_visibility_config.playing_quest, "Playing Quest");
|
||||
elseif quest_status.flow_state == flow_states.KILLCAM then
|
||||
update_modules(module_visibility_config.killcam, "Killcam");
|
||||
elseif quest_status.flow_state == flow_states.QUEST_END_TIMER then
|
||||
update_modules(module_visibility_config.quest_end_timer, "Quest End Timer");
|
||||
elseif quest_status.flow_state == flow_states.QUEST_END_ANIMATION then
|
||||
update_modules(module_visibility_config.quest_end_animation, "Quest End Animation");
|
||||
elseif quest_status.flow_state == flow_states.QUEST_END_SCREEN then
|
||||
update_modules(module_visibility_config.quest_end_screen, "Quest End Screen");
|
||||
elseif quest_status.flow_state == flow_states.REWARD_SCREEN then
|
||||
update_modules(module_visibility_config.reward_screen, "Reward Screen");
|
||||
elseif quest_status.flow_state == flow_states.SUMMARY_SCREEN then
|
||||
update_modules(module_visibility_config.summary_screen, "Summary Screen");
|
||||
end
|
||||
end
|
||||
|
||||
local function draw_loop()
|
||||
local current_config = config.current_config;
|
||||
local module_visibility_config = current_config.global_settings.module_visibility;
|
||||
local flow_states = quest_status.flow_states;
|
||||
|
||||
if quest_status.flow_state == flow_states.IN_LOBBY then
|
||||
local module_visibility_in_lobby_config = module_visibility_config.in_lobby;
|
||||
|
||||
if current_config.stats_UI.enabled and module_visibility_in_lobby_config.stats_UI then
|
||||
local success, error = pcall(stats_UI.draw);
|
||||
if not success then
|
||||
error_handler.report("MHR_Overlay.main_loop", string.format("[In Training Area] Stats UI: %s", tostring(error)));
|
||||
end
|
||||
end
|
||||
|
||||
elseif quest_status.flow_state == flow_states.IN_TRAINING_AREA then
|
||||
|
||||
local large_monster_UI_config = current_config.large_monster_UI;
|
||||
local module_visibility_in_training_area_config = module_visibility_config.in_training_area;
|
||||
|
||||
local dynamic_enabled = large_monster_UI_config.dynamic.enabled and module_visibility_in_training_area_config.large_monster_dynamic_UI;
|
||||
local static_enabled = large_monster_UI_config.static.enabled and module_visibility_in_training_area_config.large_monster_static_UI;
|
||||
local highlighted_enabled = large_monster_UI_config.highlighted.enabled and module_visibility_in_training_area_config.large_monster_highlighted_UI;
|
||||
|
||||
if dynamic_enabled or static_enabled or highlighted_enabled then
|
||||
local success = pcall(large_monster_UI.draw, dynamic_enabled, static_enabled, highlighted_enabled);
|
||||
local success, error = pcall(large_monster_UI.draw, dynamic_enabled, static_enabled, highlighted_enabled);
|
||||
if not success then
|
||||
customization_menu.status = "Large monster drawing function threw an exception";
|
||||
error_handler.report("MHR_Overlay.main_loop", string.format("[In Training Area] Large Monster UI: %s", tostring(error)));
|
||||
end
|
||||
end
|
||||
|
||||
if config.current_config.time_UI.enabled and
|
||||
config.current_config.global_settings.module_visibility.during_quest.time_UI then
|
||||
local success = pcall(time_UI.draw);
|
||||
if current_config.damage_meter_UI.enabled and module_visibility_in_training_area_config.damage_meter_UI then
|
||||
local success, error = pcall(damage_meter_UI.draw);
|
||||
if not success then
|
||||
customization_menu.status = "Time drawing function threw an exception";
|
||||
error_handler.report("MHR_Overlay.main_loop", string.format("[In Training Area] Damage Meter UI: %s", tostring(error)));
|
||||
end
|
||||
end
|
||||
|
||||
if config.current_config.damage_meter_UI.enabled and
|
||||
config.current_config.global_settings.module_visibility.during_quest.damage_meter_UI then
|
||||
local success = pcall(damage_meter_UI.draw);
|
||||
if current_config.endemic_life_UI.enabled and module_visibility_in_training_area_config.endemic_life_UI then
|
||||
local success, error = pcall(env_creature_UI.draw);
|
||||
if not success then
|
||||
customization_menu.status = "Damage meter drawing function threw an exception";
|
||||
error_handler.report("MHR_Overlay.main_loop", string.format("[In Training Area] Endemic Life UI: %s", tostring(error)));
|
||||
end
|
||||
end
|
||||
|
||||
if config.current_config.endemic_life_UI.enabled and
|
||||
config.current_config.global_settings.module_visibility.during_quest.endemic_life_UI then
|
||||
local success = pcall(env_creature_UI.draw);
|
||||
if current_config.buff_UI.enabled and module_visibility_in_training_area_config.buff_UI then
|
||||
local success, error = pcall(buff_UI.draw);
|
||||
if not success then
|
||||
customization_menu.status = "Endemic life drawing function threw an exception";
|
||||
error_handler.report("MHR_Overlay.main_loop", string.format("[In Training Area] Buff UI: %s", tostring(error)));
|
||||
end
|
||||
end
|
||||
|
||||
if current_config.stats_UI.enabled and module_visibility_in_training_area_config.stats_UI then
|
||||
local success, error = pcall(stats_UI.draw);
|
||||
if not success then
|
||||
error_handler.report("MHR_Overlay.main_loop", string.format("[In Training Area] Stats UI: %s", tostring(error)));
|
||||
end
|
||||
end
|
||||
|
||||
elseif quest_status.flow_state == flow_states.CUTSCENE then
|
||||
draw_modules(module_visibility_config.cutscene, "Cutscene");
|
||||
elseif quest_status.flow_state == flow_states.LOADING_QUEST then
|
||||
draw_modules(module_visibility_config.loading_quest, "Loading Quest");
|
||||
elseif quest_status.flow_state == flow_states.QUEST_START_ANIMATION then
|
||||
draw_modules(module_visibility_config.quest_start_animation, "Quest Start Animation");
|
||||
elseif quest_status.flow_state >= flow_states.PLAYING_QUEST and quest_status.flow_state <= flow_states.WYVERN_RIDING_START_ANIMATION then
|
||||
draw_modules(module_visibility_config.playing_quest, "Playing Quest");
|
||||
elseif quest_status.flow_state == flow_states.KILLCAM then
|
||||
draw_modules(module_visibility_config.killcam, "Killcam");
|
||||
elseif quest_status.flow_state == flow_states.QUEST_END_TIMER then
|
||||
draw_modules(module_visibility_config.quest_end_timer, "Quest End Timer");
|
||||
elseif quest_status.flow_state == flow_states.QUEST_END_ANIMATION then
|
||||
draw_modules(module_visibility_config.quest_end_animation, "Quest End Animation");
|
||||
elseif quest_status.flow_state == flow_states.QUEST_END_SCREEN then
|
||||
draw_modules(module_visibility_config.quest_end_screen, "Quest End Screen");
|
||||
elseif quest_status.flow_state == flow_states.REWARD_SCREEN then
|
||||
draw_modules(module_visibility_config.reward_screen, "Reward Screen");
|
||||
elseif quest_status.flow_state == flow_states.SUMMARY_SCREEN then
|
||||
draw_modules(module_visibility_config.summary_screen, "Summary Screen");
|
||||
end
|
||||
end
|
||||
|
||||
@@ -289,50 +533,38 @@ re.on_draw_ui(function()
|
||||
end);
|
||||
|
||||
re.on_frame(function()
|
||||
if not reframework:is_drawing_ui() then
|
||||
customization_menu.is_opened = false;
|
||||
end
|
||||
|
||||
if customization_menu.is_opened then
|
||||
if reframework:is_drawing_ui() then
|
||||
pcall(customization_menu.draw);
|
||||
end
|
||||
|
||||
keyboard.update();
|
||||
end);
|
||||
-- #endregion
|
||||
--------------------------RE_IMGUI---------------------------
|
||||
|
||||
----------------------------D2D------------------------------
|
||||
-----------------------Loop Callbacks------------------------
|
||||
-- #region
|
||||
if d2d ~= nil then
|
||||
d2d.register(function()
|
||||
drawing.init_font();
|
||||
end, main_loop);
|
||||
else
|
||||
re.on_frame(main_loop);
|
||||
end, function()
|
||||
if config.current_config.global_settings.renderer.use_d2d_if_available then
|
||||
draw_loop();
|
||||
end
|
||||
end);
|
||||
end
|
||||
-- #endregion
|
||||
----------------------------D2D------------------------------
|
||||
|
||||
if debug.enabled then
|
||||
if d2d ~= nil then
|
||||
d2d.register(function()
|
||||
end, function()
|
||||
if xy ~= "" then
|
||||
d2d.text(drawing.font, "xy:\n" .. tostring(xy), 551, 11, 0xFF000000);
|
||||
d2d.text(drawing.font, "xy:\n" .. tostring(xy), 550, 10, 0xFFFFFFFF);
|
||||
end
|
||||
end);
|
||||
else
|
||||
re.on_frame(function()
|
||||
if xy ~= "" then
|
||||
draw.text("xy:\n" .. tostring(xy), 551, 11, 0xFF000000);
|
||||
draw.text("xy:\n" .. tostring(xy), 550, 10, 0xFFFFFFFF);
|
||||
end
|
||||
end);
|
||||
re.on_frame(function()
|
||||
time.update_timers();
|
||||
|
||||
if d2d == nil or not config.current_config.global_settings.renderer.use_d2d_if_available then
|
||||
draw_loop();
|
||||
end
|
||||
end
|
||||
end);
|
||||
-- #endregion
|
||||
-----------------------Loop Callbacks------------------------
|
||||
|
||||
time.init_global_timers();
|
||||
time.new_timer(update_UI, 0.5);
|
||||
|
||||
if imgui.begin_table == nil then
|
||||
re.msg(language.current_language.customization_menu.reframework_outdated);
|
||||
end
|
||||
end
|
||||
420
reframework/autorun/MHR_Overlay/Buffs/abnormal_statuses.lua
Normal file
420
reframework/autorun/MHR_Overlay/Buffs/abnormal_statuses.lua
Normal file
@@ -0,0 +1,420 @@
|
||||
local this = {};
|
||||
|
||||
local buffs;
|
||||
local buff_UI_entity;
|
||||
local config;
|
||||
local singletons;
|
||||
local players;
|
||||
local utils;
|
||||
local language;
|
||||
local error_handler;
|
||||
local time;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
this.list = {
|
||||
fireblight = nil,
|
||||
waterblight = nil,
|
||||
thunderblight = nil,
|
||||
iceblight = nil,
|
||||
dragonblight = nil,
|
||||
blastblight = nil,
|
||||
minor_bubbleblight = nil,
|
||||
major_bubbleblight = nil,
|
||||
hellfireblight = nil,
|
||||
bloodblight = nil,
|
||||
poison = nil,
|
||||
deadly_poison = nil,
|
||||
stun = nil,
|
||||
paralysis = nil,
|
||||
falling_asleep = nil,
|
||||
sleep = nil,
|
||||
defense_down = nil,
|
||||
resistance_down = nil,
|
||||
tremor = nil,
|
||||
roar = nil,
|
||||
webbed = nil,
|
||||
stench = nil,
|
||||
leeched = nil,
|
||||
-- whirlwind = nil,
|
||||
bleeding = nil,
|
||||
frenzy = nil,
|
||||
frenzy_overcome = nil,
|
||||
engulfed = nil,
|
||||
frostblight = nil,
|
||||
muck = nil
|
||||
};
|
||||
|
||||
this.keys = {
|
||||
"fireblight",
|
||||
"waterblight",
|
||||
"thunderblight",
|
||||
"iceblight",
|
||||
"dragonblight",
|
||||
"blastblight",
|
||||
"minor_bubbleblight",
|
||||
"major_bubbleblight",
|
||||
"hellfireblight",
|
||||
"bloodblight",
|
||||
"frostblight",
|
||||
"poison",
|
||||
"deadly_poison",
|
||||
"stun",
|
||||
"paralysis",
|
||||
"falling_asleep",
|
||||
"sleep",
|
||||
"defense_down",
|
||||
"resistance_down",
|
||||
"tremor",
|
||||
"roar",
|
||||
"webbed",
|
||||
"stench",
|
||||
"leeched",
|
||||
-- "whirlwind",
|
||||
"bleeding",
|
||||
"engulfed",
|
||||
"muck",
|
||||
"frenzy",
|
||||
"frenzy_overcome",
|
||||
"frenzy_infection"
|
||||
};
|
||||
|
||||
this.UI = nil;
|
||||
|
||||
local abnormal_statuses_type_name = "abnormal_statuses";
|
||||
|
||||
local frenzy_infected_duration = 121;
|
||||
|
||||
local player_quest_base_type_def = sdk.find_type_definition("snow.player.PlayerQuestBase");
|
||||
|
||||
-- Fireblight
|
||||
local fire_duration_timer_field = player_quest_base_type_def:get_field("_FireLDurationTimer");
|
||||
-- Waterblight
|
||||
local water_duration_timer_field = player_quest_base_type_def:get_field("_WaterLDurationTimer");
|
||||
-- Thunderblight
|
||||
local thunder_duration_timer_field = player_quest_base_type_def:get_field("_ThunderLDurationTimer");
|
||||
-- Iceblight
|
||||
local ice_duration_timer_field = player_quest_base_type_def:get_field("_IceLDurationTimer");
|
||||
-- Dragonblight
|
||||
local dragon_duration_timer_field = player_quest_base_type_def:get_field("_DragonLDurationTimer");
|
||||
-- blastblight
|
||||
local bomb_duration_timer_field = player_quest_base_type_def:get_field("_BombDurationTimer");
|
||||
-- Bubbleblight
|
||||
local bubble_type_field = player_quest_base_type_def:get_field("_BubbleType");
|
||||
local bubble_damage_timer_field = player_quest_base_type_def:get_field("_BubbleDamageTimer");
|
||||
-- Hellfireblight
|
||||
local oni_bomb_duration_timer_field = player_quest_base_type_def:get_field("_OniBombDurationTimer");
|
||||
-- Bloodblight
|
||||
local mystery_debuff_timer_field = player_quest_base_type_def:get_field("_MysteryDebuffTimer");
|
||||
-- Frostblight
|
||||
local get_is_frozen_damage_method = player_quest_base_type_def:get_method("get_IsFrozenDamage");
|
||||
-- Poison
|
||||
local poison_level_field = player_quest_base_type_def:get_field("_PoisonLv");
|
||||
local poison_duration_timer_field = player_quest_base_type_def:get_field("_PoisonDurationTimer");
|
||||
-- Stun
|
||||
local stun_duration_timer_field = player_quest_base_type_def:get_field("_StunDurationTimer");
|
||||
-- Falling Sleep
|
||||
local get_sleep_movable_timer_method = player_quest_base_type_def:get_method("get_SleepMovableTimer");
|
||||
-- Sleep
|
||||
local sleep_duration_timer_field = player_quest_base_type_def:get_field("_SleepDurationTimer");
|
||||
-- Paralysis
|
||||
local paralyze_duration_timer_field = player_quest_base_type_def:get_field("_ParalyzeDurationTimer");
|
||||
|
||||
-- Defense Down
|
||||
local defense_down_duration_timer_field = player_quest_base_type_def:get_field("_DefenceDownDurationTimer");
|
||||
-- Resistance Down
|
||||
local resistance_down_duration_timer_field = player_quest_base_type_def:get_field("_ResistanceDownDurationTimer");
|
||||
|
||||
-- Tremor
|
||||
local quake_duration_timer_field = player_quest_base_type_def:get_field("_QuakeDurationTimer");
|
||||
-- Roar
|
||||
local ear_duration_timer_field = player_quest_base_type_def:get_field("_EarDurationTimer");
|
||||
-- Webbed
|
||||
local beto_duration_timer_field = player_quest_base_type_def:get_field("_BetoDurationTimer");
|
||||
-- Stench
|
||||
local stink_duration_timer_field = player_quest_base_type_def:get_field("_StinkDurationTimer");
|
||||
-- Leeched
|
||||
local blooding_enemy_timer_field = player_quest_base_type_def:get_field("_BloodingEnemyTimer");
|
||||
-- Bleeding
|
||||
local bleeding_debuff_timer_field = player_quest_base_type_def:get_field("_BleedingDebuffTimer");
|
||||
-- Engulfed
|
||||
local get_is_vacuum_damage_method = player_quest_base_type_def:get_method("get__IsVacuumDamage");
|
||||
-- Muck
|
||||
local get_is_mud_damage_method = player_quest_base_type_def:get_method("get__IsMudDamage");
|
||||
local get_is_gold_mud_damage_method = player_quest_base_type_def:get_method("get__IsGoldMudDamage");
|
||||
|
||||
-- Frenzy Infected
|
||||
local virus_accumulator_field = player_quest_base_type_def:get_field("_VirusAccumulator");
|
||||
local virus_timer_field = player_quest_base_type_def:get_field("_VirusTimer");
|
||||
-- Frenzy
|
||||
local virus_onset_timer_field = player_quest_base_type_def:get_field("_VirusOnsetTimer");
|
||||
|
||||
local player_data_type_def = sdk.find_type_definition("snow.player.PlayerData");
|
||||
|
||||
-- Frenzy Overcome
|
||||
local virus_overcome_buff_timer_field = player_data_type_def:get_field("_VirusOvercomeBuffTimer");
|
||||
|
||||
function this.update(player, player_data)
|
||||
-- Missing:
|
||||
-- whirlwind?
|
||||
-- Wind Pressure?
|
||||
|
||||
this.update_poison(player);
|
||||
this.update_bubbleblight(player);
|
||||
this.update_muck(player);
|
||||
this.update_frenzy_infection(player);
|
||||
|
||||
this.update_abnormal_status("fireblight", nil, nil, player, fire_duration_timer_field);
|
||||
this.update_abnormal_status("waterblight", nil, nil, player, water_duration_timer_field);
|
||||
this.update_abnormal_status("thunderblight", nil, nil, player, thunder_duration_timer_field);
|
||||
this.update_abnormal_status("iceblight", nil, nil, player, ice_duration_timer_field);
|
||||
this.update_abnormal_status("dragonblight", nil, nil, player, dragon_duration_timer_field);
|
||||
this.update_abnormal_status("blastblight", nil, nil, player, bomb_duration_timer_field);
|
||||
this.update_abnormal_status("hellfireblight", nil, nil, player, oni_bomb_duration_timer_field);
|
||||
this.update_abnormal_status("bloodblight", nil, nil, player, mystery_debuff_timer_field);
|
||||
this.update_abnormal_status("frostblight", player, get_is_frozen_damage_method);
|
||||
|
||||
this.update_abnormal_status("stun", nil, nil, player, stun_duration_timer_field);
|
||||
this.update_abnormal_status("paralysis", nil, nil, player, paralyze_duration_timer_field);
|
||||
this.update_abnormal_status("falling_asleep", nil, nil, player, get_sleep_movable_timer_method);
|
||||
this.update_abnormal_status("defense_down", nil, nil, player, defense_down_duration_timer_field);
|
||||
this.update_abnormal_status("resistance_down", nil, nil, player, resistance_down_duration_timer_field);
|
||||
|
||||
this.update_abnormal_status("tremor", nil, nil, player, quake_duration_timer_field);
|
||||
this.update_abnormal_status("roar", nil, nil, player, ear_duration_timer_field);
|
||||
this.update_abnormal_status("webbed", nil, nil, player, beto_duration_timer_field);
|
||||
this.update_abnormal_status("stench", nil, nil, player, stink_duration_timer_field);
|
||||
this.update_abnormal_status("leeched", nil, nil, player, blooding_enemy_timer_field, true);
|
||||
this.update_abnormal_status("bleeding", nil, nil, player, bleeding_debuff_timer_field);
|
||||
this.update_abnormal_status("engulfed", player, get_is_vacuum_damage_method);
|
||||
|
||||
this.update_abnormal_status("frenzy", nil, nil, player, virus_onset_timer_field);
|
||||
this.update_abnormal_status("frenzy_overcome", nil, nil, player_data, virus_overcome_buff_timer_field);
|
||||
|
||||
this.update_sleep(player);
|
||||
end
|
||||
|
||||
function this.update_abnormal_status(key, value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints)
|
||||
return buffs.update_generic_buff(this.list, config.current_config.buff_UI.filter.abnormal_statuses, this.get_abnormal_status_name,
|
||||
abnormal_statuses_type_name, key, value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints);
|
||||
end
|
||||
|
||||
function this.update_generic(key, level, timer)
|
||||
return buffs.update_generic(this.list, this.get_abnormal_status_name, abnormal_statuses_type_name, key, level, timer);
|
||||
end
|
||||
|
||||
function this.apply_filter(key)
|
||||
return buffs.apply_filter(this.list, config.current_config.buff_UI.filter.abnormal_statuses, key);
|
||||
end
|
||||
|
||||
function this.update_poison(player)
|
||||
local cached_config = config.current_config.buff_UI.filter.abnormal_statuses;
|
||||
|
||||
if not cached_config.poison
|
||||
and not cached_config.deadly_poison then
|
||||
if this.apply_filter("poison") then
|
||||
return;
|
||||
end
|
||||
|
||||
if this.apply_filter("deadly_poison") then
|
||||
return;
|
||||
end
|
||||
end
|
||||
|
||||
local poison_level = poison_level_field:get_data(player);
|
||||
if poison_level == nil then
|
||||
error_handler.report("abnormal_statuses.update_poison", "Failed to Access Data: poison_level");
|
||||
this.list.poison = nil;
|
||||
this.list.deadly_poison = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if poison_level == 0 then
|
||||
this.list.poison = nil;
|
||||
this.list.deadly_poison = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if poison_level == 1 then
|
||||
this.update_abnormal_status("poison", nil, nil, player, poison_duration_timer_field);
|
||||
this.list.deadly_poison = nil;
|
||||
else
|
||||
this.update_abnormal_status("deadly_poison", nil, nil, player, poison_duration_timer_field);
|
||||
this.list.poison = nil;
|
||||
end
|
||||
end
|
||||
|
||||
function this.update_bubbleblight(player)
|
||||
local cached_config = config.current_config.buff_UI.filter.abnormal_statuses;
|
||||
|
||||
if not cached_config.minor_bubbleblight
|
||||
and not cached_config.major_bubbleblight then
|
||||
if this.apply_filter("minor_bubbleblight") then
|
||||
return;
|
||||
end
|
||||
|
||||
if this.apply_filter("major_bubbleblight") then
|
||||
return;
|
||||
end
|
||||
end
|
||||
|
||||
local bubble_type = bubble_type_field:get_data(player);
|
||||
if bubble_type == nil then
|
||||
error_handler.report("abnormal_statuses.update_bubbleblight", "Failed to Access Data: bubble_Type");
|
||||
this.list.minor_bubbleblight = nil;
|
||||
this.list.major_bubbleblight = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if bubble_type == 0 then
|
||||
this.list.minor_bubbleblight = nil;
|
||||
this.list.major_bubbleblight = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if bubble_type == 1 then
|
||||
this.update_abnormal_status("minor_bubbleblight", nil, nil, player, bubble_damage_timer_field);
|
||||
this.list.major_bubbleblight = nil;
|
||||
else
|
||||
this.update_abnormal_status("major_bubbleblight", nil, nil, player, bubble_damage_timer_field);
|
||||
this.list.minor_bubbleblight = nil;
|
||||
end
|
||||
end
|
||||
|
||||
function this.update_muck(player)
|
||||
if this.apply_filter("muck") then
|
||||
return;
|
||||
end
|
||||
|
||||
local is_mud_damage = get_is_mud_damage_method:call(player);
|
||||
if is_mud_damage == nil then
|
||||
error_handler.report("abnormal_statuses.update_generic_boolean_value_method", "Failed to Access Data: is_mud_damage");
|
||||
this.list.muck = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local is_gold_mud_damage = get_is_gold_mud_damage_method:call(player);
|
||||
if is_gold_mud_damage == nil then
|
||||
error_handler.report("abnormal_statuses.update_generic_boolean_value_method", "Failed to Access Data: is_gold_mud_damage");
|
||||
this.list.muck = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if not is_mud_damage and not is_gold_mud_damage then
|
||||
this.list.muck = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
this.update_generic("muck");
|
||||
end
|
||||
|
||||
function this.update_frenzy_infection(player)
|
||||
if this.apply_filter("frenzy_infection") then
|
||||
return;
|
||||
end
|
||||
|
||||
local virus_accumulator_value = virus_accumulator_field:get_data(player);
|
||||
if virus_accumulator_value == nil then
|
||||
error_handler.report("abnormal_statuses.update_frenzy_infection", "Failed to Access Data: virus_accumulator_value");
|
||||
this.list.frenzy_infection = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local virus_timer = virus_timer_field:get_data(player);
|
||||
if virus_timer == nil then
|
||||
error_handler.report("abnormal_statuses.update_frenzy_infection", "Failed to Access Data: virus_timer");
|
||||
this.list.frenzy_infection = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if virus_accumulator_value == 0 and utils.number.is_equal(virus_timer, 0) then
|
||||
this.list.frenzy_infection = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local timer = frenzy_infected_duration - (virus_accumulator_value + virus_timer / 60);
|
||||
|
||||
this.update_generic("frenzy_infection", 1, timer);
|
||||
end
|
||||
|
||||
function this.update_sleep(player)
|
||||
if this.apply_filter("sleep") then
|
||||
this.list.sleep = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if this.list.falling_asleep ~= nil then
|
||||
this.list.sleep = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
this.update_abnormal_status("sleep", nil, nil, player, sleep_duration_timer_field);
|
||||
end
|
||||
|
||||
function this.init_all_UI()
|
||||
for abnormal_status_key, abnormal_status in pairs(this.list) do
|
||||
buffs.init_UI(abnormal_status);
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_names()
|
||||
for abnormal_status_key, abnormal_status in pairs(this.list) do
|
||||
abnormal_status.name = this.get_abnormal_status_name(abnormal_status_key);
|
||||
end
|
||||
end
|
||||
|
||||
function this.get_abnormal_status_name(key)
|
||||
local abnormal_status_name = language.current_language.ailments[key];
|
||||
if abnormal_status_name == nil then
|
||||
return key;
|
||||
end
|
||||
|
||||
return abnormal_status_name;
|
||||
end
|
||||
|
||||
function this.init_dependencies()
|
||||
buffs = require("MHR_Overlay.Buffs.buffs");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
time = require("MHR_Overlay.Game_Handler.time");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
402
reframework/autorun/MHR_Overlay/Buffs/buffs.lua
Normal file
402
reframework/autorun/MHR_Overlay/Buffs/buffs.lua
Normal file
@@ -0,0 +1,402 @@
|
||||
local this = {};
|
||||
|
||||
local buff_UI_entity;
|
||||
local config;
|
||||
local singletons;
|
||||
local players;
|
||||
local item_buffs;
|
||||
local melody_effects;
|
||||
local utils;
|
||||
local language;
|
||||
local time;
|
||||
local quest_status;
|
||||
local error_handler;
|
||||
local endemic_life_buffs;
|
||||
local skills;
|
||||
local dango_skills;
|
||||
local abnormal_statuses;
|
||||
local otomo_moves;
|
||||
local weapon_skills;
|
||||
local misc_buffs;
|
||||
local rampage_skills;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
local player_manager_type_def = sdk.find_type_definition("snow.player.PlayerManager");
|
||||
local find_master_player_method = player_manager_type_def:get_method("findMasterPlayer");
|
||||
local get_ref_item_parameter_method = player_manager_type_def:get_method("get_RefItemParameter");
|
||||
|
||||
local player_base_type_def = find_master_player_method:get_return_type();
|
||||
local get_player_data_method = player_base_type_def:get_method("get_PlayerData");
|
||||
|
||||
local player_lobby_base_type_def = sdk.find_type_definition("snow.player.PlayerLobbyBase");
|
||||
|
||||
local player_base_type_def = sdk.find_type_definition("snow.player.PlayerBase");
|
||||
local player_weapon_type_field = player_base_type_def:get_field("_playerWeaponType");
|
||||
|
||||
function this.new(type, key, name, level, duration)
|
||||
local is_infinite = false;
|
||||
|
||||
if name == nil then
|
||||
name = utils.constants.uninitialized_string;
|
||||
end
|
||||
|
||||
if duration == nil then
|
||||
duration = 0;
|
||||
end
|
||||
|
||||
if utils.number.is_equal(duration, 0) then
|
||||
is_infinite = true;
|
||||
end
|
||||
|
||||
level = level or 1;
|
||||
|
||||
local buff = {};
|
||||
|
||||
buff.type = type;
|
||||
buff.key = key;
|
||||
buff.name = name;
|
||||
buff.level = level;
|
||||
|
||||
buff.timer = duration;
|
||||
buff.duration = duration;
|
||||
|
||||
buff.is_visible = true;
|
||||
|
||||
buff.timer_percentage = 0;
|
||||
|
||||
buff.minutes_left = 0;
|
||||
buff.seconds_left = 0;
|
||||
|
||||
buff.is_infinite = is_infinite;
|
||||
|
||||
this.update_timer(buff, buff.timer);
|
||||
|
||||
this.init_UI(buff);
|
||||
|
||||
return buff;
|
||||
end
|
||||
|
||||
function this.init_buffs()
|
||||
this.list = {};
|
||||
end
|
||||
|
||||
function this.init_all_UI()
|
||||
abnormal_statuses.init_all_UI();
|
||||
item_buffs.init_all_UI();
|
||||
endemic_life_buffs.init_all_UI();
|
||||
melody_effects.init_all_UI();
|
||||
dango_skills.init_all_UI();
|
||||
rampage_skills.init_all_UI();
|
||||
skills.init_all_UI();
|
||||
weapon_skills.init_all_UI();
|
||||
otomo_moves.init_all_UI();
|
||||
misc_buffs.init_all_UI();
|
||||
end
|
||||
|
||||
function this.init_UI(buff)
|
||||
local cached_config = config.current_config.buff_UI[buff.type];
|
||||
buff.buff_UI = buff_UI_entity.new(cached_config.bar, cached_config.name_label, cached_config.timer_label);
|
||||
end
|
||||
|
||||
function this.init_names()
|
||||
abnormal_statuses.init_names();
|
||||
item_buffs.init_names();
|
||||
endemic_life_buffs.init_names();
|
||||
melody_effects.init_names();
|
||||
dango_skills.init_names();
|
||||
rampage_skills.init_names();
|
||||
skills.init_names();
|
||||
weapon_skills.init_names();
|
||||
otomo_moves.init_names();
|
||||
misc_buffs.init_names();
|
||||
end
|
||||
|
||||
local tere = {};
|
||||
local tere2 = {};
|
||||
local tere3 = {};
|
||||
|
||||
function this.update()
|
||||
if not config.current_config.buff_UI.enabled then
|
||||
return;
|
||||
end
|
||||
|
||||
if singletons.player_manager == nil then
|
||||
error_handler.report("buffs.update", "Failed to Access Data: player_manager");
|
||||
return;
|
||||
end
|
||||
|
||||
if quest_status.flow_state <= quest_status.flow_states.IN_LOBBY
|
||||
or quest_status.flow_state == quest_status.flow_states.CUTSCENE
|
||||
or quest_status.flow_state >= quest_status.flow_states.QUEST_END_ANIMATION then
|
||||
return;
|
||||
end
|
||||
|
||||
local master_player = find_master_player_method:call(singletons.player_manager);
|
||||
if master_player == nil then
|
||||
error_handler.report("buffs.update", "Failed to Access Data: master_player");
|
||||
return;
|
||||
end
|
||||
|
||||
melody_effects.update(master_player);
|
||||
|
||||
local master_player_data = get_player_data_method:call(master_player);
|
||||
if master_player_data == nil then
|
||||
error_handler.report("buffs.update", "Failed to Access Data: master_player_data");
|
||||
return;
|
||||
end
|
||||
|
||||
local weapon_type = player_weapon_type_field:get_data(master_player);
|
||||
if weapon_type == nil then
|
||||
error_handler.report("buffs.update", "Failed to Access Data: weapon_type");
|
||||
return;
|
||||
end
|
||||
|
||||
if singletons.player_manager == nil then
|
||||
error_handler.report("buffs.update", "Failed to Access Data: player_manager");
|
||||
return;
|
||||
end
|
||||
|
||||
local item_parameter = get_ref_item_parameter_method:call(singletons.player_manager);
|
||||
if item_parameter == nil then
|
||||
error_handler.report("buffs.update", "Failed to Access Data: item_parameter");
|
||||
return;
|
||||
end
|
||||
|
||||
local is_player_lobby_base = master_player:get_type_definition() == player_lobby_base_type_def;
|
||||
|
||||
item_buffs.update(master_player_data, item_parameter);
|
||||
rampage_skills.update(master_player_data);
|
||||
otomo_moves.update(master_player_data);
|
||||
|
||||
if not is_player_lobby_base then
|
||||
abnormal_statuses.update(master_player, master_player_data);
|
||||
endemic_life_buffs.update(master_player, master_player_data);
|
||||
dango_skills.update(master_player, master_player_data);
|
||||
skills.update(master_player, master_player_data, weapon_type);
|
||||
weapon_skills.update(master_player, master_player_data, weapon_type);
|
||||
misc_buffs.update(master_player, master_player_data, item_parameter);
|
||||
end
|
||||
end
|
||||
|
||||
function this.update_timer(buff, timer)
|
||||
buff.is_visible = true;
|
||||
|
||||
if timer == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
if timer < 0 then
|
||||
timer = 0;
|
||||
end
|
||||
|
||||
if timer > buff.duration or timer > buff.timer then
|
||||
buff.duration = timer;
|
||||
end
|
||||
|
||||
local minutes_left = math.floor(timer / 60);
|
||||
|
||||
buff.timer = timer;
|
||||
buff.minutes_left = minutes_left;
|
||||
buff.seconds_left = math.floor(timer - 60 * minutes_left);
|
||||
|
||||
if buff.duration ~= 0 then
|
||||
buff.timer_percentage = timer / buff.duration;
|
||||
end
|
||||
end
|
||||
|
||||
function this.update_generic_buff(buff_list, filter_list, get_name_function,
|
||||
buff_type, buff_key,
|
||||
value_owner, value_holder,
|
||||
timer_owner, timer_holder,
|
||||
is_infinite, minimal_value, level_breakpoints)
|
||||
|
||||
if this.apply_filter(buff_list, filter_list, buff_key) then
|
||||
return;
|
||||
end
|
||||
|
||||
if timer_owner == nil then timer_owner = value_owner; end
|
||||
if minimal_value == nil then minimal_value = 1; end
|
||||
|
||||
local level = 1;
|
||||
|
||||
if value_holder ~= nil then
|
||||
local value;
|
||||
if utils.type.is_REField(value_holder) then
|
||||
value = value_holder:get_data(value_owner);
|
||||
else
|
||||
value = value_holder:call(value_owner);
|
||||
end
|
||||
|
||||
if value == nil then
|
||||
error_handler.report("buffs.update_generic_number", string.format("Failed to Access Data: %s_value", buff_key));
|
||||
buff_list[buff_key] = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if utils.type.is_boolean(value) then
|
||||
if not value then
|
||||
buff_list[buff_key] = nil;
|
||||
return;
|
||||
end
|
||||
else
|
||||
if value < minimal_value then
|
||||
buff_list[buff_key] = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if level_breakpoints ~= nil then
|
||||
local level_breakpoints_count = #level_breakpoints;
|
||||
for index, breakpoint in ipairs(level_breakpoints) do
|
||||
if value >= breakpoint then
|
||||
level = 2 + level_breakpoints_count - index;
|
||||
break;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local timer = nil;
|
||||
if timer_holder ~= nil then
|
||||
if utils.type.is_REField(timer_holder) then
|
||||
timer = timer_holder:get_data(timer_owner);
|
||||
else
|
||||
timer = timer_holder:call(timer_owner);
|
||||
end
|
||||
|
||||
if timer == nil then
|
||||
error_handler.report("buffs.update_generic_number", string.format("Failed to Access Data: %s_timer", buff_key));
|
||||
buff_list[buff_key] = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if value_holder == nil and utils.number.is_equal(timer, 0) then
|
||||
buff_list[buff_key] = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if is_infinite then
|
||||
timer = nil;
|
||||
else
|
||||
timer = timer / 60;
|
||||
end
|
||||
end
|
||||
|
||||
return this.update_generic(buff_list, get_name_function, buff_type, buff_key, level, timer);
|
||||
end
|
||||
|
||||
function this.update_generic(buff_list, get_name_function, buff_type, buff_key, level, timer)
|
||||
level = level or 1;
|
||||
|
||||
local buff = buff_list[buff_key];
|
||||
if buff == nil then
|
||||
local name = get_name_function(buff_key);
|
||||
|
||||
buff = this.new(buff_type, buff_key, name, level, timer);
|
||||
buff_list[buff_key] = buff;
|
||||
else
|
||||
if buff.level ~= level then
|
||||
buff.duration = timer;
|
||||
end
|
||||
|
||||
buff.level = level;
|
||||
this.update_timer(buff, timer);
|
||||
end
|
||||
|
||||
return buff;
|
||||
end
|
||||
|
||||
function this.apply_filter(buff_list, filter_list, buff_key)
|
||||
if filter_list[buff_key] then
|
||||
return false;
|
||||
end
|
||||
|
||||
local buff = buff_list[buff_key];
|
||||
if buff == nil then
|
||||
return true;
|
||||
end
|
||||
|
||||
if not buff.is_visible then
|
||||
return true;
|
||||
end
|
||||
|
||||
if buff.is_infinite then
|
||||
buff_list[buff_key] = nil;
|
||||
return true;
|
||||
end
|
||||
|
||||
time.new_delay_timer(function()
|
||||
|
||||
local _buff = buff_list[buff_key];
|
||||
if _buff ~= nil and not _buff.is_visible then
|
||||
buff_list[buff_key] = nil;
|
||||
end
|
||||
|
||||
end, buff.timer);
|
||||
|
||||
buff.is_visible = false;
|
||||
return true;
|
||||
end
|
||||
|
||||
function this.draw(buff, buff_UI, position_on_screen, opacity_scale)
|
||||
buff_UI_entity.draw(buff, buff_UI, position_on_screen, opacity_scale);
|
||||
end
|
||||
|
||||
function this.init_dependencies()
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
item_buffs = require("MHR_Overlay.Buffs.item_buffs");
|
||||
melody_effects = require("MHR_Overlay.Buffs.melody_effects");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
time = require("MHR_Overlay.Game_Handler.time");
|
||||
quest_status = require("MHR_Overlay.Game_Handler.quest_status");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
endemic_life_buffs = require("MHR_Overlay.Buffs.endemic_life_buffs");
|
||||
skills = require("MHR_Overlay.Buffs.skills");
|
||||
dango_skills = require("MHR_Overlay.Buffs.dango_skills");
|
||||
abnormal_statuses = require("MHR_Overlay.Buffs.abnormal_statuses");
|
||||
otomo_moves = require("MHR_Overlay.Buffs.otomo_moves");
|
||||
weapon_skills = require("MHR_Overlay.Buffs.weapon_skills");
|
||||
rampage_skills = require("MHR_Overlay.Buffs.rampage_skills");
|
||||
misc_buffs = require("MHR_Overlay.Buffs.misc_buffs");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
|
||||
end
|
||||
|
||||
return this;
|
||||
405
reframework/autorun/MHR_Overlay/Buffs/dango_skills.lua
Normal file
405
reframework/autorun/MHR_Overlay/Buffs/dango_skills.lua
Normal file
@@ -0,0 +1,405 @@
|
||||
local this = {};
|
||||
|
||||
local buffs;
|
||||
local buff_UI_entity;
|
||||
local config;
|
||||
local singletons;
|
||||
local players;
|
||||
local utils;
|
||||
local language;
|
||||
local error_handler;
|
||||
local time;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
this.list = {
|
||||
dango_adrenaline = nil,
|
||||
dango_booster = nil,
|
||||
dango_connector = nil,
|
||||
dango_defender = nil,
|
||||
dango_flyer = nil,
|
||||
dango_glutton = nil,
|
||||
dango_hunter = nil,
|
||||
dango_insurance = nil,
|
||||
dango_insurance_defense_up = nil,
|
||||
super_recovery_dango = nil
|
||||
};
|
||||
|
||||
this.keys = {
|
||||
"dango_adrenaline",
|
||||
"dango_booster",
|
||||
"dango_connector",
|
||||
"dango_defender",
|
||||
"dango_flyer",
|
||||
"dango_glutton",
|
||||
"dango_hunter",
|
||||
"dango_insurance",
|
||||
"dango_insurance_defense_up",
|
||||
"super_recovery_dango"
|
||||
};
|
||||
|
||||
local dango_skill_ids = {
|
||||
-- dango_polisher = 1,
|
||||
-- dango_rider = 2,
|
||||
dango_adrenaline = 3,
|
||||
-- dango_carver_lo = 4,
|
||||
-- dango_carver_hi = 5,
|
||||
-- dango_medic_lo = 6,
|
||||
-- dango_medic_hi = 7,
|
||||
-- dango_fighter = 8,
|
||||
-- dango_pyro = 9,
|
||||
-- dango_specialist = 10,
|
||||
-- dango_defender_lo = 11,
|
||||
-- dango_defender_hi = 12,
|
||||
-- dango_harvester = 13,
|
||||
-- dango_marksman = 14,
|
||||
-- dango_fortune_caller = 15,
|
||||
-- dango_miracle_worker = 16,
|
||||
-- dango_deflector = 17,
|
||||
-- dango_weakener = 18,
|
||||
-- dango_calculator = 19,
|
||||
-- dango_temper = 20,
|
||||
-- dango_wall_runner = 21,
|
||||
-- dango_slugger = 22,
|
||||
-- dango_money_maker = 23,
|
||||
-- dango_bombardier = 24,
|
||||
-- dango_moxie = 25,
|
||||
-- dango_immunizer = 26,
|
||||
-- dango_trainer = 27,
|
||||
dango_booster = 28,
|
||||
-- dango_feet = 29,
|
||||
dango_bulker = 30,
|
||||
dango_insurance = 31,
|
||||
-- dango_reviver = 32,
|
||||
-- dango_summoner = 33,
|
||||
-- dango_hurler = 34,
|
||||
-- dango_fire_res_lo = 35,
|
||||
-- dango_fire_res_hi = 36,
|
||||
-- dango_water_res_lo = 37,
|
||||
-- dango_water_res_hi = 38,
|
||||
-- dango_thunder_res_lo = 39,
|
||||
-- dango_thunder_res_hi = 40,
|
||||
-- dango_ice_res_lo = 41,
|
||||
-- dango_ice_res_hi = 42,
|
||||
-- dango_dragon_res_lo = 43,
|
||||
-- dango_dragon_res_hi = 44,
|
||||
-- dango_gatherer = 45,
|
||||
dango_glutton = 46,
|
||||
-- dango_bird_caller = 47,
|
||||
dango_flyer = 48,
|
||||
dango_defender = 49,
|
||||
-- enhanced_dango_fighter = 50,
|
||||
-- dango_driver = 51,
|
||||
dango_hunter = 52,
|
||||
-- dango_guard = 53,
|
||||
-- dango_shifter = 54,
|
||||
dango_connector = 55,
|
||||
super_recovery_dango = 56
|
||||
};
|
||||
|
||||
|
||||
this.is_dango_adrenaline_active = false;
|
||||
|
||||
local dango_skills_type_name = "dango_skills";
|
||||
|
||||
local dango_bulker_attack_up = 15;
|
||||
local previous_super_recovery_dango_timer = 0;
|
||||
|
||||
local player_manager_type_def = sdk.find_type_definition("snow.player.PlayerManager");
|
||||
local has_anyone_kitchen_skill_in_quest_method = player_manager_type_def:get_method("hasAnyoneKitchenSkillInQuest");
|
||||
|
||||
|
||||
local player_data_type_def = sdk.find_type_definition("snow.player.PlayerData");
|
||||
-- Dango Defender
|
||||
local is_enable_kitchen_skill_048_reduce_field = player_data_type_def:get_field("_IsEnable_KitchenSkill048_Reduce");
|
||||
-- Dango Booster
|
||||
local kitchen_skill_027_timer_field = player_data_type_def:get_field("_KitchenSkill027Timer");
|
||||
-- Dango Glutton
|
||||
local kitchen_skill_045_timer_field = player_data_type_def:get_field("_KitchenSkill045Timer");
|
||||
-- Dango Insurance
|
||||
local kitchen_skill_insurance_def_up_lv3_field = player_data_type_def:get_field("_KitchenSkill_Insurance_DefUp_Lv3");
|
||||
local kitchen_skill_insurance_def_up_lv4_field = player_data_type_def:get_field("_KitchenSkill_Insurance_DefUp_Lv4");
|
||||
-- Dango Hunter
|
||||
local kitchen_skill_051_atk_up_timer_field = player_data_type_def:get_field("_KitchenSkill051_AtkUpTimer");
|
||||
-- Dango Connector
|
||||
local kitchen_skill_054_timer_field = player_data_type_def:get_field("_KitchenSkill054_Timer");
|
||||
|
||||
|
||||
local player_base_type_def = sdk.find_type_definition("snow.player.PlayerBase");
|
||||
-- Dango Adrenaline
|
||||
-- local is_kitchen_skill_predicament_powerup_method = player_base_type_def:get_method("isKitchenSkillPredicamentPowerUp");
|
||||
-- Dango Flyer
|
||||
local get_is_kitchen_skill_wire_stop_heal_spd_method = player_base_type_def:get_method("get_IsKitchenSkill_WireStop_HealSpd");
|
||||
local get_is_kitchen_skill_wire_stop_regene_method = player_base_type_def:get_method("get_IsKitchenSkill_WireStop_Regene");
|
||||
-- Super Recovery Dango
|
||||
local get_kitchen_skill_surume_regene_timer_method = player_base_type_def:get_method("get_KitchenSkill_Surume_RegeneTimer");
|
||||
|
||||
|
||||
|
||||
local data_shortcut_type_def = sdk.find_type_definition("snow.data.DataShortcut");
|
||||
local get_name_method = data_shortcut_type_def:get_method("getName(snow.data.DataDef.PlKitchenSkillId)");
|
||||
|
||||
local quest_manager_type_def = sdk.find_type_definition("snow.QuestManager");
|
||||
local flag_cat_skill_insurance_field = quest_manager_type_def:get_field("_FlagCatSkillInsurance");
|
||||
local is_cat_skill_insurance_method = quest_manager_type_def:get_method("isCatSkillInsurance");
|
||||
|
||||
function this.update(player, player_data)
|
||||
this.update_dango_adrenaline();
|
||||
this.update_dango_hunter(player_data);
|
||||
this.update_dango_insurance();
|
||||
this.update_dango_insurance_defense_up(player_data);
|
||||
this.update_dango_flyer(player);
|
||||
this.update_super_recovery_dango(player);
|
||||
|
||||
this.update_dango_skill("dango_booster", nil, nil, player_data, kitchen_skill_027_timer_field);
|
||||
this.update_dango_skill("dango_defender", player_data, is_enable_kitchen_skill_048_reduce_field, nil, nil, true);
|
||||
this.update_dango_skill("dango_glutton", nil, nil, player_data, kitchen_skill_045_timer_field);
|
||||
this.update_dango_skill("dango_connector", nil, nil, player_data, kitchen_skill_054_timer_field);
|
||||
end
|
||||
|
||||
function this.update_dango_skill(key, value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints)
|
||||
return buffs.update_generic_buff(this.list, config.current_config.buff_UI.filter.dango_skills, this.get_dango_skill_name,
|
||||
dango_skills_type_name, key,
|
||||
value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints);
|
||||
end
|
||||
|
||||
function this.update_generic(key, level, timer)
|
||||
return buffs.update_generic(this.list, this.get_dango_skill_name, dango_skills_type_name, key, level, timer);
|
||||
end
|
||||
|
||||
function this.apply_filter(key)
|
||||
return buffs.apply_filter(this.list, config.current_config.buff_UI.filter.dango_skills, key);
|
||||
end
|
||||
|
||||
function this.update_dango_adrenaline()
|
||||
if this.apply_filter("dango_adrenaline") then
|
||||
return;
|
||||
end
|
||||
|
||||
if not this.is_dango_adrenaline_active then
|
||||
this.list.dango_adrenaline = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
this.update_generic("dango_adrenaline");
|
||||
end
|
||||
|
||||
function this.update_dango_insurance()
|
||||
if this.apply_filter("dango_insurance") then
|
||||
return;
|
||||
end
|
||||
|
||||
if singletons.player_manager == nil then
|
||||
error_handler.report("dango_skills.update_dango_insurance", "Failed to Access Data: player_manager");
|
||||
this.list.dango_insurance = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if singletons.quest_manager == nil then
|
||||
error_handler.report("dango_skills.update_dango_insurance", "Failed to Access Data: quest_manager");
|
||||
this.list.dango_insurance = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local has_insurance_skill = has_anyone_kitchen_skill_in_quest_method:call(singletons.player_manager, dango_skill_ids.dango_insurance);
|
||||
|
||||
local flag_cat_skill_insurance = flag_cat_skill_insurance_field:get_data(singletons.quest_manager);
|
||||
if flag_cat_skill_insurance == nil then
|
||||
error_handler.report("dango_skills.update_dango_insurance", "Failed to Access Data: flag_cat_skill_insurance");
|
||||
this.list.dango_insurance = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local is_cat_skill_insurance = is_cat_skill_insurance_method:call(singletons.quest_manager, flag_cat_skill_insurance);
|
||||
if is_cat_skill_insurance == nil then
|
||||
error_handler.report("dango_skills.update_dango_insurance", "Failed to Access Data: is_cat_skill_insurance");
|
||||
this.list.dango_insurance = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if not has_insurance_skill or is_cat_skill_insurance then
|
||||
this.list.dango_insurance = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
this.update_generic("dango_insurance");
|
||||
end
|
||||
|
||||
function this.update_dango_insurance_defense_up(player_data)
|
||||
if this.apply_filter("dango_insurance_defense_up") then
|
||||
return;
|
||||
end
|
||||
|
||||
local level = 3;
|
||||
|
||||
local insurance_def_up_lv3 = kitchen_skill_insurance_def_up_lv3_field:get_data(player_data);
|
||||
if insurance_def_up_lv3 == nil then
|
||||
error_handler.report("dango_skills.update_dango_insurance_defense_up", "Failed to Access Data: insurance_def_up_lv3");
|
||||
this.list.dango_insurance_defense_up = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if not insurance_def_up_lv3 then
|
||||
local insurance_def_up_lv4 = kitchen_skill_insurance_def_up_lv4_field:get_data(player_data);
|
||||
|
||||
if insurance_def_up_lv4 == nil then
|
||||
error_handler.report("dango_skills.update_dango_insurance_defense_up", "Failed to Access Data: insurance_def_up_lv4");
|
||||
this.list.dango_insurance_defense_up = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if not insurance_def_up_lv4 then
|
||||
this.list.dango_insurance_defense_up = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
level = 4;
|
||||
end
|
||||
|
||||
this.update_generic("dango_insurance_defense_up", level);
|
||||
end
|
||||
|
||||
function this.update_dango_flyer(player)
|
||||
if this.apply_filter("dango_flyer") then
|
||||
return;
|
||||
end
|
||||
|
||||
local level = 4;
|
||||
|
||||
local is_kitchen_skill_wire_stop_regene = get_is_kitchen_skill_wire_stop_regene_method:call(player);
|
||||
if is_kitchen_skill_wire_stop_regene == nil then
|
||||
error_handler.report("dango_skills.update_dango_flyer", "Failed to Access Data: is_kitchen_skill_wire_stop_regene");
|
||||
this.list.dango_flyer = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if not is_kitchen_skill_wire_stop_regene then
|
||||
|
||||
local is_kitchen_skill_wire_stop_heal_spd = get_is_kitchen_skill_wire_stop_heal_spd_method:call(player);
|
||||
if is_kitchen_skill_wire_stop_heal_spd == nil then
|
||||
error_handler.report("dango_skills.update_dango_flyer", "Failed to Access Data: is_kitchen_skill_wire_stop_heal_spd");
|
||||
this.list.dango_flyer = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if not is_kitchen_skill_wire_stop_regene then
|
||||
this.list.dango_flyer = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
level = 3;
|
||||
end
|
||||
|
||||
this.update_generic("dango_flyer", level);
|
||||
end
|
||||
|
||||
function this.update_dango_hunter(player_data)
|
||||
local dango_hunter_buff = this.update_dango_skill("dango_hunter", nil, nil, player_data, kitchen_skill_051_atk_up_timer_field);
|
||||
|
||||
if dango_hunter_buff ~= nil then
|
||||
dango_hunter_buff.level = 4;
|
||||
end
|
||||
end
|
||||
|
||||
function this.update_super_recovery_dango(player)
|
||||
if this.apply_filter("super_recovery_dango") then
|
||||
return;
|
||||
end
|
||||
|
||||
local kitchen_skill_surume_regene_timer = get_kitchen_skill_surume_regene_timer_method:call(player);
|
||||
if kitchen_skill_surume_regene_timer == nil then
|
||||
error_handler.report("dango_skills.update_super_recovery_dango", "Failed to Access Data: kitchen_skill_surume_regene_timer");
|
||||
this.list.super_recovery_dango = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if utils.number.is_equal(kitchen_skill_surume_regene_timer, 0)
|
||||
and utils.number.is_equal(previous_super_recovery_dango_timer, 0) then
|
||||
this.list.super_recovery_dango = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
previous_super_recovery_dango_timer = kitchen_skill_surume_regene_timer;
|
||||
this.update_generic("super_recovery_dango");
|
||||
end
|
||||
|
||||
function this.init_all_UI()
|
||||
for dango_skill_key, dango_skill in pairs(this.list) do
|
||||
buffs.init_UI(dango_skill);
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_names()
|
||||
for dango_skill_key, dango_skill in pairs(this.list) do
|
||||
dango_skill.name = this.get_dango_skill_name(dango_skill_key);
|
||||
end
|
||||
end
|
||||
|
||||
function this.get_dango_skill_name(key)
|
||||
local dango_skill_id = dango_skill_ids[key];
|
||||
if dango_skill_id == nil then
|
||||
|
||||
local dango_skill_name = language.current_language.dango_skills[key];
|
||||
if dango_skill_name == nil then
|
||||
return key;
|
||||
end
|
||||
|
||||
return dango_skill_name;
|
||||
end
|
||||
|
||||
local dango_skill_name = get_name_method:call(nil, dango_skill_id);
|
||||
if dango_skill_name == nil then
|
||||
error_handler.report("dango_skills.get_dango_name", string.format("Failed to Access Data: %s_name", key));
|
||||
return key;
|
||||
end
|
||||
|
||||
return dango_skill_name;
|
||||
end
|
||||
|
||||
function this.init_dependencies()
|
||||
buffs = require("MHR_Overlay.Buffs.buffs");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
time = require("MHR_Overlay.Game_Handler.time");
|
||||
end
|
||||
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
229
reframework/autorun/MHR_Overlay/Buffs/endemic_life_buffs.lua
Normal file
229
reframework/autorun/MHR_Overlay/Buffs/endemic_life_buffs.lua
Normal file
@@ -0,0 +1,229 @@
|
||||
local this = {};
|
||||
|
||||
local buffs;
|
||||
local buff_UI_entity;
|
||||
local config;
|
||||
local singletons;
|
||||
local players;
|
||||
local utils;
|
||||
local language;
|
||||
local error_handler;
|
||||
local env_creature;
|
||||
local item_buffs;
|
||||
local time;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
this.list = {
|
||||
cutterfly = nil,
|
||||
clothfly = nil,
|
||||
butterflame = nil,
|
||||
-- peepersects = nil,
|
||||
stinkmink = nil,
|
||||
ruby_wirebug = nil,
|
||||
gold_wirebug = nil,
|
||||
red_lampsquid = nil,
|
||||
yellow_lampsquid = nil
|
||||
};
|
||||
|
||||
this.keys = {
|
||||
"cutterfly",
|
||||
"clothfly",
|
||||
"butterflame",
|
||||
-- "peepersects",
|
||||
"stinkmink",
|
||||
"ruby_wirebug",
|
||||
"gold_wirebug",
|
||||
"red_lampsquid",
|
||||
"yellow_lampsquid"
|
||||
};
|
||||
|
||||
this.peepersects_duration = 90;
|
||||
this.butterflame_attack_up = 25;
|
||||
|
||||
local endemic_life_buffs_type_name = "endemic_life_buffs";
|
||||
|
||||
local marionette_mode_types = { "ruby_wirebug", "gold_wirebug" };
|
||||
|
||||
|
||||
|
||||
local player_data_type_def = sdk.find_type_definition("snow.player.PlayerData");
|
||||
-- Cutterfly
|
||||
local crit_up_ec_second_timer_field = player_data_type_def:get_field("_CritUpEcSecondTimer");
|
||||
-- Clothfly
|
||||
local def_up_buff_second_rate_timer_field = player_data_type_def:get_field("_DefUpBuffSecondRateTimer");
|
||||
-- Ruby/Gold Wirebugs
|
||||
local wirebug_powerup_timer_field = player_data_type_def:get_field("_WireBugPowerUpTimer");
|
||||
-- Butterflame
|
||||
local atk_up_buff_second_field = player_data_type_def:get_field("_AtkUpBuffSecond");
|
||||
local atk_up_buff_second_timer_field = player_data_type_def:get_field("_AtkUpBuffSecondTimer");
|
||||
-- Stinkmink
|
||||
local lead_enemy_timer_field = player_data_type_def:get_field("_LeadEnemyTimer");
|
||||
-- Red Lampsquid
|
||||
local atk_up_ec_second_timer_field = player_data_type_def:get_field("_AtkUpEcSecondTimer");
|
||||
-- Yellow Lampsquid
|
||||
local def_up_ec_second_timer_field = player_data_type_def:get_field("_DefUpEcSecondTimer");
|
||||
|
||||
|
||||
local player_quest_base_type_def = sdk.find_type_definition("snow.player.PlayerQuestBase");
|
||||
-- Ruby/Gold Wirebugs
|
||||
local get_marionette_mode_type_method = player_quest_base_type_def:get_method("get_MarionetteModeType");
|
||||
|
||||
local message_manager_type_def = sdk.find_type_definition("snow.gui.MessageManager");
|
||||
local get_env_creature_name_message_method = message_manager_type_def:get_method("getEnvCreatureNameMessage");
|
||||
|
||||
function this.update(player, player_data, item_parameter)
|
||||
this.update_ruby_and_gold_wirebugs(player, player_data);
|
||||
this.update_butterflame(player_data);
|
||||
|
||||
this.update_endemic_life_buff("cutterfly", nil, nil, player_data, crit_up_ec_second_timer_field);
|
||||
this.update_endemic_life_buff("clothfly", nil, nil, player_data, def_up_buff_second_rate_timer_field);
|
||||
this.update_endemic_life_buff("stinkmink", nil, nil, player_data, lead_enemy_timer_field);
|
||||
this.update_endemic_life_buff("red_lampsquid", nil, nil, player_data, atk_up_ec_second_timer_field);
|
||||
this.update_endemic_life_buff("yellow_lampsquid", nil, nil, player_data, def_up_ec_second_timer_field);
|
||||
end
|
||||
|
||||
function this.update_endemic_life_buff(key, value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints)
|
||||
return buffs.update_generic_buff(this.list, config.current_config.buff_UI.filter.endemic_life_buffs, this.get_endemic_life_name,
|
||||
endemic_life_buffs_type_name, key,
|
||||
value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints)
|
||||
end
|
||||
|
||||
function this.update_generic(key, level, timer)
|
||||
return buffs.update_generic(this.list, this.get_endemic_life_name, endemic_life_buffs_type_name, key, level, timer);
|
||||
end
|
||||
|
||||
function this.apply_filter(key)
|
||||
return buffs.apply_filter(this.list, config.current_config.buff_UI.filter.endemic_life_buffs, key);
|
||||
end
|
||||
|
||||
function this.update_ruby_and_gold_wirebugs(player, player_data)
|
||||
local cached_config = config.current_config.buff_UI.filter.endemic_life_buffs;
|
||||
|
||||
if not cached_config.ruby_wirebug
|
||||
and not cached_config.gold_wirebug then
|
||||
if this.apply_filter("ruby_wirebug") then
|
||||
return;
|
||||
end
|
||||
|
||||
if this.apply_filter("gold_wirebug") then
|
||||
return;
|
||||
end
|
||||
end
|
||||
|
||||
local marionette_mode_type = get_marionette_mode_type_method:call(player);
|
||||
if marionette_mode_type == nil then
|
||||
error_handler.report("endemic_life_buffs.update_ruby_and_gold_wirebugs", "Failed to Access Data: marionette_mode_type");
|
||||
this.list.ruby_wirebug = nil;
|
||||
this.list.gold_wirebug = nil;
|
||||
end
|
||||
|
||||
if marionette_mode_type ~= 1 and marionette_mode_type ~= 2 then
|
||||
this.list.ruby_wirebug = nil;
|
||||
this.list.gold_wirebug = nil;
|
||||
return;
|
||||
elseif marionette_mode_type ~= 1 then
|
||||
this.list.ruby_wirebug = nil;
|
||||
else
|
||||
this.list.gold_wirebug = nil;
|
||||
end
|
||||
|
||||
local endemic_life_buff_key = marionette_mode_types[marionette_mode_type];
|
||||
this.update_endemic_life_buff(endemic_life_buff_key, nil, nil, player_data, wirebug_powerup_timer_field);
|
||||
end
|
||||
|
||||
function this.update_butterflame(player_data)
|
||||
if this.apply_filter("butterflame") then
|
||||
return;
|
||||
end
|
||||
|
||||
local atk_up_buff_second = atk_up_buff_second_field:get_data(player_data);
|
||||
if atk_up_buff_second == nil then
|
||||
error_handler.report("item_buffs.update_butterflame", "Failed to Access Data: atk_up_buff_second");
|
||||
this.list.butterflame = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if atk_up_buff_second ~= this.butterflame_attack_up then
|
||||
this.list.butterflame = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
this.update_endemic_life_buff("butterflame", nil, nil, player_data, atk_up_buff_second_timer_field);
|
||||
end
|
||||
|
||||
function this.init_all_UI()
|
||||
for endemic_life_key, endemic_life in pairs(this.list) do
|
||||
buffs.init_UI(endemic_life);
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_names()
|
||||
for endemic_life_key, endemic_life in pairs(this.list) do
|
||||
endemic_life.name = this.get_endemic_life_name(endemic_life_key);
|
||||
end
|
||||
end
|
||||
|
||||
function this.get_endemic_life_name(key)
|
||||
if singletons.message_manager == nil then
|
||||
error_handler.report("endemic_life_buffs.get_endemic_life_name", "Failed to Access Data: message_manager");
|
||||
return key;
|
||||
end
|
||||
|
||||
local endemic_life_name = get_env_creature_name_message_method:call(singletons.message_manager, env_creature.creature_ids[key]);
|
||||
if endemic_life_name == nil then
|
||||
error_handler.report("endemic_life_buffs.get_endemic_life_name", string.format("Failed to Access Data: %s_name", key));
|
||||
return key;
|
||||
end
|
||||
|
||||
return endemic_life_name;
|
||||
end
|
||||
|
||||
function this.init_dependencies()
|
||||
buffs = require("MHR_Overlay.Buffs.buffs");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
env_creature = require("MHR_Overlay.Endemic_Life.env_creature");
|
||||
item_buffs = require("MHR_Overlay.Buffs.item_buffs");
|
||||
time = require("MHR_Overlay.Game_Handler.time");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
340
reframework/autorun/MHR_Overlay/Buffs/item_buffs.lua
Normal file
340
reframework/autorun/MHR_Overlay/Buffs/item_buffs.lua
Normal file
@@ -0,0 +1,340 @@
|
||||
local this = {};
|
||||
|
||||
local buffs;
|
||||
local buff_UI_entity;
|
||||
local config;
|
||||
local singletons;
|
||||
local players;
|
||||
local utils;
|
||||
local language;
|
||||
local error_handler;
|
||||
local endemic_life_buffs;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
this.list = {
|
||||
demondrug = nil,
|
||||
mega_demondrug = nil,
|
||||
armorskin = nil,
|
||||
mega_armorskin = nil,
|
||||
might_seed = nil,
|
||||
-- adamant_seed = nil,
|
||||
demon_powder = nil,
|
||||
hardshell_powder = nil,
|
||||
-- immunizer = nil,
|
||||
-- dash_juice = nil,
|
||||
gourmet_fish = nil,
|
||||
demon_ammo = nil,
|
||||
armor_ammo = nil
|
||||
};
|
||||
|
||||
this.keys = {
|
||||
"demondrug",
|
||||
"mega_demondrug",
|
||||
"armorskin",
|
||||
"mega_armorskin",
|
||||
"might_seed",
|
||||
-- "adamant_seed",
|
||||
"demon_powder",
|
||||
"hardshell_powder",
|
||||
-- "immunizer",
|
||||
-- "dash_juice",
|
||||
"gourmet_fish",
|
||||
"demon_ammo",
|
||||
"armor_ammo"
|
||||
};
|
||||
|
||||
local item_ids = {
|
||||
demondrug = 68157917,
|
||||
mega_demondrug = 68157918,
|
||||
armorskin = 68157922,
|
||||
mega_armorskin = 68157923,
|
||||
might_seed = 68157919,
|
||||
-- adamant_seed = 68157924,
|
||||
demon_powder = 68157920,
|
||||
hardshell_powder = 68157925,
|
||||
-- immunizer = 68157911,
|
||||
-- dash_juice = 68157913,
|
||||
gourmet_fish = 68157909,
|
||||
demon_ammo = 68157595,
|
||||
armor_ammo = 68157596
|
||||
}
|
||||
|
||||
this.might_seed_attack_up = 10;
|
||||
|
||||
local item_buffs_type_name = "item_buffs";
|
||||
|
||||
local player_data_type_def = sdk.find_type_definition("snow.player.PlayerData");
|
||||
-- Demondrug/Mega Demondrug
|
||||
local atk_up_alive_field = player_data_type_def:get_field("_AtkUpAlive");
|
||||
-- Armorskin/Mega Armorskin
|
||||
local def_up_alive_field = player_data_type_def:get_field("_DefUpAlive");
|
||||
-- Might Seed
|
||||
local atk_up_buff_second_field = player_data_type_def:get_field("_AtkUpBuffSecond");
|
||||
local atk_up_buff_second_timer_field = player_data_type_def:get_field("_AtkUpBuffSecondTimer");
|
||||
-- Demon Powder
|
||||
local atk_up_item_second_field = player_data_type_def:get_field("_AtkUpItemSecond");
|
||||
local atk_up_item_second_timer_field = player_data_type_def:get_field("_AtkUpItemSecondTimer");
|
||||
-- Hardshell Powder
|
||||
local def_up_item_second_field = player_data_type_def:get_field("_DefUpItemSecond");
|
||||
local def_up_item_second_timer_field = player_data_type_def:get_field("_DefUpItemSecondTimer");
|
||||
-- Gourmet Fish
|
||||
local fish_regene_enable_field = player_data_type_def:get_field("_FishRegeneEnableTimer");
|
||||
-- Demon Ammo
|
||||
local kijin_bullet_timer_field = player_data_type_def:get_field("_KijinBulletTimer");
|
||||
-- Armor Ammo
|
||||
local kouka_bullet_timer_field = player_data_type_def:get_field("_KoukaBulletTimer");
|
||||
|
||||
local player_manager_type_def = sdk.find_type_definition("snow.player.PlayerManager");
|
||||
local get_ref_item_parameter_method = player_manager_type_def:get_method("get_RefItemParameter");
|
||||
|
||||
local player_user_data_item_parameter_type_def = get_ref_item_parameter_method:get_return_type();
|
||||
|
||||
-- Demondrug/Mega Demondrug
|
||||
local demondrug_atk_up_field = player_user_data_item_parameter_type_def:get_field("_DemondrugAtkUp");
|
||||
local great_demondrug_atk_up_field = player_user_data_item_parameter_type_def:get_field("_GreatDemondrugAtkUp");
|
||||
-- Armorskin/Mega Armorskin
|
||||
local armorskin_def_up_field = player_user_data_item_parameter_type_def:get_field("_ArmorSkinDefUp");
|
||||
local great_armorskin_def_up_field = player_user_data_item_parameter_type_def:get_field("_GreatArmorSkinDefUp");
|
||||
-- Might Seed
|
||||
local might_seed_atk_up_field = player_user_data_item_parameter_type_def:get_field("_MightSeedAtkUp");
|
||||
|
||||
|
||||
local data_shortcut_type_def = sdk.find_type_definition("snow.data.DataShortcut");
|
||||
local get_name_method = data_shortcut_type_def:get_method("getName(snow.data.ContentsIdSystem.ItemId)");
|
||||
|
||||
function this.update(player_data, item_parameter)
|
||||
this.update_demondrug(player_data, item_parameter);
|
||||
this.update_armorskin(player_data, item_parameter);
|
||||
this.update_might_seed(player_data, item_parameter);
|
||||
|
||||
this.update_item_buff("demon_powder", player_data, atk_up_item_second_field, player_data, atk_up_item_second_timer_field);
|
||||
this.update_item_buff("hardshell_powder", player_data, def_up_item_second_field, player_data, def_up_item_second_timer_field);
|
||||
this.update_item_buff("gourmet_fish", nil, nil, player_data, fish_regene_enable_field);
|
||||
this.update_item_buff("demon_ammo", nil, nil, player_data, kijin_bullet_timer_field);
|
||||
this.update_item_buff("armor_ammo", nil, nil, player_data, kouka_bullet_timer_field);
|
||||
end
|
||||
|
||||
function this.update_item_buff(key, value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints)
|
||||
return buffs.update_generic_buff(this.list, config.current_config.buff_UI.filter.item_buffs, this.get_item_buff_name,
|
||||
item_buffs_type_name, key,
|
||||
value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints)
|
||||
end
|
||||
|
||||
function this.update_generic(key, level, timer)
|
||||
return buffs.update_generic(this.list, this.get_item_buff_name, item_buffs_type_name, key, level, timer);
|
||||
end
|
||||
|
||||
function this.apply_filter(key)
|
||||
return buffs.apply_filter(this.list, config.current_config.buff_UI.filter.item_buffs, key);
|
||||
end
|
||||
|
||||
function this.update_demondrug(player_data, item_parameter)
|
||||
local cached_config = config.current_config.buff_UI.filter.item_buffs;
|
||||
|
||||
if not cached_config.demondrug and not cached_config.mega_demondrug then
|
||||
this.list.demondrug = nil;
|
||||
this.list.mega_demondrug = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local demondrug_value = atk_up_alive_field:get_data(player_data);
|
||||
if demondrug_value == nil then
|
||||
error_handler.report("item_buffs.update_demondrug", "Failed to Access Data: demondrug_value");
|
||||
this.list.demondrug = nil;
|
||||
this.list.mega_demondrug = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if demondrug_value == 0 then
|
||||
this.list.demondrug = nil;
|
||||
this.list.mega_demondrug = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local demondrug_const_value = demondrug_atk_up_field:get_data(item_parameter);
|
||||
if demondrug_const_value == nil then
|
||||
error_handler.report("item_buffs.update_demondrug", "Failed to Access Data: demondrug_const_value");
|
||||
this.list.demondrug = nil;
|
||||
this.list.mega_demondrug = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local mega_demondrug_const_value = great_demondrug_atk_up_field:get_data(item_parameter);
|
||||
if mega_demondrug_const_value == nil then
|
||||
error_handler.report("item_buffs.update_demondrug", "Failed to Access Data: mega_demondrug_const_value");
|
||||
this.list.demondrug = nil;
|
||||
this.list.mega_demondrug = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local item_key;
|
||||
if demondrug_value == demondrug_const_value then
|
||||
item_key = "demondrug";
|
||||
this.list.mega_demondrug = nil;
|
||||
|
||||
elseif demondrug_value == mega_demondrug_const_value then
|
||||
item_key = "mega_demondrug";
|
||||
this.list.demondrug = nil;
|
||||
end
|
||||
|
||||
if not cached_config[item_key] then
|
||||
this.list[item_key] = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
this.update_generic(item_key);
|
||||
end
|
||||
|
||||
function this.update_armorskin(player_data, item_parameter)
|
||||
local cached_config = config.current_config.buff_UI.filter.item_buffs;
|
||||
|
||||
if not cached_config.armorskin and not cached_config.mega_armorskin then
|
||||
this.list.armorskin = nil;
|
||||
this.list.mega_armorskin = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local armorskin_value = def_up_alive_field:get_data(player_data);
|
||||
if armorskin_value == nil then
|
||||
error_handler.report("item_buffs.update_armorskin", "Failed to Access Data: armorskin_value");
|
||||
this.list.armorskin = nil;
|
||||
this.list.mega_armorskin = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if armorskin_value == 0 then
|
||||
this.list.armorskin = nil;
|
||||
this.list.mega_armorskin = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local armorskin_const_value = armorskin_def_up_field:get_data(item_parameter);
|
||||
if armorskin_const_value == nil then
|
||||
error_handler.report("item_buffs.update_armorskin", "Failed to Access Data: armorskin_const_value");
|
||||
this.list.armorskin = nil;
|
||||
this.list.mega_armorskin = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local mega_armorskin_const_value = great_armorskin_def_up_field:get_data(item_parameter);
|
||||
if mega_armorskin_const_value == nil then
|
||||
error_handler.report("item_buffs.update_armorskin", "Failed to Access Data: mega_armorskin_const_value");
|
||||
this.list.armorskin = nil;
|
||||
this.list.mega_armorskin = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local item_key;
|
||||
if armorskin_value == armorskin_const_value then
|
||||
item_key = "armorskin";
|
||||
this.list.mega_armorskin = nil;
|
||||
|
||||
elseif armorskin_value == mega_armorskin_const_value then
|
||||
item_key = "mega_armorskin";
|
||||
this.list.armorskin = nil;
|
||||
end
|
||||
|
||||
if not cached_config[item_key] then
|
||||
this.list[item_key] = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
this.update_generic(item_key);
|
||||
end
|
||||
|
||||
function this.update_might_seed(player_data, item_parameter)
|
||||
if this.apply_filter("might_seed") then
|
||||
return;
|
||||
end
|
||||
|
||||
local atk_up_buff_second = atk_up_buff_second_field:get_data(player_data);
|
||||
if atk_up_buff_second == nil then
|
||||
error_handler.report("item_buffs.update_might_seed", "Failed to Access Data: atk_up_buff_second");
|
||||
this.list.might_seed = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local might_seed_atk_up = might_seed_atk_up_field:get_data(item_parameter);
|
||||
if might_seed_atk_up == nil then
|
||||
error_handler.report("item_buffs.update_might_seed", "Failed to Access Data: might_seed_atk_up");
|
||||
this.list.might_seed = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if atk_up_buff_second ~= might_seed_atk_up then
|
||||
this.list.might_seed = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
this.update_item_buff("might_seed", nil, nil, player_data, atk_up_buff_second_timer_field);
|
||||
end
|
||||
|
||||
function this.init_all_UI()
|
||||
for item_buff_key, item_buff in pairs(this.list) do
|
||||
buffs.init_UI(item_buff);
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_names()
|
||||
for item_buff_key, item_buff in pairs(this.list) do
|
||||
item_buff.name = this.get_item_buff_name(item_buff_key);
|
||||
end
|
||||
end
|
||||
|
||||
function this.get_item_buff_name(key)
|
||||
local item_buff_name = get_name_method:call(nil, item_ids[key]);
|
||||
if item_buff_name == nil then
|
||||
error_handler.report("item_buffs.get_item_buff_name", string.format("Failed to Access Data: %s_name", key));
|
||||
return key;
|
||||
end
|
||||
|
||||
return item_buff_name;
|
||||
end
|
||||
|
||||
function this.init_dependencies()
|
||||
buffs = require("MHR_Overlay.Buffs.buffs");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
endemic_life_buffs = require("MHR_Overlay.Buffs.endemic_life_buffs");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
258
reframework/autorun/MHR_Overlay/Buffs/melody_effects.lua
Normal file
258
reframework/autorun/MHR_Overlay/Buffs/melody_effects.lua
Normal file
@@ -0,0 +1,258 @@
|
||||
local this = {};
|
||||
|
||||
local buffs;
|
||||
local buff_UI_entity;
|
||||
local config;
|
||||
local singletons;
|
||||
local players;
|
||||
local utils;
|
||||
local language;
|
||||
local error_handler;
|
||||
local time;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
--[[local melody_effect_ids = {
|
||||
self_improvement = 0,
|
||||
attack_up = 1,
|
||||
defense_up = 2,
|
||||
affinity_up = 3,
|
||||
elemental_attack_boost = 4,
|
||||
attack_and_defense_up = 5,
|
||||
attack_and_affinity_up = 6,
|
||||
knockbacks_negated = 7,
|
||||
earplugs_s = 8,
|
||||
earplugs_l = 9,
|
||||
tremors_negated = 10,
|
||||
wind_pressure_negated = 11,
|
||||
stun_negated = 12,
|
||||
blight_negated = 13,
|
||||
divine_protection = 14,
|
||||
health_recovery_s = 15,
|
||||
health_recovery_l = 16,
|
||||
health_recovery_s_antidote = 17,
|
||||
health_regeneration = 18,
|
||||
stamina_use_reduced = 19,
|
||||
stamina_recovery_up = 20,
|
||||
sharpness_loss_reduced = 21,
|
||||
environment_damage_negated = 22,
|
||||
sonic_wave = 23,
|
||||
sonic_barrier = 24,
|
||||
infernal_melody = 25,
|
||||
sharpness_regeneration = 26,
|
||||
sharpness_extension = 27
|
||||
};]]
|
||||
|
||||
this.keys = {
|
||||
"self_improvement",
|
||||
"attack_up",
|
||||
"defense_up",
|
||||
"affinity_up",
|
||||
"elemental_attack_boost",
|
||||
"attack_and_defense_up",
|
||||
"attack_and_affinity_up",
|
||||
"knockbacks_negated",
|
||||
"earplugs_s",
|
||||
"earplugs_l",
|
||||
"tremors_negated",
|
||||
"wind_pressure_negated",
|
||||
"stun_negated",
|
||||
"blight_negated",
|
||||
"divine_protection",
|
||||
"health_recovery_s",
|
||||
"health_recovery_l",
|
||||
"health_recovery_s_antidote",
|
||||
"health_regeneration",
|
||||
"stamina_use_reduced",
|
||||
"stamina_recovery_up",
|
||||
"sharpness_loss_reduced",
|
||||
"environment_damage_negated",
|
||||
"sonic_wave",
|
||||
"sonic_barrier",
|
||||
"infernal_melody",
|
||||
"sharpness_regeneration",
|
||||
"sharpness_extension"
|
||||
};
|
||||
|
||||
this.list = {};
|
||||
|
||||
local melody_effects_type_name = "melody_effects";
|
||||
|
||||
local player_manager_type_def = sdk.find_type_definition("snow.player.PlayerManager");
|
||||
local find_master_player_method = player_manager_type_def:get_method("findMasterPlayer");
|
||||
|
||||
local player_base_type_def = find_master_player_method:get_return_type();
|
||||
local music_data_field = player_base_type_def:get_field("_MusicData");
|
||||
|
||||
local music_data_type_def = sdk.find_type_definition("snow.player.Horn.MusicData");
|
||||
local time_field = music_data_type_def:get_field("_Time");
|
||||
|
||||
local system_array_type_def = sdk.find_type_definition("System.Array");
|
||||
local get_length_method = system_array_type_def:get_method("get_Length");
|
||||
local get_value_method = system_array_type_def:get_method("GetValue(System.Int32)");
|
||||
|
||||
local data_shortcut_type_def = sdk.find_type_definition("snow.data.DataShortcut");
|
||||
local get_name_method = data_shortcut_type_def:get_method("getName(snow.data.DataDef.HornConcertId)");
|
||||
|
||||
function this.update(master_player)
|
||||
local music_data_array = music_data_field:get_data(master_player);
|
||||
if music_data_array == nil then
|
||||
error_handler.report("melody_effects.update", "Failed to Access Data: music_data_array");
|
||||
return;
|
||||
end
|
||||
|
||||
local length = get_length_method:call(music_data_array);
|
||||
if length == nil then
|
||||
error_handler.report("melody_effects.update", "Failed to Access Data: music_data_array -> length");
|
||||
return;
|
||||
end
|
||||
|
||||
length = length - 1;
|
||||
|
||||
for id = 0, length do
|
||||
|
||||
local lua_index = id + 1;
|
||||
|
||||
local melody_effect = this.list[lua_index];
|
||||
local key = this.keys[lua_index];
|
||||
|
||||
if this.apply_filter(key, lua_index) then
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local music_data = get_value_method:call(music_data_array, id);
|
||||
if music_data == nil then
|
||||
error_handler.report("melody_effects.update", "Failed to Access Data: music_data No." .. tostring(id));
|
||||
this.list[lua_index] = nil;
|
||||
goto continue;
|
||||
end
|
||||
|
||||
this.update_melody_effect(lua_index, id, key, melody_effect, music_data);
|
||||
::continue::
|
||||
end
|
||||
end
|
||||
|
||||
function this.update_melody_effect(lua_index, id, key, melody_effect, melody_data)
|
||||
local melody_timer = time_field:get_data(melody_data);
|
||||
if melody_timer == nil then
|
||||
error_handler.report("melody_effects.update_melody_effect", "Failed to Access Data: melody_timer No. " .. tostring(id));
|
||||
this.list[lua_index] = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if utils.number.is_equal(melody_timer, 0) then
|
||||
this.list[lua_index] = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if melody_effect == nil then
|
||||
local melody_effect_name = this.get_melody_effect_name(id);
|
||||
|
||||
melody_effect = buffs.new(melody_effects_type_name, key, melody_effect_name, 1, melody_timer / 60);
|
||||
this.list[lua_index] = melody_effect;
|
||||
else
|
||||
buffs.update_timer(melody_effect, melody_timer / 60);
|
||||
end
|
||||
end
|
||||
|
||||
function this.apply_filter(key, lua_index)
|
||||
if config.current_config.buff_UI.filter.melody_effects[key] then
|
||||
return false;
|
||||
end
|
||||
|
||||
local buff = this.list[lua_index];
|
||||
if buff == nil then
|
||||
return true;
|
||||
end
|
||||
|
||||
if not buff.is_visible then
|
||||
return true;
|
||||
end
|
||||
|
||||
if buff.is_infinite then
|
||||
this.list[lua_index] = nil;
|
||||
return true;
|
||||
end
|
||||
|
||||
time.new_delay_timer(function()
|
||||
|
||||
local _buff = this.list[lua_index];
|
||||
if _buff ~= nil and not _buff.is_visible then
|
||||
this.list[lua_index] = nil;
|
||||
end
|
||||
|
||||
end, buff.timer);
|
||||
|
||||
buff.is_visible = false;
|
||||
return true;
|
||||
end
|
||||
|
||||
function this.init_all_UI()
|
||||
for melody_effect_id, melody_effect in pairs(this.list) do
|
||||
buffs.init_UI(melody_effect);
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_names()
|
||||
for melody_effect_id, melody_effect in pairs(this.list) do
|
||||
melody_effect.name = this.get_melody_effect_name(melody_effect_id - 1);
|
||||
end
|
||||
end
|
||||
|
||||
function this.get_melody_effect_name(id)
|
||||
local melody_effect_name = get_name_method:call(nil, id);
|
||||
if melody_effect_name == nil then
|
||||
local name = string.format("Melody Effect No. %d", id);
|
||||
error_handler.report("melody_effects.get_melody_effect_name", "Failed to Access Data: " .. melody_effect_name);
|
||||
return name;
|
||||
end
|
||||
|
||||
return melody_effect_name;
|
||||
end
|
||||
|
||||
function this.init_dependencies()
|
||||
buffs = require("MHR_Overlay.Buffs.buffs");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
time = require("MHR_Overlay.Game_Handler.time");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
190
reframework/autorun/MHR_Overlay/Buffs/misc_buffs.lua
Normal file
190
reframework/autorun/MHR_Overlay/Buffs/misc_buffs.lua
Normal file
@@ -0,0 +1,190 @@
|
||||
local this = {};
|
||||
|
||||
local buffs;
|
||||
local buff_UI_entity;
|
||||
local config;
|
||||
local singletons;
|
||||
local players;
|
||||
local utils;
|
||||
local language;
|
||||
local error_handler;
|
||||
local endemic_life_buffs;
|
||||
local item_buffs;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
this.list = {
|
||||
attack_up = nil,
|
||||
defense_up = nil,
|
||||
stamina_use_down = nil,
|
||||
natural_healing_up = nil,
|
||||
immunity = nil
|
||||
};
|
||||
|
||||
this.keys = {
|
||||
"attack_up",
|
||||
"defense_up",
|
||||
"stamina_use_down",
|
||||
"natural_healing_up",
|
||||
"immunity"
|
||||
};
|
||||
|
||||
-- Attack Up
|
||||
-- Might Seed +10 3min -- Separated
|
||||
-- Dango Bulker + 15 30sec
|
||||
-- Chameleos Soul +15 30sec
|
||||
-- Butterflame +25 1min -- Separated
|
||||
|
||||
-- Defense Up
|
||||
-- Adamant Seed +20 3min
|
||||
-- Chameleos Souls +20 30sec
|
||||
|
||||
-- Stamina Use Down
|
||||
-- Dash Juice 3min
|
||||
-- Peepersects 1.5min
|
||||
-- Chameleos Soul 30sec
|
||||
|
||||
-- Natural Healing Up
|
||||
-- Immunizer 5min
|
||||
-- Vase of Vitality 20sec
|
||||
|
||||
local misc_buffs_type_name = "misc_buffs";
|
||||
|
||||
local player_data_type_def = sdk.find_type_definition("snow.player.PlayerData");
|
||||
|
||||
-- Attack Up
|
||||
local atk_up_buff_second_field = player_data_type_def:get_field("_AtkUpBuffSecond");
|
||||
local atk_up_buff_second_timer_field = player_data_type_def:get_field("_AtkUpBuffSecondTimer");
|
||||
-- Defense Up
|
||||
local def_up_buff_second_field = player_data_type_def:get_field("_DefUpBuffSecond");
|
||||
local def_up_buff_second_timer_field = player_data_type_def:get_field("_DefUpBuffSecondTimer");
|
||||
-- Stamina Use Down
|
||||
local stamina_up_buff_second_timer_field = player_data_type_def:get_field("_StaminaUpBuffSecondTimer");
|
||||
-- Immunity
|
||||
local debuff_prevention_timer_field = player_data_type_def:get_field("_DebuffPreventionTimer");
|
||||
-- Immunizer
|
||||
local vitalizer_timer_field = player_data_type_def:get_field("_VitalizerTimer");
|
||||
|
||||
local player_manager_type_def = sdk.find_type_definition("snow.player.PlayerManager");
|
||||
local get_ref_item_parameter_method = player_manager_type_def:get_method("get_RefItemParameter");
|
||||
|
||||
local player_user_data_item_parameter_type_def = get_ref_item_parameter_method:get_return_type();
|
||||
|
||||
-- Might Seed
|
||||
local might_seed_atk_up_field = player_user_data_item_parameter_type_def:get_field("_MightSeedAtkUp");
|
||||
|
||||
function this.update(player, player_data, item_parameter)
|
||||
this.update_attack_up(player_data, item_parameter);
|
||||
|
||||
--this.update_misc_buff("attack_up", player_data, atk_up_buff_second_field, player_data, atk_up_buff_second_timer_field);
|
||||
this.update_misc_buff("defense_up", player_data, def_up_buff_second_field, player_data, def_up_buff_second_timer_field);
|
||||
this.update_misc_buff("stamina_use_down", nil, nil, player_data, stamina_up_buff_second_timer_field);
|
||||
this.update_misc_buff("natural_healing_up", nil, nil, player_data, vitalizer_timer_field);
|
||||
this.update_misc_buff("immunity", nil, nil, player_data, debuff_prevention_timer_field);
|
||||
end
|
||||
|
||||
function this.update_misc_buff(key, value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints)
|
||||
return buffs.update_generic_buff(this.list, config.current_config.buff_UI.filter.misc_buffs, this.get_misc_buff_name,
|
||||
misc_buffs_type_name, key,
|
||||
value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints);
|
||||
end
|
||||
|
||||
function this.apply_filter(key)
|
||||
return buffs.apply_filter(this.list, config.current_config.buff_UI.filter.misc_buffs, key);
|
||||
end
|
||||
|
||||
function this.update_attack_up(player_data, item_parameter)
|
||||
if this.apply_filter("attack_up") then
|
||||
return;
|
||||
end
|
||||
|
||||
local atk_up_buff_second = atk_up_buff_second_field:get_data(player_data);
|
||||
if atk_up_buff_second == nil then
|
||||
error_handler.report("item_buffs.update_attack_up", "Failed to Access Data: atk_up_buff_second");
|
||||
this.list.attack_up = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local might_seed_atk_up = might_seed_atk_up_field:get_data(item_parameter);
|
||||
if might_seed_atk_up == nil then
|
||||
error_handler.report("item_buffs.update_might_seed", "Failed to Access Data: might_seed_atk_up");
|
||||
this.list.attack_up = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if atk_up_buff_second == might_seed_atk_up or atk_up_buff_second == endemic_life_buffs.butterflame_attack_up then
|
||||
this.list.attack_up = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
this.update_misc_buff("attack_up", nil, nil, player_data, atk_up_buff_second_timer_field);
|
||||
end
|
||||
|
||||
function this.init_all_UI()
|
||||
for misc_buff_key, misc_buff in pairs(this.list) do
|
||||
buffs.init_UI(misc_buff);
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_names()
|
||||
for misc_buff_key, misc_buff in pairs(this.list) do
|
||||
misc_buff.name = this.get_misc_buff_name(misc_buff_key);
|
||||
end
|
||||
end
|
||||
|
||||
function this.get_misc_buff_name(key)
|
||||
local misc_buff_name = language.current_language.misc_buffs[key];
|
||||
if misc_buff_name == nil then
|
||||
return key;
|
||||
end
|
||||
|
||||
return misc_buff_name;
|
||||
end
|
||||
|
||||
function this.init_dependencies()
|
||||
buffs = require("MHR_Overlay.Buffs.buffs");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
endemic_life_buffs = require("MHR_Overlay.Buffs.endemic_life_buffs");
|
||||
item_buffs = require("MHR_Overlay.Buffs.item_buffs");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
162
reframework/autorun/MHR_Overlay/Buffs/otomo_moves.lua
Normal file
162
reframework/autorun/MHR_Overlay/Buffs/otomo_moves.lua
Normal file
@@ -0,0 +1,162 @@
|
||||
local this = {};
|
||||
|
||||
local buffs;
|
||||
local buff_UI_entity;
|
||||
local config;
|
||||
local singletons;
|
||||
local players;
|
||||
local utils;
|
||||
local language;
|
||||
local error_handler;
|
||||
local env_creature;
|
||||
local player_info;
|
||||
local time;
|
||||
local abnormal_statuses;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
this.list = {
|
||||
go_fight_win = nil,
|
||||
power_drum = nil,
|
||||
rousing_roar = nil
|
||||
};
|
||||
|
||||
this.keys = {
|
||||
"go_fight_win",
|
||||
"power_drum",
|
||||
"rousing_roar"
|
||||
};
|
||||
|
||||
local otomo_moves_ids = {
|
||||
-- herbaceous_healing = 1,
|
||||
-- felyne_silkbind = 2,
|
||||
-- felyne_wyvernblast = 3,
|
||||
rousing_roar = 4,
|
||||
-- endemic_life_barrage = 5,
|
||||
-- health_horn = 6,
|
||||
-- healing_bubble = 7,
|
||||
vase_of_vitality = 8,
|
||||
-- furbidden_acorn = 9,
|
||||
-- poison_purr_ison = 10,
|
||||
-- summeown_endemic_life = 11,
|
||||
-- shock_purr_ison = 12,
|
||||
go_fight_win = 13,
|
||||
-- giga_barrel_bombay = 14,
|
||||
-- flash_bombay = 15,
|
||||
-- anti_monster_mine = 16,
|
||||
-- zap_blast_spinner = 17,
|
||||
-- furr_ious = 18,
|
||||
power_drum = 19,
|
||||
-- fleet_foot_feat = 20,
|
||||
-- whirlwind_assault = 21,
|
||||
-- pilfer = 22,
|
||||
-- shock_tripper = 23,
|
||||
-- mega_boomerang = 24,
|
||||
-- camouflage = 25,
|
||||
-- healing_clover_bat = 26,
|
||||
-- felyne_firewors = 27,
|
||||
-- lottery_box = 28,
|
||||
-- felyne_powered_up = 29,
|
||||
-- ameowzing_mist = 30
|
||||
};
|
||||
|
||||
local otomo_moves_type_name = "otomo_moves"
|
||||
|
||||
local player_data_type_def = sdk.find_type_definition("snow.player.PlayerData");
|
||||
-- Palico: Rousing Roar
|
||||
local beast_roar_otomo_timer_field = player_data_type_def:get_field("_BeastRoarOtomoTimer");
|
||||
-- Palico: Power Drum
|
||||
local kijin_otomo_timer_field = player_data_type_def:get_field("_KijinOtomoTimer");
|
||||
-- Palico: Go, Fight, Win
|
||||
local runhigh_otomo_timer_field = player_data_type_def:get_field("_RunhighOtomoTimer");
|
||||
|
||||
local data_shortcut_type_def = sdk.find_type_definition("snow.data.DataShortcut");
|
||||
local get_name_method = data_shortcut_type_def:get_method("getName(snow.data.DataDef.OtSupportActionId)");
|
||||
|
||||
function this.update(player_data)
|
||||
this.update_otomo_move("rousing_roar", nil, nil, player_data, beast_roar_otomo_timer_field);
|
||||
this.update_otomo_move("go_fight_win", nil, nil, player_data, runhigh_otomo_timer_field);
|
||||
this.update_otomo_move("power_drum", nil, nil, player_data, kijin_otomo_timer_field);
|
||||
end
|
||||
|
||||
function this.update_otomo_move(key, value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints)
|
||||
return buffs.update_generic_buff(this.list, config.current_config.buff_UI.filter.otomo_moves, this.get_otomo_move_name,
|
||||
otomo_moves_type_name, key,
|
||||
value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints)
|
||||
end
|
||||
|
||||
function this.apply_filter(key)
|
||||
return buffs.apply_filter(this.list, config.current_config.buff_UI.filter.otomo_moves, key);
|
||||
end
|
||||
|
||||
function this.init_all_UI()
|
||||
for otomo_move_key, otomo_move in pairs(this.list) do
|
||||
buffs.init_UI(otomo_move);
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_names()
|
||||
for otomo_move_key, otomo_move in pairs(this.list) do
|
||||
otomo_move.name = this.get_otomo_move_name(otomo_move_key);
|
||||
end
|
||||
end
|
||||
|
||||
function this.get_otomo_move_name(key)
|
||||
local otomo_move_name = get_name_method:call(nil, otomo_moves_ids[key]);
|
||||
if otomo_move_name == nil then
|
||||
error_handler.report("otomo_moves.get_otomo_move_name", string.format("Failed to Access Data: %s_name", key));
|
||||
return key;
|
||||
end
|
||||
|
||||
return otomo_move_name;
|
||||
end
|
||||
|
||||
function this.init_dependencies()
|
||||
buffs = require("MHR_Overlay.Buffs.buffs");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
env_creature = require("MHR_Overlay.Endemic_Life.env_creature");
|
||||
player_info = require("MHR_Overlay.Misc.player_info");
|
||||
time = require("MHR_Overlay.Game_Handler.time");
|
||||
abnormal_statuses = require("MHR_Overlay.Buffs.abnormal_statuses");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
134
reframework/autorun/MHR_Overlay/Buffs/rampage_skills.lua
Normal file
134
reframework/autorun/MHR_Overlay/Buffs/rampage_skills.lua
Normal file
@@ -0,0 +1,134 @@
|
||||
local this = {};
|
||||
|
||||
local buffs;
|
||||
local buff_UI_entity;
|
||||
local config;
|
||||
local singletons;
|
||||
local players;
|
||||
local utils;
|
||||
local language;
|
||||
local error_handler;
|
||||
local env_creature;
|
||||
local player_info;
|
||||
local time;
|
||||
local abnormal_statuses;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local skills_type_name = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
this.list = {
|
||||
chameleos_soul = nil,
|
||||
kushala_daora_soul = nil,
|
||||
};
|
||||
|
||||
this.keys = {
|
||||
"chameleos_soul",
|
||||
"kushala_daora_soul",
|
||||
};
|
||||
|
||||
local rampage_skill_ids = {
|
||||
chameleos_soul = 250,
|
||||
kushala_daora_soul = 251,
|
||||
};
|
||||
|
||||
local rampage_skills_type_name = "rampage_skills";
|
||||
|
||||
local kushara_daora_soul_breakpoint = 5;
|
||||
|
||||
local player_data_type_def = sdk.find_type_definition("snow.player.PlayerData");
|
||||
-- Kushala Daora Soul
|
||||
local hyakuryu_dragon_power_up_count_field = player_data_type_def:get_field("_HyakuryuDragonPowerUpCnt");
|
||||
local hyakuryu_dragon_power_up_timer_field = player_data_type_def:get_field("_HyakuryuDragonPowerUpTimer");
|
||||
-- Chameleos Soul
|
||||
local hyakuryu_onazuti_power_up_interval_field = player_data_type_def:get_field("_HyakuryuHyakuryuOnazutiPowerUpInterval");
|
||||
|
||||
local data_shortcut_type_def = sdk.find_type_definition("snow.data.DataShortcut");
|
||||
local get_name_method = data_shortcut_type_def:get_method("getName(snow.data.DataDef.PlHyakuryuSkillId)");
|
||||
|
||||
function this.update(player_data)
|
||||
this.update_rampage_skill("kushala_daora_soul", player_data, hyakuryu_dragon_power_up_count_field,
|
||||
player_data, hyakuryu_dragon_power_up_timer_field, false, nil, {kushara_daora_soul_breakpoint});
|
||||
|
||||
this.update_rampage_skill("chameleos_soul", nil, nil, player_data, hyakuryu_onazuti_power_up_interval_field);
|
||||
end
|
||||
|
||||
function this.update_rampage_skill(key, value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints)
|
||||
return buffs.update_generic_buff(this.list, config.current_config.buff_UI.filter.rampage_skills, this.get_rampage_skill_name,
|
||||
rampage_skills_type_name, key,
|
||||
value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints)
|
||||
end
|
||||
|
||||
function this.apply_filter(key)
|
||||
return buffs.apply_filter(this.list, config.current_config.buff_UI.filter.rampage_skills, key);
|
||||
end
|
||||
|
||||
function this.init_all_UI()
|
||||
for rampage_skill_key, rampage_skill in pairs(this.list) do
|
||||
buffs.init_UI(rampage_skill);
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_names()
|
||||
for rampage_skill_key, rampage_skill in pairs(this.list) do
|
||||
rampage_skill.name = this.get_rampage_skill_name(rampage_skill_key);
|
||||
end
|
||||
end
|
||||
|
||||
function this.get_rampage_skill_name(key)
|
||||
local rampage_skill_name = get_name_method:call(nil, rampage_skill_ids[key]);
|
||||
if rampage_skill_name == nil then
|
||||
error_handler.report("rampage_skills.get_rampage_skill_name", string.format("Failed to Access Data: %s_name", key));
|
||||
return key;
|
||||
end
|
||||
|
||||
return rampage_skill_name;
|
||||
end
|
||||
|
||||
function this.init_dependencies()
|
||||
buffs = require("MHR_Overlay.Buffs.buffs");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
env_creature = require("MHR_Overlay.Endemic_Life.env_creature");
|
||||
player_info = require("MHR_Overlay.Misc.player_info");
|
||||
time = require("MHR_Overlay.Game_Handler.time");
|
||||
abnormal_statuses = require("MHR_Overlay.Buffs.abnormal_statuses");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
902
reframework/autorun/MHR_Overlay/Buffs/skills.lua
Normal file
902
reframework/autorun/MHR_Overlay/Buffs/skills.lua
Normal file
@@ -0,0 +1,902 @@
|
||||
local this = {};
|
||||
|
||||
local buffs;
|
||||
local buff_UI_entity;
|
||||
local config;
|
||||
local singletons;
|
||||
local players;
|
||||
local utils;
|
||||
local language;
|
||||
local error_handler;
|
||||
local env_creature;
|
||||
local player_info;
|
||||
local time;
|
||||
local abnormal_statuses;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local skills_type_name = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
this.list = {
|
||||
adrenaline_rush = nil,
|
||||
affinity_sliding = nil,
|
||||
agitator = nil,
|
||||
berserk = nil,
|
||||
bladescale_hone = nil,
|
||||
blood_awakening = nil,
|
||||
bloodlust = nil,
|
||||
burst = nil,
|
||||
coalescence = nil,
|
||||
counterstrike = nil,
|
||||
dereliction = nil,
|
||||
dragon_conversion_elemental_attack_up = nil,
|
||||
dragon_conversion_elemental_res_up = nil,
|
||||
dragonheart = nil,
|
||||
embolden = nil,
|
||||
frenzied_bloodlust = nil,
|
||||
furious = nil,
|
||||
grinder_s = nil,
|
||||
heaven_sent = nil,
|
||||
hellfire_cloak = nil,
|
||||
heroics = nil,
|
||||
inspiration = nil,
|
||||
intrepid_heart = nil,
|
||||
latent_power = nil,
|
||||
maximum_might = nil,
|
||||
offensive_guard = nil,
|
||||
partbreaker = nil,
|
||||
peak_performance = nil,
|
||||
powder_mantle_red = nil,
|
||||
powder_mantle_blue = nil,
|
||||
protective_polish = nil,
|
||||
resentment = nil,
|
||||
resuscitate = nil,
|
||||
spiribirds_call = nil,
|
||||
status_trigger = nil,
|
||||
strife = nil,
|
||||
wall_runner = nil,
|
||||
wind_mantle = nil,
|
||||
};
|
||||
|
||||
this.keys = {
|
||||
"adrenaline_rush",
|
||||
"affinity_sliding",
|
||||
"agitator",
|
||||
"berserk",
|
||||
"bladescale_hone",
|
||||
"blood_awakening",
|
||||
"bloodlust",
|
||||
"burst",
|
||||
"coalescence",
|
||||
"counterstrike",
|
||||
"dereliction",
|
||||
"dragon_conversion_elemental_attack_up",
|
||||
"dragon_conversion_elemental_res_up",
|
||||
"dragonheart",
|
||||
"embolden",
|
||||
"frenzied_bloodlust",
|
||||
"furious",
|
||||
"grinder_s",
|
||||
"heaven_sent",
|
||||
"hellfire_cloak",
|
||||
"heroics",
|
||||
"inspiration",
|
||||
"intrepid_heart",
|
||||
"latent_power",
|
||||
"maximum_might",
|
||||
"offensive_guard",
|
||||
"partbreaker",
|
||||
"peak_performance",
|
||||
"powder_mantle_red",
|
||||
"powder_mantle_blue",
|
||||
"protective_polish",
|
||||
"resentment",
|
||||
"resuscitate",
|
||||
"spiribirds_call",
|
||||
"status_trigger",
|
||||
"strife",
|
||||
"wall_runner",
|
||||
"wind_mantle"
|
||||
};
|
||||
|
||||
local skills_type_name = "skills";
|
||||
|
||||
local skill_data_list = {
|
||||
-- attack_boost = { id = 1 },
|
||||
agitator = { id = 2 },
|
||||
peak_performance = { id = 3, level = 0, is_equipped = false },
|
||||
resentment = { id = 4, level = 0, is_equipped = false },
|
||||
resuscitate = { id = 5, level = 0, is_equipped = false },
|
||||
-- critical_eye = { id = 6 },
|
||||
-- critical_boost = { id = 7 },
|
||||
-- weakness_exploit = { id = 8 },
|
||||
latent_power = { id = 9 },
|
||||
maximum_might = { id = 10, level = 0, is_equipped = false },
|
||||
-- critical_element = { id = 11 },
|
||||
-- masters_touch = { id = 12 },
|
||||
-- fire_attack = { id = 13 },
|
||||
-- water_attack = { id = 14 },
|
||||
-- ice_attack = { id = 15 },
|
||||
-- thunder_attack = { id = 16 },
|
||||
-- dragon_attack = { id = 17 },
|
||||
-- poison_attack = { id = 18 },
|
||||
-- paralysis_attack = { id = 19 },
|
||||
-- sleep_attack = { id = 20 },
|
||||
-- blast_attack = { id = 21 },
|
||||
-- handicraft = { id = 22 },
|
||||
-- razor_sharp = { id = 23 },
|
||||
-- spare_shot = { id = 24 },
|
||||
protective_polish = { id = 25 },
|
||||
-- minds_eye = { id = 26 },
|
||||
-- ballistics = { id = 27 },
|
||||
-- bludgeoner = { id = 28 },
|
||||
-- bow_charge_plus = { id = 29 },
|
||||
-- focus = { id = 30 },
|
||||
-- power_prolonger = { id = 31 },
|
||||
-- marathon_runner = { id = 32 },
|
||||
-- constitution = { id = 33 },
|
||||
-- stamina_surge = { id = 34 },
|
||||
-- guard = { id = 35 },
|
||||
-- guard_up = { id = 36 },
|
||||
offensive_guard = { id = 37 },
|
||||
-- critical_draw = { id = 38 },
|
||||
-- punishing_draw = { id = 39 },
|
||||
-- quick_sheathe = { id = 40 },
|
||||
-- slugger = { id = 41 },
|
||||
-- stamina_thief = { id = 42 },
|
||||
affinity_sliding = { id = 43 },
|
||||
-- horn_maestro = { id = 44 },
|
||||
-- artillery = { id = 45 },
|
||||
-- load_shells = { id = 46 },
|
||||
-- special_ammo_boost = { id = 47 },
|
||||
-- normal_rapid_up = { id = 48 },
|
||||
-- pierce_up = { id = 49 },
|
||||
-- spread_up = { id = 50 },
|
||||
-- ammo_up = { id = 51 },
|
||||
-- reload_speed = { id = 52 },
|
||||
-- recoil_down = { id = 53 },
|
||||
-- steadiness = { id = 54 },
|
||||
-- rapid_fire_up = { id = 55 },
|
||||
-- defense_boost = { id = 56 },
|
||||
-- divine_blessing = { id = 57 },
|
||||
-- recovery_up = { id = 58 },
|
||||
-- recovery_speed = { id = 59 },
|
||||
-- speed_eating = { id = 60 },
|
||||
-- earplugs = { id = 61 },
|
||||
-- windproof = { id = 62 },
|
||||
-- tremor_resistance = { id = 63 },
|
||||
-- bubbly_dance = { id = 64 },
|
||||
-- evade_window = { id = 65 },
|
||||
-- evade_extender = { id = 66 },
|
||||
-- fire_resistance = { id = 67 },
|
||||
-- water_resistance = { id = 68 },
|
||||
-- ice_resistance = { id = 69 },
|
||||
-- thunder_resistance = { id = 70 },
|
||||
-- dragon_resistance = { id = 71 },
|
||||
-- blight_resistance = { id = 72 },
|
||||
-- poison_resistance = { id = 73 },
|
||||
-- paralysis_resistance = { id = 74 },
|
||||
-- sleep_resistance = { id = 75 },
|
||||
-- stun_resistance = { id = 76 },
|
||||
-- muck_resistance = { id = 77 },
|
||||
-- blast_resistance = { id = 78 },
|
||||
-- botanist = { id = 79 },
|
||||
-- geologist = { id = 80 },
|
||||
partbreaker = { id = 81, level = 0, is_equipped = false },
|
||||
-- capture_master = { id = 82 },
|
||||
-- carving_master = { id = 83 },
|
||||
-- good_luck = { id = 84 },
|
||||
-- speed_sharpening = { id = 85 },
|
||||
-- bombardier = { id = 86 },
|
||||
-- mushroomancer = { id = 87 },
|
||||
-- item_prolonger = { id = 88 },
|
||||
-- wide_range = { id = 89 },
|
||||
-- free_meal = { id = 90 },
|
||||
heroics = { id = 91, level = 0, is_equipped = false },
|
||||
-- fortify = { id = 92 },
|
||||
-- flinch_free = { id = 93 },
|
||||
-- jump_master = { id = 94 },
|
||||
-- carving_pro = { id = 95 },
|
||||
-- hunger_resistance = { id = 96 },
|
||||
-- leap_of_faith = { id = 97 },
|
||||
-- diversion = { id = 98 },
|
||||
-- master_mounter = { id = 99 },
|
||||
-- chameleos_blessing = { id = 100 },
|
||||
-- kushala_blessing = { id = 101 },
|
||||
-- teostra_blessing = { id = 102 },
|
||||
dragonheart = { id = 103, level = 0, is_equipped = false },
|
||||
-- wirebug_whisperer = { id = 104 },
|
||||
wall_runner = { id = 105 },
|
||||
counterstrike = { id = 106 },
|
||||
-- rapid_morph = { id = 107 },
|
||||
hellfire_cloak = { id = 108 },
|
||||
-- wind_alignment = { id = 109 },
|
||||
-- thunder_alignment = { id = 110 },
|
||||
-- stormsoul = { id = 111 },
|
||||
-- blood_rite = { id = 112 },
|
||||
dereliction = { id = 113, level = 0, is_equipped = false },
|
||||
furious = { id = 114 },
|
||||
-- mail_of_hellfire = { id = 115 },
|
||||
coalescence = { id = 116 },
|
||||
bloodlust = { id = 117, level = 0, is_equipped = false },
|
||||
-- defiance = { id = 118 },
|
||||
-- sneak_attack = { id = 119 },
|
||||
adrenaline_rush = { id = 120 },
|
||||
embolden = { id = 121 },
|
||||
-- redirection = { id = 122 },
|
||||
spiribirds_call = { id = 123 },
|
||||
charge_master = { id = 124 },
|
||||
-- foray = { id = 125 },
|
||||
-- tune_up = { id = 126 },
|
||||
grinder_s = { id = 127 },
|
||||
bladescale_hone = { id = 128 },
|
||||
-- wall_runner_boost = { id = 129 },
|
||||
-- element_exploit = { id = 130 },
|
||||
burst = { id = 131 },
|
||||
-- guts = { id = 132 },
|
||||
-- quick_breath = { id = 133 },
|
||||
status_trigger = { id = 134 },
|
||||
intrepid_heart = { id = 135 },
|
||||
-- buildup_boost = { id = 136 },
|
||||
berserk = { id = 137 },
|
||||
wind_mantle = { id = 138 },
|
||||
-- powder_mantle = { id = 139 },
|
||||
-- frostcraft = { id = 140 },
|
||||
-- dragon_conversion = { id = 141 }, -- implemented
|
||||
heaven_sent = { id = 142 },
|
||||
frenzied_bloodlust = { id = 143 },
|
||||
blood_awakening = { id = 144 },
|
||||
strife = { id = 145, level = 0, is_equipped = false },
|
||||
-- shock_absorber = { id = 146 },
|
||||
inspiration = { id = 147 },
|
||||
}
|
||||
|
||||
this.is_heroics_active = false;
|
||||
|
||||
local intrepid_heart_minimal_value = 400;
|
||||
|
||||
local burst_breakpoints = { 5 };
|
||||
local dereliction_breakpoints = { 100, 50 };
|
||||
local dragonheart_breakpoints = { 0.5, 0.5, 0.7, 0.7, 0.8 };
|
||||
local strife_breakpoints = { { 10 }, { 15 }, { 20 } };
|
||||
local blood_awakening_breakpoints = { 2 };
|
||||
local wind_mantle_breakpoints = { 20, 10 }; -- Sword & Shield, Lance, Hammer, Switch Axe, Insect Glaive, Long Sword, Hunting Horn
|
||||
local wind_mantle_special_breakpoints = {
|
||||
[0] = { 10, 5 }, -- Great Sword
|
||||
[3] = { 60, 30 }, -- Light Bowgun
|
||||
[4] = { 60, 30 }, -- Heavy Bowgun
|
||||
[6] = { 30, 15 }, -- Gunlance
|
||||
[9] = { 40, 20 }, -- Dual Blades
|
||||
[11] = { 30, 15 }, -- Charge Blade
|
||||
[13] = { 60, 30 }, -- Bow
|
||||
};
|
||||
|
||||
local maximum_might_delay_timer = nil;
|
||||
local maximum_might_previous_timer_value = 0;
|
||||
|
||||
local frenzied_bloodlust_duration = 0;
|
||||
local frenzied_bloodlust_sheathed_duration = 0;
|
||||
|
||||
local spiribirds_call_duration = 60;
|
||||
|
||||
local wind_mantle_duration = 15;
|
||||
|
||||
local player_data_type_def = sdk.find_type_definition("snow.player.PlayerData");
|
||||
-- Burst
|
||||
local rengeki_power_up_count_field = player_data_type_def:get_field("_RengekiPowerUpCnt");
|
||||
local rengeki_power_up_timer_field = player_data_type_def:get_field("_RengekiPowerUpTimer");
|
||||
-- Intrepid Heart
|
||||
local equip_skill_223_accumulator_field = player_data_type_def:get_field("_EquipSkill223Accumulator");
|
||||
-- Derelection
|
||||
local symbiosis_skill_lost_vital_field = player_data_type_def:get_field("_SymbiosisSkillLostVital");
|
||||
-- Grinder (S)
|
||||
local brand_new_sharpness_adjust_up_timer_field = player_data_type_def:get_field("_BrandNewSharpnessAdjustUpTimer");
|
||||
-- Counterstrike
|
||||
local counterattack_powerup_timer_field = player_data_type_def:get_field("_CounterattackPowerupTimer");
|
||||
-- Affinity Sliding
|
||||
local sliding_powerup_timer_field = player_data_type_def:get_field("_SlidingPowerupTimer");
|
||||
-- Coalescence
|
||||
local disaster_turn_powerup_timer_field = player_data_type_def:get_field("_DisasterTurnPowerUpTimer");
|
||||
-- Adrenaline Rush
|
||||
local equip_skill_208_atk_up_field = player_data_type_def:get_field("_EquipSkill208_AtkUpTimer");
|
||||
-- Wall Runner
|
||||
local wall_run_powerup_timer_field = player_data_type_def:get_field("_WallRunPowerupTimer");
|
||||
-- Offensive Guard
|
||||
local equip_skill_036_timer_field = player_data_type_def:get_field("_EquipSkill_036_Timer");
|
||||
-- Hellfire Cloak
|
||||
local onibi_powerup_timer_field = player_data_type_def:get_field("_OnibiPowerUpTiemr");
|
||||
-- Agitator
|
||||
local challenge_timer_field = player_data_type_def:get_field("_ChallengeTimer");
|
||||
-- Furious
|
||||
local furious_skill_stamina_buff_second_timer_field = player_data_type_def:get_field("_FuriousSkillStaminaBuffSecondTimer");
|
||||
-- Maximum Might
|
||||
local whole_body_timer_field = player_data_type_def:get_field("_WholeBodyTimer");
|
||||
-- Frenzied Bloodlust
|
||||
local equip_skill_231_wire_num_timer_field = player_data_type_def:get_field("_EquipSkill231_WireNumTimer");
|
||||
local equip_skill_231_wp_off_timer_field = player_data_type_def:get_field("_EquipSkill231_WpOffTimer");
|
||||
-- Resentment
|
||||
local r_vital_field = player_data_type_def:get_field("_r_Vital");
|
||||
-- Status Trigger
|
||||
local equip_skill_222_timer_field = player_data_type_def:get_field("_EquipSkill222_Timer");
|
||||
-- Spiritbird's Call
|
||||
local equip_skill_211_timer_field = player_data_type_def:get_field("_EquipSkill211_Timer");
|
||||
-- Powder Mantle
|
||||
local equip_skill_227_state_field = player_data_type_def:get_field("_EquipSkill227State");
|
||||
local equip_skill_227_state_timer_field = player_data_type_def:get_field("_EquipSkill227StateTimer");
|
||||
-- Inspiration
|
||||
local equip_skill_235_atk_up_second_timer_field = player_data_type_def:get_field("_EquipSkill235AtkUpSecondTimer");
|
||||
-- Blood Awakening
|
||||
local equip_skill_232_timer_field = player_data_type_def:get_field("_EquipSkill232Timer");
|
||||
|
||||
|
||||
|
||||
local player_base_type_def = sdk.find_type_definition("snow.player.PlayerBase");
|
||||
local get_player_skill_list_method = player_base_type_def:get_method("get_PlayerSkillList");
|
||||
|
||||
-- Latent Power
|
||||
local power_freedom_timer_field = player_base_type_def:get_field("_PowerFreedomTimer");
|
||||
-- Protective Polish
|
||||
local sharpness_gauge_boost_timer_field = player_base_type_def:get_field("_SharpnessGaugeBoostTimer");
|
||||
-- Heroics
|
||||
--local is_predicament_power_up_method = player_base_type_def:get_method("isPredicamentPowerUp");
|
||||
-- Berserk
|
||||
local get_is_enable_equip_skill_225_method = player_base_type_def:get_method("get_IsEnableEquipSkill225");
|
||||
-- Dragon Conversion
|
||||
local equip_skill_229_sum_resist_field = player_base_type_def:get_field("_EquipSkill229SumResist");
|
||||
-- Resuscitate
|
||||
local is_debuff_state_method = player_base_type_def:get_method("isDebuffState");
|
||||
|
||||
local player_skill_list_type_def = sdk.find_type_definition("snow.player.PlayerSkillList");
|
||||
local get_skill_data_method = player_skill_list_type_def:get_method("getSkillData");
|
||||
|
||||
local skill_data_type_def = get_skill_data_method:get_return_type();
|
||||
local skill_lv_field = skill_data_type_def:get_field("SkillLv");
|
||||
|
||||
|
||||
|
||||
local player_quest_base_type_def = sdk.find_type_definition("snow.player.PlayerQuestBase");
|
||||
-- Wind Mantle
|
||||
local is_equip_skill_226_enable_field = player_quest_base_type_def:get_field("_IsEquipSkill226Enable");
|
||||
local equip_skill_226_attack_count_field = player_quest_base_type_def:get_field("_EquipSkill226AttackCount");
|
||||
local equip_skill_226_attack_off_timer_field = player_quest_base_type_def:get_field("_EquipSkill226AttackOffTimer");
|
||||
-- Heaven-Sent
|
||||
local is_active_equip_skill_230_method = player_quest_base_type_def:get_method("isActiveEquipSkill230");
|
||||
-- Frenzied Bloodlust
|
||||
local get_hunter_wire_skill_231_num_method = player_quest_base_type_def:get_method("get_HunterWireSkill231Num");
|
||||
-- Embolden
|
||||
local get_active_equip_209_method = player_quest_base_type_def:get_method("getActiveEquipSkill209");
|
||||
-- Dragon Conversion
|
||||
local equip_skill_229_use_up_flag_field = player_quest_base_type_def:get_field("_EquipSkill229UseUpFlg");
|
||||
-- Strife
|
||||
local get_affinity_equip_skill_233_method = player_quest_base_type_def:get_method("getAffinityEquipSkill233");
|
||||
-- Blood Awakening
|
||||
local get_equip_skill_232_lv_method = player_quest_base_type_def:get_method("getEquipSkill232Lv");
|
||||
|
||||
local bow_type_def = sdk.find_type_definition("snow.player.Bow");
|
||||
local _equip_skill_216_bottle_up_timer_field = bow_type_def:get_field("_EquipSkill216_BottleUpTimer");
|
||||
|
||||
local data_shortcut_type_def = sdk.find_type_definition("snow.data.DataShortcut");
|
||||
local get_name_method = data_shortcut_type_def:get_method("getName(snow.data.DataDef.PlEquipSkillId)");
|
||||
|
||||
function this.update(player, player_data, weapon_type)
|
||||
this.update_equipped_skill_data(player);
|
||||
|
||||
this.update_wind_mantle(player, weapon_type);
|
||||
this.update_maximum_might(player_data);
|
||||
this.update_bloodlust();
|
||||
this.update_frenzied_bloodlust(player, player_data);
|
||||
this.update_peak_performance();
|
||||
this.update_heroics();
|
||||
this.update_dragonheart();
|
||||
this.update_resentment(player_data);
|
||||
this.update_bladescale_hone(player, weapon_type);
|
||||
this.update_spiribirds_call(player_data);
|
||||
this.update_powder_mantle(player_data);
|
||||
this.update_blood_awakening(player, player_data);
|
||||
|
||||
this.update_skill("dereliction", player_data, symbiosis_skill_lost_vital_field, nil, nil, true, nil, dereliction_breakpoints);
|
||||
this.update_skill("burst", player_data, rengeki_power_up_count_field, player_data, rengeki_power_up_timer_field, false, nil, burst_breakpoints);
|
||||
this.update_skill("intrepid_heart", player_data, equip_skill_223_accumulator_field, nil, nil, true, intrepid_heart_minimal_value);
|
||||
this.update_skill("latent_power", nil, nil, player, power_freedom_timer_field);
|
||||
this.update_skill("protective_polish", nil, nil, player, sharpness_gauge_boost_timer_field);
|
||||
this.update_skill("grinder_s", nil, nil, player_data, brand_new_sharpness_adjust_up_timer_field);
|
||||
this.update_skill("counterstrike", nil, nil, player_data, counterattack_powerup_timer_field);
|
||||
this.update_skill("affinity_sliding", nil, nil, player_data, sliding_powerup_timer_field);
|
||||
this.update_skill("coalescence", nil, nil, player_data, disaster_turn_powerup_timer_field);
|
||||
this.update_skill("adrenaline_rush", nil, nil, player_data, equip_skill_208_atk_up_field);
|
||||
this.update_skill("wall_runner", nil, nil, player_data, wall_run_powerup_timer_field);
|
||||
this.update_skill("offensive_guard", nil, nil, player_data, equip_skill_036_timer_field);
|
||||
this.update_skill("hellfire_cloak", nil, nil, player_data, onibi_powerup_timer_field);
|
||||
this.update_skill("agitator", nil, nil, player_data, challenge_timer_field, nil, nil, true);
|
||||
this.update_skill("furious", nil, nil, player_data, furious_skill_stamina_buff_second_timer_field);
|
||||
this.update_skill("status_trigger", nil, nil, player_data, equip_skill_222_timer_field);
|
||||
this.update_skill("inspiration", nil, nil, player_data, equip_skill_235_atk_up_second_timer_field);
|
||||
this.update_skill("heaven_sent", player, is_active_equip_skill_230_method);
|
||||
this.update_skill("resuscitate", player, is_debuff_state_method);
|
||||
this.update_skill("embolden", player, get_active_equip_209_method);
|
||||
this.update_skill("berserk", player, get_is_enable_equip_skill_225_method);
|
||||
this.update_skill("dragon_conversion_elemental_attack_up", player, equip_skill_229_sum_resist_field);
|
||||
this.update_skill("dragon_conversion_elemental_res_up", player, equip_skill_229_use_up_flag_field);
|
||||
this.update_skill("partbreaker", nil, nil, nil, nil, true);
|
||||
this.update_skill("strife", player, get_affinity_equip_skill_233_method, nil, nil, nil, nil, strife_breakpoints[skill_data_list.strife.level]);
|
||||
end
|
||||
|
||||
function this.update_skill(key, value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints)
|
||||
local skill_data = skill_data_list[key];
|
||||
if skill_data ~= nil and skill_data.is_equipped ~= nil and not skill_data.is_equipped then
|
||||
this.list[key] = nil;
|
||||
return nil;
|
||||
end
|
||||
|
||||
return buffs.update_generic_buff(this.list, config.current_config.buff_UI.filter.skills, this.get_skill_name,
|
||||
skills_type_name, key,
|
||||
value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints);
|
||||
end
|
||||
|
||||
function this.update_generic(key, level, timer)
|
||||
return buffs.update_generic(this.list, this.get_skill_name, skills_type_name, key, level, timer);
|
||||
end
|
||||
|
||||
function this.apply_filter(key)
|
||||
return buffs.apply_filter(this.list, config.current_config.buff_UI.filter.skills, key);
|
||||
end
|
||||
|
||||
function this.update_equipped_skill_data(player)
|
||||
local player_skill_list = get_player_skill_list_method:call(player);
|
||||
if player_skill_list == nil then
|
||||
error_handler.report("this.update_equipped_skill_data", "Failed to Access Data: player_skill_list");
|
||||
return;
|
||||
end
|
||||
|
||||
for skill_key, skill_data in pairs(skill_data_list) do
|
||||
if skill_data.is_equipped == nil then
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local re_skill_data = get_skill_data_method:call(player_skill_list, skill_data.id);
|
||||
if re_skill_data == nil then
|
||||
skill_data.is_equipped = false;
|
||||
skill_data.level = 0;
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local skill_level = skill_lv_field:get_data(re_skill_data);
|
||||
if skill_level == nil then
|
||||
error_handler.report("skills.update_equipped_skill_data", string.format("Failed to Access Data: %s -> skill_level", skill_key));
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if skill_level <= 0 then
|
||||
skill_data.is_equipped = false;
|
||||
skill_data.level = 0;
|
||||
goto continue;
|
||||
end
|
||||
|
||||
skill_data.is_equipped = true;
|
||||
skill_data.level = skill_level;
|
||||
|
||||
::continue::
|
||||
end
|
||||
end
|
||||
|
||||
function this.update_wind_mantle(player, weapon_type)
|
||||
if this.apply_filter("wind_mantle") then
|
||||
return;
|
||||
end
|
||||
|
||||
local is_wind_mantle_enable = is_equip_skill_226_enable_field:get_data(player);
|
||||
if is_wind_mantle_enable == nil then
|
||||
error_handler.report("skills.update_wind_mantle", "Failed to Access Data: is_wind_mantle_enable");
|
||||
this.list.wind_mantle = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if not is_wind_mantle_enable then
|
||||
this.list.wind_mantle = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local wind_mantle_timer = equip_skill_226_attack_off_timer_field:get_data(player);
|
||||
if wind_mantle_timer == nil then
|
||||
error_handler.report("skills.update_wind_mantle", "Failed to Access Data: wind_mantle_timer");
|
||||
this.list.wind_mantle = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local wind_mantle_value = equip_skill_226_attack_count_field:get_data(player);
|
||||
if wind_mantle_value == nil then
|
||||
error_handler.report("skills.update_wind_mantle", "Failed to Access Data: wind_mantle_value");
|
||||
this.list.wind_mantle = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local level = 1;
|
||||
|
||||
local breakpoints = wind_mantle_special_breakpoints[weapon_type] or wind_mantle_breakpoints;
|
||||
local breakpoint_count = #breakpoints;
|
||||
|
||||
for index, breakpoint in ipairs(breakpoints) do
|
||||
if wind_mantle_value >= breakpoint then
|
||||
level = 2 + breakpoint_count - index;
|
||||
break;
|
||||
end
|
||||
end
|
||||
|
||||
this.update_generic("wind_mantle", level, wind_mantle_duration - (wind_mantle_timer / 60));
|
||||
end
|
||||
|
||||
function this.update_maximum_might(player_data)
|
||||
if not config.current_config.buff_UI.filter.skills.maximum_might then
|
||||
this.list.maximum_might = nil;
|
||||
maximum_might_previous_timer_value = 0;
|
||||
return;
|
||||
end
|
||||
|
||||
if not skill_data_list.maximum_might.is_equipped then
|
||||
this.list.maximum_might = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local whole_body_timer = whole_body_timer_field:get_data(player_data);
|
||||
if whole_body_timer == nil then
|
||||
error_handler.report("skills.update_maximum_might", "Failed to Access Data: whole_body_timer");
|
||||
this.list.maximum_might = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if player_info.list.max_stamina == -1 then
|
||||
this.list.maximum_might = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local maximum_might = this.list.maximum_might;
|
||||
|
||||
if player_info.list.stamina ~= player_info.list.max_stamina then
|
||||
if whole_body_timer < maximum_might_previous_timer_value then
|
||||
this.list.maximum_might = nil;
|
||||
end
|
||||
|
||||
elseif maximum_might == nil then
|
||||
local maximum_might_name = this.get_skill_name("maximum_might");
|
||||
|
||||
if whole_body_timer < maximum_might_previous_timer_value then
|
||||
this.list.maximum_might = buffs.new(skills_type_name, "maximum_might", maximum_might_name, 1);
|
||||
|
||||
elseif utils.number.is_equal(whole_body_timer, 0) then
|
||||
if maximum_might_delay_timer == nil then
|
||||
maximum_might_delay_timer = time.new_delay_timer(function()
|
||||
maximum_might_delay_timer = nil;
|
||||
|
||||
this.list.maximum_might = buffs.new(skills_type_name, "maximum_might", maximum_might_name, 1);
|
||||
end, 3.5);
|
||||
end
|
||||
|
||||
else
|
||||
time.remove_delay_timer(maximum_might_delay_timer);
|
||||
end
|
||||
end
|
||||
|
||||
maximum_might_previous_timer_value = whole_body_timer;
|
||||
|
||||
if maximum_might ~= nil then
|
||||
maximum_might.is_visible = true;
|
||||
end
|
||||
end
|
||||
|
||||
function this.update_bloodlust()
|
||||
if not config.current_config.buff_UI.filter.skills.bloodlust then
|
||||
this.list.bloodlust = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if not skill_data_list.bloodlust.is_equipped then
|
||||
this.list.bloodlust = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if not abnormal_statuses.list.frenzy_infection
|
||||
and not abnormal_statuses.list.frenzy_overcome then
|
||||
this.list.bloodlust = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local bloodlust = this.list.bloodlust;
|
||||
if bloodlust == nil then
|
||||
local bloodlust_name = this.get_skill_name("bloodlust");
|
||||
if bloodlust_name == nil then
|
||||
error_handler.report("skills.update_bloodlust", "Failed to Access Data: bloodlust_name");
|
||||
this.list.bloodlust = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
this.list.bloodlust = buffs.new(skills_type_name, "bloodlust", bloodlust_name);
|
||||
end
|
||||
|
||||
this.list.bloodlust.is_visible = true;
|
||||
end
|
||||
|
||||
function this.update_frenzied_bloodlust(player, player_data)
|
||||
if this.apply_filter("frenzied_bloodlust") then
|
||||
return;
|
||||
end
|
||||
|
||||
local hunter_wire_skill_231_num = get_hunter_wire_skill_231_num_method:call(player);
|
||||
if hunter_wire_skill_231_num == nil then
|
||||
error_handler.report("skills.update_frenzied_bloodlust", "Failed to Access Data: hunter_wire_skill_231_num");
|
||||
this.list.frenzied_bloodlust = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if hunter_wire_skill_231_num == 0 then
|
||||
this.list.frenzied_bloodlust = nil;
|
||||
frenzied_bloodlust_duration = 0;
|
||||
frenzied_bloodlust_sheathed_duration = 0;
|
||||
return;
|
||||
end
|
||||
|
||||
local equip_skill_231_wire_num_timer = equip_skill_231_wire_num_timer_field:get_data(player_data);
|
||||
if equip_skill_231_wire_num_timer == nil then
|
||||
error_handler.report("skills.update_frenzied_bloodlust", "Failed to Access Data: equip_skill_231_wire_num_timer");
|
||||
this.list.frenzied_bloodlust = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local equip_skill_231_wp_off_timer = equip_skill_231_wp_off_timer_field:get_data(player_data);
|
||||
if equip_skill_231_wp_off_timer == nil then
|
||||
error_handler.report("skills.update_frenzied_bloodlust", "Failed to Access Data: equip_skill_231_wp_off_timer");
|
||||
this.list.frenzied_bloodlust = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local is_wire_num_timer_zero = utils.number.is_equal(equip_skill_231_wire_num_timer, 0);
|
||||
if is_wire_num_timer_zero then
|
||||
this.list.frenzied_bloodlust = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if equip_skill_231_wire_num_timer > frenzied_bloodlust_duration then
|
||||
frenzied_bloodlust_duration = equip_skill_231_wire_num_timer;
|
||||
end
|
||||
|
||||
if equip_skill_231_wp_off_timer > frenzied_bloodlust_sheathed_duration then
|
||||
frenzied_bloodlust_sheathed_duration = equip_skill_231_wp_off_timer;
|
||||
end
|
||||
|
||||
local is_wp_off_timer_max = utils.number.is_equal(equip_skill_231_wp_off_timer, frenzied_bloodlust_sheathed_duration);
|
||||
|
||||
local timer = equip_skill_231_wire_num_timer;
|
||||
if not is_wp_off_timer_max then
|
||||
timer = equip_skill_231_wp_off_timer;
|
||||
end
|
||||
|
||||
local skill = this.update_generic("frenzied_bloodlust", 1, timer / 60);
|
||||
|
||||
if is_wp_off_timer_max then
|
||||
skill.duration = frenzied_bloodlust_duration / 60;
|
||||
else
|
||||
skill.duration = frenzied_bloodlust_sheathed_duration / 60;
|
||||
end
|
||||
end
|
||||
|
||||
function this.update_peak_performance()
|
||||
if not config.current_config.buff_UI.filter.skills.peak_performance then
|
||||
this.list.peak_performance = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if not skill_data_list.peak_performance.is_equipped then
|
||||
this.list.peak_performance = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if player_info.list.health ~= player_info.list.max_health then
|
||||
this.list.peak_performance = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
this.update_generic("peak_performance");
|
||||
end
|
||||
|
||||
function this.update_heroics()
|
||||
if this.apply_filter("heroics") then
|
||||
return;
|
||||
end
|
||||
|
||||
if not this.is_heroics_active then
|
||||
this.list.heroics = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
this.update_generic("heroics");
|
||||
end
|
||||
|
||||
function this.update_dragonheart()
|
||||
if not config.current_config.buff_UI.filter.skills.dragonheart then
|
||||
this.list.dragonheart = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if not skill_data_list.dragonheart.is_equipped then
|
||||
this.list.dragonheart = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local breakpoint = dragonheart_breakpoints[skill_data_list.dragonheart.level];
|
||||
local health_percentage = 1;
|
||||
|
||||
local max_health = player_info.list.max_health;
|
||||
|
||||
if max_health ~= 0 then
|
||||
health_percentage = player_info.list.health / max_health;
|
||||
end
|
||||
|
||||
if health_percentage > breakpoint then
|
||||
this.list.dragonheart = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
this.update_generic("dragonheart");
|
||||
end
|
||||
|
||||
function this.update_resentment(player_data)
|
||||
if not config.current_config.buff_UI.filter.skills.resentment then
|
||||
this.list.resentment = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if not skill_data_list.resentment.is_equipped then
|
||||
this.list.resentment = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local r_vital = r_vital_field:get_data(player_data);
|
||||
if r_vital == nil then
|
||||
error_handler.report("skills.update_resentment", "Failed to Access Data: r_vital");
|
||||
this.list.resentment = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if player_info.list.health >= r_vital then
|
||||
this.list.resentment = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
this.update_generic("resentment");
|
||||
end
|
||||
|
||||
function this.update_bladescale_hone(player, weapon_type)
|
||||
if weapon_type ~= 13 then -- 13 = Bow
|
||||
this.list.bladescale_hone = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if this.apply_filter("bladescale_hone") then
|
||||
return;
|
||||
end
|
||||
|
||||
this.update_skill("bladescale_hone", nil, nil, player, _equip_skill_216_bottle_up_timer_field);
|
||||
end
|
||||
|
||||
function this.update_spiribirds_call(player_data)
|
||||
if this.apply_filter("spiribirds_call") then
|
||||
return;
|
||||
end
|
||||
|
||||
local equip_skill_211_timer = equip_skill_211_timer_field:get_data(player_data);
|
||||
if equip_skill_211_timer == nil then
|
||||
error_handler.report("skills.update_spiribirds_call", "Failed to Access Data: equip_skill_211_timer");
|
||||
this.list.spiribirds_call = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if utils.number.is_equal(equip_skill_211_timer, 0) then
|
||||
this.list.spiribirds_call = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local timer = spiribirds_call_duration - (equip_skill_211_timer / 60);
|
||||
|
||||
this.update_generic("spiribirds_call", 1, timer);
|
||||
end
|
||||
|
||||
function this.update_powder_mantle(player_data)
|
||||
if not this.apply_filter("powder_mantle_blue") then
|
||||
this.update_skill("powder_mantle_blue", player_data, equip_skill_227_state_field, player_data, equip_skill_227_state_timer_field, nil, 2);
|
||||
end
|
||||
|
||||
if this.list.powder_mantle_blue ~= nil then
|
||||
this.list.powder_mantle_red = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if this.apply_filter("powder_mantle_red") then
|
||||
return;
|
||||
end
|
||||
|
||||
this.update_skill("powder_mantle_red", player_data, equip_skill_227_state_field, player_data, equip_skill_227_state_timer_field);
|
||||
end
|
||||
|
||||
function this.update_blood_awakening(player, player_data)
|
||||
this.update_skill("blood_awakening", player, get_equip_skill_232_lv_method, player_data, equip_skill_232_timer_field, nil, nil, blood_awakening_breakpoints);
|
||||
end
|
||||
|
||||
function this.init_all_UI()
|
||||
for skill_key, skill in pairs(this.list) do
|
||||
buffs.init_UI(skill);
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_names()
|
||||
for skill_key, skill in pairs(this.list) do
|
||||
skill.name = this.get_skill_name(skill_key);
|
||||
end
|
||||
end
|
||||
|
||||
function this.get_skill_name(key)
|
||||
local skill_data = skill_data_list[key];
|
||||
if skill_data == nil then
|
||||
local skill_name = language.current_language.skills[key];
|
||||
|
||||
if skill_name == nil then
|
||||
return key;
|
||||
end
|
||||
|
||||
return skill_name;
|
||||
end
|
||||
|
||||
local skill_name = get_name_method:call(nil, skill_data_list[key].id);
|
||||
if skill_name == nil then
|
||||
error_handler.report("skills.get_skill_name", string.format("Failed to Access Data: %s_name", key));
|
||||
return key;
|
||||
end
|
||||
|
||||
return skill_name;
|
||||
end
|
||||
|
||||
function this.init_dependencies()
|
||||
buffs = require("MHR_Overlay.Buffs.buffs");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
env_creature = require("MHR_Overlay.Endemic_Life.env_creature");
|
||||
player_info = require("MHR_Overlay.Misc.player_info");
|
||||
time = require("MHR_Overlay.Game_Handler.time");
|
||||
abnormal_statuses = require("MHR_Overlay.Buffs.abnormal_statuses");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
1133
reframework/autorun/MHR_Overlay/Buffs/weapon_skills.lua
Normal file
1133
reframework/autorun/MHR_Overlay/Buffs/weapon_skills.lua
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,10 +1,48 @@
|
||||
local damage_hook = {};
|
||||
local this = {};
|
||||
|
||||
local quest_status;
|
||||
local player;
|
||||
local players;
|
||||
local small_monster;
|
||||
local large_monster;
|
||||
local ailments;
|
||||
local table_helpers;
|
||||
local singletons;
|
||||
local non_players;
|
||||
local utils;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
local wall_hit_damage_queue = {};
|
||||
|
||||
local enemy_character_base_type_def = sdk.find_type_definition("snow.enemy.EnemyCharacterBase");
|
||||
local enemy_character_base_after_calc_damage_damage_side_method = enemy_character_base_type_def:get_method("afterCalcDamage_DamageSide");
|
||||
@@ -12,6 +50,9 @@ local enemy_character_base_after_calc_damage_damage_side_method = enemy_characte
|
||||
local is_boss_enemy_method = enemy_character_base_type_def:get_method("get_isBossEnemy");
|
||||
local check_die_method = enemy_character_base_type_def:get_method("checkDie");
|
||||
|
||||
local stock_direct_marionette_finish_shoot_hit_parts_damage_method = enemy_character_base_type_def:get_method("stockDirectMarionetteFinishShootHitPartsDamage");
|
||||
local get_mystery_core_break_damage_rate_method = enemy_character_base_type_def:get_method("getMysteryCoreBreakDamageRate");
|
||||
|
||||
local enemy_calc_damage_info_type_def = sdk.find_type_definition("snow.hit.EnemyCalcDamageInfo.AfterCalcInfo_DamageSide");
|
||||
local get_attacker_id_method = enemy_calc_damage_info_type_def:get_method("get_AttackerID");
|
||||
local get_damage_attacker_type_method = enemy_calc_damage_info_type_def:get_method("get_DamageAttackerType");
|
||||
@@ -21,6 +62,8 @@ local get_total_damage_method = enemy_calc_damage_info_type_def:get_method("get_
|
||||
local get_physical_damage_method = enemy_calc_damage_info_type_def:get_method("get_PhysicalDamage");
|
||||
local get_elemental_damage_method = enemy_calc_damage_info_type_def:get_method("get_ElementDamage");
|
||||
|
||||
local stun_damage_field = enemy_calc_damage_info_type_def:get_field("<StunDamage>k__BackingField");
|
||||
|
||||
local get_condition_damage_method = enemy_calc_damage_info_type_def:get_method("get_ConditionDamage");
|
||||
local get_condition_type_method = enemy_calc_damage_info_type_def:get_method("get_ConditionDamageType");
|
||||
local get_condition_damage2_method = enemy_calc_damage_info_type_def:get_method("get_ConditionDamage2");
|
||||
@@ -28,51 +71,49 @@ local get_condition_type2_method = enemy_calc_damage_info_type_def:get_method("g
|
||||
local get_condition_damage3_method = enemy_calc_damage_info_type_def:get_method("get_ConditionDamage3");
|
||||
local get_condition_type3_method = enemy_calc_damage_info_type_def:get_method("get_ConditionDamageType3");
|
||||
|
||||
local stock_mystery_core_break_damage_type_def = sdk.find_type_definition("snow.enemy.EnemyCharacterBase.stockMysteryCoreBreakDamage");
|
||||
|
||||
local quest_manager_type_def = sdk.find_type_definition("snow.QuestManager");
|
||||
|
||||
local not_host_cart_method = quest_manager_type_def:get_method("netRecvForfeit");
|
||||
local host_cart_method = quest_manager_type_def:get_method("netSendForfeit");
|
||||
local offline_cart_method = quest_manager_type_def:get_method("notifyDeath");
|
||||
local quest_forfeit_method = quest_manager_type_def:get_method("questForfeit");
|
||||
|
||||
local packet_quest_forfeit_type_def = sdk.find_type_definition("snow.QuestManager.PacketQuestForfeit");
|
||||
local dead_player_id_field = packet_quest_forfeit_type_def:get_field("_DeadPlIndex");
|
||||
local is_from_host_field = packet_quest_forfeit_type_def:get_field("_IsFromQuestHostPacket");
|
||||
|
||||
function damage_hook.get_damage_source_type(damage_source_type_id, is_marionette_attack)
|
||||
local enemy_mystery_core_parts_type_def = sdk.find_type_definition("snow.enemy.EnemyMysteryCoreParts");
|
||||
local on_break_method = enemy_mystery_core_parts_type_def:get_method("onBreak");
|
||||
|
||||
function this.get_damage_source_type(damage_source_type_id, is_marionette_attack)
|
||||
if is_marionette_attack then
|
||||
return "wyvern riding";
|
||||
elseif damage_source_type_id == 0 or damage_source_type_id == 7 or damage_source_type_id == 11 or
|
||||
damage_source_type_id == 13 then
|
||||
return "player";
|
||||
return players.damage_types.wyvern_riding;
|
||||
elseif damage_source_type_id == 0 or damage_source_type_id == 7 or damage_source_type_id == 11 or damage_source_type_id == 13 then
|
||||
return players.damage_types.player;
|
||||
elseif damage_source_type_id == 1 or damage_source_type_id == 8 then
|
||||
return "bomb";
|
||||
return players.damage_types.bombs;
|
||||
elseif damage_source_type_id == 9 then
|
||||
return "kunai";
|
||||
return players.damage_types.kunai;
|
||||
elseif damage_source_type_id >= 14 and damage_source_type_id <= 20 then
|
||||
return "installation";
|
||||
return players.damage_types.installations;
|
||||
elseif damage_source_type_id >= 21 and damage_source_type_id <= 23 then
|
||||
return "otomo";
|
||||
return players.damage_types.otomo;
|
||||
elseif damage_source_type_id >= 25 and damage_source_type_id <= 32 then
|
||||
return "endemic life";
|
||||
elseif damage_source_type_id == 34 then
|
||||
return "other";
|
||||
return players.damage_types.endemic_life;
|
||||
end
|
||||
|
||||
return tostring(damage_source_type_id);
|
||||
return players.damage_types.other;
|
||||
end
|
||||
|
||||
-- snow.hit.EnemyCalcDamageInfo.AfterCalcInfo_DamageSide
|
||||
function damage_hook.update_damage(enemy, enemy_calc_damage_info)
|
||||
function this.update_damage(enemy, enemy_calc_damage_info)
|
||||
local is_large_monster = is_boss_enemy_method:call(enemy);
|
||||
|
||||
if is_large_monster == nil then
|
||||
error_handler.report("damage_hook.update_damage", "Failed to Access Data: is_large_monster");
|
||||
return;
|
||||
end
|
||||
|
||||
local dead_or_captured = check_die_method:call(enemy);
|
||||
if dead_or_captured == nil then
|
||||
error_handler.report("damage_hook.update_damage", "Failed to Access Data: dead_or_captured");
|
||||
return;
|
||||
end
|
||||
|
||||
@@ -81,20 +122,18 @@ function damage_hook.update_damage(enemy, enemy_calc_damage_info)
|
||||
end
|
||||
|
||||
local attacker_id = get_attacker_id_method:call(enemy_calc_damage_info);
|
||||
local otomo_id = attacker_id;
|
||||
local attacker_type = get_damage_attacker_type_method:call(enemy_calc_damage_info);
|
||||
local is_marionette_attack = is_marionette_attack_method:call(enemy_calc_damage_info)
|
||||
|
||||
-- 4 is virtual player in singleplayer that "owns" 2nd otomo
|
||||
if not quest_status.is_online and attacker_id == 4 then
|
||||
attacker_id = player.myself.id;
|
||||
end
|
||||
local is_otomo_attack = attacker_type >= 21 and attacker_type <= 23;
|
||||
|
||||
if is_marionette_attack then
|
||||
large_monster.update_all_riders();
|
||||
for enemy, monster in pairs(large_monster.list) do
|
||||
if monster.unique_id == attacker_id then
|
||||
attacker_id = monster.rider_id;
|
||||
break
|
||||
break;
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -150,22 +189,7 @@ function damage_hook.update_damage(enemy, enemy_calc_damage_info)
|
||||
-- 31 - EcSwampLeech
|
||||
-- 32 - EcPenetrateFish
|
||||
|
||||
--xy = "\nPlayer: " .. tostring(attacker_id) ..
|
||||
--" Damage: " .. tostring(damage_object.total_damage) ..
|
||||
--" Type: (" .. tostring(attacker_type) ..
|
||||
--") " ..
|
||||
--" Condition Damage: " .. tostring(condition_damage) ..
|
||||
--" Condition Type: (" .. tostring(attacker_type) ..
|
||||
--") " .. tostring(condition_type);
|
||||
|
||||
--if string.len(xy) > 2300 then
|
||||
-- xy = "";
|
||||
--end
|
||||
|
||||
local damage_source_type = damage_hook.get_damage_source_type(attacker_type,
|
||||
is_marionette_attack);
|
||||
|
||||
local attacking_player = player.get_player(attacker_id);
|
||||
local damage_source_type = this.get_damage_source_type(attacker_type, is_marionette_attack);
|
||||
|
||||
local monster;
|
||||
if is_large_monster then
|
||||
@@ -174,100 +198,201 @@ function damage_hook.update_damage(enemy, enemy_calc_damage_info)
|
||||
monster = small_monster.get_monster(enemy);
|
||||
end
|
||||
|
||||
local stun_damage = enemy_calc_damage_info:get_field("<StunDamage>k__BackingField");
|
||||
if stun_damage ~= 0 and stun_damage ~= nil then
|
||||
ailments.apply_ailment_buildup(monster, attacker_id, ailments.stun_id, stun_damage);
|
||||
local player = nil;
|
||||
local otomo = nil;
|
||||
|
||||
if not is_otomo_attack then
|
||||
player = players.get_player(attacker_id);
|
||||
|
||||
if player == nil then
|
||||
player = non_players.get_servant(attacker_id);
|
||||
end
|
||||
else
|
||||
if attacker_id < 4 then
|
||||
player = players.get_player(attacker_id);
|
||||
otomo = non_players.get_otomo(attacker_id);
|
||||
elseif attacker_id == 4 then
|
||||
player = players.myself;
|
||||
otomo = non_players.get_otomo(non_players.my_second_otomo_id);
|
||||
else
|
||||
player = non_players.get_servant(attacker_id - 1);
|
||||
otomo = non_players.get_otomo(attacker_id - 1);
|
||||
end
|
||||
|
||||
players.update_damage(otomo, damage_source_type, is_large_monster, damage_object);
|
||||
end
|
||||
|
||||
ailments.apply_ailment_buildup(monster, attacker_id, condition_type, condition_damage);
|
||||
ailments.apply_ailment_buildup(monster, attacker_id, condition_type2, condition_damage2);
|
||||
ailments.apply_ailment_buildup(monster, attacker_id, condition_type3, condition_damage3);
|
||||
local stun_damage = stun_damage_field:get_data(enemy_calc_damage_info);
|
||||
ailments.apply_ailment_buildup(monster, player, otomo, ailments.stun_id, stun_damage);
|
||||
|
||||
player.update_damage(player.total, damage_source_type, is_large_monster, damage_object);
|
||||
player.update_damage(attacking_player, damage_source_type, is_large_monster, damage_object);
|
||||
ailments.apply_ailment_buildup(monster, player, otomo, condition_type, condition_damage);
|
||||
ailments.apply_ailment_buildup(monster, player, otomo, condition_type2, condition_damage2);
|
||||
ailments.apply_ailment_buildup(monster, player, otomo, condition_type3, condition_damage3);
|
||||
|
||||
players.update_damage(players.total, damage_source_type, is_large_monster, damage_object);
|
||||
players.update_damage(player, damage_source_type, is_large_monster, damage_object);
|
||||
end
|
||||
|
||||
--function damage_hook.on_mystery_core_break(enemy)
|
||||
function this.cart(dead_player_id, flag_cat_skill_insurance)
|
||||
-- flag_cat_skill_insurance = 0
|
||||
-- flag_cat_skill_insurance = 1
|
||||
|
||||
--end
|
||||
quest_status.update_cart_count();
|
||||
end
|
||||
|
||||
-- Coavins code
|
||||
function damage_hook.cart(type, args)
|
||||
if not quest_status.is_online then --We reach here with notifyDeath when player is offline
|
||||
player.myself.cart_count = player.myself.cart_count + 1;
|
||||
function this.on_stock_direct_marionette_finish_shoot_hit_parts_damage(enemy, damage_rate, is_endure, is_ignore_multi_rate, category, no)
|
||||
local monster = large_monster.get_monster(enemy);
|
||||
|
||||
local damage = utils.math.round(monster.max_health * damage_rate);
|
||||
|
||||
large_monster.update_all_riders();
|
||||
local attacker_id = monster.rider_id;
|
||||
|
||||
table.insert(wall_hit_damage_queue,
|
||||
{
|
||||
damage = damage,
|
||||
is_large = monster.is_large
|
||||
}
|
||||
);
|
||||
|
||||
if attacker_id == -1 then
|
||||
return;
|
||||
end
|
||||
|
||||
if player.myself.id == 0 then -- If player is host, netSendForfeit is always correct
|
||||
if type == "host" then
|
||||
local player_id = sdk.to_int64(args[3]);
|
||||
player.list[player_id].cart_count = player.list[player_id].cart_count + 1;
|
||||
end
|
||||
else
|
||||
if type == "not host" then
|
||||
local packet_quest_forfeit = sdk.to_managed_object(args[3]);
|
||||
local player_id = dead_player_id_field:get_data(packet_quest_forfeit);
|
||||
local is_from_host = is_from_host_field:get_data(packet_quest_forfeit)
|
||||
local player = players.get_player(attacker_id);
|
||||
if player == nil then
|
||||
player = non_players.get_servant(attacker_id);
|
||||
end
|
||||
|
||||
if is_from_host then -- Data is sent twice, 1 from host and 1 from dead player. Check if from host to only add 1
|
||||
player.list[player_id].cart_count = player.list[player_id].cart_count + 1;
|
||||
if player == nil then
|
||||
error_handler.report("damage_hook.on_stock_direct_marionette_finish_shoot_hit_parts_damage", "Failed to create Player Entry");
|
||||
return;
|
||||
end
|
||||
|
||||
local damage_source_type = this.get_damage_source_type(0, true);
|
||||
local is_large_monster = monster.is_large;
|
||||
|
||||
local large_monster_damage_object = {};
|
||||
large_monster_damage_object.total_damage = 0;
|
||||
large_monster_damage_object.physical_damage = 0;
|
||||
large_monster_damage_object.elemental_damage = 0;
|
||||
large_monster_damage_object.ailment_damage = 0;
|
||||
|
||||
local small_monster_damage_object = {};
|
||||
small_monster_damage_object.total_damage = 0;
|
||||
small_monster_damage_object.physical_damage = 0;
|
||||
small_monster_damage_object.elemental_damage = 0;
|
||||
small_monster_damage_object.ailment_damage = 0;
|
||||
|
||||
for _, damage_info in ipairs(wall_hit_damage_queue) do
|
||||
if damage_info.is_large then
|
||||
|
||||
large_monster_damage_object.total_damage = large_monster_damage_object.total_damage + damage_info.damage;
|
||||
large_monster_damage_object.physical_damage = large_monster_damage_object.physical_damage + damage_info.damage;
|
||||
else
|
||||
small_monster_damage_object.total_damage = small_monster_damage_object.total_damage + damage_info.damage;
|
||||
small_monster_damage_object.physical_damage = small_monster_damage_object.physical_damage + damage_info.damage;
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
wall_hit_damage_queue = {};
|
||||
|
||||
players.update_damage(players.total, damage_source_type, false, small_monster_damage_object);
|
||||
players.update_damage(player, damage_source_type, false, small_monster_damage_object);
|
||||
|
||||
players.update_damage(players.total, damage_source_type, true, large_monster_damage_object);
|
||||
players.update_damage(player, damage_source_type, true, large_monster_damage_object);
|
||||
end
|
||||
|
||||
function this.on_anomaly_core_break(anomaly_core_part)
|
||||
local anomaly_monster = nil;
|
||||
for enemy, monster in pairs(large_monster.list) do
|
||||
|
||||
if monster.is_anomaly then
|
||||
for part_id, part in pairs(monster.parts) do
|
||||
|
||||
if part.anomaly_core_ref == anomaly_core_part then
|
||||
anomaly_monster = monster;
|
||||
break;
|
||||
end
|
||||
end
|
||||
|
||||
if anomaly_monster ~= nil then
|
||||
break;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if anomaly_monster == nil then
|
||||
error_handler.report("damage_hook.on_anomaly_core_break", "No Anomaly Monster Found");
|
||||
return;
|
||||
end
|
||||
|
||||
local anomaly_core_break_damage_rate = get_mystery_core_break_damage_rate_method:call(anomaly_monster.enemy);
|
||||
if anomaly_core_break_damage_rate == nil then
|
||||
error_handler.report("damage_hook.on_anomaly_core_break", "Failed to Access Data: anomaly_core_break_damage_rate");
|
||||
return;
|
||||
end
|
||||
|
||||
local anomaly_core_break_damage = utils.math.round(anomaly_core_break_damage_rate * anomaly_monster.max_health);
|
||||
|
||||
local damage_object = {};
|
||||
damage_object.total_damage = anomaly_core_break_damage;
|
||||
damage_object.physical_damage = 0;
|
||||
damage_object.elemental_damage = 0;
|
||||
damage_object.ailment_damage = anomaly_core_break_damage;
|
||||
|
||||
players.update_damage(players.total, players.damage_types.anomaly_core, true, damage_object);
|
||||
end
|
||||
|
||||
--function damage_hook.on_get_finish_shoot_wall_hit_damage_rate(enemy, rate, is_part_damage)
|
||||
|
||||
--xy = string.format("enemy: %s\nrate: %s\nis_part_damage: %s", tostring(enemy), tostring(rate), tostring(is_part_damage));
|
||||
--end
|
||||
|
||||
|
||||
local get_finish_shoot_wall_hit_damage_rate_method = enemy_character_base_type_def:get_method("stockFinishShootHitDamage");
|
||||
|
||||
function damage_hook.init_module()
|
||||
function this.init_dependencies()
|
||||
quest_status = require("MHR_Overlay.Game_Handler.quest_status");
|
||||
player = require("MHR_Overlay.Damage_Meter.player");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
small_monster = require("MHR_Overlay.Monsters.small_monster");
|
||||
large_monster = require("MHR_Overlay.Monsters.large_monster");
|
||||
ailments = require("MHR_Overlay.Monsters.ailments");
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
|
||||
--sdk.hook(get_finish_shoot_wall_hit_damage_rate_method, function(args)
|
||||
-- pcall(damage_hook.on_get_finish_shoot_wall_hit_damage_rate, sdk.to_managed_object(args[2]), sdk.to_float(args[3]), sdk.to_int64(args--[4]));
|
||||
--end, function(retval)
|
||||
-- return retval;
|
||||
--end);
|
||||
|
||||
sdk.hook(enemy_character_base_after_calc_damage_damage_side_method, function(args)
|
||||
pcall(damage_hook.update_damage, sdk.to_managed_object(args[2]), sdk.to_managed_object(args[3]));
|
||||
end, function(retval)
|
||||
return retval;
|
||||
end);
|
||||
|
||||
sdk.hook(not_host_cart_method, function(args)
|
||||
pcall(damage_hook.cart, "not host", args);
|
||||
end, function(retval)
|
||||
return retval;
|
||||
end);
|
||||
|
||||
sdk.hook(host_cart_method, function(args)
|
||||
pcall(damage_hook.cart, "host", args);
|
||||
end, function(retval)
|
||||
return retval;
|
||||
end);
|
||||
|
||||
sdk.hook(offline_cart_method, function(args)
|
||||
pcall(damage_hook.cart, "offline", args);
|
||||
end, function(retval)
|
||||
return retval;
|
||||
end);
|
||||
|
||||
--sdk.hook(stock_mystery_core_break_damage_type_def, function(args)
|
||||
-- pcall(damage_hook.on_mystery_core_break, sdk.to_managed_object(args[2]));
|
||||
--end, function(retval)
|
||||
-- return retval;
|
||||
--end);
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
non_players = require("MHR_Overlay.Damage_Meter.non_players");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return damage_hook;
|
||||
function this.init_module()
|
||||
sdk.hook(stock_direct_marionette_finish_shoot_hit_parts_damage_method, function(args)
|
||||
local enemy = sdk.to_managed_object(args[2]);
|
||||
local damage_rate = sdk.to_float(args[3]);
|
||||
local is_endure = (sdk.to_int64(args[4]) & 1) == 1;
|
||||
local is_ignore_multi_rate = (sdk.to_int64(args[5]) & 1) == 1;
|
||||
local category = sdk.to_int64(args[6]); --snow.enemy.EnemyDef.VitalCategory
|
||||
local no = sdk.to_int64(args[7]);
|
||||
|
||||
this.on_stock_direct_marionette_finish_shoot_hit_parts_damage(enemy, damage_rate, is_endure, is_ignore_multi_rate, category, no);
|
||||
end, function(retval)
|
||||
return retval;
|
||||
end);
|
||||
|
||||
sdk.hook(enemy_character_base_after_calc_damage_damage_side_method, function(args)
|
||||
pcall(this.update_damage, sdk.to_managed_object(args[2]), sdk.to_managed_object(args[3]));
|
||||
end, function(retval)
|
||||
return retval;
|
||||
end);
|
||||
|
||||
sdk.hook(quest_forfeit_method, function(args)
|
||||
pcall(this.cart, sdk.to_int64(args[3]), (sdk.to_int64(args[4]) & 0xFFFFFFFF));
|
||||
end, function(retval)
|
||||
return retval;
|
||||
end);
|
||||
|
||||
sdk.hook(on_break_method, function(args)
|
||||
-- break core group is same as hit group?
|
||||
-- break core group is part id which exploded
|
||||
local anomaly_core_part = sdk.to_managed_object(args[2]);
|
||||
|
||||
this.on_anomaly_core_break(anomaly_core_part);
|
||||
end, function(retval)
|
||||
return retval;
|
||||
end);
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
404
reframework/autorun/MHR_Overlay/Damage_Meter/non_players.lua
Normal file
404
reframework/autorun/MHR_Overlay/Damage_Meter/non_players.lua
Normal file
@@ -0,0 +1,404 @@
|
||||
local this = {};
|
||||
|
||||
local config;
|
||||
local singletons;
|
||||
local customization_menu;
|
||||
local damage_UI_entity;
|
||||
local time;
|
||||
local quest_status;
|
||||
local drawing;
|
||||
local language;
|
||||
local players;
|
||||
local error_handler;
|
||||
local utils;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
this.servant_list = {};
|
||||
this.otomo_list = {};
|
||||
|
||||
this.my_second_otomo_id = -1;
|
||||
|
||||
function this.new(id, name, level, type)
|
||||
local non_player = {};
|
||||
non_player.id = id;
|
||||
non_player.name = name;
|
||||
non_player.level = level;
|
||||
|
||||
non_player.type = type;
|
||||
|
||||
non_player.join_time = utils.constants.uninitialized_int;
|
||||
non_player.first_hit_time = utils.constants.uninitialized_int;
|
||||
non_player.dps = 0;
|
||||
|
||||
non_player.small_monsters = players.init_damage_sources()
|
||||
non_player.large_monsters = players.init_damage_sources();
|
||||
|
||||
non_player.display = {};
|
||||
non_player.display.total_damage = 0;
|
||||
non_player.display.physical_damage = 0;
|
||||
non_player.display.elemental_damage = 0;
|
||||
non_player.display.ailment_damage = 0;
|
||||
|
||||
this.init_UI(non_player);
|
||||
|
||||
return non_player;
|
||||
end
|
||||
|
||||
function this.get_servant(servant_id)
|
||||
return this.servant_list[servant_id];
|
||||
end
|
||||
|
||||
function this.get_otomo(otomo_id)
|
||||
return this.otomo_list[otomo_id];
|
||||
end
|
||||
|
||||
function this.init()
|
||||
this.servant_list = {};
|
||||
this.otomo_list = {};
|
||||
end
|
||||
|
||||
local servant_manager_type_def = sdk.find_type_definition("snow.ai.ServantManager");
|
||||
local get_quest_servant_id_list_method = servant_manager_type_def:get_method("getQuestServantIdList");
|
||||
local get_ai_control_by_servant_id_method = servant_manager_type_def:get_method("getAIControlByServantID");
|
||||
|
||||
local servant_list_type_def = get_quest_servant_id_list_method:get_return_type();
|
||||
local servant_get_count_method = servant_list_type_def:get_method("get_Count");
|
||||
local servant_get_item_method = servant_list_type_def:get_method("get_Item");
|
||||
|
||||
local ai_control_type_def = get_ai_control_by_servant_id_method:get_return_type();
|
||||
local get_servant_info_method = ai_control_type_def:get_method("get_ServantInfo");
|
||||
|
||||
local servant_info_type_def = get_servant_info_method:get_return_type();
|
||||
local get_servant_name_method = servant_info_type_def:get_method("get_ServantName");
|
||||
local get_servant_player_index_method = servant_info_type_def:get_method("get_ServantPlayerIndex");
|
||||
|
||||
local lobby_manager_type_def = sdk.find_type_definition("snow.LobbyManager");
|
||||
local quest_otomo_info_field = lobby_manager_type_def:get_field("_questOtomoInfo");
|
||||
local otomo_info_field = lobby_manager_type_def:get_field("_OtomoInfo");
|
||||
|
||||
local otomo_manager_type_def = sdk.find_type_definition("snow.otomo.OtomoManager");
|
||||
local get_master_otomo_info_method = otomo_manager_type_def:get_method("getMasterOtomoInfo");
|
||||
|
||||
local otomo_create_data_type_def = get_master_otomo_info_method:get_return_type();
|
||||
local otomo_create_data_name_field = otomo_create_data_type_def:get_field("Name");
|
||||
local otomo_create_data_level_field = otomo_create_data_type_def:get_field("Level");
|
||||
|
||||
local get_servant_otomo_list_method = otomo_manager_type_def:get_method("getServantOtomoList");
|
||||
|
||||
local otomo_list_type_def = get_servant_otomo_list_method:get_return_type();
|
||||
local otomo_get_count_method = otomo_list_type_def:get_method("get_Count");
|
||||
local otomo_get_item_method = otomo_list_type_def:get_method("get_Item");
|
||||
|
||||
local otomo_info_list_type_def = quest_otomo_info_field:get_type();
|
||||
local otomo_info_get_count_method = otomo_info_list_type_def:get_method("get_Count");
|
||||
local otomo_info_get_item_method = otomo_info_list_type_def:get_method("get_Item");
|
||||
|
||||
|
||||
local otomo_info_type_def = otomo_info_get_item_method:get_return_type();
|
||||
local otomo_info_name_field = otomo_info_type_def:get_field("_Name");
|
||||
local otomo_info_level_field = otomo_info_type_def:get_field("_Level");
|
||||
local otomo_info_order_field = otomo_info_type_def:get_field("_Order");
|
||||
|
||||
function this.update_servant_list()
|
||||
local cached_config = config.current_config.damage_meter_UI;
|
||||
|
||||
if singletons.servant_manager == nil then
|
||||
error_handler.report("non_players.update_servant_list", "Failed to Access Data: servant_manager");
|
||||
return;
|
||||
end
|
||||
|
||||
local quest_servant_id_list = get_quest_servant_id_list_method:call(singletons.servant_manager);
|
||||
if quest_servant_id_list == nil then
|
||||
-- error_handler.report("non_players.update_servant_list", "Failed to Access Data: quest_servant_id_list");
|
||||
return;
|
||||
end
|
||||
|
||||
local servant_count = servant_get_count_method:call(quest_servant_id_list);
|
||||
if servant_count == nil then
|
||||
error_handler.report("non_players.update_servant_list", "Failed to Access Data: servant_count");
|
||||
return;
|
||||
end
|
||||
|
||||
|
||||
for i = 0, servant_count - 1 do
|
||||
local servant_id = servant_get_item_method:call(quest_servant_id_list, i);
|
||||
if servant_id == nil then
|
||||
error_handler.report("non_players.update_servant_list", "Failed to Access Data: servant_id No." .. tostring(i));
|
||||
goto continue;
|
||||
end
|
||||
|
||||
|
||||
local ai_control = get_ai_control_by_servant_id_method:call(singletons.servant_manager, servant_id);
|
||||
if ai_control == nil then
|
||||
error_handler.report("non_players.update_servant_list", "Failed to Access Data: ai_control No." .. tostring(i));
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local servant_info = get_servant_info_method:call(ai_control);
|
||||
if servant_info == nil then
|
||||
error_handler.report("non_players.update_servant_list", "Failed to Access Data: servant_info No." .. tostring(i));
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local name = get_servant_name_method:call(servant_info);
|
||||
if name == nil then
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local id = get_servant_player_index_method:call(servant_info);
|
||||
if id == nil then
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if this.servant_list[id] == nil then
|
||||
this.servant_list[id] = this.new(id, name, 0, players.types.servant);
|
||||
end
|
||||
|
||||
::continue::
|
||||
end
|
||||
end
|
||||
|
||||
function this.update_otomo_list(is_on_quest, is_online)
|
||||
if singletons.otomo_manager == nil then
|
||||
error_handler.report("non_players.update_otomo_list", "Failed to Access Data: otomo_manager");
|
||||
return;
|
||||
end
|
||||
|
||||
if is_online then
|
||||
if is_on_quest then
|
||||
--non_players.update_my_otomos();
|
||||
this.update_otomos(quest_otomo_info_field);
|
||||
else
|
||||
this.update_otomos(otomo_info_field);
|
||||
end
|
||||
|
||||
|
||||
else
|
||||
if is_on_quest then
|
||||
this.update_my_otomos();
|
||||
this.update_servant_otomos();
|
||||
else
|
||||
this.update_my_otomos();
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
function this.update_my_otomos()
|
||||
local cached_config = config.current_config.damage_meter_UI;
|
||||
|
||||
local first_otomo = get_master_otomo_info_method:call(singletons.otomo_manager, 0);
|
||||
if first_otomo == nil then
|
||||
error_handler.report("non_players.update_my_otomos", "Failed to Access Data: first_otomo");
|
||||
else
|
||||
local name = otomo_create_data_name_field:get_data(first_otomo);
|
||||
if name == nil then
|
||||
error_handler.report("non_players.update_my_otomos", "Failed to Access Data: first_otomo -> name");
|
||||
end
|
||||
|
||||
if name ~= nil and name ~= "" then
|
||||
local level = otomo_create_data_level_field:get_data(first_otomo) or 0;
|
||||
|
||||
local myself_id = players.myself.id;
|
||||
local otomo = this.otomo_list[myself_id];
|
||||
if otomo == nil or name ~= otomo.name then
|
||||
otomo = this.new(0, name, level, players.types.my_otomo);
|
||||
this.otomo_list[myself_id] = otomo;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local second_otomo = get_master_otomo_info_method:call(singletons.otomo_manager, 1);
|
||||
if second_otomo == nil then
|
||||
error_handler.report("non_players.update_my_otomos", "Failed to Access Data: second_otomo");
|
||||
else
|
||||
local name = otomo_create_data_name_field:get_data(second_otomo);
|
||||
if name == nil then
|
||||
error_handler.report("non_players.update_my_otomos", "Failed to Access Data: second_otomo -> name");
|
||||
return;
|
||||
end
|
||||
|
||||
if name ~= "" then
|
||||
local level = otomo_create_data_level_field:get_data(second_otomo) or 0;
|
||||
|
||||
-- the secondary otomo is actually the 4th one!
|
||||
local otomo = this.otomo_list[this.my_second_otomo_id];
|
||||
|
||||
if otomo == nil or name ~= otomo.name then
|
||||
otomo = this.new(this.my_second_otomo_id, name, level, players.types.my_otomo);
|
||||
this.otomo_list[this.my_second_otomo_id] = otomo;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function this.update_servant_otomos()
|
||||
local cached_config = config.current_config.damage_meter_UI;
|
||||
|
||||
local servant_otomo_list = get_servant_otomo_list_method:call(singletons.otomo_manager);
|
||||
if servant_otomo_list == nil then
|
||||
error_handler.report("non_players.update_servant_otomos", "Failed to Access Data: servant_otomo_list");
|
||||
return;
|
||||
end
|
||||
|
||||
local count = otomo_get_count_method:call(servant_otomo_list);
|
||||
if count == nil then
|
||||
error_handler.report("non_players.update_servant_otomos", "Failed to Access Data: servant_otomo_list -> count");
|
||||
return;
|
||||
end
|
||||
|
||||
for i = 0, count - 1 do
|
||||
local servant_otomo = otomo_get_item_method:call(servant_otomo_list, i);
|
||||
if servant_otomo == nil then
|
||||
error_handler.report("non_players.update_servant_otomos", "Failed to Access Data: servant_otomo No. " .. tostring(i));
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local otomo_create_data = servant_otomo:call("get_OtCreateData");
|
||||
if otomo_create_data ~= nil then
|
||||
local name = otomo_create_data_name_field:get_data(otomo_create_data);
|
||||
local level = otomo_create_data_level_field:get_data(otomo_create_data) or 0;
|
||||
local member_id = otomo_create_data:get_field("MemberID");
|
||||
|
||||
if name == nil then
|
||||
error_handler.report("non_players.update_servant_otomos", string.format("Failed to Access Data: servant_otomo No. %d -> name", i));
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local otomo = this.otomo_list[member_id];
|
||||
|
||||
if otomo == nil then
|
||||
otomo = this.new(member_id, name, level, players.types.servant_otomo);
|
||||
this.otomo_list[member_id] = otomo;
|
||||
end
|
||||
end
|
||||
|
||||
::continue::
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function this.update_otomos(otomo_info_field_)
|
||||
local cached_config = config.current_config.damage_meter_UI;
|
||||
|
||||
if singletons.lobby_manager == nil then
|
||||
error_handler.report("non_players.update_otomos", "Failed to Access Data: lobby_manager");
|
||||
return;
|
||||
end
|
||||
|
||||
-- other players
|
||||
local otomo_info_list = otomo_info_field_:get_data(singletons.lobby_manager);
|
||||
if otomo_info_list == nil then
|
||||
error_handler.report("non_players.update_otomos", "Failed to Access Data: otomo_info_list");
|
||||
return;
|
||||
end
|
||||
|
||||
local count = otomo_info_get_count_method:call(otomo_info_list);
|
||||
if count == nil then
|
||||
error_handler.report("non_players.update_otomos", "Failed to Access Data: otomo_info_list -> count");
|
||||
return;
|
||||
end
|
||||
|
||||
for id = 0, count - 1 do
|
||||
local otomo_info = otomo_info_get_item_method:call(otomo_info_list, id);
|
||||
if otomo_info == nil then
|
||||
error_handler.report("non_players.update_otomos", "Failed to Access Data: otomo_info No. " .. tostring(id));
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local name = otomo_info_name_field:get_data(otomo_info);
|
||||
if name == nil then
|
||||
error_handler.report("non_players.update_otomos", string.format("Failed to Access Data: otomo_info No. %d -> name", id));
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local level = otomo_info_level_field:get_data(otomo_info) or 0;
|
||||
|
||||
local otomo = this.otomo_list[id];
|
||||
|
||||
if otomo == nil or (otomo.name ~= name and level ~= otomo.level) or
|
||||
(otomo.type == players.types.my_otomo and otomo.id ~= players.myself.id) or
|
||||
(otomo.type ~= players.types.my_otomo and otomo.id == players.myself.id) then
|
||||
if id == players.myself.id then
|
||||
otomo = this.new(id, name, level, players.types.my_otomo);
|
||||
this.otomo_list[id] = otomo;
|
||||
|
||||
elseif id >= 4 then
|
||||
otomo = this.new(id, name, level, players.types.servant_otomo);
|
||||
this.otomo_list[id] = otomo;
|
||||
|
||||
else
|
||||
otomo = this.new(id, name, level, players.types.other_player_otomo);
|
||||
this.otomo_list[id] = otomo;
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
::continue::
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_UI(non_player)
|
||||
local cached_config = config.current_config.damage_meter_UI;
|
||||
|
||||
if non_player.type == players.types.servant then
|
||||
non_player.damage_UI = damage_UI_entity.new(cached_config.servants, non_player.type);
|
||||
elseif non_player.type == players.types.my_otomo then
|
||||
non_player.damage_UI = damage_UI_entity.new(cached_config.my_otomos, non_player.type);
|
||||
elseif non_player.type == players.types.other_player_otomo then
|
||||
non_player.damage_UI = damage_UI_entity.new(cached_config.other_player_otomos, non_player.type);
|
||||
elseif non_player.type == players.types.servant_otomo then
|
||||
non_player.damage_UI = damage_UI_entity.new(cached_config.servant_otomos, non_player.type);
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_dependencies()
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
damage_UI_entity = require("MHR_Overlay.UI.UI_Entities.damage_UI_entity");
|
||||
time = require("MHR_Overlay.Game_Handler.time");
|
||||
quest_status = require("MHR_Overlay.Game_Handler.quest_status");
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
this.init();
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -1,555 +0,0 @@
|
||||
local player = {};
|
||||
local config;
|
||||
local table_helpers;
|
||||
local singletons;
|
||||
local customization_menu;
|
||||
local damage_UI_entity;
|
||||
local time;
|
||||
local quest_status;
|
||||
local drawing;
|
||||
local language;
|
||||
|
||||
player.list = {};
|
||||
player.myself = nil;
|
||||
player.myself_position = Vector3f.new(0, 0, 0);
|
||||
player.total = nil;
|
||||
|
||||
function player.new(id, guid, name, master_rank, hunter_rank)
|
||||
local new_player = {};
|
||||
new_player.id = id;
|
||||
new_player.guid = guid;
|
||||
new_player.name = name; -- 齁ODO
|
||||
new_player.hunter_rank = hunter_rank;
|
||||
new_player.master_rank = master_rank;
|
||||
|
||||
new_player.cart_count = 0;
|
||||
|
||||
new_player.join_time = -1;
|
||||
new_player.first_hit_time = -1;
|
||||
new_player.dps = 0;
|
||||
|
||||
new_player.small_monsters = {};
|
||||
|
||||
new_player.small_monsters.total_damage = 0;
|
||||
new_player.small_monsters.physical_damage = 0;
|
||||
new_player.small_monsters.elemental_damage = 0;
|
||||
new_player.small_monsters.ailment_damage = 0;
|
||||
|
||||
new_player.small_monsters.bombs = {};
|
||||
new_player.small_monsters.bombs.total_damage = 0;
|
||||
new_player.small_monsters.bombs.physical_damage = 0;
|
||||
new_player.small_monsters.bombs.elemental_damage = 0;
|
||||
new_player.small_monsters.bombs.ailment_damage = 0;
|
||||
|
||||
new_player.small_monsters.kunai = {};
|
||||
new_player.small_monsters.kunai.total_damage = 0;
|
||||
new_player.small_monsters.kunai.physical_damage = 0;
|
||||
new_player.small_monsters.kunai.elemental_damage = 0;
|
||||
new_player.small_monsters.kunai.ailment_damage = 0;
|
||||
|
||||
new_player.small_monsters.installations = {};
|
||||
new_player.small_monsters.installations.total_damage = 0;
|
||||
new_player.small_monsters.installations.physical_damage = 0;
|
||||
new_player.small_monsters.installations.elemental_damage = 0;
|
||||
new_player.small_monsters.installations.ailment_damage = 0;
|
||||
|
||||
new_player.small_monsters.otomo = {};
|
||||
new_player.small_monsters.otomo.total_damage = 0;
|
||||
new_player.small_monsters.otomo.physical_damage = 0;
|
||||
new_player.small_monsters.otomo.elemental_damage = 0;
|
||||
new_player.small_monsters.otomo.ailment_damage = 0;
|
||||
|
||||
new_player.small_monsters.wyvern_riding = {};
|
||||
new_player.small_monsters.wyvern_riding.total_damage = 0;
|
||||
new_player.small_monsters.wyvern_riding.physical_damage = 0;
|
||||
new_player.small_monsters.wyvern_riding.elemental_damage = 0;
|
||||
new_player.small_monsters.wyvern_riding.ailment_damage = 0;
|
||||
|
||||
new_player.small_monsters.poison = {};
|
||||
new_player.small_monsters.poison.total_damage = 0;
|
||||
new_player.small_monsters.poison.physical_damage = 0;
|
||||
new_player.small_monsters.poison.elemental_damage = 0;
|
||||
new_player.small_monsters.poison.ailment_damage = 0;
|
||||
|
||||
new_player.small_monsters.blast = {};
|
||||
new_player.small_monsters.blast.total_damage = 0;
|
||||
new_player.small_monsters.blast.physical_damage = 0;
|
||||
new_player.small_monsters.blast.elemental_damage = 0;
|
||||
new_player.small_monsters.blast.ailment_damage = 0;
|
||||
|
||||
new_player.small_monsters.endemic_life = {};
|
||||
new_player.small_monsters.endemic_life.total_damage = 0;
|
||||
new_player.small_monsters.endemic_life.physical_damage = 0;
|
||||
new_player.small_monsters.endemic_life.elemental_damage = 0;
|
||||
new_player.small_monsters.endemic_life.ailment_damage = 0;
|
||||
|
||||
new_player.small_monsters.other = {};
|
||||
new_player.small_monsters.other.total_damage = 0;
|
||||
new_player.small_monsters.other.physical_damage = 0;
|
||||
new_player.small_monsters.other.elemental_damage = 0;
|
||||
new_player.small_monsters.other.ailment_damage = 0;
|
||||
|
||||
new_player.large_monsters = {};
|
||||
|
||||
new_player.large_monsters.total_damage = 0;
|
||||
new_player.large_monsters.physical_damage = 0;
|
||||
new_player.large_monsters.elemental_damage = 0;
|
||||
new_player.large_monsters.ailment_damage = 0;
|
||||
|
||||
new_player.large_monsters.bombs = {};
|
||||
new_player.large_monsters.bombs.total_damage = 0;
|
||||
new_player.large_monsters.bombs.physical_damage = 0;
|
||||
new_player.large_monsters.bombs.elemental_damage = 0;
|
||||
new_player.large_monsters.bombs.ailment_damage = 0;
|
||||
|
||||
new_player.large_monsters.kunai = {};
|
||||
new_player.large_monsters.kunai.total_damage = 0;
|
||||
new_player.large_monsters.kunai.physical_damage = 0;
|
||||
new_player.large_monsters.kunai.elemental_damage = 0;
|
||||
new_player.large_monsters.kunai.ailment_damage = 0;
|
||||
|
||||
new_player.large_monsters.installations = {};
|
||||
new_player.large_monsters.installations.total_damage = 0;
|
||||
new_player.large_monsters.installations.physical_damage = 0;
|
||||
new_player.large_monsters.installations.elemental_damage = 0;
|
||||
new_player.large_monsters.installations.ailment_damage = 0;
|
||||
|
||||
new_player.large_monsters.otomo = {};
|
||||
new_player.large_monsters.otomo.total_damage = 0;
|
||||
new_player.large_monsters.otomo.physical_damage = 0;
|
||||
new_player.large_monsters.otomo.elemental_damage = 0;
|
||||
new_player.large_monsters.otomo.ailment_damage = 0;
|
||||
|
||||
new_player.large_monsters.wyvern_riding = {};
|
||||
new_player.large_monsters.wyvern_riding.total_damage = 0;
|
||||
new_player.large_monsters.wyvern_riding.physical_damage = 0;
|
||||
new_player.large_monsters.wyvern_riding.elemental_damage = 0;
|
||||
new_player.large_monsters.wyvern_riding.ailment_damage = 0;
|
||||
|
||||
new_player.large_monsters.poison = {};
|
||||
new_player.large_monsters.poison.total_damage = 0;
|
||||
new_player.large_monsters.poison.physical_damage = 0;
|
||||
new_player.large_monsters.poison.elemental_damage = 0;
|
||||
new_player.large_monsters.poison.ailment_damage = 0;
|
||||
|
||||
new_player.large_monsters.blast = {};
|
||||
new_player.large_monsters.blast.total_damage = 0;
|
||||
new_player.large_monsters.blast.physical_damage = 0;
|
||||
new_player.large_monsters.blast.elemental_damage = 0;
|
||||
new_player.large_monsters.blast.ailment_damage = 0;
|
||||
|
||||
new_player.large_monsters.endemic_life = {};
|
||||
new_player.large_monsters.endemic_life.total_damage = 0;
|
||||
new_player.large_monsters.endemic_life.physical_damage = 0;
|
||||
new_player.large_monsters.endemic_life.elemental_damage = 0;
|
||||
new_player.large_monsters.endemic_life.ailment_damage = 0;
|
||||
|
||||
new_player.large_monsters.other = {};
|
||||
new_player.large_monsters.other.total_damage = 0;
|
||||
new_player.large_monsters.other.physical_damage = 0;
|
||||
new_player.large_monsters.other.elemental_damage = 0;
|
||||
new_player.large_monsters.other.ailment_damage = 0;
|
||||
|
||||
new_player.display = {};
|
||||
new_player.display.total_damage = 0;
|
||||
new_player.display.physical_damage = 0;
|
||||
new_player.display.elemental_damage = 0;
|
||||
new_player.display.ailment_damage = 0;
|
||||
|
||||
if name == "Total" then
|
||||
player.init_total_UI(new_player);
|
||||
else
|
||||
player.init_UI(new_player);
|
||||
end
|
||||
|
||||
return new_player;
|
||||
end
|
||||
|
||||
function player.get_player(player_id)
|
||||
return player.list[player_id];
|
||||
end
|
||||
|
||||
function player.update_damage(_player, damage_source_type, is_large_monster, damage_object)
|
||||
if _player == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
if _player.first_hit_time == -1 then
|
||||
_player.first_hit_time = time.total_elapsed_script_seconds;
|
||||
end
|
||||
|
||||
local player_monster_type = _player.small_monsters;
|
||||
if is_large_monster then
|
||||
player_monster_type = _player.large_monsters;
|
||||
end
|
||||
|
||||
if damage_source_type == "player" then
|
||||
player.merge_damage(player_monster_type, damage_object);
|
||||
elseif damage_source_type == "bomb" then
|
||||
player.merge_damage(player_monster_type.bombs, damage_object);
|
||||
elseif damage_source_type == "kunai" then
|
||||
player.merge_damage(player_monster_type.kunai, damage_object);
|
||||
elseif damage_source_type == "installation" then
|
||||
player.merge_damage(player_monster_type.installations, damage_object);
|
||||
elseif damage_source_type == "otomo" then
|
||||
player.merge_damage(player_monster_type.otomo, damage_object);
|
||||
elseif damage_source_type == "wyvern riding" then
|
||||
player.merge_damage(player_monster_type.wyvern_riding, damage_object);
|
||||
elseif damage_source_type == "poison" then
|
||||
player.merge_damage(player_monster_type.poison, damage_object);
|
||||
elseif damage_source_type == "blast" then
|
||||
player.merge_damage(player_monster_type.blast, damage_object);
|
||||
elseif damage_source_type == "endemic life" then
|
||||
player.merge_damage(player_monster_type.endemic_life, damage_object);
|
||||
elseif damage_source_type == "other" then
|
||||
player.merge_damage(player_monster_type.other, damage_object);
|
||||
else
|
||||
player.merge_damage(player_monster_type, damage_object);
|
||||
end
|
||||
|
||||
player.update_display(_player);
|
||||
end
|
||||
|
||||
function player.update_display(_player)
|
||||
if _player == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
_player.display.total_damage = 0;
|
||||
_player.display.physical_damage = 0;
|
||||
_player.display.elemental_damage = 0;
|
||||
_player.display.ailment_damage = 0;
|
||||
|
||||
local cached_config = config.current_config.damage_meter_UI;
|
||||
|
||||
if cached_config.tracked_monster_types.small_monsters then
|
||||
if cached_config.tracked_damage_types.player_damage then
|
||||
player.merge_damage(_player.display, _player.small_monsters);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.bomb_damage then
|
||||
player.merge_damage(_player.display, _player.small_monsters.bombs);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.kunai_damage then
|
||||
player.merge_damage(_player.display, _player.small_monsters.kunai);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.installation_damage then
|
||||
player.merge_damage(_player.display, _player.small_monsters.installations);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.otomo_damage then
|
||||
player.merge_damage(_player.display, _player.small_monsters.otomo);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.wyvern_riding_damage then
|
||||
player.merge_damage(_player.display, _player.small_monsters.wyvern_riding);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.poison_damage then
|
||||
player.merge_damage(_player.display, _player.small_monsters.poison);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.blast_damage then
|
||||
player.merge_damage(_player.display, _player.small_monsters.blast);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.endemic_life_damage then
|
||||
player.merge_damage(_player.display, _player.small_monsters.endemic_life);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.other_damage then
|
||||
player.merge_damage(_player.display, _player.small_monsters.other);
|
||||
end
|
||||
end
|
||||
|
||||
if cached_config.tracked_monster_types.large_monsters then
|
||||
if cached_config.tracked_damage_types.player_damage then
|
||||
player.merge_damage(_player.display, _player.large_monsters);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.bomb_damage then
|
||||
player.merge_damage(_player.display, _player.large_monsters.bombs);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.kunai_damage then
|
||||
player.merge_damage(_player.display, _player.large_monsters.kunai);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.installation_damage then
|
||||
player.merge_damage(_player.display, _player.large_monsters.installations);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.otomo_damage then
|
||||
player.merge_damage(_player.display, _player.large_monsters.otomo);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.wyvern_riding_damage then
|
||||
player.merge_damage(_player.display, _player.large_monsters.wyvern_riding);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.poison_damage then
|
||||
player.merge_damage(_player.display, _player.large_monsters.poison);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.blast_damage then
|
||||
player.merge_damage(_player.display, _player.large_monsters.blast);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.endemic_life_damage then
|
||||
player.merge_damage(_player.display, _player.large_monsters.endemic_life);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.other_damage then
|
||||
player.merge_damage(_player.display, _player.large_monsters.other);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function player.merge_damage(first, second)
|
||||
first.total_damage = first.total_damage + second.total_damage;
|
||||
first.physical_damage = first.physical_damage + second.physical_damage;
|
||||
first.elemental_damage = first.elemental_damage + second.elemental_damage;
|
||||
first.ailment_damage = first.ailment_damage + second.ailment_damage;
|
||||
|
||||
return first;
|
||||
end
|
||||
|
||||
local player_manager_type_def = sdk.find_type_definition("snow.player.PlayerManager");
|
||||
local find_master_player_method = player_manager_type_def:get_method("findMasterPlayer");
|
||||
|
||||
local player_base_type_def = sdk.find_type_definition("snow.player.PlayerBase");
|
||||
local get_pos_field = player_base_type_def:get_method("get_Pos");
|
||||
|
||||
function player.update_myself_position()
|
||||
if singletons.player_manager == nil then
|
||||
customization_menu.status = "No player manager";
|
||||
return;
|
||||
end
|
||||
|
||||
local master_player = find_master_player_method:call(singletons.player_manager);
|
||||
if master_player == nil then
|
||||
customization_menu.status = "No master player";
|
||||
return;
|
||||
end
|
||||
|
||||
local position = get_pos_field:call(master_player);
|
||||
if position ~= nil then
|
||||
player.myself_position = position;
|
||||
end
|
||||
end
|
||||
|
||||
function player.init()
|
||||
player.list = {};
|
||||
player.total = player.new(0, -2, "Total", 0, 0);
|
||||
player.myself = player.new(-1, -1, "Dummy", -1, -1);
|
||||
end
|
||||
|
||||
local lobby_manager_type_def = sdk.find_type_definition("snow.LobbyManager");
|
||||
local my_hunter_info_field = lobby_manager_type_def:get_field("_myHunterInfo");
|
||||
local myself_quest_index_field = lobby_manager_type_def:get_field("_myselfQuestIndex");
|
||||
|
||||
local quest_hunter_info_field = lobby_manager_type_def:get_field("_questHunterInfo");
|
||||
local hunter_info_field = lobby_manager_type_def:get_field("_hunterInfo");
|
||||
|
||||
local my_hunter_info_type_def = my_hunter_info_field:get_type();
|
||||
local name_field = my_hunter_info_type_def:get_field("_name");
|
||||
local hunter_unique_id_field = my_hunter_info_type_def:get_field("_HunterUniqueId");
|
||||
local member_index_field = my_hunter_info_type_def:get_field("_memberIndex");
|
||||
local hunter_rank_field = my_hunter_info_type_def:get_field("_hunterRank");
|
||||
local master_rank_field = my_hunter_info_type_def:get_field("_masterRank");
|
||||
|
||||
local hunter_info_type_def = hunter_info_field:get_type();
|
||||
local get_count_method = hunter_info_type_def:get_method("get_Count");
|
||||
local get_item_method = hunter_info_type_def:get_method("get_Item");
|
||||
|
||||
local guid_type = hunter_unique_id_field:get_type();
|
||||
local guid_equals_method = guid_type:get_method("Equals(System.Guid)");
|
||||
|
||||
local progress_manager_type_def = sdk.find_type_definition("snow.progress.ProgressManager");
|
||||
local get_hunter_rank_method = progress_manager_type_def:get_method("get_HunterRank");
|
||||
local get_master_rank_method = progress_manager_type_def:get_method("get_MasterRank");
|
||||
|
||||
local get_master_player_id_method = player_manager_type_def:get_method("getMasterPlayerID");
|
||||
|
||||
function player.update_player_list(is_on_quest)
|
||||
if is_on_quest then
|
||||
player.update_player_list_(quest_hunter_info_field);
|
||||
else
|
||||
player.update_player_list_(hunter_info_field);
|
||||
end
|
||||
end
|
||||
|
||||
function player.update_player_list_(hunter_info_field_)
|
||||
if singletons.lobby_manager == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
if singletons.progress_manager == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
-- myself player
|
||||
local myself_player_info = my_hunter_info_field:get_data(singletons.lobby_manager);
|
||||
if myself_player_info == nil then
|
||||
customization_menu.status = "No myself player info list";
|
||||
return;
|
||||
end
|
||||
|
||||
local myself_player_name = name_field:get_data(myself_player_info);
|
||||
if myself_player_name == nil then
|
||||
customization_menu.status = "No myself player name";
|
||||
return;
|
||||
end
|
||||
|
||||
local myself_hunter_rank = get_hunter_rank_method:call(singletons.progress_manager) or 0;
|
||||
local myself_master_rank = get_master_rank_method:call(singletons.progress_manager) or 0;
|
||||
|
||||
local myself_id = get_master_player_id_method:call(singletons.player_manager) or -1;
|
||||
-- if quest_status.is_online then
|
||||
-- myself_id = get_master_player_id_method:call(singletons.player_manager) or -1;
|
||||
-- else
|
||||
-- myself_id = myself_quest_index_field:call(singletons.lobby_manager) or -1;
|
||||
-- end
|
||||
|
||||
if myself_id == nil then
|
||||
customization_menu.status = "No myself player id";
|
||||
return;
|
||||
end
|
||||
|
||||
local myself_guid = hunter_unique_id_field:get_data(myself_player_info);
|
||||
if myself_guid == nil then
|
||||
customization_menu.status = "No myself guid";
|
||||
return;
|
||||
end
|
||||
|
||||
-- local myself_guid_string = guid_tostring_method:call(myself_guid);
|
||||
-- if myself_guid_string == nil then
|
||||
-- customization_menu.status = "No myself guid string";
|
||||
-- return;
|
||||
-- end
|
||||
|
||||
if myself_id ~= player.myself.id then
|
||||
player.list[player.myself.id] = nil;
|
||||
player.myself = player.new(myself_id, myself_guid, myself_player_name, myself_master_rank, myself_hunter_rank);
|
||||
player.list[myself_id] = player.myself;
|
||||
end
|
||||
|
||||
-- other players
|
||||
local player_info_list = hunter_info_field_:get_data(singletons.lobby_manager);
|
||||
if player_info_list == nil then
|
||||
customization_menu.status = "No player info list";
|
||||
return;
|
||||
end
|
||||
|
||||
local count = get_count_method:call(player_info_list);
|
||||
if count == nil then
|
||||
customization_menu.status = "No player info list count";
|
||||
return;
|
||||
end
|
||||
|
||||
for i = 0, count - 1 do
|
||||
local player_info = get_item_method:call(player_info_list, i);
|
||||
if player_info == nil then
|
||||
goto continue
|
||||
end
|
||||
|
||||
local player_id = member_index_field:get_data(player_info);
|
||||
|
||||
if player_id == nil then
|
||||
goto continue
|
||||
end
|
||||
|
||||
local player_guid = hunter_unique_id_field:get_data(player_info);
|
||||
if player_guid == nil then
|
||||
customization_menu.status = "No player guid";
|
||||
return;
|
||||
end
|
||||
|
||||
-- local player_guid_string = guid_tostring_method:call(player_guid);
|
||||
-- if player_guid_string == nil then
|
||||
-- customization_menu.status = "No player guid string";
|
||||
-- return;
|
||||
-- end
|
||||
|
||||
local player_hunter_rank = hunter_rank_field:get_data(player_info) or 0;
|
||||
local player_master_rank = master_rank_field:get_data(player_info) or 0;
|
||||
|
||||
local player_name = name_field:get_data(player_info);
|
||||
if player_name == nil then
|
||||
goto continue
|
||||
end
|
||||
|
||||
if player.list[player_id] == nil or not guid_equals_method:call(player.list[player_id].guid, player_guid) -- player.list[player_id].guid ~= player_guid
|
||||
then
|
||||
local _player = player.new(player_id, player_guid, player_name, player_master_rank, player_hunter_rank);
|
||||
player.list[player_id] = _player;
|
||||
|
||||
if player_name == player.myself.name and player_hunter_rank == player.myself.hunter_rank and player_master_rank ==
|
||||
player.myself.master_rank then
|
||||
player.myself = _player;
|
||||
end
|
||||
end
|
||||
|
||||
::continue::
|
||||
end
|
||||
end
|
||||
|
||||
function player.init_UI(_player)
|
||||
local cached_config = config.current_config.damage_meter_UI;
|
||||
|
||||
_player.damage_UI = damage_UI_entity.new(cached_config.damage_bar, cached_config.highlighted_damage_bar,
|
||||
cached_config.player_name_label, cached_config.dps_label, cached_config.master_hunter_rank_label,
|
||||
cached_config.damage_value_label, cached_config.damage_percentage_label, cached_config.cart_count_label);
|
||||
end
|
||||
|
||||
function player.init_total_UI(_player)
|
||||
local cached_config = config.current_config.damage_meter_UI;
|
||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||
|
||||
_player.damage_UI = {
|
||||
total_damage_label = table_helpers.deep_copy(cached_config.total_damage_label),
|
||||
total_damage_value_label = table_helpers.deep_copy(cached_config.total_damage_value_label),
|
||||
total_dps_label = table_helpers.deep_copy(cached_config.total_dps_label)
|
||||
};
|
||||
|
||||
_player.damage_UI.total_damage_label.offset.x = _player.damage_UI.total_damage_label.offset.x * global_scale_modifier;
|
||||
_player.damage_UI.total_damage_label.offset.y = _player.damage_UI.total_damage_label.offset.y * global_scale_modifier;
|
||||
|
||||
_player.damage_UI.total_damage_value_label.offset.x = _player.damage_UI.total_damage_value_label.offset.x *
|
||||
global_scale_modifier;
|
||||
_player.damage_UI.total_damage_value_label.offset.y = _player.damage_UI.total_damage_value_label.offset.y *
|
||||
global_scale_modifier;
|
||||
|
||||
_player.damage_UI.total_dps_label.offset.x = _player.damage_UI.total_dps_label.offset.x * global_scale_modifier;
|
||||
_player.damage_UI.total_dps_label.offset.y = _player.damage_UI.total_dps_label.offset.y * global_scale_modifier;
|
||||
end
|
||||
|
||||
function player.draw(_player, position_on_screen, opacity_scale, top_damage, top_dps)
|
||||
damage_UI_entity.draw(_player, position_on_screen, opacity_scale, top_damage, top_dps);
|
||||
end
|
||||
|
||||
function player.draw_total(position_on_screen, opacity_scale)
|
||||
drawing.draw_label(player.total.damage_UI.total_damage_label, position_on_screen, opacity_scale,
|
||||
language.current_language.UI.total_damage);
|
||||
drawing.draw_label(player.total.damage_UI.total_damage_value_label, position_on_screen, opacity_scale,
|
||||
player.total.display.total_damage);
|
||||
drawing.draw_label(player.total.damage_UI.total_dps_label, position_on_screen, opacity_scale, player.total.dps);
|
||||
end
|
||||
|
||||
function player.init_module()
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
damage_UI_entity = require("MHR_Overlay.UI.UI_Entities.damage_UI_entity");
|
||||
time = require("MHR_Overlay.Game_Handler.time");
|
||||
quest_status = require("MHR_Overlay.Game_Handler.quest_status");
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
|
||||
player.init();
|
||||
end
|
||||
|
||||
return player;
|
||||
611
reframework/autorun/MHR_Overlay/Damage_Meter/players.lua
Normal file
611
reframework/autorun/MHR_Overlay/Damage_Meter/players.lua
Normal file
@@ -0,0 +1,611 @@
|
||||
local this = {};
|
||||
|
||||
local config;
|
||||
local singletons;
|
||||
local customization_menu;
|
||||
local damage_UI_entity;
|
||||
local time;
|
||||
local quest_status;
|
||||
local drawing;
|
||||
local language;
|
||||
local non_players;
|
||||
local utils;
|
||||
local error_handler;
|
||||
local large_monster;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
this.list = {};
|
||||
this.myself = nil;
|
||||
this.myself_position = Vector3f.new(0, 0, 0);
|
||||
this.total = nil;
|
||||
|
||||
this.highlighted_damage_UI = nil;
|
||||
|
||||
this.damage_types = {
|
||||
["player"] = "player",
|
||||
["bombs"] = "bombs",
|
||||
["kunai"] = "kunai",
|
||||
["installations"] = "installations",
|
||||
["otomo"] = "otomo",
|
||||
["wyvern_riding"] = "wyvern_riding",
|
||||
["poison"] = "poison",
|
||||
["otomo_poison"] = "otomo_poison",
|
||||
["blast"] = "blast",
|
||||
["otomo_blast"] = "otomo_blast",
|
||||
["endemic_life"] = "endemic_life",
|
||||
["anomaly_core"] = "anomaly_core",
|
||||
["other"] = "other"
|
||||
};
|
||||
|
||||
this.types = {
|
||||
["myself"] = 0,
|
||||
["other_player"] = 1,
|
||||
["servant"] = 2,
|
||||
["my_otomo"] = 4,
|
||||
["other_player_otomo"] = 8,
|
||||
["servant_otomo"] = 16,
|
||||
["total"] = 32,
|
||||
["highlight"] = 64
|
||||
};
|
||||
|
||||
function this.new(id, name, master_rank, hunter_rank, type)
|
||||
local player = {};
|
||||
player.id = id;
|
||||
player.name = name;
|
||||
player.hunter_rank = hunter_rank;
|
||||
player.master_rank = master_rank;
|
||||
|
||||
player.type = type;
|
||||
|
||||
player.cart_count = 0;
|
||||
|
||||
player.join_time = utils.constants.uninitialized_int;
|
||||
player.first_hit_time = utils.constants.uninitialized_int;
|
||||
player.dps = 0;
|
||||
|
||||
player.small_monsters = this.init_damage_sources();
|
||||
player.large_monsters = this.init_damage_sources();
|
||||
|
||||
player.display = {};
|
||||
player.display.total_damage = 0;
|
||||
player.display.physical_damage = 0;
|
||||
player.display.elemental_damage = 0;
|
||||
player.display.ailment_damage = 0;
|
||||
|
||||
this.init_UI(player);
|
||||
|
||||
if this.highlighted_damage_UI == nil then
|
||||
this.init_highlighted_UI();
|
||||
end
|
||||
|
||||
return player;
|
||||
end
|
||||
|
||||
function this.init_damage_sources()
|
||||
local monster_type = {};
|
||||
|
||||
for damage_type_name, _ in pairs(this.damage_types) do
|
||||
monster_type[damage_type_name] = {
|
||||
total_damage = 0,
|
||||
physical_damage = 0,
|
||||
elemental_damage = 0,
|
||||
ailment_damage = 0
|
||||
};
|
||||
end
|
||||
|
||||
return monster_type;
|
||||
end
|
||||
|
||||
function this.get_player(player_id)
|
||||
if player_id == non_players.my_second_otomo_id then
|
||||
return this.myself;
|
||||
end
|
||||
|
||||
return this.list[player_id];
|
||||
end
|
||||
|
||||
function this.update_damage(player, damage_source_type, is_large_monster, damage_object)
|
||||
|
||||
if player == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
if player.first_hit_time == utils.constants.uninitialized_int then
|
||||
player.first_hit_time = time.total_elapsed_script_seconds;
|
||||
end
|
||||
|
||||
if is_large_monster then
|
||||
this.merge_damage(player.large_monsters[damage_source_type], damage_object);
|
||||
else
|
||||
this.merge_damage(player.small_monsters[damage_source_type], damage_object);
|
||||
end
|
||||
|
||||
this.update_display(player);
|
||||
end
|
||||
|
||||
function this.update_display(player)
|
||||
if player == nil then
|
||||
error_handler.report("players.update_display", "Missing Parameter: player");
|
||||
return;
|
||||
end
|
||||
|
||||
local cached_config = config.current_config.damage_meter_UI;
|
||||
|
||||
player.display.total_damage = 0;
|
||||
player.display.physical_damage = 0;
|
||||
player.display.elemental_damage = 0;
|
||||
player.display.ailment_damage = 0;
|
||||
|
||||
local monster_types = {};
|
||||
|
||||
if cached_config.tracked_monster_types.small_monsters then
|
||||
table.insert(monster_types, player.small_monsters);
|
||||
end
|
||||
|
||||
if cached_config.tracked_monster_types.large_monsters then
|
||||
table.insert(monster_types, player.large_monsters);
|
||||
end
|
||||
|
||||
for _, monster_type in ipairs(monster_types) do
|
||||
if cached_config.tracked_damage_types.players then
|
||||
this.merge_damage(player.display, monster_type.player);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.bombs then
|
||||
this.merge_damage(player.display, monster_type.bombs);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.kunai then
|
||||
this.merge_damage(player.display, monster_type.kunai);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.installations then
|
||||
this.merge_damage(player.display, monster_type.installations);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.otomos then
|
||||
if player.type == this.types.myself then
|
||||
|
||||
if not cached_config.settings.show_my_otomos_separately then
|
||||
this.merge_damage(player.display, monster_type.otomo);
|
||||
end
|
||||
elseif player.type == this.types.other_player then
|
||||
|
||||
if not cached_config.settings.show_other_player_otomos_separately then
|
||||
this.merge_damage(player.display, monster_type.otomo);
|
||||
end
|
||||
elseif player.type == this.types.servant then
|
||||
|
||||
if not cached_config.settings.show_servant_otomos_separately then
|
||||
this.merge_damage(player.display, monster_type.otomo);
|
||||
end
|
||||
elseif player.type == this.types.my_otomo then
|
||||
|
||||
if cached_config.settings.show_my_otomos_separately then
|
||||
this.merge_damage(player.display, monster_type.otomo);
|
||||
end
|
||||
elseif player.type == this.types.other_player_otomo then
|
||||
|
||||
if cached_config.settings.show_other_player_otomos_separately then
|
||||
this.merge_damage(player.display, monster_type.otomo);
|
||||
end
|
||||
elseif player.type == this.types.servant_otomo then
|
||||
|
||||
if cached_config.settings.show_servant_otomos_separately then
|
||||
this.merge_damage(player.display, monster_type.otomo);
|
||||
end
|
||||
elseif player.type == this.types.total then
|
||||
|
||||
this.merge_damage(player.display, monster_type.otomo);
|
||||
end
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.wyvern_riding then
|
||||
this.merge_damage(player.display, monster_type.wyvern_riding);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.poison then
|
||||
this.merge_damage(player.display, monster_type.poison);
|
||||
|
||||
if player.type == this.types.myself then
|
||||
|
||||
if not cached_config.settings.show_my_otomos_separately then
|
||||
this.merge_damage(player.display, monster_type.otomo_poison);
|
||||
end
|
||||
elseif player.type == this.types.other_player then
|
||||
|
||||
if not cached_config.settings.show_other_player_otomos_separately then
|
||||
this.merge_damage(player.display, monster_type.otomo_poison);
|
||||
end
|
||||
elseif player.type == this.types.servant then
|
||||
|
||||
if not cached_config.settings.show_servant_otomos_separately then
|
||||
this.merge_damage(player.display, monster_type.otomo_poison);
|
||||
end
|
||||
elseif player.type == this.types.my_otomo then
|
||||
|
||||
if cached_config.settings.show_my_otomos_separately then
|
||||
this.merge_damage(player.display, monster_type.otomo_poison);
|
||||
end
|
||||
elseif player.type == this.types.other_player_otomo then
|
||||
|
||||
if cached_config.settings.show_other_player_otomos_separately then
|
||||
this.merge_damage(player.display, monster_type.otomo_poison);
|
||||
end
|
||||
elseif player.type == this.types.servant_otomo then
|
||||
|
||||
if cached_config.settings.show_servant_otomos_separately then
|
||||
this.merge_damage(player.display, monster_type.otomo_poison);
|
||||
end
|
||||
|
||||
elseif player.type == this.types.total then
|
||||
|
||||
this.merge_damage(player.display, monster_type.otomo_poison);
|
||||
end
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.blast then
|
||||
this.merge_damage(player.display, monster_type.blast);
|
||||
|
||||
if player.type == this.types.myself then
|
||||
|
||||
if not cached_config.settings.show_my_otomos_separately then
|
||||
this.merge_damage(player.display, monster_type.otomo_blast);
|
||||
end
|
||||
elseif player.type == this.types.other_player then
|
||||
|
||||
if not cached_config.settings.show_other_player_otomos_separately then
|
||||
this.merge_damage(player.display, monster_type.otomo_blast);
|
||||
end
|
||||
elseif player.type == this.types.servant then
|
||||
|
||||
if not cached_config.settings.show_servant_otomos_separately then
|
||||
this.merge_damage(player.display, monster_type.otomo_blast);
|
||||
end
|
||||
elseif player.type == this.types.my_otomo then
|
||||
|
||||
if cached_config.settings.show_my_otomos_separately then
|
||||
this.merge_damage(player.display, monster_type.otomo_blast);
|
||||
end
|
||||
elseif player.type == this.types.other_player_otomo then
|
||||
|
||||
if cached_config.settings.show_other_player_otomos_separately then
|
||||
this.merge_damage(player.display, monster_type.otomo_blast);
|
||||
end
|
||||
elseif player.type == this.types.servant_otomo then
|
||||
|
||||
if cached_config.settings.show_servant_otomos_separately then
|
||||
this.merge_damage(player.display, monster_type.otomo_blast);
|
||||
end
|
||||
elseif player.type == this.types.total then
|
||||
|
||||
this.merge_damage(player.display, monster_type.otomo_blast);
|
||||
end
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.endemic_life then
|
||||
this.merge_damage(player.display, monster_type.endemic_life);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.anomaly_cores then
|
||||
this.merge_damage(player.display, monster_type.anomaly_core);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.other then
|
||||
this.merge_damage(player.display, monster_type.other);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function this.merge_damage(first, second)
|
||||
first.total_damage = first.total_damage + second.total_damage;
|
||||
first.physical_damage = first.physical_damage + second.physical_damage;
|
||||
first.elemental_damage = first.elemental_damage + second.elemental_damage;
|
||||
first.ailment_damage = first.ailment_damage + second.ailment_damage;
|
||||
|
||||
return first;
|
||||
end
|
||||
|
||||
function this.update_dps(bypass_freeze)
|
||||
local cached_config = config.current_config.damage_meter_UI.settings;
|
||||
|
||||
if cached_config.freeze_dps_on_quest_end and quest_status.flow_state >= quest_status.flow_states.KILLCAM and not bypass_freeze then
|
||||
return;
|
||||
end
|
||||
|
||||
this.total.dps = 0;
|
||||
for _, player in pairs(this.list) do
|
||||
this.update_player_dps(player);
|
||||
end
|
||||
|
||||
for _, servant in pairs(non_players.servant_list) do
|
||||
this.update_player_dps(servant);
|
||||
end
|
||||
|
||||
for _, otomo in pairs(non_players.otomo_list) do
|
||||
this.update_player_dps(otomo);
|
||||
end
|
||||
end
|
||||
|
||||
function this.update_player_dps(player)
|
||||
local cached_config = config.current_config.damage_meter_UI.settings;
|
||||
|
||||
if player.join_time == utils.constants.uninitialized_int then
|
||||
player.join_time = time.total_elapsed_script_seconds;
|
||||
end
|
||||
|
||||
if cached_config.dps_mode == "Quest Time" then
|
||||
if time.total_elapsed_seconds > 0 then
|
||||
player.dps = player.display.total_damage / time.total_elapsed_seconds;
|
||||
end
|
||||
elseif cached_config.dps_mode == "Join Time" then
|
||||
if time.total_elapsed_script_seconds - player.join_time > 0 then
|
||||
player.dps = player.display.total_damage / (time.total_elapsed_script_seconds - player.join_time);
|
||||
end
|
||||
elseif cached_config.dps_mode == "First Hit" then
|
||||
if time.total_elapsed_script_seconds - player.first_hit_time > 0 then
|
||||
player.dps = player.display.total_damage / (time.total_elapsed_script_seconds - player.first_hit_time);
|
||||
end
|
||||
end
|
||||
|
||||
this.total.dps = this.total.dps + player.dps;
|
||||
end
|
||||
|
||||
local player_manager_type_def = sdk.find_type_definition("snow.player.PlayerManager");
|
||||
local find_master_player_method = player_manager_type_def:get_method("findMasterPlayer");
|
||||
|
||||
local player_base_type_def = sdk.find_type_definition("snow.player.PlayerBase");
|
||||
local get_pos_field = player_base_type_def:get_method("get_Pos");
|
||||
|
||||
function this.update_myself_position()
|
||||
if singletons.player_manager == nil then
|
||||
error_handler.report("players.update_myself_position", "Failed to Access Data: player_manager");
|
||||
return;
|
||||
end
|
||||
|
||||
if quest_status.flow_state == quest_status.flow_states.NONE
|
||||
or quest_status.flow_state == quest_status.flow_states.CUTSCENE then
|
||||
return;
|
||||
end
|
||||
|
||||
local master_player = find_master_player_method:call(singletons.player_manager);
|
||||
if master_player == nil then
|
||||
error_handler.report("players.update_myself_position", "Failed to Access Data: master_player");
|
||||
return;
|
||||
end
|
||||
|
||||
local position = get_pos_field:call(master_player);
|
||||
if position == nil then
|
||||
error_handler.report("players.update_myself_position", "Failed to Access Data: position");
|
||||
end
|
||||
|
||||
this.myself_position = position;
|
||||
end
|
||||
|
||||
function this.init()
|
||||
this.list = {};
|
||||
this.total = this.new(0, "Total", 0, 0, this.types.total);
|
||||
this.myself = this.new(-1, "MHROverlayDummy", -1, -1, this.types.myself);
|
||||
end
|
||||
|
||||
local lobby_manager_type_def = sdk.find_type_definition("snow.LobbyManager");
|
||||
local my_hunter_info_field = lobby_manager_type_def:get_field("_myHunterInfo");
|
||||
local myself_quest_index_field = lobby_manager_type_def:get_field("_myselfQuestIndex");
|
||||
|
||||
local quest_hunter_info_field = lobby_manager_type_def:get_field("_questHunterInfo");
|
||||
local hunter_info_field = lobby_manager_type_def:get_field("_hunterInfo");
|
||||
|
||||
local my_hunter_info_type_def = my_hunter_info_field:get_type();
|
||||
local name_field = my_hunter_info_type_def:get_field("_name");
|
||||
local hunter_unique_id_field = my_hunter_info_type_def:get_field("_HunterUniqueId");
|
||||
local member_index_field = my_hunter_info_type_def:get_field("_memberIndex");
|
||||
local hunter_rank_field = my_hunter_info_type_def:get_field("_hunterRank");
|
||||
local master_rank_field = my_hunter_info_type_def:get_field("_masterRank");
|
||||
|
||||
local hunter_info_type_def = hunter_info_field:get_type();
|
||||
local get_count_method = hunter_info_type_def:get_method("get_Count");
|
||||
local get_item_method = hunter_info_type_def:get_method("get_Item");
|
||||
|
||||
local guid_type = hunter_unique_id_field:get_type();
|
||||
local guid_equals_method = guid_type:get_method("Equals(System.Guid)");
|
||||
|
||||
local progress_manager_type_def = sdk.find_type_definition("snow.progress.ProgressManager");
|
||||
local get_hunter_rank_method = progress_manager_type_def:get_method("get_HunterRank");
|
||||
local get_master_rank_method = progress_manager_type_def:get_method("get_MasterRank");
|
||||
|
||||
local get_master_player_id_method = player_manager_type_def:get_method("getMasterPlayerID");
|
||||
|
||||
function this.update_players()
|
||||
local is_on_quest = quest_status.flow_state ~= quest_status.flow_states.IN_LOBBY and quest_status.flow_state ~= quest_status.flow_states.IN_TRAINING_AREA;
|
||||
|
||||
if is_on_quest then
|
||||
this.update_player_list(quest_hunter_info_field);
|
||||
else
|
||||
this.update_player_list(hunter_info_field);
|
||||
end
|
||||
|
||||
non_players.update_servant_list();
|
||||
non_players.update_otomo_list(is_on_quest, quest_status.is_online);
|
||||
|
||||
this.update_dps(false);
|
||||
quest_status.update_cart_count();
|
||||
end
|
||||
|
||||
function this.update_player_list(hunter_info_field_)
|
||||
local cached_config = config.current_config.damage_meter_UI;
|
||||
|
||||
if singletons.lobby_manager == nil then
|
||||
error_handler.report("players.update_player_list", "Failed to Access Data: lobby_manager");
|
||||
return;
|
||||
end
|
||||
|
||||
if singletons.progress_manager == nil then
|
||||
error_handler.report("players.update_player_list", "Failed to Access Data: progress_manager");
|
||||
return;
|
||||
end
|
||||
|
||||
-- myself player
|
||||
local myself_player_info = my_hunter_info_field:get_data(singletons.lobby_manager);
|
||||
if myself_player_info == nil then
|
||||
error_handler.report("players.update_player_list", "Failed to Access Data: myself_player_info");
|
||||
return;
|
||||
end
|
||||
|
||||
local myself_player_name = name_field:get_data(myself_player_info);
|
||||
if myself_player_name == nil then
|
||||
error_handler.report("players.update_player_list", "Failed to Access Data: myself_player_name");
|
||||
return;
|
||||
end
|
||||
|
||||
local myself_hunter_rank = get_hunter_rank_method:call(singletons.progress_manager) or 0;
|
||||
local myself_master_rank = get_master_rank_method:call(singletons.progress_manager) or 0;
|
||||
|
||||
local myself_id = get_master_player_id_method:call(singletons.player_manager);
|
||||
|
||||
if myself_id == nil then
|
||||
error_handler.report("players.update_player_list", "Failed to Access Data: myself_id");
|
||||
return;
|
||||
end
|
||||
|
||||
if this.myself == nil or myself_id ~= this.myself.id then
|
||||
this.list[this.myself.id] = nil;
|
||||
this.myself = this.new(myself_id, myself_player_name, myself_master_rank, myself_hunter_rank, this.types.myself);
|
||||
this.list[myself_id] = this.myself;
|
||||
end
|
||||
|
||||
-- other players
|
||||
local player_info_array = hunter_info_field_:get_data(singletons.lobby_manager);
|
||||
if player_info_array == nil then
|
||||
error_handler.report("players.update_player_list", "Failed to Access Data: player_info_array");
|
||||
return;
|
||||
end
|
||||
|
||||
local count = get_count_method:call(player_info_array);
|
||||
if count == nil then
|
||||
error_handler.report("players.update_player_list", "Failed to Access Data: player_info_array -> count");
|
||||
return;
|
||||
end
|
||||
|
||||
for i = 0, count - 1 do
|
||||
local player_info = get_item_method:call(player_info_array, i);
|
||||
if player_info == nil then
|
||||
-- error_handler.report("players.update_player_list", "Failed to Access Data: player_info No. " .. tostring(i));
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local id = member_index_field:get_data(player_info);
|
||||
if id == nil then
|
||||
error_handler.report("players.update_player_list", string.format("Failed to Access Data: player_info No. %d -> id", i));
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local hunter_rank = hunter_rank_field:get_data(player_info) or 0;
|
||||
local master_rank = master_rank_field:get_data(player_info) or 0;
|
||||
|
||||
local name = name_field:get_data(player_info);
|
||||
if name == nil then
|
||||
error_handler.report("players.update_player_list", string.format("Failed to Access Data: player_info No. %d -> name", i));
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local player = this.list[id];
|
||||
|
||||
if player == nil then
|
||||
if name == this.myself.name then
|
||||
player = this.new(id, name, master_rank, hunter_rank, this.types.myself);
|
||||
this.myself = player;
|
||||
this.list[id] = player;
|
||||
else
|
||||
player = this.new(id, name, master_rank, hunter_rank, this.types.other_player);
|
||||
this.list[id] = player;
|
||||
end
|
||||
|
||||
elseif player.name ~= name or player.hunter_rank ~= hunter_rank or player.master_rank ~= master_rank then
|
||||
|
||||
if name == this.myself.name then
|
||||
player = this.new(id, name, master_rank, hunter_rank, this.types.myself);
|
||||
this.myself = player;
|
||||
this.list[id] = player;
|
||||
else
|
||||
player = this.new(id, name, master_rank, hunter_rank, this.types.other_player);
|
||||
this.list[id] = player;
|
||||
end
|
||||
end
|
||||
|
||||
::continue::
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_UI(player)
|
||||
local cached_config = config.current_config.damage_meter_UI;
|
||||
|
||||
if player.type == this.types.myself then
|
||||
player.damage_UI = damage_UI_entity.new(cached_config.myself, player.type);
|
||||
elseif player.type == this.types.other_player then
|
||||
player.damage_UI = damage_UI_entity.new(cached_config.other_players, player.type);
|
||||
elseif player.type == this.types.total then
|
||||
player.damage_UI = damage_UI_entity.new(cached_config.total, player.type);
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_highlighted_UI()
|
||||
local cached_config = config.current_config.damage_meter_UI;
|
||||
|
||||
this.highlighted_damage_UI = damage_UI_entity.new(cached_config.highlighted, this.types.highlight);
|
||||
end
|
||||
|
||||
function this.draw(player, position_on_screen, opacity_scale, top_damage, top_dps)
|
||||
damage_UI_entity.draw(player, position_on_screen, opacity_scale, top_damage, top_dps);
|
||||
end
|
||||
|
||||
function this.init_dependencies()
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
damage_UI_entity = require("MHR_Overlay.UI.UI_Entities.damage_UI_entity");
|
||||
time = require("MHR_Overlay.Game_Handler.time");
|
||||
quest_status = require("MHR_Overlay.Game_Handler.quest_status");
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
non_players = require("MHR_Overlay.Damage_Meter.non_players");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
large_monster = require("MHR_Overlay.Monsters.large_monster");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
this.init();
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -1,39 +1,57 @@
|
||||
local env_creature = {};
|
||||
local this = {};
|
||||
|
||||
local drawing;
|
||||
local customization_menu;
|
||||
local singletons;
|
||||
local config;
|
||||
local table_helpers;
|
||||
local utils;
|
||||
local error_handler;
|
||||
|
||||
env_creature.list = {};
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function env_creature.new(REcreature)
|
||||
local creature = {};
|
||||
this.list = {};
|
||||
|
||||
creature.life = 0;
|
||||
creature.name = "Env Creature";
|
||||
creature.is_inactive = true;
|
||||
|
||||
creature.position = Vector3f.new(0, 0, 0);
|
||||
creature.distance = 0;
|
||||
|
||||
env_creature.init(creature, REcreature);
|
||||
env_creature.init_UI(creature);
|
||||
|
||||
if env_creature.list[REcreature] == nil then
|
||||
env_creature.list[REcreature] = creature;
|
||||
end
|
||||
|
||||
return creature;
|
||||
end
|
||||
|
||||
function env_creature.get_creature(REcreature)
|
||||
if env_creature.list[REcreature] == nil then
|
||||
env_creature.list[REcreature] = env_creature.new(REcreature);
|
||||
end
|
||||
|
||||
return env_creature.list[REcreature];
|
||||
end
|
||||
this.creature_ids = {
|
||||
clothfly = 7,
|
||||
stinkmink = 23,
|
||||
butterflame = 28,
|
||||
peepersects = 29,
|
||||
red_lampsquid = 34,
|
||||
yellow_lampsquid = 35,
|
||||
cutterfly = 50,
|
||||
ruby_wirebug = 62,
|
||||
gold_wirebug = 63,
|
||||
};
|
||||
|
||||
local environment_creature_base_type_def = sdk.find_type_definition("snow.envCreature.EnvironmentCreatureBase");
|
||||
local creature_type_field = environment_creature_base_type_def:get_field("_Type");
|
||||
@@ -44,22 +62,69 @@ local get_env_creature_name_message_method = message_manager_type_def:get_method
|
||||
|
||||
local get_pos_method = environment_creature_base_type_def:get_method("get_Pos");
|
||||
|
||||
function env_creature.init(creature, REcreature)
|
||||
local get_ref_mesh_method = environment_creature_base_type_def:get_method("getMesh");
|
||||
|
||||
local mesh_type_def = get_ref_mesh_method:get_return_type();
|
||||
local get_game_object_method = mesh_type_def:get_method("get_GameObject");
|
||||
|
||||
local game_object_type_def = get_game_object_method:get_return_type();
|
||||
local get_transform_method = game_object_type_def:get_method("get_Transform");
|
||||
|
||||
local transform_type_def = get_transform_method:get_return_type();
|
||||
local get_joint_by_name_method = transform_type_def:get_method("getJointByName");
|
||||
|
||||
local joint_type_def = get_joint_by_name_method:get_return_type();
|
||||
local get_position_method = joint_type_def:get_method("get_Position");
|
||||
|
||||
function this.new(REcreature)
|
||||
local creature = {};
|
||||
|
||||
creature.life = 0;
|
||||
creature.name = "Env Creature";
|
||||
creature.is_inactive = true;
|
||||
|
||||
creature.position = Vector3f.new(0, 0, 0);
|
||||
creature.distance = 0;
|
||||
|
||||
this.init(creature, REcreature);
|
||||
this.init_UI(creature);
|
||||
|
||||
if this.list[REcreature] == nil then
|
||||
this.list[REcreature] = creature;
|
||||
end
|
||||
|
||||
return creature;
|
||||
end
|
||||
|
||||
function this.get_creature(REcreature)
|
||||
if this.list[REcreature] == nil then
|
||||
this.list[REcreature] = this.new(REcreature);
|
||||
end
|
||||
|
||||
return this.list[REcreature];
|
||||
end
|
||||
|
||||
function this.init(creature, REcreature)
|
||||
local creature_type = creature_type_field:get_data(REcreature);
|
||||
if creature_type == nil then
|
||||
customization_menu.status = "No env creature type";
|
||||
error_handler.report("env_creature.init", "Failed to Access Data: creature_type");
|
||||
return;
|
||||
end
|
||||
|
||||
local creature_name = get_env_creature_name_message_method:call(singletons.message_manager,
|
||||
creature_type);
|
||||
if creature_name ~= nil then
|
||||
creature.name = creature_name;
|
||||
local creature_name = get_env_creature_name_message_method:call(singletons.message_manager, creature_type);
|
||||
if creature_name == nil then
|
||||
error_handler.report("env_creature.init", "Failed to Access Data: creature_name");
|
||||
return;
|
||||
end
|
||||
|
||||
creature.name = creature_name;
|
||||
creature.id = creature_type;
|
||||
|
||||
this.update_head_joint(REcreature, creature)
|
||||
end
|
||||
|
||||
function env_creature.init_UI(creature)
|
||||
creature.name_label = table_helpers.deep_copy(config.current_config.endemic_life_UI.creature_name_label);
|
||||
function this.init_UI(creature)
|
||||
creature.name_label = utils.table.deep_copy(config.current_config.endemic_life_UI.creature_name_label);
|
||||
|
||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||
|
||||
@@ -67,60 +132,145 @@ function env_creature.init_UI(creature)
|
||||
creature.name_label.offset.y = creature.name_label.offset.y * global_scale_modifier;
|
||||
end
|
||||
|
||||
function env_creature.update_position(REcreature, creature)
|
||||
function this.update_position(REcreature, creature)
|
||||
if not config.current_config.endemic_life_UI.enabled then
|
||||
return;
|
||||
end
|
||||
|
||||
if creature == nil then
|
||||
creature = env_creature.get_creature(REcreature);
|
||||
creature = this.get_creature(REcreature);
|
||||
end
|
||||
|
||||
local position = get_pos_method:call(REcreature);
|
||||
if position ~= nil then
|
||||
creature.position = position;
|
||||
if position == nil then
|
||||
error_handler.report("env_creature.update_position", "Failed to Access Data: position");
|
||||
end
|
||||
|
||||
creature.position = position;
|
||||
|
||||
this.update_head_position(REcreature, creature);
|
||||
end
|
||||
|
||||
function env_creature.update(REcreature, creature)
|
||||
function this.update(REcreature, creature)
|
||||
if not config.current_config.endemic_life_UI.enabled then
|
||||
return;
|
||||
end
|
||||
|
||||
if creature == nil then
|
||||
creature = env_creature.get_creature(REcreature);
|
||||
creature = this.get_creature(REcreature);
|
||||
end
|
||||
|
||||
local is_inactive = creature_is_inactive_field:get_data(REcreature);
|
||||
if is_inactive ~= nil then
|
||||
creature.is_inactive = is_inactive;
|
||||
if is_inactive == nil then
|
||||
error_handler.report("env_creature.update", "Failed to Access Data: is_inactive");
|
||||
end
|
||||
|
||||
creature.is_inactive = is_inactive;
|
||||
end
|
||||
|
||||
function env_creature.draw(creature, position_on_screen, opacity_scale)
|
||||
if d2d ~= nil then
|
||||
function this.update_head_joint(REcreature, creature)
|
||||
local mesh = get_ref_mesh_method:call(REcreature);
|
||||
if mesh == nil then
|
||||
error_handler.report("env_creature.update_head_joint", "Failed to Access Data: Mesh");
|
||||
return;
|
||||
end
|
||||
|
||||
local game_object = get_game_object_method:call(mesh);
|
||||
if game_object == nil then
|
||||
error_handler.report("env_creature.update_head_joint", "Failed to Access Data: GameObject");
|
||||
return;
|
||||
end
|
||||
|
||||
local transform = get_transform_method:call(game_object);
|
||||
if transform == nil then
|
||||
error_handler.report("env_creature.update_head_joint", "Failed to Access Data: Transform");
|
||||
return;
|
||||
end
|
||||
|
||||
local head_joint = get_joint_by_name_method:call(transform, "Head_00")
|
||||
or get_joint_by_name_method:call(transform, "Head")
|
||||
or get_joint_by_name_method:call(transform, "Head_01")
|
||||
or get_joint_by_name_method:call(transform, "Spine_00")
|
||||
or get_joint_by_name_method:call(transform, "Body_00")
|
||||
or get_joint_by_name_method:call(transform, "body_00")
|
||||
or get_joint_by_name_method:call(transform, "Cog")
|
||||
or get_joint_by_name_method:call(transform, "Cog_00")
|
||||
or get_joint_by_name_method:call(transform, "head")
|
||||
or get_joint_by_name_method:call(transform, "root");
|
||||
|
||||
if head_joint == nil then
|
||||
-- local out = "";
|
||||
-- local joints = transform:get_Joints();
|
||||
|
||||
-- for i = 0, joints:get_Length() - 1 do
|
||||
-- local joint = joints[i];
|
||||
-- local joint_name = joint:get_Name();
|
||||
|
||||
-- out = out .. joint_name .. "\n";
|
||||
-- end
|
||||
|
||||
-- error_handler.report(creature.name, out);
|
||||
|
||||
error_handler.report("small_monster.update_head_joint", "Failed to Access Data: HeadJoint");
|
||||
return;
|
||||
end
|
||||
|
||||
creature.head_joint = head_joint;
|
||||
end
|
||||
|
||||
function this.update_head_position(REcreature, creature)
|
||||
if creature.head_joint == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
local head_position = get_position_method:call(creature.head_joint);
|
||||
if head_position == nil then
|
||||
error_handler.report("env_creature.update_head_position", "Failed to Access Data: HeadPosition");
|
||||
return;
|
||||
end
|
||||
|
||||
creature.head_position = head_position;
|
||||
end
|
||||
|
||||
function this.draw(creature, position_on_screen, opacity_scale)
|
||||
if d2d ~= nil and config.current_config.global_settings.renderer.use_d2d_if_available then
|
||||
local text_width, text_height = drawing.font:measure(creature.name);
|
||||
position_on_screen.x = position_on_screen.x - text_width / 2;
|
||||
end
|
||||
|
||||
drawing.draw_label(creature.name_label, position_on_screen, opacity_scale, creature.name);
|
||||
local cached_config = config.current_config.endemic_life_UI.creature_name_label.include;
|
||||
|
||||
local name_text = "";
|
||||
if cached_config.name then
|
||||
name_text = string.format("%s ", creature.name);
|
||||
end
|
||||
|
||||
if cached_config.id then
|
||||
name_text = string.format("%s%s ", name_text, tostring(creature.id));
|
||||
end
|
||||
|
||||
drawing.draw_label(creature.name_label, position_on_screen, opacity_scale, name_text);
|
||||
end
|
||||
|
||||
function env_creature.init_list()
|
||||
env_creature.list = {};
|
||||
function this.init_list()
|
||||
this.list = {};
|
||||
end
|
||||
|
||||
function env_creature.init_module()
|
||||
function this.init_dependencies()
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
--health_UI_entity = require("MHR_Overlay.UI.UI_Entities.health_UI_entity");
|
||||
--stamina_UI_entity = require("MHR_Overlay.UI.UI_Entities.stamina_UI_entity");
|
||||
--screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
--ailments = require("MHR_Overlay.Monsters.ailments");
|
||||
--ailment_UI_entity = require("MHR_Overlay.UI.UI_Entities.ailment_UI_entity");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return env_creature;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -1,27 +1,64 @@
|
||||
local env_creature_hook = {};
|
||||
local this = {};
|
||||
|
||||
local env_creature;
|
||||
local config;
|
||||
local time;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
local environment_creature_base_type_def = sdk.find_type_definition("snow.envCreature.EnvironmentCreatureBase");
|
||||
local update_method = environment_creature_base_type_def:get_method("update");
|
||||
|
||||
function env_creature_hook.update(REcreature)
|
||||
function this.update(REcreature)
|
||||
local creature = env_creature.get_creature(REcreature);
|
||||
env_creature.update(REcreature, creature);
|
||||
env_creature.update_position(REcreature, creature);
|
||||
end
|
||||
|
||||
function env_creature_hook.init_module()
|
||||
function this.init_dependencies()
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
env_creature = require("MHR_Overlay.Endemic_Life.env_creature");
|
||||
time = require("MHR_Overlay.Game_Handler.time");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
sdk.hook(update_method, function(args)
|
||||
pcall(env_creature_hook.update, sdk.to_managed_object(args[2]));
|
||||
pcall(this.update, sdk.to_managed_object(args[2]));
|
||||
end, function(retval)
|
||||
return retval;
|
||||
end);
|
||||
end
|
||||
|
||||
return env_creature_hook;
|
||||
return this;
|
||||
|
||||
@@ -1,12 +1,47 @@
|
||||
local config = require "MHR_Overlay.Misc.config"
|
||||
local keyboard = {};
|
||||
local this = {};
|
||||
|
||||
local config;
|
||||
local singletons;
|
||||
local customization_menu;
|
||||
local player;
|
||||
local players;
|
||||
local small_monster;
|
||||
local large_monster;
|
||||
local damage_meter_UI;
|
||||
local time;
|
||||
local error_handler;
|
||||
local quest_status;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
local game_keyboard_type_def = sdk.find_type_definition("snow.GameKeyboard");
|
||||
local hard_keyboard_field = game_keyboard_type_def:get_field("hardKeyboard");
|
||||
@@ -15,14 +50,15 @@ local hard_keyboard_field_type_def = hard_keyboard_field:get_type();
|
||||
local get_down_method = hard_keyboard_field_type_def:get_method("getDown");
|
||||
local get_trigger_method = hard_keyboard_field_type_def:get_method("getTrg");
|
||||
local get_release_method = hard_keyboard_field_type_def:get_method("getRelease");
|
||||
local update_method = hard_keyboard_field_type_def:get_method("update");
|
||||
|
||||
keyboard.hotkey_modifiers_down = {
|
||||
this.hotkey_modifiers_down = {
|
||||
ctrl = false,
|
||||
shift = false,
|
||||
alt = false
|
||||
};
|
||||
|
||||
keyboard.keys = {
|
||||
this.keys = {
|
||||
[0] = "None",
|
||||
[1] = "Left Mouse Button",
|
||||
[2] = "Right Mouse Button",
|
||||
@@ -300,174 +336,195 @@ keyboard.keys = {
|
||||
--[254] = "Clear"
|
||||
};
|
||||
|
||||
|
||||
function keyboard.update()
|
||||
if singletons.game_keyboard == nil then
|
||||
customization_menu.status = "No game keyboard";
|
||||
return;
|
||||
end
|
||||
|
||||
local hard_keyboard = hard_keyboard_field:get_data(singletons.game_keyboard);
|
||||
function this.update(hard_keyboard)
|
||||
if hard_keyboard == nil then
|
||||
customization_menu.status = "No hard keyboard";
|
||||
error_handler.report("keyboard.update", "Failed to Access Data: hard_keyboard");
|
||||
return;
|
||||
end
|
||||
|
||||
keyboard.check_modifiers(hard_keyboard);
|
||||
|
||||
local new_hotkey_registered = keyboard.register_hotkey(hard_keyboard);
|
||||
|
||||
this.check_modifiers(hard_keyboard);
|
||||
|
||||
local new_hotkey_registered = this.register_hotkey(hard_keyboard);
|
||||
|
||||
if new_hotkey_registered then
|
||||
config.save();
|
||||
config.save_current();
|
||||
else
|
||||
keyboard.check_hotkeys(hard_keyboard);
|
||||
this.check_hotkeys(hard_keyboard);
|
||||
end
|
||||
|
||||
keyboard.hotkey_modifiers_down.ctrl = false;
|
||||
keyboard.hotkey_modifiers_down.shift = false;
|
||||
keyboard.hotkey_modifiers_down.alt = false
|
||||
this.hotkey_modifiers_down.ctrl = false;
|
||||
this.hotkey_modifiers_down.shift = false;
|
||||
this.hotkey_modifiers_down.alt = false
|
||||
end
|
||||
|
||||
function keyboard.check_modifiers(hard_keyboard)
|
||||
function this.check_modifiers(hard_keyboard)
|
||||
local is_ctrl_down = get_down_method:call(hard_keyboard, 17);
|
||||
if is_ctrl_down ~= nil then
|
||||
keyboard.hotkey_modifiers_down.ctrl = is_ctrl_down;
|
||||
this.hotkey_modifiers_down.ctrl = is_ctrl_down;
|
||||
end
|
||||
|
||||
local is_shift_down = get_down_method:call(hard_keyboard, 16);
|
||||
if is_shift_down ~= nil then
|
||||
keyboard.hotkey_modifiers_down.shift = is_shift_down;
|
||||
this.hotkey_modifiers_down.shift = is_shift_down;
|
||||
end
|
||||
|
||||
local is_alt_down = get_down_method:call(hard_keyboard, 18);
|
||||
if is_alt_down ~= nil then
|
||||
keyboard.hotkey_modifiers_down.alt = is_alt_down;
|
||||
this.hotkey_modifiers_down.alt = is_alt_down;
|
||||
end
|
||||
end
|
||||
|
||||
function keyboard.register_hotkey(hard_keyboard)
|
||||
function this.register_hotkey(hard_keyboard)
|
||||
local cached_config = config.current_config.global_settings.hotkeys_with_modifiers;
|
||||
|
||||
if customization_menu.all_UI_waiting_for_key then
|
||||
for key, key_name in pairs(keyboard.keys) do
|
||||
for key, key_name in pairs(this.keys) do
|
||||
if get_release_method:call(hard_keyboard, key) then
|
||||
cached_config.all_UI.ctrl = keyboard.hotkey_modifiers_down.ctrl;
|
||||
cached_config.all_UI.shift = keyboard.hotkey_modifiers_down.shift;
|
||||
cached_config.all_UI.alt = keyboard.hotkey_modifiers_down.alt;
|
||||
cached_config.all_UI.ctrl = this.hotkey_modifiers_down.ctrl;
|
||||
cached_config.all_UI.shift = this.hotkey_modifiers_down.shift;
|
||||
cached_config.all_UI.alt = this.hotkey_modifiers_down.alt;
|
||||
cached_config.all_UI.key = key;
|
||||
customization_menu.all_UI_waiting_for_key = false;
|
||||
return true;
|
||||
end
|
||||
end
|
||||
elseif customization_menu.small_monster_UI_waiting_for_key then
|
||||
for key, key_name in pairs(keyboard.keys) do
|
||||
for key, key_name in pairs(this.keys) do
|
||||
if get_release_method:call(hard_keyboard, key) then
|
||||
cached_config.small_monster_UI.ctrl = keyboard.hotkey_modifiers_down.ctrl;
|
||||
cached_config.small_monster_UI.shift = keyboard.hotkey_modifiers_down.shift;
|
||||
cached_config.small_monster_UI.alt = keyboard.hotkey_modifiers_down.alt;
|
||||
cached_config.small_monster_UI.ctrl = this.hotkey_modifiers_down.ctrl;
|
||||
cached_config.small_monster_UI.shift = this.hotkey_modifiers_down.shift;
|
||||
cached_config.small_monster_UI.alt = this.hotkey_modifiers_down.alt;
|
||||
cached_config.small_monster_UI.key = key;
|
||||
customization_menu.small_monster_UI_waiting_for_key = false;
|
||||
return true;
|
||||
end
|
||||
end
|
||||
elseif customization_menu.large_monster_UI_waiting_for_key then
|
||||
for key, key_name in pairs(keyboard.keys) do
|
||||
for key, key_name in pairs(this.keys) do
|
||||
if get_release_method:call(hard_keyboard, key) then
|
||||
cached_config.large_monster_UI.ctrl = keyboard.hotkey_modifiers_down.ctrl;
|
||||
cached_config.large_monster_UI.shift = keyboard.hotkey_modifiers_down.shift;
|
||||
cached_config.large_monster_UI.alt = keyboard.hotkey_modifiers_down.alt;
|
||||
cached_config.large_monster_UI.ctrl = this.hotkey_modifiers_down.ctrl;
|
||||
cached_config.large_monster_UI.shift = this.hotkey_modifiers_down.shift;
|
||||
cached_config.large_monster_UI.alt = this.hotkey_modifiers_down.alt;
|
||||
cached_config.large_monster_UI.key = key;
|
||||
customization_menu.large_monster_UI_waiting_for_key = false;
|
||||
return true;
|
||||
end
|
||||
end
|
||||
elseif customization_menu.large_monster_dynamic_UI_waiting_for_key then
|
||||
for key, key_name in pairs(keyboard.keys) do
|
||||
for key, key_name in pairs(this.keys) do
|
||||
if get_release_method:call(hard_keyboard, key) then
|
||||
cached_config.large_monster_dynamic_UI.ctrl = keyboard.hotkey_modifiers_down.ctrl;
|
||||
cached_config.large_monster_dynamic_UI.shift = keyboard.hotkey_modifiers_down.shift;
|
||||
cached_config.large_monster_dynamic_UI.alt = keyboard.hotkey_modifiers_down.alt;
|
||||
cached_config.large_monster_dynamic_UI.ctrl = this.hotkey_modifiers_down.ctrl;
|
||||
cached_config.large_monster_dynamic_UI.shift = this.hotkey_modifiers_down.shift;
|
||||
cached_config.large_monster_dynamic_UI.alt = this.hotkey_modifiers_down.alt;
|
||||
cached_config.large_monster_dynamic_UI.key = key;
|
||||
customization_menu.large_monster_dynamic_UI_waiting_for_key = false;
|
||||
return true;
|
||||
end
|
||||
end
|
||||
elseif customization_menu.large_monster_static_UI_waiting_for_key then
|
||||
for key, key_name in pairs(keyboard.keys) do
|
||||
for key, key_name in pairs(this.keys) do
|
||||
if get_release_method:call(hard_keyboard, key) then
|
||||
cached_config.large_monster_static_UI.ctrl = keyboard.hotkey_modifiers_down.ctrl;
|
||||
cached_config.large_monster_static_UI.shift = keyboard.hotkey_modifiers_down.shift;
|
||||
cached_config.large_monster_static_UI.alt = keyboard.hotkey_modifiers_down.alt;
|
||||
cached_config.large_monster_static_UI.ctrl = this.hotkey_modifiers_down.ctrl;
|
||||
cached_config.large_monster_static_UI.shift = this.hotkey_modifiers_down.shift;
|
||||
cached_config.large_monster_static_UI.alt = this.hotkey_modifiers_down.alt;
|
||||
cached_config.large_monster_static_UI.key = key;
|
||||
customization_menu.large_monster_static_UI_waiting_for_key = false;
|
||||
return true;
|
||||
end
|
||||
end
|
||||
elseif customization_menu.large_monster_highlighted_UI_waiting_for_key then
|
||||
for key, key_name in pairs(keyboard.keys) do
|
||||
for key, key_name in pairs(this.keys) do
|
||||
if get_release_method:call(hard_keyboard, key) then
|
||||
cached_config.large_monster_highlighted_UI.ctrl = keyboard.hotkey_modifiers_down.ctrl;
|
||||
cached_config.large_monster_highlighted_UI.shift = keyboard.hotkey_modifiers_down.shift;
|
||||
cached_config.large_monster_highlighted_UI.alt = keyboard.hotkey_modifiers_down.alt;
|
||||
cached_config.large_monster_highlighted_UI.ctrl = this.hotkey_modifiers_down.ctrl;
|
||||
cached_config.large_monster_highlighted_UI.shift = this.hotkey_modifiers_down.shift;
|
||||
cached_config.large_monster_highlighted_UI.alt = this.hotkey_modifiers_down.alt;
|
||||
cached_config.large_monster_highlighted_UI.key = key;
|
||||
customization_menu.large_monster_highlighted_UI_waiting_for_key = false;
|
||||
return true;
|
||||
end
|
||||
end
|
||||
elseif customization_menu.time_UI_waiting_for_key then
|
||||
for key, key_name in pairs(keyboard.keys) do
|
||||
for key, key_name in pairs(this.keys) do
|
||||
if get_release_method:call(hard_keyboard, key) then
|
||||
cached_config.time_UI.ctrl = keyboard.hotkey_modifiers_down.ctrl;
|
||||
cached_config.time_UI.shift = keyboard.hotkey_modifiers_down.shift;
|
||||
cached_config.time_UI.alt = keyboard.hotkey_modifiers_down.alt;
|
||||
cached_config.time_UI.ctrl = this.hotkey_modifiers_down.ctrl;
|
||||
cached_config.time_UI.shift = this.hotkey_modifiers_down.shift;
|
||||
cached_config.time_UI.alt = this.hotkey_modifiers_down.alt;
|
||||
cached_config.time_UI.key = key;
|
||||
customization_menu.time_UI_waiting_for_key = false;
|
||||
return true;
|
||||
end
|
||||
end
|
||||
elseif customization_menu.damage_meter_UI_waiting_for_key then
|
||||
for key, key_name in pairs(keyboard.keys) do
|
||||
for key, key_name in pairs(this.keys) do
|
||||
if get_release_method:call(hard_keyboard, key) then
|
||||
cached_config.damage_meter_UI.ctrl = keyboard.hotkey_modifiers_down.ctrl;
|
||||
cached_config.damage_meter_UI.shift = keyboard.hotkey_modifiers_down.shift;
|
||||
cached_config.damage_meter_UI.alt = keyboard.hotkey_modifiers_down.alt;
|
||||
cached_config.damage_meter_UI.ctrl = this.hotkey_modifiers_down.ctrl;
|
||||
cached_config.damage_meter_UI.shift = this.hotkey_modifiers_down.shift;
|
||||
cached_config.damage_meter_UI.alt = this.hotkey_modifiers_down.alt;
|
||||
cached_config.damage_meter_UI.key = key;
|
||||
customization_menu.damage_meter_UI_waiting_for_key = false;
|
||||
return true;
|
||||
end
|
||||
end
|
||||
elseif customization_menu.endemic_life_UI_waiting_for_key then
|
||||
for key, key_name in pairs(keyboard.keys) do
|
||||
for key, key_name in pairs(this.keys) do
|
||||
if get_release_method:call(hard_keyboard, key) then
|
||||
cached_config.endemic_life_UI.ctrl = keyboard.hotkey_modifiers_down.ctrl;
|
||||
cached_config.endemic_life_UI.shift = keyboard.hotkey_modifiers_down.shift;
|
||||
cached_config.endemic_life_UI.alt = keyboard.hotkey_modifiers_down.alt;
|
||||
cached_config.endemic_life_UI.ctrl = this.hotkey_modifiers_down.ctrl;
|
||||
cached_config.endemic_life_UI.shift = this.hotkey_modifiers_down.shift;
|
||||
cached_config.endemic_life_UI.alt = this.hotkey_modifiers_down.alt;
|
||||
cached_config.endemic_life_UI.key = key;
|
||||
customization_menu.endemic_life_UI_waiting_for_key = false;
|
||||
return true;
|
||||
end
|
||||
end
|
||||
elseif customization_menu.buff_UI_waiting_for_key then
|
||||
for key, key_name in pairs(this.keys) do
|
||||
if get_release_method:call(hard_keyboard, key) then
|
||||
cached_config.buff_UI.ctrl = this.hotkey_modifiers_down.ctrl;
|
||||
cached_config.buff_UI.shift = this.hotkey_modifiers_down.shift;
|
||||
cached_config.buff_UI.alt = this.hotkey_modifiers_down.alt;
|
||||
cached_config.buff_UI.key = key;
|
||||
customization_menu.buff_UI_waiting_for_key = false;
|
||||
return true;
|
||||
end
|
||||
end
|
||||
elseif customization_menu.stats_UI_waiting_for_key then
|
||||
for key, key_name in pairs(this.keys) do
|
||||
if get_release_method:call(hard_keyboard, key) then
|
||||
cached_config.stats_UI.ctrl = this.hotkey_modifiers_down.ctrl;
|
||||
cached_config.stats_UI.shift = this.hotkey_modifiers_down.shift;
|
||||
cached_config.stats_UI.alt = this.hotkey_modifiers_down.alt;
|
||||
cached_config.stats_UI.key = key;
|
||||
customization_menu.stats_UI_waiting_for_key = false;
|
||||
return true;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return false;
|
||||
end
|
||||
|
||||
function keyboard.check_hotkeys(hard_keyboard)
|
||||
function this.check_hotkeys(hard_keyboard)
|
||||
local cached_config = config.current_config.global_settings.hotkeys_with_modifiers;
|
||||
|
||||
if not (cached_config.all_UI.ctrl and not keyboard.hotkey_modifiers_down.ctrl)
|
||||
and not (cached_config.all_UI.shift and not keyboard.hotkey_modifiers_down.shift)
|
||||
and not (cached_config.all_UI.alt and not keyboard.hotkey_modifiers_down.alt) then
|
||||
if get_release_method:call(hard_keyboard, math.tointeger(cached_config.all_UI.key)) then
|
||||
if not (cached_config.all_UI.ctrl and not this.hotkey_modifiers_down.ctrl)
|
||||
and not (cached_config.all_UI.shift and not this.hotkey_modifiers_down.shift)
|
||||
and not (cached_config.all_UI.alt and not this.hotkey_modifiers_down.alt) then
|
||||
|
||||
local all_UI_key_release = get_release_method:call(hard_keyboard, math.tointeger(cached_config.all_UI.key));
|
||||
|
||||
if all_UI_key_release == nil then
|
||||
error_handler.report("keyboard.check_hotkeys", "Failed to Access Data: all_UI_key_release");
|
||||
|
||||
elseif all_UI_key_release then
|
||||
local is_any_enabled = config.current_config.time_UI.enabled
|
||||
or config.current_config.small_monster_UI.enabled
|
||||
or config.current_config.large_monster_UI.dynamic.enabled
|
||||
or config.current_config.large_monster_UI.static.enabled
|
||||
or config.current_config.large_monster_UI.highlighted.enabled
|
||||
or config.current_config.damage_meter_UI.enabled;
|
||||
or config.current_config.damage_meter_UI.enabled
|
||||
or config.current_config.endemic_life_UI.enabled
|
||||
or config.current_config.buff_UI.enabled
|
||||
or config.current_config.stats_UI.enabled;
|
||||
|
||||
config.current_config.time_UI.enabled = not is_any_enabled;
|
||||
config.current_config.small_monster_UI.enabled = not is_any_enabled;
|
||||
@@ -475,21 +532,36 @@ function keyboard.check_hotkeys(hard_keyboard)
|
||||
config.current_config.large_monster_UI.static.enabled = not is_any_enabled;
|
||||
config.current_config.large_monster_UI.highlighted.enabled = not is_any_enabled;
|
||||
config.current_config.damage_meter_UI.enabled = not is_any_enabled;
|
||||
config.current_config.endemic_life_UI.enabled = not is_any_enabled;
|
||||
config.current_config.buff_UI.enabled = not is_any_enabled;
|
||||
config.current_config.stats_UI.enabled = not is_any_enabled;
|
||||
end
|
||||
end
|
||||
|
||||
if not (cached_config.small_monster_UI.ctrl and not keyboard.hotkey_modifiers_down.ctrl)
|
||||
and not (cached_config.small_monster_UI.shift and not keyboard.hotkey_modifiers_down.shift)
|
||||
and not (cached_config.small_monster_UI.alt and not keyboard.hotkey_modifiers_down.alt) then
|
||||
if get_release_method:call(hard_keyboard, math.tointeger(cached_config.small_monster_UI.key)) then
|
||||
if not (cached_config.small_monster_UI.ctrl and not this.hotkey_modifiers_down.ctrl)
|
||||
and not (cached_config.small_monster_UI.shift and not this.hotkey_modifiers_down.shift)
|
||||
and not (cached_config.small_monster_UI.alt and not this.hotkey_modifiers_down.alt) then
|
||||
|
||||
local small_monster_UI_key_release = get_release_method:call(hard_keyboard, math.tointeger(cached_config.small_monster_UI.key));
|
||||
|
||||
if small_monster_UI_key_release == nil then
|
||||
error_handler.report("keyboard.check_hotkeys", "Failed to Access Data: small_monster_UI_key_release");
|
||||
|
||||
elseif small_monster_UI_key_release then
|
||||
config.current_config.small_monster_UI.enabled = not config.current_config.small_monster_UI.enabled;
|
||||
end
|
||||
end
|
||||
|
||||
if not (cached_config.large_monster_UI.ctrl and not keyboard.hotkey_modifiers_down.ctrl)
|
||||
and not (cached_config.large_monster_UI.shift and not keyboard.hotkey_modifiers_down.shift)
|
||||
and not (cached_config.large_monster_UI.alt and not keyboard.hotkey_modifiers_down.alt) then
|
||||
if get_release_method:call(hard_keyboard, math.tointeger(cached_config.large_monster_UI.key)) then
|
||||
if not (cached_config.large_monster_UI.ctrl and not this.hotkey_modifiers_down.ctrl)
|
||||
and not (cached_config.large_monster_UI.shift and not this.hotkey_modifiers_down.shift)
|
||||
and not (cached_config.large_monster_UI.alt and not this.hotkey_modifiers_down.alt) then
|
||||
|
||||
local large_monster_UI_key_release = get_release_method:call(hard_keyboard, math.tointeger(cached_config.large_monster_UI.key));
|
||||
|
||||
if large_monster_UI_key_release == nil then
|
||||
error_handler.report("keyboard.check_hotkeys", "Failed to Access Data: large_monster_UI_key_release");
|
||||
|
||||
elseif large_monster_UI_key_release then
|
||||
local is_any_enabled = config.current_config.large_monster_UI.dynamic.enabled
|
||||
or config.current_config.large_monster_UI.static.enabled
|
||||
or config.current_config.large_monster_UI.highlighted.enabled;
|
||||
@@ -500,60 +572,120 @@ function keyboard.check_hotkeys(hard_keyboard)
|
||||
end
|
||||
end
|
||||
|
||||
if not (cached_config.large_monster_dynamic_UI.ctrl and not keyboard.hotkey_modifiers_down.ctrl)
|
||||
and not (cached_config.large_monster_dynamic_UI.shift and not keyboard.hotkey_modifiers_down.shift)
|
||||
and not (cached_config.large_monster_dynamic_UI.alt and not keyboard.hotkey_modifiers_down.alt) then
|
||||
if get_release_method:call(hard_keyboard,
|
||||
math.tointeger(cached_config.large_monster_dynamic_UI.key)) then
|
||||
if not (cached_config.large_monster_dynamic_UI.ctrl and not this.hotkey_modifiers_down.ctrl)
|
||||
and not (cached_config.large_monster_dynamic_UI.shift and not this.hotkey_modifiers_down.shift)
|
||||
and not (cached_config.large_monster_dynamic_UI.alt and not this.hotkey_modifiers_down.alt) then
|
||||
|
||||
local large_monster_dynamic_UI_key_release = get_release_method:call(hard_keyboard, math.tointeger(cached_config.large_monster_dynamic_UI.key));
|
||||
|
||||
if large_monster_dynamic_UI_key_release == nil then
|
||||
error_handler.report("keyboard.check_hotkeys", "Failed to Access Data: large_monster_dynamic_UI_key_release");
|
||||
|
||||
elseif large_monster_dynamic_UI_key_release then
|
||||
config.current_config.large_monster_UI.dynamic.enabled = not config.current_config.large_monster_UI.dynamic.enabled;
|
||||
end
|
||||
end
|
||||
|
||||
if not (cached_config.large_monster_static_UI.ctrl and not keyboard.hotkey_modifiers_down.ctrl)
|
||||
and not (cached_config.large_monster_static_UI.shift and not keyboard.hotkey_modifiers_down.shift)
|
||||
and not (cached_config.large_monster_static_UI.alt and not keyboard.hotkey_modifiers_down.alt) then
|
||||
if get_release_method:call(hard_keyboard,
|
||||
math.tointeger(cached_config.large_monster_static_UI.key)) then
|
||||
if not (cached_config.large_monster_static_UI.ctrl and not this.hotkey_modifiers_down.ctrl)
|
||||
and not (cached_config.large_monster_static_UI.shift and not this.hotkey_modifiers_down.shift)
|
||||
and not (cached_config.large_monster_static_UI.alt and not this.hotkey_modifiers_down.alt) then
|
||||
|
||||
local large_monster_static_UI_key_release = get_release_method:call(hard_keyboard, math.tointeger(cached_config.large_monster_static_UI.key));
|
||||
|
||||
if large_monster_static_UI_key_release == nil then
|
||||
error_handler.report("keyboard.check_hotkeys", "Failed to Access Data: large_monster_static_UI_key_release");
|
||||
|
||||
elseif large_monster_static_UI_key_release then
|
||||
config.current_config.large_monster_UI.static.enabled = not config.current_config.large_monster_UI.static.enabled;
|
||||
end
|
||||
end
|
||||
|
||||
if not (cached_config.large_monster_highlighted_UI.ctrl and not keyboard.hotkey_modifiers_down.ctrl)
|
||||
and not (cached_config.large_monster_highlighted_UI.shift and not keyboard.hotkey_modifiers_down.shift)
|
||||
and not (cached_config.large_monster_highlighted_UI.alt and not keyboard.hotkey_modifiers_down.alt) then
|
||||
if get_release_method:call(hard_keyboard,
|
||||
math.tointeger(cached_config.large_monster_highlighted_UI.key)) then
|
||||
config.current_config.large_monster_UI.highlighted.enabled = not
|
||||
config.current_config.large_monster_UI.highlighted.enabled;
|
||||
if not (cached_config.large_monster_highlighted_UI.ctrl and not this.hotkey_modifiers_down.ctrl)
|
||||
and not (cached_config.large_monster_highlighted_UI.shift and not this.hotkey_modifiers_down.shift)
|
||||
and not (cached_config.large_monster_highlighted_UI.alt and not this.hotkey_modifiers_down.alt) then
|
||||
|
||||
local large_monster_highlighted_UI_key_release = get_release_method:call(hard_keyboard, math.tointeger(cached_config.large_monster_highlighted_UI.key));
|
||||
|
||||
if large_monster_highlighted_UI_key_release == nil then
|
||||
error_handler.report("keyboard.check_hotkeys", "Failed to Access Data: large_monster_highlighted_UI_key_release");
|
||||
|
||||
elseif large_monster_highlighted_UI_key_release then
|
||||
config.current_config.large_monster_UI.highlighted.enabled = not config.current_config.large_monster_UI.highlighted.enabled;
|
||||
end
|
||||
end
|
||||
|
||||
if not (cached_config.time_UI.ctrl and not keyboard.hotkey_modifiers_down.ctrl)
|
||||
and not (cached_config.time_UI.shift and not keyboard.hotkey_modifiers_down.shift)
|
||||
and not (cached_config.time_UI.alt and not keyboard.hotkey_modifiers_down.alt) then
|
||||
if get_release_method:call(hard_keyboard, math.tointeger(cached_config.time_UI.key)) then
|
||||
if not (cached_config.time_UI.ctrl and not this.hotkey_modifiers_down.ctrl)
|
||||
and not (cached_config.time_UI.shift and not this.hotkey_modifiers_down.shift)
|
||||
and not (cached_config.time_UI.alt and not this.hotkey_modifiers_down.alt) then
|
||||
|
||||
local time_UI_key_release = get_release_method:call(hard_keyboard, math.tointeger(cached_config.time_UI.key));
|
||||
|
||||
if time_UI_key_release == nil then
|
||||
error_handler.report("keyboard.check_hotkeys", "Failed to Access Data: time_UI_key_release");
|
||||
|
||||
elseif time_UI_key_release then
|
||||
config.current_config.time_UI.enabled = not config.current_config.time_UI.enabled;
|
||||
end
|
||||
end
|
||||
|
||||
if not (cached_config.damage_meter_UI.ctrl and not keyboard.hotkey_modifiers_down.ctrl)
|
||||
and not (cached_config.damage_meter_UI.shift and not keyboard.hotkey_modifiers_down.shift)
|
||||
and not (cached_config.damage_meter_UI.alt and not keyboard.hotkey_modifiers_down.alt) then
|
||||
if get_release_method:call(hard_keyboard, math.tointeger(cached_config.damage_meter_UI.key)) then
|
||||
if not (cached_config.damage_meter_UI.ctrl and not this.hotkey_modifiers_down.ctrl)
|
||||
and not (cached_config.damage_meter_UI.shift and not this.hotkey_modifiers_down.shift)
|
||||
and not (cached_config.damage_meter_UI.alt and not this.hotkey_modifiers_down.alt) then
|
||||
|
||||
local damage_meter_UI_key_release = get_release_method:call(hard_keyboard, math.tointeger(cached_config.damage_meter_UI.key));
|
||||
|
||||
if damage_meter_UI_key_release == nil then
|
||||
error_handler.report("keyboard.check_hotkeys", "Failed to Access Data: damage_meter_UI_key_release");
|
||||
|
||||
elseif damage_meter_UI_key_release then
|
||||
config.current_config.damage_meter_UI.enabled = not config.current_config.damage_meter_UI.enabled;
|
||||
end
|
||||
end
|
||||
|
||||
if not (cached_config.endemic_life_UI.ctrl and not keyboard.hotkey_modifiers_down.ctrl)
|
||||
and not (cached_config.endemic_life_UI.shift and not keyboard.hotkey_modifiers_down.shift)
|
||||
and not (cached_config.endemic_life_UI.alt and not keyboard.hotkey_modifiers_down.alt) then
|
||||
if get_release_method:call(hard_keyboard, math.tointeger(cached_config.endemic_life_UI.key)) then
|
||||
if not (cached_config.endemic_life_UI.ctrl and not this.hotkey_modifiers_down.ctrl)
|
||||
and not (cached_config.endemic_life_UI.shift and not this.hotkey_modifiers_down.shift)
|
||||
and not (cached_config.endemic_life_UI.alt and not this.hotkey_modifiers_down.alt) then
|
||||
|
||||
local endemic_life_UI_key_release = get_release_method:call(hard_keyboard, math.tointeger(cached_config.endemic_life_UI.key));
|
||||
|
||||
if endemic_life_UI_key_release == nil then
|
||||
error_handler.report("keyboard.check_hotkeys", "Failed to Access Data: endemic_life_UI_key_release");
|
||||
|
||||
elseif endemic_life_UI_key_release then
|
||||
config.current_config.endemic_life_UI.enabled = not config.current_config.endemic_life_UI.enabled;
|
||||
end
|
||||
end
|
||||
|
||||
if not (cached_config.buff_UI.ctrl and not this.hotkey_modifiers_down.ctrl)
|
||||
and not (cached_config.buff_UI.shift and not this.hotkey_modifiers_down.shift)
|
||||
and not (cached_config.buff_UI.alt and not this.hotkey_modifiers_down.alt) then
|
||||
|
||||
local buff_UI_key_release = get_release_method:call(hard_keyboard, math.tointeger(cached_config.buff_UI.key));
|
||||
|
||||
if buff_UI_key_release == nil then
|
||||
error_handler.report("keyboard.check_hotkeys", "Failed to Access Data: buff_UI_key_release");
|
||||
|
||||
elseif buff_UI_key_release then
|
||||
config.current_config.buff_UI.enabled = not config.current_config.buff_UI.enabled;
|
||||
end
|
||||
end
|
||||
|
||||
if not (cached_config.stats_UI.ctrl and not this.hotkey_modifiers_down.ctrl)
|
||||
and not (cached_config.stats_UI.shift and not this.hotkey_modifiers_down.shift)
|
||||
and not (cached_config.stats_UI.alt and not this.hotkey_modifiers_down.alt) then
|
||||
|
||||
local stats_UI_key_release = get_release_method:call(hard_keyboard, math.tointeger(cached_config.stats_UI.key));
|
||||
|
||||
if stats_UI_key_release == nil then
|
||||
error_handler.report("keyboard.check_hotkeys", "Failed to Access Data: stats_UI_key_release");
|
||||
|
||||
elseif stats_UI_key_release then
|
||||
config.current_config.stats_UI.enabled = not config.current_config.stats_UI.enabled;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function keyboard.get_hotkey_name(hotkey)
|
||||
function this.get_hotkey_name(hotkey)
|
||||
local hotkey_name = "";
|
||||
|
||||
if hotkey.ctrl then
|
||||
@@ -568,17 +700,32 @@ function keyboard.get_hotkey_name(hotkey)
|
||||
hotkey_name = hotkey_name .. "Alt + ";
|
||||
end
|
||||
|
||||
return hotkey_name .. tostring(keyboard.keys[hotkey.key]);
|
||||
return hotkey_name .. tostring(this.keys[hotkey.key]);
|
||||
end
|
||||
|
||||
function keyboard.init_module()
|
||||
function this.init_dependencies()
|
||||
config = require "MHR_Overlay.Misc.config"
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
player = require("MHR_Overlay.Damage_Meter.player");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
small_monster = require("MHR_Overlay.Monsters.small_monster");
|
||||
large_monster = require("MHR_Overlay.Monsters.large_monster");
|
||||
damage_meter_UI = require("MHR_Overlay.UI.Modules.damage_meter_UI");
|
||||
time = require("MHR_Overlay.Game_Handler.time");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
quest_status = require("MHR_Overlay.Game_Handler.quest_status");
|
||||
end
|
||||
|
||||
return keyboard;
|
||||
function this.init_module()
|
||||
sdk.hook(update_method, function(args)
|
||||
|
||||
local hard_keyboard = sdk.to_managed_object(args[2]);
|
||||
|
||||
this.update(hard_keyboard);
|
||||
|
||||
end, function(retval)
|
||||
return retval;
|
||||
end);
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -1,165 +1,536 @@
|
||||
local quest_status = {};
|
||||
local this = {};
|
||||
|
||||
local singletons;
|
||||
local customization_menu;
|
||||
local player;
|
||||
local players;
|
||||
local small_monster;
|
||||
local large_monster;
|
||||
local damage_meter_UI;
|
||||
local time;
|
||||
local env_creature;
|
||||
local non_players;
|
||||
local error_handler;
|
||||
|
||||
quest_status.index = 0;
|
||||
quest_status.is_online = false;
|
||||
quest_status.is_host = false;
|
||||
quest_status.is_training_area = false;
|
||||
quest_status.is_result_screen = false;
|
||||
quest_status.is_quest_clear = false;
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
local quest_manager_type_definition = sdk.find_type_definition("snow.QuestManager");
|
||||
local on_changed_game_status = quest_manager_type_definition:get_method("onChangedGameStatus");
|
||||
local get_status_method = quest_manager_type_definition:get_method("getStatus");
|
||||
local is_result_demo_play_start_method = quest_manager_type_definition:get_method("isResultDemoPlayStart");
|
||||
this.flow_states = {
|
||||
NONE = 0,
|
||||
IN_LOBBY = 1,
|
||||
IN_TRAINING_AREA = 2,
|
||||
CUTSCENE = 4,
|
||||
LOADING_QUEST = 8,
|
||||
QUEST_START_ANIMATION = 16,
|
||||
PLAYING_QUEST = 32,
|
||||
|
||||
local set_quest_clear_method = quest_manager_type_definition:get_method("setQuestClear");
|
||||
local set_quest_clear_sub_method = quest_manager_type_definition:get_method("setQuestClearSub");
|
||||
local set_quest_clear_sub_hyakurui_method = quest_manager_type_definition:get_method("setQuestClearSubHyakuryu");
|
||||
PLAYER_DEATH_ANIMATION = 64,
|
||||
PLAYER_CART_ANIMATION = 128,
|
||||
FAST_TRAVEL_ANIMATION = 256,
|
||||
WYVERN_RIDING_START_ANIMATION = 512,
|
||||
|
||||
KILLCAM = 1024,
|
||||
QUEST_END_TIMER = 2048,
|
||||
QUEST_END_ANIMATION = 4096,
|
||||
QUEST_END_SCREEN = 8192,
|
||||
REWARD_SCREEN = 16384,
|
||||
SUMMARY_SCREEN = 32768,
|
||||
};
|
||||
|
||||
this.previous_flow_state = this.flow_states.NONE;
|
||||
this.flow_state = this.flow_states.NONE;
|
||||
|
||||
this.index = 0;
|
||||
this.is_online = false;
|
||||
--quest_status.is_quest_host = false;
|
||||
|
||||
this.cart_count = 0;
|
||||
this.max_cart_count = 3;
|
||||
|
||||
local quest_manager_type_def = sdk.find_type_definition("snow.QuestManager");
|
||||
local on_changed_game_status_method = quest_manager_type_def:get_method("onChangedGameStatus");
|
||||
local is_result_demo_play_start_method = quest_manager_type_def:get_method("isResultDemoPlayStart");
|
||||
local set_quest_clear_method = quest_manager_type_def:get_method("setQuestClear");
|
||||
local set_quest_clear_sub_method = quest_manager_type_def:get_method("setQuestClearSub");
|
||||
local set_quest_clear_sub_hyakurui_method = quest_manager_type_def:get_method("setQuestClearSubHyakuryu");
|
||||
local set_quest_fail_method = quest_manager_type_def:get_method("setQuestFail");
|
||||
|
||||
local get_death_num_method = quest_manager_type_def:get_method("getDeathNum");
|
||||
local get_quest_life_method = quest_manager_type_def:get_method("getQuestLife");
|
||||
|
||||
local game_manager_type_def = sdk.find_type_definition("snow.SnowGameManager");
|
||||
local get_status_method = game_manager_type_def:get_method("getStatus");
|
||||
|
||||
local village_area_manager_type_def = sdk.find_type_definition("snow.VillageAreaManager");
|
||||
local check_current_area_training_area_method = village_area_manager_type_def:get_method("checkCurrentArea_TrainingArea");
|
||||
local fast_travel_method = village_area_manager_type_def:get_method("fastTravel");
|
||||
|
||||
local lobby_manager_type_definition = sdk.find_type_definition("snow.LobbyManager");
|
||||
local is_quest_online_method = lobby_manager_type_definition:get_method("IsQuestOnline");
|
||||
local is_quest_host_method = lobby_manager_type_definition:get_method("isQuestHost");
|
||||
|
||||
local is_play_quest_method = quest_manager_type_def:get_method("isPlayQuest");
|
||||
local is_end_wait_method = quest_manager_type_def:get_method("isEndWait");
|
||||
|
||||
local demo_camera_type_def = sdk.find_type_definition("snow.camera.DemoCamera");
|
||||
local demo_request_activation_method = demo_camera_type_def:get_method("RequestActivation");
|
||||
local demo_end_method = demo_camera_type_def:get_method("DemoEnd");
|
||||
|
||||
function quest_status.on_changed_game_status(new_quest_status)
|
||||
if (quest_status.index < 2 and new_quest_status == 2)
|
||||
or new_quest_status < 2 then
|
||||
local gui_quest_end_base_type_def = sdk.find_type_definition("snow.gui.GuiQuestEndBase");
|
||||
local quest_end_set_state_method = gui_quest_end_base_type_def:get_method("setState");
|
||||
|
||||
player.init();
|
||||
local gui_result_reward_type_def = sdk.find_type_definition("snow.gui.GuiResultReward");
|
||||
local gui_result_reward_do_open_method = gui_result_reward_type_def:get_method("doOpen");
|
||||
|
||||
local gui_result_pay_off_type_def = sdk.find_type_definition("snow.gui.GuiResultPayOff");
|
||||
local gui_result_pay_off_do_open_method = gui_result_pay_off_type_def:get_method("doOpen");
|
||||
|
||||
local unique_event_manager_type_def = sdk.find_type_definition("snow.eventcut.UniqueEventManager");
|
||||
local play_event_common_method = unique_event_manager_type_def:get_method("playEventCommon");
|
||||
local event_manager_dispose_method = unique_event_manager_type_def:get_method("dispose");
|
||||
|
||||
local player_manager_type_def = sdk.find_type_definition("snow.player.PlayerManager");
|
||||
local get_player_data_method = player_manager_type_def:get_method("get_PlayerData");
|
||||
|
||||
local player_data_type_def = sdk.find_type_definition("snow.player.PlayerData");
|
||||
local die_count_field = player_data_type_def:get_field("_DieCount");
|
||||
|
||||
local system_array_type_def = sdk.find_type_definition("System.Array");
|
||||
local get_length_method = system_array_type_def:get_method("get_Length");
|
||||
local get_value_method = system_array_type_def:get_method("GetValue(System.Int32)");
|
||||
|
||||
function this.get_flow_state_name(flow_state, new_line)
|
||||
for key, value in pairs(this.flow_states) do
|
||||
if value == flow_state then
|
||||
if new_line then
|
||||
return "\n" .. tostring(key);
|
||||
else
|
||||
return tostring(key);
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function this.set_flow_state(new_flow_state)
|
||||
this.previous_flow_state = this.flow_state;
|
||||
this.flow_state = new_flow_state;
|
||||
|
||||
if this.flow_state >= this.flow_states.KILLCAM then
|
||||
damage_meter_UI.freeze_displayed_players = true;
|
||||
else
|
||||
damage_meter_UI.freeze_displayed_players = false;
|
||||
end
|
||||
|
||||
if this.flow_state == this.flow_states.IN_LOBBY or this.flow_state == this.flow_states.IN_TRAINING_AREA then
|
||||
players.init();
|
||||
non_players.init();
|
||||
small_monster.init_list();
|
||||
large_monster.init_list();
|
||||
env_creature.init_list();
|
||||
|
||||
quest_status.is_quest_clear = false;
|
||||
damage_meter_UI.freeze_displayed_players = false;
|
||||
damage_meter_UI.last_displayed_players = {};
|
||||
|
||||
elseif this.flow_state == this.flow_states.LOADING_QUEST then
|
||||
players.init();
|
||||
non_players.init();
|
||||
small_monster.init_list();
|
||||
large_monster.init_list();
|
||||
env_creature.init_list();
|
||||
|
||||
damage_meter_UI.last_displayed_players = {};
|
||||
|
||||
this.get_max_cart_count();
|
||||
elseif this.flow_state >= this.flow_states.LOADING_QUEST then
|
||||
this.get_max_cart_count();
|
||||
end
|
||||
|
||||
quest_status.index = new_quest_status;
|
||||
players.update_players();
|
||||
end
|
||||
|
||||
function quest_status.on_set_quest_clear()
|
||||
quest_status.is_quest_clear = true;
|
||||
end
|
||||
|
||||
function quest_status.init()
|
||||
function this.update_cart_count()
|
||||
if singletons.quest_manager == nil then
|
||||
error_handler.report("quest_status.update_cart_count", "Failed to Access Data: quest_manager");
|
||||
return;
|
||||
end
|
||||
|
||||
local new_quest_status = get_status_method:call(singletons.quest_manager);
|
||||
if new_quest_status == nil then
|
||||
customization_menu.status = "No quest status";
|
||||
local death_num = get_death_num_method:call(singletons.quest_manager);
|
||||
if death_num == nil then
|
||||
error_handler.report("quest_status.update_cart_count", "Failed to Access Data: death_num");
|
||||
else
|
||||
this.cart_count = death_num;
|
||||
end
|
||||
|
||||
if singletons.player_manager == nil then
|
||||
error_handler.report("quest_status.update_cart_count", "Failed to Access Data: player_manager");
|
||||
return;
|
||||
end
|
||||
|
||||
quest_status.index = new_quest_status;
|
||||
quest_status.update_is_online();
|
||||
quest_status.update_is_training_area();
|
||||
quest_status.update_is_result_screen();
|
||||
local player_data_array = get_player_data_method:call(singletons.player_manager);
|
||||
if player_data_array == nil then
|
||||
error_handler.report("quest_status.update_cart_count", "Failed to Access Data: player_data_array");
|
||||
return;
|
||||
end
|
||||
|
||||
local player_data_array_length = get_length_method:call(player_data_array);
|
||||
if player_data_array_length == nil then
|
||||
error_handler.report("quest_status.update_cart_count", "Failed to Access Data: player_data_array_length");
|
||||
return;
|
||||
end
|
||||
|
||||
for i = 0, player_data_array_length - 1 do
|
||||
local player_data = get_value_method:call(player_data_array, i);
|
||||
if player_data_array_length == nil then
|
||||
error_handler.report("quest_status.update_cart_count", string.format("Failed to Access Data: player_data No. %d", i));
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local die_count = die_count_field:get_data(player_data);
|
||||
if die_count == nil then
|
||||
error_handler.report("quest_status.update_cart_count", string.format("Failed to Access Data: die_count No. %d", i));
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local player = players.list[i];
|
||||
if player ~= nil then
|
||||
player.cart_count = die_count;
|
||||
end
|
||||
|
||||
::continue::
|
||||
end
|
||||
end
|
||||
|
||||
function quest_status.update_is_online()
|
||||
function this.get_max_cart_count()
|
||||
if singletons.quest_manager == nil then
|
||||
error_handler.report("quest_status.get_max_cart_count", "Failed to Access Data: quest_manager");
|
||||
return;
|
||||
end
|
||||
|
||||
local quest_life = get_quest_life_method:call(singletons.quest_manager);
|
||||
if quest_life == nil then
|
||||
error_handler.report("quest_status.get_max_cart_count", "Failed to Access Data: quest_life");
|
||||
end
|
||||
|
||||
this.max_cart_count = quest_life;
|
||||
end
|
||||
|
||||
--type 2 = quest start
|
||||
--type 3 = monster killcam
|
||||
--type 5 = end screen
|
||||
function this.on_demo_request_activation(request_data_base)
|
||||
if request_data_base == nil then
|
||||
error_handler.report("quest_status.on_demo_request_activation", "Missing Parameter: request_data_base");
|
||||
return;
|
||||
end
|
||||
|
||||
if this.index ~= 2 then
|
||||
return;
|
||||
end
|
||||
|
||||
local request_data_type = request_data_base:call("get_Type");
|
||||
if request_data_type == nil then
|
||||
error_handler.report("quest_status.on_demo_request_activation", "Failed to Access Data: request_data_type");
|
||||
return;
|
||||
end
|
||||
|
||||
-- QUEST_START_ANIMATION
|
||||
if request_data_type == 2 then
|
||||
this.set_flow_state(this.flow_states.QUEST_START_ANIMATION);
|
||||
|
||||
-- KILLCAM
|
||||
elseif request_data_type == 3 then
|
||||
this.set_flow_state(this.flow_states.KILLCAM);
|
||||
|
||||
-- QUEST_END_ANIMATION
|
||||
elseif request_data_type == 5 or request_data_type == 6 or request_data_type == 7 then
|
||||
this.set_flow_state(this.flow_states.QUEST_END_ANIMATION);
|
||||
|
||||
-- PLAYER_DEATH_ANIMATION
|
||||
elseif request_data_type == 8 then
|
||||
this.set_flow_state(this.flow_states.PLAYER_DEATH_ANIMATION);
|
||||
|
||||
-- PLAYER_CART_ANIMATION
|
||||
elseif request_data_type == 9 then
|
||||
this.set_flow_state(this.flow_states.PLAYER_CART_ANIMATION);
|
||||
|
||||
-- FAST_TRAVEL_ANIMATION
|
||||
elseif request_data_type == 10 then
|
||||
this.set_flow_state(this.flow_states.FAST_TRAVEL_ANIMATION);
|
||||
|
||||
-- WYVERN_RIDING_START_ANIMATION
|
||||
elseif request_data_type == 11 then
|
||||
this.set_flow_state(this.flow_states.WYVERN_RIDING_START_ANIMATION);
|
||||
end
|
||||
end
|
||||
|
||||
function this.on_demo_end()
|
||||
if this.index == 2 then
|
||||
if this.flow_state == this.flow_states.PLAYER_DEATH_ANIMATION
|
||||
or this.flow_state == this.flow_states.PLAYER_CART_ANIMATION
|
||||
or this.flow_state == this.flow_states.FAST_TRAVEL_ANIMATION
|
||||
or this.flow_state == this.flow_states.WYVERN_RIDING_START_ANIMATION then
|
||||
|
||||
this.set_flow_state(this.previous_flow_state);
|
||||
|
||||
elseif this.flow_state == this.flow_states.QUEST_START_ANIMATION then
|
||||
|
||||
this.set_flow_state(this.flow_states.PLAYING_QUEST);
|
||||
|
||||
elseif this.flow_state == this.flow_states.KILLCAM then
|
||||
|
||||
this.set_flow_state(this.flow_states.QUEST_END_TIMER);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function this.on_set_quest_clear()
|
||||
if this.index == 2 and this.flow_state ~= this.flow_states.KILLCAM then
|
||||
this.set_flow_state(this.flow_states.QUEST_END_TIMER);
|
||||
end
|
||||
end
|
||||
|
||||
function this.on_quest_end_set_state()
|
||||
if this.index == 2 then
|
||||
this.set_flow_state(this.flow_states.QUEST_END_SCREEN);
|
||||
end
|
||||
end
|
||||
|
||||
function this.on_gui_result_reward_do_open()
|
||||
if this.index == 3 then
|
||||
this.set_flow_state(this.flow_states.REWARD_SCREEN);
|
||||
end
|
||||
end
|
||||
|
||||
function this.on_gui_result_pay_off_do_open()
|
||||
if this.index == 3 then
|
||||
this.set_flow_state(this.flow_states.SUMMARY_SCREEN);
|
||||
end
|
||||
end
|
||||
|
||||
function this.on_play_event_common()
|
||||
this.set_flow_state(this.flow_states.CUTSCENE);
|
||||
end
|
||||
|
||||
function this.on_event_manager_dispose()
|
||||
if this.flow_state == this.flow_states.CUTSCENE then
|
||||
this.set_flow_state(this.previous_flow_state);
|
||||
end
|
||||
end
|
||||
|
||||
function this.on_set_quest_fail()
|
||||
if this.flow_state == this.flow_states.PLAYER_DEATH_ANIMATION or
|
||||
this.flow_state == this.flow_states.PLAYER_CART_ANIMATION or
|
||||
this.flow_state == this.flow_states.FAST_TRAVEL_ANIMATION or
|
||||
this.flow_state == this.flow_states.WYVERN_RIDING_START_ANIMATION then
|
||||
|
||||
this.set_flow_state(this.flow_states.QUEST_END_ANIMATION);
|
||||
end
|
||||
end
|
||||
|
||||
function this.on_village_fast_travel(area)
|
||||
if area == nil then
|
||||
error_handler.report("quest_status.on_village_fast_travel", "Missing Parameter: area");
|
||||
return;
|
||||
end
|
||||
|
||||
if area == 7 then
|
||||
this.set_flow_state(this.flow_states.IN_TRAINING_AREA);
|
||||
else
|
||||
this.set_flow_state(this.flow_states.IN_LOBBY);
|
||||
end
|
||||
end
|
||||
|
||||
function this.on_changed_game_status(new_quest_status)
|
||||
if new_quest_status == nil then
|
||||
error_handler.report("quest_status.on_changed_game_status", "Missing Parameter: new_quest_status");
|
||||
return;
|
||||
end
|
||||
|
||||
this.index = new_quest_status;
|
||||
|
||||
if this.index == 0 then
|
||||
this.set_flow_state(this.flow_states.NONE);
|
||||
elseif this.index == 1 then
|
||||
this.set_flow_state(this.flow_states.IN_LOBBY);
|
||||
elseif this.index == 2 then
|
||||
this.set_flow_state(this.flow_states.LOADING_QUEST);
|
||||
elseif this.index == 3 then
|
||||
this.set_flow_state(this.flow_states.SUMMARY_SCREEN);
|
||||
end
|
||||
end
|
||||
|
||||
function this.init()
|
||||
if singletons.quest_manager == nil then
|
||||
error_handler.report("quest_status.init", "Failed to Access Data: quest_manager");
|
||||
return;
|
||||
end
|
||||
|
||||
local new_quest_status = get_status_method:call(singletons.game_manager);
|
||||
if new_quest_status == nil then
|
||||
error_handler.report("quest_status.init", "Failed to Access Data: new_quest_status");
|
||||
return;
|
||||
end
|
||||
|
||||
this.index = new_quest_status;
|
||||
|
||||
if this.index == 0 then
|
||||
this.set_flow_state(this.flow_states.NONE);
|
||||
elseif this.index == 1 then
|
||||
this.set_flow_state(this.flow_states.IN_LOBBY);
|
||||
elseif this.index == 2 then
|
||||
this.set_flow_state(this.flow_states.PLAYING_QUEST);
|
||||
elseif this.index == 3 then
|
||||
this.set_flow_state(this.flow_states.SUMMARY_SCREEN);
|
||||
end
|
||||
|
||||
this.update_is_training_area();
|
||||
end
|
||||
|
||||
function this.update_is_online()
|
||||
if singletons.lobby_manager == nil then
|
||||
error_handler.report("quest_status.update_is_online", "Failed to Access Data: lobby_manager");
|
||||
return;
|
||||
end
|
||||
|
||||
local is_quest_online = is_quest_online_method:call(singletons.lobby_manager);
|
||||
if is_quest_online == nil then
|
||||
error_handler.report("quest_status.update_is_online", "Failed to Access Data: is_quest_online");
|
||||
return;
|
||||
end
|
||||
|
||||
if quest_status.is_online and not is_quest_online then
|
||||
damage_meter_UI.freeze_displayed_players = true;
|
||||
end
|
||||
|
||||
quest_status.is_online = is_quest_online;
|
||||
this.is_online = is_quest_online;
|
||||
end
|
||||
|
||||
function quest_status.update_is_host()
|
||||
--[[function quest_status.update_is_quest_host()
|
||||
if singletons.lobby_manager == nil then
|
||||
error_handler.report("quest_status.update_is_quest_host", "Failed to Access Data: lobby_manager");
|
||||
return;
|
||||
end
|
||||
|
||||
local is_host = is_quest_host_method:call(singletons.lobby_manager, true);
|
||||
if is_host == nil then
|
||||
local is_quest_host = is_quest_host_method:call(singletons.lobby_manager, true);
|
||||
if is_quest_host == nil then
|
||||
error_handler.report("quest_status.update_is_quest_host", "Failed to Access Data: is_quest_host");
|
||||
return;
|
||||
end
|
||||
|
||||
quest_status.is_host = is_host;
|
||||
end
|
||||
quest_status.is_quest_host = is_quest_host;
|
||||
end--]]
|
||||
|
||||
function quest_status.update_is_training_area()
|
||||
function this.update_is_training_area()
|
||||
if singletons.village_area_manager == nil then
|
||||
customization_menu.status = "No village area manager";
|
||||
error_handler.report("quest_status.update_is_training_area", "Failed to Access Data: village_area_manager");
|
||||
return;
|
||||
end
|
||||
|
||||
local _is_training_area = check_current_area_training_area_method:call(singletons.village_area_manager);
|
||||
if _is_training_area == nil then
|
||||
local is_training_area = check_current_area_training_area_method:call(singletons.village_area_manager);
|
||||
if is_training_area == nil then
|
||||
error_handler.report("quest_status.update_is_training_area", "Failed to Access Data: is_training_area");
|
||||
return;
|
||||
end
|
||||
|
||||
if quest_status.is_training_area == true and _is_training_area == false then
|
||||
player.init();
|
||||
if is_training_area then
|
||||
this.set_flow_state(this.flow_states.IN_TRAINING_AREA);
|
||||
end
|
||||
|
||||
quest_status.is_training_area = _is_training_area;
|
||||
end
|
||||
|
||||
function quest_status.update_is_result_screen()
|
||||
if singletons.quest_manager == nil then
|
||||
customization_menu.status = "No quest manager";
|
||||
return;
|
||||
end
|
||||
|
||||
local is_result_demo_play_start = is_result_demo_play_start_method:call(singletons.quest_manager);
|
||||
if is_result_demo_play_start == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
quest_status.is_result_screen = is_result_demo_play_start;
|
||||
end
|
||||
|
||||
function quest_status.init_module()
|
||||
function this.init_dependencies()
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
player = require("MHR_Overlay.Damage_Meter.player");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
small_monster = require("MHR_Overlay.Monsters.small_monster");
|
||||
large_monster = require("MHR_Overlay.Monsters.large_monster");
|
||||
damage_meter_UI = require("MHR_Overlay.UI.Modules.damage_meter_UI");
|
||||
time = require("MHR_Overlay.Game_Handler.time");
|
||||
env_creature = require("MHR_Overlay.Endemic_Life.env_creature");
|
||||
non_players = require("MHR_Overlay.Damage_Meter.non_players");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
quest_status.init();
|
||||
function this.init_module()
|
||||
this.init();
|
||||
|
||||
sdk.hook(on_changed_game_status, function(args)
|
||||
quest_status.on_changed_game_status(sdk.to_int64(args[3]));
|
||||
sdk.hook(on_changed_game_status_method, function(args)
|
||||
this.on_changed_game_status(sdk.to_int64(args[3]));
|
||||
end, function(retval) return retval; end);
|
||||
|
||||
sdk.hook(set_quest_clear_method, function(args)
|
||||
quest_status.on_set_quest_clear();
|
||||
this.on_set_quest_clear();
|
||||
end, function(retval) return retval; end);
|
||||
|
||||
sdk.hook(set_quest_clear_sub_method, function(args)
|
||||
quest_status.on_set_quest_clear();
|
||||
this.on_set_quest_clear();
|
||||
end, function(retval) return retval; end);
|
||||
|
||||
sdk.hook(set_quest_clear_sub_hyakurui_method, function(args)
|
||||
quest_status.on_set_quest_clear();
|
||||
this.on_set_quest_clear();
|
||||
end, function(retval) return retval; end);
|
||||
|
||||
sdk.hook(demo_request_activation_method, function(args)
|
||||
this.on_demo_request_activation(sdk.to_managed_object(args[3]));
|
||||
end, function(retval) return retval; end);
|
||||
|
||||
sdk.hook(demo_end_method, function(args)
|
||||
this.on_demo_end();
|
||||
end, function(retval) return retval; end);
|
||||
|
||||
sdk.hook(set_quest_clear_method, function(args)
|
||||
this.on_set_quest_clear();
|
||||
end, function(retval) return retval; end);
|
||||
|
||||
sdk.hook(quest_end_set_state_method, function(args)
|
||||
this.on_quest_end_set_state();
|
||||
end, function(retval) return retval; end);
|
||||
|
||||
sdk.hook(gui_result_reward_do_open_method, function(args)
|
||||
this.on_gui_result_reward_do_open();
|
||||
end, function(retval) return retval; end);
|
||||
|
||||
sdk.hook(gui_result_pay_off_do_open_method, function(args)
|
||||
this.on_gui_result_pay_off_do_open();
|
||||
end, function(retval) return retval; end);
|
||||
|
||||
sdk.hook(play_event_common_method, function(args)
|
||||
this.on_play_event_common();
|
||||
end, function(retval) return retval; end);
|
||||
|
||||
sdk.hook(event_manager_dispose_method, function(args)
|
||||
this.on_event_manager_dispose();
|
||||
end, function(retval) return retval; end);
|
||||
|
||||
sdk.hook(set_quest_fail_method, function(args)
|
||||
this.on_set_quest_fail();
|
||||
end, function(retval) return retval; end);
|
||||
|
||||
sdk.hook(fast_travel_method, function(args)
|
||||
this.on_village_fast_travel(sdk.to_int64(args[3]));
|
||||
end, function(retval) return retval; end);
|
||||
end
|
||||
|
||||
return quest_status;
|
||||
return this;
|
||||
|
||||
@@ -1,27 +1,64 @@
|
||||
local screen = {};
|
||||
local this = {};
|
||||
|
||||
local config;
|
||||
local singletons;
|
||||
local utils;
|
||||
local time;
|
||||
local error_handler;
|
||||
|
||||
screen.width = 1920;
|
||||
screen.height = 1080;
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function screen.update_window_size()
|
||||
this.width = 1920;
|
||||
this.height = 1080;
|
||||
|
||||
function this.update_window_size()
|
||||
local width;
|
||||
local height;
|
||||
|
||||
if d2d ~= nil then
|
||||
width, height = d2d.surface_size();
|
||||
else
|
||||
width, height = screen.get_game_window_size();
|
||||
end
|
||||
-- if d2d ~= nil and config.current_config.global_settings.renderer.use_d2d_if_available then
|
||||
-- width, height = d2d.surface_size();
|
||||
-- else
|
||||
-- width, height = this.get_game_window_size();
|
||||
-- end
|
||||
|
||||
width, height = this.get_game_window_size();
|
||||
|
||||
if width ~= nil then
|
||||
screen.width = width;
|
||||
this.width = width;
|
||||
end
|
||||
|
||||
if height ~= nil then
|
||||
screen.height = height;
|
||||
this.height = height;
|
||||
end
|
||||
end
|
||||
|
||||
@@ -33,40 +70,38 @@ local size_type = get_size_method:get_return_type();
|
||||
local width_field = size_type:get_field("w");
|
||||
local height_field = size_type:get_field("h");
|
||||
|
||||
function screen.get_game_window_size()
|
||||
function this.get_game_window_size()
|
||||
if scene_view == nil then
|
||||
scene_view = sdk.call_native_func(singletons.scene_manager,
|
||||
sdk.find_type_definition("via.SceneManager")
|
||||
, "get_MainView");
|
||||
scene_view = sdk.call_native_func(singletons.scene_manager, sdk.find_type_definition("via.SceneManager") , "get_MainView");
|
||||
|
||||
if scene_view == nil then
|
||||
--log.error("[MHR_Overlay.lua] No scene view");
|
||||
error_handler.report("screen.get_game_window_size", "Failed to Access Data: scene_view");
|
||||
return;
|
||||
end
|
||||
end
|
||||
|
||||
local size = get_size_method:call(scene_view);
|
||||
if size == nil then
|
||||
--log.error("[MHR_Overlay.lua] No scene view size");
|
||||
error_handler.report("screen.get_game_window_size", "Failed to Access Data: size");
|
||||
return;
|
||||
end
|
||||
|
||||
local screen_width = width_field:get_data(size);
|
||||
if screen_width == nil then
|
||||
--log.error("[MHR_Overlay.lua] No screen width");
|
||||
error_handler.report("screen.get_game_window_size", "Failed to Access Data: screen_width");
|
||||
return;
|
||||
end
|
||||
|
||||
local screen_height = height_field:get_data(size);
|
||||
if screen_height == nil then
|
||||
--log.error("[MHR_Overlay.lua] No screen height");
|
||||
error_handler.report("screen.get_game_window_size", "Failed to Access Data: screen_height");
|
||||
return;
|
||||
end
|
||||
|
||||
return screen_width, screen_height;
|
||||
end
|
||||
|
||||
function screen.calculate_absolute_coordinates(position)
|
||||
function this.calculate_absolute_coordinates(position)
|
||||
local global_position_modifier = config.current_config.global_settings.modifiers.global_position_modifier;
|
||||
|
||||
local _position = {
|
||||
@@ -81,29 +116,35 @@ function screen.calculate_absolute_coordinates(position)
|
||||
|
||||
-- top right
|
||||
if position.anchor == "Top-Right" then
|
||||
local screen_x = screen.width - _position.x;
|
||||
local screen_x = this.width - _position.x;
|
||||
return { x = screen_x, y = _position.y };
|
||||
end
|
||||
|
||||
-- bottom left
|
||||
if position.anchor == "Bottom-Left" then
|
||||
local screen_y = screen.height - _position.y;
|
||||
local screen_y = this.height - _position.y;
|
||||
return { x = _position.x, y = screen_y };
|
||||
end
|
||||
|
||||
-- bottom right
|
||||
if position.anchor == "Bottom-Right" then
|
||||
local screen_x = screen.width - _position.x;
|
||||
local screen_y = screen.height - _position.y;
|
||||
local screen_x = this.width - _position.x;
|
||||
local screen_y = this.height - _position.y;
|
||||
return { x = screen_x, y = screen_y };
|
||||
end
|
||||
|
||||
return { x = _position.x, y = _position.y };
|
||||
end
|
||||
|
||||
function screen.init_module()
|
||||
function this.init_dependencies()
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
time = require("MHR_Overlay.Game_Handler.time");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return screen;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -1,163 +1,227 @@
|
||||
local singletons = {};
|
||||
local this = {};
|
||||
|
||||
singletons.message_manager = nil;
|
||||
singletons.enemy_manager = nil;
|
||||
singletons.lobby_manager = nil;
|
||||
singletons.progress_manager = nil;
|
||||
singletons.quest_manager = nil;
|
||||
singletons.player_manager = nil;
|
||||
singletons.village_area_manager = nil;
|
||||
singletons.gui_manager = nil;
|
||||
singletons.game_keyboard = nil;
|
||||
singletons.scene_manager = nil;
|
||||
local time;
|
||||
local utils;
|
||||
local error_handler;
|
||||
|
||||
function singletons.init()
|
||||
singletons.init_message_manager();
|
||||
singletons.init_enemy_manager();
|
||||
singletons.init_lobby_manager()
|
||||
singletons.init_progress_manager();
|
||||
singletons.init_quest_manager();
|
||||
singletons.init_player_manager();
|
||||
singletons.init_village_area_manager();
|
||||
singletons.init_gui_manager();
|
||||
singletons.init_game_keyboard();
|
||||
singletons.init_scene_manager();
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
this.message_manager = nil;
|
||||
this.enemy_manager = nil;
|
||||
this.lobby_manager = nil;
|
||||
this.progress_manager = nil;
|
||||
this.quest_manager = nil;
|
||||
this.player_manager = nil;
|
||||
this.village_area_manager = nil;
|
||||
this.gui_manager = nil;
|
||||
this.game_keyboard = nil;
|
||||
this.scene_manager = nil;
|
||||
this.game_manager = nil;
|
||||
|
||||
function this.update()
|
||||
this.update_message_manager();
|
||||
this.update_enemy_manager();
|
||||
this.update_lobby_manager()
|
||||
this.update_progress_manager();
|
||||
this.update_quest_manager();
|
||||
this.update_player_manager();
|
||||
this.update_village_area_manager();
|
||||
this.update_gui_manager();
|
||||
this.update_game_keyboard();
|
||||
this.update_scene_manager();
|
||||
this.update_game_manager();
|
||||
this.update_servant_manager();
|
||||
this.update_otomo_manager();
|
||||
this.update_long_sword_shell_manager();
|
||||
this.update_light_bowgun_shell_manager();
|
||||
this.update_horn_shell_manager();
|
||||
end
|
||||
|
||||
function singletons.init_message_manager()
|
||||
if singletons.message_manager ~= nil then
|
||||
return;
|
||||
function this.update_message_manager()
|
||||
this.message_manager = sdk.get_managed_singleton("snow.gui.MessageManager");
|
||||
if this.message_manager == nil then
|
||||
error_handler.report("singletons.update_message_manager", "Failed to Access Data: message_manager");
|
||||
end
|
||||
|
||||
singletons.message_manager = sdk.get_managed_singleton("snow.gui.MessageManager");
|
||||
if singletons.message_manager == nil then
|
||||
--log.error("[MHR Overlay] No message manager");
|
||||
end
|
||||
|
||||
return singletons.message_manager;
|
||||
return this.message_manager;
|
||||
end
|
||||
|
||||
function singletons.init_enemy_manager()
|
||||
if singletons.enemy_manager ~= nil then
|
||||
return;
|
||||
function this.update_enemy_manager()
|
||||
this.enemy_manager = sdk.get_managed_singleton("snow.enemy.EnemyManager");
|
||||
if this.enemy_manager == nil then
|
||||
error_handler.report("singletons.update_enemy_manager", "Failed to Access Data: enemy_manager");
|
||||
end
|
||||
|
||||
singletons.enemy_manager = sdk.get_managed_singleton("snow.enemy.EnemyManager");
|
||||
if singletons.enemy_manager == nil then
|
||||
--log.error("[MHR Overlay] No enemy manager");
|
||||
end
|
||||
|
||||
return singletons.enemy_manager;
|
||||
return this.enemy_manager;
|
||||
end
|
||||
|
||||
function singletons.init_lobby_manager()
|
||||
if singletons.lobby_manager ~= nil then
|
||||
return;
|
||||
end
|
||||
|
||||
singletons.lobby_manager = sdk.get_managed_singleton("snow.LobbyManager");
|
||||
if singletons.lobby_manager == nil then
|
||||
--log.error("[MHR Overlay] No lobby manager");
|
||||
function this.update_lobby_manager()
|
||||
this.lobby_manager = sdk.get_managed_singleton("snow.LobbyManager");
|
||||
if this.lobby_manager == nil then
|
||||
error_handler.report("singletons.update_lobby_manager", "Failed to Access Data: lobby_manager");
|
||||
return false;
|
||||
end
|
||||
|
||||
return singletons.lobby_manager;
|
||||
return this.lobby_manager;
|
||||
end
|
||||
|
||||
function singletons.init_progress_manager()
|
||||
if singletons.progress_manager ~= nil then
|
||||
return;
|
||||
end
|
||||
|
||||
singletons.progress_manager = sdk.get_managed_singleton("snow.progress.ProgressManager");
|
||||
if singletons.progress_manager == nil then
|
||||
--log.error("[MHR Overlay] No progress manager");
|
||||
function this.update_progress_manager()
|
||||
this.progress_manager = sdk.get_managed_singleton("snow.progress.ProgressManager");
|
||||
if this.progress_manager == nil then
|
||||
error_handler.report("singletons.update_progress_manager", "Failed to Access Data: progress_manager");
|
||||
return false;
|
||||
end
|
||||
|
||||
return singletons.progress_manager;
|
||||
return this.progress_manager;
|
||||
end
|
||||
|
||||
function singletons.init_quest_manager()
|
||||
if singletons.quest_manager ~= nil then
|
||||
return;
|
||||
function this.update_quest_manager()
|
||||
this.quest_manager = sdk.get_managed_singleton("snow.QuestManager");
|
||||
if this.quest_manager == nil then
|
||||
error_handler.report("singletons.update_quest_manager", "Failed to Access Data: quest_manager");
|
||||
end
|
||||
|
||||
singletons.quest_manager = sdk.get_managed_singleton("snow.QuestManager");
|
||||
if singletons.quest_manager == nil then
|
||||
--log.error("[MHR Overlay] No quest manager");
|
||||
end
|
||||
|
||||
return singletons.quest_manager;
|
||||
return this.quest_manager;
|
||||
end
|
||||
|
||||
function singletons.init_player_manager()
|
||||
if singletons.player_manager ~= nil then
|
||||
return;
|
||||
function this.update_player_manager()
|
||||
this.player_manager = sdk.get_managed_singleton("snow.player.PlayerManager");
|
||||
if this.player_manager == nil then
|
||||
error_handler.report("singletons.update_player_manager", "Failed to Access Data: player_manager");
|
||||
end
|
||||
|
||||
singletons.player_manager = sdk.get_managed_singleton("snow.player.PlayerManager");
|
||||
if singletons.player_manager == nil then
|
||||
--log.error("[MHR Overlay] No player manager");
|
||||
end
|
||||
|
||||
return singletons.player_manager;
|
||||
return this.player_manager;
|
||||
end
|
||||
|
||||
function singletons.init_village_area_manager()
|
||||
if singletons.village_area_manager ~= nil then
|
||||
return;
|
||||
function this.update_village_area_manager()
|
||||
this.village_area_manager = sdk.get_managed_singleton("snow.VillageAreaManager");
|
||||
if this.village_area_manager == nil then
|
||||
-- error_handler.report("singletons.update_village_area_manager", "Failed to Access Data: village_area_manager");
|
||||
end
|
||||
|
||||
singletons.village_area_manager = sdk.get_managed_singleton("snow.VillageAreaManager");
|
||||
if singletons.village_area_manager == nil then
|
||||
--log.error("[MHR Overlay] No village area manager");
|
||||
end
|
||||
|
||||
return singletons.village_area_manager;
|
||||
return this.village_area_manager;
|
||||
end
|
||||
|
||||
function singletons.init_gui_manager()
|
||||
if singletons.gui_manager ~= nil then
|
||||
return;
|
||||
function this.update_gui_manager()
|
||||
this.gui_manager = sdk.get_managed_singleton("snow.gui.GuiManager");
|
||||
if this.gui_manager == nil then
|
||||
error_handler.report("singletons.update_gui_manager", "Failed to Access Data: gui_manager");
|
||||
end
|
||||
|
||||
singletons.gui_manager = sdk.get_managed_singleton("snow.gui.GuiManager");
|
||||
if singletons.gui_manager == nil then
|
||||
--log.error("[MHR Overlay] No gui manager");
|
||||
end
|
||||
|
||||
return singletons.gui_manager;
|
||||
return this.gui_manager;
|
||||
end
|
||||
|
||||
function singletons.init_game_keyboard()
|
||||
if singletons.game_keyboard ~= nil then
|
||||
return;
|
||||
function this.update_game_keyboard()
|
||||
this.game_keyboard = sdk.get_managed_singleton("snow.GameKeyboard");
|
||||
if this.game_keyboard == nil then
|
||||
error_handler.report("singletons.update_game_keyboard", "Failed to Access Data: game_keyboard");
|
||||
end
|
||||
|
||||
singletons.game_keyboard = sdk.get_managed_singleton("snow.GameKeyboard");
|
||||
if singletons.game_keyboard == nil then
|
||||
--log.error("[MHR Overlay] No game keyboard");
|
||||
end
|
||||
|
||||
return singletons.game_keyboard;
|
||||
return this.game_keyboard;
|
||||
end
|
||||
|
||||
function singletons.init_scene_manager()
|
||||
if singletons.scene_manager ~= nil then
|
||||
return;
|
||||
function this.update_scene_manager()
|
||||
this.scene_manager = sdk.get_native_singleton("via.SceneManager");
|
||||
if this.scene_manager == nil then
|
||||
error_handler.report("singletons.update_scene_manager", "Failed to Access Data: scene_manager");
|
||||
end
|
||||
|
||||
singletons.scene_manager = sdk.get_native_singleton("via.SceneManager");
|
||||
if singletons.scene_manager == nil then
|
||||
--log.error("[MHR Overlay] No enemy manager");
|
||||
return this.scene_manager;
|
||||
end
|
||||
|
||||
function this.update_game_manager()
|
||||
this.game_manager = sdk.get_managed_singleton("snow.SnowGameManager");
|
||||
if this.game_manager == nil then
|
||||
error_handler.report("singletons.update_game_manager", "Failed to Access Data: game_manager");
|
||||
end
|
||||
|
||||
return singletons.scene_manager;
|
||||
return this.game_manager;
|
||||
end
|
||||
|
||||
function singletons.init_module()
|
||||
singletons.init();
|
||||
function this.update_servant_manager()
|
||||
this.servant_manager = sdk.get_managed_singleton("snow.ai.ServantManager");
|
||||
if this.servant_manager == nil then
|
||||
error_handler.report("singletons.update_servant_manager", "Failed to Access Data: servant_manager");
|
||||
end
|
||||
|
||||
return this.servant_manager;
|
||||
end
|
||||
|
||||
return singletons;
|
||||
function this.update_otomo_manager()
|
||||
this.otomo_manager = sdk.get_managed_singleton("snow.otomo.OtomoManager");
|
||||
if this.otomo_manager == nil then
|
||||
error_handler.report("singletons.update_otomo_manager", "Failed to Access Data: otomo_manager");
|
||||
end
|
||||
|
||||
return this.otomo_manager;
|
||||
end
|
||||
|
||||
function this.update_long_sword_shell_manager()
|
||||
this.long_sword_shell_manager = sdk.get_managed_singleton("snow.shell.LongSwordShellManager");
|
||||
if this.long_sword_shell_manager == nil then
|
||||
error_handler.report("singletons.update_long_sword_shell_manager", "Failed to Access Data: long_sword_shell_manager");
|
||||
end
|
||||
|
||||
return this.long_sword_shell_manager;
|
||||
end
|
||||
|
||||
function this.update_light_bowgun_shell_manager()
|
||||
this.light_bowgun_shell_manager = sdk.get_managed_singleton("snow.shell.LightBowgunShellManager");
|
||||
if this.light_bowgun_shell_manager == nil then
|
||||
error_handler.report("singletons.update_light_bowgun_shell_manager", "Failed to Access Data: light_bowgun_shell_manager");
|
||||
end
|
||||
|
||||
return this.light_bowgun_shell_manager;
|
||||
end
|
||||
|
||||
function this.update_horn_shell_manager()
|
||||
this.horn_shell_manager = sdk.get_managed_singleton("snow.shell.HornShellManager");
|
||||
if this.horn_shell_manager == nil then
|
||||
error_handler.report("singletons.update_horn_shell_manager", "Failed to Access Data: horn_shell_manager");
|
||||
end
|
||||
|
||||
return this.horn_shell_manager;
|
||||
end
|
||||
|
||||
|
||||
function this.init_dependencies()
|
||||
time = require("MHR_Overlay.Game_Handler.time");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
this.update();
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -1,96 +1,189 @@
|
||||
local time = {};
|
||||
local this = {};
|
||||
|
||||
local singletons;
|
||||
local customization_menu;
|
||||
local quest_status;
|
||||
local player;
|
||||
local players;
|
||||
local non_players;
|
||||
local config;
|
||||
local small_monster;
|
||||
local utils;
|
||||
local error_handler;
|
||||
local screen;
|
||||
local buffs;
|
||||
local player_info;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
local quest_manager_type_def = sdk.find_type_definition("snow.QuestManager");
|
||||
local get_quest_elapsed_time_min_method = quest_manager_type_def:get_method("getQuestElapsedTimeMin");
|
||||
local get_quest_elapsed_time_sec_method = quest_manager_type_def:get_method("getQuestElapsedTimeSec");
|
||||
|
||||
time.total_elapsed_seconds = 0;
|
||||
time.elapsed_minutes = 0;
|
||||
time.elapsed_seconds = 0;
|
||||
this.total_elapsed_seconds = 0;
|
||||
this.elapsed_minutes = 0;
|
||||
this.elapsed_seconds = 0;
|
||||
|
||||
time.total_elapsed_script_seconds = 0;
|
||||
time.last_elapsed_script_seconds = 0;
|
||||
this.total_elapsed_script_seconds = 0;
|
||||
|
||||
function time.update_script_time()
|
||||
time.total_elapsed_script_seconds = os.clock();
|
||||
this.timer_list = {};
|
||||
this.delay_timer_list = {};
|
||||
|
||||
function this.new_timer(callback, cooldown_seconds, start_offset_seconds)
|
||||
start_offset_seconds = start_offset_seconds or utils.math.random();
|
||||
|
||||
if callback == nil or cooldown_seconds == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
local timer = {};
|
||||
timer.callback = callback;
|
||||
timer.cooldown = cooldown_seconds;
|
||||
|
||||
timer.last_trigger_time = os.clock() + start_offset_seconds;
|
||||
|
||||
this.timer_list[callback] = timer;
|
||||
end
|
||||
|
||||
function time.tick()
|
||||
time.update_script_time();
|
||||
function this.new_delay_timer(callback, delay_seconds)
|
||||
if callback == nil or delay_seconds == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
local delay_timer = {};
|
||||
delay_timer.callback = callback;
|
||||
delay_timer.delay = delay_seconds;
|
||||
|
||||
delay_timer.init_time = os.clock();
|
||||
|
||||
this.delay_timer_list[callback] = delay_timer;
|
||||
|
||||
return delay_timer;
|
||||
end
|
||||
|
||||
function this.remove_delay_timer(delay_timer)
|
||||
if delay_timer == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
this.delay_timer_list[delay_timer.callback] = nil;
|
||||
end
|
||||
|
||||
function this.init_global_timers()
|
||||
local cached_config = config.current_config.global_settings.performance.timer_delays;
|
||||
|
||||
this.timer_list = {};
|
||||
|
||||
this.new_timer(singletons.update, cached_config.update_singletons_delay);
|
||||
this.new_timer(screen.update_window_size, cached_config.update_window_size_delay);
|
||||
this.new_timer(quest_status.update_is_online, cached_config.update_is_online_delay);
|
||||
this.new_timer(this.update_quest_time, cached_config.update_quest_time_delay);
|
||||
this.new_timer(players.update_players, cached_config.update_players_delay);
|
||||
this.new_timer(players.update_myself_position, cached_config.update_myself_position_delay);
|
||||
this.new_timer(buffs.update, cached_config.update_buffs_delay);
|
||||
this.new_timer(player_info.update, cached_config.update_player_info_delay);
|
||||
end
|
||||
|
||||
function this.update_timers()
|
||||
this.update_script_time();
|
||||
|
||||
for callback, timer in pairs(this.timer_list) do
|
||||
if this.total_elapsed_script_seconds - timer.last_trigger_time > timer.cooldown then
|
||||
timer.last_trigger_time = this.total_elapsed_script_seconds;
|
||||
callback();
|
||||
end
|
||||
end
|
||||
|
||||
local remove_list = {};
|
||||
|
||||
for callback, delay_timer in pairs(this.delay_timer_list) do
|
||||
if this.total_elapsed_script_seconds - delay_timer.init_time > delay_timer.delay then
|
||||
callback();
|
||||
table.insert(remove_list, callback);
|
||||
end
|
||||
end
|
||||
|
||||
for i, callback in ipairs(remove_list) do
|
||||
this.delay_timer_list[callback] = nil;
|
||||
end
|
||||
end
|
||||
|
||||
function this.update_script_time()
|
||||
this.total_elapsed_script_seconds = os.clock();
|
||||
end
|
||||
|
||||
function this.update_quest_time()
|
||||
if singletons.quest_manager == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
if quest_status.flow_state == quest_status.flow_states.IN_LOBBY
|
||||
or quest_status.flow_state >= quest_status.flow_states.QUEST_END_TIMER then
|
||||
return;
|
||||
end
|
||||
|
||||
local quest_time_elapsed_minutes = get_quest_elapsed_time_min_method:call(singletons.quest_manager);
|
||||
if quest_time_elapsed_minutes == nil then
|
||||
customization_menu.status = "No quest time elapsed minutes";
|
||||
return;
|
||||
error_handler.report("time.update_quest_time", "Failed to Access Data: quest_time_elapsed_minutes");
|
||||
else
|
||||
this.elapsed_minutes = quest_time_elapsed_minutes;
|
||||
end
|
||||
|
||||
time.elapsed_minutes = quest_time_elapsed_minutes;
|
||||
|
||||
local quest_time_total_elapsed_seconds = get_quest_elapsed_time_sec_method:call(singletons.quest_manager);
|
||||
if quest_time_total_elapsed_seconds == nil then
|
||||
customization_menu.status = "No quest time total elapsed seconds";
|
||||
return;
|
||||
error_handler.report("time.update_quest_time", "Failed to Access Data: quest_time_total_elapsed_seconds");
|
||||
else
|
||||
this.total_elapsed_seconds = quest_time_total_elapsed_seconds;
|
||||
end
|
||||
|
||||
time.total_elapsed_seconds = quest_time_total_elapsed_seconds;
|
||||
time.elapsed_seconds = quest_time_total_elapsed_seconds - quest_time_elapsed_minutes * 60;
|
||||
|
||||
if time.total_elapsed_script_seconds - time.last_elapsed_script_seconds > 1 then
|
||||
time.last_elapsed_script_seconds = time.total_elapsed_script_seconds;
|
||||
time.update_players_dps();
|
||||
end
|
||||
this.elapsed_seconds = quest_time_total_elapsed_seconds - quest_time_elapsed_minutes * 60;
|
||||
end
|
||||
|
||||
function time.update_players_dps()
|
||||
local cached_config = config.current_config.damage_meter_UI.settings;
|
||||
|
||||
if cached_config.freeze_dps_on_quest_clear and quest_status.is_quest_clear then
|
||||
return;
|
||||
end
|
||||
|
||||
local new_total_dps = 0;
|
||||
for _, _player in pairs(player.list) do
|
||||
if _player.join_time == -1 then
|
||||
_player.join_time = time.total_elapsed_script_seconds;
|
||||
end
|
||||
|
||||
if cached_config.dps_mode == "Quest Time" then
|
||||
if time.total_elapsed_seconds > 0 then
|
||||
_player.dps = _player.display.total_damage / time.total_elapsed_seconds;
|
||||
end
|
||||
elseif cached_config.dps_mode == "Join Time" then
|
||||
if time.total_elapsed_script_seconds - _player.join_time > 0 then
|
||||
_player.dps = _player.display.total_damage / (time.total_elapsed_script_seconds - _player.join_time);
|
||||
end
|
||||
elseif cached_config.dps_mode == "First Hit" then
|
||||
if time.total_elapsed_script_seconds - _player.first_hit_time > 0 then
|
||||
_player.dps = _player.display.total_damage / (time.total_elapsed_script_seconds - _player.first_hit_time);
|
||||
end
|
||||
end
|
||||
|
||||
new_total_dps = new_total_dps + _player.dps;
|
||||
end
|
||||
|
||||
player.total.dps = new_total_dps;
|
||||
end
|
||||
|
||||
function time.init_module()
|
||||
player = require("MHR_Overlay.Damage_Meter.player");
|
||||
function this.init_dependencies()
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
small_monster = require("MHR_Overlay.Monsters.small_monster");
|
||||
quest_status = require("MHR_Overlay.Game_Handler.quest_status");
|
||||
non_players = require("MHR_Overlay.Damage_Meter.non_players");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
buffs = require("MHR_Overlay.Buffs.buffs");
|
||||
player_info = require("MHR_Overlay.Misc.player_info");
|
||||
end
|
||||
|
||||
return time;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +0,0 @@
|
||||
local debug = {};
|
||||
|
||||
debug.enabled = false;
|
||||
|
||||
return debug;
|
||||
92
reframework/autorun/MHR_Overlay/Misc/error_handler.lua
Normal file
92
reframework/autorun/MHR_Overlay/Misc/error_handler.lua
Normal file
@@ -0,0 +1,92 @@
|
||||
local this = {};
|
||||
|
||||
local time;
|
||||
local utils;
|
||||
local config;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
this.list = {};
|
||||
this.is_empty = true;
|
||||
|
||||
this.history = {};
|
||||
|
||||
function this.report(error_key, error_message)
|
||||
if error_key == nil or error_key == ""
|
||||
or error_message == nil or error_message == "" then
|
||||
return;
|
||||
end
|
||||
|
||||
local error_time = time.total_elapsed_script_seconds;
|
||||
|
||||
if utils.number.is_equal(error_time, 0) then
|
||||
return;
|
||||
end
|
||||
|
||||
local error = {
|
||||
key = error_key,
|
||||
time = error_time,
|
||||
message = error_message
|
||||
};
|
||||
|
||||
this.list[error_key] = error;
|
||||
this.is_empty = false;
|
||||
|
||||
this.add_to_history(error_key, error);
|
||||
end
|
||||
|
||||
function this.add_to_history(error_key, error)
|
||||
this.clear_history();
|
||||
|
||||
table.insert(this.history, error);
|
||||
end
|
||||
|
||||
function this.clear_history()
|
||||
local history_size = config.current_config.debug.history_size;
|
||||
|
||||
while #this.history >= history_size do
|
||||
table.remove(this.history, 1);
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_dependencies()
|
||||
time = require("MHR_Overlay.Game_Handler.time");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -1,10 +1,89 @@
|
||||
local language = {};
|
||||
local table_helpers;
|
||||
local this = {};
|
||||
|
||||
language.language_folder = "MHR Overlay\\languages\\";
|
||||
local utils;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
this.language_folder = "MHR Overlay\\languages\\";
|
||||
|
||||
-- this.chinese_ranges = {
|
||||
-- 0x0020, 0x00FF, -- Basic Latin + Latin Supplement
|
||||
-- 0x2000, 0x206F, -- General Punctuations
|
||||
-- 0x2E80, 0x2EFF, -- CJK Radicals Supplement
|
||||
-- 0x3000, 0x303F, -- CJK Symbols and Punctuations
|
||||
-- 0x3200, 0x4DBF, -- Enclosed CJK Letters and Months, CJK Compatibility, CJK Unified Ideographs Extension A
|
||||
-- 0x4E00, 0x9FFF, -- CJK Unified Ideograms
|
||||
-- 0xF900, 0xFAFF, -- CJK Compatibility Ideographs
|
||||
-- 0xFE30, 0xFE4F, -- CJK Compatibility Forms
|
||||
-- 0xFF00, 0xFFEF, -- Half-width characters
|
||||
-- 0
|
||||
-- };
|
||||
|
||||
-- this.japanese_glyph_ranges = {
|
||||
-- 0x0020, 0x00FF, -- Basic Latin + Latin Supplement
|
||||
-- 0x2000, 0x206F, -- General Punctuation
|
||||
-- 0x2E80, 0x2EFF, -- CJK Radicals Supplement
|
||||
-- 0x3000, 0x30FF, -- CJK Symbols and Punctuations, Hiragana, Katakana
|
||||
-- 0x31F0, 0x4DBF, -- Katakana Phonetic Extensions, Enclosed CJK Letters and Months, CJK Compatibility, CJK Unified Ideographs Extension A
|
||||
-- 0x4E00, 0x9FFF, -- CJK Unified Ideograms
|
||||
-- 0xF900, 0xFAFF, -- CJK Compatibility Ideographs
|
||||
-- 0xFE30, 0xFE4F, -- CJK Compatibility Forms
|
||||
-- 0xFF00, 0xFFEF, -- Half-width characters
|
||||
-- 0
|
||||
-- };
|
||||
|
||||
-- this.korean_glyph_ranges = {
|
||||
-- 0x0020, 0x00FF, -- Basic Latin + Latin Supplement
|
||||
-- 0x1100, 0x11FF, -- Hangul Jamo
|
||||
-- 0x2000, 0x206F, -- General Punctuation
|
||||
-- 0x2E80, 0x2EFF, -- CJK Radicals Supplement
|
||||
-- 0x3000, 0x303F, -- CJK Symbols and Punctuations
|
||||
-- 0x3130, 0x318F, -- Hangul Compatibility Jamo
|
||||
-- 0x3200, 0x4DBF, -- Enclosed CJK Letters and Months, CJK Compatibility, CJK Unified Ideographs Extension A
|
||||
-- 0x4E00, 0x9FFF, -- CJK Unified Ideograms
|
||||
-- 0xAC00, 0xD7AF, -- Hangul Syllables
|
||||
-- 0xF900, 0xFAFF, -- CJK Compatibility Ideographs
|
||||
-- 0xFE30, 0xFE4F, -- CJK Compatibility Forms
|
||||
-- 0xFF00, 0xFFEF, -- Half-width characters
|
||||
-- 0
|
||||
-- }
|
||||
|
||||
this.current_language = {};
|
||||
this.default_language = {
|
||||
font_name = nil,
|
||||
unicode_glyph_ranges = nil,
|
||||
|
||||
language.default_language = {
|
||||
font_name = "NotoSansKR-Bold.otf",
|
||||
parts = {
|
||||
head = "Head",
|
||||
neck = "Neck",
|
||||
@@ -88,7 +167,9 @@ language.default_language = {
|
||||
chest = "Chest",
|
||||
shell = "Shell",
|
||||
|
||||
thundersacs = "Thundersacs"
|
||||
thundersacs = "Thundersacs",
|
||||
|
||||
amatsu_unknown = "?"
|
||||
},
|
||||
|
||||
ailments = {
|
||||
@@ -96,14 +177,17 @@ language.default_language = {
|
||||
sleep = "Sleep",
|
||||
stun = "Stun",
|
||||
flash = "Flash",
|
||||
poison = "Poison",
|
||||
blast = "Blast",
|
||||
exhaust = "Exhaust",
|
||||
ride = "Wyvern Riding",
|
||||
waterblight = "Waterblight",
|
||||
|
||||
poison = "Poison",
|
||||
deadly_poison = "Deadly Poison",
|
||||
|
||||
fireblight = "Fireblight",
|
||||
iceblight = "Iceblight",
|
||||
waterblight = "Waterblight",
|
||||
thunderblight = "Thunderblight",
|
||||
iceblight = "Iceblight",
|
||||
|
||||
fall_trap = "Fall Trap",
|
||||
shock_trap = "Shock Trap",
|
||||
@@ -112,7 +196,266 @@ language.default_language = {
|
||||
steel_fang = "Steel Fang",
|
||||
quick_sand = "Quick Sand",
|
||||
fall_otomo_trap = "Fall Buddy Trap",
|
||||
shock_otomo_trap = "Shock Buddy Trap"
|
||||
shock_otomo_trap = "Shock Buddy Trap",
|
||||
|
||||
dragonblight = "Dragonblight",
|
||||
blastblight = "Blastblight",
|
||||
hellfireblight = "Hellfireblight",
|
||||
bloodblight = "Bloodblight",
|
||||
frostblight = "Frostblight",
|
||||
|
||||
minor_bubbleblight = "Minor Bubbleblight",
|
||||
major_bubbleblight = "Major Bubbleblight",
|
||||
|
||||
defense_down = "Defense Down",
|
||||
resistance_down = "Resistance Down",
|
||||
|
||||
falling_asleep = "Falling Asleep",
|
||||
tremor = "Tremor",
|
||||
roar = "Roar",
|
||||
webbed = "Webbed",
|
||||
stench = "Stench",
|
||||
leeched = "Leeched",
|
||||
bleeding = "Bleeding",
|
||||
engulfed = "Engulfed",
|
||||
muck = "Muck",
|
||||
frenzy = "Frenzy",
|
||||
frenzy_infection = "Frenzy Infection",
|
||||
frenzy_overcome = "Frenzy Overcome"
|
||||
},
|
||||
|
||||
item_buffs = {
|
||||
demondrug = "Demondrug",
|
||||
mega_demondrug = "Mega Demondrug",
|
||||
armorskin = "Armorskin",
|
||||
mega_armorskin = "Mega Armorskin",
|
||||
might_seed = "Might Seed",
|
||||
adamant_seed = "Adamant Seed",
|
||||
demon_powder = "Demon Powder",
|
||||
hardshell_powder = "Hardshell Powder",
|
||||
immunizer = "Immunizer",
|
||||
dash_juice = "Dash Juice",
|
||||
gourmet_fish = "Gourmet Fish",
|
||||
demon_ammo = "Demon Ammo",
|
||||
armor_ammo = "Armor Ammo",
|
||||
},
|
||||
|
||||
endemic_life = {
|
||||
cutterfly = "Cutterfly",
|
||||
clothfly = "Clothfly",
|
||||
butterflame = "Butterflame",
|
||||
peepersects = "Peepersects",
|
||||
stinkmink = "Stinkmink",
|
||||
ruby_wirebug = "Ruby Wirebug",
|
||||
gold_wirebug = "Gold Wirebug",
|
||||
red_lampsquid = "Red Lampsquid",
|
||||
yellow_lampsquid = "Yellow Lampsquid"
|
||||
},
|
||||
|
||||
melody_effects = {
|
||||
self_improvement = "Self-Improvement",
|
||||
attack_up = "Attack Up",
|
||||
defense_up ="Defense Up",
|
||||
affinity_up = "Affinity Up",
|
||||
elemental_attack_boost = "Elemental Attack Boost",
|
||||
attack_and_defense_up = "Attack and Defense Up",
|
||||
attack_and_affinity_up = "Attack and Affinity Up",
|
||||
knockbacks_negated = "Knockbacks Negated",
|
||||
earplugs_s = "Earplugs (S)",
|
||||
earplugs_l = "Earplugs (L)",
|
||||
tremors_negated = "Tremors Negated",
|
||||
wind_pressure_negated = "Wind Pressure Negated",
|
||||
stun_negated = "Stun Negated",
|
||||
blight_negated = "Blight Negated",
|
||||
divine_protection = "Divine Protection",
|
||||
health_recovery_s = "Health Recovery (S)",
|
||||
health_recovery_l = "Health Recovery (L)",
|
||||
health_recovery_s_antidote = "Health Recovery (S) + Antidote",
|
||||
health_regeneration = "Health Regeneration",
|
||||
stamina_use_reduced = "Stamina Use Reduced",
|
||||
stamina_recovery_up = "Stamina Recovery Up",
|
||||
sharpness_loss_reduced = "Sharpness Loss Reduced",
|
||||
environment_damage_negated = "Environment Damage Negated",
|
||||
sonic_wave = "Sonic Wave",
|
||||
sonic_barrier = "Sonic Barrier",
|
||||
infernal_melody = "Infernal Melody",
|
||||
sharpness_regeneration = "Sharpness Regeneration",
|
||||
sharpness_extension = "Sharpness Extension",
|
||||
},
|
||||
|
||||
dango_skills = {
|
||||
dango_adrenaline = "Dango Adrenaline",
|
||||
dango_booster = "Dango Booster",
|
||||
dango_bulker = "Dango Bulker",
|
||||
dango_connector = "Dango Connector",
|
||||
dango_defender = "Dango Defender",
|
||||
dango_flyer = "Dango Flyer",
|
||||
dango_glutton = "Dango Glutton",
|
||||
dango_hunter = "Dango Hunter",
|
||||
dango_insurance = "Dango Insurance",
|
||||
dango_insurance_defense_up = "Dango Insurance Defense Up",
|
||||
super_recovery_dango = "Super Recovery Dango"
|
||||
},
|
||||
|
||||
rampage_skills = {
|
||||
chameleos_soul = "Chameleos Soul",
|
||||
kushala_daora_soul = "Kushala Daora Soul"
|
||||
},
|
||||
|
||||
skills = {
|
||||
adrenaline_rush = "Adrenaline Rush",
|
||||
affinity_sliding = "Affinity Sliding",
|
||||
agitator = "Agitator",
|
||||
berserk = "Berserk",
|
||||
bladescale_hone = "Bladescale Hone",
|
||||
blood_awakening = "Blood Awakening",
|
||||
bloodlust = "Bloodlust",
|
||||
burst = "Burst",
|
||||
coalescence = "Coalescence",
|
||||
counterstrike = "Counterstrike",
|
||||
dereliction = "Dereliction",
|
||||
dragon_conversion_elemental_attack_up = "Dragon Conversion: Elem. Atk Up",
|
||||
dragon_conversion_elemental_res_up = "Dragon Conversion: Elem. Res Up",
|
||||
dragonheart = "Dragonheart",
|
||||
embolden = "Embolden",
|
||||
frenzied_bloodlust = "Frenzied Bloodlust",
|
||||
furious = "Furious",
|
||||
grinder_s = "Grinder (S)",
|
||||
heaven_sent = "Heaven-Sent",
|
||||
hellfire_cloak = "Hellfire Cloak",
|
||||
heroics = "Heroics",
|
||||
inspiration = "Inspiration",
|
||||
intrepid_heart = "Intrepid Heart",
|
||||
latent_power = "Latent Power",
|
||||
maximum_might = "Maximum Might",
|
||||
offensive_guard = "Offensive Guard",
|
||||
partbreaker = "Partbreaker",
|
||||
peak_performance = "Peak Performance",
|
||||
powder_mantle_red = "Powder Mantle (Red)",
|
||||
powder_mantle_blue = "Powder Mantle (Blue)",
|
||||
protective_polish = "Protective Polish",
|
||||
resentment = "Resentment",
|
||||
resuscitate = "Resuscitate",
|
||||
spiribirds_call = "Spiribird's Call",
|
||||
status_trigger = "Status Trigger",
|
||||
strife = "Strife",
|
||||
wall_runner = "Wall Runner",
|
||||
wind_mantle = "Wind Mantle"
|
||||
},
|
||||
|
||||
weapons = {
|
||||
great_sword = "Great Sword",
|
||||
long_sword = "Long Sword",
|
||||
sword_and_shield = "Sword & Shield",
|
||||
dual_blades = "Dual Blades",
|
||||
lance = "Lance",
|
||||
gunlance = "Gunlance",
|
||||
hammer = "Hammer",
|
||||
hunting_horn = "Hunting Horn",
|
||||
switch_axe = "Switch Axe",
|
||||
charge_blade = "Charge Blade",
|
||||
insect_glaive = "Insect Glaive",
|
||||
light_bowgun = "Light Bowgun",
|
||||
heavy_bowgun = "Heavy Bowgun",
|
||||
bow = "Bow"
|
||||
},
|
||||
|
||||
weapon_skills = {
|
||||
-- Great Sword
|
||||
great_sword = {
|
||||
power_sheathe = "Power Sheathe"
|
||||
},
|
||||
-- Long Sword
|
||||
long_sword = {
|
||||
harvest_moon = "Harvest Moon",
|
||||
iai_slash = "Iai Slash",
|
||||
soaring_kick = "Soaring Kick",
|
||||
spirit_gauge = "Spirit Gauge",
|
||||
spirit_gauge_autofill = "Spirit Gauge Autofill", -- Soaring Kick, Iai Slash
|
||||
},
|
||||
-- Sword & Shield
|
||||
sword_and_shield = {
|
||||
destroyer_oil = "Destroyer Oil"
|
||||
},
|
||||
-- Dual Blades
|
||||
dual_blades = {
|
||||
archdemon_mode = "Archdemon Mode",
|
||||
ironshine_silk = "Ironshine Silk"
|
||||
},
|
||||
-- Lance
|
||||
lance = {
|
||||
anchor_rage = "Anchor Rage",
|
||||
spiral_thrust = "Spiral Thrust",
|
||||
twin_wine = "Twin Wine"
|
||||
},
|
||||
-- Gunlance
|
||||
gunlance = {
|
||||
erupting_cannon = "Erupting Cannon",
|
||||
ground_splitter = "Ground Splitter"
|
||||
},
|
||||
-- Hammer
|
||||
hammer = {
|
||||
impact_burst = "Impact Burst"
|
||||
},
|
||||
-- Hunting Horn
|
||||
hunting_horn = {
|
||||
bead_of_resonance = "Bead of Resonance",
|
||||
silkbind_shockwave = "Silkbind Shockwave",
|
||||
sonic_bloom = "Sonic Bloom"
|
||||
},
|
||||
-- Switch Axe
|
||||
switch_axe = {
|
||||
amped_state = "Amped State",
|
||||
axe_heavy_slam = "Axe: Heavy Slam",
|
||||
switch_charger = "Switch Charger"
|
||||
},
|
||||
-- Charge Blade
|
||||
charge_blade = {
|
||||
element_boost = "Element Boost",
|
||||
sword_boost_mode = "Sword Boost Mode"
|
||||
},
|
||||
-- Insect Glaive
|
||||
insect_glaive = {
|
||||
red_extract = "Red Extract",
|
||||
white_extract = "White Extract",
|
||||
orange_extract = "Orange Extract",
|
||||
all_extracts_mix = "All Extracts Mix"
|
||||
},
|
||||
-- Light Bowgun
|
||||
light_bowgun = {
|
||||
fanning_maneuver = "Fanning Maneuver",
|
||||
wyvernblast_reload = "Wyvernblast Reload"
|
||||
},
|
||||
-- Heavy Bowgun
|
||||
heavy_bowgun = {
|
||||
counter_charger = "Counter Charger",
|
||||
overheat = "Overheat",
|
||||
rising_moon = "Rising Moon",
|
||||
setting_sun = "Setting Sun",
|
||||
wyvernsnipe_reload = "Wyvernsnipe Reload"
|
||||
},
|
||||
-- Bow
|
||||
bow = {
|
||||
arc_shot_affinity = "Arc Shot: Affinity",
|
||||
arc_shot_brace = "Arc Shot: Brace",
|
||||
bolt_boost = "Bolt Boost",
|
||||
herculean_draw = "Herculean Draw"
|
||||
}
|
||||
},
|
||||
|
||||
otomo_moves = {
|
||||
go_fight_win = "Go, Fight, Win",
|
||||
power_drum = "Power Drum",
|
||||
rousing_roar = "Rousing Roar",
|
||||
vase_of_vitality = "Vase of Vitality",
|
||||
},
|
||||
|
||||
misc_buffs = {
|
||||
attack_up = "Attack Up",
|
||||
defense_up = "Defense Up",
|
||||
stamina_use_down = "Stamina Use Down",
|
||||
immunity = "Immunity",
|
||||
natural_healing_up = "Natural Healing Up"
|
||||
},
|
||||
|
||||
UI = {
|
||||
@@ -127,7 +470,33 @@ language.default_language = {
|
||||
buildup = "Buildup:",
|
||||
total_buildup = "Total Buildup",
|
||||
part_break = "Break",
|
||||
part_sever = "Sever"
|
||||
part_sever = "Sever",
|
||||
part_anomaly_core = "Anomaly Core",
|
||||
|
||||
otomo = "Buddy",
|
||||
servant = "Follower",
|
||||
|
||||
lv = ""
|
||||
},
|
||||
|
||||
stats = {
|
||||
attack = "Attack",
|
||||
defense = "Defense",
|
||||
affinity = "Affinity",
|
||||
|
||||
fire_resistance = "Fire Res";
|
||||
water_resistance = "Water Res";
|
||||
thunder_resistance = "Thunder Res";
|
||||
ice_resistance = "Ice Res";
|
||||
dragon_resistance = "Dragon Res";
|
||||
|
||||
stamina = "Stamina",
|
||||
|
||||
fire = "Fire",
|
||||
water = "Water",
|
||||
thunder = "Thunder",
|
||||
ice = "Ice",
|
||||
dragon = "Dragon",
|
||||
},
|
||||
|
||||
customization_menu = {
|
||||
@@ -147,10 +516,19 @@ language.default_language = {
|
||||
large_monster_highlighted_UI = "Large Monster Highlighted UI",
|
||||
|
||||
language = "Language",
|
||||
module_visibility_on_different_screens = "Module Visibility on Different Screens",
|
||||
during_quest = "During Quest",
|
||||
quest_result_screen = "Quest Result Screen",
|
||||
training_area = "Training Area",
|
||||
module_visibility_based_on_game_state = "Module Visibility based on Game State",
|
||||
in_lobby = "In Lobby",
|
||||
in_training_area = "In Training Area",
|
||||
cutscene = "Cutscene",
|
||||
loading_quest = "Loading Quest",
|
||||
quest_start_animation = "Quest Start Animation",
|
||||
playing_quest = "Playing Quest",
|
||||
killcam = "Killcam",
|
||||
quest_end_timer = "Quest End Timer",
|
||||
quest_end_animation = "Quest End Animation",
|
||||
quest_end_screen = "Quest End Screen",
|
||||
reward_screen = "Reward Screen",
|
||||
summary_screen = "Summary Screen",
|
||||
|
||||
performance = "Performance",
|
||||
|
||||
@@ -163,6 +541,9 @@ language.default_language = {
|
||||
bold = "Bold",
|
||||
italic = "Italic",
|
||||
|
||||
renderer = "Renderer",
|
||||
use_d2d_if_available = "Use Direct2D if available",
|
||||
|
||||
enabled = "Enabled",
|
||||
settings = "Settings",
|
||||
dynamic_positioning = "Dynamic Positioning",
|
||||
@@ -220,7 +601,7 @@ language.default_language = {
|
||||
|
||||
dynamically_positioned = "Dynamically Positioned",
|
||||
statically_positioned = "Statically Positioned",
|
||||
highlighted = "Highlighted (targeted)",
|
||||
highlighted_targeted = "Highlighted (targeted)",
|
||||
|
||||
include = "Include",
|
||||
monster_name = "Monster Name",
|
||||
@@ -230,6 +611,7 @@ language.default_language = {
|
||||
rage = "Rage",
|
||||
body_parts = "Body Parts",
|
||||
hide_undamaged_parts = "Hide Undamaged Parts",
|
||||
render_inactive_anomaly_cores = "Render Inactive Anomaly Cores",
|
||||
part_name = "Part Name",
|
||||
flinch_count = "Flinch Count",
|
||||
break_count = "Break Count",
|
||||
@@ -279,28 +661,36 @@ language.default_language = {
|
||||
total_damage = "Total Damage",
|
||||
|
||||
my_damage_bar_location = "My Damage Bar Location",
|
||||
total_damage_location = "Total Damage Bar Location",
|
||||
first = "First",
|
||||
last = "Last",
|
||||
|
||||
small_monsters = "Small Monsters",
|
||||
large_monsters = "Large Monsters",
|
||||
|
||||
player_damage = "Player Damage",
|
||||
bomb_damage = "Bomb Damage",
|
||||
kunai_damage = "Kunai Damage",
|
||||
installation_damage = "Installation Damage",
|
||||
otomo_damage = "Buddy Damage",
|
||||
monster_damage = "Monster Damage",
|
||||
poison_damage = "Poison Damage",
|
||||
blast_damage = "Blast Damage",
|
||||
players = "Players",
|
||||
bombs = "Bombs",
|
||||
kunai = "Kunai",
|
||||
installations = "Installations",
|
||||
otomos = "Buddies",
|
||||
monsters = "Monsters",
|
||||
wyvern_riding = "Wyvern Riding",
|
||||
poison = "Poison",
|
||||
blast = "Blast",
|
||||
endemic_life = "Endemic Life",
|
||||
anomaly_cores = "Anomaly Cores",
|
||||
other = "Other",
|
||||
|
||||
damage = "Damage",
|
||||
|
||||
other_players = "Other Players",
|
||||
hunter_rank = "Hunter Rank",
|
||||
word_player = "Word \"Player\"";
|
||||
player_id = "Player ID",
|
||||
player_name = "Player Name",
|
||||
id = "ID",
|
||||
name = "Name",
|
||||
|
||||
show_my_otomos_separately = "Show My Buddies separately",
|
||||
show_other_player_otomos_separately = "Show Other Player Buddies separately",
|
||||
show_servant_otomos_separately = "Show Follower Buddies separately",
|
||||
|
||||
dps_mode = "DPS Mode",
|
||||
dps = "DPS",
|
||||
@@ -360,6 +750,8 @@ language.default_language = {
|
||||
break_health_percentage = "Break Health Percentage",
|
||||
loss_health = "Sever Health",
|
||||
loss_health_percentage = "Sever Health Percentage",
|
||||
anomaly_health = "Anomaly Core Health",
|
||||
anomaly_health_percentage = "Anomaly Core Health Percentage",
|
||||
|
||||
monster_id = "Monster ID",
|
||||
|
||||
@@ -369,32 +761,40 @@ language.default_language = {
|
||||
|
||||
master_rank = "Master Rank",
|
||||
|
||||
other_damage = "Other Damage",
|
||||
wyvern_riding_damage = "Wyvern Riding Damage",
|
||||
endemic_life_damage = "Endemic Life Damage",
|
||||
|
||||
hide_myself = "Hide Myself",
|
||||
hide_other_players = "Hide Other Players",
|
||||
hide_servants = "Hide Followers",
|
||||
hide_total_damage = "Hide Total Damage",
|
||||
|
||||
player_name_size_limit = "Player Name Size Limit",
|
||||
|
||||
cart_count = "Cart Count",
|
||||
cart_count_label = "Cart Count Label",
|
||||
total_cart_count_label = "Total Cart Count Label",
|
||||
|
||||
prioritize_large_monsters = "Large Monsters on High Priority",
|
||||
max_monster_updates_per_tick = "Max Monster Updates per Tick",
|
||||
|
||||
freeze_dps_on_quest_clear = "Freeze DPS when Quest is cleared",
|
||||
freeze_dps_on_quest_end = "Freeze DPS on Quest End",
|
||||
|
||||
health_break_sever_anomaly_filter = "Health + Break + Sever + Anomaly Core",
|
||||
health_break_sever_filter = "Health + Break + Sever",
|
||||
health_break_anomaly_filter = "Health + Break + Anomaly Core",
|
||||
health_sever_anomaly_filter = "Health + Sever + Anomaly Core",
|
||||
break_sever_anomaly_filter = "Break + Sever + Anomaly Core",
|
||||
|
||||
health_break_severe_filter = "Health + Break + Severe",
|
||||
health_break_filter = "Health + Break",
|
||||
health_severe_filter = "Health + Severe",
|
||||
health_sever_filter = "Health + Sever",
|
||||
health_anomaly_filter = "Health + Anomaly Core",
|
||||
|
||||
break_sever_filter = "Break + Sever",
|
||||
break_anomaly_filter = "Break + Anomaly Core",
|
||||
sever_anomaly_filter = "Sever + Anomaly Core",
|
||||
|
||||
health_filter = "Health",
|
||||
break_severe_filter = "Break + Severe",
|
||||
break_filter = "Break",
|
||||
severe_filter = "Severe",
|
||||
sever_filter = "Sever",
|
||||
anomaly_filter = "Anomaly Core",
|
||||
|
||||
outline = "Outline",
|
||||
thickness = "Thickness",
|
||||
@@ -412,16 +812,105 @@ language.default_language = {
|
||||
lowest_health_percentage = "Lowest Health Percentage",
|
||||
highest_health_percentage = "Highest Health Percentage",
|
||||
|
||||
reframework_outdated = "Installed REFramework version is outdated. Please, update. Otherwise, MHR Overlay won't work correctly."
|
||||
}
|
||||
reframework_outdated = "Installed REFramework version is outdated. Please, update. Otherwise, MHR Overlay won't work correctly.",
|
||||
|
||||
servants = "Followers",
|
||||
my_otomos = "My Buddies",
|
||||
other_player_otomos = "Other Player Buddies",
|
||||
servant_otomos = "Servant Buddies",
|
||||
level = "Level",
|
||||
|
||||
name_label = "Name Label",
|
||||
myself = "Myself",
|
||||
total = "Total",
|
||||
|
||||
level_label = "Level Label",
|
||||
|
||||
config = "Config",
|
||||
rename = "Rename",
|
||||
duplicate = "Duplicate",
|
||||
delete = "Delete",
|
||||
new = "New",
|
||||
reset = "Reset",
|
||||
|
||||
highlighted = "Highlighted",
|
||||
|
||||
buff_UI = "Buff UI",
|
||||
timer = "Timer",
|
||||
duration = "Duration",
|
||||
hide_bar_for_infinite_buffs = "Hide Bar for infinite Buffs",
|
||||
hide_timer_for_infinite_buffs = "Hide Timer for infinite Buffs",
|
||||
|
||||
current_value = "Current Value",
|
||||
max_value = "Max Value",
|
||||
|
||||
filter_mode = "Filter Mode",
|
||||
current_state = "Current State",
|
||||
default_state = "Default State",
|
||||
|
||||
fill_direction = "Fill Direction",
|
||||
left_to_right = "Left to Right",
|
||||
right_to_left = "Right to Left",
|
||||
top_to_bottom = "Top to Bottom",
|
||||
bottom_to_top = "Bottom to Top",
|
||||
|
||||
right_alignment_shift = "Right Alignment Shift",
|
||||
|
||||
debug = "Debug",
|
||||
current_time = "Current Time",
|
||||
everything_seems_to_be_ok = "Everything seems to be OK!",
|
||||
history = "History",
|
||||
history_size = "History Size",
|
||||
|
||||
value = "Value",
|
||||
|
||||
stats_UI = "Stats UI",
|
||||
health_label = "Health Label",
|
||||
stamina_label = "Stamina Label",
|
||||
attack_label = "Attack Label",
|
||||
defense_label = "Defense Label",
|
||||
affinity_label = "Affinity Label",
|
||||
fire_resistance_label = "Fire Resistance Label",
|
||||
water_resistance_label = "Water Resistance Label",
|
||||
thunder_resistance_label = "Thunder Resistance Label",
|
||||
ice_resistance_label = "Ice Resistance Label",
|
||||
dragon_resistance_label = "Dragon Resistance Label",
|
||||
element_label = "Element Label",
|
||||
element_2_label = "Element 2 Label",
|
||||
|
||||
abnormal_statuses = "Abnormal Statuses",
|
||||
item_buffs = "Item Buffs",
|
||||
endemic_life_buffs = "Endemic Life Buffs",
|
||||
melody_effects = "Melody Effects",
|
||||
dango_skills = "Dango Skills",
|
||||
rampage_skills = "Rampage Skills",
|
||||
skills = "Skills",
|
||||
weapon_skills = "Weapon Skills",
|
||||
otomo_moves = "Buddy Moves",
|
||||
misc_buffs = "Misc Buffs",
|
||||
|
||||
timer_delays = "Timer Delays",
|
||||
update_singletons_delay = "Update Singletons (seconds)",
|
||||
update_window_size_delay = "Update Window Size (seconds)",
|
||||
update_quest_time_delay = "Update Quest Time (seconds)",
|
||||
update_is_online_delay = "Update Is Online (seconds)",
|
||||
update_players_delay = "Update Players (seconds)",
|
||||
update_myself_position_delay = "Update Myself Position (seconds)",
|
||||
update_player_info_delay = "Update Player Info (seconds)",
|
||||
update_buffs_delay = "Update Buffs (seconds)",
|
||||
|
||||
infinite_buffs_location = "Infinite Buffs Location",
|
||||
|
||||
effect_level = "Effect Level",
|
||||
|
||||
head_tracking = "Head Tracking"
|
||||
},
|
||||
};
|
||||
|
||||
language.current_language = {};
|
||||
this.language_names = { "default" };
|
||||
this.languages = { this.default_language };
|
||||
|
||||
language.language_names = { "default" };
|
||||
language.languages = { language.default_language };
|
||||
|
||||
function language.load()
|
||||
function this.load()
|
||||
local language_files = fs.glob([[MHR Overlay\\languages\\.*json]]);
|
||||
|
||||
if language_files == nil then
|
||||
@@ -429,48 +918,64 @@ function language.load()
|
||||
end
|
||||
|
||||
for i, language_file_name in ipairs(language_files) do
|
||||
local language_name = language_file_name:gsub(language.language_folder, ""):gsub(".json"
|
||||
,
|
||||
"");
|
||||
local language_name = language_file_name:gsub(this.language_folder, ""):gsub(".json","");
|
||||
|
||||
local loaded_language = json.load_file(language_file_name);
|
||||
if loaded_language ~= nil then
|
||||
log.info("[MHR Overlay] " .. language_name .. ".json loaded successfully");
|
||||
table.insert(language.language_names, language_name);
|
||||
log.info(string.format("[MHR Overlay] %s.json Loaded Successfully", language_file_name));
|
||||
|
||||
local merged_language = table_helpers.merge(language.default_language, loaded_language);
|
||||
table.insert(language.languages, merged_language);
|
||||
table.insert(this.language_names, language_name);
|
||||
|
||||
language.save(language_file_name, merged_language);
|
||||
local merged_language = utils.table.merge(this.default_language, loaded_language);
|
||||
table.insert(this.languages, merged_language);
|
||||
|
||||
this.save(language_file_name, merged_language);
|
||||
else
|
||||
log.error("[MHR Overlay] Failed to load " .. language_name .. ".json");
|
||||
error_handler.report("language.load", string.format("Failed to load %s.json", language_file_name));
|
||||
log.error(string.format("[MHR Overlay] Failed to Load %s.json", language_file_name));
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function language.save(file_name, language_table)
|
||||
function this.save(file_name, language_table)
|
||||
local success = json.dump_file(file_name, language_table);
|
||||
if success then
|
||||
log.info("[MHR Overlay] en-us.json saved successfully");
|
||||
log.info(string.format("[MHR Overlay] %s Saved Successfully", file_name));
|
||||
else
|
||||
log.error("[MHR Overlay] Failed to save en-us.json");
|
||||
error_handler.report("language.save", string.format("[MHR Overlay] Failed to Save %s", file_name));
|
||||
log.error(string.format("[MHR Overlay] Failed to Save %s", file_name));
|
||||
end
|
||||
end
|
||||
|
||||
function language.save_default()
|
||||
language.save(language.language_folder .. "en-us.json", language.default_language)
|
||||
function this.save_default()
|
||||
this.save(this.language_folder .. "en-us.json", this.default_language);
|
||||
end
|
||||
|
||||
function language.update(index)
|
||||
language.current_language = table_helpers.deep_copy(language.languages[index]);
|
||||
function this.update(index)
|
||||
this.current_language = this.languages[index];
|
||||
end
|
||||
|
||||
function language.init_module()
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
language.save_default();
|
||||
language.load();
|
||||
language.current_language = table_helpers.deep_copy(language.default_language);
|
||||
function this.init_dependencies()
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return language;
|
||||
function this.init_module()
|
||||
this.load();
|
||||
this.current_language = this.default_language;
|
||||
|
||||
this.default_language.font_name = "NotoSans-Bold.otf";
|
||||
this.default_language.unicode_glyph_ranges = {
|
||||
0x0020, 0x00FF, -- Basic Latin + Latin Supplement
|
||||
0x0100, 0x024F, -- Latin Extended-A, Latin Extended-B,
|
||||
0x0400, 0x052F, -- Cyrillic, Cyrillic Supplementary
|
||||
0x1E00, 0x1EFF, -- Latin Extended Additional
|
||||
0x2000, 0x206F, -- General Punctuation
|
||||
0xFF00, 0xFFEF, -- Halfwidth and Fullwidth Forms
|
||||
0
|
||||
};
|
||||
|
||||
this.save_default();
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -1,11 +1,44 @@
|
||||
local part_names = {};
|
||||
local this = {};
|
||||
|
||||
local language;
|
||||
local table_helpers;
|
||||
local error_handler;
|
||||
|
||||
part_names.list = {};
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function part_names.init()
|
||||
part_names.list = {
|
||||
this.list = {};
|
||||
|
||||
function this.init()
|
||||
this.list = {
|
||||
[98] = -- Great Izuchi 98
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
@@ -511,7 +544,7 @@ function part_names.init()
|
||||
language.current_language.parts.right_foreleg,
|
||||
language.current_language.parts.hind_legs,
|
||||
language.current_language.parts.wings,
|
||||
language.current_language.parts.tail,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[19] = -- Daimyo Hermitaur 19
|
||||
{
|
||||
@@ -694,6 +727,8 @@ function part_names.init()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
[1398] = -- Seething Bazelgeuse
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
@@ -734,12 +769,184 @@ function part_names.init()
|
||||
language.current_language.parts.left_hind_leg,
|
||||
language.current_language.parts.right_cutwing,
|
||||
language.current_language.parts.right_hind_leg
|
||||
},
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
--SUNBREAK TITLE UPDATE 2
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
[392] = -- Flaming Espinas
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.torso,
|
||||
language.current_language.parts.wings,
|
||||
language.current_language.parts.legs,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[594] = -- Violet Mizutsune
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.left_foreleg,
|
||||
language.current_language.parts.right_foreleg,
|
||||
language.current_language.parts.left_hind_leg,
|
||||
language.current_language.parts.right_hind_leg,
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.tail,
|
||||
language.current_language.parts.dorsal_fin
|
||||
},
|
||||
[2073] = -- Risen Chameleos
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.abdomen,
|
||||
language.current_language.parts.left_foreleg,
|
||||
language.current_language.parts.right_foreleg,
|
||||
language.current_language.parts.left_hind_leg,
|
||||
language.current_language.parts.right_hind_leg,
|
||||
language.current_language.parts.tail,
|
||||
language.current_language.parts.wings
|
||||
},
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
--SUNBREAK TITLE UPDATE 3
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
[1351] = -- Chaotic Gore Magala 1351
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.torso,
|
||||
language.current_language.parts.wings,
|
||||
language.current_language.parts.right_wingclaw,
|
||||
language.current_language.parts.forelegs,
|
||||
language.current_language.parts.hind_legs,
|
||||
language.current_language.parts.tail,
|
||||
language.current_language.parts.antenna,
|
||||
language.current_language.parts.left_wingclaw
|
||||
},
|
||||
|
||||
[2072] = -- Risen Kushala Daora 2072
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.back,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.wings,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
|
||||
[2075] = -- Risen Teostra 2075
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.forelegs,
|
||||
language.current_language.parts.hind_legs,
|
||||
language.current_language.parts.wings,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
--SUNBREAK TITLE UPDATE 4
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
[124] = -- Velkhana 124
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.forelegs,
|
||||
language.current_language.parts.hind_legs,
|
||||
language.current_language.parts.wings,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
|
||||
[2134] = -- Risen Crimson Glow Valstrax 2134
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.left_wing,
|
||||
language.current_language.parts.right_wing,
|
||||
language.current_language.parts.left_foreleg,
|
||||
language.current_language.parts.right_foreleg,
|
||||
language.current_language.parts.tail,
|
||||
language.current_language.parts.hind_legs,
|
||||
language.current_language.parts.chest
|
||||
},
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
--SUNBREAK TITLE UPDATE 5
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
[2120] = -- Risen Shagaru Magala 2120
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.torso,
|
||||
language.current_language.parts.wings,
|
||||
language.current_language.parts.wingclaws,
|
||||
language.current_language.parts.forelegs,
|
||||
language.current_language.parts.hind_legs,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
|
||||
[58] = -- Amatsu 58
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.left_arm,
|
||||
language.current_language.parts.right_arm,
|
||||
language.current_language.parts.abdomen,
|
||||
language.current_language.parts.tail,
|
||||
language.current_language.parts.back,
|
||||
language.current_language.parts.amatsu_unknown,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg
|
||||
},
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
--SUNBREAK BONUS UPDATE
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
[1412] = -- Primordial Malzeno 1412
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.torso,
|
||||
language.current_language.parts.left_foreleg,
|
||||
language.current_language.parts.right_foreleg,
|
||||
language.current_language.parts.hind_legs,
|
||||
language.current_language.parts.wings,
|
||||
language.current_language.parts.tail,
|
||||
}
|
||||
};
|
||||
end
|
||||
|
||||
function part_names.get_part_name(monster_id, part_id)
|
||||
local monster_parts = part_names.list[monster_id];
|
||||
function this.get_part_name(monster_id, part_id)
|
||||
local monster_parts = this.list[monster_id];
|
||||
if monster_parts == nil then
|
||||
return "?";
|
||||
end
|
||||
@@ -748,11 +955,13 @@ function part_names.get_part_name(monster_id, part_id)
|
||||
return part_name;
|
||||
end
|
||||
|
||||
function part_names.init_module()
|
||||
function this.init_dependencies()
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
|
||||
part_names.init();
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return part_names;
|
||||
function this.init_module()
|
||||
this.init();
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
350
reframework/autorun/MHR_Overlay/Misc/player_info.lua
Normal file
350
reframework/autorun/MHR_Overlay/Misc/player_info.lua
Normal file
@@ -0,0 +1,350 @@
|
||||
local this = {};
|
||||
|
||||
local drawing;
|
||||
local customization_menu;
|
||||
local singletons;
|
||||
local config;
|
||||
local utils;
|
||||
local error_handler;
|
||||
local quest_status;
|
||||
local time;
|
||||
local dango_skills;
|
||||
local skills;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
this.list = {
|
||||
health = 0;
|
||||
max_health = 0;
|
||||
|
||||
attack = 0;
|
||||
defense = 0;
|
||||
affinity = 0;
|
||||
|
||||
stamina = 0;
|
||||
max_stamina = -1;
|
||||
|
||||
element_type = 0;
|
||||
element_attack = 0;
|
||||
|
||||
element_type_2 = 0;
|
||||
element_attack_2 = 0;
|
||||
|
||||
fire_resistance = 0;
|
||||
water_resistance = 0;
|
||||
thunder_resistance = 0;
|
||||
ice_resistance = 0;
|
||||
dragon_resistance = 0;
|
||||
};
|
||||
|
||||
local should_health_update = true;
|
||||
|
||||
local player_manager_type_def = sdk.find_type_definition("snow.player.PlayerManager");
|
||||
local get_player_method = player_manager_type_def:get_method("getPlayer");
|
||||
local find_master_player_method = player_manager_type_def:get_method("findMasterPlayer");
|
||||
|
||||
local player_base_type_def = find_master_player_method:get_return_type();
|
||||
local get_player_data_method = player_base_type_def:get_method("get_PlayerData");
|
||||
|
||||
local player_data_type_def = get_player_data_method:get_return_type();
|
||||
|
||||
local get_vital_method = player_data_type_def:get_method("get_vital");
|
||||
local attack_field = player_data_type_def:get_field("_Attack");
|
||||
local defence_field = player_data_type_def:get_field("_Defence");
|
||||
local critical_rate_field = player_data_type_def:get_field("_CriticalRate");
|
||||
|
||||
local vital_max_field = player_data_type_def:get_field("_vitalMax");
|
||||
|
||||
local stamina_field = player_data_type_def:get_field("_stamina");
|
||||
local stamina_max_field = player_data_type_def:get_field("_staminaMax");
|
||||
|
||||
local element_type_field = player_data_type_def:get_field("_ElementType");
|
||||
local element_attack_field = player_data_type_def:get_field("_ElementAttack");
|
||||
|
||||
local element_type_2nd_field = player_data_type_def:get_field("_ElementType2nd");
|
||||
local element_attack_2nd_field = player_data_type_def:get_field("_ElementAttack2nd");
|
||||
|
||||
local resistance_element_field = player_data_type_def:get_field("_ResistanceElement");
|
||||
|
||||
local system_array_type_def = sdk.find_type_definition("System.Array");
|
||||
local get_length_method = system_array_type_def:get_method("get_Length");
|
||||
local get_value_method = system_array_type_def:get_method("GetValue(System.Int32)");
|
||||
|
||||
local player_quest_base_type_def = sdk.find_type_definition("snow.player.PlayerQuestBase");
|
||||
local player_quest_base_update_method = player_quest_base_type_def:get_method("update");
|
||||
local is_master_player_method = player_quest_base_type_def:get_method("isMasterPlayer");
|
||||
|
||||
local player_base_type_def = sdk.find_type_definition("snow.player.PlayerBase");
|
||||
-- Heroics
|
||||
local is_predicament_power_up_method = player_base_type_def:get_method("isPredicamentPowerUp");
|
||||
-- Dango Adrenaline
|
||||
local is_kitchen_skill_predicament_powerup_method = player_base_type_def:get_method("isKitchenSkillPredicamentPowerUp");
|
||||
|
||||
local single_type_def = sdk.find_type_definition("System.Single");
|
||||
local mvalue_field = single_type_def:get_field("mValue");
|
||||
|
||||
local master_player_ref = nil;
|
||||
local master_player_data_ref = nil;
|
||||
|
||||
function this.update()
|
||||
if quest_status.flow_state == quest_status.flow_states.NONE then
|
||||
return;
|
||||
end
|
||||
|
||||
local cached_config = config.current_config;
|
||||
|
||||
if not cached_config.buff_UI.enabled
|
||||
and not cached_config.stats_UI.enabled then
|
||||
return;
|
||||
end
|
||||
|
||||
if singletons.player_manager == nil then
|
||||
error_handler.report("player_info.update", "Failed to Access Data: player_manager");
|
||||
return;
|
||||
end
|
||||
|
||||
local master_player = find_master_player_method:call(singletons.player_manager);
|
||||
if master_player == nil then
|
||||
error_handler.report("player_info.update", "Failed to Access Data: master_player");
|
||||
return;
|
||||
end
|
||||
|
||||
local master_player_data = get_player_data_method:call(master_player);
|
||||
if master_player_data == nil then
|
||||
error_handler.report("player_info.update", "Failed to Access Data: master_player_data");
|
||||
end
|
||||
|
||||
master_player_ref = master_player;
|
||||
master_player_data_ref = master_player_data;
|
||||
should_health_update = true;
|
||||
|
||||
this.update_generic("max_health", master_player_data, vital_max_field);
|
||||
|
||||
this.update_generic("stamina", master_player_data, stamina_field);
|
||||
this.list.stamina = math.floor(this.list.stamina / 30);
|
||||
|
||||
this.update_generic("max_stamina", master_player_data, stamina_max_field);
|
||||
this.list.max_stamina = math.floor(this.list.max_stamina / 30);
|
||||
|
||||
if not cached_config.stats_UI.enabled then
|
||||
return;
|
||||
end
|
||||
|
||||
this.update_generic("attack", master_player_data, attack_field);
|
||||
this.update_generic("affinity", master_player_data, critical_rate_field);
|
||||
this.update_generic("defense", master_player_data, defence_field);
|
||||
|
||||
this.update_generic("element_type", master_player_data, element_type_field);
|
||||
this.update_generic("element_attack", master_player_data, element_attack_field);
|
||||
|
||||
this.update_generic("element_type_2", master_player_data, element_type_2nd_field);
|
||||
this.update_generic("element_attack_2", master_player_data, element_attack_2nd_field);
|
||||
|
||||
this.update_resistances(master_player_data);
|
||||
end
|
||||
|
||||
function this.update_generic(key, player_data, field)
|
||||
local value = field:get_data(player_data);
|
||||
if value == nil then
|
||||
error_handler.report("player_info.update_generic", string.format("Failed to Access Data: %s_value", key));
|
||||
return;
|
||||
end
|
||||
|
||||
this.list[key] = math.floor(value);
|
||||
end
|
||||
|
||||
function this.update_resistances(player_data)
|
||||
local resistance_element_array = resistance_element_field:get_data(player_data);
|
||||
if resistance_element_array == nil then
|
||||
error_handler.report("player_info.update_resistances", "Failed to Access Data: resistance_element_array");
|
||||
return;
|
||||
end
|
||||
|
||||
-- Fire Resistance
|
||||
local fire_resistance_single_valtype = get_value_method:call(resistance_element_array, 0);
|
||||
if fire_resistance_single_valtype == nil then
|
||||
error_handler.report("player_info.update_resistances", "Failed to Access Data: fire_resistance_single_valtype");
|
||||
return;
|
||||
end
|
||||
|
||||
local fire_resistance = mvalue_field:get_data(fire_resistance_single_valtype);
|
||||
if fire_resistance ~= nil then
|
||||
this.list.fire_resistance = math.floor(fire_resistance);
|
||||
else
|
||||
error_handler.report("player_info.update_resistances", "Failed to Access Data: fire_resistance");
|
||||
return;
|
||||
end
|
||||
|
||||
-- Water Resistance
|
||||
local water_resistance_single_valtype = get_value_method:call(resistance_element_array, 1);
|
||||
if water_resistance_single_valtype == nil then
|
||||
error_handler.report("player_info.update_resistances", "Failed to Access Data: water_resistance_single_valtype");
|
||||
return;
|
||||
end
|
||||
|
||||
local water_resistance = mvalue_field:get_data(water_resistance_single_valtype);
|
||||
if water_resistance ~= nil then
|
||||
this.list.water_resistance = math.floor(water_resistance);
|
||||
else
|
||||
error_handler.report("player_info.update_resistances", "Failed to Access Data: water_resistance");
|
||||
return;
|
||||
end
|
||||
|
||||
-- Thunder Resistance
|
||||
local thunder_resistance_single_valtype = get_value_method:call(resistance_element_array, 2);
|
||||
if thunder_resistance_single_valtype == nil then
|
||||
error_handler.report("player_info.update_resistances", "Failed to Access Data: thunder_resistance_single_valtype");
|
||||
return;
|
||||
end
|
||||
|
||||
local thunder_resistance = mvalue_field:get_data(thunder_resistance_single_valtype);
|
||||
if thunder_resistance ~= nil then
|
||||
this.list.thunder_resistance = math.floor(thunder_resistance);
|
||||
else
|
||||
error_handler.report("player_info.update_resistances", "Failed to Access Data: thunder_resistance");
|
||||
return;
|
||||
end
|
||||
|
||||
-- Ice Resistance
|
||||
local ice_resistance_single_valtype = get_value_method:call(resistance_element_array, 3);
|
||||
if ice_resistance_single_valtype == nil then
|
||||
error_handler.report("player_info.update_resistances", "Failed to Access Data: ice_resistance_single_valtype");
|
||||
return;
|
||||
end
|
||||
|
||||
local ice_resistance = mvalue_field:get_data(ice_resistance_single_valtype);
|
||||
if ice_resistance ~= nil then
|
||||
this.list.ice_resistance = math.floor(ice_resistance);
|
||||
else
|
||||
error_handler.report("player_info.update_resistances", "Failed to Access Data: ice_resistance");
|
||||
return;
|
||||
end
|
||||
|
||||
-- Dragon Resistance
|
||||
local dragon_resistance_single_valtype = get_value_method:call(resistance_element_array, 4);
|
||||
if dragon_resistance_single_valtype == nil then
|
||||
error_handler.report("player_info.update_resistances", "Failed to Access Data: dragon_resistance_single_valtype");
|
||||
return;
|
||||
end
|
||||
|
||||
local dragon_resistance = mvalue_field:get_data(dragon_resistance_single_valtype);
|
||||
if dragon_resistance ~= nil then
|
||||
this.list.dragon_resistance = math.floor(dragon_resistance);
|
||||
else
|
||||
error_handler.report("player_info.update_resistances", "Failed to Access Data: dragon_resistance");
|
||||
return;
|
||||
end
|
||||
end
|
||||
|
||||
function this.on_pre_player_update(quest_player_base)
|
||||
if not should_health_update then
|
||||
return;
|
||||
end
|
||||
|
||||
if quest_player_base ~= master_player_ref then
|
||||
return;
|
||||
end
|
||||
|
||||
this.update_health(quest_player_base);
|
||||
this.update_heroics(quest_player_base);
|
||||
this.update_dango_adrenaline(quest_player_base);
|
||||
|
||||
should_health_update = false;
|
||||
end
|
||||
|
||||
function this.update_health(quest_player_base)
|
||||
local vital = get_vital_method:call(master_player_data_ref);
|
||||
if vital == nil then
|
||||
error_handler.report("player_info.update_health", "Failed to Access Data: vital");
|
||||
return;
|
||||
end
|
||||
|
||||
this.list.health = vital;
|
||||
end
|
||||
|
||||
function this.update_heroics(quest_player_base)
|
||||
if not config.current_config.buff_UI.filter.skills.heroics then
|
||||
return;
|
||||
end
|
||||
|
||||
local is_predicament_power_up = is_predicament_power_up_method:call(master_player_ref);
|
||||
if is_predicament_power_up == nil then
|
||||
error_handler.report("player_info.update_heroics", "Failed to Access Data: is_predicament_power_up");
|
||||
return;
|
||||
end
|
||||
|
||||
skills.is_heroics_active = is_predicament_power_up;
|
||||
end
|
||||
|
||||
function this.update_dango_adrenaline(quest_player_base)
|
||||
if not config.current_config.buff_UI.filter.dango_skills.dango_adrenaline then
|
||||
return;
|
||||
end
|
||||
|
||||
local is_kitchen_skill_predicament_powerup = is_kitchen_skill_predicament_powerup_method:call(master_player_ref);
|
||||
if is_kitchen_skill_predicament_powerup == nil then
|
||||
error_handler.report("player_info.update_dango_adrenaline", "Failed to Access Data: is_kitchen_skill_predicament_powerup");
|
||||
return;
|
||||
end
|
||||
|
||||
dango_skills.is_dango_adrenaline_active = is_kitchen_skill_predicament_powerup;
|
||||
end
|
||||
|
||||
function this.init_dependencies()
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
--health_UI_entity = require("MHR_Overlay.UI.UI_Entities.health_UI_entity");
|
||||
--stamina_UI_entity = require("MHR_Overlay.UI.UI_Entities.stamina_UI_entity");
|
||||
--screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
--ailments = require("MHR_Overlay.Monsters.ailments");
|
||||
--ailment_UI_entity = require("MHR_Overlay.UI.UI_Entities.ailment_UI_entity");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
quest_status = require("MHR_Overlay.Game_Handler.quest_status");
|
||||
time = require("MHR_Overlay.Game_Handler.time");
|
||||
dango_skills = require("MHR_Overlay.Buffs.dango_skills");
|
||||
skills = require("MHR_Overlay.Buffs.skills");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
sdk.hook(player_quest_base_update_method, function(args)
|
||||
local quest_player_base = sdk.to_managed_object(args[2]);
|
||||
this.on_pre_player_update(quest_player_base);
|
||||
end, function(retval)
|
||||
return retval;
|
||||
end);
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -1,86 +0,0 @@
|
||||
local table_helpers = {};
|
||||
|
||||
function table_helpers.deep_copy(original, copies)
|
||||
copies = copies or {};
|
||||
local original_type = type(original);
|
||||
local copy;
|
||||
if original_type == "table" then
|
||||
if copies[original] then
|
||||
copy = copies[original];
|
||||
else
|
||||
copy = {};
|
||||
copies[original] = copy;
|
||||
for original_key, original_value in next, original, nil do
|
||||
copy[table_helpers.deep_copy(original_key, copies)] = table_helpers.deep_copy(original_value
|
||||
,
|
||||
copies);
|
||||
end
|
||||
setmetatable(copy,
|
||||
table_helpers.deep_copy(getmetatable(original)
|
||||
, copies));
|
||||
end
|
||||
else -- number, string, boolean, etc
|
||||
copy = original;
|
||||
end
|
||||
return copy;
|
||||
end
|
||||
|
||||
function table_helpers.find_index(table, value, nullable)
|
||||
for i = 1, #table do
|
||||
if table[i] == value then
|
||||
return i;
|
||||
end
|
||||
end
|
||||
|
||||
if not nullable then
|
||||
return 1;
|
||||
end
|
||||
|
||||
return nil;
|
||||
end
|
||||
|
||||
function table_helpers.merge(...)
|
||||
local tables_to_merge = { ... };
|
||||
assert(#tables_to_merge > 1, "There should be at least two tables to merge them");
|
||||
|
||||
for key, table in ipairs(tables_to_merge) do
|
||||
assert(type(table) == "table", string.format("Expected a table as function parameter %d", key));
|
||||
end
|
||||
|
||||
local result = table_helpers.deep_copy(tables_to_merge[1]);
|
||||
|
||||
for i = 2, #tables_to_merge do
|
||||
local from = tables_to_merge[i];
|
||||
for key, value in pairs(from) do
|
||||
if type(value) == "table" then
|
||||
result[key] = result[key] or {};
|
||||
assert(type(result[key]) == "table", string.format("Expected a table: '%s'", key));
|
||||
result[key] = table_helpers.merge(result[key], value);
|
||||
else
|
||||
result[key] = value;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return result;
|
||||
end
|
||||
|
||||
function table_helpers.tostring(table)
|
||||
if type(table) == "table" then
|
||||
local s = "{ \n";
|
||||
for k, v in pairs(table) do
|
||||
if type(k) ~= "number" then
|
||||
k = "\"" .. k .. "\"";
|
||||
end
|
||||
s = s .. "\t[" .. k .. "] = " .. table_helpers.tostring(v) .. ",\n";
|
||||
end
|
||||
return s .. "} \n";
|
||||
else
|
||||
return tostring(table);
|
||||
end
|
||||
end
|
||||
|
||||
function table_helpers.init_module()
|
||||
end
|
||||
|
||||
return table_helpers;
|
||||
@@ -1,115 +0,0 @@
|
||||
local unicode_helpers = {};
|
||||
|
||||
-- https://github.com/blitmap/lua-utf8-simple/blob/master/utf8_simple.lua
|
||||
|
||||
-- ABNF from RFC 3629
|
||||
--
|
||||
-- UTF8-octets = *( UTF8-char )
|
||||
-- UTF8-char = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4
|
||||
-- UTF8-1 = %x00-7F
|
||||
-- UTF8-2 = %xC2-DF UTF8-tail
|
||||
-- UTF8-3 = %xE0 %xA0-BF UTF8-tail / %xE1-EC 2( UTF8-tail ) /
|
||||
-- %xED %x80-9F UTF8-tail / %xEE-EF 2( UTF8-tail )
|
||||
-- UTF8-4 = %xF0 %x90-BF 2( UTF8-tail ) / %xF1-F3 3( UTF8-tail ) /
|
||||
-- %xF4 %x80-8F 2( UTF8-tail )
|
||||
-- UTF8-tail = %x80-BF
|
||||
|
||||
-- 0xxxxxxx | 007F (127)
|
||||
-- 110xxxxx 10xxxxxx | 07FF (2047)
|
||||
-- 1110xxxx 10xxxxxx 10xxxxxx | FFFF (65535)
|
||||
-- 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx | 10FFFF (1114111)
|
||||
|
||||
local pattern = "[%z\1-\127\194-\244][\128-\191]*";
|
||||
|
||||
-- helper function
|
||||
function unicode_helpers.relative_position(position, length)
|
||||
if position < 0 then
|
||||
position = length + position + 1;
|
||||
end
|
||||
return position;
|
||||
end
|
||||
|
||||
-- THE MEAT
|
||||
|
||||
-- maps f over s's utf8 characters f can accept args: (visual_index, utf8_character, byte_index)
|
||||
function unicode_helpers.map(s, f, no_subs)
|
||||
local i = 0;
|
||||
|
||||
if no_subs then
|
||||
for b, e in s:gmatch("()" .. pattern .. "()") do
|
||||
i = i + 1;
|
||||
local c = e - b;
|
||||
f(i, c, b)
|
||||
end
|
||||
else
|
||||
for b, c in s:gmatch("()(" .. pattern .. ")") do
|
||||
i = i + 1;
|
||||
f(i, c, b);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- THE REST
|
||||
|
||||
-- generator for the above -- to iterate over all utf8 chars
|
||||
function unicode_helpers.chars(s, no_subs)
|
||||
return coroutine.wrap(function()
|
||||
return unicode_helpers.map(s, coroutine.yield, no_subs);
|
||||
end);
|
||||
end
|
||||
|
||||
-- like string.sub() but i, j are utf8 strings
|
||||
-- a utf8-safe string.sub()
|
||||
function unicode_helpers.sub(str, i, j)
|
||||
if coroutine == nil then
|
||||
return str;
|
||||
end
|
||||
|
||||
local l = utf8.len(str);
|
||||
|
||||
i = unicode_helpers.relative_position(i, l);
|
||||
j = j and unicode_helpers.relative_position(j, l) or l;
|
||||
|
||||
if i < 1 then
|
||||
i = 1;
|
||||
end
|
||||
|
||||
if j > l then
|
||||
j = l;
|
||||
end
|
||||
|
||||
if i > j then
|
||||
return "";
|
||||
end
|
||||
|
||||
local diff = j - i;
|
||||
local iterator = unicode_helpers.chars(str, true);
|
||||
|
||||
-- advance up to i
|
||||
for _ = 1, i - 1 do
|
||||
iterator();
|
||||
end
|
||||
|
||||
local c, b = select(2, iterator());
|
||||
|
||||
-- i and j are the same, single-charaacter sub
|
||||
if diff == 0 then
|
||||
return string.sub(str, b, b + c - 1);
|
||||
end
|
||||
|
||||
i = b;
|
||||
|
||||
-- advance up to j
|
||||
for _ = 1, diff - 1 do
|
||||
iterator();
|
||||
end
|
||||
|
||||
c, b = select(2, iterator());
|
||||
|
||||
return string.sub(str, i, b + c - 1);
|
||||
end
|
||||
|
||||
function unicode_helpers.init_module()
|
||||
end
|
||||
|
||||
return unicode_helpers;
|
||||
495
reframework/autorun/MHR_Overlay/Misc/utils.lua
Normal file
495
reframework/autorun/MHR_Overlay/Misc/utils.lua
Normal file
@@ -0,0 +1,495 @@
|
||||
local this = {};
|
||||
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
local table_tostring;
|
||||
local deep_copy;
|
||||
local merge;
|
||||
local is_empty;
|
||||
local unicode_map;
|
||||
local unicode_relative_position;
|
||||
local unicode_chars;
|
||||
local epsilon = 0.000001;
|
||||
|
||||
this.table = {};
|
||||
this.type = {};
|
||||
this.number = {};
|
||||
this.string = {};
|
||||
this.vec2 = {};
|
||||
this.vec3 = {};
|
||||
this.vec4 = {};
|
||||
this.math = {};
|
||||
this.unicode = {};
|
||||
this.sdk = {};
|
||||
|
||||
this.constants = {};
|
||||
this.constants.uninitialized_int = -420;
|
||||
this.constants.uninitialized_string = "Uninitialized";
|
||||
this.constants.epsilon = epsilon;
|
||||
|
||||
function this.table.tostring(table_)
|
||||
if type(table_) == "number" or type(table_) == "boolean" or type(table_) == "string" then
|
||||
return tostring(table_);
|
||||
end
|
||||
|
||||
if is_empty(table_) then
|
||||
return "{}";
|
||||
end
|
||||
|
||||
local cache = {};
|
||||
local stack = {};
|
||||
local output = {};
|
||||
local depth = 1;
|
||||
local output_str = "{\n";
|
||||
|
||||
while true do
|
||||
local size = 0;
|
||||
for k,v in pairs(table_) do
|
||||
size = size + 1;
|
||||
end
|
||||
|
||||
local cur_index = 1;
|
||||
for k,v in pairs(table_) do
|
||||
if cache[table_] == nil or cur_index >= cache[table_] then
|
||||
|
||||
if string.find(output_str, "}", output_str:len()) then
|
||||
output_str = output_str .. ",\n";
|
||||
elseif not string.find(output_str, "\n", output_str:len()) then
|
||||
output_str = output_str .. "\n";
|
||||
end
|
||||
|
||||
-- This is necessary for working with HUGE tables otherwise we run out of memory using concat on huge strings
|
||||
table.insert(output,output_str);
|
||||
output_str = "";
|
||||
|
||||
local key;
|
||||
if type(k) == "number" or type(k) == "boolean" then
|
||||
key = "[" .. tostring(k) .. "]";
|
||||
else
|
||||
key = "['" .. tostring(k) .. "']";
|
||||
end
|
||||
|
||||
if type(v) == "number" or type(v) == "boolean" then
|
||||
output_str = output_str .. string.rep('\t', depth) .. key .. " = "..tostring(v);
|
||||
elseif type(v) == "table" then
|
||||
output_str = output_str .. string.rep('\t', depth) .. key .. " = {\n";
|
||||
table.insert(stack, table_);
|
||||
table.insert(stack, v);
|
||||
cache[table_] = cur_index + 1;
|
||||
break;
|
||||
else
|
||||
output_str = output_str .. string.rep('\t', depth) .. key .. " = '" .. tostring(v) .. "'";
|
||||
end
|
||||
|
||||
if cur_index == size then
|
||||
output_str = output_str .. "\n" .. string.rep('\t', depth - 1) .. "}";
|
||||
else
|
||||
output_str = output_str .. ",";
|
||||
end
|
||||
else
|
||||
-- close the table
|
||||
if cur_index == size then
|
||||
output_str = output_str .. "\n" .. string.rep('\t', depth - 1) .. "}";
|
||||
end
|
||||
end
|
||||
|
||||
cur_index = cur_index + 1;
|
||||
end
|
||||
|
||||
if size == 0 then
|
||||
output_str = output_str .. "\n" .. string.rep('\t', depth - 1) .. "}";
|
||||
end
|
||||
|
||||
if #stack > 0 then
|
||||
table_ = stack[#stack];
|
||||
stack[#stack] = nil;
|
||||
depth = cache[table_] == nil and depth + 1 or depth - 1;
|
||||
else
|
||||
break;
|
||||
end
|
||||
end
|
||||
|
||||
-- This is necessary for working with HUGE tables otherwise we run out of memory using concat on huge strings
|
||||
table.insert(output, output_str);
|
||||
output_str = table.concat(output);
|
||||
|
||||
return output_str;
|
||||
end
|
||||
|
||||
function this.table.tostringln(table_)
|
||||
return "\n" .. table_tostring(table_);
|
||||
end
|
||||
|
||||
function this.table.is_empty(table_)
|
||||
return next(table_) == nil;
|
||||
end
|
||||
|
||||
function this.table.deep_copy(original, copies)
|
||||
copies = copies or {};
|
||||
local original_type = type(original);
|
||||
local copy;
|
||||
if original_type == "table" then
|
||||
if copies[original] then
|
||||
copy = copies[original];
|
||||
else
|
||||
copy = {};
|
||||
copies[original] = copy;
|
||||
for original_key, original_value in next, original, nil do
|
||||
copy[deep_copy(original_key, copies)] = deep_copy(original_value,copies);
|
||||
end
|
||||
setmetatable(copy, deep_copy(getmetatable(original), copies));
|
||||
end
|
||||
else -- number, string, boolean, etc
|
||||
copy = original;
|
||||
end
|
||||
return copy;
|
||||
end
|
||||
|
||||
function this.table.find_index(table_, value, nullable)
|
||||
for i = 1, #table_ do
|
||||
if table_[i] == value then
|
||||
return i;
|
||||
end
|
||||
end
|
||||
|
||||
if not nullable then
|
||||
return 1;
|
||||
end
|
||||
|
||||
return nil;
|
||||
end
|
||||
|
||||
function this.table.merge(...)
|
||||
local tables_to_merge = { ... };
|
||||
assert(#tables_to_merge > 1, "There should be at least two tables to merge them");
|
||||
|
||||
for key, table_ in ipairs(tables_to_merge) do
|
||||
assert(type(table_) == "table", string.format("Expected a table as function parameter %d", key));
|
||||
end
|
||||
|
||||
local result = deep_copy(tables_to_merge[1]);
|
||||
|
||||
for i = 2, #tables_to_merge do
|
||||
local from = tables_to_merge[i];
|
||||
for key, value in pairs(from) do
|
||||
if type(value) == "table" then
|
||||
result[key] = result[key] or {};
|
||||
assert(type(result[key]) == "table", string.format("Expected a table: '%s'", key));
|
||||
result[key] = merge(result[key], value);
|
||||
else
|
||||
result[key] = value;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return result;
|
||||
end
|
||||
|
||||
function this.type.is_boolean(value)
|
||||
return value == true or value == false;
|
||||
end
|
||||
|
||||
function this.type.is_REField(value)
|
||||
return value.get_return_type == nil;
|
||||
end
|
||||
|
||||
function this.type.is_REMethodDefinition(value)
|
||||
return value.get_return_type ~= nil;
|
||||
end
|
||||
|
||||
function this.number.is_NaN(value)
|
||||
return tostring(value) == tostring(0/0);
|
||||
end
|
||||
|
||||
function this.number.round(value)
|
||||
return math.floor(value + 0.5);
|
||||
end
|
||||
|
||||
function this.number.is_odd(value)
|
||||
return value % 2 ~= 0;
|
||||
end
|
||||
|
||||
function this.number.is_even(value)
|
||||
return value % 2 == 0;
|
||||
end
|
||||
|
||||
function this.number.is_equal(value1, value2)
|
||||
if math.abs(value1 - value2) < epsilon then
|
||||
return true;
|
||||
end
|
||||
|
||||
return false;
|
||||
end
|
||||
|
||||
function this.string.trim(str)
|
||||
return str:match("^%s*(.-)%s*$");
|
||||
end
|
||||
|
||||
function this.string.starts_with(str, pattern)
|
||||
return str:find("^" .. pattern) ~= nil;
|
||||
end
|
||||
|
||||
function this.vec2.tostring(vector2f)
|
||||
return string.format("<%f, %f>", vector2f.x, vector2f.y);
|
||||
end
|
||||
|
||||
function this.vec2.random(distance)
|
||||
distance = distance or 1;
|
||||
local radians = math.random() * math.pi * 2;
|
||||
return Vector2f.new(
|
||||
distance * math.cos(radians),
|
||||
distance * math.sin(radians)
|
||||
);
|
||||
end
|
||||
|
||||
function this.vec3.tostring(vector3f)
|
||||
return string.format("<%f, %f, %f>", vector3f.x, vector3f.y, vector3f.z);
|
||||
end
|
||||
|
||||
function this.vec4.tostring(vector4f)
|
||||
return string.format("<%f, %f, %f, %f>", vector4f.x, vector4f.y, vector4f.z, vector4f.w);
|
||||
end
|
||||
|
||||
--- When called without arguments, returns a pseudo-random float with uniform distribution in the range [0,1). When called with two floats min and max, math.random returns a pseudo-random float with uniform distribution in the range [min, max). The call .random(max) is equivalent to .random(1, max)
|
||||
---@param min number
|
||||
---@param max number
|
||||
---@return number
|
||||
function this.math.random(min, max)
|
||||
if min == nil and max == nil then
|
||||
return math.random();
|
||||
end
|
||||
|
||||
if max == nil then
|
||||
return max * math.random();
|
||||
end
|
||||
|
||||
return min + (max - min) * math.random();
|
||||
end
|
||||
|
||||
function this.math.sign(value)
|
||||
return (value >= 0 and 1) or -1;
|
||||
end
|
||||
function this.math.round(value, bracket)
|
||||
bracket = bracket or 1;
|
||||
return math.floor(value / bracket + this.math.sign(value) * 0.5) * bracket;
|
||||
end
|
||||
|
||||
-- https://github.com/blitmap/lua-utf8-simple/blob/master/utf8_simple.lua
|
||||
|
||||
-- ABNF from RFC 3629
|
||||
--
|
||||
-- UTF8-octets = *( UTF8-char )
|
||||
-- UTF8-char = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4
|
||||
-- UTF8-1 = %x00-7F
|
||||
-- UTF8-2 = %xC2-DF UTF8-tail
|
||||
-- UTF8-3 = %xE0 %xA0-BF UTF8-tail / %xE1-EC 2( UTF8-tail ) /
|
||||
-- %xED %x80-9F UTF8-tail / %xEE-EF 2( UTF8-tail )
|
||||
-- UTF8-4 = %xF0 %x90-BF 2( UTF8-tail ) / %xF1-F3 3( UTF8-tail ) /
|
||||
-- %xF4 %x80-8F 2( UTF8-tail )
|
||||
-- UTF8-tail = %x80-BF
|
||||
|
||||
-- 0xxxxxxx | 007F (127)
|
||||
-- 110xxxxx 10xxxxxx | 07FF (2047)
|
||||
-- 1110xxxx 10xxxxxx 10xxxxxx | FFFF (65535)
|
||||
-- 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx | 10FFFF (1114111)
|
||||
|
||||
local pattern = "[%z\1-\127\194-\244][\128-\191]*";
|
||||
|
||||
-- helper function
|
||||
function this.unicode.relative_position(position, length)
|
||||
if position < 0 then
|
||||
position = length + position + 1;
|
||||
end
|
||||
return position;
|
||||
end
|
||||
|
||||
-- THE MEAT
|
||||
|
||||
-- maps f over s's utf8 characters f can accept args: (visual_index, utf8_character, byte_index)
|
||||
function this.unicode.map(s, f, no_subs)
|
||||
local i = 0;
|
||||
|
||||
if no_subs then
|
||||
for b, e in s:gmatch("()" .. pattern .. "()") do
|
||||
i = i + 1;
|
||||
local c = e - b;
|
||||
f(i, c, b);
|
||||
end
|
||||
else
|
||||
for b, c in s:gmatch("()(" .. pattern .. ")") do
|
||||
i = i + 1;
|
||||
f(i, c, b);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- THE REST
|
||||
|
||||
-- returns the number of characters in a UTF-8 string
|
||||
function this.unicode.len(s)
|
||||
-- count the number of non-continuing bytes
|
||||
return select(2, s:gsub('[^\128-\193]', ''));
|
||||
end
|
||||
|
||||
-- replace all utf8 chars with mapping
|
||||
function this.unicode.replace(s, map)
|
||||
return s:gsub(pattern, map);
|
||||
end
|
||||
|
||||
-- reverse a utf8 string
|
||||
function this.unicode.reverse(s)
|
||||
-- reverse the individual greater-than-single-byte characters
|
||||
s = s:gsub(pattern, function (c)
|
||||
return #c > 1 and c:reverse()
|
||||
end);
|
||||
|
||||
return s:reverse();
|
||||
end
|
||||
|
||||
-- strip non-ascii characters from a utf8 string
|
||||
function this.unicode.strip(s)
|
||||
return s:gsub(pattern, function(c)
|
||||
return #c > 1 and '';
|
||||
end);
|
||||
end
|
||||
|
||||
-- generator for the above -- to iterate over all utf8 chars
|
||||
function this.unicode.chars(s, no_subs)
|
||||
return coroutine.wrap(function()
|
||||
return unicode_map(s, coroutine.yield, no_subs);
|
||||
end);
|
||||
end
|
||||
|
||||
-- like string.sub() but i, j are utf8 strings
|
||||
-- a utf8-safe string.sub()
|
||||
function this.unicode.sub(str, i, j)
|
||||
if coroutine == nil then
|
||||
return str;
|
||||
end
|
||||
|
||||
local l = utf8.len(str);
|
||||
|
||||
i = unicode_relative_position(i, l);
|
||||
j = j and unicode_relative_position(j, l) or l;
|
||||
|
||||
if i < 1 then
|
||||
i = 1;
|
||||
end
|
||||
|
||||
if j > l then
|
||||
j = l;
|
||||
end
|
||||
|
||||
if i > j then
|
||||
return "";
|
||||
end
|
||||
|
||||
local diff = j - i;
|
||||
local iterator = unicode_chars(str, true);
|
||||
|
||||
-- advance up to i
|
||||
for _ = 1, i - 1 do
|
||||
iterator();
|
||||
end
|
||||
|
||||
local c, b = select(2, iterator());
|
||||
|
||||
-- i and j are the same, single-charaacter sub
|
||||
if diff == 0 then
|
||||
return string.sub(str, b, b + c - 1);
|
||||
end
|
||||
|
||||
i = b;
|
||||
|
||||
-- advance up to j
|
||||
for _ = 1, diff - 1 do
|
||||
iterator();
|
||||
end
|
||||
|
||||
c, b = select(2, iterator());
|
||||
|
||||
return string.sub(str, i, b + c - 1);
|
||||
end
|
||||
|
||||
function this.sdk.generate_enum(type_def)
|
||||
if not type_def then
|
||||
return {};
|
||||
end
|
||||
|
||||
local fields = type_def:get_fields();
|
||||
local enum = {};
|
||||
|
||||
for i, field in ipairs(fields) do
|
||||
if field:is_static() then
|
||||
local name = field:get_name();
|
||||
local raw_value = field:get_data(nil);
|
||||
|
||||
local enum_entry = {
|
||||
name = name,
|
||||
value = raw_value;
|
||||
};
|
||||
|
||||
table.insert(enum, enum_entry);
|
||||
end
|
||||
end
|
||||
|
||||
return enum;
|
||||
end
|
||||
|
||||
function this.sdk.generate_enum_by_typename(type_name)
|
||||
local type_def = sdk.find_type_definition(type_name);
|
||||
if not type_def then
|
||||
return {};
|
||||
end;
|
||||
|
||||
return this.sdk.generate_enum(type_def);
|
||||
end
|
||||
|
||||
function this.init_dependencies()
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
table_tostring = this.table.tostring;
|
||||
deep_copy = this.table.deep_copy;
|
||||
merge = this.table.merge;
|
||||
is_empty = this.table.is_empty;
|
||||
unicode_map = this.unicode.map;
|
||||
unicode_relative_position = this.unicode.relative_position;
|
||||
unicode_chars = this.unicode.chars;
|
||||
|
||||
return this;
|
||||
@@ -1,5 +1,6 @@
|
||||
local ailment_buildup = {};
|
||||
local player;
|
||||
local this = {};
|
||||
|
||||
local players;
|
||||
local language;
|
||||
local config;
|
||||
local ailments;
|
||||
@@ -7,12 +8,45 @@ local ailment_buildup_UI_entity;
|
||||
local time;
|
||||
local small_monster;
|
||||
local large_monster;
|
||||
local table_helpers;
|
||||
local drawing;
|
||||
local error_handler;
|
||||
|
||||
function ailment_buildup.draw(monster, ailment_buildup_UI, cached_config, ailment_buildups_position_on_screen, opacity_scale)
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function this.draw(monster, ailment_buildup_UI, cached_config, ailment_buildups_position_on_screen, opacity_scale)
|
||||
|
||||
local cached_config = cached_config.ailment_buildups;
|
||||
local cached_damage_meter_UI_config = config.current_config.damage_meter_UI;
|
||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||
|
||||
if not cached_config.visibility then
|
||||
@@ -22,48 +56,105 @@ function ailment_buildup.draw(monster, ailment_buildup_UI, cached_config, ailmen
|
||||
for id, ailment in pairs(monster.ailments) do
|
||||
if id == ailments.stun_id then
|
||||
if not cached_config.filter.stun then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
|
||||
elseif id == ailments.poison_id then
|
||||
if not cached_config.filter.poison then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
elseif id == ailments.blast_id then
|
||||
if not cached_config.filter.blast then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
else
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if cached_config.settings.time_limit ~= 0 and
|
||||
time.total_elapsed_script_seconds - ailment.last_change_time > cached_config.settings.time_limit then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
|
||||
|
||||
local total_buildup = 0;
|
||||
local top_buildup = 0;
|
||||
|
||||
local displayed_players = {};
|
||||
for player_id, player_buildup in pairs(ailment.buildup) do
|
||||
for player, player_buildup in pairs(ailment.buildup) do
|
||||
total_buildup = total_buildup + player_buildup;
|
||||
|
||||
if player_buildup > top_buildup then
|
||||
top_buildup = player_buildup;
|
||||
end
|
||||
|
||||
table.insert(displayed_players,
|
||||
{
|
||||
["buildup"] = player_buildup,
|
||||
["buildup_share"] = ailment.buildup_share[player_id],
|
||||
["id"] = player_id
|
||||
}
|
||||
);
|
||||
displayed_players[player] = {
|
||||
["buildup"] = player_buildup,
|
||||
["buildup_share"] = ailment.buildup_share[player],
|
||||
["id"] = player.id
|
||||
};
|
||||
end
|
||||
|
||||
|
||||
for otomo, otomo_buildup in pairs(ailment.otomo_buildup) do
|
||||
total_buildup = total_buildup + otomo_buildup;
|
||||
|
||||
if otomo_buildup > top_buildup then
|
||||
top_buildup = otomo_buildup;
|
||||
end
|
||||
|
||||
local player = players.get_player(otomo.id);
|
||||
local displayed_player = displayed_players[player];
|
||||
|
||||
|
||||
|
||||
if otomo.type == players.types.my_otomo then
|
||||
|
||||
if cached_damage_meter_UI_config.settings.show_my_otomos_separately then
|
||||
displayed_players[otomo] = {
|
||||
["buildup"] = otomo_buildup,
|
||||
["buildup_share"] = ailment.otomo_buildup_share[otomo],
|
||||
["id"] = otomo.id
|
||||
};
|
||||
|
||||
elseif player ~= nil then
|
||||
displayed_players[player].buildup = displayed_players[player].buildup + otomo_buildup;
|
||||
displayed_players[player].buildup_share = displayed_players[player].buildup_share + ailment.otomo_buildup_share[otomo];
|
||||
end
|
||||
|
||||
elseif otomo.type == players.types.other_player_otomo then
|
||||
|
||||
if cached_damage_meter_UI_config.settings.show_other_player_otomos_separately then
|
||||
displayed_players[otomo] = {
|
||||
["buildup"] = otomo_buildup,
|
||||
["buildup_share"] = ailment.otomo_buildup_share[otomo],
|
||||
["id"] = otomo.id
|
||||
};
|
||||
|
||||
elseif player ~= nil then
|
||||
displayed_players[player].buildup = displayed_players[player].buildup + otomo_buildup;
|
||||
displayed_players[player].buildup_share = displayed_players[player].buildup_share + ailment.otomo_buildup_share[otomo];
|
||||
end
|
||||
|
||||
elseif otomo.type == players.types.servant_otomo then
|
||||
|
||||
if cached_damage_meter_UI_config.settings.show_servant_otomos_separately then
|
||||
|
||||
displayed_players[otomo] = {
|
||||
["buildup"] = otomo_buildup,
|
||||
["buildup_share"] = ailment.otomo_buildup_share[otomo],
|
||||
["id"] = otomo.id
|
||||
};
|
||||
|
||||
elseif player ~= nil then
|
||||
displayed_players[player].buildup = displayed_players[player].buildup + otomo_buildup;
|
||||
displayed_players[player].buildup_share = displayed_players[player].buildup_share + ailment.otomo_buildup_share[otomo];
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if total_buildup == 0 then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if cached_config.sorting.type == "Normal" then
|
||||
@@ -98,6 +189,7 @@ function ailment_buildup.draw(monster, ailment_buildup_UI, cached_config, ailmen
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local ailment_name = "";
|
||||
if cached_config.ailment_name_label.include.ailment_name then
|
||||
ailment_name = ailment.name .. " ";
|
||||
@@ -108,21 +200,20 @@ function ailment_buildup.draw(monster, ailment_buildup_UI, cached_config, ailmen
|
||||
|
||||
drawing.draw_label(ailment_buildup_UI.ailment_name_label, ailment_buildups_position_on_screen, opacity_scale, ailment_name);
|
||||
|
||||
local last_j = 0;
|
||||
for j, _player in ipairs(displayed_players) do
|
||||
local j = 0;
|
||||
for player, displayed_player in pairs(displayed_players) do
|
||||
local ailment_buildup_position_on_screen = {
|
||||
x = ailment_buildups_position_on_screen.x + cached_config.player_spacing.x * (j - 1) * global_scale_modifier,
|
||||
y = ailment_buildups_position_on_screen.y + cached_config.player_spacing.y * (j - 1) * global_scale_modifier;
|
||||
x = ailment_buildups_position_on_screen.x + cached_config.player_spacing.x * j * global_scale_modifier,
|
||||
y = ailment_buildups_position_on_screen.y + cached_config.player_spacing.y * j * global_scale_modifier;
|
||||
};
|
||||
|
||||
ailment_buildup_UI_entity.draw(_player, ailment_buildup_UI, cached_config, ailment_buildup_position_on_screen, opacity_scale, top_buildup);
|
||||
|
||||
last_j = j;
|
||||
ailment_buildup_UI_entity.draw(player, displayed_player, ailment_buildup_UI, cached_config, ailment_buildup_position_on_screen, opacity_scale, top_buildup);
|
||||
j = j + 1;
|
||||
end
|
||||
|
||||
local total_buildup_position_on_screen = {
|
||||
x = ailment_buildups_position_on_screen.x + cached_config.player_spacing.x * last_j * global_scale_modifier,
|
||||
y = ailment_buildups_position_on_screen.y + cached_config.player_spacing.y * last_j * global_scale_modifier;
|
||||
x = ailment_buildups_position_on_screen.x + cached_config.player_spacing.x * j * global_scale_modifier,
|
||||
y = ailment_buildups_position_on_screen.y + cached_config.player_spacing.y * j * global_scale_modifier;
|
||||
};
|
||||
|
||||
drawing.draw_label(ailment_buildup_UI.total_buildup_label, total_buildup_position_on_screen, opacity_scale, language.current_language.UI.total_buildup);
|
||||
@@ -133,14 +224,13 @@ function ailment_buildup.draw(monster, ailment_buildup_UI, cached_config, ailmen
|
||||
y = total_buildup_position_on_screen.y + 17 + cached_config.ailment_spacing.y * global_scale_modifier
|
||||
};
|
||||
|
||||
|
||||
::continue::
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
function ailment_buildup.init_module()
|
||||
player = require("MHR_Overlay.Damage_Meter.player");
|
||||
function this.init_dependencies()
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
ailments = require("MHR_Overlay.Monsters.ailments");
|
||||
@@ -148,8 +238,11 @@ function ailment_buildup.init_module()
|
||||
time = require("MHR_Overlay.Game_Handler.time");
|
||||
small_monster = require("MHR_Overlay.Monsters.small_monster");
|
||||
large_monster = require("MHR_Overlay.Monsters.large_monster");
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return ailment_buildup;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -1,9 +1,42 @@
|
||||
local ailment_hook = {};
|
||||
local this = {};
|
||||
|
||||
local small_monster;
|
||||
local large_monster;
|
||||
local config;
|
||||
local ailments;
|
||||
local table_helpers;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
local enemy_poison_damage_param_type_def = sdk.find_type_definition("snow.enemy.EnemyPoisonDamageParam");
|
||||
local on_poison_activate_proc_method = enemy_poison_damage_param_type_def:get_method("onActivateProc");
|
||||
@@ -15,7 +48,7 @@ local enemy_condition_damage_param_base_type_def = sdk.find_type_definition("sno
|
||||
local get_enemy_method = enemy_condition_damage_param_base_type_def:get_method("get_Em");
|
||||
|
||||
local enemy_character_base_type_def = sdk.find_type_definition("snow.enemy.EnemyCharacterBase");
|
||||
local damage_param_field = enemy_character_base_type_def:get_field("<DamageParam>k__BackingField");
|
||||
local get_damage_param_method = enemy_character_base_type_def:get_method("get_DamageParam");
|
||||
local is_boss_enemy_method = enemy_character_base_type_def:get_method("get_isBossEnemy");
|
||||
|
||||
local enemy_damage_param_type_def = sdk.find_type_definition("snow.enemy.EnemyDamageParam");
|
||||
@@ -28,18 +61,21 @@ local blast_param_type = blast_param_field:get_type();
|
||||
local blast_damage_method = blast_param_type:get_method("get_BlastDamage");
|
||||
local blast_adjust_rate_method = blast_param_type:get_method("get_BlastDamageAdjustRateByEnemyLv");
|
||||
|
||||
function ailment_hook.poison_proc(poison_param)
|
||||
function this.poison_proc(poison_param)
|
||||
if poison_param == nil then
|
||||
error_handler.report("ailment_hook.poison_proc", "Missing Parameter: poison_param");
|
||||
return;
|
||||
end
|
||||
|
||||
local enemy = get_enemy_method:call(poison_param);
|
||||
if enemy == nil then
|
||||
error_handler.report("ailment_hook.poison_proc", "Failed to Access Data: enemy");
|
||||
return;
|
||||
end
|
||||
|
||||
local is_large = is_boss_enemy_method:call(enemy);
|
||||
if is_large == nil then
|
||||
error_handler.report("ailment_hook.poison_proc", "Failed to Access Data: is_large");
|
||||
return;
|
||||
end
|
||||
|
||||
@@ -50,23 +86,27 @@ function ailment_hook.poison_proc(poison_param)
|
||||
monster = small_monster.get_monster(enemy);
|
||||
end
|
||||
|
||||
monster.ailments[ailments.poison_id].cached_buildup_share = table_helpers.deep_copy(monster.ailments[ailments
|
||||
.poison_id].buildup_share);
|
||||
monster.ailments[ailments.poison_id].cached_buildup_share = monster.ailments[ailments.poison_id].buildup_share;
|
||||
monster.ailments[ailments.poison_id].cached_otomo_buildup_share = monster.ailments[ailments.poison_id].otomo_buildup_share;
|
||||
|
||||
ailments.clear_ailment_contribution(monster, ailments.poison_id);
|
||||
end
|
||||
|
||||
function ailment_hook.blast_proc(blast_param)
|
||||
function this.blast_proc(blast_param)
|
||||
if blast_param == nil then
|
||||
error_handler.report("ailment_hook.blast_proc", "Missing Parameter: blast_param");
|
||||
return;
|
||||
end
|
||||
|
||||
local enemy = get_enemy_method:call(blast_param);
|
||||
if enemy == nil then
|
||||
error_handler.report("ailment_hook.blast_proc", "Failed to Access Data: enemy");
|
||||
return;
|
||||
end
|
||||
|
||||
local is_large = is_boss_enemy_method:call(enemy);
|
||||
if is_large == nil then
|
||||
error_handler.report("ailment_hook.blast_proc", "Failed to Access Data: is_large");
|
||||
return;
|
||||
end
|
||||
|
||||
@@ -80,61 +120,72 @@ function ailment_hook.blast_proc(blast_param)
|
||||
local blast_damage = blast_damage_method:call(blast_param);
|
||||
local blast_adjust_rate = blast_adjust_rate_method:call(blast_param);
|
||||
|
||||
|
||||
ailments.apply_ailment_damage(monster, ailments.blast_id, blast_damage * blast_adjust_rate);
|
||||
ailments.clear_ailment_contribution(monster, ailments.blast_id);
|
||||
end
|
||||
|
||||
function ailment_hook.stock_damage()
|
||||
function this.stock_damage()
|
||||
for enemy, monster in pairs(large_monster.list) do
|
||||
local damage_param = damage_param_field:get_data(enemy);
|
||||
local damage_param = get_damage_param_method:call(enemy);
|
||||
if damage_param == nil then
|
||||
goto continue
|
||||
error_handler.report("ailment_hook.stock_damage", "Failed to Access Data: large_monster -> damage_param");
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local poison_param = poison_param_field:get_data(damage_param);
|
||||
if poison_param == nil then
|
||||
error_handler.report("ailment_hook.stock_damage", "Failed to Access Data: large_monster -> poison_param");
|
||||
goto continue;
|
||||
end
|
||||
|
||||
ailments.update_poison(monster, poison_param);
|
||||
::continue::
|
||||
end
|
||||
|
||||
for enemy, monster in pairs(small_monster.list) do
|
||||
local damage_param = damage_param_field:get_data(enemy);
|
||||
local damage_param = get_damage_param_method:call(enemy);
|
||||
if damage_param == nil then
|
||||
goto continue
|
||||
error_handler.report("ailment_hook.stock_damage", "Failed to Access Data: small_monster -> damage_param");
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local poison_param = poison_param_field:get_data(damage_param);
|
||||
if poison_param == nil then
|
||||
error_handler.report("ailment_hook.stock_damage", "Failed to Access Data: small_monster -> poison_param");
|
||||
goto continue;
|
||||
end
|
||||
|
||||
ailments.update_poison(monster, poison_param);
|
||||
::continue::
|
||||
end
|
||||
end
|
||||
|
||||
function ailment_hook.init_module()
|
||||
function this.init_dependencies()
|
||||
small_monster = require("MHR_Overlay.Monsters.small_monster");
|
||||
large_monster = require("MHR_Overlay.Monsters.large_monster");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
ailments = require("MHR_Overlay.Monsters.ailments");
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
sdk.hook(stock_damage_method, function(args)
|
||||
pcall(ailment_hook.stock_damage, sdk.to_managed_object(args[2]));
|
||||
pcall(this.stock_damage, sdk.to_managed_object(args[2]));
|
||||
end, function(retval)
|
||||
return retval;
|
||||
end);
|
||||
|
||||
sdk.hook(on_poison_activate_proc_method, function(args)
|
||||
pcall(ailment_hook.poison_proc, sdk.to_managed_object(args[2]));
|
||||
pcall(this.poison_proc, sdk.to_managed_object(args[2]));
|
||||
end, function(retval)
|
||||
return retval;
|
||||
end);
|
||||
|
||||
sdk.hook(on_blast_activate_proc_method, function(args)
|
||||
pcall(ailment_hook.blast_proc, sdk.to_managed_object(args[2]));
|
||||
pcall(this.blast_proc, sdk.to_managed_object(args[2]));
|
||||
end, function(retval)
|
||||
return retval;
|
||||
end);
|
||||
end
|
||||
|
||||
return ailment_hook;
|
||||
return this;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,8 +1,8 @@
|
||||
local body_part = {};
|
||||
local this = {};
|
||||
|
||||
local singletons;
|
||||
local customization_menu;
|
||||
local config;
|
||||
local table_helpers;
|
||||
local health_UI_entity;
|
||||
local stamina_UI_entity;
|
||||
local rage_UI_entity;
|
||||
@@ -11,38 +11,84 @@ local screen;
|
||||
local drawing;
|
||||
local part_names;
|
||||
local time;
|
||||
local utils;
|
||||
local error_handler;
|
||||
|
||||
body_part.list = {};
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function body_part.new(id, name)
|
||||
this.list = {};
|
||||
|
||||
function this.new(id, name)
|
||||
local part = {};
|
||||
|
||||
part.id = id;
|
||||
part.name = name;
|
||||
|
||||
part.health = 9999;
|
||||
part.max_health = 99999;
|
||||
part.health = -9;
|
||||
part.max_health = -10;
|
||||
part.health_percentage = 0;
|
||||
|
||||
part.break_health = 9999;
|
||||
part.break_max_health = 99999;
|
||||
part.break_health = -9;
|
||||
part.break_max_health = -10;
|
||||
part.break_health_percentage = 0;
|
||||
|
||||
part.lost_health = 9999;
|
||||
part.loss_max_health = 99999;
|
||||
part.lost_health = -9;
|
||||
part.loss_max_health = -10;
|
||||
part.loss_health_percentage = 0;
|
||||
|
||||
part.name = name;
|
||||
part.flinch_count = 0;
|
||||
part.break_count = 0;
|
||||
part.break_max_count = 0;
|
||||
|
||||
part.anomaly_ref = nil;
|
||||
part.anomaly_health = -9;
|
||||
part.anomaly_max_health = -10;
|
||||
part.anomaly_health_percentage = 0;
|
||||
part.anomaly_is_active = false;
|
||||
|
||||
part.last_change_time = time.total_elapsed_script_seconds;
|
||||
|
||||
return part;
|
||||
end
|
||||
|
||||
function body_part.update_flinch(part, part_current, part_max)
|
||||
if part_current > part.health then
|
||||
function this.init_part_names(monster_id, parts)
|
||||
for part_id, part in pairs(parts) do
|
||||
part.name = part_names.get_part_name(monster_id, part_id);
|
||||
end
|
||||
end
|
||||
|
||||
function this.update_flinch(part, part_current, part_max)
|
||||
if part_current > part.health and part.max_health > 0 then
|
||||
part.flinch_count = part.flinch_count + 1;
|
||||
end
|
||||
|
||||
@@ -62,7 +108,7 @@ function body_part.update_flinch(part, part_current, part_max)
|
||||
end
|
||||
end
|
||||
|
||||
function body_part.update_break(part, part_break_current, part_break_max, part_break_count, part_break_max_count)
|
||||
function this.update_break(part, part_break_current, part_break_max, part_break_count, part_break_max_count)
|
||||
|
||||
if part.break_health ~= part_break_current then
|
||||
part.last_change_time = time.total_elapsed_script_seconds;
|
||||
@@ -91,7 +137,7 @@ function body_part.update_break(part, part_break_current, part_break_max, part_b
|
||||
end
|
||||
end
|
||||
|
||||
function body_part.update_loss(part, part_loss_current, part_loss_max, is_severed)
|
||||
function this.update_loss(part, part_loss_current, part_loss_max, is_severed)
|
||||
if part.loss_health ~= part_loss_current then
|
||||
part.last_change_time = time.total_elapsed_script_seconds;
|
||||
end
|
||||
@@ -115,7 +161,126 @@ function body_part.update_loss(part, part_loss_current, part_loss_max, is_severe
|
||||
|
||||
end
|
||||
|
||||
function body_part.draw(monster, part_UI, cached_config, parts_position_on_screen, opacity_scale)
|
||||
function this.update_anomaly(part, part_anomaly_ref, part_anomaly_current, part_anomaly_max, part_is_active)
|
||||
if part.anomaly_health ~= part_anomaly_current then
|
||||
part.last_change_time = time.total_elapsed_script_seconds;
|
||||
end
|
||||
|
||||
if part.anomaly_max_health ~= part_anomaly_max then
|
||||
part.last_change_time = time.total_elapsed_script_seconds;
|
||||
end
|
||||
|
||||
if part.anomaly_is_active ~= part_is_active then
|
||||
part.last_change_time = time.total_elapsed_script_seconds;
|
||||
end
|
||||
|
||||
part.anomaly_core_ref = part_anomaly_ref;
|
||||
part.anomaly_health = part_anomaly_current;
|
||||
part.anomaly_max_health = part_anomaly_max;
|
||||
part.anomaly_is_active = part_is_active;
|
||||
|
||||
if part.anomaly_max_health ~= 0 then
|
||||
part.anomaly_health_percentage = part.anomaly_health / part.anomaly_max_health;
|
||||
end
|
||||
end
|
||||
|
||||
function this.is_filtered_out(cached_config, health_supported, break_supported, sever_supported, anomaly_supported)
|
||||
if health_supported then
|
||||
if break_supported then
|
||||
if sever_supported then
|
||||
if anomaly_supported then
|
||||
if not cached_config.filter.health_break_sever_anomaly then
|
||||
return true;
|
||||
end
|
||||
else
|
||||
if not cached_config.filter.health_break_sever then
|
||||
return true;
|
||||
end
|
||||
end
|
||||
else
|
||||
if anomaly_supported then
|
||||
if not cached_config.filter.health_break_anomaly then
|
||||
return true;
|
||||
end
|
||||
else
|
||||
if not cached_config.filter.health_break then
|
||||
return true;
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
if sever_supported then
|
||||
if anomaly_supported then
|
||||
if not cached_config.filter.health_sever_anomaly then
|
||||
return true;
|
||||
end
|
||||
else
|
||||
if not cached_config.filter.health_sever then
|
||||
return true;
|
||||
end
|
||||
end
|
||||
else
|
||||
if anomaly_supported then
|
||||
if not cached_config.filter.health_anomaly then
|
||||
return true;
|
||||
end
|
||||
else
|
||||
if not cached_config.filter.health then
|
||||
return true;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
if break_supported then
|
||||
if sever_supported then
|
||||
if anomaly_supported then
|
||||
if not cached_config.filter.break_sever_anomaly then
|
||||
return true;
|
||||
end
|
||||
else
|
||||
if not cached_config.filter.break_sever then
|
||||
return true;
|
||||
end
|
||||
end
|
||||
else
|
||||
if anomaly_supported then
|
||||
if not cached_config.filter.break_anomaly then
|
||||
return true;
|
||||
end
|
||||
else
|
||||
if not cached_config.filter.break_ then
|
||||
return true;
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
if sever_supported then
|
||||
if anomaly_supported then
|
||||
if not cached_config.filter.sever_anomaly then
|
||||
return true;
|
||||
end
|
||||
else
|
||||
if not cached_config.filter.sever then
|
||||
return true;
|
||||
end
|
||||
end
|
||||
else
|
||||
if anomaly_supported then
|
||||
if not cached_config.filter.anomaly then
|
||||
return true;
|
||||
end
|
||||
else
|
||||
return true;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return false;
|
||||
end
|
||||
|
||||
function this.draw(monster, part_UI, cached_config, parts_position_on_screen, opacity_scale)
|
||||
local cached_config = cached_config.body_parts;
|
||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||
|
||||
@@ -123,68 +288,47 @@ function body_part.draw(monster, part_UI, cached_config, parts_position_on_scree
|
||||
for REpart, part in pairs(monster.parts) do
|
||||
local health_supported = part.max_health > 0;
|
||||
local break_supported = part.break_max_health > 0;
|
||||
local severe_supported = part.loss_max_health > 0;
|
||||
local sever_supported = part.loss_max_health > 0;
|
||||
local anomaly_supported = part.anomaly_max_health > 0;
|
||||
|
||||
if health_supported then
|
||||
if break_supported then
|
||||
if severe_supported then
|
||||
if not cached_config.filter.health_break_severe then
|
||||
goto continue
|
||||
end
|
||||
else
|
||||
if not cached_config.filter.health_break then
|
||||
goto continue
|
||||
end
|
||||
end
|
||||
else
|
||||
if severe_supported then
|
||||
if not cached_config.filter.health_severe then
|
||||
goto continue
|
||||
end
|
||||
else
|
||||
if not cached_config.filter.health then
|
||||
goto continue
|
||||
end
|
||||
end
|
||||
|
||||
if cached_config.settings.filter_mode == "Current State" then
|
||||
if break_supported and part.break_count >= part.break_max_count then
|
||||
break_supported = false;
|
||||
end
|
||||
else
|
||||
if break_supported then
|
||||
if severe_supported then
|
||||
if not cached_config.filter.break_severe then
|
||||
goto continue
|
||||
end
|
||||
else
|
||||
if not cached_config.filter.break_ then
|
||||
goto continue
|
||||
end
|
||||
end
|
||||
else
|
||||
if severe_supported then
|
||||
if not cached_config.filter.severe then
|
||||
goto continue
|
||||
end
|
||||
else
|
||||
goto continue
|
||||
end
|
||||
|
||||
if sever_supported and part.is_severed then
|
||||
sever_supported = false;
|
||||
end
|
||||
|
||||
if anomaly_supported and not part.anomaly_is_active then
|
||||
anomaly_supported = false;
|
||||
end
|
||||
end
|
||||
|
||||
local is_filtered_out = this.is_filtered_out(cached_config, health_supported, break_supported, sever_supported, anomaly_supported);
|
||||
if is_filtered_out then
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if cached_config.settings.hide_undamaged_parts
|
||||
and ((part.health == part.max_health and part.flinch_count == 0) or not health_supported)
|
||||
and ((part.break_health == part.break_max_health and part.break_count == 0) or not break_supported)
|
||||
and ((part.loss_health == part.loss_max_health and not part.is_severed) or not severe_supported) then
|
||||
goto continue
|
||||
and ((part.health == part.max_health and part.flinch_count == 0) or not health_supported)
|
||||
and ((part.break_health == part.break_max_health and part.break_count == 0) or not break_supported)
|
||||
and ((part.loss_health == part.loss_max_health and not part.is_severed) or not sever_supported)
|
||||
and ((part.anomaly_health == part.anomaly_max_health) or not anomaly_supported) then
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if (not part_UI.flinch_visibility or not health_supported)
|
||||
and (not part_UI.break_visibility or not break_supported or part.break_count >= part.break_max_count)
|
||||
and (not part_UI.loss_visibility or not severe_supported or part.is_severed) then
|
||||
goto continue
|
||||
and (not part_UI.break_visibility or not break_supported or part.break_count >= part.break_max_count)
|
||||
and (not part_UI.loss_visibility or not sever_supported or part.is_severed)
|
||||
and (not part_UI.anomaly_visibility or not anomaly_supported) then
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if cached_config.settings.time_limit ~= 0 and
|
||||
time.total_elapsed_script_seconds - part.last_change_time > cached_config.settings.time_limit then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
|
||||
table.insert(displayed_parts, part);
|
||||
@@ -281,6 +425,26 @@ function body_part.draw(monster, part_UI, cached_config, parts_position_on_scree
|
||||
return left.loss_health_percentage < right.loss_health_percentage;
|
||||
end);
|
||||
end
|
||||
elseif cached_config.sorting.type == "Anomaly Core Health" then
|
||||
if cached_config.sorting.reversed_order then
|
||||
table.sort(displayed_parts, function(left, right)
|
||||
return left.anomaly_health > right.anomaly_health;
|
||||
end);
|
||||
else
|
||||
table.sort(displayed_parts, function(left, right)
|
||||
return left.anomaly_health < right.anomaly_health;
|
||||
end);
|
||||
end
|
||||
elseif cached_config.sorting.type == "Anomaly Core Health Percentage" then
|
||||
if cached_config.sorting.reversed_order then
|
||||
table.sort(displayed_parts, function(left, right)
|
||||
return left.anomaly_health_percentage > right.anomaly_health_percentage;
|
||||
end);
|
||||
else
|
||||
table.sort(displayed_parts, function(left, right)
|
||||
return left.anomaly_health_percentage < right.anomaly_health_percentage;
|
||||
end);
|
||||
end
|
||||
end
|
||||
|
||||
local last_part_position_on_screen;
|
||||
@@ -298,11 +462,10 @@ function body_part.draw(monster, part_UI, cached_config, parts_position_on_scree
|
||||
return last_part_position_on_screen;
|
||||
end
|
||||
|
||||
function body_part.init_module()
|
||||
function this.init_dependencies()
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
health_UI_entity = require("MHR_Overlay.UI.UI_Entities.health_UI_entity");
|
||||
stamina_UI_entity = require("MHR_Overlay.UI.UI_Entities.stamina_UI_entity");
|
||||
rage_UI_entity = require("MHR_Overlay.UI.UI_Entities.rage_UI_entity");
|
||||
@@ -311,6 +474,11 @@ function body_part.init_module()
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
part_names = require("MHR_Overlay.Misc.part_names");
|
||||
time = require("MHR_Overlay.Game_Handler.time");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return body_part;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,24 +1,61 @@
|
||||
local monster_hook = {};
|
||||
local this = {};
|
||||
|
||||
local small_monster;
|
||||
local large_monster;
|
||||
local config;
|
||||
local ailments;
|
||||
local player;
|
||||
local players;
|
||||
local quest_status;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
local enemy_character_base_type_def = sdk.find_type_definition("snow.enemy.EnemyCharacterBase");
|
||||
local enemy_character_base_update_method = enemy_character_base_type_def:get_method("update");
|
||||
|
||||
local is_boss_enemy_method = enemy_character_base_type_def:get_method("get_isBossEnemy");
|
||||
local on_destroy_method = enemy_character_base_type_def:get_method("onDestroy");
|
||||
|
||||
local enemy_damage_check_type_def = sdk.find_type_definition("snow.enemy.EnemyDamageCheck");
|
||||
local damage_check_update_param_update_method = enemy_damage_check_type_def:get_method("updateParam");
|
||||
local get_ref_enemy = enemy_damage_check_type_def:get_method("get_RefEnemy");
|
||||
|
||||
local anger_param_type_def = sdk.find_type_definition("snow.enemy.EnemyAngerParam");
|
||||
local anger_add_method = anger_param_type_def:get_method("add");
|
||||
|
||||
local stamina_param_type_def = sdk.find_type_definition("snow.enemy.EnemyStaminaParam");
|
||||
local stamina_sub_method = stamina_param_type_def:get_method("sub");
|
||||
local get_enemy_method = stamina_param_type_def:get_method("get_Em");
|
||||
|
||||
local tick_count = 0;
|
||||
local last_update_tick = 0;
|
||||
@@ -52,7 +89,7 @@ re.on_pre_application_entry("UpdateBehavior", function()
|
||||
end
|
||||
end)
|
||||
|
||||
function monster_hook.update_monster(enemy)
|
||||
function this.update_monster(enemy)
|
||||
if enemy == nil then
|
||||
return;
|
||||
end
|
||||
@@ -73,18 +110,18 @@ function monster_hook.update_monster(enemy)
|
||||
end
|
||||
|
||||
if is_large then
|
||||
monster_hook.update_large_monster(enemy);
|
||||
this.update_large_monster(enemy);
|
||||
else
|
||||
monster_hook.update_small_monster(enemy);
|
||||
this.update_small_monster(enemy);
|
||||
end
|
||||
end
|
||||
|
||||
function monster_hook.update_large_monster(enemy)
|
||||
function this.update_large_monster(enemy)
|
||||
local cached_config = config.current_config.large_monster_UI;
|
||||
|
||||
if not cached_config.dynamic.enabled and
|
||||
not cached_config.static.enabled and
|
||||
not cached_config.highlighted.enabled then
|
||||
not cached_config.static.enabled and
|
||||
not cached_config.highlighted.enabled then
|
||||
return;
|
||||
end
|
||||
|
||||
@@ -118,15 +155,17 @@ function monster_hook.update_large_monster(enemy)
|
||||
large_monster.update_stamina_timer(enemy, monster, nil);
|
||||
large_monster.update_rage_timer(enemy, monster, nil);
|
||||
|
||||
if quest_status.is_online and player.myself.id ~= 0 then
|
||||
if (quest_status.is_online and players.myself.id ~= 0)
|
||||
or monster.is_health_update_requested then
|
||||
local physical_param = large_monster.update_health(enemy, monster);
|
||||
pcall(large_monster.update_parts, enemy, monster, physical_param);
|
||||
pcall(large_monster.update_anomaly_parts, enemy, monster, nil);
|
||||
end
|
||||
|
||||
large_monster.update(enemy, monster);
|
||||
end
|
||||
|
||||
function monster_hook.update_small_monster(enemy)
|
||||
function this.update_small_monster(enemy)
|
||||
if not config.current_config.small_monster_UI.enabled then
|
||||
return;
|
||||
end
|
||||
@@ -158,19 +197,22 @@ function monster_hook.update_small_monster(enemy)
|
||||
|
||||
small_monster.update(enemy, monster);
|
||||
|
||||
if quest_status.is_online and player.myself.id ~= 0 then
|
||||
if (quest_status.is_online and players.myself.id ~= 0)
|
||||
or not monster.is_health_initialized then
|
||||
small_monster.update_health(enemy, monster);
|
||||
end
|
||||
end
|
||||
|
||||
function monster_hook.update_health(enemy_damage_stock_param)
|
||||
local enemy = enemy_damage_stock_param:call("get_RefEnemy");
|
||||
function this.update_health(enemy_damage_check)
|
||||
local enemy = get_ref_enemy:call(enemy_damage_check);
|
||||
if enemy == nil then
|
||||
error_handler.report("monster_hook.update_health", "Failed to Access Data: enemy");
|
||||
return;
|
||||
end
|
||||
|
||||
local is_large = is_boss_enemy_method:call(enemy);
|
||||
if is_large == nil then
|
||||
error_handler.report("monster_hook.update_health", "Failed to Access Data: is_large");
|
||||
return;
|
||||
end
|
||||
|
||||
@@ -179,19 +221,21 @@ function monster_hook.update_health(enemy_damage_stock_param)
|
||||
|
||||
local physical_param = large_monster.update_health(enemy, monster);
|
||||
pcall(large_monster.update_parts, enemy, monster, physical_param);
|
||||
pcall(large_monster.update_anomaly_parts, enemy, monster, nil);
|
||||
else
|
||||
local monster = small_monster.get_monster(enemy);
|
||||
small_monster.update_health(enemy, monster);
|
||||
end
|
||||
end
|
||||
|
||||
function monster_hook.update_stamina(stamina_param, stamina_sub)
|
||||
function this.update_stamina(stamina_param, stamina_sub)
|
||||
if stamina_sub <= 0 then
|
||||
return;
|
||||
end
|
||||
|
||||
local enemy = stamina_param:call("get_Em");
|
||||
local enemy = get_enemy_method:call(stamina_param);
|
||||
if enemy == nil then
|
||||
error_handler.report("monster_hook.update_stamina", "Failed to Access Data: enemy");
|
||||
return;
|
||||
end
|
||||
|
||||
@@ -199,12 +243,12 @@ function monster_hook.update_stamina(stamina_param, stamina_sub)
|
||||
large_monster.update_stamina(enemy, monster, stamina_param);
|
||||
end
|
||||
|
||||
function monster_hook.update_stamina_timer(stamina_param, enemy)
|
||||
function this.update_stamina_timer(stamina_param, enemy)
|
||||
local monster = large_monster.get_monster(enemy);
|
||||
large_monster.update_stamina_timer(enemy, monster, stamina_param);
|
||||
end
|
||||
|
||||
function monster_hook.update_rage(anger_param, anger_add, enemy)
|
||||
function this.update_rage(anger_param, anger_add, enemy)
|
||||
if anger_add <= 0 then
|
||||
return;
|
||||
end
|
||||
@@ -213,43 +257,66 @@ function monster_hook.update_rage(anger_param, anger_add, enemy)
|
||||
large_monster.update_rage(enemy, monster, anger_param);
|
||||
end
|
||||
|
||||
function monster_hook.update_rage_timer(anger_param, enemy)
|
||||
function this.update_rage_timer(anger_param, enemy)
|
||||
local monster = large_monster.get_monster(enemy);
|
||||
large_monster.update_rage_timer(enemy, monster, anger_param);
|
||||
end
|
||||
|
||||
function monster_hook.init_module()
|
||||
function this.on_destroy(enemy)
|
||||
local is_large = is_boss_enemy_method:call(enemy);
|
||||
if is_large == nil then
|
||||
error_handler.report("monster_hook.on_destroy", "Failed to Access Data: is_large");
|
||||
return;
|
||||
end
|
||||
|
||||
if is_large then
|
||||
large_monster.list[enemy] = nil;
|
||||
else
|
||||
small_monster.list[enemy] = nil;
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_dependencies()
|
||||
small_monster = require("MHR_Overlay.Monsters.small_monster");
|
||||
large_monster = require("MHR_Overlay.Monsters.large_monster");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
ailments = require("MHR_Overlay.Monsters.ailments");
|
||||
player = require("MHR_Overlay.Damage_Meter.player");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
quest_status = require("MHR_Overlay.Game_Handler.quest_status");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
sdk.hook(enemy_character_base_update_method, function(args)
|
||||
pcall(monster_hook.update_monster, sdk.to_managed_object(args[2]));
|
||||
pcall(this.update_monster, sdk.to_managed_object(args[2]));
|
||||
end, function(retval)
|
||||
return retval;
|
||||
end);
|
||||
|
||||
sdk.hook(damage_check_update_param_update_method, function(args)
|
||||
pcall(monster_hook.update_health, sdk.to_managed_object(args[2]));
|
||||
pcall(this.update_health, sdk.to_managed_object(args[2]));
|
||||
end, function(retval)
|
||||
return retval;
|
||||
end);
|
||||
|
||||
sdk.hook(stamina_sub_method, function(args)
|
||||
pcall(monster_hook.update_stamina, sdk.to_managed_object(args[2]), sdk.to_float(args[3]));
|
||||
pcall(this.update_stamina, sdk.to_managed_object(args[2]), sdk.to_float(args[3]));
|
||||
end, function(retval)
|
||||
return retval;
|
||||
end);
|
||||
|
||||
sdk.hook(anger_add_method, function(args)
|
||||
pcall(monster_hook.update_rage, sdk.to_managed_object(args[2]), sdk.to_float(args[3]),
|
||||
pcall(this.update_rage, sdk.to_managed_object(args[2]), sdk.to_float(args[3]),
|
||||
sdk.to_managed_object(args[4]));
|
||||
end, function(retval)
|
||||
return retval;
|
||||
end);
|
||||
|
||||
sdk.hook(on_destroy_method, function(args)
|
||||
pcall(this.on_destroy, sdk.to_managed_object(args[2]));
|
||||
end, function(retval)
|
||||
return retval;
|
||||
end);
|
||||
end
|
||||
|
||||
return monster_hook;
|
||||
return this;
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
local small_monster = {};
|
||||
local this = {};
|
||||
|
||||
local singletons;
|
||||
local customization_menu;
|
||||
local config;
|
||||
local table_helpers;
|
||||
local utils;
|
||||
local health_UI_entity;
|
||||
local stamina_UI_entity;
|
||||
local screen;
|
||||
@@ -11,20 +12,89 @@ local ailments;
|
||||
local ailment_UI_entity;
|
||||
local ailment_buildup;
|
||||
local ailment_buildup_UI_entity;
|
||||
local error_handler;
|
||||
|
||||
small_monster.list = {};
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function small_monster.new(enemy)
|
||||
this.list = {};
|
||||
|
||||
|
||||
local enemy_character_base_type_def = sdk.find_type_definition("snow.enemy.EnemyCharacterBase");
|
||||
local enemy_type_field = enemy_character_base_type_def:get_field("<EnemyType>k__BackingField");
|
||||
|
||||
local message_manager_type_def = sdk.find_type_definition("snow.gui.MessageManager");
|
||||
local get_enemy_name_message_method = message_manager_type_def:get_method("getEnemyNameMessage");
|
||||
|
||||
local get_ref_mesh_method = enemy_character_base_type_def:get_method("get_RefMesh");
|
||||
|
||||
local mesh_type_def = get_ref_mesh_method:get_return_type();
|
||||
local get_game_object_method = mesh_type_def:get_method("get_GameObject");
|
||||
|
||||
local game_object_type_def = get_game_object_method:get_return_type();
|
||||
local get_transform_method = game_object_type_def:get_method("get_Transform");
|
||||
|
||||
local transform_type_def = get_transform_method:get_return_type();
|
||||
local get_joint_by_name_method = transform_type_def:get_method("getJointByName");
|
||||
|
||||
local joint_type_def = get_joint_by_name_method:get_return_type();
|
||||
local get_position_method = joint_type_def:get_method("get_Position");
|
||||
|
||||
local get_physical_param_method = enemy_character_base_type_def:get_method("get_PhysicalParam");
|
||||
local check_die_method = enemy_character_base_type_def:get_method("checkDie");
|
||||
|
||||
local physical_param_type = get_physical_param_method:get_return_type();
|
||||
local get_vital_method = physical_param_type:get_method("getVital");
|
||||
|
||||
local vital_param_type = get_vital_method:get_return_type();
|
||||
local get_current_method = vital_param_type:get_method("get_Current");
|
||||
local get_max_method = vital_param_type:get_method("get_Max");
|
||||
|
||||
local get_pos_method = enemy_character_base_type_def:get_method("get_Pos");
|
||||
|
||||
function this.new(enemy)
|
||||
local monster = {};
|
||||
monster.is_large = false;
|
||||
|
||||
monster.health = 0;
|
||||
monster.max_health = 999999;
|
||||
monster.max_health = 0;
|
||||
monster.health_percentage = 0;
|
||||
monster.missing_health = 0;
|
||||
monster.capture_health = 0;
|
||||
|
||||
monster.head_joint = nil;
|
||||
|
||||
monster.position = Vector3f.new(0, 0, 0);
|
||||
monster.head_position = Vector3f.new(0, 0, 0);
|
||||
monster.distance = 0;
|
||||
|
||||
monster.name = "Small Monster";
|
||||
@@ -33,57 +103,54 @@ function small_monster.new(enemy)
|
||||
|
||||
monster.UI = {};
|
||||
|
||||
small_monster.init(monster, enemy);
|
||||
small_monster.init_UI(monster);
|
||||
this.init(monster, enemy);
|
||||
this.init_UI(monster);
|
||||
|
||||
small_monster.update_position(enemy, monster);
|
||||
small_monster.update_health(enemy, monster);
|
||||
small_monster.update(enemy, monster);
|
||||
this.update_position(enemy, monster);
|
||||
this.update(enemy, monster);
|
||||
|
||||
if small_monster.list[enemy] == nil then
|
||||
small_monster.list[enemy] = monster;
|
||||
if this.list[enemy] == nil then
|
||||
this.list[enemy] = monster;
|
||||
end
|
||||
|
||||
return monster;
|
||||
end
|
||||
|
||||
function small_monster.get_monster(enemy)
|
||||
local monster = small_monster.list[enemy];
|
||||
function this.get_monster(enemy)
|
||||
local monster = this.list[enemy];
|
||||
if monster == nil then
|
||||
monster = small_monster.new(enemy);
|
||||
monster = this.new(enemy);
|
||||
end
|
||||
|
||||
return monster;
|
||||
end
|
||||
|
||||
local enemy_character_base_type_def = sdk.find_type_definition("snow.enemy.EnemyCharacterBase");
|
||||
local enemy_type_field = enemy_character_base_type_def:get_field("<EnemyType>k__BackingField");
|
||||
|
||||
local message_manager_type_def = sdk.find_type_definition("snow.gui.MessageManager");
|
||||
local get_enemy_name_message_method = message_manager_type_def:get_method("getEnemyNameMessage");
|
||||
|
||||
function small_monster.init(monster, enemy)
|
||||
function this.init(monster, enemy)
|
||||
local enemy_type = enemy_type_field:get_data(enemy);
|
||||
if enemy_type == nil then
|
||||
customization_menu.status = "No enemy type";
|
||||
error_handler.report("small_monster.init", "Failed to Access Data: enemy_type");
|
||||
return;
|
||||
end
|
||||
|
||||
monster.id = enemy_type;
|
||||
|
||||
local enemy_name = get_enemy_name_message_method:call(singletons.message_manager, enemy_type);
|
||||
if enemy_name ~= nil then
|
||||
monster.name = enemy_name;
|
||||
if enemy_name == nil then
|
||||
error_handler.report("small_monster.init", "Failed to Access Data: enemy_name");
|
||||
end
|
||||
|
||||
monster.name = enemy_name;
|
||||
|
||||
this.update_head_joint(enemy, monster);
|
||||
end
|
||||
|
||||
function small_monster.init_UI(monster)
|
||||
function this.init_UI(monster)
|
||||
local cached_config = config.current_config.small_monster_UI;
|
||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||
|
||||
local monster_UI = monster.UI;
|
||||
|
||||
monster_UI.name_label = table_helpers.deep_copy(cached_config.monster_name_label);
|
||||
monster_UI.name_label = utils.table.deep_copy(cached_config.monster_name_label);
|
||||
|
||||
monster_UI.name_label.offset.x = monster_UI.name_label.offset.x * global_scale_modifier;
|
||||
monster_UI.name_label.offset.y = monster_UI.name_label.offset.y * global_scale_modifier;
|
||||
@@ -118,19 +185,7 @@ function small_monster.init_UI(monster)
|
||||
);
|
||||
end
|
||||
|
||||
local physical_param_field = enemy_character_base_type_def:get_field("<PhysicalParam>k__BackingField");
|
||||
local check_die_method = enemy_character_base_type_def:get_method("checkDie");
|
||||
|
||||
local physical_param_type = physical_param_field:get_type();
|
||||
local get_vital_method = physical_param_type:get_method("getVital");
|
||||
|
||||
local vital_param_type = get_vital_method:get_return_type();
|
||||
local get_current_method = vital_param_type:get_method("get_Current");
|
||||
local get_max_method = vital_param_type:get_method("get_Max");
|
||||
|
||||
local get_pos_field = enemy_character_base_type_def:get_method("get_Pos");
|
||||
|
||||
function small_monster.update_position(enemy, monster)
|
||||
function this.update_position(enemy, monster)
|
||||
local cached_config = config.current_config.small_monster_UI;
|
||||
|
||||
if not cached_config.enabled then
|
||||
@@ -141,13 +196,79 @@ function small_monster.update_position(enemy, monster)
|
||||
return;
|
||||
end
|
||||
|
||||
local position = get_pos_field:call(enemy);
|
||||
if position ~= nil then
|
||||
monster.position = position;
|
||||
|
||||
local position = get_pos_method:call(enemy);
|
||||
if position == nil then
|
||||
error_handler.report("small_monster.update_position", "Failed to Access Data: position");
|
||||
end
|
||||
|
||||
monster.position = position;
|
||||
|
||||
this.update_head_position(enemy, monster);
|
||||
end
|
||||
|
||||
function small_monster.update(enemy, monster)
|
||||
function this.update_head_joint(enemy, monster)
|
||||
local mesh = get_ref_mesh_method:call(enemy);
|
||||
if mesh == nil then
|
||||
error_handler.report("small_monster.update_head_joint", "Failed to Access Data: Mesh");
|
||||
return;
|
||||
end
|
||||
|
||||
local game_object = get_game_object_method:call(mesh);
|
||||
if game_object == nil then
|
||||
error_handler.report("small_monster.update_head_joint", "Failed to Access Data: GameObject");
|
||||
return;
|
||||
end
|
||||
|
||||
local transform = get_transform_method:call(game_object);
|
||||
if transform == nil then
|
||||
error_handler.report("small_monster.update_head_joint", "Failed to Access Data: Transform");
|
||||
return;
|
||||
end
|
||||
|
||||
local head_joint = get_joint_by_name_method:call(transform, "Head_00")
|
||||
or get_joint_by_name_method:call(transform, "Head")
|
||||
or get_joint_by_name_method:call(transform, "Head_01")
|
||||
or get_joint_by_name_method:call(transform, "Spine_00")
|
||||
or get_joint_by_name_method:call(transform, "Cog")
|
||||
or get_joint_by_name_method:call(transform, "head")
|
||||
or get_joint_by_name_method:call(transform, "root");
|
||||
|
||||
if head_joint == nil then
|
||||
-- local out = "";
|
||||
-- local joints = transform:get_Joints();
|
||||
|
||||
-- for i = 0, joints:get_Length() - 1 do
|
||||
-- local joint = joints[i];
|
||||
-- local joint_name = joint:get_Name();
|
||||
|
||||
-- out = out .. joint_name .. "\n";
|
||||
-- end
|
||||
|
||||
-- error_handler.report(monster.name, out);
|
||||
|
||||
error_handler.report("small_monster.update_head_joint", "Failed to Access Data: HeadJoint");
|
||||
return;
|
||||
end
|
||||
|
||||
monster.head_joint = head_joint;
|
||||
end
|
||||
|
||||
function this.update_head_position(enemy, monster)
|
||||
if monster.head_joint == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
local head_position = get_position_method:call(monster.head_joint);
|
||||
if head_position == nil then
|
||||
error_handler.report("small_monster.update_head_position", "Failed to Access Data: HeadPosition");
|
||||
return;
|
||||
end
|
||||
|
||||
monster.head_position = head_position;
|
||||
end
|
||||
|
||||
function this.update(enemy, monster)
|
||||
if not config.current_config.small_monster_UI.enabled then
|
||||
return;
|
||||
end
|
||||
@@ -155,39 +276,55 @@ function small_monster.update(enemy, monster)
|
||||
local dead_or_captured = check_die_method:call(enemy);
|
||||
if dead_or_captured ~= nil then
|
||||
monster.dead_or_captured = dead_or_captured;
|
||||
else
|
||||
error_handler.report("small_monster.update", "Failed to Access Data: dead_or_captured");
|
||||
end
|
||||
|
||||
pcall(ailments.update_ailments, enemy, monster);
|
||||
end
|
||||
|
||||
function small_monster.update_health(enemy, monster)
|
||||
function this.update_health(enemy, monster)
|
||||
if not config.current_config.small_monster_UI.enabled or not config.current_config.small_monster_UI.health.visibility then
|
||||
return;
|
||||
end
|
||||
|
||||
local physical_param = physical_param_field:get_data(enemy)
|
||||
local physical_param = get_physical_param_method:call(enemy);
|
||||
if physical_param == nil then
|
||||
customization_menu.status = "No physical param";
|
||||
error_handler.report("small_monster.update_health", "Failed to Access Data: physical_param");
|
||||
return;
|
||||
end
|
||||
|
||||
local vital_param = get_vital_method:call(physical_param, 0, 0);
|
||||
if vital_param == nil then
|
||||
customization_menu.status = "No vital param";
|
||||
error_handler.report("small_monster.update_health", "Failed to Access Data: vital_param");
|
||||
return;
|
||||
end
|
||||
|
||||
monster.health = get_current_method:call(vital_param) or monster.health;
|
||||
monster.max_health = get_max_method:call(vital_param) or monster.max_health;
|
||||
|
||||
monster.missing_health = monster.max_health - monster.health;
|
||||
if monster.max_health ~= 0 then
|
||||
monster.health_percentage = monster.health / monster.max_health;
|
||||
monster.capture_percentage = monster.capture_health / monster.max_health;
|
||||
local health = get_current_method:call(vital_param);
|
||||
if health ~= nil then
|
||||
monster.health = health;
|
||||
else
|
||||
error_handler.report("small_monster.update_health", "Failed to Access Data: health");
|
||||
return;
|
||||
end
|
||||
|
||||
local max_health = get_max_method:call(vital_param);
|
||||
if max_health ~= nil then
|
||||
monster.max_health = max_health;
|
||||
else
|
||||
error_handler.report("small_monster.update_health", "Failed to Access Data: max_health");
|
||||
return;
|
||||
end
|
||||
|
||||
monster.missing_health = max_health - health;
|
||||
if max_health ~= 0 then
|
||||
monster.health_percentage = health / max_health;
|
||||
end
|
||||
|
||||
monster.is_health_initialized = true;
|
||||
end
|
||||
|
||||
function small_monster.draw(monster, cached_config, position_on_screen, opacity_scale)
|
||||
function this.draw(monster, cached_config, position_on_screen, opacity_scale)
|
||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||
|
||||
drawing.draw_label(monster.UI.name_label, position_on_screen, opacity_scale, monster.name);
|
||||
@@ -212,15 +349,15 @@ function small_monster.draw(monster, cached_config, position_on_screen, opacity_
|
||||
ailment_buildup.draw(monster, monster.UI.ailment_buildup_UI, cached_config, ailment_buildups_position_on_screen, opacity_scale);
|
||||
end
|
||||
|
||||
function small_monster.init_list()
|
||||
small_monster.list = {};
|
||||
function this.init_list()
|
||||
this.list = {};
|
||||
end
|
||||
|
||||
function small_monster.init_module()
|
||||
function this.init_dependencies()
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
health_UI_entity = require("MHR_Overlay.UI.UI_Entities.health_UI_entity");
|
||||
stamina_UI_entity = require("MHR_Overlay.UI.UI_Entities.stamina_UI_entity");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
@@ -229,6 +366,10 @@ function small_monster.init_module()
|
||||
ailment_UI_entity = require("MHR_Overlay.UI.UI_Entities.ailment_UI_entity");
|
||||
ailment_buildup = require("MHR_Overlay.Monsters.ailment_buildup");
|
||||
ailment_buildup_UI_entity = require("MHR_Overlay.UI.UI_Entities.ailment_buildup_UI_entity");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return small_monster;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
local ailment_buildups_customization = {};
|
||||
local this = {};
|
||||
|
||||
local table_helpers;
|
||||
local utils;
|
||||
local config;
|
||||
local screen;
|
||||
local player;
|
||||
local players;
|
||||
local large_monster;
|
||||
local small_monster;
|
||||
local env_creature;
|
||||
@@ -14,10 +14,99 @@ local keyboard;
|
||||
local customization_menu;
|
||||
local label_customization;
|
||||
local bar_customization;
|
||||
local error_handler;
|
||||
|
||||
function ailment_buildups_customization.draw(cached_config)
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
this.ailment_buildups_sorting_types = {};
|
||||
this.displayed_ailment_buildups_sorting_types = {};
|
||||
|
||||
this.highlighted_buildup_bar_types = {};
|
||||
this.displayed_highlighted_buildup_bar_types = {};
|
||||
|
||||
this.buildup_bar_relative_types = {};
|
||||
this.displayed_buildup_bar_relative_types = {};
|
||||
|
||||
function this.init()
|
||||
local default = language.default_language.customization_menu;
|
||||
local current = language.current_language.customization_menu;
|
||||
|
||||
this.ailment_buildups_sorting_types =
|
||||
{
|
||||
default.normal,
|
||||
default.buildup,
|
||||
default.buildup_percentage
|
||||
};
|
||||
|
||||
this.displayed_ailment_buildups_sorting_types =
|
||||
{
|
||||
current.normal,
|
||||
current.buildup,
|
||||
current.buildup_percentage
|
||||
};
|
||||
|
||||
this.highlighted_buildup_bar_types =
|
||||
{
|
||||
default.me,
|
||||
default.top_buildup,
|
||||
default.none
|
||||
};
|
||||
|
||||
this.displayed_highlighted_buildup_bar_types =
|
||||
{
|
||||
current.me,
|
||||
current.top_buildup,
|
||||
current.none
|
||||
};
|
||||
|
||||
this.buildup_bar_relative_types =
|
||||
{
|
||||
default.total_buildup,
|
||||
default.top_buildup
|
||||
};
|
||||
|
||||
|
||||
this.displayed_buildup_bar_relative_types =
|
||||
{
|
||||
current.total_buildup,
|
||||
current.top_buildup
|
||||
};
|
||||
end
|
||||
|
||||
function this.draw(cached_config)
|
||||
local changed = false;
|
||||
local config_changed = false;
|
||||
local index = 1;
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.ailment_buildups) then
|
||||
changed, cached_config.visibility = imgui.checkbox(
|
||||
@@ -70,24 +159,24 @@ function ailment_buildups_customization.draw(cached_config)
|
||||
if imgui.tree_node(language.current_language.customization_menu.settings) then
|
||||
changed, index = imgui.combo(
|
||||
language.current_language.customization_menu.highlighted_bar,
|
||||
table_helpers.find_index(customization_menu.highlighted_buildup_bar_types, cached_config.settings.highlighted_bar),
|
||||
customization_menu.displayed_highlighted_buildup_bar_types);
|
||||
utils.table.find_index(this.highlighted_buildup_bar_types, cached_config.settings.highlighted_bar),
|
||||
this.displayed_highlighted_buildup_bar_types);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
if changed then
|
||||
cached_config.settings.highlighted_bar = customization_menu.highlighted_buildup_bar_types[index];
|
||||
cached_config.settings.highlighted_bar = this.highlighted_buildup_bar_types[index];
|
||||
end
|
||||
|
||||
changed, index = imgui.combo(
|
||||
language.current_language.customization_menu.buildup_bars_are_relative_to,
|
||||
table_helpers.find_index(customization_menu.displayed_buildup_bar_relative_types, cached_config.settings.buildup_bar_relative_to),
|
||||
customization_menu.displayed_buildup_bar_relative_types);
|
||||
utils.table.find_index(this.displayed_buildup_bar_relative_types, cached_config.settings.buildup_bar_relative_to),
|
||||
this.displayed_buildup_bar_relative_types);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
if changed then
|
||||
cached_config.settings.buildup_bar_relative_to = customization_menu.displayed_buildup_bar_relative_types[index];
|
||||
cached_config.settings.buildup_bar_relative_to = this.displayed_buildup_bar_relative_types[index];
|
||||
end
|
||||
|
||||
changed, cached_config.settings.time_limit = imgui.drag_float(
|
||||
@@ -101,13 +190,13 @@ function ailment_buildups_customization.draw(cached_config)
|
||||
if imgui.tree_node(language.current_language.customization_menu.sorting) then
|
||||
changed, index = imgui.combo(
|
||||
language.current_language.customization_menu.type,
|
||||
table_helpers.find_index(customization_menu.ailment_buildups_sorting_types, cached_config.sorting.type),
|
||||
customization_menu.displayed_ailment_buildups_sorting_types);
|
||||
utils.table.find_index(this.ailment_buildups_sorting_types, cached_config.sorting.type),
|
||||
this.displayed_ailment_buildups_sorting_types);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
if changed then
|
||||
cached_config.sorting.type = customization_menu.ailment_buildups_sorting_types[index];
|
||||
cached_config.sorting.type = this.ailment_buildups_sorting_types[index];
|
||||
end
|
||||
|
||||
changed, cached_config.sorting.reversed_order = imgui.checkbox(
|
||||
@@ -137,90 +226,8 @@ function ailment_buildups_customization.draw(cached_config)
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.ailment_name_label) then
|
||||
changed, cached_config.ailment_name_label.visibility =
|
||||
imgui.checkbox(language.current_language.customization_menu.visible,
|
||||
cached_config.ailment_name_label.visibility);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.include) then
|
||||
changed, cached_config.ailment_name_label.include.ailment_name = imgui.checkbox(
|
||||
language.current_language.customization_menu.ailment_name,
|
||||
cached_config.ailment_name_label.include.ailment_name);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.ailment_name_label.include.activation_count = imgui.checkbox(
|
||||
language.current_language.customization_menu.activation_count,
|
||||
cached_config.ailment_name_label.include.activation_count);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.offset) then
|
||||
changed, cached_config.ailment_name_label.offset.x = imgui.drag_float(
|
||||
language.current_language.customization_menu.x, cached_config.ailment_name_label.offset.x,
|
||||
0.1, -screen.width, screen.width, "%.1f");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.ailment_name_label.offset.y = imgui.drag_float(
|
||||
language.current_language.customization_menu.y, cached_config.ailment_name_label.offset.y,
|
||||
0.1, -screen.height, screen.height, "%.1f");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.color) then
|
||||
changed, cached_config.ailment_name_label.color = imgui.color_picker_argb(
|
||||
"", cached_config.ailment_name_label.color, customization_menu.color_picker_flags);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.shadow) then
|
||||
changed, cached_config.ailment_name_label.shadow.visibility = imgui.checkbox(
|
||||
language.current_language.customization_menu.visible, cached_config.ailment_name_label.shadow.visibility);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.offset) then
|
||||
changed, cached_config.ailment_name_label.shadow.offset.x = imgui.drag_float(
|
||||
language.current_language.customization_menu.x, cached_config.ailment_name_label.shadow.offset.x,
|
||||
0.1, -screen.width, screen.width, "%.1f");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.ailment_name_label.shadow.offset.y = imgui.drag_float(
|
||||
language.current_language.customization_menu.y, cached_config.ailment_name_label.shadow.offset.y,
|
||||
0.1, -screen.height, screen.height, "%.1f");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.color) then
|
||||
changed, cached_config.ailment_name_label.shadow.color = imgui.color_picker_argb(
|
||||
"", cached_config.ailment_name_label.shadow.color, customization_menu.color_picker_flags);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
changed = label_customization.draw(language.current_language.customization_menu.ailment_name_label, cached_config.ailment_name_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = label_customization.draw(language.current_language.customization_menu.player_name_label, cached_config.player_name_label);
|
||||
config_changed = config_changed or changed;
|
||||
@@ -249,12 +256,12 @@ function ailment_buildups_customization.draw(cached_config)
|
||||
return config_changed;
|
||||
end
|
||||
|
||||
function ailment_buildups_customization.init_module()
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
function this.init_dependencies()
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
player = require("MHR_Overlay.Damage_Meter.player");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
small_monster = require("MHR_Overlay.Monsters.small_monster");
|
||||
large_monster = require("MHR_Overlay.Monsters.large_monster");
|
||||
env_creature = require("MHR_Overlay.Endemic_Life.env_creature");
|
||||
@@ -265,6 +272,10 @@ function ailment_buildups_customization.init_module()
|
||||
|
||||
label_customization = require("MHR_Overlay.UI.Customizations.label_customization");
|
||||
bar_customization = require("MHR_Overlay.UI.Customizations.bar_customization");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return ailment_buildups_customization;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -1,9 +1,9 @@
|
||||
local ailments_customization = {};
|
||||
local this = {};
|
||||
|
||||
local table_helpers;
|
||||
local utils;
|
||||
local config;
|
||||
local screen;
|
||||
local player;
|
||||
local players;
|
||||
local large_monster;
|
||||
local small_monster;
|
||||
local env_creature;
|
||||
@@ -14,10 +14,65 @@ local keyboard;
|
||||
local customization_menu;
|
||||
local label_customization;
|
||||
local bar_customization;
|
||||
local error_handler;
|
||||
|
||||
function ailments_customization.draw(cached_config)
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
this.ailments_sorting_types = {};
|
||||
this.displayed_ailments_sorting_types = {};
|
||||
|
||||
|
||||
function this.init()
|
||||
local default = language.default_language.customization_menu;
|
||||
local current = language.current_language.customization_menu;
|
||||
|
||||
this.ailments_sorting_types = {
|
||||
default.normal,
|
||||
default.buildup,
|
||||
default.buildup_percentage
|
||||
};
|
||||
|
||||
this.displayed_ailments_sorting_types = {
|
||||
current.normal,
|
||||
current.buildup,
|
||||
current.buildup_percentage
|
||||
};
|
||||
end
|
||||
|
||||
function this.draw(cached_config)
|
||||
local changed = false;
|
||||
local config_changed = false;
|
||||
local index = 0;
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.ailments) then
|
||||
changed, cached_config.visibility = imgui.checkbox(
|
||||
@@ -110,13 +165,13 @@ function ailments_customization.draw(cached_config)
|
||||
if imgui.tree_node(language.current_language.customization_menu.sorting) then
|
||||
changed, index = imgui.combo(
|
||||
language.current_language.customization_menu.type,
|
||||
table_helpers.find_index(customization_menu.ailments_sorting_types, cached_config.sorting.type),
|
||||
customization_menu.displayed_ailments_sorting_types);
|
||||
utils.table.find_index(this.ailments_sorting_types, cached_config.sorting.type),
|
||||
this.displayed_ailments_sorting_types);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
if changed then
|
||||
cached_config.sorting.type = customization_menu.ailments_sorting_types[index];
|
||||
cached_config.sorting.type = this.ailments_sorting_types[index];
|
||||
end
|
||||
|
||||
changed, cached_config.sorting.reversed_order = imgui.checkbox(
|
||||
@@ -332,12 +387,12 @@ function ailments_customization.draw(cached_config)
|
||||
return config_changed;
|
||||
end
|
||||
|
||||
function ailments_customization.init_module()
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
function this.init_dependencies()
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
player = require("MHR_Overlay.Damage_Meter.player");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
small_monster = require("MHR_Overlay.Monsters.small_monster");
|
||||
large_monster = require("MHR_Overlay.Monsters.large_monster");
|
||||
env_creature = require("MHR_Overlay.Endemic_Life.env_creature");
|
||||
@@ -347,6 +402,10 @@ function ailments_customization.init_module()
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
label_customization = require("MHR_Overlay.UI.Customizations.label_customization");
|
||||
bar_customization = require("MHR_Overlay.UI.Customizations.bar_customization");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return ailments_customization;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -1,9 +1,9 @@
|
||||
local bar_customization = {};
|
||||
local this = {};
|
||||
|
||||
local table_helpers;
|
||||
local utils;
|
||||
local config;
|
||||
local screen;
|
||||
local player;
|
||||
local players;
|
||||
local large_monster;
|
||||
local small_monster;
|
||||
local env_creature;
|
||||
@@ -13,73 +13,156 @@ local time_UI;
|
||||
local keyboard;
|
||||
local customization_menu;
|
||||
local line_customization;
|
||||
local error_handler;
|
||||
|
||||
function bar_customization.draw(bar_name, bar)
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
local outline_styles = {};
|
||||
local displayed_outline_styles = {};
|
||||
|
||||
local directions = {};
|
||||
local displayed_directions = {};
|
||||
|
||||
function this.init()
|
||||
local default = language.default_language.customization_menu;
|
||||
local current = language.current_language.customization_menu;
|
||||
|
||||
outline_styles = {
|
||||
default.inside,
|
||||
default.center,
|
||||
default.outside
|
||||
};
|
||||
|
||||
displayed_outline_styles = {
|
||||
current.inside,
|
||||
current.center,
|
||||
current.outside
|
||||
};
|
||||
|
||||
directions = {
|
||||
default.left_to_right,
|
||||
default.right_to_left,
|
||||
default.top_to_bottom,
|
||||
default.bottom_to_top
|
||||
};
|
||||
|
||||
displayed_directions = {
|
||||
current.left_to_right,
|
||||
current.right_to_left,
|
||||
current.top_to_bottom,
|
||||
current.bottom_to_top
|
||||
};
|
||||
end
|
||||
|
||||
function this.draw(bar_name, bar)
|
||||
if bar == nil then
|
||||
return false;
|
||||
end
|
||||
|
||||
local cached_language = language.current_language.customization_menu;
|
||||
|
||||
local bar_changed = false;
|
||||
local changed = false;
|
||||
local index = 1;
|
||||
|
||||
if imgui.tree_node(bar_name) then
|
||||
changed, bar.visibility = imgui.checkbox(language.current_language.customization_menu.visible
|
||||
changed, bar.visibility = imgui.checkbox(cached_language.visible
|
||||
, bar.visibility);
|
||||
bar_changed = bar_changed or changed;
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.offset) then
|
||||
changed, bar.offset.x = imgui.drag_float(language.current_language.customization_menu.x,
|
||||
if imgui.tree_node(cached_language.settings) then
|
||||
local fill_direction_index = utils.table.find_index(directions, bar.settings.fill_direction);
|
||||
changed, fill_direction_index = imgui.combo(cached_language.fill_direction, fill_direction_index, displayed_directions);
|
||||
|
||||
bar_changed = bar_changed or changed;
|
||||
|
||||
if changed then
|
||||
bar.settings.fill_direction = directions[fill_direction_index];
|
||||
end
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(cached_language.offset) then
|
||||
changed, bar.offset.x = imgui.drag_float(cached_language.x,
|
||||
bar.offset.x, 0.1, -screen.width, screen.width, "%.1f");
|
||||
bar_changed = bar_changed or changed;
|
||||
|
||||
changed, bar.offset.y = imgui.drag_float(language.current_language.customization_menu.y,
|
||||
changed, bar.offset.y = imgui.drag_float(cached_language.y,
|
||||
bar.offset.y, 0.1, -screen.height, screen.height, "%.1f");
|
||||
bar_changed = bar_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.size) then
|
||||
changed, bar.size.width = imgui.drag_float(language.current_language.customization_menu.width,
|
||||
if imgui.tree_node(cached_language.size) then
|
||||
changed, bar.size.width = imgui.drag_float(cached_language.width,
|
||||
bar.size.width, 0.1, 0, screen.width, "%.1f");
|
||||
bar_changed = bar_changed or changed;
|
||||
|
||||
changed, bar.size.height = imgui.drag_float(language.current_language.customization_menu.height,
|
||||
changed, bar.size.height = imgui.drag_float(cached_language.height,
|
||||
bar.size.height, 0.1, 0, screen.height, "%.1f");
|
||||
bar_changed = bar_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.outline) then
|
||||
changed, bar.outline.visibility = imgui.checkbox(language.current_language.customization_menu.visible
|
||||
if imgui.tree_node(cached_language.outline) then
|
||||
changed, bar.outline.visibility = imgui.checkbox(cached_language.visible
|
||||
, bar.outline.visibility);
|
||||
bar_changed = bar_changed or changed;
|
||||
|
||||
changed, bar.outline.thickness = imgui.drag_float(language.current_language.customization_menu.thickness,
|
||||
changed, bar.outline.thickness = imgui.drag_float(cached_language.thickness,
|
||||
bar.outline.thickness, 0.1, 0, screen.width, "%.1f");
|
||||
bar_changed = bar_changed or changed;
|
||||
|
||||
changed, bar.outline.offset = imgui.drag_float(language.current_language.customization_menu.offset,
|
||||
changed, bar.outline.offset = imgui.drag_float(cached_language.offset,
|
||||
bar.outline.offset, 0.1, -screen.height, screen.height, "%.1f");
|
||||
bar_changed = bar_changed or changed;
|
||||
|
||||
|
||||
changed, index = imgui.combo(language.current_language.customization_menu.style,
|
||||
table_helpers.find_index(customization_menu.outline_styles,
|
||||
bar.outline.style),
|
||||
customization_menu.displayed_outline_styles);
|
||||
changed, index = imgui.combo(cached_language.style,
|
||||
utils.table.find_index(outline_styles, bar.outline.style),
|
||||
displayed_outline_styles);
|
||||
bar_changed = bar_changed or changed;
|
||||
|
||||
if changed then
|
||||
bar.outline.style = customization_menu.outline_styles[index];
|
||||
bar.outline.style = outline_styles[index];
|
||||
end
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.colors) then
|
||||
if imgui.tree_node(cached_language.colors) then
|
||||
local colors = nil;
|
||||
if bar.colors ~= nil then
|
||||
colors = bar.colors;
|
||||
@@ -87,7 +170,7 @@ function bar_customization.draw(bar_name, bar)
|
||||
colors = bar.normal_colors;
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.foreground) then
|
||||
if imgui.tree_node(cached_language.foreground) then
|
||||
changed, colors.foreground = imgui.color_picker_argb("", colors.foreground,
|
||||
customization_menu.color_picker_flags);
|
||||
bar_changed = bar_changed or changed;
|
||||
@@ -95,7 +178,7 @@ function bar_customization.draw(bar_name, bar)
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.background) then
|
||||
if imgui.tree_node(cached_language.background) then
|
||||
changed, colors.background = imgui.color_picker_argb("", colors.background,
|
||||
customization_menu.color_picker_flags);
|
||||
bar_changed = bar_changed or changed;
|
||||
@@ -103,7 +186,7 @@ function bar_customization.draw(bar_name, bar)
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.outline) then
|
||||
if imgui.tree_node(cached_language.outline) then
|
||||
changed, colors.outline = imgui.color_picker_argb("", colors.outline,
|
||||
customization_menu.color_picker_flags);
|
||||
bar_changed = bar_changed or changed;
|
||||
@@ -112,8 +195,8 @@ function bar_customization.draw(bar_name, bar)
|
||||
end
|
||||
|
||||
if bar.capture_colors ~= nil then
|
||||
if imgui.tree_node(language.current_language.customization_menu.monster_can_be_captured) then
|
||||
if imgui.tree_node(language.current_language.customization_menu.foreground) then
|
||||
if imgui.tree_node(cached_language.monster_can_be_captured) then
|
||||
if imgui.tree_node(cached_language.foreground) then
|
||||
changed, bar.capture_colors.foreground = imgui.color_picker_argb("",
|
||||
bar.capture_colors.foreground
|
||||
,
|
||||
@@ -123,7 +206,7 @@ function bar_customization.draw(bar_name, bar)
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.background) then
|
||||
if imgui.tree_node(cached_language.background) then
|
||||
changed, bar.capture_colors.background = imgui.color_picker_argb("",
|
||||
bar.capture_colors.background
|
||||
,
|
||||
@@ -133,7 +216,7 @@ function bar_customization.draw(bar_name, bar)
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.outline) then
|
||||
if imgui.tree_node(cached_language.outline) then
|
||||
changed, bar.capture_colors.outline = imgui.color_picker_argb("",
|
||||
bar.capture_colors.outline
|
||||
,
|
||||
@@ -150,7 +233,7 @@ function bar_customization.draw(bar_name, bar)
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
changed = line_customization.draw(language.current_language.customization_menu.capture_line, bar.capture_line);
|
||||
changed = line_customization.draw(cached_language.capture_line, bar.capture_line);
|
||||
bar_changed = bar_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
@@ -159,12 +242,12 @@ function bar_customization.draw(bar_name, bar)
|
||||
return bar_changed;
|
||||
end
|
||||
|
||||
function bar_customization.init_module()
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
function this.init_dependencies()
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
player = require("MHR_Overlay.Damage_Meter.player");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
small_monster = require("MHR_Overlay.Monsters.small_monster");
|
||||
large_monster = require("MHR_Overlay.Monsters.large_monster");
|
||||
env_creature = require("MHR_Overlay.Endemic_Life.env_creature");
|
||||
@@ -173,6 +256,10 @@ function bar_customization.init_module()
|
||||
keyboard = require("MHR_Overlay.Game_Handler.keyboard");
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
line_customization = require("MHR_Overlay.UI.Customizations.line_customization");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return bar_customization;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
local body_parts_customization = {};
|
||||
local this = {};
|
||||
|
||||
local table_helpers;
|
||||
local utils;
|
||||
local config;
|
||||
local screen;
|
||||
local player;
|
||||
local players;
|
||||
local large_monster;
|
||||
local small_monster;
|
||||
local env_creature;
|
||||
@@ -14,161 +14,313 @@ local keyboard;
|
||||
local customization_menu;
|
||||
local label_customization;
|
||||
local bar_customization;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
this.large_monster_UI_parts_sorting_types = {};
|
||||
this.displayed_large_monster_UI_parts_sorting_types = {};
|
||||
|
||||
this.large_monster_UI_parts_filter_types = {};
|
||||
this.displayed_large_monster_UI_parts_filter_types = {};
|
||||
|
||||
function this.init()
|
||||
local default = language.default_language.customization_menu;
|
||||
local current = language.current_language.customization_menu;
|
||||
|
||||
this.large_monster_UI_parts_sorting_types =
|
||||
{
|
||||
default.normal,
|
||||
default.health,
|
||||
default.health_percentage,
|
||||
default.flinch_count,
|
||||
default.break_health,
|
||||
default.break_health_percentage,
|
||||
default.break_count,
|
||||
default.loss_health,
|
||||
default.loss_health_percentage,
|
||||
default.anomaly_health,
|
||||
default.anomaly_health_percentage
|
||||
};
|
||||
|
||||
this.displayed_large_monster_UI_parts_sorting_types =
|
||||
{
|
||||
current.normal,
|
||||
current.health,
|
||||
current.health_percentage,
|
||||
current.flinch_count,
|
||||
current.break_health,
|
||||
current.break_health_percentage,
|
||||
current.break_count,
|
||||
current.loss_health,
|
||||
current.loss_health_percentage,
|
||||
current.anomaly_health,
|
||||
current.anomaly_health_percentage
|
||||
};
|
||||
|
||||
this.large_monster_UI_parts_filter_types =
|
||||
{
|
||||
default.current_state,
|
||||
default.default_state
|
||||
};
|
||||
|
||||
this.displayed_large_monster_UI_parts_filter_types =
|
||||
{
|
||||
current.current_state,
|
||||
current.default_state
|
||||
};
|
||||
end
|
||||
|
||||
function this.draw(cached_config)
|
||||
local cached_language = language.current_language.customization_menu;
|
||||
|
||||
function body_parts_customization.draw(cached_config)
|
||||
local changed = false;
|
||||
local config_changed = false;
|
||||
local index = 0;
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.body_parts) then
|
||||
if imgui.tree_node(cached_language.body_parts) then
|
||||
changed, cached_config.visibility = imgui.checkbox(
|
||||
language.current_language.customization_menu.visible, cached_config.visibility);
|
||||
cached_language.visible, cached_config.visibility);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.offset) then
|
||||
if imgui.tree_node(cached_language.offset) then
|
||||
changed, cached_config.offset.x = imgui.drag_float(
|
||||
language.current_language.customization_menu.x, cached_config.offset.x, 0.1, -screen.width, screen.width, "%.1f");
|
||||
cached_language.x, cached_config.offset.x, 0.1, -screen.width, screen.width, "%.1f");
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.offset.y = imgui.drag_float(
|
||||
language.current_language.customization_menu.y, cached_config.offset.y, 0.1, -screen.height, screen.height, "%.1f");
|
||||
cached_language.y, cached_config.offset.y, 0.1, -screen.height, screen.height, "%.1f");
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.spacing) then
|
||||
if imgui.tree_node(cached_language.spacing) then
|
||||
changed, cached_config.spacing.x = imgui.drag_float(
|
||||
language.current_language.customization_menu.x, cached_config.spacing.x, 0.1, -screen.width, screen.width, "%.1f");
|
||||
cached_language.x, cached_config.spacing.x, 0.1, -screen.width, screen.width, "%.1f");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.spacing.y = imgui.drag_float(
|
||||
language.current_language.customization_menu.y, cached_config.spacing.y, 0.1, -screen.height, screen.height, "%.1f");
|
||||
cached_language.y, cached_config.spacing.y, 0.1, -screen.height, screen.height, "%.1f");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.settings) then
|
||||
if imgui.tree_node(cached_language.settings) then
|
||||
changed, cached_config.settings.hide_undamaged_parts = imgui.checkbox(
|
||||
language.current_language.customization_menu.hide_undamaged_parts, cached_config.settings.hide_undamaged_parts);
|
||||
cached_language.hide_undamaged_parts, cached_config.settings.hide_undamaged_parts);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.settings.render_inactive_anomaly_cores = imgui.checkbox(
|
||||
cached_language.render_inactive_anomaly_cores, cached_config.settings.render_inactive_anomaly_cores);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, index = imgui.combo(cached_language.filter_mode,
|
||||
utils.table.find_index(this.large_monster_UI_parts_filter_types, cached_config.settings.filter_mode),
|
||||
this.displayed_large_monster_UI_parts_filter_types);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
if changed then
|
||||
cached_config.settings.filter_mode = this.large_monster_UI_parts_filter_types[index];
|
||||
end
|
||||
|
||||
changed, cached_config.settings.time_limit = imgui.drag_float(
|
||||
language.current_language.customization_menu.time_limit, cached_config.settings.time_limit, 0.1, 0, 99999, "%.1f");
|
||||
cached_language.time_limit, cached_config.settings.time_limit, 0.1, 0, 99999, "%.1f");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.sorting) then
|
||||
if imgui.tree_node(cached_language.sorting) then
|
||||
changed, index = imgui.combo(
|
||||
language.current_language.customization_menu.type,
|
||||
table_helpers.find_index(customization_menu.large_monster_UI_parts_sorting_types, cached_config.sorting.type),
|
||||
customization_menu.displayed_monster_UI_parts_sorting_types);
|
||||
cached_language.type,
|
||||
utils.table.find_index(this.large_monster_UI_parts_sorting_types, cached_config.sorting.type),
|
||||
this.displayed_large_monster_UI_parts_sorting_types);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
if changed then
|
||||
cached_config.sorting.type = customization_menu.large_monster_UI_parts_sorting_types[index];
|
||||
cached_config.sorting.type = this.large_monster_UI_parts_sorting_types[index];
|
||||
end
|
||||
|
||||
changed, cached_config.sorting.reversed_order = imgui.checkbox(
|
||||
language.current_language.customization_menu.reversed_order, cached_config.sorting.reversed_order);
|
||||
cached_language.reversed_order, cached_config.sorting.reversed_order);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.filter) then
|
||||
changed, cached_config.filter.health_break_severe = imgui.checkbox(
|
||||
language.current_language.customization_menu.health_break_severe_filter, cached_config.filter.health_break_severe);
|
||||
if imgui.tree_node(cached_language.filter) then
|
||||
changed, cached_config.filter.health_break_sever_anomaly = imgui.checkbox(
|
||||
cached_language.health_break_sever_anomaly_filter, cached_config.filter.health_break_sever_anomaly);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
|
||||
|
||||
changed, cached_config.filter.health_break_sever = imgui.checkbox(
|
||||
cached_language.health_break_sever_filter, cached_config.filter.health_break_sever);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.filter.health_break_anomaly = imgui.checkbox(
|
||||
cached_language.health_break_anomaly_filter, cached_config.filter.health_break_anomaly);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.filter.health_sever_anomaly = imgui.checkbox(
|
||||
cached_language.health_sever_anomaly_filter, cached_config.filter.health_sever_anomaly);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.filter.break_sever_anomaly = imgui.checkbox(
|
||||
cached_language.break_sever_anomaly_filter, cached_config.filter.break_sever_anomaly);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
|
||||
|
||||
changed, cached_config.filter.health_break = imgui.checkbox(
|
||||
language.current_language.customization_menu.health_break_filter, cached_config.filter.health_break);
|
||||
cached_language.health_break_filter, cached_config.filter.health_break);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.filter.health_severe = imgui.checkbox(
|
||||
language.current_language.customization_menu.health_severe_filter, cached_config.filter.health_severe);
|
||||
changed, cached_config.filter.health_sever = imgui.checkbox(
|
||||
cached_language.health_sever_filter, cached_config.filter.health_sever);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.filter.health_anomaly = imgui.checkbox(
|
||||
cached_language.health_anomaly_filter, cached_config.filter.health_anomaly);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
|
||||
|
||||
changed, cached_config.filter.break_sever = imgui.checkbox(
|
||||
cached_language.break_sever_filter, cached_config.filter.break_sever);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.filter.break_anomaly = imgui.checkbox(
|
||||
cached_language.break_anomaly_filter, cached_config.filter.break_anomaly);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.filter.sever_anomaly = imgui.checkbox(
|
||||
cached_language.sever_anomaly_filter, cached_config.filter.sever_anomaly);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
|
||||
|
||||
changed, cached_config.filter.health = imgui.checkbox(
|
||||
language.current_language.customization_menu.health_filter, cached_config.filter.health);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.filter.break_severe = imgui.checkbox(
|
||||
language.current_language.customization_menu.break_severe_filter, cached_config.filter.break_severe);
|
||||
cached_language.health_filter, cached_config.filter.health);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.filter.break_ = imgui.checkbox(
|
||||
language.current_language.customization_menu.break_filter, cached_config.filter.break_);
|
||||
cached_language.break_filter, cached_config.filter.break_);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.filter.severe = imgui.checkbox(
|
||||
language.current_language.customization_menu.severe_filter, cached_config.filter.severe);
|
||||
changed, cached_config.filter.sever = imgui.checkbox(
|
||||
cached_language.sever_filter, cached_config.filter.sever);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.filter.anomaly = imgui.checkbox(
|
||||
cached_language.anomaly_filter, cached_config.filter.anomaly);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.part_name_label) then
|
||||
if imgui.tree_node(cached_language.part_name_label) then
|
||||
changed, cached_config.part_name_label.visibility = imgui.checkbox(
|
||||
language.current_language.customization_menu.visible, cached_config.part_name_label.visibility);
|
||||
cached_language.visible, cached_config.part_name_label.visibility);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.include) then
|
||||
if imgui.tree_node(cached_language.include) then
|
||||
changed, cached_config.part_name_label.include.part_name = imgui.checkbox(
|
||||
language.current_language.customization_menu.part_name, cached_config.part_name_label.include.part_name);
|
||||
cached_language.part_name, cached_config.part_name_label.include.part_name);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.part_name_label.include.flinch_count = imgui.checkbox(
|
||||
language.current_language.customization_menu.flinch_count, cached_config.part_name_label.include.flinch_count);
|
||||
cached_language.flinch_count, cached_config.part_name_label.include.flinch_count);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.part_name_label.include.break_count = imgui.checkbox(
|
||||
language.current_language.customization_menu.break_count, cached_config.part_name_label.include.break_count);
|
||||
cached_language.break_count, cached_config.part_name_label.include.break_count);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.part_name_label.include.break_max_count = imgui.checkbox(
|
||||
language.current_language.customization_menu.break_max_count, cached_config.part_name_label.include.break_max_count);
|
||||
cached_language.break_max_count, cached_config.part_name_label.include.break_max_count);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.offset) then
|
||||
if imgui.tree_node(cached_language.offset) then
|
||||
changed, cached_config.part_name_label.offset.x = imgui.drag_float(
|
||||
language.current_language.customization_menu.x, cached_config.part_name_label.offset.x, 0.1, -screen.width, screen.width, "%.1f");
|
||||
cached_language.x, cached_config.part_name_label.offset.x, 0.1, -screen.width, screen.width, "%.1f");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.part_name_label.offset.y = imgui.drag_float(
|
||||
language.current_language.customization_menu.y, cached_config.part_name_label.offset.y, 0.1, -screen.height, screen.height, "%.1f");
|
||||
cached_language.y, cached_config.part_name_label.offset.y, 0.1, -screen.height, screen.height, "%.1f");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.color) then
|
||||
if imgui.tree_node(cached_language.color) then
|
||||
changed, cached_config.part_name_label.color = imgui.color_picker_argb(
|
||||
"", cached_config.part_name_label.color, customization_menu.color_picker_flags);
|
||||
|
||||
@@ -177,21 +329,21 @@ function body_parts_customization.draw(cached_config)
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.shadow) then
|
||||
if imgui.tree_node(cached_language.shadow) then
|
||||
changed, cached_config.part_name_label.shadow.visibility = imgui.checkbox(
|
||||
language.current_language.customization_menu.visible, cached_config.part_name_label.shadow.visibility);
|
||||
cached_language.visible, cached_config.part_name_label.shadow.visibility);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.offset) then
|
||||
if imgui.tree_node(cached_language.offset) then
|
||||
changed, cached_config.part_name_label.shadow.offset.x = imgui.drag_float(
|
||||
language.current_language.customization_menu.x, cached_config.part_name_label.shadow.offset.x,
|
||||
cached_language.x, cached_config.part_name_label.shadow.offset.x,
|
||||
0.1, -screen.width, screen.width, "%.1f");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.part_name_label.shadow.offset.y = imgui.drag_float(
|
||||
language.current_language.customization_menu.y, cached_config.part_name_label.shadow.offset.y,
|
||||
cached_language.y, cached_config.part_name_label.shadow.offset.y,
|
||||
0.1, -screen.height, screen.height, "%.1f");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
@@ -199,7 +351,7 @@ function body_parts_customization.draw(cached_config)
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.color) then
|
||||
if imgui.tree_node(cached_language.color) then
|
||||
changed, cached_config.part_name_label.shadow.color = imgui.color_picker_argb(
|
||||
"",cached_config.part_name_label.shadow.color, customization_menu.color_picker_flags);
|
||||
|
||||
@@ -214,106 +366,141 @@ function body_parts_customization.draw(cached_config)
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.part_health) then
|
||||
if imgui.tree_node(cached_language.part_health) then
|
||||
changed, cached_config.part_health.visibility = imgui.checkbox(
|
||||
language.current_language.customization_menu.visible, cached_config.part_health.visibility);
|
||||
cached_language.visible, cached_config.part_health.visibility);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.offset) then
|
||||
if imgui.tree_node(cached_language.offset) then
|
||||
changed, cached_config.part_health.offset.x = imgui.drag_float(
|
||||
language.current_language.customization_menu.x, cached_config.part_health.offset.x, 0.1, -screen.width, screen.width, "%.1f");
|
||||
cached_language.x, cached_config.part_health.offset.x, 0.1, -screen.width, screen.width, "%.1f");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.part_health.offset.y = imgui.drag_float(
|
||||
language.current_language.customization_menu.y, cached_config.part_health.offset.y, 0.1, -screen.height, screen.height, "%.1f");
|
||||
cached_language.y, cached_config.part_health.offset.y, 0.1, -screen.height, screen.height, "%.1f");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
changed = label_customization.draw(language.current_language.customization_menu.text_label, cached_config.part_health.text_label);
|
||||
changed = label_customization.draw(cached_language.text_label, cached_config.part_health.text_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = label_customization.draw(language.current_language.customization_menu.value_label, cached_config.part_health.value_label);
|
||||
changed = label_customization.draw(cached_language.value_label, cached_config.part_health.value_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = label_customization.draw(language.current_language.customization_menu.percentage_label, cached_config.part_health.percentage_label);
|
||||
changed = label_customization.draw(cached_language.percentage_label, cached_config.part_health.percentage_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = bar_customization.draw(language.current_language.customization_menu.bar, cached_config.part_health.bar);
|
||||
changed = bar_customization.draw(cached_language.bar, cached_config.part_health.bar);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.break_health) then
|
||||
if imgui.tree_node(cached_language.break_health) then
|
||||
changed, cached_config.part_break.visibility = imgui.checkbox(
|
||||
language.current_language.customization_menu.visible, cached_config.part_break.visibility);
|
||||
cached_language.visible, cached_config.part_break.visibility);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.offset) then
|
||||
if imgui.tree_node(cached_language.offset) then
|
||||
changed, cached_config.part_break.offset.x = imgui.drag_float(
|
||||
language.current_language.customization_menu.x, cached_config.part_break.offset.x, 0.1, -screen.width, screen.width, "%.1f");
|
||||
cached_language.x, cached_config.part_break.offset.x, 0.1, -screen.width, screen.width, "%.1f");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.part_break.offset.y = imgui.drag_float(
|
||||
language.current_language.customization_menu.y, cached_config.part_break.offset.y, 0.1, -screen.height, screen.height, "%.1f");
|
||||
cached_language.y, cached_config.part_break.offset.y, 0.1, -screen.height, screen.height, "%.1f");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
changed = label_customization.draw(language.current_language.customization_menu.text_label, cached_config.part_break.text_label);
|
||||
changed = label_customization.draw(cached_language.text_label, cached_config.part_break.text_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = label_customization.draw(language.current_language.customization_menu.value_label, cached_config.part_break.value_label);
|
||||
changed = label_customization.draw(cached_language.value_label, cached_config.part_break.value_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = label_customization.draw(language.current_language.customization_menu.percentage_label, cached_config.part_break.percentage_label);
|
||||
changed = label_customization.draw(cached_language.percentage_label, cached_config.part_break.percentage_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = bar_customization.draw(language.current_language.customization_menu.bar, cached_config.part_break.bar);
|
||||
changed = bar_customization.draw(cached_language.bar, cached_config.part_break.bar);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.loss_health) then
|
||||
if imgui.tree_node(cached_language.loss_health) then
|
||||
changed, cached_config.part_loss.visibility = imgui.checkbox(
|
||||
language.current_language.customization_menu.visible, cached_config.part_loss.visibility);
|
||||
cached_language.visible, cached_config.part_loss.visibility);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.offset) then
|
||||
if imgui.tree_node(cached_language.offset) then
|
||||
changed, cached_config.part_loss.offset.x = imgui.drag_float(
|
||||
language.current_language.customization_menu.x, cached_config.part_loss.offset.x, 0.1, -screen.width, screen.width, "%.1f");
|
||||
cached_language.x, cached_config.part_loss.offset.x, 0.1, -screen.width, screen.width, "%.1f");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.part_loss.offset.y = imgui.drag_float(
|
||||
language.current_language.customization_menu.y, cached_config.part_loss.offset.y, 0.1, -screen.height, screen.height, "%.1f");
|
||||
cached_language.y, cached_config.part_loss.offset.y, 0.1, -screen.height, screen.height, "%.1f");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
changed = label_customization.draw(language.current_language.customization_menu.text_label, cached_config.part_loss.text_label);
|
||||
changed = label_customization.draw(cached_language.text_label, cached_config.part_loss.text_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = label_customization.draw(language.current_language.customization_menu.value_label, cached_config.part_loss.value_label);
|
||||
changed = label_customization.draw(cached_language.value_label, cached_config.part_loss.value_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = label_customization.draw(language.current_language.customization_menu.percentage_label, cached_config.part_loss.percentage_label);
|
||||
changed = label_customization.draw(cached_language.percentage_label, cached_config.part_loss.percentage_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = bar_customization.draw(language.current_language.customization_menu.bar, cached_config.part_loss.bar);
|
||||
changed = bar_customization.draw(cached_language.bar, cached_config.part_loss.bar);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(cached_language.anomaly_health) then
|
||||
changed, cached_config.part_anomaly.visibility = imgui.checkbox(
|
||||
cached_language.visible, cached_config.part_anomaly.visibility);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
if imgui.tree_node(cached_language.offset) then
|
||||
changed, cached_config.part_anomaly.offset.x = imgui.drag_float(
|
||||
cached_language.x, cached_config.part_anomaly.offset.x, 0.1, -screen.width, screen.width, "%.1f");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.part_anomaly.offset.y = imgui.drag_float(
|
||||
cached_language.y, cached_config.part_anomaly.offset.y, 0.1, -screen.height, screen.height, "%.1f");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
changed = label_customization.draw(cached_language.text_label, cached_config.part_anomaly.text_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = label_customization.draw(cached_language.value_label, cached_config.part_anomaly.value_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = label_customization.draw(cached_language.percentage_label, cached_config.part_anomaly.percentage_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = bar_customization.draw(cached_language.bar, cached_config.part_anomaly.bar);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
@@ -325,12 +512,12 @@ function body_parts_customization.draw(cached_config)
|
||||
return config_changed;
|
||||
end
|
||||
|
||||
function body_parts_customization.init_module()
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
function this.init_dependencies()
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
player = require("MHR_Overlay.Damage_Meter.player");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
small_monster = require("MHR_Overlay.Monsters.small_monster");
|
||||
large_monster = require("MHR_Overlay.Monsters.large_monster");
|
||||
env_creature = require("MHR_Overlay.Endemic_Life.env_creature");
|
||||
@@ -340,6 +527,10 @@ function body_parts_customization.init_module()
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
label_customization = require("MHR_Overlay.UI.Customizations.label_customization");
|
||||
bar_customization = require("MHR_Overlay.UI.Customizations.bar_customization");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return body_parts_customization;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -1,9 +1,8 @@
|
||||
local large_monster_UI_customization = {};
|
||||
local this = {};
|
||||
|
||||
local table_helpers;
|
||||
local config;
|
||||
local screen;
|
||||
local player;
|
||||
local players;
|
||||
local large_monster;
|
||||
local small_monster;
|
||||
local env_creature;
|
||||
@@ -14,8 +13,41 @@ local keyboard;
|
||||
local customization_menu;
|
||||
local label_customization;
|
||||
local bar_customization;
|
||||
local error_handler;
|
||||
|
||||
function large_monster_UI_customization.draw(cached_config)
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function this.draw(cached_config)
|
||||
local changed = false;
|
||||
local config_changed = false;
|
||||
|
||||
@@ -57,12 +89,11 @@ function large_monster_UI_customization.draw(cached_config)
|
||||
return config_changed;
|
||||
end
|
||||
|
||||
function large_monster_UI_customization.init_module()
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
function this.init_dependencies()
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
player = require("MHR_Overlay.Damage_Meter.player");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
small_monster = require("MHR_Overlay.Monsters.small_monster");
|
||||
large_monster = require("MHR_Overlay.Monsters.large_monster");
|
||||
env_creature = require("MHR_Overlay.Endemic_Life.env_creature");
|
||||
@@ -72,6 +103,10 @@ function large_monster_UI_customization.init_module()
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
label_customization = require("MHR_Overlay.UI.Customizations.label_customization");
|
||||
bar_customization = require("MHR_Overlay.UI.Customizations.bar_customization");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return large_monster_UI_customization;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -1,9 +1,8 @@
|
||||
local label_customization = {};
|
||||
local this = {};
|
||||
|
||||
local table_helpers;
|
||||
local config;
|
||||
local screen;
|
||||
local player;
|
||||
local players;
|
||||
local large_monster;
|
||||
local small_monster;
|
||||
local env_creature;
|
||||
@@ -12,57 +11,102 @@ local part_names;
|
||||
local time_UI;
|
||||
local keyboard;
|
||||
local customization_menu;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function this.draw(label_name, label)
|
||||
local cached_language = language.current_language.customization_menu;
|
||||
|
||||
function label_customization.draw(label_name, label)
|
||||
local label_changed = false;
|
||||
local changed = false;
|
||||
|
||||
if imgui.tree_node(label_name) then
|
||||
changed, label.visibility = imgui.checkbox(language.current_language.customization_menu.visible
|
||||
, label.visibility);
|
||||
changed, label.visibility = imgui.checkbox(cached_language.visible, label.visibility);
|
||||
label_changed = label_changed or changed;
|
||||
|
||||
-- add text format
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.offset) then
|
||||
changed, label.offset.x = imgui.drag_float(language.current_language.customization_menu.x,
|
||||
label.offset.x, 0.1, -screen.width, screen.width, "%.1f");
|
||||
label_changed = label_changed or changed;
|
||||
|
||||
changed, label.offset.y = imgui.drag_float(language.current_language.customization_menu.y,
|
||||
label.offset.y, 0.1, -screen.height, screen.height, "%.1f");
|
||||
|
||||
if imgui.tree_node(cached_language.settings) then
|
||||
changed, label.settings.right_alignment_shift = imgui.slider_int(cached_language.right_alignment_shift, label.settings.right_alignment_shift, 0, 64);
|
||||
label_changed = label_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.color) then
|
||||
changed, label.color = imgui.color_picker_argb("", label.color,
|
||||
customization_menu.color_picker_flags);
|
||||
if label.include ~= nil then
|
||||
if imgui.tree_node(cached_language.include) then
|
||||
for include_name, include in pairs(label.include) do
|
||||
changed, label.include[include_name] = imgui.checkbox(cached_language[include_name], label.include[include_name]);
|
||||
label_changed = label_changed or changed;
|
||||
end
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
end
|
||||
|
||||
if imgui.tree_node(cached_language.offset) then
|
||||
changed, label.offset.x = imgui.drag_float(cached_language.x, label.offset.x, 0.1, -screen.width, screen.width, "%.1f");
|
||||
label_changed = label_changed or changed;
|
||||
|
||||
changed, label.offset.y = imgui.drag_float(cached_language.y, label.offset.y, 0.1, -screen.height, screen.height, "%.1f");
|
||||
label_changed = label_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.shadow) then
|
||||
changed, label.shadow.visibility = imgui.checkbox(language.current_language.customization_menu.visible
|
||||
, label.shadow.visibility);
|
||||
if imgui.tree_node(cached_language.color) then
|
||||
changed, label.color = imgui.color_picker_argb("", label.color, customization_menu.color_picker_flags);
|
||||
label_changed = label_changed or changed;
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.offset) then
|
||||
changed, label.shadow.offset.x = imgui.drag_float(language.current_language.customization_menu.x,
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(cached_language.shadow) then
|
||||
changed, label.shadow.visibility = imgui.checkbox(cached_language.visible, label.shadow.visibility);
|
||||
label_changed = label_changed or changed;
|
||||
|
||||
if imgui.tree_node(cached_language.offset) then
|
||||
changed, label.shadow.offset.x = imgui.drag_float(cached_language.x,
|
||||
label.shadow.offset.x, 0.1, -screen.width, screen.width, "%.1f");
|
||||
label_changed = label_changed or changed;
|
||||
|
||||
changed, label.shadow.offset.y = imgui.drag_float(language.current_language.customization_menu.y,
|
||||
changed, label.shadow.offset.y = imgui.drag_float(cached_language.y,
|
||||
label.shadow.offset.y, 0.1, -screen.height, screen.height, "%.1f");
|
||||
label_changed = label_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.color) then
|
||||
if imgui.tree_node(cached_language.color) then
|
||||
changed, label.shadow.color = imgui.color_picker_argb("", label.shadow.color,
|
||||
customization_menu.color_picker_flags);
|
||||
label_changed = label_changed or changed;
|
||||
@@ -79,12 +123,11 @@ function label_customization.draw(label_name, label)
|
||||
return label_changed;
|
||||
end
|
||||
|
||||
function label_customization.init_module()
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
function this.init_dependencies()
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
player = require("MHR_Overlay.Damage_Meter.player");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
small_monster = require("MHR_Overlay.Monsters.small_monster");
|
||||
large_monster = require("MHR_Overlay.Monsters.large_monster");
|
||||
env_creature = require("MHR_Overlay.Endemic_Life.env_creature");
|
||||
@@ -92,6 +135,10 @@ function label_customization.init_module()
|
||||
time_UI = require("MHR_Overlay.UI.Modules.time_UI");
|
||||
keyboard = require("MHR_Overlay.Game_Handler.keyboard");
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return label_customization;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
local large_monster_UI_customization = {};
|
||||
local this = {};
|
||||
|
||||
local table_helpers;
|
||||
local config;
|
||||
local screen;
|
||||
local player;
|
||||
local players;
|
||||
local large_monster;
|
||||
local small_monster;
|
||||
local env_creature;
|
||||
@@ -12,6 +11,7 @@ local part_names;
|
||||
local time_UI;
|
||||
local keyboard;
|
||||
local customization_menu;
|
||||
local error_handler;
|
||||
|
||||
local label_customization;
|
||||
local bar_customization;
|
||||
@@ -22,104 +22,44 @@ local body_parts_customization;
|
||||
local ailments_customization;
|
||||
local ailment_buildups_customization;
|
||||
|
||||
function large_monster_UI_customization.draw(cached_config)
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function this.draw(cached_config)
|
||||
local changed = false;
|
||||
local config_changed = false;
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.monster_name_label) then
|
||||
changed, cached_config.monster_name_label.visibility = imgui.checkbox(
|
||||
language.current_language.customization_menu.visible, cached_config.monster_name_label.visibility);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.include) then
|
||||
changed, cached_config.monster_name_label.include.monster_name = imgui.checkbox(
|
||||
language.current_language.customization_menu.monster_name, cached_config.monster_name_label.include.monster_name);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.monster_name_label.include.monster_id = imgui.checkbox(
|
||||
language.current_language.customization_menu.monster_id, cached_config.monster_name_label.include.monster_id);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.monster_name_label.include.crown = imgui.checkbox(
|
||||
language.current_language.customization_menu.crown, cached_config.monster_name_label.include.crown);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.monster_name_label.include.size = imgui.checkbox(
|
||||
language.current_language.customization_menu.size, cached_config.monster_name_label.include.size);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.monster_name_label.include.scrown_thresholds = imgui.checkbox(
|
||||
language.current_language.customization_menu.crown_thresholds, cached_config.monster_name_label.include.scrown_thresholds);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.offset) then
|
||||
changed, cached_config.monster_name_label.offset.x = imgui.drag_float(
|
||||
language.current_language.customization_menu.x, cached_config.monster_name_label.offset.x, 0.1, -screen.width, screen.width, "%.1f");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.monster_name_label.offset.y = imgui.drag_float(
|
||||
language.current_language.customization_menu.y, cached_config.monster_name_label.offset.y, 0.1, -screen.height, screen.height, "%.1f");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.color) then
|
||||
changed, cached_config.monster_name_label.color = imgui.color_picker_argb(
|
||||
"", cached_config.monster_name_label.color, customization_menu.color_picker_flags);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.shadow) then
|
||||
changed, cached_config.monster_name_label.shadow.visibility = imgui.checkbox(
|
||||
language.current_language.customization_menu.visible, cached_config.monster_name_label.shadow.visibility);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.offset) then
|
||||
changed, cached_config.monster_name_label.shadow.offset.x = imgui.drag_float(
|
||||
language.current_language.customization_menu.x, cached_config.monster_name_label.shadow.offset.x,
|
||||
0.1, -screen.width, screen.width, "%.1f");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.monster_name_label.shadow.offset.y = imgui.drag_float(
|
||||
language.current_language.customization_menu.y, cached_config.monster_name_label.shadow.offset.y,
|
||||
0.1, -screen.height, screen.height, "%.1f");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.color) then
|
||||
changed, cached_config.monster_name_label.shadow.color = imgui.color_picker_argb(
|
||||
"", cached_config.monster_name_label.shadow.color, customization_menu.color_picker_flags);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
changed = label_customization.draw(language.current_language.customization_menu.monster_name_label, cached_config.monster_name_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = health_customization.draw(cached_config.health);
|
||||
config_changed = config_changed or changed;
|
||||
@@ -142,12 +82,11 @@ function large_monster_UI_customization.draw(cached_config)
|
||||
return config_changed;
|
||||
end
|
||||
|
||||
function large_monster_UI_customization.init_module()
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
function this.init_dependencies()
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
player = require("MHR_Overlay.Damage_Meter.player");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
small_monster = require("MHR_Overlay.Monsters.small_monster");
|
||||
large_monster = require("MHR_Overlay.Monsters.large_monster");
|
||||
env_creature = require("MHR_Overlay.Endemic_Life.env_creature");
|
||||
@@ -155,9 +94,10 @@ function large_monster_UI_customization.init_module()
|
||||
time_UI = require("MHR_Overlay.UI.Modules.time_UI");
|
||||
keyboard = require("MHR_Overlay.Game_Handler.keyboard");
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
|
||||
label_customization = require("MHR_Overlay.UI.Customizations.label_customization");
|
||||
bar_customization = require("MHR_Overlay.UI.Customizations.bar_customization");
|
||||
|
||||
health_customization = require("MHR_Overlay.UI.Customizations.health_customization");
|
||||
stamina_customization = require("MHR_Overlay.UI.Customizations.stamina_customization");
|
||||
rage_customization = require("MHR_Overlay.UI.Customizations.rage_customization");
|
||||
@@ -166,4 +106,7 @@ function large_monster_UI_customization.init_module()
|
||||
ailment_buildups_customization = require("MHR_Overlay.UI.Customizations.ailment_buildups_customization");
|
||||
end
|
||||
|
||||
return large_monster_UI_customization;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -1,9 +1,8 @@
|
||||
local line_customization = {};
|
||||
local this = {};
|
||||
|
||||
local table_helpers;
|
||||
local config;
|
||||
local screen;
|
||||
local player;
|
||||
local players;
|
||||
local large_monster;
|
||||
local small_monster;
|
||||
local env_creature;
|
||||
@@ -12,8 +11,41 @@ local part_names;
|
||||
local time_UI;
|
||||
local keyboard;
|
||||
local customization_menu;
|
||||
local error_handler;
|
||||
|
||||
function line_customization.draw(line_name, line)
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function this.draw(line_name, line)
|
||||
if line == nil then
|
||||
return;
|
||||
end
|
||||
@@ -64,12 +96,11 @@ function line_customization.draw(line_name, line)
|
||||
return line_changed;
|
||||
end
|
||||
|
||||
function line_customization.init_module()
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
function this.init_dependencies()
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
player = require("MHR_Overlay.Damage_Meter.player");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
small_monster = require("MHR_Overlay.Monsters.small_monster");
|
||||
large_monster = require("MHR_Overlay.Monsters.large_monster");
|
||||
env_creature = require("MHR_Overlay.Endemic_Life.env_creature");
|
||||
@@ -77,6 +108,10 @@ function line_customization.init_module()
|
||||
time_UI = require("MHR_Overlay.UI.Modules.time_UI");
|
||||
keyboard = require("MHR_Overlay.Game_Handler.keyboard");
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return line_customization;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -0,0 +1,127 @@
|
||||
local this = {};
|
||||
|
||||
local config;
|
||||
local screen;
|
||||
local players;
|
||||
local large_monster;
|
||||
local small_monster;
|
||||
local env_creature;
|
||||
local language;
|
||||
local part_names;
|
||||
local time_UI;
|
||||
local keyboard;
|
||||
local customization_menu;
|
||||
local label_customization;
|
||||
local bar_customization;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function this.draw(cached_config)
|
||||
local changed = false;
|
||||
local config_changed = false;
|
||||
|
||||
changed, cached_config.small_monster_UI = imgui.checkbox(
|
||||
language.current_language.customization_menu.small_monster_UI,
|
||||
cached_config.small_monster_UI);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.large_monster_dynamic_UI = imgui.checkbox(
|
||||
language.current_language.customization_menu.large_monster_dynamic_UI,
|
||||
cached_config.large_monster_dynamic_UI);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.large_monster_static_UI = imgui.checkbox(
|
||||
language.current_language.customization_menu.large_monster_static_UI,
|
||||
cached_config.large_monster_static_UI);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.large_monster_highlighted_UI = imgui.checkbox(
|
||||
language.current_language.customization_menu.large_monster_highlighted_UI,
|
||||
cached_config.large_monster_highlighted_UI);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.time_UI = imgui.checkbox(
|
||||
language.current_language.customization_menu.time_UI,
|
||||
cached_config.time_UI);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.damage_meter_UI = imgui.checkbox(
|
||||
language.current_language.customization_menu.damage_meter_UI,
|
||||
cached_config.damage_meter_UI);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.endemic_life_UI = imgui.checkbox(
|
||||
language.current_language.customization_menu.endemic_life_UI,
|
||||
cached_config.endemic_life_UI);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.buff_UI = imgui.checkbox(
|
||||
language.current_language.customization_menu.buff_UI,
|
||||
cached_config.buff_UI);
|
||||
|
||||
changed, cached_config.stats_UI = imgui.checkbox(
|
||||
language.current_language.customization_menu.stats_UI,
|
||||
cached_config.stats_UI);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
return config_changed;
|
||||
end
|
||||
|
||||
function this.init_dependencies()
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
small_monster = require("MHR_Overlay.Monsters.small_monster");
|
||||
large_monster = require("MHR_Overlay.Monsters.large_monster");
|
||||
env_creature = require("MHR_Overlay.Endemic_Life.env_creature");
|
||||
part_names = require("MHR_Overlay.Misc.part_names");
|
||||
time_UI = require("MHR_Overlay.UI.Modules.time_UI");
|
||||
keyboard = require("MHR_Overlay.Game_Handler.keyboard");
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -1,9 +1,8 @@
|
||||
local rage_customization = {};
|
||||
local this = {};
|
||||
|
||||
local table_helpers;
|
||||
local config;
|
||||
local screen;
|
||||
local player;
|
||||
local players;
|
||||
local large_monster;
|
||||
local small_monster;
|
||||
local env_creature;
|
||||
@@ -14,8 +13,41 @@ local keyboard;
|
||||
local customization_menu;
|
||||
local label_customization;
|
||||
local bar_customization;
|
||||
local error_handler;
|
||||
|
||||
function rage_customization.draw(cached_config)
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function this.draw(cached_config)
|
||||
local changed = false;
|
||||
local config_changed = false;
|
||||
|
||||
@@ -60,12 +92,11 @@ function rage_customization.draw(cached_config)
|
||||
return config_changed;
|
||||
end
|
||||
|
||||
function rage_customization.init_module()
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
function this.init_dependencies()
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
player = require("MHR_Overlay.Damage_Meter.player");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
small_monster = require("MHR_Overlay.Monsters.small_monster");
|
||||
large_monster = require("MHR_Overlay.Monsters.large_monster");
|
||||
env_creature = require("MHR_Overlay.Endemic_Life.env_creature");
|
||||
@@ -75,6 +106,10 @@ function rage_customization.init_module()
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
label_customization = require("MHR_Overlay.UI.Customizations.label_customization");
|
||||
bar_customization = require("MHR_Overlay.UI.Customizations.bar_customization");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return rage_customization;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -1,9 +1,8 @@
|
||||
local stamina_customization = {};
|
||||
local this = {};
|
||||
|
||||
local table_helpers;
|
||||
local config;
|
||||
local screen;
|
||||
local player;
|
||||
local players;
|
||||
local large_monster;
|
||||
local small_monster;
|
||||
local env_creature;
|
||||
@@ -14,8 +13,41 @@ local keyboard;
|
||||
local customization_menu;
|
||||
local label_customization;
|
||||
local bar_customization;
|
||||
local error_handler;
|
||||
|
||||
function stamina_customization.draw(cached_config)
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function this.draw(cached_config)
|
||||
local changed = false;
|
||||
local config_changed = false;
|
||||
|
||||
@@ -60,12 +92,11 @@ function stamina_customization.draw(cached_config)
|
||||
return config_changed;
|
||||
end
|
||||
|
||||
function stamina_customization.init_module()
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
function this.init_dependencies()
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
player = require("MHR_Overlay.Damage_Meter.player");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
small_monster = require("MHR_Overlay.Monsters.small_monster");
|
||||
large_monster = require("MHR_Overlay.Monsters.large_monster");
|
||||
env_creature = require("MHR_Overlay.Endemic_Life.env_creature");
|
||||
@@ -75,6 +106,10 @@ function stamina_customization.init_module()
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
label_customization = require("MHR_Overlay.UI.Customizations.label_customization");
|
||||
bar_customization = require("MHR_Overlay.UI.Customizations.bar_customization");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return stamina_customization;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
384
reframework/autorun/MHR_Overlay/UI/Modules/buff_UI.lua
Normal file
384
reframework/autorun/MHR_Overlay/UI/Modules/buff_UI.lua
Normal file
@@ -0,0 +1,384 @@
|
||||
local this = {};
|
||||
|
||||
local buff_UI_entity;
|
||||
local config;
|
||||
local buffs;
|
||||
local item_buffs;
|
||||
local melody_effects;
|
||||
local endemic_life_buff;
|
||||
local screen;
|
||||
local utils;
|
||||
local error_handler;
|
||||
local skills;
|
||||
local dango_skills;
|
||||
local abnormal_statuses;
|
||||
local otomo_moves;
|
||||
local weapon_skills;
|
||||
local misc_buffs;
|
||||
local rampage_skills;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
local displayed_buffs = {};
|
||||
|
||||
function this.update()
|
||||
local cached_config = config.current_config.buff_UI;
|
||||
|
||||
local _displayed_buffs = {};
|
||||
|
||||
for key, abnormal_status in pairs(abnormal_statuses.list) do
|
||||
|
||||
if abnormal_status.is_visible then
|
||||
table.insert(_displayed_buffs, abnormal_status);
|
||||
end
|
||||
end
|
||||
|
||||
for key, item_buff in pairs(item_buffs.list) do
|
||||
|
||||
if item_buff.is_visible then
|
||||
table.insert(_displayed_buffs, item_buff);
|
||||
end
|
||||
end
|
||||
|
||||
for key, endemic_life_buff in pairs(endemic_life_buff.list) do
|
||||
|
||||
if endemic_life_buff.is_visible then
|
||||
table.insert(_displayed_buffs, endemic_life_buff);
|
||||
end
|
||||
end
|
||||
|
||||
for _, melody_effect in pairs(melody_effects.list) do
|
||||
|
||||
if melody_effect.is_visible then
|
||||
table.insert(_displayed_buffs, melody_effect);
|
||||
end
|
||||
end
|
||||
|
||||
for key, dango_skill in pairs(dango_skills.list) do
|
||||
|
||||
if dango_skill.is_visible then
|
||||
table.insert(_displayed_buffs, dango_skill);
|
||||
end
|
||||
end
|
||||
|
||||
for key, rampage_skill in pairs(rampage_skills.list) do
|
||||
|
||||
if rampage_skill.is_visible then
|
||||
table.insert(_displayed_buffs, rampage_skill);
|
||||
end
|
||||
end
|
||||
|
||||
for key, skill in pairs(skills.list) do
|
||||
|
||||
if skill.is_visible then
|
||||
table.insert(_displayed_buffs, skill);
|
||||
end
|
||||
end
|
||||
|
||||
for key, weapon_skill in pairs(weapon_skills.list) do
|
||||
|
||||
if weapon_skill.is_visible then
|
||||
table.insert(_displayed_buffs, weapon_skill);
|
||||
end
|
||||
end
|
||||
|
||||
for key, otomo_move in pairs(otomo_moves.list) do
|
||||
|
||||
if otomo_move.is_visible then
|
||||
table.insert(_displayed_buffs, otomo_move);
|
||||
end
|
||||
end
|
||||
|
||||
for key, misc_buffs in pairs(misc_buffs.list) do
|
||||
|
||||
if misc_buffs.is_visible then
|
||||
table.insert(_displayed_buffs, misc_buffs);
|
||||
end
|
||||
end
|
||||
|
||||
displayed_buffs = this.sort_buffs(_displayed_buffs, cached_config);
|
||||
|
||||
end
|
||||
|
||||
function this.sort_buffs(_displayed_buffs, cached_config)
|
||||
local infinite_buffs_location = cached_config.settings.infinite_buffs_location;
|
||||
cached_config = cached_config.sorting;
|
||||
|
||||
if cached_config.type == "Name" then
|
||||
if cached_config.reversed_order then
|
||||
table.sort(_displayed_buffs, function(left, right)
|
||||
|
||||
if infinite_buffs_location == "First" then
|
||||
|
||||
if left.is_infinite and right.is_infinite then
|
||||
return left.name < right.name;
|
||||
elseif left.is_infinite then
|
||||
return true;
|
||||
elseif right.is_infinite then
|
||||
return false;
|
||||
else
|
||||
return left.name < right.name;
|
||||
end
|
||||
|
||||
elseif infinite_buffs_location == "Last" then
|
||||
|
||||
if left.is_infinite and right.is_infinite then
|
||||
return left.name < right.name;
|
||||
elseif left.is_infinite then
|
||||
return false;
|
||||
elseif right.is_infinite then
|
||||
return true;
|
||||
else
|
||||
return left.name < right.name;
|
||||
end
|
||||
|
||||
else
|
||||
return left.name < right.name;
|
||||
end
|
||||
end);
|
||||
else
|
||||
table.sort(_displayed_buffs, function(left, right)
|
||||
|
||||
if infinite_buffs_location == "First" then
|
||||
|
||||
if left.is_infinite and right.is_infinite then
|
||||
return left.name > right.name;
|
||||
elseif left.is_infinite then
|
||||
return false;
|
||||
elseif right.is_infinite then
|
||||
return true;
|
||||
else
|
||||
return left.name > right.name;
|
||||
end
|
||||
|
||||
elseif infinite_buffs_location == "Last" then
|
||||
|
||||
if left.is_infinite and right.is_infinite then
|
||||
return left.name > right.name;
|
||||
elseif left.is_infinite then
|
||||
return true;
|
||||
elseif right.is_infinite then
|
||||
return false;
|
||||
else
|
||||
return left.name > right.name;
|
||||
end
|
||||
|
||||
else
|
||||
return left.name > right.name;
|
||||
end
|
||||
end);
|
||||
end
|
||||
elseif cached_config.type == "Timer" then
|
||||
if cached_config.reversed_order then
|
||||
table.sort(_displayed_buffs, function(left, right)
|
||||
|
||||
if infinite_buffs_location == "First" then
|
||||
|
||||
if left.is_infinite and right.is_infinite then
|
||||
return left.name < right.name;
|
||||
elseif left.is_infinite then
|
||||
return true;
|
||||
elseif right.is_infinite then
|
||||
return false;
|
||||
else
|
||||
return left.timer < right.timer;
|
||||
end
|
||||
|
||||
elseif infinite_buffs_location == "Last" then
|
||||
|
||||
if left.is_infinite and right.is_infinite then
|
||||
return left.name < right.name;
|
||||
elseif left.is_infinite then
|
||||
return false;
|
||||
elseif right.is_infinite then
|
||||
return true;
|
||||
else
|
||||
return left.timer < right.timer;
|
||||
end
|
||||
|
||||
else
|
||||
return left.timer < right.timer;
|
||||
end
|
||||
end);
|
||||
else
|
||||
table.sort(_displayed_buffs, function(left, right)
|
||||
|
||||
if infinite_buffs_location == "First" then
|
||||
|
||||
if left.is_infinite and right.is_infinite then
|
||||
return left.name > right.name;
|
||||
elseif left.is_infinite then
|
||||
return false;
|
||||
elseif right.is_infinite then
|
||||
return true;
|
||||
else
|
||||
return left.timer > right.timer;
|
||||
end
|
||||
|
||||
elseif infinite_buffs_location == "Last" then
|
||||
|
||||
if left.is_infinite and right.is_infinite then
|
||||
return left.name > right.name;
|
||||
elseif left.is_infinite then
|
||||
return true;
|
||||
elseif right.is_infinite then
|
||||
return false;
|
||||
else
|
||||
return left.timer > right.timer;
|
||||
end
|
||||
|
||||
else
|
||||
return left.timer > right.timer;
|
||||
end
|
||||
end);
|
||||
end
|
||||
else -- Duration
|
||||
if cached_config.reversed_order then
|
||||
table.sort(_displayed_buffs, function(left, right)
|
||||
|
||||
if infinite_buffs_location == "First" then
|
||||
|
||||
if left.is_infinite and right.is_infinite then
|
||||
return left.name < right.name;
|
||||
elseif left.is_infinite then
|
||||
return true;
|
||||
elseif right.is_infinite then
|
||||
return false;
|
||||
else
|
||||
return left.duration < right.duration;
|
||||
end
|
||||
|
||||
elseif infinite_buffs_location == "Last" then
|
||||
|
||||
if left.is_infinite and right.is_infinite then
|
||||
return left.name < right.name;
|
||||
elseif left.is_infinite then
|
||||
return false;
|
||||
elseif right.is_infinite then
|
||||
return true;
|
||||
else
|
||||
return left.duration < right.duration;
|
||||
end
|
||||
|
||||
else
|
||||
return left.duration < right.duration;
|
||||
end
|
||||
end);
|
||||
else
|
||||
table.sort(_displayed_buffs, function(left, right)
|
||||
|
||||
if infinite_buffs_location == "First" then
|
||||
|
||||
if left.is_infinite and right.is_infinite then
|
||||
return left.name > right.name;
|
||||
elseif left.is_infinite then
|
||||
return false;
|
||||
elseif right.is_infinite then
|
||||
return true;
|
||||
else
|
||||
return left.duration > right.duration;
|
||||
end
|
||||
|
||||
elseif infinite_buffs_location == "Last" then
|
||||
|
||||
if left.is_infinite and right.is_infinite then
|
||||
return left.name > right.name;
|
||||
elseif left.is_infinite then
|
||||
return true;
|
||||
elseif right.is_infinite then
|
||||
return false;
|
||||
else
|
||||
return left.duration > right.duration;
|
||||
end
|
||||
|
||||
else
|
||||
return left.duration > right.duration;
|
||||
end
|
||||
end);
|
||||
end
|
||||
end
|
||||
|
||||
return _displayed_buffs;
|
||||
end
|
||||
|
||||
function this.draw()
|
||||
local cached_config = config.current_config.buff_UI;
|
||||
|
||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||
|
||||
local position_on_screen = screen.calculate_absolute_coordinates(cached_config.position);
|
||||
|
||||
-- draw
|
||||
for _, buff in ipairs(displayed_buffs) do
|
||||
buffs.draw(buff, buff.buff_UI, position_on_screen, 1);
|
||||
|
||||
if cached_config.settings.orientation == "Horizontal" then
|
||||
position_on_screen.x = position_on_screen.x + cached_config.spacing.x * global_scale_modifier;
|
||||
else
|
||||
position_on_screen.y = position_on_screen.y + cached_config.spacing.y * global_scale_modifier;
|
||||
end
|
||||
|
||||
::continue::
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_dependencies()
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
|
||||
item_buffs = require("MHR_Overlay.Buffs.item_buffs");
|
||||
melody_effects = require("MHR_Overlay.Buffs.melody_effects");
|
||||
buffs = require("MHR_Overlay.Buffs.buffs");
|
||||
--singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
--customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
--players = require("MHR_Overlay.Damage_Meter.players");
|
||||
--non_players = require("MHR_Overlay.Damage_Meter.non_players");
|
||||
--quest_status = require("MHR_Overlay.Game_Handler.quest_status");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
--drawing = require("MHR_Overlay.UI.drawing");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
endemic_life_buff = require("MHR_Overlay.Buffs.endemic_life_buffs");
|
||||
skills = require("MHR_Overlay.Buffs.skills");
|
||||
dango_skills = require("MHR_Overlay.Buffs.dango_skills");
|
||||
abnormal_statuses = require("MHR_Overlay.Buffs.abnormal_statuses");
|
||||
otomo_moves = require("MHR_Overlay.Buffs.otomo_moves");
|
||||
weapon_skills = require("MHR_Overlay.Buffs.weapon_skills");
|
||||
misc_buffs = require("MHR_Overlay.Buffs.misc_buffs");
|
||||
rampage_skills = require("MHR_Overlay.Buffs.rampage_skills");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -1,163 +1,242 @@
|
||||
local damage_meter_UI = {};
|
||||
local this = {};
|
||||
|
||||
local singletons;
|
||||
local config;
|
||||
local customization_menu;
|
||||
local player;
|
||||
local players;
|
||||
local non_players;
|
||||
local quest_status;
|
||||
local screen;
|
||||
local drawing;
|
||||
local language;
|
||||
local utils;
|
||||
local error_handler;
|
||||
|
||||
damage_meter_UI.last_displayed_players = {};
|
||||
damage_meter_UI.freeze_displayed_players = false;
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
local lobby_manager_type_def = sdk.find_type_definition("snow.LobbyManager");
|
||||
local quest_hunter_info_field = lobby_manager_type_def:get_field("_questHunterInfo");
|
||||
local hunter_info_field = lobby_manager_type_def:get_field("_hunterInfo");
|
||||
local top_damage = 0;
|
||||
local top_dps = 0;
|
||||
|
||||
local quest_hunter_info_type_def = quest_hunter_info_field:get_type();
|
||||
local get_count_method = quest_hunter_info_type_def:get_method("get_Count");
|
||||
local get_item_method = quest_hunter_info_type_def:get_method("get_Item");
|
||||
this.displayed_players = {};
|
||||
this.last_displayed_players = {};
|
||||
this.freeze_displayed_players = false;
|
||||
|
||||
local hunter_info_type_def = sdk.find_type_definition("snow.LobbyManager.HunterInfo");
|
||||
local member_index_field = hunter_info_type_def:get_field("_memberIndex");
|
||||
|
||||
function damage_meter_UI.get_players(player_info_list)
|
||||
function this.update()
|
||||
local is_on_quest = quest_status.flow_state ~= quest_status.flow_states.IN_LOBBY and quest_status.flow_state ~= quest_status.flow_states.IN_TRAINING_AREA;
|
||||
local cached_config = config.current_config.damage_meter_UI;
|
||||
|
||||
-- other players
|
||||
if player_info_list == nil then
|
||||
customization_menu.status = "No player info list";
|
||||
return {};
|
||||
end
|
||||
if this.freeze_displayed_players and not utils.table.is_empty(this.last_displayed_players) then
|
||||
this.displayed_players = this.last_displayed_players;
|
||||
return;
|
||||
end;
|
||||
|
||||
local quest_players = {};
|
||||
|
||||
local count = get_count_method:call(player_info_list);
|
||||
|
||||
if count == nil then
|
||||
customization_menu.status = "No player info list count";
|
||||
return {};
|
||||
end
|
||||
|
||||
for i = 0, count - 1 do
|
||||
local player_info = get_item_method:call(player_info_list, i);
|
||||
|
||||
if player_info == nil then
|
||||
goto continue
|
||||
end
|
||||
|
||||
local player_id = member_index_field:get_data(player_info);
|
||||
if player_id == nil then
|
||||
goto continue
|
||||
end
|
||||
|
||||
local _player = player.get_player(player_id);
|
||||
if _player ~= nil then
|
||||
if _player == player.myself and cached_config.settings.my_damage_bar_location ~= "Normal" then
|
||||
goto continue
|
||||
end
|
||||
table.insert(quest_players, _player);
|
||||
end
|
||||
|
||||
::continue::
|
||||
end
|
||||
|
||||
return quest_players;
|
||||
end
|
||||
|
||||
function damage_meter_UI.draw()
|
||||
local cached_config = config.current_config.damage_meter_UI;
|
||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||
|
||||
if player.total.display.total_damage == 0 and cached_config.settings.hide_module_if_total_damage_is_zero then
|
||||
if players.total.display.total_damage == 0 and cached_config.settings.hide_module_if_total_damage_is_zero then
|
||||
return;
|
||||
end
|
||||
|
||||
local quest_players = {};
|
||||
if damage_meter_UI.freeze_displayed_players and damage_meter_UI.last_displayed_players ~= {} then
|
||||
quest_players = damage_meter_UI.last_displayed_players;
|
||||
elseif quest_status.index < 2 then
|
||||
local player_info_list = hunter_info_field:get_data(singletons.lobby_manager);
|
||||
quest_players = damage_meter_UI.get_players(player_info_list);
|
||||
else
|
||||
local player_info_list = quest_hunter_info_field:get_data(singletons.lobby_manager);
|
||||
quest_players = damage_meter_UI.get_players(player_info_list);
|
||||
this.displayed_players = {};
|
||||
|
||||
for id, player in pairs(players.list) do
|
||||
if player ~= players.myself or cached_config.settings.my_damage_bar_location == "Normal" then
|
||||
this.add_to_displayed_players_list(player, cached_config);
|
||||
end
|
||||
end
|
||||
|
||||
if not damage_meter_UI.freeze_displayed_players then
|
||||
if #quest_players ~= 0 then
|
||||
-- sort here
|
||||
if cached_config.sorting.type == "Normal" then
|
||||
if cached_config.sorting.reversed_order then
|
||||
local reversed_quest_players = {};
|
||||
for i = #quest_players, 1, -1 do
|
||||
table.insert(reversed_quest_players, quest_players[i]);
|
||||
end
|
||||
quest_players = reversed_quest_players;
|
||||
end
|
||||
elseif cached_config.sorting.type == "DPS" then
|
||||
if cached_config.sorting.reversed_order then
|
||||
table.sort(quest_players, function(left, right)
|
||||
return left.dps < right.dps;
|
||||
end);
|
||||
else
|
||||
table.sort(quest_players, function(left, right)
|
||||
return left.dps > right.dps;
|
||||
end);
|
||||
end
|
||||
else
|
||||
if cached_config.sorting.reversed_order then
|
||||
table.sort(quest_players, function(left, right)
|
||||
return left.display.total_damage < right.display.total_damage;
|
||||
end);
|
||||
else
|
||||
table.sort(quest_players, function(left, right)
|
||||
return left.display.total_damage > right.display.total_damage;
|
||||
end);
|
||||
end
|
||||
if not cached_config.settings.hide_servants then
|
||||
for id, servant in pairs(non_players.servant_list) do
|
||||
this.add_to_displayed_players_list(servant, cached_config);
|
||||
end
|
||||
end
|
||||
|
||||
for id, otomo in pairs(non_players.otomo_list) do
|
||||
if id == players.myself.id or id == non_players.my_second_otomo_id then
|
||||
if cached_config.settings.show_my_otomos_separately then
|
||||
this.add_to_displayed_players_list(otomo, cached_config);
|
||||
end
|
||||
end
|
||||
|
||||
if cached_config.settings.my_damage_bar_location == "First" then
|
||||
table.insert(quest_players, 1, player.myself);
|
||||
elseif cached_config.settings.my_damage_bar_location == "Last" then
|
||||
table.insert(quest_players, #quest_players + 1, player.myself);
|
||||
elseif #player.list == 0 then
|
||||
table.insert(quest_players, player.myself);
|
||||
end
|
||||
damage_meter_UI.last_displayed_players = quest_players;
|
||||
elseif id >= 4 then
|
||||
if cached_config.settings.show_servant_otomos_separately then
|
||||
this.add_to_displayed_players_list(otomo, cached_config);
|
||||
end
|
||||
else
|
||||
if cached_config.settings.show_other_player_otomos_separately then
|
||||
this.add_to_displayed_players_list(otomo, cached_config);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local top_damage = 0;
|
||||
local top_dps = 0;
|
||||
for _, _player in ipairs(quest_players) do
|
||||
if _player.display.total_damage > top_damage then
|
||||
top_damage = _player.display.total_damage;
|
||||
this.sort();
|
||||
|
||||
this.last_displayed_players = this.displayed_players;
|
||||
end
|
||||
|
||||
function this.calculate_top_damage_and_dps()
|
||||
top_damage = 0;
|
||||
top_dps = 0;
|
||||
for _, player in ipairs(this.displayed_players) do
|
||||
if player.display.total_damage > top_damage then
|
||||
top_damage = player.display.total_damage;
|
||||
end
|
||||
|
||||
if _player.dps > top_dps then
|
||||
top_dps = _player.dps;
|
||||
if player.dps > top_dps then
|
||||
top_dps = player.dps;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function this.add_to_displayed_players_list(player, cached_config, position)
|
||||
cached_config = cached_config.settings;
|
||||
position = position or #(this.displayed_players) + 1;
|
||||
|
||||
if player.display.total_damage == 0 and cached_config.hide_player_if_player_damage_is_zero then
|
||||
return;
|
||||
end
|
||||
|
||||
if player.type == players.types.myself then
|
||||
if cached_config.hide_myself then
|
||||
return;
|
||||
end
|
||||
elseif player.type == players.types.servant then
|
||||
if cached_config.hide_servants then
|
||||
return;
|
||||
end
|
||||
elseif player.type == players.types.other_player then
|
||||
if cached_config.hide_other_players then
|
||||
return;
|
||||
end
|
||||
elseif player.type == players.types.my_otomo then
|
||||
if not cached_config.show_my_otomos_separately then
|
||||
return;
|
||||
end
|
||||
elseif player.type == players.types.other_player_otomo then
|
||||
if not cached_config.show_other_player_otomos_separately then
|
||||
return;
|
||||
end
|
||||
elseif player.type == players.types.servant_otomo then
|
||||
if not cached_config.show_servant_otomos_separately then
|
||||
return;
|
||||
end
|
||||
end
|
||||
|
||||
--if position == nil then
|
||||
-- table.insert(this.displayed_players, player);
|
||||
--else
|
||||
table.insert(this.displayed_players, position, player);
|
||||
--end
|
||||
end
|
||||
|
||||
function this.sort()
|
||||
local cached_config = config.current_config.damage_meter_UI;
|
||||
|
||||
if cached_config.settings.my_damage_bar_location == "Normal" then
|
||||
table.insert(this.displayed_players, this.myself);
|
||||
end
|
||||
|
||||
-- sort here
|
||||
if cached_config.sorting.type == "Normal" then
|
||||
if cached_config.sorting.reversed_order then
|
||||
table.sort(this.displayed_players, function(left, right)
|
||||
return left.id > right.id;
|
||||
end);
|
||||
else
|
||||
table.sort(this.displayed_players, function(left, right)
|
||||
return left.id < right.id;
|
||||
end);
|
||||
end
|
||||
elseif cached_config.sorting.type == "DPS" then
|
||||
if cached_config.sorting.reversed_order then
|
||||
table.sort(this.displayed_players, function(left, right)
|
||||
return left.dps < right.dps;
|
||||
end);
|
||||
else
|
||||
table.sort(this.displayed_players, function(left, right)
|
||||
return left.dps > right.dps;
|
||||
end);
|
||||
end
|
||||
else
|
||||
if cached_config.sorting.reversed_order then
|
||||
table.sort(this.displayed_players, function(left, right)
|
||||
return left.display.total_damage < right.display.total_damage;
|
||||
end);
|
||||
else
|
||||
table.sort(this.displayed_players, function(left, right)
|
||||
return left.display.total_damage > right.display.total_damage;
|
||||
end);
|
||||
end
|
||||
end
|
||||
|
||||
if cached_config.settings.my_damage_bar_location == "First" then
|
||||
this.add_to_displayed_players_list(players.myself, cached_config, 1);
|
||||
|
||||
elseif cached_config.settings.my_damage_bar_location == "Last" then
|
||||
this.add_to_displayed_players_list(players.myself, cached_config);
|
||||
end
|
||||
end
|
||||
|
||||
function this.draw()
|
||||
local cached_config = config.current_config.damage_meter_UI;
|
||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||
|
||||
if players.total.display.total_damage == 0 and cached_config.settings.hide_module_if_total_damage_is_zero then
|
||||
return;
|
||||
end
|
||||
|
||||
this.calculate_top_damage_and_dps();
|
||||
|
||||
local position_on_screen = screen.calculate_absolute_coordinates(cached_config.position);
|
||||
|
||||
-- draw total damage
|
||||
if cached_config.settings.total_damage_location == "First"
|
||||
and not cached_config.settings.hide_total_damage then
|
||||
if not (cached_config.settings.hide_total_if_total_damage_is_zero and players.total.display.total_damage == 0) then
|
||||
players.draw(players.total, position_on_screen, 1);
|
||||
|
||||
if cached_config.settings.orientation == "Horizontal" then
|
||||
position_on_screen.x = position_on_screen.x + cached_config.spacing.x * global_scale_modifier;
|
||||
else
|
||||
position_on_screen.y = position_on_screen.y + cached_config.spacing.y * global_scale_modifier;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- draw
|
||||
local position_on_screen = screen.calculate_absolute_coordinates(cached_config.position);
|
||||
for _, _player in ipairs(quest_players) do
|
||||
if _player.display.total_damage == 0 and cached_config.settings.hide_player_if_player_damage_is_zero then
|
||||
goto continue
|
||||
end
|
||||
if not cached_config.settings.total_damage_offset_is_relative then
|
||||
position_on_screen = screen.calculate_absolute_coordinates(cached_config.position);
|
||||
end
|
||||
|
||||
if _player == player.myself then
|
||||
if cached_config.settings.hide_myself then
|
||||
goto continue
|
||||
end
|
||||
elseif cached_config.settings.hide_other_players then
|
||||
goto continue
|
||||
end
|
||||
|
||||
player.draw(_player, position_on_screen, 1, top_damage, top_dps);
|
||||
for _, player in ipairs(this.displayed_players) do
|
||||
|
||||
players.draw(player, position_on_screen, 1, top_damage, top_dps);
|
||||
|
||||
if cached_config.settings.orientation == "Horizontal" then
|
||||
position_on_screen.x = position_on_screen.x + cached_config.spacing.x * global_scale_modifier;
|
||||
else
|
||||
@@ -165,34 +244,38 @@ function damage_meter_UI.draw()
|
||||
end
|
||||
|
||||
::continue::
|
||||
|
||||
end
|
||||
|
||||
-- draw total damage
|
||||
if cached_config.settings.hide_total_damage then
|
||||
return;
|
||||
end
|
||||
if cached_config.settings.total_damage_location == "Last"
|
||||
and not cached_config.settings.hide_total_damage then
|
||||
|
||||
if cached_config.settings.hide_total_if_total_damage_is_zero and player.total.display.total_damage == 0 then
|
||||
return;
|
||||
end
|
||||
if not (cached_config.settings.hide_total_if_total_damage_is_zero and players.total.display.total_damage == 0) then
|
||||
|
||||
if not cached_config.settings.total_damage_offset_is_relative then
|
||||
position_on_screen = screen.calculate_absolute_coordinates(cached_config.position);
|
||||
end
|
||||
if not cached_config.settings.total_damage_offset_is_relative then
|
||||
position_on_screen = screen.calculate_absolute_coordinates(cached_config.position);
|
||||
end
|
||||
|
||||
player.draw_total(position_on_screen, 1);
|
||||
players.draw(players.total, position_on_screen, 1);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function damage_meter_UI.init_module()
|
||||
function this.init_dependencies()
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
player = require("MHR_Overlay.Damage_Meter.player");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
non_players = require("MHR_Overlay.Damage_Meter.non_players");
|
||||
quest_status = require("MHR_Overlay.Game_Handler.quest_status");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return damage_meter_UI;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -1,59 +1,108 @@
|
||||
local env_creature_UI = {};
|
||||
local this = {};
|
||||
|
||||
local singletons;
|
||||
local config;
|
||||
local customization_menu;
|
||||
local large_monster;
|
||||
local screen;
|
||||
local player;
|
||||
local players;
|
||||
local drawing;
|
||||
local table_helpers;
|
||||
local health_UI_entity;
|
||||
local stamina_UI_entity;
|
||||
local rage_UI_entity;
|
||||
local env_creature;
|
||||
local error_handler;
|
||||
local utils;
|
||||
|
||||
local enemy_manager_type_def = sdk.find_type_definition("snow.enemy.EnemyManager");
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function env_creature_UI.draw()
|
||||
if singletons.enemy_manager == nil then
|
||||
local displayed_creatures = {};
|
||||
|
||||
function this.update()
|
||||
local cached_config = config.current_config.endemic_life_UI;
|
||||
|
||||
local _displayed_creatures = {};
|
||||
|
||||
if utils.number.is_equal(cached_config.settings.max_distance, 0) then
|
||||
displayed_creatures = {};
|
||||
return;
|
||||
end
|
||||
|
||||
for REcreature, creature in pairs(env_creature.list) do
|
||||
if cached_config.settings.hide_inactive_creatures and creature.is_inactive then
|
||||
goto continue;
|
||||
end
|
||||
|
||||
creature.distance = (players.myself_position - creature.position):length();
|
||||
if creature.distance > cached_config.settings.max_distance then
|
||||
goto continue;
|
||||
end
|
||||
|
||||
table.insert(_displayed_creatures, creature);
|
||||
::continue::
|
||||
end
|
||||
|
||||
displayed_creatures = _displayed_creatures;
|
||||
end
|
||||
|
||||
function this.draw()
|
||||
local cached_config = config.current_config.endemic_life_UI;
|
||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||
|
||||
for i, creature in ipairs(displayed_creatures) do
|
||||
local world_offset = Vector3f.new(
|
||||
cached_config.world_offset.x,
|
||||
cached_config.world_offset.y,
|
||||
cached_config.world_offset.z
|
||||
);
|
||||
|
||||
for REcreature, creature in pairs(env_creature.list) do
|
||||
|
||||
if cached_config.settings.max_distance == 0 then
|
||||
break
|
||||
local position_on_screen;
|
||||
if cached_config.settings.head_tracking then
|
||||
position_on_screen = draw.world_to_screen(creature.head_position + world_offset);
|
||||
else
|
||||
position_on_screen = draw.world_to_screen(creature.position + world_offset);
|
||||
end
|
||||
|
||||
if cached_config.settings.hide_inactive_creatures and creature.is_inactive then
|
||||
goto continue
|
||||
end
|
||||
|
||||
local position_on_screen = {};
|
||||
|
||||
local world_offset = Vector3f.new(cached_config.world_offset.x, cached_config.world_offset.y,
|
||||
cached_config.world_offset.z);
|
||||
|
||||
position_on_screen = draw.world_to_screen(creature.position + world_offset);
|
||||
|
||||
if position_on_screen == nil then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
|
||||
position_on_screen.x = position_on_screen.x + cached_config.viewport_offset.x * global_scale_modifier;
|
||||
position_on_screen.y = position_on_screen.y + cached_config.viewport_offset.y * global_scale_modifier;
|
||||
|
||||
creature.distance = (player.myself_position - creature.position):length();
|
||||
|
||||
local opacity_scale = 1;
|
||||
if creature.distance > cached_config.settings.max_distance then
|
||||
goto continue
|
||||
end
|
||||
|
||||
if cached_config.settings.opacity_falloff then
|
||||
creature.distance = (players.myself_position - creature.position):length();
|
||||
opacity_scale = 1 - (creature.distance / cached_config.settings.max_distance);
|
||||
end
|
||||
|
||||
@@ -62,19 +111,23 @@ function env_creature_UI.draw()
|
||||
end
|
||||
end
|
||||
|
||||
function env_creature_UI.init_module()
|
||||
function this.init_dependencies()
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
large_monster = require("MHR_Overlay.Monsters.large_monster");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
player = require("MHR_Overlay.Damage_Meter.player");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
health_UI_entity = require("MHR_Overlay.UI.UI_Entities.health_UI_entity");
|
||||
stamina_UI_entity = require("MHR_Overlay.UI.UI_Entities.stamina_UI_entity");
|
||||
rage_UI_entity = require("MHR_Overlay.UI.UI_Entities.rage_UI_entity");
|
||||
env_creature = require("MHR_Overlay.Endemic_Life.env_creature");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
end
|
||||
|
||||
return env_creature_UI;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -1,15 +1,49 @@
|
||||
local large_monster_UI = {};
|
||||
local this = {};
|
||||
|
||||
local singletons;
|
||||
local config;
|
||||
local customization_menu;
|
||||
local large_monster;
|
||||
local screen;
|
||||
local player;
|
||||
local players;
|
||||
local drawing;
|
||||
local table_helpers;
|
||||
local health_UI_entity;
|
||||
local stamina_UI_entity;
|
||||
local rage_UI_entity;
|
||||
local error_handler;
|
||||
local utils;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
local enemy_manager_type_def = sdk.find_type_definition("snow.enemy.EnemyManager");
|
||||
local get_boss_enemy_count_method = enemy_manager_type_def:get_method("getBossEnemyCount");
|
||||
@@ -21,235 +55,325 @@ local get_tg_camera_method = gui_manager_type_def:get_method("get_refGuiHud_TgCa
|
||||
local tg_camera_type_def = get_tg_camera_method:get_return_type();
|
||||
local get_targeting_enemy_index_field = tg_camera_type_def:get_field("OldTargetingEmIndex");
|
||||
|
||||
function large_monster_UI.draw(dynamic_enabled, static_enabled, highlighted_enabled)
|
||||
local large_monster_list = {};
|
||||
|
||||
local displayed_dynamic_monsters = {};
|
||||
local displayed_static_monsters = {};
|
||||
local highlighted_monster = nil;
|
||||
|
||||
function this.update(dynamic_enabled, static_enabled, highlighted_enabled)
|
||||
local cached_config = config.current_config.large_monster_UI;
|
||||
|
||||
if singletons.enemy_manager == nil then
|
||||
error_handler.report("large_monster_UI.update", "Failed to Access Data: enemy_manager");
|
||||
return;
|
||||
end
|
||||
|
||||
local displayed_monsters = {};
|
||||
|
||||
local update_distance =
|
||||
dynamic_enabled or cached_config.static.sorting.type == "Distance"
|
||||
or (cached_config.highlighted.auto_highlight.enabled
|
||||
and (cached_config.highlighted.auto_highlight.mode == "Closest" or cached_config.highlighted.auto_highlight.mode == "Furthest")
|
||||
);
|
||||
|
||||
local highlighted_id = -1;
|
||||
local monster_id_shift = 0;
|
||||
local highlighted_monster = nil;
|
||||
|
||||
if not cached_config.highlighted.auto_highlight.enabled and singletons.gui_manager ~= nil then
|
||||
local gui_hud_target_camera = get_tg_camera_method:call(singletons.gui_manager);
|
||||
if gui_hud_target_camera ~= nil then
|
||||
highlighted_id = get_targeting_enemy_index_field:get_data(gui_hud_target_camera);
|
||||
|
||||
if highlighted_id == nil then
|
||||
highlighted_id = -1;
|
||||
end
|
||||
end
|
||||
end
|
||||
large_monster_list = {};
|
||||
|
||||
local enemy_count = get_boss_enemy_count_method:call(singletons.enemy_manager);
|
||||
if enemy_count == nil then
|
||||
error_handler.report("large_monster_UI.update", "Failed to Access Data: enemy_count");
|
||||
return;
|
||||
end
|
||||
|
||||
|
||||
for i = 0, enemy_count - 1 do
|
||||
local enemy = get_boss_enemy_method:call(singletons.enemy_manager, i);
|
||||
if enemy == nil then
|
||||
customization_menu.status = "No enemy";
|
||||
goto continue
|
||||
error_handler.report("large_monster_UI.update", "Failed to Access Data: enemy No. " .. tostring(i));
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local monster = large_monster.list[enemy];
|
||||
local monster = large_monster.get_monster(enemy);
|
||||
if monster == nil then
|
||||
customization_menu.status = "No large monster entry";
|
||||
goto continue
|
||||
error_handler.report("large_monster_UI.update", "Failed to create Large Monster Entry No. " .. tostring(i));
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if update_distance then
|
||||
monster.distance = (player.myself_position - monster.position):length();
|
||||
end
|
||||
monster.distance = (players.myself_position - monster.position):length();
|
||||
|
||||
if cached_config.highlighted.auto_highlight.enabled then
|
||||
if highlighted_monster == nil then
|
||||
highlighted_monster = monster;
|
||||
table.insert(large_monster_list, monster);
|
||||
|
||||
elseif cached_config.highlighted.auto_highlight.mode == "Farthest" then
|
||||
if monster.distance > highlighted_monster.distance then
|
||||
highlighted_monster = monster;
|
||||
end
|
||||
|
||||
elseif cached_config.highlighted.auto_highlight.mode == "Lowest Health" then
|
||||
if monster.health < highlighted_monster.health then
|
||||
highlighted_monster = monster;
|
||||
end
|
||||
|
||||
elseif cached_config.highlighted.auto_highlight.mode == "Highest Health" then
|
||||
if monster.health > highlighted_monster.health then
|
||||
highlighted_monster = monster;
|
||||
end
|
||||
|
||||
elseif cached_config.highlighted.auto_highlight.mode == "Lowest Health Percentage" then
|
||||
if monster.health_percentage < highlighted_monster.health_percentage then
|
||||
highlighted_monster = monster;
|
||||
end
|
||||
|
||||
elseif cached_config.highlighted.auto_highlight.mode == "Highest Health Percentage" then
|
||||
if monster.health_percentage > highlighted_monster.health_percentage then
|
||||
highlighted_monster = monster;
|
||||
end
|
||||
|
||||
else
|
||||
if monster.distance < highlighted_monster.distance then
|
||||
highlighted_monster = monster;
|
||||
end
|
||||
end
|
||||
else
|
||||
if monster.dead_or_captured or not monster.is_disp_icon_mini_map then
|
||||
monster_id_shift = monster_id_shift + 1;
|
||||
|
||||
elseif i == highlighted_id + monster_id_shift then
|
||||
highlighted_monster = monster;
|
||||
end
|
||||
end
|
||||
|
||||
table.insert(displayed_monsters, monster);
|
||||
::continue::
|
||||
end
|
||||
|
||||
if dynamic_enabled then
|
||||
large_monster_UI.draw_dynamic(displayed_monsters, highlighted_monster, cached_config);
|
||||
end
|
||||
|
||||
if highlighted_enabled then
|
||||
large_monster_UI.draw_highlighted(highlighted_monster, cached_config);
|
||||
this.update_dynamic_monsters(large_monster_list, cached_config);
|
||||
end
|
||||
|
||||
if static_enabled then
|
||||
large_monster_UI.draw_static(displayed_monsters, highlighted_monster, cached_config);
|
||||
this.update_static_monsters(large_monster_list, cached_config);
|
||||
end
|
||||
end
|
||||
|
||||
function large_monster_UI.draw_dynamic(displayed_monsters, highlighted_monster, cached_config)
|
||||
function this.update_dynamic_monsters(large_monster_list, cached_config)
|
||||
if not cached_config.dynamic.enabled then
|
||||
displayed_dynamic_monsters = {};
|
||||
return;
|
||||
end
|
||||
|
||||
local dynamic_cached_config = cached_config.dynamic.settings;
|
||||
|
||||
local _displayed_dynamic_monsters = {};
|
||||
|
||||
if utils.number.is_equal(dynamic_cached_config.max_distance, 0) then
|
||||
displayed_dynamic_monsters = {};
|
||||
return;
|
||||
end
|
||||
|
||||
for i, monster in ipairs(large_monster_list) do
|
||||
if monster.distance > dynamic_cached_config.max_distance then
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if monster.is_stealth then
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if monster.dead_or_captured and dynamic_cached_config.hide_dead_or_captured then
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if monster == highlighted_monster then
|
||||
if not dynamic_cached_config.render_highlighted_monster then
|
||||
goto continue;
|
||||
end
|
||||
else
|
||||
if not dynamic_cached_config.render_not_highlighted_monsters then
|
||||
goto continue;
|
||||
end
|
||||
end
|
||||
|
||||
table.insert(_displayed_dynamic_monsters, monster);
|
||||
|
||||
::continue::
|
||||
end
|
||||
|
||||
displayed_dynamic_monsters = _displayed_dynamic_monsters;
|
||||
end
|
||||
|
||||
function this.update_static_monsters(large_monster_list, cached_config)
|
||||
if not cached_config.static.enabled then
|
||||
displayed_static_monsters = {};
|
||||
return;
|
||||
end
|
||||
|
||||
local static_cached_config = cached_config.static.settings;
|
||||
|
||||
local _displayed_static_monsters = {};
|
||||
|
||||
for i, monster in ipairs(large_monster_list) do
|
||||
if monster.is_stealth then
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if monster.dead_or_captured and static_cached_config.hide_dead_or_captured then
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if monster == highlighted_monster then
|
||||
if not static_cached_config.render_highlighted_monster then
|
||||
goto continue;
|
||||
end
|
||||
else
|
||||
if not static_cached_config.render_not_highlighted_monsters then
|
||||
goto continue;
|
||||
end
|
||||
end
|
||||
|
||||
table.insert(_displayed_static_monsters, monster);
|
||||
::continue::
|
||||
end
|
||||
|
||||
|
||||
displayed_static_monsters = this.sort_static_monsters(_displayed_static_monsters, cached_config);
|
||||
end
|
||||
|
||||
function this.sort_static_monsters(_displayed_static_monsters, cached_config)
|
||||
cached_config = cached_config.static.sorting;
|
||||
|
||||
-- sort here
|
||||
if cached_config.type == "Normal" and cached_config.reversed_order then
|
||||
local reversed_monsters = {};
|
||||
for i = #_displayed_static_monsters, 1, -1 do
|
||||
table.insert(reversed_monsters, _displayed_static_monsters[i]);
|
||||
end
|
||||
|
||||
_displayed_static_monsters = reversed_monsters;
|
||||
|
||||
elseif cached_config.type == "Health" then
|
||||
if cached_config.reversed_order then
|
||||
table.sort(_displayed_static_monsters, function(left, right)
|
||||
return left.health > right.health;
|
||||
end);
|
||||
else
|
||||
table.sort(_displayed_static_monsters, function(left, right)
|
||||
return left.health < right.health;
|
||||
end);
|
||||
end
|
||||
elseif cached_config.type == "Health Percentage" then
|
||||
if cached_config.reversed_order then
|
||||
table.sort(_displayed_static_monsters, function(left, right)
|
||||
return left.health_percentage > right.health_percentage;
|
||||
end);
|
||||
else
|
||||
table.sort(_displayed_static_monsters, function(left, right)
|
||||
return left.health_percentage < right.health_percentage;
|
||||
end);
|
||||
end
|
||||
elseif cached_config.type == "Distance" then
|
||||
if cached_config.reversed_order then
|
||||
table.sort(_displayed_static_monsters, function(left, right)
|
||||
return left.distance > right.distance;
|
||||
end);
|
||||
else
|
||||
table.sort(_displayed_static_monsters, function(left, right)
|
||||
return left.distance < right.distance;
|
||||
end);
|
||||
end
|
||||
end
|
||||
|
||||
return _displayed_static_monsters;
|
||||
end
|
||||
|
||||
function this.update_highlighted_monster(large_monster_list, autohighlight_config)
|
||||
local monster_id_shift = 0;
|
||||
local _highlighted_monster = nil;
|
||||
|
||||
large_monster.update_highlighted_id();
|
||||
|
||||
if large_monster.highlighted_id == -1 then
|
||||
highlighted_monster = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
for i, monster in ipairs(large_monster_list) do
|
||||
if monster.dead_or_captured or not monster.is_disp_icon_mini_map then
|
||||
monster_id_shift = monster_id_shift + 1;
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if not autohighlight_config.enabled then
|
||||
if i - 1 == large_monster.highlighted_id + monster_id_shift then
|
||||
_highlighted_monster = monster;
|
||||
goto continue;
|
||||
end
|
||||
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if _highlighted_monster == nil then
|
||||
_highlighted_monster = monster;
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if autohighlight_config.mode == "Farthest" and monster.distance > _highlighted_monster.distance then
|
||||
_highlighted_monster = monster;
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if autohighlight_config.mode == "Lowest Health" and monster.health < _highlighted_monster.health then
|
||||
_highlighted_monster = monster;
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if autohighlight_config.mode == "Highest Health" and monster.health > _highlighted_monster.health then
|
||||
_highlighted_monster = monster;
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if autohighlight_config.mode == "Lowest Health Percentage" and monster.health_percentage < _highlighted_monster.health_percentage then
|
||||
_highlighted_monster = monster;
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if autohighlight_config.mode == "Highest Health Percentage" and monster.health_percentage > _highlighted_monster.health_percentage then
|
||||
_highlighted_monster = monster;
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if monster.distance < _highlighted_monster.distance then
|
||||
_highlighted_monster = monster;
|
||||
end
|
||||
|
||||
::continue::
|
||||
end
|
||||
|
||||
highlighted_monster = _highlighted_monster;
|
||||
end
|
||||
|
||||
function this.draw(dynamic_enabled, static_enabled, highlighted_enabled)
|
||||
local cached_config = config.current_config.large_monster_UI;
|
||||
|
||||
this.update_highlighted_monster(large_monster_list, cached_config.highlighted.auto_highlight);
|
||||
|
||||
if dynamic_enabled then
|
||||
local success = pcall(this.draw_dynamic, cached_config);
|
||||
if not success then
|
||||
error_handler.report("large_monster_UI.draw", "Dynamic Large Monster drawing function threw an exception");
|
||||
end
|
||||
end
|
||||
|
||||
if highlighted_enabled then
|
||||
local success = pcall(this.draw_highlighted, cached_config);
|
||||
if not success then
|
||||
error_handler.report("large_monster_UI.draw", "Highlighted Large Monster drawing function threw an exception");
|
||||
end
|
||||
end
|
||||
|
||||
if static_enabled then
|
||||
local success = pcall(this.draw_static, cached_config);
|
||||
if not success then
|
||||
error_handler.report("large_monster_UI.draw", "Static Large Monster drawing function threw an exception");
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function this.draw_dynamic(cached_config)
|
||||
cached_config = cached_config.dynamic;
|
||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||
|
||||
local i = 0;
|
||||
for _, monster in ipairs(displayed_monsters) do
|
||||
if cached_config.settings.max_distance == 0 then
|
||||
break
|
||||
end
|
||||
for _, monster in ipairs(displayed_dynamic_monsters) do
|
||||
local world_offset = Vector3f.new(cached_config.world_offset.x, cached_config.world_offset.y, cached_config.world_offset.z);
|
||||
|
||||
if monster.dead_or_captured and cached_config.settings.hide_dead_or_captured then
|
||||
goto continue
|
||||
end
|
||||
|
||||
if monster == highlighted_monster then
|
||||
if not cached_config.settings.render_highlighted_monster then
|
||||
goto continue
|
||||
end
|
||||
local position_on_screen;
|
||||
if cached_config.settings.head_tracking then
|
||||
position_on_screen = draw.world_to_screen(monster.head_position + world_offset);
|
||||
else
|
||||
if not cached_config.settings.render_not_highlighted_monsters then
|
||||
goto continue
|
||||
end
|
||||
position_on_screen = draw.world_to_screen(monster.position + world_offset);
|
||||
end
|
||||
|
||||
local position_on_screen = {};
|
||||
|
||||
local world_offset = Vector3f.new(cached_config.world_offset.x, cached_config.world_offset.y,
|
||||
cached_config.world_offset.z);
|
||||
|
||||
position_on_screen = draw.world_to_screen(monster.position + world_offset);
|
||||
|
||||
if position_on_screen == nil then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
|
||||
position_on_screen.x = position_on_screen.x + cached_config.viewport_offset.x * global_scale_modifier;
|
||||
position_on_screen.y = position_on_screen.y + cached_config.viewport_offset.y * global_scale_modifier;
|
||||
|
||||
local opacity_scale = 1;
|
||||
if monster.distance > cached_config.settings.max_distance then
|
||||
goto continue
|
||||
end
|
||||
|
||||
|
||||
if cached_config.settings.opacity_falloff then
|
||||
monster.distance = (players.myself_position - monster.position):length();
|
||||
opacity_scale = 1 - (monster.distance / cached_config.settings.max_distance);
|
||||
end
|
||||
|
||||
large_monster.draw(monster, "dynamic", cached_config, position_on_screen, opacity_scale);
|
||||
large_monster.draw(monster, "dynamic_UI", cached_config, position_on_screen, opacity_scale);
|
||||
|
||||
i = i + 1;
|
||||
::continue::
|
||||
end
|
||||
end
|
||||
|
||||
function large_monster_UI.draw_static(displayed_monsters, highlighted_monster, cached_config)
|
||||
function this.draw_static(cached_config)
|
||||
cached_config = cached_config.static;
|
||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||
|
||||
-- sort here
|
||||
if cached_config.sorting.type == "Normal" and cached_config.sorting.reversed_order then
|
||||
local reversed_monsters = {};
|
||||
for i = #displayed_monsters, 1, -1 do
|
||||
table.insert(reversed_monsters, displayed_monsters[i]);
|
||||
end
|
||||
|
||||
displayed_monsters = reversed_monsters;
|
||||
|
||||
elseif cached_config.sorting.type == "Health" then
|
||||
if cached_config.sorting.reversed_order then
|
||||
table.sort(displayed_monsters, function(left, right)
|
||||
return left.health > right.health;
|
||||
end);
|
||||
else
|
||||
table.sort(displayed_monsters, function(left, right)
|
||||
return left.health < right.health;
|
||||
end);
|
||||
end
|
||||
elseif cached_config.sorting.type == "Health Percentage" then
|
||||
if cached_config.sorting.reversed_order then
|
||||
table.sort(displayed_monsters, function(left, right)
|
||||
return left.health_percentage > right.health_percentage;
|
||||
end);
|
||||
else
|
||||
table.sort(displayed_monsters, function(left, right)
|
||||
return left.health_percentage < right.health_percentage;
|
||||
end);
|
||||
end
|
||||
elseif cached_config.sorting.type == "Distance" then
|
||||
if cached_config.sorting.reversed_order then
|
||||
table.sort(displayed_monsters, function(left, right)
|
||||
return left.distance > right.distance;
|
||||
end);
|
||||
else
|
||||
table.sort(displayed_monsters, function(left, right)
|
||||
return left.distance < right.distance;
|
||||
end);
|
||||
end
|
||||
end
|
||||
|
||||
local position_on_screen = screen.calculate_absolute_coordinates(cached_config.position);
|
||||
|
||||
local i = 0;
|
||||
for _, monster in ipairs(displayed_monsters) do
|
||||
if monster.dead_or_captured and cached_config.settings.hide_dead_or_captured then
|
||||
goto continue
|
||||
end
|
||||
|
||||
if monster == highlighted_monster then
|
||||
if not cached_config.settings.render_highlighted_monster then
|
||||
goto continue
|
||||
end
|
||||
else
|
||||
if not cached_config.settings.render_not_highlighted_monsters then
|
||||
goto continue
|
||||
end
|
||||
end
|
||||
|
||||
for _, monster in ipairs(displayed_static_monsters) do
|
||||
local monster_position_on_screen = {
|
||||
x = position_on_screen.x,
|
||||
y = position_on_screen.y
|
||||
@@ -261,41 +385,41 @@ function large_monster_UI.draw_static(displayed_monsters, highlighted_monster, c
|
||||
monster_position_on_screen.y = monster_position_on_screen.y + cached_config.spacing.y * i * global_scale_modifier;
|
||||
end
|
||||
|
||||
large_monster.draw(monster, "static", cached_config, monster_position_on_screen, 1);
|
||||
large_monster.draw(monster, "static_UI", cached_config, monster_position_on_screen, 1);
|
||||
|
||||
i = i + 1;
|
||||
::continue::
|
||||
end
|
||||
end
|
||||
|
||||
function large_monster_UI.draw_highlighted(monster, cached_config)
|
||||
cached_config = cached_config.highlighted;
|
||||
|
||||
if monster == nil then
|
||||
function this.draw_highlighted(cached_config)
|
||||
if highlighted_monster == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
cached_config = cached_config.highlighted;
|
||||
|
||||
local position_on_screen = screen.calculate_absolute_coordinates(cached_config.position);
|
||||
|
||||
if monster.dead_or_captured and cached_config.settings.hide_dead_or_captured then
|
||||
return;
|
||||
end
|
||||
|
||||
large_monster.draw(monster, "highlighted", cached_config, position_on_screen, 1);
|
||||
large_monster.draw(highlighted_monster, "highlighted_UI", cached_config, position_on_screen, 1);
|
||||
end
|
||||
|
||||
function large_monster_UI.init_module()
|
||||
function this.init_dependencies()
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
large_monster = require("MHR_Overlay.Monsters.large_monster");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
player = require("MHR_Overlay.Damage_Meter.player");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
health_UI_entity = require("MHR_Overlay.UI.UI_Entities.health_UI_entity");
|
||||
stamina_UI_entity = require("MHR_Overlay.UI.UI_Entities.stamina_UI_entity");
|
||||
rage_UI_entity = require("MHR_Overlay.UI.UI_Entities.rage_UI_entity");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
end
|
||||
|
||||
return large_monster_UI;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -1,152 +1,172 @@
|
||||
local small_monster_UI = {};
|
||||
local this = {};
|
||||
|
||||
local singletons;
|
||||
local config;
|
||||
local small_monster;
|
||||
local customization_menu;
|
||||
local screen;
|
||||
local player;
|
||||
local players;
|
||||
local drawing;
|
||||
local table_helpers;
|
||||
local health_UI_entity;
|
||||
local stamina_UI_entity;
|
||||
local error_handler;
|
||||
local utils;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
local enemy_manager_type_def = sdk.find_type_definition("snow.enemy.EnemyManager");
|
||||
local get_zako_enemy_count_method = enemy_manager_type_def:get_method("getZakoEnemyCount");
|
||||
local get_zako_enemy_method = enemy_manager_type_def:get_method("getZakoEnemy");
|
||||
|
||||
function small_monster_UI.draw()
|
||||
if singletons.enemy_manager == nil then
|
||||
return;
|
||||
end
|
||||
local displayed_monsters = {};
|
||||
|
||||
function this.update()
|
||||
local cached_config = config.current_config.small_monster_UI;
|
||||
|
||||
local displayed_monsters = {};
|
||||
|
||||
local enemy_count = get_zako_enemy_count_method:call(singletons.enemy_manager);
|
||||
if enemy_count == nil then
|
||||
customization_menu.status = "No enemy count";
|
||||
if cached_config.dynamic_positioning.enabled and utils.number.is_equal(cached_config.dynamic_positioning.max_distance, 0) then
|
||||
displayed_monsters = {};
|
||||
return;
|
||||
end
|
||||
|
||||
for i = 0, enemy_count - 1 do
|
||||
local enemy = get_zako_enemy_method:call(singletons.enemy_manager, i);
|
||||
if enemy == nil then
|
||||
customization_menu.status = "No enemy";
|
||||
goto continue
|
||||
end
|
||||
|
||||
local monster = small_monster.list[enemy];
|
||||
if monster == nil then
|
||||
customization_menu.status = "No small monster entry";
|
||||
goto continue
|
||||
end
|
||||
local _displayed_monsters = {};
|
||||
|
||||
for enemy, monster in pairs(small_monster.list) do
|
||||
|
||||
if monster.dead_or_captured and cached_config.settings.hide_dead_or_captured then
|
||||
goto continue
|
||||
end
|
||||
goto continue;
|
||||
end;
|
||||
|
||||
table.insert(displayed_monsters, monster);
|
||||
monster.distance = (players.myself_position - monster.position):length();
|
||||
if monster.distance > cached_config.dynamic_positioning.max_distance then
|
||||
goto continue;
|
||||
end
|
||||
table.insert(_displayed_monsters, monster);
|
||||
::continue::
|
||||
end
|
||||
|
||||
displayed_monsters = this.sort_monsters(_displayed_monsters, cached_config);
|
||||
end
|
||||
|
||||
if cached_config.dynamic_positioning.enabled
|
||||
or (not cached_config.dynamic_positioning.enabled and cached_config.static_sorting.type == "Distance") then
|
||||
for _, monster in ipairs(displayed_monsters) do
|
||||
monster.distance = (player.myself_position - monster.position):length();
|
||||
end
|
||||
end
|
||||
|
||||
function this.sort_monsters(_displayed_monsters, cached_config)
|
||||
if not cached_config.dynamic_positioning.enabled then
|
||||
-- sort here
|
||||
if cached_config.static_sorting.type == "Normal" and cached_config.static_sorting.reversed_order then
|
||||
local reversed_monsters = {};
|
||||
for i = #displayed_monsters, 1, -1 do
|
||||
table.insert(reversed_monsters, displayed_monsters[i]);
|
||||
for i = #_displayed_monsters, 1, -1 do
|
||||
table.insert(reversed_monsters, _displayed_monsters[i]);
|
||||
end
|
||||
displayed_monsters = reversed_monsters;
|
||||
_displayed_monsters = reversed_monsters;
|
||||
|
||||
elseif cached_config.static_sorting.type == "Health" then
|
||||
if cached_config.static_sorting.reversed_order then
|
||||
table.sort(displayed_monsters, function(left, right)
|
||||
table.sort(_displayed_monsters, function(left, right)
|
||||
return left.health > right.health;
|
||||
end);
|
||||
else
|
||||
table.sort(displayed_monsters, function(left, right)
|
||||
table.sort(_displayed_monsters, function(left, right)
|
||||
return left.health < right.health;
|
||||
end);
|
||||
end
|
||||
|
||||
elseif cached_config.static_sorting.type == "Health Percentage" then
|
||||
if cached_config.static_sorting.reversed_order then
|
||||
table.sort(displayed_monsters, function(left, right)
|
||||
table.sort(_displayed_monsters, function(left, right)
|
||||
return left.health_percentage > right.health_percentage;
|
||||
end);
|
||||
else
|
||||
table.sort(displayed_monsters, function(left, right)
|
||||
table.sort(_displayed_monsters, function(left, right)
|
||||
return left.health_percentage < right.health_percentage;
|
||||
end);
|
||||
end
|
||||
elseif cached_config.static_sorting.type == "Distance" then
|
||||
if cached_config.static_sorting.reversed_order then
|
||||
table.sort(displayed_monsters, function(left, right)
|
||||
table.sort(_displayed_monsters, function(left, right)
|
||||
return left.distance > right.distance;
|
||||
end);
|
||||
else
|
||||
table.sort(displayed_monsters, function(left, right)
|
||||
table.sort(_displayed_monsters, function(left, right)
|
||||
return left.distance < right.distance;
|
||||
end);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return _displayed_monsters;
|
||||
end
|
||||
|
||||
function this.draw()
|
||||
local cached_config = config.current_config.small_monster_UI;
|
||||
|
||||
local dynamic_positioning_config = cached_config.dynamic_positioning;
|
||||
local is_dynamic_positioning_enabled = dynamic_positioning_config.enabled;
|
||||
|
||||
local i = 0;
|
||||
for _, monster in ipairs(displayed_monsters) do
|
||||
local position_on_screen;
|
||||
|
||||
if cached_config.dynamic_positioning.enabled then
|
||||
local world_offset = Vector3f.new(cached_config.dynamic_positioning.world_offset.x,
|
||||
cached_config.dynamic_positioning.world_offset.y,
|
||||
cached_config.dynamic_positioning.world_offset.z);
|
||||
if is_dynamic_positioning_enabled then
|
||||
local world_offset = Vector3f.new(
|
||||
dynamic_positioning_config.world_offset.x,
|
||||
dynamic_positioning_config.world_offset.y,
|
||||
dynamic_positioning_config.world_offset.z
|
||||
);
|
||||
|
||||
position_on_screen = draw.world_to_screen(monster.position + world_offset);
|
||||
|
||||
if position_on_screen == nil then
|
||||
goto continue
|
||||
if dynamic_positioning_config.head_tracking then
|
||||
position_on_screen = draw.world_to_screen(monster.head_position + world_offset);
|
||||
else
|
||||
position_on_screen = draw.world_to_screen(monster.position + world_offset);
|
||||
end
|
||||
|
||||
position_on_screen.x = position_on_screen.x + cached_config.dynamic_positioning.viewport_offset.x;
|
||||
position_on_screen.y = position_on_screen.y + cached_config.dynamic_positioning.viewport_offset.y;
|
||||
if position_on_screen == nil then
|
||||
goto continue;
|
||||
end
|
||||
|
||||
position_on_screen.x = position_on_screen.x + dynamic_positioning_config.viewport_offset.x;
|
||||
position_on_screen.y = position_on_screen.y + dynamic_positioning_config.viewport_offset.y;
|
||||
else
|
||||
position_on_screen = screen.calculate_absolute_coordinates(cached_config.static_position);
|
||||
if cached_config.settings.orientation == "Horizontal" then
|
||||
position_on_screen.x = position_on_screen.x + cached_config.static_spacing.x * i;
|
||||
|
||||
else
|
||||
position_on_screen.y = position_on_screen.y + cached_config.static_spacing.y * i;
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
local opacity_scale = 1;
|
||||
if cached_config.dynamic_positioning.enabled then
|
||||
if cached_config.dynamic_positioning.max_distance == 0 then
|
||||
return;
|
||||
end
|
||||
|
||||
if monster.distance > cached_config.dynamic_positioning.max_distance then
|
||||
goto continue
|
||||
end
|
||||
|
||||
if cached_config.dynamic_positioning.opacity_falloff then
|
||||
opacity_scale = 1 - (monster.distance / cached_config.dynamic_positioning.max_distance);
|
||||
end
|
||||
if is_dynamic_positioning_enabled and dynamic_positioning_config.opacity_falloff then
|
||||
monster.distance = (players.myself_position - monster.position):length();
|
||||
opacity_scale = 1 - (monster.distance / dynamic_positioning_config.max_distance);
|
||||
end
|
||||
|
||||
|
||||
|
||||
small_monster.draw(monster, cached_config, position_on_screen, opacity_scale);
|
||||
|
||||
i = i + 1;
|
||||
@@ -154,17 +174,21 @@ function small_monster_UI.draw()
|
||||
end
|
||||
end
|
||||
|
||||
function small_monster_UI.init_module()
|
||||
function this.init_dependencies()
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
small_monster = require("MHR_Overlay.Monsters.small_monster");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
player = require("MHR_Overlay.Damage_Meter.player");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
health_UI_entity = require("MHR_Overlay.UI.UI_Entities.health_UI_entity");
|
||||
stamina_UI_entity = require("MHR_Overlay.UI.UI_Entities.stamina_UI_entity");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
end
|
||||
|
||||
return small_monster_UI;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
322
reframework/autorun/MHR_Overlay/UI/Modules/stats_UI.lua
Normal file
322
reframework/autorun/MHR_Overlay/UI/Modules/stats_UI.lua
Normal file
@@ -0,0 +1,322 @@
|
||||
local this = {};
|
||||
|
||||
local buff_UI_entity;
|
||||
local config;
|
||||
local buffs;
|
||||
local item_buffs;
|
||||
local melody_effects;
|
||||
local endemic_life_buff;
|
||||
local screen;
|
||||
local utils;
|
||||
local error_handler;
|
||||
local skills;
|
||||
local dango_skills;
|
||||
local abnormal_statuses;
|
||||
local drawing;
|
||||
local player_info;
|
||||
local language;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
this.label_list = {
|
||||
attack = nil,
|
||||
|
||||
defense = nil,
|
||||
fire_resistance = nil,
|
||||
water_resistance = nil,
|
||||
thunder_resistance = nil,
|
||||
ice_resistance = nil,
|
||||
dragon_resistance = nil
|
||||
};
|
||||
|
||||
this.affinity_label = nil;
|
||||
this.health_label = nil;
|
||||
this.stamina_label = nil;
|
||||
this.element_label = nil;
|
||||
this.element_2_label = nil;
|
||||
|
||||
function this.draw()
|
||||
local cached_config = config.current_config.stats_UI;
|
||||
|
||||
if not cached_config.enabled then
|
||||
return;
|
||||
end
|
||||
|
||||
local cached_names = language.current_language.stats;
|
||||
|
||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||
|
||||
local position_on_screen = screen.calculate_absolute_coordinates(cached_config.position);
|
||||
|
||||
-- draw
|
||||
for label_key, label in pairs(this.label_list) do
|
||||
local name_text = "";
|
||||
if label.include.name then
|
||||
if label.include.value then
|
||||
name_text = string.format("%s: ", cached_names[label_key]);
|
||||
else
|
||||
name_text = string.format("%s", cached_names[label_key]);
|
||||
end
|
||||
end
|
||||
|
||||
if label.include.value then
|
||||
name_text = string.format("%s%s", name_text, tostring(player_info.list[label_key]));
|
||||
end
|
||||
|
||||
drawing.draw_label(label, position_on_screen, 1, name_text);
|
||||
|
||||
::continue::
|
||||
end
|
||||
|
||||
-- Health Label
|
||||
local health_name_text = "";
|
||||
if this.health_label.include.name then
|
||||
health_name_text = string.format("%s: ", language.current_language.customization_menu.health);
|
||||
|
||||
if this.health_label.include.value or this.health_label.include.max_value then
|
||||
health_name_text = string.format("%s: ", language.current_language.customization_menu.health);
|
||||
else
|
||||
health_name_text = string.format("%s", language.current_language.customization_menu.health);
|
||||
end
|
||||
end
|
||||
|
||||
if this.health_label.include.value and not this.health_label.include.max_value then
|
||||
health_name_text = string.format("%s%s", health_name_text, tostring(player_info.list.health));
|
||||
|
||||
elseif not this.health_label.include.value and this.health_label.include.max_value then
|
||||
health_name_text = string.format("%s%s", health_name_text, tostring(player_info.list.max_health));
|
||||
|
||||
elseif this.health_label.include.value and this.health_label.include.max_value then
|
||||
health_name_text = string.format("%s%s/%s", health_name_text, tostring(player_info.list.health), tostring(player_info.list.max_health));
|
||||
end
|
||||
|
||||
drawing.draw_label(this.health_label, position_on_screen, 1, health_name_text);
|
||||
|
||||
-- Stamina Label
|
||||
local stamina_name_text = "";
|
||||
if this.stamina_label.include.name then
|
||||
if this.stamina_label.include.value or this.stamina_label.include.max_value then
|
||||
stamina_name_text = string.format("%s: ", cached_names.stamina);
|
||||
else
|
||||
stamina_name_text = string.format("%s", cached_names.stamina);
|
||||
end
|
||||
end
|
||||
|
||||
if this.stamina_label.include.value and not this.stamina_label.include.max_value then
|
||||
stamina_name_text = string.format("%s%s", stamina_name_text, tostring(player_info.list.stamina));
|
||||
|
||||
elseif not this.stamina_label.include.value and this.stamina_label.include.max_value then
|
||||
stamina_name_text = string.format("%s%s", stamina_name_text, tostring(player_info.list.max_stamina));
|
||||
|
||||
elseif this.stamina_label.include.value and this.stamina_label.include.max_value then
|
||||
stamina_name_text = string.format("%s%s/%s", stamina_name_text, tostring(player_info.list.stamina), tostring(player_info.list.max_stamina));
|
||||
end
|
||||
|
||||
drawing.draw_label(this.stamina_label, position_on_screen, 1, stamina_name_text);
|
||||
|
||||
-- Affinity Label
|
||||
local affinity_name_text = "";
|
||||
if this.affinity_label.include.name then
|
||||
if this.affinity_label.include.value then
|
||||
affinity_name_text = string.format("%s: ", cached_names.affinity);
|
||||
else
|
||||
affinity_name_text = string.format("%s", cached_names.affinity);
|
||||
end
|
||||
end
|
||||
|
||||
if this.affinity_label.include.value then
|
||||
affinity_name_text = string.format("%s%s%%", affinity_name_text, tostring(player_info.list.affinity));
|
||||
end
|
||||
|
||||
drawing.draw_label(this.affinity_label, position_on_screen, 1, affinity_name_text);
|
||||
|
||||
-- Element Label
|
||||
if player_info.list.element_type ~= 0 then
|
||||
|
||||
local element_name_text = "";
|
||||
if this.element_label.include.name then
|
||||
|
||||
local ailment_names = language.current_language.ailments;
|
||||
|
||||
local ailment_name = "";
|
||||
|
||||
if player_info.list.element_type == 1 then
|
||||
ailment_name = cached_names.fire;
|
||||
elseif player_info.list.element_type == 2 then
|
||||
ailment_name = cached_names.water;
|
||||
elseif player_info.list.element_type == 3 then
|
||||
ailment_name = cached_names.thunder;
|
||||
elseif player_info.list.element_type == 4 then
|
||||
ailment_name = cached_names.ice;
|
||||
elseif player_info.list.element_type == 5 then
|
||||
ailment_name = cached_names.dragon;
|
||||
elseif player_info.list.element_type == 6 then
|
||||
ailment_name = ailment_names.poison;
|
||||
elseif player_info.list.element_type == 7 then
|
||||
ailment_name = ailment_names.sleep;
|
||||
elseif player_info.list.element_type == 8 then
|
||||
ailment_name = ailment_names.paralysis;
|
||||
elseif player_info.list.element_type == 9 then
|
||||
ailment_name = ailment_names.blast;
|
||||
end
|
||||
|
||||
if this.element_label.include.value then
|
||||
element_name_text = string.format("%s: ", ailment_name);
|
||||
else
|
||||
element_name_text = string.format("%s", ailment_name);
|
||||
end
|
||||
end
|
||||
|
||||
if this.element_label.include.value then
|
||||
element_name_text = string.format("%s%s", element_name_text, tostring(player_info.list.element_attack));
|
||||
end
|
||||
|
||||
drawing.draw_label(this.element_label, position_on_screen, 1, element_name_text);
|
||||
end
|
||||
|
||||
|
||||
-- Element 2 Label
|
||||
if player_info.list.element_type_2 ~= 0 then
|
||||
|
||||
local element_2_name_text = "";
|
||||
if this.element_2_label.include.name then
|
||||
|
||||
local ailment_names = language.current_language.ailments;
|
||||
|
||||
local ailment_name = "";
|
||||
|
||||
if player_info.list.element_type_2 == 1 then
|
||||
ailment_name = cached_names.fire;
|
||||
elseif player_info.list.element_type_2 == 2 then
|
||||
ailment_name = cached_names.water;
|
||||
elseif player_info.list.element_type_2 == 3 then
|
||||
ailment_name = cached_names.thunder;
|
||||
elseif player_info.list.element_type_2 == 4 then
|
||||
ailment_name = cached_names.ice;
|
||||
elseif player_info.list.element_type_2 == 5 then
|
||||
ailment_name = cached_names.dragon;
|
||||
elseif player_info.list.element_type_2 == 6 then
|
||||
ailment_name = ailment_names.poison;
|
||||
elseif player_info.list.element_type_2 == 7 then
|
||||
ailment_name = ailment_names.sleep;
|
||||
elseif player_info.list.element_type_2 == 8 then
|
||||
ailment_name = ailment_names.paralysis;
|
||||
elseif player_info.list.element_type_2 == 9 then
|
||||
ailment_name = ailment_names.blast;
|
||||
end
|
||||
|
||||
if this.element_2_label.include.value then
|
||||
element_2_name_text = string.format("%s: ", ailment_name);
|
||||
else
|
||||
element_2_name_text = string.format("%s", ailment_name);
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
if this.element_2_label.include.value then
|
||||
element_2_name_text = string.format("%s%s", element_2_name_text, tostring(player_info.list.element_attack_2));
|
||||
end
|
||||
|
||||
drawing.draw_label(this.element_2_label, position_on_screen, 1, element_2_name_text);
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_UI()
|
||||
this.label_list.attack = utils.table.deep_copy(config.current_config.stats_UI.attack_label);
|
||||
this.label_list.defense = utils.table.deep_copy(config.current_config.stats_UI.defense_label);
|
||||
|
||||
this.label_list.fire_resistance = utils.table.deep_copy(config.current_config.stats_UI.fire_resistance_label);
|
||||
this.label_list.water_resistance = utils.table.deep_copy(config.current_config.stats_UI.water_resistance_label);
|
||||
this.label_list.thunder_resistance = utils.table.deep_copy(config.current_config.stats_UI.thunder_resistance_label);
|
||||
this.label_list.ice_resistance = utils.table.deep_copy(config.current_config.stats_UI.ice_resistance_label);
|
||||
this.label_list.dragon_resistance = utils.table.deep_copy(config.current_config.stats_UI.dragon_resistance_label);
|
||||
|
||||
this.affinity_label = utils.table.deep_copy(config.current_config.stats_UI.affinity_label);
|
||||
this.health_label = utils.table.deep_copy(config.current_config.stats_UI.health_label);
|
||||
this.stamina_label = utils.table.deep_copy(config.current_config.stats_UI.stamina_label);
|
||||
this.element_label = utils.table.deep_copy(config.current_config.stats_UI.element_label);
|
||||
this.element_2_label = utils.table.deep_copy(config.current_config.stats_UI.element_2_label);
|
||||
|
||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||
|
||||
for label_key, label in pairs(this.label_list) do
|
||||
label.offset.x = label.offset.x * global_scale_modifier;
|
||||
label.offset.y = label.offset.y * global_scale_modifier;
|
||||
end
|
||||
|
||||
this.affinity_label.offset.x = this.affinity_label.offset.x * global_scale_modifier;
|
||||
this.affinity_label.offset.y = this.affinity_label.offset.y * global_scale_modifier;
|
||||
|
||||
this.health_label.offset.x = this.health_label.offset.x * global_scale_modifier;
|
||||
this.health_label.offset.y = this.health_label.offset.y * global_scale_modifier;
|
||||
|
||||
this.stamina_label.offset.x = this.stamina_label.offset.x * global_scale_modifier;
|
||||
this.stamina_label.offset.y = this.stamina_label.offset.y * global_scale_modifier;
|
||||
|
||||
this.element_label.offset.x = this.element_label.offset.x * global_scale_modifier;
|
||||
this.element_label.offset.y = this.element_label.offset.y * global_scale_modifier;
|
||||
|
||||
this.element_2_label.offset.x = this.element_2_label.offset.x * global_scale_modifier;
|
||||
this.element_2_label.offset.y = this.element_2_label.offset.y * global_scale_modifier;
|
||||
end
|
||||
|
||||
function this.init_dependencies()
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
|
||||
item_buffs = require("MHR_Overlay.Buffs.item_buffs");
|
||||
melody_effects = require("MHR_Overlay.Buffs.melody_effects");
|
||||
buffs = require("MHR_Overlay.Buffs.buffs");
|
||||
--singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
--customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
--players = require("MHR_Overlay.Damage_Meter.players");
|
||||
--non_players = require("MHR_Overlay.Damage_Meter.non_players");
|
||||
--quest_status = require("MHR_Overlay.Game_Handler.quest_status");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
--drawing = require("MHR_Overlay.UI.drawing");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
endemic_life_buff = require("MHR_Overlay.Buffs.endemic_life_buffs");
|
||||
skills = require("MHR_Overlay.Buffs.skills");
|
||||
dango_skills = require("MHR_Overlay.Buffs.dango_skills");
|
||||
abnormal_statuses = require("MHR_Overlay.Buffs.abnormal_statuses");
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
player_info = require("MHR_Overlay.Misc.player_info");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
this.init_UI();
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -1,13 +1,47 @@
|
||||
local time_UI = {};
|
||||
local this = {};
|
||||
|
||||
local time;
|
||||
local screen;
|
||||
local config;
|
||||
local drawing;
|
||||
local table_helpers;
|
||||
local utils;
|
||||
local error_handler;
|
||||
|
||||
time_UI.label = nil;
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function time_UI.draw()
|
||||
this.label = nil;
|
||||
|
||||
function this.draw()
|
||||
local elapsed_minutes = time.elapsed_minutes;
|
||||
local elapsed_seconds = time.elapsed_seconds;
|
||||
|
||||
@@ -17,26 +51,29 @@ function time_UI.draw()
|
||||
|
||||
local position_on_screen = screen.calculate_absolute_coordinates(config.current_config.time_UI.position);
|
||||
|
||||
drawing.draw_label(time_UI.label, position_on_screen, 1, elapsed_minutes, elapsed_seconds);
|
||||
drawing.draw_label(this.label, position_on_screen, 1, elapsed_minutes, elapsed_seconds);
|
||||
end
|
||||
|
||||
function time_UI.init_UI()
|
||||
time_UI.label = table_helpers.deep_copy(config.current_config.time_UI.time_label);
|
||||
function this.init_UI()
|
||||
this.label = utils.table.deep_copy(config.current_config.time_UI.time_label);
|
||||
|
||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||
|
||||
time_UI.label.offset.x = time_UI.label.offset.x * global_scale_modifier;
|
||||
time_UI.label.offset.y = time_UI.label.offset.y * global_scale_modifier;
|
||||
this.label.offset.x = this.label.offset.x * global_scale_modifier;
|
||||
this.label.offset.y = this.label.offset.y * global_scale_modifier;
|
||||
end
|
||||
|
||||
function time_UI.init_module()
|
||||
function this.init_dependencies()
|
||||
time = require("MHR_Overlay.Game_Handler.time");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
|
||||
time_UI.init_UI()
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return time_UI;
|
||||
function this.init_module()
|
||||
this.init_UI()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -1,21 +1,55 @@
|
||||
local ailment_UI_entity = {};
|
||||
local this = {};
|
||||
|
||||
local config;
|
||||
local table_helpers;
|
||||
local utils;
|
||||
local drawing;
|
||||
local language;
|
||||
local error_handler;
|
||||
|
||||
function ailment_UI_entity.new(visibility, bar, name_label, text_label, value_label, percentage_label, timer_label)
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function this.new(visibility, bar, name_label, text_label, value_label, percentage_label, timer_label)
|
||||
local entity = {};
|
||||
|
||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||
|
||||
entity.visibility = visibility;
|
||||
entity.bar = table_helpers.deep_copy(bar);
|
||||
entity.name_label = table_helpers.deep_copy(name_label);
|
||||
entity.text_label = table_helpers.deep_copy(text_label);
|
||||
entity.value_label = table_helpers.deep_copy(value_label);
|
||||
entity.percentage_label = table_helpers.deep_copy(percentage_label);
|
||||
entity.timer_label = table_helpers.deep_copy(timer_label);
|
||||
entity.bar = utils.table.deep_copy(bar);
|
||||
entity.name_label = utils.table.deep_copy(name_label);
|
||||
entity.text_label = utils.table.deep_copy(text_label);
|
||||
entity.value_label = utils.table.deep_copy(value_label);
|
||||
entity.percentage_label = utils.table.deep_copy(percentage_label);
|
||||
entity.timer_label = utils.table.deep_copy(timer_label);
|
||||
|
||||
entity.bar.offset.x = entity.bar.offset.x * global_scale_modifier;
|
||||
entity.bar.offset.y = entity.bar.offset.y * global_scale_modifier;
|
||||
@@ -42,7 +76,7 @@ function ailment_UI_entity.new(visibility, bar, name_label, text_label, value_la
|
||||
return entity;
|
||||
end
|
||||
|
||||
function ailment_UI_entity.draw(ailment, ailment_UI, cached_config, position_on_screen, opacity_scale)
|
||||
function this.draw(ailment, ailment_UI, cached_config, position_on_screen, opacity_scale)
|
||||
if not ailment_UI.visibility then
|
||||
return;
|
||||
end
|
||||
@@ -55,29 +89,45 @@ function ailment_UI_entity.draw(ailment, ailment_UI, cached_config, position_on_
|
||||
ailment_name = ailment_name .. "x" .. tostring(ailment.activate_count);
|
||||
end
|
||||
|
||||
local total_buildup_string = "";
|
||||
if not ailment.is_active then
|
||||
local include_current_value = ailment_UI.value_label.include.current_value;
|
||||
local include_max_value = ailment_UI.value_label.include.max_value;
|
||||
|
||||
if include_current_value and include_max_value then
|
||||
total_buildup_string = string.format("%.0f/%.0f", ailment.total_buildup, ailment.buildup_limit);
|
||||
elseif include_current_value then
|
||||
total_buildup_string = string.format("%.0f", ailment.total_buildup);
|
||||
elseif include_max_value then
|
||||
total_buildup_string = string.format("%.0f", ailment.buildup_limit);
|
||||
end
|
||||
end
|
||||
|
||||
if ailment.is_active then
|
||||
drawing.draw_bar(ailment_UI.bar, position_on_screen, opacity_scale, ailment.timer_percentage);
|
||||
|
||||
drawing.draw_label(ailment_UI.name_label, position_on_screen, opacity_scale, ailment_name);
|
||||
drawing.draw_label(ailment_UI.text_label, position_on_screen, opacity_scale, language.current_language.UI.buildup);
|
||||
drawing.draw_label(ailment_UI.timer_label, position_on_screen, opacity_scale, ailment.minutes_left,
|
||||
ailment.seconds_left);
|
||||
drawing.draw_label(ailment_UI.timer_label, position_on_screen, opacity_scale, ailment.minutes_left, ailment.seconds_left);
|
||||
else
|
||||
drawing.draw_bar(ailment_UI.bar, position_on_screen, opacity_scale, ailment.buildup_percentage);
|
||||
|
||||
drawing.draw_label(ailment_UI.name_label, position_on_screen, opacity_scale, ailment_name);
|
||||
drawing.draw_label(ailment_UI.text_label, position_on_screen, opacity_scale, language.current_language.UI.buildup);
|
||||
drawing.draw_label(ailment_UI.value_label, position_on_screen, opacity_scale, ailment.total_buildup,
|
||||
ailment.buildup_limit);
|
||||
drawing.draw_label(ailment_UI.value_label, position_on_screen, opacity_scale, total_buildup_string);
|
||||
drawing.draw_label(ailment_UI.percentage_label, position_on_screen, opacity_scale, 100 * ailment.buildup_percentage);
|
||||
end
|
||||
end
|
||||
|
||||
function ailment_UI_entity.init_module()
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
function this.init_dependencies()
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return ailment_UI_entity;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -1,11 +1,45 @@
|
||||
local ailment_buildup_UI_entity = {};
|
||||
local table_helpers;
|
||||
local this = {};
|
||||
|
||||
local utils;
|
||||
local drawing;
|
||||
local config;
|
||||
local player;
|
||||
local players;
|
||||
local language;
|
||||
local error_handler;
|
||||
|
||||
function ailment_buildup_UI_entity.new(buildup_bar, highlighted_buildup_bar, ailment_name_label, player_name_label,
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function this.new(buildup_bar, highlighted_buildup_bar, ailment_name_label, player_name_label,
|
||||
buildup_value_label, buildup_percentage_label, total_buildup_label,
|
||||
total_buildup_value_label)
|
||||
local entity = {};
|
||||
@@ -13,14 +47,14 @@ function ailment_buildup_UI_entity.new(buildup_bar, highlighted_buildup_bar, ail
|
||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||
|
||||
--entity.visibility = visibility;
|
||||
entity.buildup_bar = table_helpers.deep_copy(buildup_bar);
|
||||
entity.highlighted_buildup_bar = table_helpers.deep_copy(highlighted_buildup_bar);
|
||||
entity.ailment_name_label = table_helpers.deep_copy(ailment_name_label);
|
||||
entity.player_name_label = table_helpers.deep_copy(player_name_label);
|
||||
entity.buildup_value_label = table_helpers.deep_copy(buildup_value_label);
|
||||
entity.buildup_percentage_label = table_helpers.deep_copy(buildup_percentage_label);
|
||||
entity.total_buildup_label = table_helpers.deep_copy(total_buildup_label);
|
||||
entity.total_buildup_value_label = table_helpers.deep_copy(total_buildup_value_label);
|
||||
entity.buildup_bar = utils.table.deep_copy(buildup_bar);
|
||||
entity.highlighted_buildup_bar = utils.table.deep_copy(highlighted_buildup_bar);
|
||||
entity.ailment_name_label = utils.table.deep_copy(ailment_name_label);
|
||||
entity.player_name_label = utils.table.deep_copy(player_name_label);
|
||||
entity.buildup_value_label = utils.table.deep_copy(buildup_value_label);
|
||||
entity.buildup_percentage_label = utils.table.deep_copy(buildup_percentage_label);
|
||||
entity.total_buildup_label = utils.table.deep_copy(total_buildup_label);
|
||||
entity.total_buildup_value_label = utils.table.deep_copy(total_buildup_value_label);
|
||||
|
||||
entity.buildup_bar.offset.x = entity.buildup_bar.offset.x * global_scale_modifier;
|
||||
entity.buildup_bar.offset.y = entity.buildup_bar.offset.y * global_scale_modifier;
|
||||
@@ -55,36 +89,45 @@ function ailment_buildup_UI_entity.new(buildup_bar, highlighted_buildup_bar, ail
|
||||
return entity;
|
||||
end
|
||||
|
||||
function ailment_buildup_UI_entity.draw(_player, ailment_buildup_UI, cached_config, position_on_screen, opacity_scale, top_buildup)
|
||||
function this.draw(player, player_buildup, ailment_buildup_UI, cached_config, position_on_screen, opacity_scale, top_buildup)
|
||||
local player_buildup_bar_percentage = 0;
|
||||
|
||||
if cached_config.settings.buildup_bar_relative_to == "Total Buildup" then
|
||||
player_buildup_bar_percentage = _player.buildup_share;
|
||||
player_buildup_bar_percentage = player_buildup.buildup_share;
|
||||
else
|
||||
if top_buildup ~= 0 then
|
||||
player_buildup_bar_percentage = _player.buildup / top_buildup;
|
||||
player_buildup_bar_percentage = player_buildup.buildup / top_buildup;
|
||||
end
|
||||
end
|
||||
|
||||
if _player.id == player.myself.id and cached_config.settings.highlighted_bar == "Me" then
|
||||
if player.type == players.types.myself and cached_config.settings.highlighted_bar == "Me" then
|
||||
drawing.draw_bar(ailment_buildup_UI.highlighted_buildup_bar, position_on_screen, opacity_scale, player_buildup_bar_percentage);
|
||||
elseif cached_config.settings.highlighted_bar == "Top Buildup" and _player.buildup == top_buildup then
|
||||
elseif cached_config.settings.highlighted_bar == "Top Buildup" and player_buildup.buildup == top_buildup then
|
||||
drawing.draw_bar(ailment_buildup_UI.highlighted_buildup_bar, position_on_screen, opacity_scale, player_buildup_bar_percentage);
|
||||
else
|
||||
drawing.draw_bar(ailment_buildup_UI.buildup_bar, position_on_screen, opacity_scale, player_buildup_bar_percentage);
|
||||
end
|
||||
|
||||
drawing.draw_label(ailment_buildup_UI.player_name_label, position_on_screen, opacity_scale, player.get_player(_player.id).name);
|
||||
drawing.draw_label(ailment_buildup_UI.buildup_value_label, position_on_screen, opacity_scale, _player.buildup);
|
||||
drawing.draw_label(ailment_buildup_UI.buildup_percentage_label, position_on_screen, opacity_scale, 100 * _player.buildup_share);
|
||||
local player_name = tostring(player_buildup.id);
|
||||
if player ~= nil then
|
||||
player_name = player.name;
|
||||
end
|
||||
|
||||
drawing.draw_label(ailment_buildup_UI.player_name_label, position_on_screen, opacity_scale, player_name);
|
||||
drawing.draw_label(ailment_buildup_UI.buildup_value_label, position_on_screen, opacity_scale, player_buildup.buildup);
|
||||
drawing.draw_label(ailment_buildup_UI.buildup_percentage_label, position_on_screen, opacity_scale, 100 * player_buildup.buildup_share);
|
||||
end
|
||||
|
||||
function ailment_buildup_UI_entity.init_module()
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
function this.init_dependencies()
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
player = require("MHR_Overlay.Damage_Meter.player");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return ailment_buildup_UI_entity;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -1,11 +1,47 @@
|
||||
local body_part_UI_entity = {};
|
||||
local config;
|
||||
local table_helpers;
|
||||
local drawing;
|
||||
local this = {};
|
||||
|
||||
function body_part_UI_entity.new(part_visibility, part_name_label, flinch_visibility, flinch_bar, flinch_text_label,
|
||||
flinch_value_label, flinch_percentage_label, break_visibility, break_bar, break_text_label, break_value_label,
|
||||
break_percentage_label, loss_visibility, loss_bar, loss_text_label, loss_value_label, loss_health_percentage_label)
|
||||
local config;
|
||||
local utils;
|
||||
local drawing;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function this.new(part_visibility, part_name_label,
|
||||
flinch_visibility, flinch_bar, flinch_text_label, flinch_value_label, flinch_percentage_label,
|
||||
break_visibility, break_bar, break_text_label, break_value_label, break_percentage_label,
|
||||
loss_visibility, loss_bar, loss_text_label, loss_value_label, loss_health_percentage_label,
|
||||
anomaly_visibility, anomaly_bar, anomaly_text_label, anomaly_value_label, anomaly_health_percentage_label)
|
||||
|
||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||
|
||||
@@ -15,16 +51,17 @@ function body_part_UI_entity.new(part_visibility, part_name_label, flinch_visibi
|
||||
entity.flinch_visibility = flinch_visibility;
|
||||
entity.break_visibility = break_visibility;
|
||||
entity.loss_visibility = loss_visibility;
|
||||
entity.anomaly_visibility = anomaly_visibility;
|
||||
|
||||
entity.part_name_label = table_helpers.deep_copy(part_name_label);
|
||||
entity.part_name_label = utils.table.deep_copy(part_name_label);
|
||||
|
||||
entity.part_name_label.offset.x = entity.part_name_label.offset.x * global_scale_modifier;
|
||||
entity.part_name_label.offset.y = entity.part_name_label.offset.y * global_scale_modifier;
|
||||
|
||||
entity.flinch_bar = table_helpers.deep_copy(flinch_bar);
|
||||
entity.flinch_text_label = table_helpers.deep_copy(flinch_text_label);
|
||||
entity.flinch_value_label = table_helpers.deep_copy(flinch_value_label);
|
||||
entity.flinch_percentage_label = table_helpers.deep_copy(flinch_percentage_label);
|
||||
entity.flinch_bar = utils.table.deep_copy(flinch_bar);
|
||||
entity.flinch_text_label = utils.table.deep_copy(flinch_text_label);
|
||||
entity.flinch_value_label = utils.table.deep_copy(flinch_value_label);
|
||||
entity.flinch_percentage_label = utils.table.deep_copy(flinch_percentage_label);
|
||||
|
||||
entity.flinch_bar.offset.x = entity.flinch_bar.offset.x * global_scale_modifier;
|
||||
entity.flinch_bar.offset.y = entity.flinch_bar.offset.y * global_scale_modifier;
|
||||
@@ -42,10 +79,10 @@ function body_part_UI_entity.new(part_visibility, part_name_label, flinch_visibi
|
||||
entity.flinch_percentage_label.offset.x = entity.flinch_percentage_label.offset.x * global_scale_modifier;
|
||||
entity.flinch_percentage_label.offset.y = entity.flinch_percentage_label.offset.y * global_scale_modifier;
|
||||
|
||||
entity.break_bar = table_helpers.deep_copy(break_bar);
|
||||
entity.break_text_label = table_helpers.deep_copy(break_text_label);
|
||||
entity.break_value_label = table_helpers.deep_copy(break_value_label);
|
||||
entity.break_percentage_label = table_helpers.deep_copy(break_percentage_label);
|
||||
entity.break_bar = utils.table.deep_copy(break_bar);
|
||||
entity.break_text_label = utils.table.deep_copy(break_text_label);
|
||||
entity.break_value_label = utils.table.deep_copy(break_value_label);
|
||||
entity.break_percentage_label = utils.table.deep_copy(break_percentage_label);
|
||||
|
||||
entity.break_bar.offset.x = entity.break_bar.offset.x * global_scale_modifier;
|
||||
entity.break_bar.offset.y = entity.break_bar.offset.y * global_scale_modifier;
|
||||
@@ -63,10 +100,10 @@ function body_part_UI_entity.new(part_visibility, part_name_label, flinch_visibi
|
||||
entity.break_percentage_label.offset.x = entity.break_percentage_label.offset.x * global_scale_modifier;
|
||||
entity.break_percentage_label.offset.y = entity.break_percentage_label.offset.y * global_scale_modifier;
|
||||
|
||||
entity.loss_bar = table_helpers.deep_copy(loss_bar);
|
||||
entity.loss_text_label = table_helpers.deep_copy(loss_text_label);
|
||||
entity.loss_value_label = table_helpers.deep_copy(loss_value_label);
|
||||
entity.loss_health_percentage_label = table_helpers.deep_copy(loss_health_percentage_label);
|
||||
entity.loss_bar = utils.table.deep_copy(loss_bar);
|
||||
entity.loss_text_label = utils.table.deep_copy(loss_text_label);
|
||||
entity.loss_value_label = utils.table.deep_copy(loss_value_label);
|
||||
entity.loss_health_percentage_label = utils.table.deep_copy(loss_health_percentage_label);
|
||||
|
||||
entity.loss_bar.offset.x = entity.loss_bar.offset.x * global_scale_modifier;
|
||||
entity.loss_bar.offset.y = entity.loss_bar.offset.y * global_scale_modifier;
|
||||
@@ -84,19 +121,41 @@ function body_part_UI_entity.new(part_visibility, part_name_label, flinch_visibi
|
||||
entity.loss_health_percentage_label.offset.x = entity.loss_health_percentage_label.offset.x * global_scale_modifier;
|
||||
entity.loss_health_percentage_label.offset.y = entity.loss_health_percentage_label.offset.y * global_scale_modifier;
|
||||
|
||||
entity.anomaly_bar = utils.table.deep_copy(anomaly_bar);
|
||||
entity.anomaly_text_label = utils.table.deep_copy(anomaly_text_label);
|
||||
entity.anomaly_value_label = utils.table.deep_copy(anomaly_value_label);
|
||||
entity.anomaly_health_percentage_label = utils.table.deep_copy(anomaly_health_percentage_label);
|
||||
|
||||
entity.anomaly_bar.offset.x = entity.anomaly_bar.offset.x * global_scale_modifier;
|
||||
entity.anomaly_bar.offset.y = entity.anomaly_bar.offset.y * global_scale_modifier;
|
||||
entity.anomaly_bar.size.width = entity.anomaly_bar.size.width * global_scale_modifier;
|
||||
entity.anomaly_bar.size.height = entity.anomaly_bar.size.height * global_scale_modifier;
|
||||
entity.anomaly_bar.outline.thickness = entity.anomaly_bar.outline.thickness * global_scale_modifier;
|
||||
entity.anomaly_bar.outline.offset = entity.anomaly_bar.outline.offset * global_scale_modifier;
|
||||
|
||||
entity.anomaly_text_label.offset.x = entity.anomaly_text_label.offset.x * global_scale_modifier;
|
||||
entity.anomaly_text_label.offset.y = entity.anomaly_text_label.offset.y * global_scale_modifier;
|
||||
|
||||
entity.anomaly_value_label.offset.x = entity.anomaly_value_label.offset.x * global_scale_modifier;
|
||||
entity.anomaly_value_label.offset.y = entity.anomaly_value_label.offset.y * global_scale_modifier;
|
||||
|
||||
entity.anomaly_health_percentage_label.offset.x = entity.anomaly_health_percentage_label.offset.x * global_scale_modifier;
|
||||
entity.anomaly_health_percentage_label.offset.y = entity.anomaly_health_percentage_label.offset.y * global_scale_modifier;
|
||||
|
||||
return entity;
|
||||
end
|
||||
|
||||
function body_part_UI_entity.draw(part, part_UI, cached_config, position_on_screen, opacity_scale)
|
||||
function this.draw(part, part_UI, cached_config, position_on_screen, opacity_scale)
|
||||
if not part_UI.part_visibility then
|
||||
return;
|
||||
end
|
||||
|
||||
local draw_health = part_UI.flinch_visibility and part.max_health > 0;
|
||||
local draw_break = part_UI.break_visibility and part.break_max_health > 0 and part.break_count < part.break_max_count;
|
||||
local draw_severe = part_UI.loss_visibility and part.loss_max_health > 0 and not part.is_severed;
|
||||
local draw_sever = part_UI.loss_visibility and part.loss_max_health > 0 and not part.is_severed;
|
||||
local draw_anomaly = part_UI.anomaly_visibility and part.anomaly_max_health > 0 and (part.anomaly_is_active or cached_config.settings.render_inactive_anomaly_cores);
|
||||
|
||||
if not draw_health and not draw_break and not draw_severe then
|
||||
if not draw_health and not draw_break and not draw_sever and not draw_anomaly then
|
||||
return;
|
||||
end
|
||||
|
||||
@@ -121,40 +180,102 @@ function body_part_UI_entity.draw(part, part_UI, cached_config, position_on_scre
|
||||
end
|
||||
end
|
||||
|
||||
local health_string = string.format("%.0f/%.0f", part.health, part.max_health);
|
||||
local break_health_string = string.format("%.0f/%.0f", part.break_health, part.break_max_health);
|
||||
local loss_health_string = string.format("%.0f/%.0f", part.loss_health, part.loss_max_health);
|
||||
-- health value string
|
||||
local health_string = "";
|
||||
if draw_health then
|
||||
local include_health_current_value = part_UI.flinch_value_label.include.current_value;
|
||||
local include_health_max_value = part_UI.flinch_value_label.include.max_value;
|
||||
|
||||
if include_health_current_value and include_health_max_value then
|
||||
health_string = string.format("%.0f/%.0f", part.health, part.max_health);
|
||||
elseif include_health_current_value then
|
||||
health_string = string.format("%.0f", part.health);
|
||||
elseif include_health_max_value then
|
||||
health_string = string.format("%.0f", part.max_health);
|
||||
end
|
||||
end
|
||||
|
||||
-- break health value string
|
||||
local break_health_string = "";
|
||||
if draw_break then
|
||||
local include_break_health_current_value = part_UI.break_value_label.include.current_value;
|
||||
local include_break_health_max_value = part_UI.break_value_label.include.max_value;
|
||||
|
||||
if include_break_health_current_value and include_break_health_max_value then
|
||||
break_health_string = string.format("%.0f/%.0f", part.break_health, part.break_max_health);
|
||||
elseif include_break_health_current_value then
|
||||
break_health_string = string.format("%.0f", part.break_health);
|
||||
elseif include_break_health_max_value then
|
||||
break_health_string = string.format("%.0f", part.break_max_health);
|
||||
end
|
||||
end
|
||||
|
||||
-- loss health value string
|
||||
local loss_health_string = "";
|
||||
if draw_sever then
|
||||
local include_loss_health_current_value = part_UI.loss_value_label.include.current_value;
|
||||
local include_loss_health_max_value = part_UI.loss_value_label.include.max_value;
|
||||
|
||||
if include_loss_health_current_value and include_loss_health_max_value then
|
||||
loss_health_string = string.format("%.0f/%.0f", part.loss_health, part.loss_max_health);
|
||||
elseif include_loss_health_current_value then
|
||||
loss_health_string = string.format("%.0f", part.loss_health);
|
||||
elseif include_loss_health_max_value then
|
||||
loss_health_string = string.format("%.0f", part.loss_max_health);
|
||||
end
|
||||
end
|
||||
|
||||
-- anomaly health value string
|
||||
local anomaly_health_string = "";
|
||||
if draw_anomaly then
|
||||
local include_anomaly_health_current_value = part_UI.anomaly_value_label.include.current_value;
|
||||
local include_anomaly_health_max_value = part_UI.anomaly_value_label.include.max_value;
|
||||
|
||||
if include_anomaly_health_current_value and include_anomaly_health_max_value then
|
||||
anomaly_health_string = string.format("%.0f/%.0f", part.anomaly_health, part.anomaly_max_health);
|
||||
elseif include_anomaly_health_current_value then
|
||||
anomaly_health_string = string.format("%.0f", part.anomaly_health);
|
||||
elseif include_anomaly_health_max_value then
|
||||
anomaly_health_string = string.format("%.0f", part.anomaly_max_health);
|
||||
end
|
||||
end
|
||||
|
||||
local flinch_position_on_screen = {
|
||||
x = position_on_screen.x + cached_config.part_health.offset.x,
|
||||
y = position_on_screen.y + cached_config.part_health.offset.y,
|
||||
visibility = part_UI.flinch_visibility
|
||||
};
|
||||
|
||||
local break_position_on_screen = {
|
||||
x = position_on_screen.x + cached_config.part_break.offset.x,
|
||||
y = position_on_screen.y + cached_config.part_break.offset.y,
|
||||
visibility = part_UI.flinch_visibility
|
||||
};
|
||||
|
||||
local loss_position_on_screen = {
|
||||
x = position_on_screen.x + cached_config.part_loss.offset.x,
|
||||
y = position_on_screen.y + cached_config.part_loss.offset.y,
|
||||
part_UI = part_UI.loss_visibility
|
||||
};
|
||||
|
||||
local anomaly_position_on_screen = {
|
||||
x = position_on_screen.x + cached_config.part_anomaly.offset.x,
|
||||
y = position_on_screen.y + cached_config.part_anomaly.offset.y,
|
||||
};
|
||||
|
||||
if draw_health then
|
||||
drawing.draw_bar(part_UI.flinch_bar, flinch_position_on_screen, opacity_scale, part.health_percentage);
|
||||
end
|
||||
|
||||
if draw_break then
|
||||
if draw_break then
|
||||
drawing.draw_bar(part_UI.break_bar, break_position_on_screen, opacity_scale, part.break_health_percentage);
|
||||
end
|
||||
|
||||
if draw_severe then
|
||||
if draw_sever then
|
||||
drawing.draw_bar(part_UI.loss_bar, loss_position_on_screen, opacity_scale, part.loss_health_percentage);
|
||||
end
|
||||
|
||||
if draw_anomaly then
|
||||
drawing.draw_bar(part_UI.anomaly_bar, anomaly_position_on_screen, opacity_scale, part.anomaly_health_percentage);
|
||||
end
|
||||
|
||||
drawing.draw_label(part_UI.part_name_label, position_on_screen, opacity_scale, part_name);
|
||||
|
||||
if draw_health then
|
||||
@@ -169,17 +290,27 @@ function body_part_UI_entity.draw(part, part_UI, cached_config, position_on_scre
|
||||
drawing.draw_label(part_UI.break_percentage_label, break_position_on_screen, opacity_scale, 100 * part.break_health_percentage);
|
||||
end
|
||||
|
||||
if draw_severe then
|
||||
if draw_sever then
|
||||
drawing.draw_label(part_UI.loss_text_label, loss_position_on_screen, opacity_scale);
|
||||
drawing.draw_label(part_UI.loss_value_label, loss_position_on_screen, opacity_scale, loss_health_string);
|
||||
drawing.draw_label(part_UI.loss_health_percentage_label, loss_position_on_screen, opacity_scale, 100 * part.loss_health_percentage);
|
||||
end
|
||||
|
||||
if draw_anomaly then
|
||||
drawing.draw_label(part_UI.anomaly_text_label, anomaly_position_on_screen, opacity_scale);
|
||||
drawing.draw_label(part_UI.anomaly_value_label, anomaly_position_on_screen, opacity_scale, anomaly_health_string);
|
||||
drawing.draw_label(part_UI.anomaly_health_percentage_label, anomaly_position_on_screen, opacity_scale, 100 * part.anomaly_health_percentage);
|
||||
end
|
||||
end
|
||||
|
||||
function body_part_UI_entity.init_module()
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
function this.init_dependencies()
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return body_part_UI_entity;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
local this = {};
|
||||
|
||||
local config;
|
||||
local utils;
|
||||
local drawing;
|
||||
local language;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function this.new(bar, name_label, timer_label)
|
||||
local entity = {};
|
||||
|
||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||
|
||||
--entity.visibility = visibility;
|
||||
entity.bar = utils.table.deep_copy(bar);
|
||||
entity.name_label = utils.table.deep_copy(name_label);
|
||||
entity.timer_label = utils.table.deep_copy(timer_label);
|
||||
|
||||
entity.bar.offset.x = entity.bar.offset.x * global_scale_modifier;
|
||||
entity.bar.offset.y = entity.bar.offset.y * global_scale_modifier;
|
||||
entity.bar.size.width = entity.bar.size.width * global_scale_modifier;
|
||||
entity.bar.size.height = entity.bar.size.height * global_scale_modifier;
|
||||
entity.bar.outline.thickness = entity.bar.outline.thickness * global_scale_modifier;
|
||||
entity.bar.outline.offset = entity.bar.outline.offset * global_scale_modifier;
|
||||
|
||||
entity.name_label.offset.x = entity.name_label.offset.x * global_scale_modifier;
|
||||
entity.name_label.offset.y = entity.name_label.offset.y * global_scale_modifier;
|
||||
|
||||
entity.timer_label.offset.x = entity.timer_label.offset.x * global_scale_modifier;
|
||||
entity.timer_label.offset.y = entity.timer_label.offset.y * global_scale_modifier;
|
||||
|
||||
return entity;
|
||||
end
|
||||
|
||||
function this.draw(buff, buff_UI, position_on_screen, opacity_scale)
|
||||
local cached_config = config.current_config.buff_UI;
|
||||
|
||||
if not buff.is_infinite then
|
||||
drawing.draw_bar(buff_UI.bar, position_on_screen, opacity_scale, buff.timer_percentage);
|
||||
elseif not cached_config.settings.hide_bar_for_infinite_buffs then
|
||||
drawing.draw_bar(buff_UI.bar, position_on_screen, opacity_scale, 1);
|
||||
end
|
||||
|
||||
local buff_name = "";
|
||||
if buff_UI.name_label.include.name then
|
||||
buff_name = string.format("%s ", buff.name);
|
||||
end
|
||||
|
||||
if buff_UI.name_label.include.effect_level and buff.level > 1 then
|
||||
buff_name = string.format("%s%s%d", buff_name, language.current_language.UI.lv, buff.level);
|
||||
end
|
||||
|
||||
drawing.draw_label(buff_UI.name_label, position_on_screen, opacity_scale, buff_name);
|
||||
|
||||
if not buff.is_infinite then
|
||||
drawing.draw_label(buff_UI.timer_label, position_on_screen, opacity_scale, buff.minutes_left, buff.seconds_left);
|
||||
elseif not cached_config.settings.hide_timer_for_infinite_buffs then
|
||||
drawing.draw_label(buff_UI.timer_label, position_on_screen, opacity_scale, 0, 0);
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_dependencies()
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -1,169 +1,256 @@
|
||||
local damage_UI_entity = {};
|
||||
local table_helpers;
|
||||
local this = {};
|
||||
|
||||
local utils;
|
||||
local drawing;
|
||||
local config;
|
||||
local player;
|
||||
local players;
|
||||
local language;
|
||||
local quest_status;
|
||||
local non_players;
|
||||
local error_handler;
|
||||
|
||||
function damage_UI_entity.new(bar, highlighted_bar, player_name_label, dps_label, hunter_rank_label, value_label,
|
||||
percentage_label, cart_count_label)
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function this.new(damage_meter_UI_elements, type)
|
||||
local entity = {};
|
||||
|
||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||
|
||||
--entity.visibility = visibility;
|
||||
entity.bar = table_helpers.deep_copy(bar);
|
||||
entity.highlighted_bar = table_helpers.deep_copy(highlighted_bar);
|
||||
entity.player_name_label = table_helpers.deep_copy(player_name_label);
|
||||
entity.dps_label = table_helpers.deep_copy(dps_label);
|
||||
entity.hunter_rank_label = table_helpers.deep_copy(hunter_rank_label);
|
||||
entity.cart_count_label = table_helpers.deep_copy(cart_count_label);
|
||||
entity.value_label = table_helpers.deep_copy(value_label);
|
||||
entity.percentage_label = table_helpers.deep_copy(percentage_label);
|
||||
entity.bar = utils.table.deep_copy(damage_meter_UI_elements.damage_bar);
|
||||
entity.name_label = utils.table.deep_copy(damage_meter_UI_elements.name_label);
|
||||
entity.hunter_rank_label = utils.table.deep_copy(damage_meter_UI_elements.hunter_rank_label);
|
||||
entity.cart_count_label = utils.table.deep_copy(damage_meter_UI_elements.cart_count_label);
|
||||
entity.dps_label = utils.table.deep_copy(damage_meter_UI_elements.dps_label);
|
||||
entity.value_label = utils.table.deep_copy(damage_meter_UI_elements.damage_value_label);
|
||||
entity.percentage_label = utils.table.deep_copy(damage_meter_UI_elements.damage_percentage_label);
|
||||
|
||||
entity.bar.offset.x = entity.bar.offset.x * global_scale_modifier;
|
||||
entity.bar.offset.y = entity.bar.offset.y * global_scale_modifier;
|
||||
entity.bar.size.width = entity.bar.size.width * global_scale_modifier;
|
||||
entity.bar.size.height = entity.bar.size.height * global_scale_modifier;
|
||||
entity.bar.outline.thickness = entity.bar.outline.thickness * global_scale_modifier;
|
||||
entity.bar.outline.offset = entity.bar.outline.offset * global_scale_modifier;
|
||||
entity.player_name_size_limit = config.current_config.damage_meter_UI.settings.player_name_size_limit;
|
||||
|
||||
entity.highlighted_bar.offset.x = entity.highlighted_bar.offset.x * global_scale_modifier;
|
||||
entity.highlighted_bar.offset.y = entity.highlighted_bar.offset.y * global_scale_modifier;
|
||||
entity.highlighted_bar.size.width = entity.highlighted_bar.size.width * global_scale_modifier;
|
||||
entity.highlighted_bar.size.height = entity.highlighted_bar.size.height * global_scale_modifier;
|
||||
entity.highlighted_bar.outline.thickness = entity.highlighted_bar.outline.thickness * global_scale_modifier;
|
||||
entity.highlighted_bar.outline.offset = entity.highlighted_bar.outline.offset * global_scale_modifier;
|
||||
if type == players.types.total then
|
||||
entity.total_name = language.current_language.UI.total_damage;
|
||||
elseif type == players.types.myself or type == players.types.other_players then
|
||||
entity.type_name = language.current_language.UI.player;
|
||||
elseif type == players.types.servant then
|
||||
entity.type_name = language.current_language.UI.servant;
|
||||
else
|
||||
entity.type_name = language.current_language.UI.otomo;
|
||||
end
|
||||
|
||||
entity.player_name_label.offset.x = entity.player_name_label.offset.x * global_scale_modifier;
|
||||
entity.player_name_label.offset.y = entity.player_name_label.offset.y * global_scale_modifier;
|
||||
if entity.bar ~= nil then
|
||||
entity.bar.offset.x = entity.bar.offset.x * global_scale_modifier;
|
||||
entity.bar.offset.y = entity.bar.offset.y * global_scale_modifier;
|
||||
entity.bar.size.width = entity.bar.size.width * global_scale_modifier;
|
||||
entity.bar.size.height = entity.bar.size.height * global_scale_modifier;
|
||||
entity.bar.outline.thickness = entity.bar.outline.thickness * global_scale_modifier;
|
||||
entity.bar.outline.offset = entity.bar.outline.offset * global_scale_modifier;
|
||||
end
|
||||
|
||||
entity.player_name_size_limit = config.current_config.damage_meter_UI.settings.player_name_size_limit *
|
||||
global_scale_modifier;
|
||||
if entity.name_label ~= nil then
|
||||
entity.name_label.offset.x = entity.name_label.offset.x * global_scale_modifier;
|
||||
entity.name_label.offset.y = entity.name_label.offset.y * global_scale_modifier;
|
||||
end
|
||||
|
||||
entity.dps_label.offset.x = entity.dps_label.offset.x * global_scale_modifier;
|
||||
entity.dps_label.offset.y = entity.dps_label.offset.y * global_scale_modifier;
|
||||
if entity.player_name_size_limit ~= nil then
|
||||
entity.player_name_size_limit = entity.player_name_size_limit * global_scale_modifier;
|
||||
end
|
||||
|
||||
entity.hunter_rank_label.offset.x = entity.hunter_rank_label.offset.x * global_scale_modifier;
|
||||
entity.hunter_rank_label.offset.y = entity.hunter_rank_label.offset.y * global_scale_modifier;
|
||||
if entity.hunter_rank_label ~= nil then
|
||||
entity.hunter_rank_label.offset.x = entity.hunter_rank_label.offset.x * global_scale_modifier;
|
||||
entity.hunter_rank_label.offset.y = entity.hunter_rank_label.offset.y * global_scale_modifier;
|
||||
end
|
||||
|
||||
if entity.cart_count_label ~= nil then
|
||||
entity.cart_count_label.offset.x = entity.cart_count_label.offset.x * global_scale_modifier;
|
||||
entity.cart_count_label.offset.y = entity.cart_count_label.offset.y * global_scale_modifier;
|
||||
end
|
||||
|
||||
entity.cart_count_label.offset.x = entity.cart_count_label.offset.x * global_scale_modifier;
|
||||
entity.cart_count_label.offset.y = entity.cart_count_label.offset.y * global_scale_modifier;
|
||||
if entity.dps_label ~= nil then
|
||||
entity.dps_label.offset.x = entity.dps_label.offset.x * global_scale_modifier;
|
||||
entity.dps_label.offset.y = entity.dps_label.offset.y * global_scale_modifier;
|
||||
end
|
||||
|
||||
entity.value_label.offset.x = entity.value_label.offset.x * global_scale_modifier;
|
||||
entity.value_label.offset.y = entity.value_label.offset.y * global_scale_modifier;
|
||||
if entity.value_label ~= nil then
|
||||
entity.value_label.offset.x = entity.value_label.offset.x * global_scale_modifier;
|
||||
entity.value_label.offset.y = entity.value_label.offset.y * global_scale_modifier;
|
||||
end
|
||||
|
||||
entity.percentage_label.offset.x = entity.percentage_label.offset.x * global_scale_modifier;
|
||||
entity.percentage_label.offset.y = entity.percentage_label.offset.y * global_scale_modifier;
|
||||
if entity.percentage_label ~= nil then
|
||||
entity.percentage_label.offset.x = entity.percentage_label.offset.x * global_scale_modifier;
|
||||
entity.percentage_label.offset.y = entity.percentage_label.offset.y * global_scale_modifier;
|
||||
end
|
||||
|
||||
return entity;
|
||||
end
|
||||
|
||||
function damage_UI_entity.draw(_player, position_on_screen, opacity_scale, top_damage, top_dps)
|
||||
function this.draw(player, position_on_screen, opacity_scale, top_damage, top_dps)
|
||||
local cached_config = config.current_config.damage_meter_UI;
|
||||
|
||||
local player_include = cached_config.player_name_label.include.others;
|
||||
if _player.id == player.myself.id then
|
||||
player_include = cached_config.player_name_label.include.myself;
|
||||
top_damage = top_damage or 0;
|
||||
top_dps = top_dps or 0;
|
||||
|
||||
local name_include = nil;
|
||||
if player.damage_UI.name_label ~= nil then
|
||||
name_include = player.damage_UI.name_label.include;
|
||||
end
|
||||
|
||||
local player_name_text = "";
|
||||
|
||||
if player_include.master_rank and player_include.hunter_rank then
|
||||
player_name_text = string.format("[%d:%d] ", _player.master_rank, _player.hunter_rank);
|
||||
elseif player_include.master_rank then
|
||||
player_name_text = string.format("[%d] ", _player.master_rank);
|
||||
elseif player_include.hunter_rank then
|
||||
player_name_text = string.format("[%d] ", _player.hunter_rank);
|
||||
local hunter_rank_include = nil;
|
||||
if player.damage_UI.hunter_rank_label ~= nil then
|
||||
hunter_rank_include = player.damage_UI.hunter_rank_label.include;
|
||||
end
|
||||
|
||||
if player_include.cart_count then
|
||||
player_name_text = player_name_text .. string.format("x%d ", _player.cart_count);
|
||||
end
|
||||
|
||||
|
||||
if player_include.word_player then
|
||||
player_name_text = player_name_text .. language.current_language.UI.player .. " ";
|
||||
end
|
||||
|
||||
if player_include.player_id then
|
||||
player_name_text = player_name_text .. string.format("%d ", _player.id);
|
||||
end
|
||||
|
||||
if player_include.player_name then
|
||||
player_name_text = player_name_text .. _player.name;
|
||||
end
|
||||
local is_on_quest = quest_status.flow_state ~= quest_status.flow_states.IN_LOBBY and quest_status.flow_state ~= quest_status.flow_states.IN_TRAINING_AREA;
|
||||
|
||||
local player_damage_percentage = 0;
|
||||
if player.total.display.total_damage ~= 0 then
|
||||
player_damage_percentage = _player.display.total_damage / player.total.display.total_damage;
|
||||
if players.total.display.total_damage ~= 0 then
|
||||
player_damage_percentage = player.display.total_damage / players.total.display.total_damage;
|
||||
end
|
||||
|
||||
local player_damage_bar_percentage = 0;
|
||||
if cached_config.settings.damage_bar_relative_to == "Total Damage" then
|
||||
if player.total.display.total_damage ~= 0 then
|
||||
player_damage_bar_percentage = _player.display.total_damage / player.total.display.total_damage;
|
||||
end
|
||||
else
|
||||
if top_damage ~= 0 then
|
||||
player_damage_bar_percentage = _player.display.total_damage / top_damage;
|
||||
|
||||
if player.type ~= players.types.total then
|
||||
if cached_config.settings.damage_bar_relative_to == "Total Damage" then
|
||||
if players.total.display.total_damage ~= 0 then
|
||||
player_damage_bar_percentage = player.display.total_damage / players.total.display.total_damage;
|
||||
end
|
||||
else
|
||||
if top_damage ~= 0 then
|
||||
player_damage_bar_percentage = player.display.total_damage / top_damage;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local name_text = "";
|
||||
|
||||
if player.type == players.types.total then
|
||||
name_text = player.damage_UI.total_name;
|
||||
elseif name_include ~= nil then
|
||||
|
||||
if _player.id == player.myself.id and cached_config.settings.highlighted_bar == "Me" then
|
||||
drawing.draw_bar(_player.damage_UI.highlighted_bar, position_on_screen, opacity_scale, player_damage_bar_percentage);
|
||||
elseif cached_config.settings.highlighted_bar == "Top Damage" and _player.display.total_damage == top_damage then
|
||||
drawing.draw_bar(_player.damage_UI.highlighted_bar, position_on_screen, opacity_scale, player_damage_bar_percentage);
|
||||
elseif cached_config.settings.highlighted_bar == "Top DPS" and _player.dps == top_dps then
|
||||
drawing.draw_bar(_player.damage_UI.highlighted_bar, position_on_screen, opacity_scale, player_damage_bar_percentage);
|
||||
else
|
||||
drawing.draw_bar(_player.damage_UI.bar, position_on_screen, opacity_scale, player_damage_bar_percentage);
|
||||
end
|
||||
|
||||
if _player.id == player.myself.id then
|
||||
if _player.damage_UI.hunter_rank_label.include.myself.master_rank and
|
||||
_player.damage_UI.hunter_rank_label.include.myself.hunter_rank then
|
||||
drawing.draw_label(_player.damage_UI.hunter_rank_label, position_on_screen, opacity_scale,
|
||||
string.format("%d:%d", _player.master_rank, _player.hunter_rank));
|
||||
elseif _player.damage_UI.hunter_rank_label.include.myself.master_rank then
|
||||
drawing.draw_label(_player.damage_UI.hunter_rank_label, position_on_screen, opacity_scale,
|
||||
string.format("%d", _player.master_rank));
|
||||
elseif _player.damage_UI.hunter_rank_label.include.myself.hunter_rank then
|
||||
drawing.draw_label(_player.damage_UI.hunter_rank_label, position_on_screen, opacity_scale,
|
||||
string.format("%d", _player.hunter_rank));
|
||||
if name_include.master_rank and name_include.hunter_rank then
|
||||
name_text = string.format("[%d:%d] ", player.master_rank, player.hunter_rank);
|
||||
elseif name_include.master_rank then
|
||||
name_text = string.format("[%d] ", player.master_rank);
|
||||
elseif name_include.hunter_rank then
|
||||
name_text = string.format("[%d] ", player.hunter_rank);
|
||||
elseif name_include.level then
|
||||
name_text = string.format("[%d] ", player.level);
|
||||
end
|
||||
else
|
||||
if _player.damage_UI.hunter_rank_label.include.others.master_rank and
|
||||
_player.damage_UI.hunter_rank_label.include.others.hunter_rank then
|
||||
drawing.draw_label(_player.damage_UI.hunter_rank_label, position_on_screen, opacity_scale,
|
||||
string.format("%d:%d", _player.master_rank, _player.hunter_rank));
|
||||
elseif _player.damage_UI.hunter_rank_label.include.others.master_rank then
|
||||
drawing.draw_label(_player.damage_UI.hunter_rank_label, position_on_screen, opacity_scale,
|
||||
string.format("%d", _player.master_rank));
|
||||
elseif _player.damage_UI.hunter_rank_label.include.others.hunter_rank then
|
||||
drawing.draw_label(_player.damage_UI.hunter_rank_label, position_on_screen, opacity_scale,
|
||||
string.format("%d", _player.hunter_rank));
|
||||
|
||||
if name_include.cart_count and is_on_quest then
|
||||
name_text = name_text .. string.format("x%d ", player.cart_count);
|
||||
end
|
||||
|
||||
if name_include.type then
|
||||
name_text = name_text .. player.damage_UI.type_name .. " ";
|
||||
end
|
||||
|
||||
if name_include.id then
|
||||
name_text = name_text .. string.format("%d ", player.id);
|
||||
end
|
||||
|
||||
if name_include.name then
|
||||
name_text = name_text .. player.name;
|
||||
end
|
||||
end
|
||||
|
||||
player_name_text = drawing.limit_text_size(player_name_text, _player.damage_UI.player_name_size_limit);
|
||||
local hunter_rank_string = "";
|
||||
|
||||
if player.damage_UI.hunter_rank_label ~= nil then
|
||||
if hunter_rank_include == nil then
|
||||
hunter_rank_string = string.format("%d", player.level);
|
||||
elseif hunter_rank_include.master_rank and hunter_rank_include.hunter_rank then
|
||||
hunter_rank_string = string.format("%d:%d", player.master_rank, player.hunter_rank);
|
||||
|
||||
drawing.draw_label(_player.damage_UI.player_name_label, position_on_screen, opacity_scale, player_name_text);
|
||||
drawing.draw_label(_player.damage_UI.value_label, position_on_screen, opacity_scale, _player.display.total_damage);
|
||||
drawing.draw_label(_player.damage_UI.percentage_label, position_on_screen, opacity_scale, 100 * player_damage_percentage);
|
||||
drawing.draw_label(_player.damage_UI.dps_label, position_on_screen, opacity_scale, _player.dps);
|
||||
drawing.draw_label(_player.damage_UI.cart_count_label, position_on_screen, opacity_scale, _player.cart_count);
|
||||
elseif hunter_rank_include.master_rank then
|
||||
hunter_rank_string = string.format("%d", player.master_rank);
|
||||
|
||||
elseif hunter_rank_include.hunter_rank then
|
||||
hunter_rank_string = string.format("%d", player.hunter_rank);
|
||||
end
|
||||
end
|
||||
|
||||
local bar = player.damage_UI.bar;
|
||||
local name_label = player.damage_UI.name_label;
|
||||
local hunter_rank_label = player.damage_UI.hunter_rank_label;
|
||||
local cart_count_label = player.damage_UI.cart_count_label;
|
||||
local value_label = player.damage_UI.value_label;
|
||||
local percentage_label = player.damage_UI.percentage_label;
|
||||
local dps_label = player.damage_UI.dps_label;
|
||||
|
||||
if player.type ~= players.types.total then
|
||||
if (cached_config.settings.highlighted_bar == "Top Damage" and player.display.total_damage == top_damage and top_damage ~= 0) or
|
||||
(cached_config.settings.highlighted_bar == "Top DPS" and player.dps == top_dps and top_dps ~= 0) then
|
||||
bar = players.highlighted_damage_UI.bar;
|
||||
name_label = players.highlighted_damage_UI.name_label;
|
||||
hunter_rank_label = players.highlighted_damage_UI.hunter_rank_label;
|
||||
cart_count_label = players.highlighted_damage_UI.cart_count_label;
|
||||
value_label = players.highlighted_damage_UI.value_label;
|
||||
percentage_label = players.highlighted_damage_UI.percentage_label;
|
||||
dps_label = players.highlighted_damage_UI.dps_label;
|
||||
end
|
||||
end
|
||||
|
||||
drawing.draw_bar(bar, position_on_screen, opacity_scale, player_damage_bar_percentage);
|
||||
|
||||
name_text = drawing.limit_text_size(name_text, player.damage_UI.player_name_size_limit);
|
||||
|
||||
drawing.draw_label(name_label, position_on_screen, opacity_scale, name_text);
|
||||
drawing.draw_label(hunter_rank_label, position_on_screen, opacity_scale, hunter_rank_string);
|
||||
drawing.draw_label(value_label, position_on_screen, opacity_scale, player.display.total_damage);
|
||||
drawing.draw_label(percentage_label, position_on_screen, opacity_scale, 100 * player_damage_percentage);
|
||||
drawing.draw_label(dps_label, position_on_screen, opacity_scale, player.dps);
|
||||
|
||||
if is_on_quest then
|
||||
if player.type == players.types.total then
|
||||
drawing.draw_label(player.damage_UI.cart_count_label, position_on_screen, opacity_scale, quest_status.cart_count, quest_status.max_cart_count);
|
||||
else
|
||||
drawing.draw_label(cart_count_label, position_on_screen, opacity_scale, player.cart_count);
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
function damage_UI_entity.init_module()
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
function this.init_dependencies()
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
player = require("MHR_Overlay.Damage_Meter.player");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
quest_status = require("MHR_Overlay.Game_Handler.quest_status");
|
||||
non_players = require("MHR_Overlay.Damage_Meter.non_players");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return damage_UI_entity;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -1,19 +1,53 @@
|
||||
local health_UI_entity = {};
|
||||
local table_helpers;
|
||||
local this = {};
|
||||
|
||||
local utils;
|
||||
local drawing;
|
||||
local language;
|
||||
local config;
|
||||
local error_handler;
|
||||
|
||||
function health_UI_entity.new(visibility, bar, text_label, value_label, percentage_label)
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function this.new(visibility, bar, text_label, value_label, percentage_label)
|
||||
local entity = {};
|
||||
|
||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||
|
||||
entity.visibility = visibility;
|
||||
entity.bar = table_helpers.deep_copy(bar);
|
||||
entity.text_label = table_helpers.deep_copy(text_label);
|
||||
entity.value_label = table_helpers.deep_copy(value_label);
|
||||
entity.percentage_label = table_helpers.deep_copy(percentage_label);
|
||||
entity.bar = utils.table.deep_copy(bar);
|
||||
entity.text_label = utils.table.deep_copy(text_label);
|
||||
entity.value_label = utils.table.deep_copy(value_label);
|
||||
entity.percentage_label = utils.table.deep_copy(percentage_label);
|
||||
|
||||
entity.bar.offset.x = entity.bar.offset.x * global_scale_modifier;
|
||||
entity.bar.offset.y = entity.bar.offset.y * global_scale_modifier;
|
||||
@@ -34,23 +68,39 @@ function health_UI_entity.new(visibility, bar, text_label, value_label, percenta
|
||||
return entity;
|
||||
end
|
||||
|
||||
function health_UI_entity.draw(monster, health_UI, position_on_screen, opacity_scale)
|
||||
function this.draw(monster, health_UI, position_on_screen, opacity_scale)
|
||||
if not health_UI.visibility then
|
||||
return;
|
||||
end
|
||||
|
||||
local include_current_value = health_UI.value_label.include.current_value;
|
||||
local include_max_value = health_UI.value_label.include.max_value;
|
||||
|
||||
local health_string;
|
||||
if include_current_value and include_max_value then
|
||||
health_string = string.format("%.0f/%.0f", monster.health, monster.max_health);
|
||||
elseif include_current_value then
|
||||
health_string = string.format("%.0f", monster.health);
|
||||
elseif include_max_value then
|
||||
health_string = string.format("%.0f", monster.max_health);
|
||||
end
|
||||
|
||||
drawing.draw_bar(health_UI.bar, position_on_screen, opacity_scale, monster.health_percentage);
|
||||
|
||||
drawing.draw_label(health_UI.text_label, position_on_screen, opacity_scale, language.current_language.UI.HP);
|
||||
drawing.draw_label(health_UI.value_label, position_on_screen, opacity_scale, monster.health, monster.max_health);
|
||||
drawing.draw_label(health_UI.value_label, position_on_screen, opacity_scale, health_string);
|
||||
drawing.draw_label(health_UI.percentage_label, position_on_screen, opacity_scale, 100 * monster.health_percentage);
|
||||
end
|
||||
|
||||
function health_UI_entity.init_module()
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
function this.init_dependencies()
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return health_UI_entity;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -1,20 +1,54 @@
|
||||
local rage_UI_entity = {};
|
||||
local table_helpers;
|
||||
local this = {};
|
||||
|
||||
local utils;
|
||||
local drawing;
|
||||
local language;
|
||||
local config;
|
||||
local error_handler;
|
||||
|
||||
function rage_UI_entity.new(visibility, bar, text_label, value_label, percentage_label, timer_label)
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function this.new(visibility, bar, text_label, value_label, percentage_label, timer_label)
|
||||
local entity = {};
|
||||
|
||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||
|
||||
entity.visibility = visibility;
|
||||
entity.bar = table_helpers.deep_copy(bar);
|
||||
entity.text_label = table_helpers.deep_copy(text_label);
|
||||
entity.value_label = table_helpers.deep_copy(value_label);
|
||||
entity.percentage_label = table_helpers.deep_copy(percentage_label);
|
||||
entity.timer_label = table_helpers.deep_copy(timer_label);
|
||||
entity.bar = utils.table.deep_copy(bar);
|
||||
entity.text_label = utils.table.deep_copy(text_label);
|
||||
entity.value_label = utils.table.deep_copy(value_label);
|
||||
entity.percentage_label = utils.table.deep_copy(percentage_label);
|
||||
entity.timer_label = utils.table.deep_copy(timer_label);
|
||||
|
||||
entity.bar.offset.x = entity.bar.offset.x * global_scale_modifier;
|
||||
entity.bar.offset.y = entity.bar.offset.y * global_scale_modifier;
|
||||
@@ -38,11 +72,25 @@ function rage_UI_entity.new(visibility, bar, text_label, value_label, percentage
|
||||
return entity;
|
||||
end
|
||||
|
||||
function rage_UI_entity.draw(monster, rage_UI, position_on_screen, opacity_scale)
|
||||
function this.draw(monster, rage_UI, position_on_screen, opacity_scale)
|
||||
if not rage_UI.visibility then
|
||||
return;
|
||||
end
|
||||
|
||||
local rage_string = "";
|
||||
if not monster.is_in_rage then
|
||||
local include_current_value = rage_UI.value_label.include.current_value;
|
||||
local include_max_value = rage_UI.value_label.include.max_value;
|
||||
|
||||
if include_current_value and include_max_value then
|
||||
rage_string = string.format("%.0f/%.0f", monster.rage_point, monster.rage_limit);
|
||||
elseif include_current_value then
|
||||
rage_string = string.format("%.0f", monster.rage_point);
|
||||
elseif include_max_value then
|
||||
rage_string = string.format("%.0f", monster.rage_limit);
|
||||
end
|
||||
end
|
||||
|
||||
if monster.is_in_rage then
|
||||
drawing.draw_bar(rage_UI.bar, position_on_screen, opacity_scale, monster.rage_timer_percentage);
|
||||
|
||||
@@ -53,16 +101,20 @@ function rage_UI_entity.draw(monster, rage_UI, position_on_screen, opacity_scale
|
||||
drawing.draw_bar(rage_UI.bar, position_on_screen, opacity_scale, monster.rage_percentage);
|
||||
|
||||
drawing.draw_label(rage_UI.text_label, position_on_screen, opacity_scale, language.current_language.UI.rage);
|
||||
drawing.draw_label(rage_UI.value_label, position_on_screen, opacity_scale, monster.rage_point, monster.rage_limit);
|
||||
drawing.draw_label(rage_UI.value_label, position_on_screen, opacity_scale, rage_string);
|
||||
drawing.draw_label(rage_UI.percentage_label, position_on_screen, opacity_scale, 100 * monster.rage_percentage);
|
||||
end
|
||||
end
|
||||
|
||||
function rage_UI_entity.init_module()
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
function this.init_dependencies()
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return rage_UI_entity;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -1,20 +1,54 @@
|
||||
local stamina_UI_entity = {};
|
||||
local table_helpers;
|
||||
local this = {};
|
||||
|
||||
local utils;
|
||||
local drawing;
|
||||
local language;
|
||||
local config;
|
||||
local error_handler;
|
||||
|
||||
function stamina_UI_entity.new(visibility, bar, text_label, value_label, percentage_label, timer_label)
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function this.new(visibility, bar, text_label, value_label, percentage_label, timer_label)
|
||||
local entity = {};
|
||||
|
||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||
|
||||
entity.visibility = visibility;
|
||||
entity.bar = table_helpers.deep_copy(bar);
|
||||
entity.text_label = table_helpers.deep_copy(text_label);
|
||||
entity.value_label = table_helpers.deep_copy(value_label);
|
||||
entity.percentage_label = table_helpers.deep_copy(percentage_label);
|
||||
entity.timer_label = table_helpers.deep_copy(timer_label);
|
||||
entity.bar = utils.table.deep_copy(bar);
|
||||
entity.text_label = utils.table.deep_copy(text_label);
|
||||
entity.value_label = utils.table.deep_copy(value_label);
|
||||
entity.percentage_label = utils.table.deep_copy(percentage_label);
|
||||
entity.timer_label = utils.table.deep_copy(timer_label);
|
||||
|
||||
entity.bar.offset.x = entity.bar.offset.x * global_scale_modifier;
|
||||
entity.bar.offset.y = entity.bar.offset.y * global_scale_modifier;
|
||||
@@ -36,31 +70,48 @@ function stamina_UI_entity.new(visibility, bar, text_label, value_label, percent
|
||||
return entity;
|
||||
end
|
||||
|
||||
function stamina_UI_entity.draw(monster, stamina_UI, position_on_screen, opacity_scale)
|
||||
function this.draw(monster, stamina_UI, position_on_screen, opacity_scale)
|
||||
if not stamina_UI.visibility then
|
||||
return;
|
||||
end
|
||||
|
||||
local stamina_string = "";
|
||||
if not monster.is_tired then
|
||||
local include_current_value = stamina_UI.value_label.include.current_value;
|
||||
local include_max_value = stamina_UI.value_label.include.max_value;
|
||||
|
||||
if include_current_value and include_max_value then
|
||||
stamina_string = string.format("%.0f/%.0f", monster.stamina, monster.max_stamina);
|
||||
elseif include_current_value then
|
||||
stamina_string = string.format("%.0f", monster.stamina);
|
||||
elseif include_max_value then
|
||||
stamina_string = string.format("%.0f", monster.max_stamina);
|
||||
end
|
||||
end
|
||||
|
||||
drawing.draw_label(stamina_UI.text_label, position_on_screen, opacity_scale, language.current_language.UI.stamina);
|
||||
|
||||
if monster.is_tired then
|
||||
drawing.draw_bar(stamina_UI.bar, position_on_screen, opacity_scale, monster.tired_timer_percentage);
|
||||
|
||||
drawing.draw_label(stamina_UI.timer_label, position_on_screen, opacity_scale, monster.tired_minutes_left,
|
||||
monster.tired_seconds_left);
|
||||
drawing.draw_label(stamina_UI.timer_label, position_on_screen, opacity_scale, monster.tired_minutes_left, monster.tired_seconds_left);
|
||||
else
|
||||
drawing.draw_bar(stamina_UI.bar, position_on_screen, opacity_scale, monster.stamina_percentage);
|
||||
|
||||
drawing.draw_label(stamina_UI.value_label, position_on_screen, opacity_scale, monster.stamina, monster.max_stamina);
|
||||
drawing.draw_label(stamina_UI.value_label, position_on_screen, opacity_scale, stamina_string);
|
||||
drawing.draw_label(stamina_UI.percentage_label, position_on_screen, opacity_scale, 100 * monster.stamina_percentage);
|
||||
end
|
||||
end
|
||||
|
||||
function stamina_UI_entity.init_module()
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
function this.init_dependencies()
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return stamina_UI_entity;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,16 +1,49 @@
|
||||
local drawing = {};
|
||||
local this = {};
|
||||
|
||||
local config;
|
||||
local table_helpers;
|
||||
local unicode_helpers;
|
||||
local utils;
|
||||
local error_handler;
|
||||
|
||||
drawing.font = nil;
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
local ipairs = ipairs;
|
||||
local tonumber = tonumber;
|
||||
local require = require;
|
||||
local pcall = pcall;
|
||||
local table = table;
|
||||
local string = string;
|
||||
local Vector3f = Vector3f;
|
||||
local d2d = d2d;
|
||||
local math = math;
|
||||
local json = json;
|
||||
local log = log;
|
||||
local fs = fs;
|
||||
local next = next;
|
||||
local type = type;
|
||||
local setmetatable = setmetatable;
|
||||
local getmetatable = getmetatable;
|
||||
local assert = assert;
|
||||
local select = select;
|
||||
local coroutine = coroutine;
|
||||
local utf8 = utf8;
|
||||
local re = re;
|
||||
local imgui = imgui;
|
||||
local draw = draw;
|
||||
local Vector2f = Vector2f;
|
||||
local reframework = reframework;
|
||||
local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function drawing.init_font()
|
||||
this.font = nil;
|
||||
|
||||
function this.init_font()
|
||||
local cached_config = config.current_config.global_settings.UI_font;
|
||||
drawing.font = d2d.Font.new(cached_config.family, cached_config.size, cached_config.bold, cached_config.italic);
|
||||
this.font = d2d.Font.new(cached_config.family, cached_config.size, cached_config.bold, cached_config.italic);
|
||||
end
|
||||
|
||||
function drawing.argb_color_to_abgr_color(argb_color)
|
||||
function this.argb_color_to_abgr_color(argb_color)
|
||||
local alpha = (argb_color >> 24) & 0xFF;
|
||||
local red = (argb_color >> 16) & 0xFF;
|
||||
local green = (argb_color >> 8) & 0xFF;
|
||||
@@ -21,7 +54,7 @@ function drawing.argb_color_to_abgr_color(argb_color)
|
||||
return abgr_color;
|
||||
end
|
||||
|
||||
function drawing.color_to_argb(color)
|
||||
function this.color_to_argb(color)
|
||||
local alpha = (color >> 24) & 0xFF;
|
||||
local red = (color >> 16) & 0xFF;
|
||||
local green = (color >> 8) & 0xFF;
|
||||
@@ -30,27 +63,27 @@ function drawing.color_to_argb(color)
|
||||
return alpha, red, green, blue;
|
||||
end
|
||||
|
||||
function drawing.argb_to_color(alpha, red, green, blue)
|
||||
function this.argb_to_color(alpha, red, green, blue)
|
||||
return 0x1000000 * alpha + 0x10000 * red + 0x100 * green + blue;
|
||||
end
|
||||
|
||||
function drawing.limit_text_size(text, size_limit)
|
||||
if d2d == nil or size_limit <= 0 then
|
||||
function this.limit_text_size(text, size_limit)
|
||||
if d2d == nil or not config.current_config.global_settings.renderer.use_d2d_if_available or size_limit <= 0 then
|
||||
return text;
|
||||
end
|
||||
|
||||
local limited_text = text;
|
||||
while limited_text ~= "..." do
|
||||
local text_width, text_height = drawing.font:measure(limited_text);
|
||||
local text_width, text_height = this.font:measure(limited_text);
|
||||
|
||||
if text_width < size_limit then
|
||||
break
|
||||
else
|
||||
local old_limited_text = limited_text;
|
||||
limited_text = unicode_helpers.sub(limited_text, 1, -5) .. "...";
|
||||
limited_text = utils.unicode.sub(limited_text, 1, -5) .. "...";
|
||||
|
||||
if limited_text == old_limited_text then
|
||||
break
|
||||
break;
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -58,8 +91,8 @@ function drawing.limit_text_size(text, size_limit)
|
||||
return limited_text;
|
||||
end
|
||||
|
||||
function drawing.scale_color_opacity(color, scale)
|
||||
local alpha, red, green, blue = drawing.color_to_argb(color);
|
||||
function this.scale_color_opacity(color, scale)
|
||||
local alpha, red, green, blue = this.color_to_argb(color);
|
||||
local new_alpha = math.floor(alpha * scale);
|
||||
if new_alpha < 0 then
|
||||
new_alpha = 0;
|
||||
@@ -68,67 +101,80 @@ function drawing.scale_color_opacity(color, scale)
|
||||
new_alpha = 255;
|
||||
end
|
||||
|
||||
return drawing.argb_to_color(new_alpha, red, green, blue);
|
||||
return this.argb_to_color(new_alpha, red, green, blue);
|
||||
end
|
||||
|
||||
function drawing.scale_bar_opacity(bar, scale)
|
||||
function this.scale_bar_opacity(bar, scale)
|
||||
if bar == nil or scale == nil or not bar.visibility then
|
||||
return;
|
||||
end
|
||||
|
||||
bar.colors.foreground = drawing.scale_color_opacity(bar.colors.foreground, scale);
|
||||
bar.colors.background = drawing.scale_color_opacity(bar.colors.background, scale);
|
||||
bar.colors.foreground = this.scale_color_opacity(bar.colors.foreground, scale);
|
||||
bar.colors.background = this.scale_color_opacity(bar.colors.background, scale);
|
||||
end
|
||||
|
||||
function drawing.scale_label_opacity(label, scale)
|
||||
function this.scale_label_opacity(label, scale)
|
||||
if label == nil or scale == nil or not label.visibility then
|
||||
return;
|
||||
end
|
||||
|
||||
label.color = drawing.scale_color_opacity(label.color, scale);
|
||||
label.shadow.color = drawing.scale_color_opacity(label.shadow.color, scale);
|
||||
label.color = this.scale_color_opacity(label.color, scale);
|
||||
label.shadow.color = this.scale_color_opacity(label.shadow.color, scale);
|
||||
end
|
||||
|
||||
function drawing.draw_label(label, position, opacity_scale, ...)
|
||||
function this.draw_label(label, position, opacity_scale, ...)
|
||||
if label == nil or not label.visibility then
|
||||
return;
|
||||
end
|
||||
|
||||
local text = string.format(label.text, table.unpack({...}));
|
||||
local text = string.format(label.text_formatting, table.unpack({...}));
|
||||
|
||||
if text == "" then
|
||||
return;
|
||||
end
|
||||
|
||||
local right_alignment_shift = label.settings.right_alignment_shift;
|
||||
|
||||
if right_alignment_shift ~= 0 then
|
||||
local right_aligment_format = string.format("%%%ds", right_alignment_shift);
|
||||
text = string.format(right_aligment_format, text);
|
||||
end
|
||||
|
||||
local position_x = position.x + label.offset.x;
|
||||
local position_y = position.y + label.offset.y;
|
||||
|
||||
local use_d2d = d2d ~= nil and config.current_config.global_settings.renderer.use_d2d_if_available;
|
||||
|
||||
if label.shadow.visibility then
|
||||
local new_shadow_color = label.shadow.color;
|
||||
|
||||
if opacity_scale < 1 then
|
||||
new_shadow_color = drawing.scale_color_opacity(new_shadow_color, opacity_scale);
|
||||
new_shadow_color = this.scale_color_opacity(new_shadow_color, opacity_scale);
|
||||
end
|
||||
|
||||
if d2d ~= nil then
|
||||
d2d.text(drawing.font, text, position_x + label.shadow.offset.x, position_y + label.shadow.offset.y, new_shadow_color);
|
||||
if use_d2d then
|
||||
d2d.text(this.font, text, position_x + label.shadow.offset.x, position_y + label.shadow.offset.y, new_shadow_color);
|
||||
else
|
||||
new_shadow_color = drawing.argb_color_to_abgr_color(new_shadow_color);
|
||||
new_shadow_color = this.argb_color_to_abgr_color(new_shadow_color);
|
||||
draw.text(text, position_x + label.shadow.offset.x, position_y + label.shadow.offset.y, new_shadow_color);
|
||||
end
|
||||
end
|
||||
|
||||
local new_color = label.color;
|
||||
if opacity_scale < 1 then
|
||||
new_color = drawing.scale_color_opacity(new_color, opacity_scale);
|
||||
new_color = this.scale_color_opacity(new_color, opacity_scale);
|
||||
end
|
||||
|
||||
if d2d ~= nil then
|
||||
d2d.text(drawing.font, text, position_x, position_y, new_color);
|
||||
if use_d2d then
|
||||
d2d.text(this.font, text, position_x, position_y, new_color);
|
||||
else
|
||||
new_color = drawing.argb_color_to_abgr_color(new_color);
|
||||
new_color = this.argb_color_to_abgr_color(new_color);
|
||||
draw.text(text, position_x, position_y, new_color);
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function drawing.draw_bar(bar, position, opacity_scale, percentage)
|
||||
|
||||
function this.draw_bar(bar, position, opacity_scale, percentage)
|
||||
if bar == nil or not bar.visibility then
|
||||
return;
|
||||
end
|
||||
@@ -143,6 +189,7 @@ function drawing.draw_bar(bar, position, opacity_scale, percentage)
|
||||
|
||||
local outline_visibility = bar.outline.visibility;
|
||||
local style = bar.outline.style; -- Inside/Center/Outside
|
||||
local fill_direction = bar.settings.fill_direction; -- Left to Right/Right to Left/Top to Bottom/Bottom to Top
|
||||
|
||||
local outline_thickness = bar.outline.thickness;
|
||||
if not outline_visibility then
|
||||
@@ -153,7 +200,7 @@ function drawing.draw_bar(bar, position, opacity_scale, percentage)
|
||||
|
||||
local outline_offset = bar.outline.offset;
|
||||
|
||||
if outline_thickness == 0 then
|
||||
if utils.number.is_equal(outline_thickness, 0) then
|
||||
outline_offset = 0;
|
||||
end
|
||||
local half_outline_offset = outline_offset / 2;
|
||||
@@ -167,10 +214,21 @@ function drawing.draw_bar(bar, position, opacity_scale, percentage)
|
||||
local position_x = 0;
|
||||
local position_y = 0;
|
||||
|
||||
local foreground_width = 0;
|
||||
local background_width = 0;
|
||||
local width = 0;
|
||||
local height = 0;
|
||||
|
||||
local foreground_width = 0;
|
||||
local foreground_height = 0;
|
||||
|
||||
local background_width = 0;
|
||||
local background_height = 0;
|
||||
|
||||
local foreground_shift_x = 0;
|
||||
local foreground_shift_y = 0;
|
||||
|
||||
local background_shift_x = 0;
|
||||
local background_shift_y = 0;
|
||||
|
||||
if style == "Inside" then
|
||||
outline_position_x = position.x + bar.offset.x + half_outline_thickness;
|
||||
outline_position_y = position.y + bar.offset.y + half_outline_thickness;
|
||||
@@ -181,10 +239,7 @@ function drawing.draw_bar(bar, position, opacity_scale, percentage)
|
||||
position_x = outline_position_x + half_outline_thickness + outline_offset;
|
||||
position_y = outline_position_y + half_outline_thickness + outline_offset;
|
||||
|
||||
local width = outline_width - outline_thickness - outline_offset - outline_offset;
|
||||
foreground_width = width * percentage;
|
||||
background_width = width - foreground_width;
|
||||
|
||||
width = outline_width - outline_thickness - outline_offset - outline_offset;
|
||||
height = outline_height - outline_thickness - outline_offset - outline_offset;
|
||||
|
||||
elseif style == "Center" then
|
||||
@@ -197,22 +252,16 @@ function drawing.draw_bar(bar, position, opacity_scale, percentage)
|
||||
position_x = outline_position_x + half_outline_thickness + outline_offset;
|
||||
position_y = outline_position_y + half_outline_thickness + outline_offset;
|
||||
|
||||
local width = outline_width - outline_thickness - outline_offset - outline_offset;
|
||||
foreground_width = width * percentage;
|
||||
background_width = width - foreground_width;
|
||||
|
||||
width = outline_width - outline_thickness - outline_offset - outline_offset;
|
||||
height = outline_height - outline_thickness - outline_offset - outline_offset;
|
||||
|
||||
else
|
||||
else -- Outside
|
||||
position_x = position.x + bar.offset.x;
|
||||
position_y = position.y + bar.offset.y;
|
||||
|
||||
local width = bar.size.width;
|
||||
width = bar.size.width;
|
||||
height = bar.size.height;
|
||||
|
||||
foreground_width = width * percentage;
|
||||
background_width = width - foreground_width;
|
||||
|
||||
outline_position_x = position_x - half_outline_thickness - outline_offset;
|
||||
outline_position_y = position_y - half_outline_thickness - outline_offset;
|
||||
|
||||
@@ -220,52 +269,87 @@ function drawing.draw_bar(bar, position, opacity_scale, percentage)
|
||||
outline_height = height + outline_thickness + outline_offset + outline_offset;
|
||||
end
|
||||
|
||||
if fill_direction == "Right to Left" then
|
||||
foreground_width = width * percentage;
|
||||
foreground_height = height;
|
||||
|
||||
background_width = width - foreground_width;
|
||||
background_height = height;
|
||||
|
||||
foreground_shift_x = background_width;
|
||||
|
||||
elseif fill_direction == "Top to Bottom" then
|
||||
foreground_width = width;
|
||||
foreground_height = height * percentage;
|
||||
|
||||
background_width = width;
|
||||
background_height = height - foreground_height;
|
||||
|
||||
background_shift_y = foreground_height;
|
||||
|
||||
elseif fill_direction == "Bottom to Top" then
|
||||
foreground_width = width;
|
||||
foreground_height = height * percentage;
|
||||
|
||||
background_width = width;
|
||||
background_height = height - foreground_height;
|
||||
|
||||
foreground_shift_y = background_height;
|
||||
|
||||
else -- Left to Right
|
||||
foreground_width = width * percentage;
|
||||
foreground_height = height;
|
||||
|
||||
background_width = width - foreground_width;
|
||||
background_height = height;
|
||||
|
||||
background_shift_x = foreground_width;
|
||||
end
|
||||
|
||||
local foreground_color = bar.colors.foreground;
|
||||
local background_color = bar.colors.background;
|
||||
local outline_color = bar.colors.outline;
|
||||
|
||||
if opacity_scale < 1 then
|
||||
foreground_color = drawing.scale_color_opacity(foreground_color, opacity_scale);
|
||||
background_color = drawing.scale_color_opacity(background_color, opacity_scale);
|
||||
outline_color = drawing.scale_color_opacity(outline_color, opacity_scale);
|
||||
foreground_color = this.scale_color_opacity(foreground_color, opacity_scale);
|
||||
background_color = this.scale_color_opacity(background_color, opacity_scale);
|
||||
outline_color = this.scale_color_opacity(outline_color, opacity_scale);
|
||||
end
|
||||
|
||||
local use_d2d = d2d ~= nil;
|
||||
local use_d2d = d2d ~= nil and config.current_config.global_settings.renderer.use_d2d_if_available;
|
||||
|
||||
-- outline
|
||||
if outline_thickness ~= 0 then
|
||||
-- background
|
||||
if background_width ~= 0 then
|
||||
if use_d2d then
|
||||
d2d.outline_rect(outline_position_x, outline_position_y, outline_width, outline_height, outline_thickness,
|
||||
outline_color);
|
||||
d2d.fill_rect(position_x + background_shift_x, position_y + background_shift_y, background_width, background_height, background_color);
|
||||
else
|
||||
outline_color = drawing.argb_color_to_abgr_color(outline_color);
|
||||
draw.outline_rect(outline_position_x, outline_position_y, outline_width, outline_height, outline_color);
|
||||
background_color = this.argb_color_to_abgr_color(background_color);
|
||||
draw.filled_rect(position_x + background_shift_x, position_y + background_shift_y, background_width, background_height, background_color)
|
||||
end
|
||||
end
|
||||
|
||||
-- foreground
|
||||
if foreground_width ~= 0 then
|
||||
if use_d2d then
|
||||
d2d.fill_rect(position_x, position_y, foreground_width, height, foreground_color);
|
||||
|
||||
d2d.fill_rect(position_x + foreground_shift_x, position_y + foreground_shift_y, foreground_width, foreground_height, foreground_color);
|
||||
else
|
||||
foreground_color = drawing.argb_color_to_abgr_color(foreground_color);
|
||||
draw.filled_rect(position_x, position_y, foreground_width, height, foreground_color)
|
||||
foreground_color = this.argb_color_to_abgr_color(foreground_color);
|
||||
draw.filled_rect(position_x + foreground_shift_x, position_y + foreground_shift_y, foreground_width, foreground_height, foreground_color)
|
||||
end
|
||||
end
|
||||
|
||||
-- background
|
||||
if background_width ~= 0 then
|
||||
-- outline
|
||||
if outline_thickness ~= 0 then
|
||||
if use_d2d then
|
||||
d2d.fill_rect(position_x + foreground_width, position_y, background_width, height, background_color);
|
||||
d2d.outline_rect(outline_position_x, outline_position_y, outline_width, outline_height, outline_thickness, outline_color);
|
||||
else
|
||||
background_color = drawing.argb_color_to_abgr_color(background_color);
|
||||
draw.filled_rect(position_x + foreground_width, position_y, background_width, height, background_color)
|
||||
outline_color = this.argb_color_to_abgr_color(outline_color);
|
||||
draw.outline_rect(outline_position_x, outline_position_y, outline_width, outline_height, outline_color);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function drawing.draw_capture_line(health_UI, position, opacity_scale, percentage)
|
||||
function this.draw_capture_line(health_UI, position, opacity_scale, percentage)
|
||||
if health_UI == nil or not health_UI.visibility or health_UI.bar == nil or not health_UI.bar.visibility or
|
||||
health_UI.bar.capture_line == nil or not health_UI.bar.capture_line.visibility or percentage >= 1 or percentage <= 0 then
|
||||
return;
|
||||
@@ -278,23 +362,28 @@ function drawing.draw_capture_line(health_UI, position, opacity_scale, percentag
|
||||
local color = health_UI.bar.capture_line.color;
|
||||
|
||||
if opacity_scale < 1 then
|
||||
color = drawing.scale_color_opacity(color, opacity_scale);
|
||||
color = this.scale_color_opacity(color, opacity_scale);
|
||||
end
|
||||
|
||||
if d2d ~= nil then
|
||||
local use_d2d = d2d ~= nil and config.current_config.global_settings.renderer.use_d2d_if_available;
|
||||
|
||||
if use_d2d then
|
||||
d2d.fill_rect(position_x, position_y, health_UI.bar.capture_line.size.width, health_UI.bar.capture_line.size.height,
|
||||
color);
|
||||
else
|
||||
color = drawing.argb_color_to_abgr_color(color);
|
||||
color = this.argb_color_to_abgr_color(color);
|
||||
draw.filled_rect(position_x, position_y, health_UI.bar.capture_line.size.width,
|
||||
health_UI.bar.capture_line.size.height, color)
|
||||
end
|
||||
end
|
||||
|
||||
function drawing.init_module()
|
||||
function this.init_dependencies()
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
unicode_helpers = require("MHR_Overlay.Misc.unicode_helpers");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
return drawing;
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
700
reframework/data/MHR Overlay/languages/de-de.json
Normal file
700
reframework/data/MHR Overlay/languages/de-de.json
Normal file
@@ -0,0 +1,700 @@
|
||||
{
|
||||
"UI": {
|
||||
"HP": "HP:",
|
||||
"buildup": "Buildup:",
|
||||
"gold": "Gold",
|
||||
"lv": "",
|
||||
"mini": "Mini",
|
||||
"otomo": "Buddy",
|
||||
"part_anomaly_core": "Anomaliekern",
|
||||
"part_break": "Bruch",
|
||||
"part_sever": "Schnitt",
|
||||
"player": "Spieler",
|
||||
"rage": "Wut:",
|
||||
"servant": "Anhänger",
|
||||
"silver": "Silber",
|
||||
"stamina": "Ausdauer:",
|
||||
"total_buildup": "Gesamt-Buildup",
|
||||
"total_damage": "Gesamt-Schaden"
|
||||
},
|
||||
"ailments": {
|
||||
"blast": "Explosion",
|
||||
"blastblight": "Explosionspest",
|
||||
"bleeding": "Blutung",
|
||||
"bloodblight": "Blutpest",
|
||||
"deadly_poison": "Tödliches Gift",
|
||||
"defense_down": "Verteidigung -",
|
||||
"dragonblight": "Drachenpest",
|
||||
"dung_bomb": "Dungbombe",
|
||||
"engulfed": "Verschlungen",
|
||||
"exhaust": "Erschöpft",
|
||||
"fall_otomo_trap": "Buddy Fallgrube",
|
||||
"fall_trap": "Fallgrube",
|
||||
"falling_asleep": "Am Einschlafen",
|
||||
"fireblight": "Feuerpest",
|
||||
"flash": "Blenden",
|
||||
"frenzy": "Raserei",
|
||||
"frenzy_infection": "Raserei Erlegen",
|
||||
"frenzy_overcome": "Raserei Besiegt",
|
||||
"frostblight": "Frostpest",
|
||||
"hellfireblight": "Höllenfeuerpest",
|
||||
"iceblight": "Eispest",
|
||||
"leeched": "Blutegel",
|
||||
"major_bubbleblight": "Blasenpest (L)",
|
||||
"minor_bubbleblight": "Blasenpest (S)",
|
||||
"muck": "Schlamm",
|
||||
"paralysis": "Lähmung",
|
||||
"poison": "Gift",
|
||||
"quick_sand": "Treibsand",
|
||||
"resistance_down": "Widerstand -",
|
||||
"ride": "Wyvern-Reiten",
|
||||
"roar": "Schrei",
|
||||
"shock_otomo_trap": "Buddy Schockfalle",
|
||||
"shock_trap": "Schockfalle",
|
||||
"sleep": "Schlaf",
|
||||
"steel_fang": "Stahl-Reißzahn",
|
||||
"stench": "Gestank",
|
||||
"stun": "Betäuben",
|
||||
"thunderblight": "Donnerpest",
|
||||
"tranq_bomb": "Beruhigungsbombe",
|
||||
"tremor": "Erschütterung",
|
||||
"waterblight": "Wasserpest",
|
||||
"webbed": "Eingenetzt"
|
||||
},
|
||||
"customization_menu": {
|
||||
"UI_font": "UI Schrift",
|
||||
"UI_font_notice": "Schriftartänderungen erfordern einen Skiptneustart!",
|
||||
"abnormal_statuses": "Status-Anomalien",
|
||||
"activation_count": "Aktivierungsanzahl",
|
||||
"affinity_label": "Affinität-Etikett",
|
||||
"ailment_buildups": "Anomalie-Buildups",
|
||||
"ailment_name": "Anomalie-Name",
|
||||
"ailment_name_label": "Anomalie-Name-Etikett",
|
||||
"ailment_spacing": "Anomalie-Abstand",
|
||||
"ailments": "Anomalien",
|
||||
"all_UI": "Ganze UI",
|
||||
"anchor": "Anker",
|
||||
"anomaly_cores": "Anomaliekerne",
|
||||
"anomaly_filter": "Anomaliekern",
|
||||
"anomaly_health": "Anomaliekern-Zustand",
|
||||
"anomaly_health_percentage": "Anomaliekern-Zustand in %",
|
||||
"apply": "Übernehmen",
|
||||
"assign_new_key": "Neue Taste zuweisen",
|
||||
"attack_label": "Angriff-Etikett",
|
||||
"auto_highlight": "Auto-Erfassen",
|
||||
"background": "Hintergrund",
|
||||
"bar": "Leiste",
|
||||
"blast": "Explosion",
|
||||
"body_parts": "Körperteile",
|
||||
"bold": "Fett",
|
||||
"bombs": "Bomben",
|
||||
"bottom_left": "Unten Links",
|
||||
"bottom_right": "Unten Rechts",
|
||||
"bottom_to_top": "Unten nach Oben",
|
||||
"break_anomaly_filter": "Bruch + Anomaliekern",
|
||||
"break_count": "Bruchanzahl",
|
||||
"break_filter": "Bruch",
|
||||
"break_health": "Bruch-HP",
|
||||
"break_health_percentage": "Bruch-HP in %",
|
||||
"break_max_count": "Max Bruchanzahl",
|
||||
"break_sever_anomaly_filter": "Bruch + Schnitt + Anomaliekern",
|
||||
"break_sever_filter": "Bruch + Schnitt",
|
||||
"buff_UI": "Buff UI",
|
||||
"buildup": "Buildup",
|
||||
"buildup_bar": "Buildup-Leiste",
|
||||
"buildup_bars_are_relative_to": "Buildup-Leisten relativ zu",
|
||||
"buildup_percentage": "Buildup in %",
|
||||
"buildup_percentage_label": "Buildup in %-Etikett",
|
||||
"buildup_value_label": "Buildup-Wert-Etikett",
|
||||
"capture_line": "Fanggrenze",
|
||||
"cart_count": "Karrenanzahl",
|
||||
"cart_count_label": "Karrenanzahl-Etikett",
|
||||
"center": "Mitte",
|
||||
"closest": "Nächster",
|
||||
"color": "Farbe",
|
||||
"colors": "Farben",
|
||||
"config": "Voreinstellungen",
|
||||
"creature_name_label": "Kreaturenname-Etikett",
|
||||
"crown": "Krone",
|
||||
"crown_thresholds": "Krone Grenzwerte",
|
||||
"current_state": "Aktueller Zustand",
|
||||
"current_time": "Aktuelle Zeit",
|
||||
"current_value": "Aktueller Wert",
|
||||
"cutscene": "Zwischensequenz",
|
||||
"damage": "Schaden",
|
||||
"damage_bar": "Schadensleiste",
|
||||
"damage_bars_are_relative_to": "Schadensleiste relativ zu",
|
||||
"damage_meter_UI": "Schadens-UI",
|
||||
"damage_percentage_label": "Schaden in %-Etikett",
|
||||
"damage_value_label": "Schadenswert-Etikett",
|
||||
"dango_skills": "Dango-Fähigkeiten",
|
||||
"debug": "Debug",
|
||||
"default_state": "Voreinstellung",
|
||||
"defense_label": "Verteidigung-Etikett",
|
||||
"delete": "Löschen",
|
||||
"distance": "Entfernung",
|
||||
"dps": "DPS",
|
||||
"dps_label": "DPS-Etikett",
|
||||
"dps_mode": "DPS Modus",
|
||||
"dragon_resistance_label": "Drachenwiderstand-Etikett",
|
||||
"duplicate": "Klonen",
|
||||
"duration": "Dauer",
|
||||
"dynamic_positioning": "Dynamische Platzierung",
|
||||
"dynamically_positioned": "Dynamisch Platziert",
|
||||
"effect_level": "Effekt-Stufe",
|
||||
"element_2_label": "Element 2-Etikett",
|
||||
"element_label": "Element-Etikett",
|
||||
"enable_for": "Aktiviere für",
|
||||
"enabled": "Aktiviert",
|
||||
"endemic_life": "Einheimische Wesen",
|
||||
"endemic_life_UI": "Einheimische Wesen UI",
|
||||
"endemic_life_buffs": "Einheimische Wesen Buffs",
|
||||
"everything_seems_to_be_ok": "Alles scheint gut zu sein!",
|
||||
"family": "Familie",
|
||||
"farthest": "Weitester",
|
||||
"fight_time": "Kampfdauer",
|
||||
"fill_direction": "Füllrichtung",
|
||||
"filter": "Filter",
|
||||
"filter_mode": "Filter-Modus",
|
||||
"fire_resistance_label": "Feuerwiderstand-Etikett",
|
||||
"first": "Zuerst",
|
||||
"first_hit": "Erster Treffer",
|
||||
"flinch_count": "Stolper-Anzahl",
|
||||
"foreground": "Vordergrund",
|
||||
"freeze_dps_on_quest_end": "DPS bei Questabschluss einfrieren",
|
||||
"global_position_modifier": "Allgemeiner Positions-Modifikator",
|
||||
"global_scale_modifier": "Allgemeiner Größen-Modifikator",
|
||||
"global_settings": "Allgemeine Einstellungen",
|
||||
"head_tracking": "Auf Kopf fixieren",
|
||||
"health": "HP",
|
||||
"health_anomaly_filter": "HP + Anomaliekern",
|
||||
"health_break_anomaly_filter": "HP + Bruch + Anomaliekern",
|
||||
"health_break_filter": "HP + Bruch",
|
||||
"health_break_sever_anomaly_filter": "HP + Bruch + Schnitt + Anomaliekern",
|
||||
"health_break_sever_filter": "HP + Bruch + Schnitt",
|
||||
"health_filter": "HP",
|
||||
"health_label": "HP-Etikett",
|
||||
"health_percentage": "HP in %",
|
||||
"health_sever_anomaly_filter": "HP + Schnitt + Anomaliekern",
|
||||
"health_sever_filter": "HP + Schnitt",
|
||||
"height": "Höhe",
|
||||
"hide_ailments_with_zero_buildup": "Anomalien mit 0 Buildup verbergen",
|
||||
"hide_all_active_ailments": "Alle Aktiven Anomalien verbergen",
|
||||
"hide_all_inactive_ailments": "Alle Inaktiven Anomalien verbergen",
|
||||
"hide_bar_for_infinite_buffs": "Leiste für unbegrenzte Buffs verbergen",
|
||||
"hide_dead_or_captured": "Tote oder Gefangene verbergen",
|
||||
"hide_disabled_ailments": "Vom Spiel deaktivierte Anomalien verbergen",
|
||||
"hide_inactive_ailments_with_no_buildup_support": "Inaktive Anomalien ohne Buildup-Möglichkeit verbergen",
|
||||
"hide_inactive_creatures": "Inaktive Kreaturen verbergen",
|
||||
"hide_module_if_total_damage_is_zero": "Modul bei 0 Schaden verbergen",
|
||||
"hide_myself": "Selbst verbergen",
|
||||
"hide_other_players": "Andere Spieler verbergen",
|
||||
"hide_player_if_player_damage_is_zero": "Spieler mit 0 Schaden verbergen",
|
||||
"hide_servants": "Anhänger verbergen",
|
||||
"hide_timer_for_infinite_buffs": "Dauer für unbegrenzte Buffs verbergen",
|
||||
"hide_total_damage": "Gesamtschaden verbergen",
|
||||
"hide_total_if_total_damage_is_zero": "Bei 0 Gesamtschaden verbergen",
|
||||
"hide_undamaged_parts": "Unbeschädigte Teile verbergen",
|
||||
"highest_health": "Höchste HP",
|
||||
"highest_health_percentage": "Höchste HP in %",
|
||||
"highlighted": "Erfasst",
|
||||
"highlighted_bar": "Erfasst-Leiste",
|
||||
"highlighted_buildup_bar": "Erfasst Buildup-Leiste",
|
||||
"highlighted_damage_bar": "Erfasst Schadensleiste",
|
||||
"highlighted_targeted": "Erfasst (anvisiert)",
|
||||
"history": "Verlauf",
|
||||
"history_size": "Verlaufsgröße",
|
||||
"horizontal": "Horizontal",
|
||||
"hotkeys": "Hotkeys",
|
||||
"hunter_rank": "Jägerrang",
|
||||
"hunter_rank_label": "Jägerrang-Etikett",
|
||||
"ice_resistance_label": "Eiswiderstand-Etikett",
|
||||
"id": "ID",
|
||||
"in_lobby": "Im Lager",
|
||||
"in_training_area": "Im Trainingsbereich",
|
||||
"include": "Beinhaltet",
|
||||
"infinite_buffs_location": "Ort für Unbegrenzte Buffs",
|
||||
"inside": "Innen",
|
||||
"installations": "Anlagen",
|
||||
"italic": "Kursiv",
|
||||
"item_buffs": "Gegenstand-Buffs",
|
||||
"join_time": "Beirittszeit",
|
||||
"killcam": "Killcam",
|
||||
"kunai": "Kunai",
|
||||
"language": "Sprache",
|
||||
"large_monster_UI": "Großmonster UI",
|
||||
"large_monster_dynamic_UI": "Großmonster Dynamische UI",
|
||||
"large_monster_highlighted_UI": "Großmonster Erfasst UI",
|
||||
"large_monster_static_UI": "Großmonster Feste UI",
|
||||
"large_monsters": "Große Monster",
|
||||
"last": "Zuletzt",
|
||||
"left_to_right": "Links nach Rechts",
|
||||
"level": "Stufe",
|
||||
"level_label": "Stufe-Etikett",
|
||||
"loading_quest": "Lade Quest",
|
||||
"loss_health": "Schnitt-HP",
|
||||
"loss_health_percentage": "Schnitt-HP in %",
|
||||
"lowest_health": "Niedrigste HP",
|
||||
"lowest_health_percentage": "Niedrigste HP in %",
|
||||
"master_rank": "Meisterrang",
|
||||
"max_distance": "Max Entfernung",
|
||||
"max_monster_updates_per_tick": "Max Monster-Updates pro Tick",
|
||||
"max_value": "Max Wert",
|
||||
"me": "Ich",
|
||||
"melody_effects": "Melodie-Effekte",
|
||||
"menu_font": "Menü-Schriftart",
|
||||
"menu_font_change_disclaimer": "Mehrmals Sprache und Menüschriftart ändern führt zu einem Absturz!",
|
||||
"misc_buffs": "Diverse Buffs",
|
||||
"mod_name": "MHR Overlay",
|
||||
"mode": "Modus",
|
||||
"modifiers": "Modifikatoren",
|
||||
"module_visibility_based_on_game_state": "Sichtbarkeit abhängig vom Spielzustand",
|
||||
"modules": "Modul",
|
||||
"monster_can_be_captured": "Monster ist fangbar",
|
||||
"monster_id": "Monster-ID",
|
||||
"monster_name": "Monster-Name",
|
||||
"monster_name_label": "Monster-Name-Etikett",
|
||||
"monsters": "Monster",
|
||||
"my_damage_bar_location": "Ort für Meine Schadensleiste",
|
||||
"my_otomos": "Meine Buddies",
|
||||
"myself": "Selbst",
|
||||
"name": "Name",
|
||||
"name_label": "Namens-Label",
|
||||
"new": "Neu",
|
||||
"none": "Nichts",
|
||||
"normal": "Normal",
|
||||
"offset": "Offset",
|
||||
"offset_is_relative_to_parts": "Offset ist relativ zu Teile",
|
||||
"opacity_falloff": "Abfall der Deckkraft",
|
||||
"orientation": "Orientierung",
|
||||
"other": "Andere",
|
||||
"other_player_otomos": "Buddies anderer Spieler",
|
||||
"other_players": "Andere Spieler",
|
||||
"otomo_moves": "Buddy Aktionen",
|
||||
"otomos": "Buddies",
|
||||
"outline": "Umrandung",
|
||||
"outside": "Außen",
|
||||
"part_health": "Teil-HP",
|
||||
"part_name": "Teil-Name",
|
||||
"part_name_label": "Teil-Name-Etikett",
|
||||
"percentage_label": "Prozent-Etikett",
|
||||
"performance": "Leistung",
|
||||
"player_name_label": "Spielername-Etikett",
|
||||
"player_name_size_limit": "Höchstbreite Spielername",
|
||||
"player_spacing": "Spieler Abstand",
|
||||
"players": "Spieler",
|
||||
"playing_quest": "Während Quest",
|
||||
"poison": "Gift",
|
||||
"position": "Position",
|
||||
"press_any_key": "Drücke eine Taste...",
|
||||
"prioritize_large_monsters": "Große Monster priorisieren",
|
||||
"quest_end_animation": "Questabschluss-Szene",
|
||||
"quest_end_screen": "Questabschluss-Schirm",
|
||||
"quest_end_timer": "Questabschluss-Zähler",
|
||||
"quest_start_animation": "Questbeginn-Animation",
|
||||
"quest_time": "Quest-Zeit",
|
||||
"rage": "Wut",
|
||||
"rampage_skills": "Randale-Fähigkeiten",
|
||||
"reframework_outdated": "Die installierte REFramework Version ist veraltet. Bitte aktualisieren. Sonst wird MHR Overlay nicht richtig arbeiten.",
|
||||
"relative_offset": "Relatives Offset",
|
||||
"rename": "Umbenennen",
|
||||
"render_highlighted_monster": "Rendere erfasstes Monster",
|
||||
"render_inactive_anomaly_cores": "Rendere inaktive Anomaliekerne",
|
||||
"render_not_highlighted_monsters": "Rendere nicht erfasste Monster",
|
||||
"renderer": "Renderer",
|
||||
"reset": "Zurücksetzen",
|
||||
"reversed_order": "Umgekehrte Reihenfolge",
|
||||
"reward_screen": "Belohnungsauswahl",
|
||||
"right_alignment_shift": "Ausrichtungsverschiebung Rechts",
|
||||
"right_to_left": "Rechts nach Links",
|
||||
"servant_otomos": "Anhänger-Buddies",
|
||||
"servants": "Anhänger",
|
||||
"settings": "Einstellungen",
|
||||
"sever_anomaly_filter": "Schnitt + Anomaliekern",
|
||||
"sever_filter": "Schnitt",
|
||||
"shadow": "Schatten",
|
||||
"show_my_otomos_separately": "Zeige Meine Buddies getrennt",
|
||||
"show_other_player_otomos_separately": "Zeige Buddies anderer Spieler getrennt",
|
||||
"show_servant_otomos_separately": "Zeige Anhänger-Buddies getrennt",
|
||||
"size": "Größe",
|
||||
"skills": "Fähigkeiten",
|
||||
"small_monster_UI": "Kleinmonster UI",
|
||||
"small_monsters": "Kleine Monster",
|
||||
"sorting": "Sortierung",
|
||||
"spacing": "Abstand",
|
||||
"stamina": "Ausdauer",
|
||||
"stamina_label": "Ausdauer-Etikett",
|
||||
"static_orientation": "Feste Orientierung",
|
||||
"static_position": "Feste Platzierung",
|
||||
"static_sorting": "Feste Sortierung",
|
||||
"static_spacing": "Fester Abstand",
|
||||
"statically_positioned": "Fest Platziert",
|
||||
"stats_UI": "Status UI",
|
||||
"status": "Status",
|
||||
"style": "Stil",
|
||||
"summary_screen": "Zusammenfassung",
|
||||
"text_label": "Text-Etikett",
|
||||
"thickness": "Dicke",
|
||||
"thunder_resistance_label": "Donnerwiderstand-Etikett",
|
||||
"time_UI": "Zeit UI",
|
||||
"time_label": "Zeit-Etikett",
|
||||
"time_limit": "Zeitlimit (Sekunden)",
|
||||
"timer": "Dauer",
|
||||
"timer_delays": "Zeitabstände",
|
||||
"timer_label": "Dauer-Etikett",
|
||||
"top_buildup": "Bester Buildup",
|
||||
"top_damage": "Bester Schaden",
|
||||
"top_dps": "Bester DPS",
|
||||
"top_left": "Oben Links",
|
||||
"top_right": "Oben Rechts",
|
||||
"top_to_bottom": "Oben nach Unten",
|
||||
"total": "Gesamt",
|
||||
"total_buildup": "Gesamt Buildup",
|
||||
"total_buildup_label": "Gesamt Buildup-Etikett",
|
||||
"total_buildup_value_label": "Gesamt Buildup-Wert-Etikett",
|
||||
"total_cart_count_label": "Gesamtanzahl Karren-Etikett",
|
||||
"total_damage": "Gesamtschaden",
|
||||
"total_damage_label": "Gesamtschaden-Etikett",
|
||||
"total_damage_location": "Ort für Gesamtschadensleiste",
|
||||
"total_damage_offset_is_relative": "Gesamtschaden Offset ist relativ",
|
||||
"total_damage_value_label": "Gesamtschadenswert-Etikett",
|
||||
"total_dps": "Gesamte DPS",
|
||||
"total_dps_label": "Gesamte DPS-Etikett",
|
||||
"tracked_damage_types": "Verfolgte Schadensarten",
|
||||
"tracked_monster_types": "Verfolgte Monsterarten",
|
||||
"type": "Typ",
|
||||
"update_buffs_delay": "Buffs abfragen (in Sek.)",
|
||||
"update_is_online_delay": "Onlinecheck abfragen (in Sek.)",
|
||||
"update_myself_position_delay": "Eigene Position abfragen (in Sek.)",
|
||||
"update_player_info_delay": "Spielerinfo abfragen (in Sek.)",
|
||||
"update_players_delay": "Spieler abfragen (in Sek.)",
|
||||
"update_quest_time_delay": "Questzeit abfragen (in Sek.)",
|
||||
"update_singletons_delay": "Singletons abfragen (in Sek.)",
|
||||
"update_window_size_delay": "Fenstergröße abfragen (in Sek.)",
|
||||
"use_d2d_if_available": "Direct2D nutzen wenn vorhanden",
|
||||
"value": "Wert",
|
||||
"value_label": "Wert-Etikett",
|
||||
"vertical": "Vertikal",
|
||||
"viewport_offset": "Viewport Offset",
|
||||
"visible": "Sichtbar",
|
||||
"water_resistance_label": "Wasserwiderstand-Etikett",
|
||||
"weapon_skills": "Waffen-Fähigkeiten",
|
||||
"width": "Breite",
|
||||
"world_offset": "Welt Offset",
|
||||
"wyvern_riding": "Wyvern-Reiten",
|
||||
"x": "X",
|
||||
"y": "Y",
|
||||
"z": "Z"
|
||||
},
|
||||
"dango_skills": {
|
||||
"dango_adrenaline": "Dango-Adrenalin",
|
||||
"dango_booster": "Dango-Verstärker",
|
||||
"dango_bulker": "Dango-Kraftprotz",
|
||||
"dango_connector": "Dango-Verbinder",
|
||||
"dango_defender": "Dango-Verteidiger",
|
||||
"dango_flyer": "Dango-Jongleur",
|
||||
"dango_glutton": "Dango-Nimmersatt",
|
||||
"dango_hunter": "Dango-Jäger",
|
||||
"dango_insurance": "Dango-Sicherer",
|
||||
"dango_insurance_defense_up": "Dango-Sicherer Verteidigung +",
|
||||
"super_recovery_dango": "Super-Erholungs-Dango"
|
||||
},
|
||||
"endemic_life": {
|
||||
"butterflame": "Flämmling",
|
||||
"clothfly": "Tuchfalter",
|
||||
"cutterfly": "Schnibelle",
|
||||
"gold_wirebug": "Goldseilkäfer",
|
||||
"peepersects": "Späherlinge",
|
||||
"red_lampsquid": "Rotlichtkalmar",
|
||||
"ruby_wirebug": "Rubinseilkäfer",
|
||||
"stinkmink": "Miefnerz",
|
||||
"yellow_lampsquid": "Gelblichtkalmar"
|
||||
},
|
||||
"font_name": "NotoSans-Bold.otf",
|
||||
"item_buffs": {
|
||||
"adamant_seed": "Diamantsamen",
|
||||
"armor_ammo": "Rüstung (Munition)",
|
||||
"armorskin": "Panzerhaut",
|
||||
"dash_juice": "Sprintsaft",
|
||||
"demon_ammo": "Dämon (Munition)",
|
||||
"demon_powder": "Dämonenpulver",
|
||||
"demondrug": "Dämonenmittel",
|
||||
"gourmet_fish": "Gourmet-Fisch",
|
||||
"hardshell_powder": "Harthülsenpulver",
|
||||
"immunizer": "Immunisierer",
|
||||
"mega_armorskin": "Mega-Panzerhaut",
|
||||
"mega_demondrug": "Mega-Dämonenmittel",
|
||||
"might_seed": "Machtsamen"
|
||||
},
|
||||
"melody_effects": {
|
||||
"affinity_up": "Affinität +",
|
||||
"attack_and_affinity_up": "Angriff & Affinität +",
|
||||
"attack_and_defense_up": "Angriff & Verteidigung +",
|
||||
"attack_up": "Angriff +",
|
||||
"blight_negated": "Pest negiert",
|
||||
"defense_up": "Verteidigung +",
|
||||
"divine_protection": "Göttlicher Schutz",
|
||||
"earplugs_l": "Ohrstöpsel II",
|
||||
"earplugs_s": "Ohrstöpsel I",
|
||||
"elemental_attack_boost": "Elementangriff-Boost",
|
||||
"environment_damage_negated": "Umgebungsschaden negiert",
|
||||
"health_recovery_l": "Gesundheitserholung (L)",
|
||||
"health_recovery_s": "Gesundheitserholung (S)",
|
||||
"health_recovery_s_antidote": "Gesundheitserholung (S) + Gegengift",
|
||||
"health_regeneration": "Gesundheitsregeneration",
|
||||
"infernal_melody": "Höllenmelodie",
|
||||
"knockbacks_negated": "Rückschläge negiert",
|
||||
"self_improvement": "Selbstverbesserung",
|
||||
"sharpness_extension": "Schärfeverlängerung",
|
||||
"sharpness_loss_reduced": "Schärfeverlust reduziert",
|
||||
"sharpness_regeneration": "Schärferegeneration",
|
||||
"sonic_barrier": "Schallbarriere",
|
||||
"sonic_wave": "Schallwelle",
|
||||
"stamina_recovery_up": "Ausdauer-Erholung +",
|
||||
"stamina_use_reduced": "Ausdauernutzung -",
|
||||
"stun_negated": "Betäuben negiert",
|
||||
"tremors_negated": "Erschütterungen negiert",
|
||||
"wind_pressure_negated": "Winddruck negiert"
|
||||
},
|
||||
"misc_buffs": {
|
||||
"attack_up": "Angriff +",
|
||||
"defense_up": "Verteidigung +",
|
||||
"immunity": "Immunität",
|
||||
"natural_healing_up": "Natürliche Heilung +",
|
||||
"stamina_use_down": "Ausdauernutzung -"
|
||||
},
|
||||
"otomo_moves": {
|
||||
"go_fight_win": "Jubeltanz",
|
||||
"power_drum": "Krafttrommel",
|
||||
"rousing_roar": "Stärkungsbrüllen",
|
||||
"vase_of_vitality": "Vase der Vitalität"
|
||||
},
|
||||
"parts": {
|
||||
"abdomen": "Abdomen",
|
||||
"amatsu_unknown": "?",
|
||||
"antenna": "Fühler",
|
||||
"arms": "Arme",
|
||||
"arms_mud": "Arme (Schlamm)",
|
||||
"back": "Rücken",
|
||||
"back_windsac": "Rücken (Windsack)",
|
||||
"body": "Körper",
|
||||
"body_mud": "Körper (Schlamm)",
|
||||
"carapace": "Platte",
|
||||
"chest": "Brust",
|
||||
"chest_windsac": "Brust (Windsack)",
|
||||
"claw": "Klaue",
|
||||
"crest": "Kamm",
|
||||
"dorsal_fin": "Rückenflosse",
|
||||
"foreleg": "Vorderbein",
|
||||
"forelegs": "Vorderbeine",
|
||||
"head": "Kopf",
|
||||
"head_mud": "Kopf (Schlamm)",
|
||||
"hind_leg": "Hinterbein",
|
||||
"hind_legs": "Hinterbeine",
|
||||
"large_mudbulb": "Große Schlammknolle",
|
||||
"left_arm": "Arm L",
|
||||
"left_arm_ice": "Arm L (Eis)",
|
||||
"left_claw": "Klaue L",
|
||||
"left_cutwing": "Schnittflügel L",
|
||||
"left_foreleg": "Vorderbein L",
|
||||
"left_hind_leg": "Hinterbein L",
|
||||
"left_leg": "Bein L",
|
||||
"left_leg_mud": "Bein L (Schlamm)",
|
||||
"left_legs": "Beine L",
|
||||
"left_wing": "Flügel L",
|
||||
"left_wingclaw": "Flügelklaue L",
|
||||
"legs": "Beine",
|
||||
"lower_back": "Unterer Rücken",
|
||||
"lower_body": "Unterkörper",
|
||||
"mane": "Mähne",
|
||||
"mudbulb": "Schlammknolle",
|
||||
"neck": "Hals",
|
||||
"rear": "Hintern",
|
||||
"right_arm": "Arm R",
|
||||
"right_arm_ice": "Arm R (Eis)",
|
||||
"right_claw": "Klaue R",
|
||||
"right_cutwing": "Schnittflügel R",
|
||||
"right_foreleg": "Vorderbein R",
|
||||
"right_hind_leg": "Hinterbein R",
|
||||
"right_leg": "Bein R",
|
||||
"right_leg_mud": "Bein R (Schlamm)",
|
||||
"right_legs": "Beine R",
|
||||
"right_wing": "Flügel R",
|
||||
"right_wingclaw": "Flügelklaue R",
|
||||
"rock": "Fels",
|
||||
"shell": "Panzer",
|
||||
"spinning": "Spinning",
|
||||
"tail": "Schwanz",
|
||||
"tail_mud": "Schwanz (Schlamm)",
|
||||
"tail_tip": "Schwanzspitze",
|
||||
"tail_windsac": "Schwanz (Windsack)",
|
||||
"thundersacs": "Funkensack",
|
||||
"torso": "Torso",
|
||||
"torso_mud": "Torso (Schlamm)",
|
||||
"unknown": "?",
|
||||
"upper_back": "Oberer Rücken",
|
||||
"upper_body": "Oberkörper",
|
||||
"wingclaw": "Flügelklaue",
|
||||
"wingclaws": "Flügelklauen",
|
||||
"wings": "Flügel"
|
||||
},
|
||||
"rampage_skills": {
|
||||
"chameleos_soul": "Chameleos-Seele",
|
||||
"kushala_daora_soul": "Kushala-Daora-Seele"
|
||||
},
|
||||
"skills": {
|
||||
"adrenaline_rush": "Adrenalinschub",
|
||||
"affinity_sliding": "Affinitätsschlittern",
|
||||
"agitator": "Aufhetzer",
|
||||
"berserk": "Berserker",
|
||||
"bladescale_hone": "KlingenschVerbess",
|
||||
"blood_awakening": "Bluterwachen",
|
||||
"bloodlust": "Blutdurst",
|
||||
"burst": "Salve",
|
||||
"coalescence": "Verschmelzung",
|
||||
"counterstrike": "Gegenschlag",
|
||||
"dereliction": "Verwahrlosung",
|
||||
"dragon_conversion_elemental_attack_up": "Drachenumwandlung: Elem. Ang +",
|
||||
"dragon_conversion_elemental_res_up": "Drachenumwandlung: Elem. Wdr +",
|
||||
"dragonheart": "Drachenherz",
|
||||
"embolden": "Ermutigen",
|
||||
"frenzied_bloodlust": "Raserei-Blutdurst",
|
||||
"furious": "Zorniger",
|
||||
"grinder_s": "Schleifer (S)",
|
||||
"heaven_sent": "Wie gerufen",
|
||||
"hellfire_cloak": "Höllenfeuer-Umhang",
|
||||
"heroics": "Heldentat",
|
||||
"inspiration": "Inspiration",
|
||||
"intrepid_heart": "Furchtloses Herz",
|
||||
"latent_power": "Latente Kraft",
|
||||
"maximum_might": "Höchstmacht",
|
||||
"offensive_guard": "Offensive Abwehr",
|
||||
"partbreaker": "Teilezerstörer",
|
||||
"peak_performance": "Höchstleistung",
|
||||
"powder_mantle_blue": "Pulver-Mantel (Blau)",
|
||||
"powder_mantle_red": "Pulver-Mantel (Rot)",
|
||||
"protective_polish": "Schutzpolitur",
|
||||
"resentment": "Groll",
|
||||
"resuscitate": "Wiederbelebung",
|
||||
"spiribirds_call": "Irrlitzruf",
|
||||
"status_trigger": "Statusauslöser",
|
||||
"strife": "Kampf",
|
||||
"wall_runner": "Wandläufer",
|
||||
"wind_mantle": "Wind-Mantel"
|
||||
},
|
||||
"stats": {
|
||||
"affinity": "Affinität",
|
||||
"attack": "Angriff",
|
||||
"defense": "Verteidigung",
|
||||
"dragon": "Drache",
|
||||
"dragon_resistance": "Drachenwdrstd",
|
||||
"fire": "Feuer",
|
||||
"fire_resistance": "Feuerwdrstd",
|
||||
"ice": "Eis",
|
||||
"ice_resistance": "EIswdrstd",
|
||||
"stamina": "Ausdauer",
|
||||
"thunder": "Donner",
|
||||
"thunder_resistance": "Donnerwdrstd",
|
||||
"water": "Wasser",
|
||||
"water_resistance": "Wasserwdrstd"
|
||||
},
|
||||
"unicode_glyph_ranges": [
|
||||
32,
|
||||
255,
|
||||
256,
|
||||
591,
|
||||
1024,
|
||||
1327,
|
||||
7680,
|
||||
7935,
|
||||
8192,
|
||||
8303,
|
||||
65280,
|
||||
65519,
|
||||
0
|
||||
],
|
||||
"weapon_skills": {
|
||||
"bow": {
|
||||
"arc_shot_affinity": "Bogenschuss: Affinität",
|
||||
"arc_shot_brace": "Bogenschuss: Festhalten",
|
||||
"bolt_boost": "Bolzen-Booster",
|
||||
"herculean_draw": "Herkulisches Ziehen"
|
||||
},
|
||||
"charge_blade": {
|
||||
"element_boost": "Elementbonus",
|
||||
"sword_boost_mode": "Schwertmodus Verstärkt"
|
||||
},
|
||||
"dual_blades": {
|
||||
"archdemon_mode": "Erzdämonenmodus",
|
||||
"ironshine_silk": "Eisenschimmer-Seide"
|
||||
},
|
||||
"great_sword": {
|
||||
"power_sheathe": "Kraft-Wegstecken"
|
||||
},
|
||||
"gunlance": {
|
||||
"erupting_cannon": "Eruptionskanone",
|
||||
"ground_splitter": "Bodenteiler"
|
||||
},
|
||||
"hammer": {
|
||||
"impact_burst": "Einschlagsexplosion"
|
||||
},
|
||||
"heavy_bowgun": {
|
||||
"counter_charger": "Konter-Aufladen",
|
||||
"overheat": "Überhitzt",
|
||||
"rising_moon": "Aufgehender Mond",
|
||||
"setting_sun": "Untergehende Sonne",
|
||||
"wyvernsnipe_reload": "Wyvernauge-Nachladen"
|
||||
},
|
||||
"hunting_horn": {
|
||||
"bead_of_resonance": "Perle der Resonanz",
|
||||
"silkbind_shockwave": "Seidenbinder-Schockwelle",
|
||||
"sonic_bloom": "Schallblüte"
|
||||
},
|
||||
"insect_glaive": {
|
||||
"all_extracts_mix": "Alle Extrakte",
|
||||
"orange_extract": "Orangenes Extrakt",
|
||||
"red_extract": "Rotes Extrakt",
|
||||
"white_extract": "Weißes Extrakt"
|
||||
},
|
||||
"lance": {
|
||||
"anchor_rage": "Ankerwut",
|
||||
"spiral_thrust": "Spiralstoß",
|
||||
"twin_wine": "Zwillingsranke"
|
||||
},
|
||||
"light_bowgun": {
|
||||
"fanning_maneuver": "Fächermanöver",
|
||||
"wyvernblast_reload": "Wyvernexplosion-Nachladen"
|
||||
},
|
||||
"long_sword": {
|
||||
"harvest_moon": "Erntemond",
|
||||
"iai_slash": "Iai-Hieb",
|
||||
"soaring_kick": "Himmelhoher Tritt",
|
||||
"spirit_gauge": "Elanbalken",
|
||||
"spirit_gauge_autofill": "Elanbalken-Autoladung"
|
||||
},
|
||||
"switch_axe": {
|
||||
"amped_state": "Verstärkter Zustand",
|
||||
"axe_heavy_slam": "Axt: Schwerer Niederschlag",
|
||||
"switch_charger": "Morph-Lader"
|
||||
},
|
||||
"sword_and_shield": {
|
||||
"destroyer_oil": "Zerstöreröl"
|
||||
}
|
||||
},
|
||||
"weapons": {
|
||||
"bow": "Bogen",
|
||||
"charge_blade": "Energieklinge",
|
||||
"dual_blades": "Doppelklingen",
|
||||
"great_sword": "Großschwert",
|
||||
"gunlance": "Gewehrlanze",
|
||||
"hammer": "Hammer",
|
||||
"heavy_bowgun": "Schw. Bogengewehr",
|
||||
"hunting_horn": "Jagdhorn",
|
||||
"insect_glaive": "Insektenglefe ",
|
||||
"lance": "Lanze",
|
||||
"light_bowgun": "Lcht. Bogengewehr",
|
||||
"long_sword": "Langschwert",
|
||||
"switch_axe": "Morph-Axt",
|
||||
"sword_and_shield": "Schwert & Schild"
|
||||
}
|
||||
}
|
||||
@@ -3,11 +3,15 @@
|
||||
"HP": "HP:",
|
||||
"buildup": "Buildup:",
|
||||
"gold": "Gold",
|
||||
"lv": "",
|
||||
"mini": "Mini",
|
||||
"otomo": "Buddy",
|
||||
"part_anomaly_core": "Anomaly Core",
|
||||
"part_break": "Break",
|
||||
"part_sever": "Sever",
|
||||
"player": "Player",
|
||||
"rage": "Rage:",
|
||||
"servant": "Follower",
|
||||
"silver": "Silver",
|
||||
"stamina": "Stamina:",
|
||||
"total_buildup": "Total Buildup",
|
||||
@@ -15,30 +19,54 @@
|
||||
},
|
||||
"ailments": {
|
||||
"blast": "Blast",
|
||||
"blastblight": "Blastblight",
|
||||
"bleeding": "Bleeding",
|
||||
"bloodblight": "Bloodblight",
|
||||
"deadly_poison": "Deadly Poison",
|
||||
"defense_down": "Defense Down",
|
||||
"dragonblight": "Dragonblight",
|
||||
"dung_bomb": "Dung Bomb",
|
||||
"engulfed": "Engulfed",
|
||||
"exhaust": "Exhaust",
|
||||
"fall_otomo_trap": "Fall Buddy Trap",
|
||||
"fall_trap": "Fall Trap",
|
||||
"falling_asleep": "Falling Asleep",
|
||||
"fireblight": "Fireblight",
|
||||
"flash": "Flash",
|
||||
"frenzy": "Frenzy",
|
||||
"frenzy_infection": "Frenzy Infection",
|
||||
"frenzy_overcome": "Frenzy Overcome",
|
||||
"frostblight": "Frostblight",
|
||||
"hellfireblight": "Hellfireblight",
|
||||
"iceblight": "Iceblight",
|
||||
"leeched": "Leeched",
|
||||
"major_bubbleblight": "Major Bubbleblight",
|
||||
"minor_bubbleblight": "Minor Bubbleblight",
|
||||
"muck": "Muck",
|
||||
"paralysis": "Paralysis",
|
||||
"poison": "Poison",
|
||||
"quick_sand": "Quick Sand",
|
||||
"resistance_down": "Resistance Down",
|
||||
"ride": "Wyvern Riding",
|
||||
"roar": "Roar",
|
||||
"shock_otomo_trap": "Shock Buddy Trap",
|
||||
"shock_trap": "Shock Trap",
|
||||
"sleep": "Sleep",
|
||||
"steel_fang": "Steel Fang",
|
||||
"stench": "Stench",
|
||||
"stun": "Stun",
|
||||
"thunderblight": "Thunderblight",
|
||||
"tranq_bomb": "Tranq Bomb",
|
||||
"waterblight": "Waterblight"
|
||||
"tremor": "Tremor",
|
||||
"waterblight": "Waterblight",
|
||||
"webbed": "Webbed"
|
||||
},
|
||||
"customization_menu": {
|
||||
"UI_font": "UI Font",
|
||||
"UI_font_notice": "Any changes to the font require script reload!",
|
||||
"abnormal_statuses": "Abnormal Statuses",
|
||||
"activation_count": "Activation Count",
|
||||
"affinity_label": "Affinity Label",
|
||||
"ailment_buildups": "Ailment Buildups",
|
||||
"ailment_name": "Ailment Name",
|
||||
"ailment_name_label": "Ailment Name Label",
|
||||
@@ -46,23 +74,32 @@
|
||||
"ailments": "Ailments",
|
||||
"all_UI": "All UI",
|
||||
"anchor": "Anchor",
|
||||
"anomaly_cores": "Anomaly Cores",
|
||||
"anomaly_filter": "Anomaly Core",
|
||||
"anomaly_health": "Anomaly Core Health",
|
||||
"anomaly_health_percentage": "Anomaly Core Health Percentage",
|
||||
"apply": "Apply",
|
||||
"assign_new_key": "Assign new key",
|
||||
"attack_label": "Attack Label",
|
||||
"auto_highlight": "Auto-highlight",
|
||||
"background": "Background",
|
||||
"bar": "Bar",
|
||||
"blast_damage": "Blast Damage",
|
||||
"blast": "Blast",
|
||||
"body_parts": "Body Parts",
|
||||
"bold": "Bold",
|
||||
"bomb_damage": "Bomb Damage",
|
||||
"bombs": "Bombs",
|
||||
"bottom_left": "Bottom-Left",
|
||||
"bottom_right": "Bottom-Right",
|
||||
"bottom_to_top": "Bottom to Top",
|
||||
"break_anomaly_filter": "Break + Anomaly Core",
|
||||
"break_count": "Break Count",
|
||||
"break_filter": "Break",
|
||||
"break_health": "Break Health",
|
||||
"break_health_percentage": "Break Health Percentage",
|
||||
"break_max_count": "Break Max Count",
|
||||
"break_severe_filter": "Break + Severe",
|
||||
"break_sever_anomaly_filter": "Break + Sever + Anomaly Core",
|
||||
"break_sever_filter": "Break + Sever",
|
||||
"buff_UI": "Buff UI",
|
||||
"buildup": "Buildup",
|
||||
"buildup_bar": "Buildup Bar",
|
||||
"buildup_bars_are_relative_to": "Buildup Bars are relative to",
|
||||
@@ -76,48 +113,75 @@
|
||||
"closest": "Closest",
|
||||
"color": "Color",
|
||||
"colors": "Colors",
|
||||
"config": "Config",
|
||||
"creature_name_label": "Creature Name Label",
|
||||
"crown": "Crown",
|
||||
"crown_thresholds": "Crown Thresholds",
|
||||
"current_state": "Current State",
|
||||
"current_time": "Current Time",
|
||||
"current_value": "Current Value",
|
||||
"cutscene": "Cutscene",
|
||||
"damage": "Damage",
|
||||
"damage_bar": "Damage Bar",
|
||||
"damage_bars_are_relative_to": "Damage Bars are relative to",
|
||||
"damage_meter_UI": "Damage Meter UI",
|
||||
"damage_percentage_label": "Damage Percentage Label",
|
||||
"damage_value_label": "Damage Value Label",
|
||||
"dango_skills": "Dango Skills",
|
||||
"debug": "Debug",
|
||||
"default_state": "Default State",
|
||||
"defense_label": "Defense Label",
|
||||
"delete": "Delete",
|
||||
"distance": "Distance",
|
||||
"dps": "DPS",
|
||||
"dps_label": "DPS Label",
|
||||
"dps_mode": "DPS Mode",
|
||||
"during_quest": "During Quest",
|
||||
"dragon_resistance_label": "Dragon Resistance Label",
|
||||
"duplicate": "Duplicate",
|
||||
"duration": "Duration",
|
||||
"dynamic_positioning": "Dynamic Positioning",
|
||||
"dynamically_positioned": "Dynamically Positioned",
|
||||
"effect_level": "Effect Level",
|
||||
"element_2_label": "Element 2 Label",
|
||||
"element_label": "Element Label",
|
||||
"enable_for": "Enable for",
|
||||
"enabled": "Enabled",
|
||||
"endemic_life": "Endemic Life",
|
||||
"endemic_life_UI": "Endemic Life UI",
|
||||
"endemic_life_damage": "Endemic Life Damage",
|
||||
"endemic_life_buffs": "Endemic Life Buffs",
|
||||
"everything_seems_to_be_ok": "Everything seems to be OK!",
|
||||
"family": "Family",
|
||||
"farthest": "Farthest",
|
||||
"fight_time": "Fight Time",
|
||||
"fill_direction": "Fill Direction",
|
||||
"filter": "Filter",
|
||||
"filter_mode": "Filter Mode",
|
||||
"fire_resistance_label": "Fire Resistance Label",
|
||||
"first": "First",
|
||||
"first_hit": "First Hit",
|
||||
"flinch_count": "Flinch Count",
|
||||
"foreground": "Foreground",
|
||||
"freeze_dps_on_quest_clear": "Freeze DPS when Quest is cleared",
|
||||
"freeze_dps_on_quest_end": "Freeze DPS on Quest End",
|
||||
"global_position_modifier": "Global Position Modifier",
|
||||
"global_scale_modifier": "Global Scale Modifier",
|
||||
"global_settings": "Global Settings",
|
||||
"head_tracking": "Head Tracking",
|
||||
"health": "Health",
|
||||
"health_anomaly_filter": "Health + Anomaly Core",
|
||||
"health_break_anomaly_filter": "Health + Break + Anomaly Core",
|
||||
"health_break_filter": "Health + Break",
|
||||
"health_break_severe_filter": "Health + Break + Severe",
|
||||
"health_break_sever_anomaly_filter": "Health + Break + Sever + Anomaly Core",
|
||||
"health_break_sever_filter": "Health + Break + Sever",
|
||||
"health_filter": "Health",
|
||||
"health_label": "Health Label",
|
||||
"health_percentage": "Health Percentage",
|
||||
"health_severe_filter": "Health + Severe",
|
||||
"health_sever_anomaly_filter": "Health + Sever + Anomaly Core",
|
||||
"health_sever_filter": "Health + Sever",
|
||||
"height": "Height",
|
||||
"hide_ailments_with_zero_buildup": "Hide Ailments when Buildup is 0",
|
||||
"hide_all_active_ailments": "Hide All Active Ailments",
|
||||
"hide_all_inactive_ailments": "Hide All Inactive Ailments",
|
||||
"hide_bar_for_infinite_buffs": "Hide Bar for infinite Buffs",
|
||||
"hide_dead_or_captured": "Hide Dead or Captured",
|
||||
"hide_disabled_ailments": "Hide Disabled Ailments by Game",
|
||||
"hide_inactive_ailments_with_no_buildup_support": "Hide Inactive Ailments with no Buildup Support",
|
||||
@@ -126,25 +190,37 @@
|
||||
"hide_myself": "Hide Myself",
|
||||
"hide_other_players": "Hide Other Players",
|
||||
"hide_player_if_player_damage_is_zero": "Hide Player if Player Damage is 0",
|
||||
"hide_servants": "Hide Followers",
|
||||
"hide_timer_for_infinite_buffs": "Hide Timer for infinite Buffs",
|
||||
"hide_total_damage": "Hide Total Damage",
|
||||
"hide_total_if_total_damage_is_zero": "Hide Total if Total Damage is 0",
|
||||
"hide_undamaged_parts": "Hide Undamaged Parts",
|
||||
"highest_health": "Highest Health",
|
||||
"highest_health_percentage": "Highest Health Percentage",
|
||||
"highlighted": "Highlighted (targeted)",
|
||||
"highlighted": "Highlighted",
|
||||
"highlighted_bar": "Highlighted Bar",
|
||||
"highlighted_buildup_bar": "Highlighted Buildup Bar",
|
||||
"highlighted_damage_bar": "Highlighted Damage Bar",
|
||||
"highlighted_targeted": "Highlighted (targeted)",
|
||||
"history": "History",
|
||||
"history_size": "History Size",
|
||||
"horizontal": "Horizontal",
|
||||
"hotkeys": "Hotkeys",
|
||||
"hunter_rank": "Hunter Rank",
|
||||
"hunter_rank_label": "Hunter Rank Label",
|
||||
"ice_resistance_label": "Ice Resistance Label",
|
||||
"id": "ID",
|
||||
"in_lobby": "In Lobby",
|
||||
"in_training_area": "In Training Area",
|
||||
"include": "Include",
|
||||
"infinite_buffs_location": "Infinite Buffs Location",
|
||||
"inside": "Inside",
|
||||
"installation_damage": "Installation Damage",
|
||||
"installations": "Installations",
|
||||
"italic": "Italic",
|
||||
"item_buffs": "Item Buffs",
|
||||
"join_time": "Join Time",
|
||||
"kunai_damage": "Kunai Damage",
|
||||
"killcam": "Killcam",
|
||||
"kunai": "Kunai",
|
||||
"language": "Language",
|
||||
"large_monster_UI": "Large Monster UI",
|
||||
"large_monster_dynamic_UI": "Large Monster Dynamic UI",
|
||||
@@ -152,6 +228,10 @@
|
||||
"large_monster_static_UI": "Large Monster Static UI",
|
||||
"large_monsters": "Large Monsters",
|
||||
"last": "Last",
|
||||
"left_to_right": "Left to Right",
|
||||
"level": "Level",
|
||||
"level_label": "Level Label",
|
||||
"loading_quest": "Loading Quest",
|
||||
"loss_health": "Sever Health",
|
||||
"loss_health_percentage": "Sever Health Percentage",
|
||||
"lowest_health": "Lowest Health",
|
||||
@@ -159,29 +239,39 @@
|
||||
"master_rank": "Master Rank",
|
||||
"max_distance": "Max Distance",
|
||||
"max_monster_updates_per_tick": "Max Monster Updates per Tick",
|
||||
"max_value": "Max Value",
|
||||
"me": "Me",
|
||||
"melody_effects": "Melody Effects",
|
||||
"menu_font": "Menu Font",
|
||||
"menu_font_change_disclaimer": "Changing Language and Menu Font Size several times will cause a crash!",
|
||||
"misc_buffs": "Misc Buffs",
|
||||
"mod_name": "MHR Overlay",
|
||||
"mode": "Mode",
|
||||
"modifiers": "Modifiers",
|
||||
"module_visibility_on_different_screens": "Module Visibility on Different Screens",
|
||||
"module_visibility_based_on_game_state": "Module Visibility based on Game State",
|
||||
"modules": "Modules",
|
||||
"monster_can_be_captured": "Monster can be captured",
|
||||
"monster_damage": "Monster Damage",
|
||||
"monster_id": "Monster ID",
|
||||
"monster_name": "Monster Name",
|
||||
"monster_name_label": "Monster Name Label",
|
||||
"monsters": "Monsters",
|
||||
"my_damage_bar_location": "My Damage Bar Location",
|
||||
"my_otomos": "My Buddies",
|
||||
"myself": "Myself",
|
||||
"name": "Name",
|
||||
"name_label": "Name Label",
|
||||
"new": "New",
|
||||
"none": "None",
|
||||
"normal": "Normal",
|
||||
"offset": "Offset",
|
||||
"offset_is_relative_to_parts": "Offset is Relative to Parts",
|
||||
"opacity_falloff": "Opacity Falloff",
|
||||
"orientation": "Orientation",
|
||||
"other_damage": "Other Damage",
|
||||
"other": "Other",
|
||||
"other_player_otomos": "Other Player Buddies",
|
||||
"other_players": "Other Players",
|
||||
"otomo_damage": "Buddy Damage",
|
||||
"otomo_moves": "Buddy Moves",
|
||||
"otomos": "Buddies",
|
||||
"outline": "Outline",
|
||||
"outside": "Outside",
|
||||
"part_health": "Part Health",
|
||||
@@ -189,79 +279,199 @@
|
||||
"part_name_label": "Part Name Label",
|
||||
"percentage_label": "Percentage Label",
|
||||
"performance": "Performance",
|
||||
"player_damage": "Player Damage",
|
||||
"player_id": "Player ID",
|
||||
"player_name": "Player Name",
|
||||
"player_name_label": "Player Name Label",
|
||||
"player_name_size_limit": "Player Name Size Limit",
|
||||
"player_spacing": "Player Spacing",
|
||||
"poison_damage": "Poison Damage",
|
||||
"players": "Players",
|
||||
"playing_quest": "Playing Quest",
|
||||
"poison": "Poison",
|
||||
"position": "Position",
|
||||
"press_any_key": "Press any key...",
|
||||
"prioritize_large_monsters": "Large Monsters on High Priority",
|
||||
"quest_result_screen": "Quest Result Screen",
|
||||
"quest_end_animation": "Quest End Animation",
|
||||
"quest_end_screen": "Quest End Screen",
|
||||
"quest_end_timer": "Quest End Timer",
|
||||
"quest_start_animation": "Quest Start Animation",
|
||||
"quest_time": "Quest Time",
|
||||
"rage": "Rage",
|
||||
"rampage_skills": "Rampage Skills",
|
||||
"reframework_outdated": "Installed REFramework version is outdated. Please, update. Otherwise, MHR Overlay won't work correctly.",
|
||||
"relative_offset": "Relative Offset",
|
||||
"rename": "Rename",
|
||||
"render_highlighted_monster": "Render Highlighted Monster",
|
||||
"render_inactive_anomaly_cores": "Render Inactive Anomaly Cores",
|
||||
"render_not_highlighted_monsters": "Render Not Highlighted Monsters",
|
||||
"renderer": "Renderer",
|
||||
"reset": "Reset",
|
||||
"reversed_order": "Reversed Order",
|
||||
"reward_screen": "Reward Screen",
|
||||
"right_alignment_shift": "Right Alignment Shift",
|
||||
"right_to_left": "Right to Left",
|
||||
"servant_otomos": "Servant Buddies",
|
||||
"servants": "Followers",
|
||||
"settings": "Settings",
|
||||
"severe_filter": "Severe",
|
||||
"sever_anomaly_filter": "Sever + Anomaly Core",
|
||||
"sever_filter": "Sever",
|
||||
"shadow": "Shadow",
|
||||
"show_my_otomos_separately": "Show My Buddies separately",
|
||||
"show_other_player_otomos_separately": "Show Other Player Buddies separately",
|
||||
"show_servant_otomos_separately": "Show Follower Buddies separately",
|
||||
"size": "Size",
|
||||
"skills": "Skills",
|
||||
"small_monster_UI": "Small Monster UI",
|
||||
"small_monsters": "Small Monsters",
|
||||
"sorting": "Sorting",
|
||||
"spacing": "Spacing",
|
||||
"stamina": "Stamina",
|
||||
"stamina_label": "Stamina Label",
|
||||
"static_orientation": "Static Orientation",
|
||||
"static_position": "Static Position",
|
||||
"static_sorting": "Static Sorting",
|
||||
"static_spacing": "Static Spacing",
|
||||
"statically_positioned": "Statically Positioned",
|
||||
"stats_UI": "Stats UI",
|
||||
"status": "Status",
|
||||
"style": "Style",
|
||||
"summary_screen": "Summary Screen",
|
||||
"text_label": "Text Label",
|
||||
"thickness": "Thickness",
|
||||
"thunder_resistance_label": "Thunder Resistance Label",
|
||||
"time_UI": "Time UI",
|
||||
"time_label": "Time Label",
|
||||
"time_limit": "Time Limit (seconds)",
|
||||
"timer": "Timer",
|
||||
"timer_delays": "Timer Delays",
|
||||
"timer_label": "Timer Label",
|
||||
"top_buildup": "Top Buildup",
|
||||
"top_damage": "Top Damage",
|
||||
"top_dps": "Top DPS",
|
||||
"top_left": "Top-Left",
|
||||
"top_right": "Top-Right",
|
||||
"top_to_bottom": "Top to Bottom",
|
||||
"total": "Total",
|
||||
"total_buildup": "Total Buildup",
|
||||
"total_buildup_label": "Total Buildup Label",
|
||||
"total_buildup_value_label": "Total Buildup Value Label",
|
||||
"total_cart_count_label": "Total Cart Count Label",
|
||||
"total_damage": "Total Damage",
|
||||
"total_damage_label": "Total Damage Label",
|
||||
"total_damage_location": "Total Damage Bar Location",
|
||||
"total_damage_offset_is_relative": "Total Damage Offset is Relative",
|
||||
"total_damage_value_label": "Total Damage Value Label",
|
||||
"total_dps": "Total DPS",
|
||||
"total_dps_label": "Total DPS Label",
|
||||
"tracked_damage_types": "Tracked Damage Types",
|
||||
"tracked_monster_types": "Tracked Monster Types",
|
||||
"training_area": "Training Area",
|
||||
"type": "Type",
|
||||
"update_buffs_delay": "Update Buffs (seconds)",
|
||||
"update_is_online_delay": "Update Is Online (seconds)",
|
||||
"update_myself_position_delay": "Update Myself Position (seconds)",
|
||||
"update_player_info_delay": "Update Player Info (seconds)",
|
||||
"update_players_delay": "Update Players (seconds)",
|
||||
"update_quest_time_delay": "Update Quest Time (seconds)",
|
||||
"update_singletons_delay": "Update Singletons (seconds)",
|
||||
"update_window_size_delay": "Update Window Size (seconds)",
|
||||
"use_d2d_if_available": "Use Direct2D if available",
|
||||
"value": "Value",
|
||||
"value_label": "Value Label",
|
||||
"vertical": "Vertical",
|
||||
"viewport_offset": "Viewport Offset",
|
||||
"visible": "Visible",
|
||||
"water_resistance_label": "Water Resistance Label",
|
||||
"weapon_skills": "Weapon Skills",
|
||||
"width": "Width",
|
||||
"word_player": "Word \"Player\"",
|
||||
"world_offset": "World Offset",
|
||||
"wyvern_riding_damage": "Wyvern Riding Damage",
|
||||
"wyvern_riding": "Wyvern Riding",
|
||||
"x": "X",
|
||||
"y": "Y",
|
||||
"z": "Z"
|
||||
},
|
||||
"font_name": "NotoSansKR-Bold.otf",
|
||||
"dango_skills": {
|
||||
"dango_adrenaline": "Dango Adrenaline",
|
||||
"dango_booster": "Dango Booster",
|
||||
"dango_bulker": "Dango Bulker",
|
||||
"dango_connector": "Dango Connector",
|
||||
"dango_defender": "Dango Defender",
|
||||
"dango_flyer": "Dango Flyer",
|
||||
"dango_glutton": "Dango Glutton",
|
||||
"dango_hunter": "Dango Hunter",
|
||||
"dango_insurance": "Dango Insurance",
|
||||
"dango_insurance_defense_up": "Dango Insurance Defense Up",
|
||||
"super_recovery_dango": "Super Recovery Dango"
|
||||
},
|
||||
"endemic_life": {
|
||||
"butterflame": "Butterflame",
|
||||
"clothfly": "Clothfly",
|
||||
"cutterfly": "Cutterfly",
|
||||
"gold_wirebug": "Gold Wirebug",
|
||||
"peepersects": "Peepersects",
|
||||
"red_lampsquid": "Red Lampsquid",
|
||||
"ruby_wirebug": "Ruby Wirebug",
|
||||
"stinkmink": "Stinkmink",
|
||||
"yellow_lampsquid": "Yellow Lampsquid"
|
||||
},
|
||||
"font_name": "NotoSans-Bold.otf",
|
||||
"item_buffs": {
|
||||
"adamant_seed": "Adamant Seed",
|
||||
"armor_ammo": "Armor Ammo",
|
||||
"armorskin": "Armorskin",
|
||||
"dash_juice": "Dash Juice",
|
||||
"demon_ammo": "Demon Ammo",
|
||||
"demon_powder": "Demon Powder",
|
||||
"demondrug": "Demondrug",
|
||||
"gourmet_fish": "Gourmet Fish",
|
||||
"hardshell_powder": "Hardshell Powder",
|
||||
"immunizer": "Immunizer",
|
||||
"mega_armorskin": "Mega Armorskin",
|
||||
"mega_demondrug": "Mega Demondrug",
|
||||
"might_seed": "Might Seed"
|
||||
},
|
||||
"melody_effects": {
|
||||
"affinity_up": "Affinity Up",
|
||||
"attack_and_affinity_up": "Attack and Affinity Up",
|
||||
"attack_and_defense_up": "Attack and Defense Up",
|
||||
"attack_up": "Attack Up",
|
||||
"blight_negated": "Blight Negated",
|
||||
"defense_up": "Defense Up",
|
||||
"divine_protection": "Divine Protection",
|
||||
"earplugs_l": "Earplugs (L)",
|
||||
"earplugs_s": "Earplugs (S)",
|
||||
"elemental_attack_boost": "Elemental Attack Boost",
|
||||
"environment_damage_negated": "Environment Damage Negated",
|
||||
"health_recovery_l": "Health Recovery (L)",
|
||||
"health_recovery_s": "Health Recovery (S)",
|
||||
"health_recovery_s_antidote": "Health Recovery (S) + Antidote",
|
||||
"health_regeneration": "Health Regeneration",
|
||||
"infernal_melody": "Infernal Melody",
|
||||
"knockbacks_negated": "Knockbacks Negated",
|
||||
"self_improvement": "Self-Improvement",
|
||||
"sharpness_extension": "Sharpness Extension",
|
||||
"sharpness_loss_reduced": "Sharpness Loss Reduced",
|
||||
"sharpness_regeneration": "Sharpness Regeneration",
|
||||
"sonic_barrier": "Sonic Barrier",
|
||||
"sonic_wave": "Sonic Wave",
|
||||
"stamina_recovery_up": "Stamina Recovery Up",
|
||||
"stamina_use_reduced": "Stamina Use Reduced",
|
||||
"stun_negated": "Stun Negated",
|
||||
"tremors_negated": "Tremors Negated",
|
||||
"wind_pressure_negated": "Wind Pressure Negated"
|
||||
},
|
||||
"misc_buffs": {
|
||||
"attack_up": "Attack Up",
|
||||
"defense_up": "Defense Up",
|
||||
"immunity": "Immunity",
|
||||
"natural_healing_up": "Natural Healing Up",
|
||||
"stamina_use_down": "Stamina Use Down"
|
||||
},
|
||||
"otomo_moves": {
|
||||
"go_fight_win": "Go, Fight, Win",
|
||||
"power_drum": "Power Drum",
|
||||
"rousing_roar": "Rousing Roar",
|
||||
"vase_of_vitality": "Vase of Vitality"
|
||||
},
|
||||
"parts": {
|
||||
"abdomen": "Abdomen",
|
||||
"amatsu_unknown": "?",
|
||||
"antenna": "Antenna",
|
||||
"arms": "Arms",
|
||||
"arms_mud": "Arms (Mud)",
|
||||
@@ -327,5 +537,164 @@
|
||||
"wingclaw": "Wingclaw",
|
||||
"wingclaws": "Wingclaws",
|
||||
"wings": "Wings"
|
||||
},
|
||||
"rampage_skills": {
|
||||
"chameleos_soul": "Chameleos Soul",
|
||||
"kushala_daora_soul": "Kushala Daora Soul"
|
||||
},
|
||||
"skills": {
|
||||
"adrenaline_rush": "Adrenaline Rush",
|
||||
"affinity_sliding": "Affinity Sliding",
|
||||
"agitator": "Agitator",
|
||||
"berserk": "Berserk",
|
||||
"bladescale_hone": "Bladescale Hone",
|
||||
"blood_awakening": "Blood Awakening",
|
||||
"bloodlust": "Bloodlust",
|
||||
"burst": "Burst",
|
||||
"coalescence": "Coalescence",
|
||||
"counterstrike": "Counterstrike",
|
||||
"dereliction": "Dereliction",
|
||||
"dragon_conversion_elemental_attack_up": "Dragon Conversion: Elem. Atk Up",
|
||||
"dragon_conversion_elemental_res_up": "Dragon Conversion: Elem. Res Up",
|
||||
"dragonheart": "Dragonheart",
|
||||
"embolden": "Embolden",
|
||||
"frenzied_bloodlust": "Frenzied Bloodlust",
|
||||
"furious": "Furious",
|
||||
"grinder_s": "Grinder (S)",
|
||||
"heaven_sent": "Heaven-Sent",
|
||||
"hellfire_cloak": "Hellfire Cloak",
|
||||
"heroics": "Heroics",
|
||||
"inspiration": "Inspiration",
|
||||
"intrepid_heart": "Intrepid Heart",
|
||||
"latent_power": "Latent Power",
|
||||
"maximum_might": "Maximum Might",
|
||||
"offensive_guard": "Offensive Guard",
|
||||
"partbreaker": "Partbreaker",
|
||||
"peak_performance": "Peak Performance",
|
||||
"powder_mantle_blue": "Powder Mantle (Blue)",
|
||||
"powder_mantle_red": "Powder Mantle (Red)",
|
||||
"protective_polish": "Protective Polish",
|
||||
"resentment": "Resentment",
|
||||
"resuscitate": "Resuscitate",
|
||||
"spiribirds_call": "Spiribird's Call",
|
||||
"status_trigger": "Status Trigger",
|
||||
"strife": "Strife",
|
||||
"wall_runner": "Wall Runner",
|
||||
"wind_mantle": "Wind Mantle"
|
||||
},
|
||||
"stats": {
|
||||
"affinity": "Affinity",
|
||||
"attack": "Attack",
|
||||
"defense": "Defense",
|
||||
"dragon": "Dragon",
|
||||
"dragon_resistance": "Dragon Res",
|
||||
"fire": "Fire",
|
||||
"fire_resistance": "Fire Res",
|
||||
"ice": "Ice",
|
||||
"ice_resistance": "Ice Res",
|
||||
"stamina": "Stamina",
|
||||
"thunder": "Thunder",
|
||||
"thunder_resistance": "Thunder Res",
|
||||
"water": "Water",
|
||||
"water_resistance": "Water Res"
|
||||
},
|
||||
"unicode_glyph_ranges": [
|
||||
32,
|
||||
255,
|
||||
256,
|
||||
591,
|
||||
1024,
|
||||
1327,
|
||||
7680,
|
||||
7935,
|
||||
8192,
|
||||
8303,
|
||||
65280,
|
||||
65519,
|
||||
0
|
||||
],
|
||||
"weapon_skills": {
|
||||
"bow": {
|
||||
"arc_shot_affinity": "Arc Shot: Affinity",
|
||||
"arc_shot_brace": "Arc Shot: Brace",
|
||||
"bolt_boost": "Bolt Boost",
|
||||
"herculean_draw": "Herculean Draw"
|
||||
},
|
||||
"charge_blade": {
|
||||
"element_boost": "Element Boost",
|
||||
"sword_boost_mode": "Sword Boost Mode"
|
||||
},
|
||||
"dual_blades": {
|
||||
"archdemon_mode": "Archdemon Mode",
|
||||
"ironshine_silk": "Ironshine Silk"
|
||||
},
|
||||
"great_sword": {
|
||||
"power_sheathe": "Power Sheathe"
|
||||
},
|
||||
"gunlance": {
|
||||
"erupting_cannon": "Erupting Cannon",
|
||||
"ground_splitter": "Ground Splitter"
|
||||
},
|
||||
"hammer": {
|
||||
"impact_burst": "Impact Burst"
|
||||
},
|
||||
"heavy_bowgun": {
|
||||
"counter_charger": "Counter Charger",
|
||||
"overheat": "Overheat",
|
||||
"rising_moon": "Rising Moon",
|
||||
"setting_sun": "Setting Sun",
|
||||
"wyvernsnipe_reload": "Wyvernsnipe Reload"
|
||||
},
|
||||
"hunting_horn": {
|
||||
"bead_of_resonance": "Bead of Resonance",
|
||||
"silkbind_shockwave": "Silkbind Shockwave",
|
||||
"sonic_bloom": "Sonic Bloom"
|
||||
},
|
||||
"insect_glaive": {
|
||||
"all_extracts_mix": "All Extracts Mix",
|
||||
"orange_extract": "Orange Extract",
|
||||
"red_extract": "Red Extract",
|
||||
"white_extract": "White Extract"
|
||||
},
|
||||
"lance": {
|
||||
"anchor_rage": "Anchor Rage",
|
||||
"spiral_thrust": "Spiral Thrust",
|
||||
"twin_wine": "Twin Wine"
|
||||
},
|
||||
"light_bowgun": {
|
||||
"fanning_maneuver": "Fanning Maneuver",
|
||||
"wyvernblast_reload": "Wyvernblast Reload"
|
||||
},
|
||||
"long_sword": {
|
||||
"harvest_moon": "Harvest Moon",
|
||||
"iai_slash": "Iai Slash",
|
||||
"soaring_kick": "Soaring Kick",
|
||||
"spirit_gauge": "Spirit Gauge",
|
||||
"spirit_gauge_autofill": "Spirit Gauge Autofill"
|
||||
},
|
||||
"switch_axe": {
|
||||
"amped_state": "Amped State",
|
||||
"axe_heavy_slam": "Axe: Heavy Slam",
|
||||
"switch_charger": "Switch Charger"
|
||||
},
|
||||
"sword_and_shield": {
|
||||
"destroyer_oil": "Destroyer Oil"
|
||||
}
|
||||
},
|
||||
"weapons": {
|
||||
"bow": "Bow",
|
||||
"charge_blade": "Charge Blade",
|
||||
"dual_blades": "Dual Blades",
|
||||
"great_sword": "Great Sword",
|
||||
"gunlance": "Gunlance",
|
||||
"hammer": "Hammer",
|
||||
"heavy_bowgun": "Heavy Bowgun",
|
||||
"hunting_horn": "Hunting Horn",
|
||||
"insect_glaive": "Insect Glaive",
|
||||
"lance": "Lance",
|
||||
"light_bowgun": "Light Bowgun",
|
||||
"long_sword": "Long Sword",
|
||||
"switch_axe": "Switch Axe",
|
||||
"sword_and_shield": "Sword & Shield"
|
||||
}
|
||||
}
|
||||
700
reframework/data/MHR Overlay/languages/es-es.json
Normal file
700
reframework/data/MHR Overlay/languages/es-es.json
Normal file
@@ -0,0 +1,700 @@
|
||||
{
|
||||
"UI": {
|
||||
"HP": "PS:",
|
||||
"buildup": "Incremento:",
|
||||
"gold": "Dorado",
|
||||
"lv": "",
|
||||
"mini": "Mini",
|
||||
"otomo": "Camarada",
|
||||
"part_anomaly_core": "Núcleo de anomalías",
|
||||
"part_break": "Ruptura",
|
||||
"part_sever": "Corte",
|
||||
"player": "Jugador",
|
||||
"rage": "Rabia:",
|
||||
"servant": "Seguidor",
|
||||
"silver": "Plateado",
|
||||
"stamina": "Resistencia:",
|
||||
"total_buildup": "Incremento total",
|
||||
"total_damage": "Daño total"
|
||||
},
|
||||
"ailments": {
|
||||
"blast": "Explosión",
|
||||
"blastblight": "Rocío explosivo",
|
||||
"bleeding": "Sangrado",
|
||||
"bloodblight": "Plaga sangrienta",
|
||||
"deadly_poison": "Veneno mortal",
|
||||
"defense_down": "Defensa baja",
|
||||
"dragonblight": "Calamidad de dragón",
|
||||
"dung_bomb": "Bomba de estiércol",
|
||||
"engulfed": "Engullido",
|
||||
"exhaust": "Desgaste",
|
||||
"fall_otomo_trap": "Trampa de caída de camarada",
|
||||
"fall_trap": "Trampa de caída",
|
||||
"falling_asleep": "Quedarse dormido",
|
||||
"fireblight": "Fuego bárbaro",
|
||||
"flash": "Destello",
|
||||
"frenzy": "Frenesí",
|
||||
"frenzy_infection": "Infección frenética",
|
||||
"frenzy_overcome": "Frenesí superado",
|
||||
"frostblight": "Helada",
|
||||
"hellfireblight": "Fuego infernal",
|
||||
"iceblight": "Helada glacial",
|
||||
"leeched": "Drenado",
|
||||
"major_bubbleblight": "Gran plaga de burbujas",
|
||||
"minor_bubbleblight": "Menor plaga de burbujas",
|
||||
"muck": "Lodo",
|
||||
"paralysis": "Parálisis",
|
||||
"poison": "Veneno",
|
||||
"quick_sand": "Arenas movedizas",
|
||||
"resistance_down": "Resistencia baja",
|
||||
"ride": "Montar Wyvern",
|
||||
"roar": "Rugido",
|
||||
"shock_otomo_trap": "Trampa de descarga de camarada",
|
||||
"shock_trap": "Trampa de descarga",
|
||||
"sleep": "Sueño",
|
||||
"steel_fang": "Colmillo de acero",
|
||||
"stench": "Hedor",
|
||||
"stun": "Aturdimiento",
|
||||
"thunderblight": "Trueno relámpago",
|
||||
"tranq_bomb": "Bomba tranquilizante",
|
||||
"tremor": "Temblor",
|
||||
"waterblight": "Podredumbre por agua",
|
||||
"webbed": "Atrapado en telaraña"
|
||||
},
|
||||
"customization_menu": {
|
||||
"UI_font": "UI Font",
|
||||
"UI_font_notice": "Any changes to the font require script reload!",
|
||||
"abnormal_statuses": "Abnormal Statuses",
|
||||
"activation_count": "Activation Count",
|
||||
"affinity_label": "Affinity Label",
|
||||
"ailment_buildups": "Ailment Buildups",
|
||||
"ailment_name": "Ailment Name",
|
||||
"ailment_name_label": "Ailment Name Label",
|
||||
"ailment_spacing": "Ailment Spacing",
|
||||
"ailments": "Ailments",
|
||||
"all_UI": "All UI",
|
||||
"anchor": "Anchor",
|
||||
"anomaly_cores": "Anomaly Cores",
|
||||
"anomaly_filter": "Anomaly Core",
|
||||
"anomaly_health": "Anomaly Core Health",
|
||||
"anomaly_health_percentage": "Anomaly Core Health Percentage",
|
||||
"apply": "Apply",
|
||||
"assign_new_key": "Assign new key",
|
||||
"attack_label": "Attack Label",
|
||||
"auto_highlight": "Auto-highlight",
|
||||
"background": "Background",
|
||||
"bar": "Bar",
|
||||
"blast": "Blast",
|
||||
"body_parts": "Body Parts",
|
||||
"bold": "Bold",
|
||||
"bombs": "Bombs",
|
||||
"bottom_left": "Bottom-Left",
|
||||
"bottom_right": "Bottom-Right",
|
||||
"bottom_to_top": "Bottom to Top",
|
||||
"break_anomaly_filter": "Break + Anomaly Core",
|
||||
"break_count": "Break Count",
|
||||
"break_filter": "Break",
|
||||
"break_health": "Break Health",
|
||||
"break_health_percentage": "Break Health Percentage",
|
||||
"break_max_count": "Break Max Count",
|
||||
"break_sever_anomaly_filter": "Break + Sever + Anomaly Core",
|
||||
"break_sever_filter": "Break + Sever",
|
||||
"buff_UI": "Buff UI",
|
||||
"buildup": "Buildup",
|
||||
"buildup_bar": "Buildup Bar",
|
||||
"buildup_bars_are_relative_to": "Buildup Bars are relative to",
|
||||
"buildup_percentage": "Buildup Percentage",
|
||||
"buildup_percentage_label": "Buildup Percentage Label",
|
||||
"buildup_value_label": "Buildup Value Label",
|
||||
"capture_line": "Capture Line",
|
||||
"cart_count": "Cart Count",
|
||||
"cart_count_label": "Cart Count Label",
|
||||
"center": "Center",
|
||||
"closest": "Closest",
|
||||
"color": "Color",
|
||||
"colors": "Colors",
|
||||
"config": "Config",
|
||||
"creature_name_label": "Creature Name Label",
|
||||
"crown": "Crown",
|
||||
"crown_thresholds": "Crown Thresholds",
|
||||
"current_state": "Current State",
|
||||
"current_time": "Current Time",
|
||||
"current_value": "Current Value",
|
||||
"cutscene": "Cutscene",
|
||||
"damage": "Damage",
|
||||
"damage_bar": "Damage Bar",
|
||||
"damage_bars_are_relative_to": "Damage Bars are relative to",
|
||||
"damage_meter_UI": "Damage Meter UI",
|
||||
"damage_percentage_label": "Damage Percentage Label",
|
||||
"damage_value_label": "Damage Value Label",
|
||||
"dango_skills": "Dango Skills",
|
||||
"debug": "Debug",
|
||||
"default_state": "Default State",
|
||||
"defense_label": "Defense Label",
|
||||
"delete": "Delete",
|
||||
"distance": "Distance",
|
||||
"dps": "DPS",
|
||||
"dps_label": "DPS Label",
|
||||
"dps_mode": "DPS Mode",
|
||||
"dragon_resistance_label": "Dragon Resistance Label",
|
||||
"duplicate": "Duplicate",
|
||||
"duration": "Duration",
|
||||
"dynamic_positioning": "Dynamic Positioning",
|
||||
"dynamically_positioned": "Dynamically Positioned",
|
||||
"effect_level": "Effect Level",
|
||||
"element_2_label": "Element 2 Label",
|
||||
"element_label": "Element Label",
|
||||
"enable_for": "Enable for",
|
||||
"enabled": "Enabled",
|
||||
"endemic_life": "Endemic Life",
|
||||
"endemic_life_UI": "Endemic Life UI",
|
||||
"endemic_life_buffs": "Endemic Life Buffs",
|
||||
"everything_seems_to_be_ok": "Everything seems to be OK!",
|
||||
"family": "Family",
|
||||
"farthest": "Farthest",
|
||||
"fight_time": "Fight Time",
|
||||
"fill_direction": "Fill Direction",
|
||||
"filter": "Filter",
|
||||
"filter_mode": "Filter Mode",
|
||||
"fire_resistance_label": "Fire Resistance Label",
|
||||
"first": "First",
|
||||
"first_hit": "First Hit",
|
||||
"flinch_count": "Flinch Count",
|
||||
"foreground": "Foreground",
|
||||
"freeze_dps_on_quest_end": "Freeze DPS on Quest End",
|
||||
"global_position_modifier": "Global Position Modifier",
|
||||
"global_scale_modifier": "Global Scale Modifier",
|
||||
"global_settings": "Global Settings",
|
||||
"head_tracking": "Head Tracking",
|
||||
"health": "Health",
|
||||
"health_anomaly_filter": "Health + Anomaly Core",
|
||||
"health_break_anomaly_filter": "Health + Break + Anomaly Core",
|
||||
"health_break_filter": "Health + Break",
|
||||
"health_break_sever_anomaly_filter": "Health + Break + Sever + Anomaly Core",
|
||||
"health_break_sever_filter": "Health + Break + Sever",
|
||||
"health_filter": "Health",
|
||||
"health_label": "Health Label",
|
||||
"health_percentage": "Health Percentage",
|
||||
"health_sever_anomaly_filter": "Health + Sever + Anomaly Core",
|
||||
"health_sever_filter": "Health + Sever",
|
||||
"height": "Height",
|
||||
"hide_ailments_with_zero_buildup": "Hide Ailments when Buildup is 0",
|
||||
"hide_all_active_ailments": "Hide All Active Ailments",
|
||||
"hide_all_inactive_ailments": "Hide All Inactive Ailments",
|
||||
"hide_bar_for_infinite_buffs": "Hide Bar for infinite Buffs",
|
||||
"hide_dead_or_captured": "Hide Dead or Captured",
|
||||
"hide_disabled_ailments": "Hide Disabled Ailments by Game",
|
||||
"hide_inactive_ailments_with_no_buildup_support": "Hide Inactive Ailments with no Buildup Support",
|
||||
"hide_inactive_creatures": "Hide Inactive Creatures",
|
||||
"hide_module_if_total_damage_is_zero": "Hide Module if Total Damage is 0",
|
||||
"hide_myself": "Hide Myself",
|
||||
"hide_other_players": "Hide Other Players",
|
||||
"hide_player_if_player_damage_is_zero": "Hide Player if Player Damage is 0",
|
||||
"hide_servants": "Hide Followers",
|
||||
"hide_timer_for_infinite_buffs": "Hide Timer for infinite Buffs",
|
||||
"hide_total_damage": "Hide Total Damage",
|
||||
"hide_total_if_total_damage_is_zero": "Hide Total if Total Damage is 0",
|
||||
"hide_undamaged_parts": "Hide Undamaged Parts",
|
||||
"highest_health": "Highest Health",
|
||||
"highest_health_percentage": "Highest Health Percentage",
|
||||
"highlighted": "Highlighted",
|
||||
"highlighted_bar": "Highlighted Bar",
|
||||
"highlighted_buildup_bar": "Highlighted Buildup Bar",
|
||||
"highlighted_damage_bar": "Highlighted Damage Bar",
|
||||
"highlighted_targeted": "Highlighted (targeted)",
|
||||
"history": "History",
|
||||
"history_size": "History Size",
|
||||
"horizontal": "Horizontal",
|
||||
"hotkeys": "Hotkeys",
|
||||
"hunter_rank": "Hunter Rank",
|
||||
"hunter_rank_label": "Hunter Rank Label",
|
||||
"ice_resistance_label": "Ice Resistance Label",
|
||||
"id": "ID",
|
||||
"in_lobby": "In Lobby",
|
||||
"in_training_area": "In Training Area",
|
||||
"include": "Include",
|
||||
"infinite_buffs_location": "Infinite Buffs Location",
|
||||
"inside": "Inside",
|
||||
"installations": "Installations",
|
||||
"italic": "Italic",
|
||||
"item_buffs": "Item Buffs",
|
||||
"join_time": "Join Time",
|
||||
"killcam": "Killcam",
|
||||
"kunai": "Kunai",
|
||||
"language": "Language",
|
||||
"large_monster_UI": "Large Monster UI",
|
||||
"large_monster_dynamic_UI": "Large Monster Dynamic UI",
|
||||
"large_monster_highlighted_UI": "Large Monster Highlighted UI",
|
||||
"large_monster_static_UI": "Large Monster Static UI",
|
||||
"large_monsters": "Large Monsters",
|
||||
"last": "Last",
|
||||
"left_to_right": "Left to Right",
|
||||
"level": "Level",
|
||||
"level_label": "Level Label",
|
||||
"loading_quest": "Loading Quest",
|
||||
"loss_health": "Sever Health",
|
||||
"loss_health_percentage": "Sever Health Percentage",
|
||||
"lowest_health": "Lowest Health",
|
||||
"lowest_health_percentage": "Lowest Health Percentage",
|
||||
"master_rank": "Master Rank",
|
||||
"max_distance": "Max Distance",
|
||||
"max_monster_updates_per_tick": "Max Monster Updates per Tick",
|
||||
"max_value": "Max Value",
|
||||
"me": "Me",
|
||||
"melody_effects": "Melody Effects",
|
||||
"menu_font": "Menu Font",
|
||||
"menu_font_change_disclaimer": "Changing Language and Menu Font Size several times will cause a crash!",
|
||||
"misc_buffs": "Misc Buffs",
|
||||
"mod_name": "MHR Overlay",
|
||||
"mode": "Mode",
|
||||
"modifiers": "Modifiers",
|
||||
"module_visibility_based_on_game_state": "Module Visibility based on Game State",
|
||||
"modules": "Modules",
|
||||
"monster_can_be_captured": "Monster can be captured",
|
||||
"monster_id": "Monster ID",
|
||||
"monster_name": "Monster Name",
|
||||
"monster_name_label": "Monster Name Label",
|
||||
"monsters": "Monsters",
|
||||
"my_damage_bar_location": "My Damage Bar Location",
|
||||
"my_otomos": "My Buddies",
|
||||
"myself": "Myself",
|
||||
"name": "Name",
|
||||
"name_label": "Name Label",
|
||||
"new": "New",
|
||||
"none": "None",
|
||||
"normal": "Normal",
|
||||
"offset": "Offset",
|
||||
"offset_is_relative_to_parts": "Offset is Relative to Parts",
|
||||
"opacity_falloff": "Opacity Falloff",
|
||||
"orientation": "Orientation",
|
||||
"other": "Other",
|
||||
"other_player_otomos": "Other Player Buddies",
|
||||
"other_players": "Other Players",
|
||||
"otomo_moves": "Buddy Moves",
|
||||
"otomos": "Buddies",
|
||||
"outline": "Outline",
|
||||
"outside": "Outside",
|
||||
"part_health": "Part Health",
|
||||
"part_name": "Part Name",
|
||||
"part_name_label": "Part Name Label",
|
||||
"percentage_label": "Percentage Label",
|
||||
"performance": "Performance",
|
||||
"player_name_label": "Player Name Label",
|
||||
"player_name_size_limit": "Player Name Size Limit",
|
||||
"player_spacing": "Player Spacing",
|
||||
"players": "Players",
|
||||
"playing_quest": "Playing Quest",
|
||||
"poison": "Poison",
|
||||
"position": "Position",
|
||||
"press_any_key": "Press any key...",
|
||||
"prioritize_large_monsters": "Large Monsters on High Priority",
|
||||
"quest_end_animation": "Quest End Animation",
|
||||
"quest_end_screen": "Quest End Screen",
|
||||
"quest_end_timer": "Quest End Timer",
|
||||
"quest_start_animation": "Quest Start Animation",
|
||||
"quest_time": "Quest Time",
|
||||
"rage": "Rage",
|
||||
"rampage_skills": "Rampage Skills",
|
||||
"reframework_outdated": "Installed REFramework version is outdated. Please, update. Otherwise, MHR Overlay won't work correctly.",
|
||||
"relative_offset": "Relative Offset",
|
||||
"rename": "Rename",
|
||||
"render_highlighted_monster": "Render Highlighted Monster",
|
||||
"render_inactive_anomaly_cores": "Render Inactive Anomaly Cores",
|
||||
"render_not_highlighted_monsters": "Render Not Highlighted Monsters",
|
||||
"renderer": "Renderer",
|
||||
"reset": "Reset",
|
||||
"reversed_order": "Reversed Order",
|
||||
"reward_screen": "Reward Screen",
|
||||
"right_alignment_shift": "Right Alignment Shift",
|
||||
"right_to_left": "Right to Left",
|
||||
"servant_otomos": "Servant Buddies",
|
||||
"servants": "Followers",
|
||||
"settings": "Settings",
|
||||
"sever_anomaly_filter": "Sever + Anomaly Core",
|
||||
"sever_filter": "Sever",
|
||||
"shadow": "Shadow",
|
||||
"show_my_otomos_separately": "Show My Buddies separately",
|
||||
"show_other_player_otomos_separately": "Show Other Player Buddies separately",
|
||||
"show_servant_otomos_separately": "Show Follower Buddies separately",
|
||||
"size": "Size",
|
||||
"skills": "Skills",
|
||||
"small_monster_UI": "Small Monster UI",
|
||||
"small_monsters": "Small Monsters",
|
||||
"sorting": "Sorting",
|
||||
"spacing": "Spacing",
|
||||
"stamina": "Stamina",
|
||||
"stamina_label": "Stamina Label",
|
||||
"static_orientation": "Static Orientation",
|
||||
"static_position": "Static Position",
|
||||
"static_sorting": "Static Sorting",
|
||||
"static_spacing": "Static Spacing",
|
||||
"statically_positioned": "Statically Positioned",
|
||||
"stats_UI": "Stats UI",
|
||||
"status": "Status",
|
||||
"style": "Style",
|
||||
"summary_screen": "Summary Screen",
|
||||
"text_label": "Text Label",
|
||||
"thickness": "Thickness",
|
||||
"thunder_resistance_label": "Thunder Resistance Label",
|
||||
"time_UI": "Time UI",
|
||||
"time_label": "Time Label",
|
||||
"time_limit": "Time Limit (seconds)",
|
||||
"timer": "Timer",
|
||||
"timer_delays": "Timer Delays",
|
||||
"timer_label": "Timer Label",
|
||||
"top_buildup": "Top Buildup",
|
||||
"top_damage": "Top Damage",
|
||||
"top_dps": "Top DPS",
|
||||
"top_left": "Top-Left",
|
||||
"top_right": "Top-Right",
|
||||
"top_to_bottom": "Top to Bottom",
|
||||
"total": "Total",
|
||||
"total_buildup": "Total Buildup",
|
||||
"total_buildup_label": "Total Buildup Label",
|
||||
"total_buildup_value_label": "Total Buildup Value Label",
|
||||
"total_cart_count_label": "Total Cart Count Label",
|
||||
"total_damage": "Total Damage",
|
||||
"total_damage_label": "Total Damage Label",
|
||||
"total_damage_location": "Total Damage Bar Location",
|
||||
"total_damage_offset_is_relative": "Total Damage Offset is Relative",
|
||||
"total_damage_value_label": "Total Damage Value Label",
|
||||
"total_dps": "Total DPS",
|
||||
"total_dps_label": "Total DPS Label",
|
||||
"tracked_damage_types": "Tracked Damage Types",
|
||||
"tracked_monster_types": "Tracked Monster Types",
|
||||
"type": "Type",
|
||||
"update_buffs_delay": "Update Buffs (seconds)",
|
||||
"update_is_online_delay": "Update Is Online (seconds)",
|
||||
"update_myself_position_delay": "Update Myself Position (seconds)",
|
||||
"update_player_info_delay": "Update Player Info (seconds)",
|
||||
"update_players_delay": "Update Players (seconds)",
|
||||
"update_quest_time_delay": "Update Quest Time (seconds)",
|
||||
"update_singletons_delay": "Update Singletons (seconds)",
|
||||
"update_window_size_delay": "Update Window Size (seconds)",
|
||||
"use_d2d_if_available": "Use Direct2D if available",
|
||||
"value": "Value",
|
||||
"value_label": "Value Label",
|
||||
"vertical": "Vertical",
|
||||
"viewport_offset": "Viewport Offset",
|
||||
"visible": "Visible",
|
||||
"water_resistance_label": "Water Resistance Label",
|
||||
"weapon_skills": "Weapon Skills",
|
||||
"width": "Width",
|
||||
"world_offset": "World Offset",
|
||||
"wyvern_riding": "Wyvern Riding",
|
||||
"x": "X",
|
||||
"y": "Y",
|
||||
"z": "Z"
|
||||
},
|
||||
"dango_skills": {
|
||||
"dango_adrenaline": "Dango adrenalina",
|
||||
"dango_booster": "Dango potenciador",
|
||||
"dango_bulker": "Dango reforzador",
|
||||
"dango_connector": "Dango conector",
|
||||
"dango_defender": "Dango defensor",
|
||||
"dango_flyer": "Dango volador",
|
||||
"dango_glutton": "Dango glotón",
|
||||
"dango_hunter": "Dango cazador",
|
||||
"dango_insurance": "Dango seguro",
|
||||
"dango_insurance_defense_up": "Dango aumento de defensa",
|
||||
"super_recovery_dango": "Dango de súper recuperación"
|
||||
},
|
||||
"endemic_life": {
|
||||
"butterflame": "Butterflame",
|
||||
"clothfly": "Clothfly",
|
||||
"cutterfly": "Cutterfly",
|
||||
"gold_wirebug": "Cordóptero dorado",
|
||||
"peepersects": "Peepersects",
|
||||
"red_lampsquid": "Lamprea roja",
|
||||
"ruby_wirebug": "Cordóptero rubí",
|
||||
"stinkmink": "Mink apestoso",
|
||||
"yellow_lampsquid": "Lamprea amarilla"
|
||||
},
|
||||
"font_name": "NotoSans-Bold.otf",
|
||||
"item_buffs": {
|
||||
"adamant_seed": "Semilla adamantina",
|
||||
"armor_ammo": "Munición de armadura",
|
||||
"armorskin": "Piel de armadura",
|
||||
"dash_juice": "Jugo de energía",
|
||||
"demon_ammo": "Munición demoníaca",
|
||||
"demon_powder": "Polvo demoníaco",
|
||||
"demondrug": "Droga demoníaca",
|
||||
"gourmet_fish": "Pez gourmet",
|
||||
"hardshell_powder": "Carcasa rígida en polvo",
|
||||
"immunizer": "Inmunizador",
|
||||
"mega_armorskin": "Mega piel de armadura",
|
||||
"mega_demondrug": "Mega droga demoníaca",
|
||||
"might_seed": "Semilla de poder"
|
||||
},
|
||||
"melody_effects": {
|
||||
"affinity_up": "Aumento de afinidad",
|
||||
"attack_and_affinity_up": "Aumento de ataque y afinidad",
|
||||
"attack_and_defense_up": "Aumento de ataque y defensa",
|
||||
"attack_up": "Aumento de ataque",
|
||||
"blight_negated": "Plaga neutralizada",
|
||||
"defense_up": "Aumento de defensa",
|
||||
"divine_protection": "Protección divina",
|
||||
"earplugs_l": "Orejeras (L)",
|
||||
"earplugs_s": "Orejeras (S)",
|
||||
"elemental_attack_boost": "Aumento de ataque elemental",
|
||||
"environment_damage_negated": "Daño ambiental neutralizado",
|
||||
"health_recovery_l": "Recuperación de salud (L)",
|
||||
"health_recovery_s": "Recuperación de salud (S)",
|
||||
"health_recovery_s_antidote": "Recuperación de salud (S) + Antídoto",
|
||||
"health_regeneration": "Regeneración de salud",
|
||||
"infernal_melody": "Melodía infernal",
|
||||
"knockbacks_negated": "Retroceso anulado",
|
||||
"self_improvement": "Auto-mejora",
|
||||
"sharpness_extension": "Extensión de afilado",
|
||||
"sharpness_loss_reduced": "Reducción de pérdida de afilado",
|
||||
"sharpness_regeneration": "Regeneración de afilado",
|
||||
"sonic_barrier": "Barrera sónica",
|
||||
"sonic_wave": "Onda sónica",
|
||||
"stamina_recovery_up": "Recuperación de resistencia aumentada",
|
||||
"stamina_use_reduced": "Reducción de uso de resistencia",
|
||||
"stun_negated": "Aturdimiento anulado",
|
||||
"tremors_negated": "Temblores anulados",
|
||||
"wind_pressure_negated": "Presión del viento anulada"
|
||||
},
|
||||
"misc_buffs": {
|
||||
"attack_up": "Aumento de ataque",
|
||||
"defense_up": "Aumento de defensa",
|
||||
"immunity": "Inmunidad",
|
||||
"natural_healing_up": "Aumento de curación natural",
|
||||
"stamina_use_down": "Reducción de uso de resistencia"
|
||||
},
|
||||
"otomo_moves": {
|
||||
"go_fight_win": "Ve, lucha, gana",
|
||||
"power_drum": "Tambor de potencia",
|
||||
"rousing_roar": "Rugido entusiasta",
|
||||
"vase_of_vitality": "Jarrón de vitalidad"
|
||||
},
|
||||
"parts": {
|
||||
"abdomen": "Abdomen",
|
||||
"amatsu_unknown": "?",
|
||||
"antenna": "Antena",
|
||||
"arms": "Brazos",
|
||||
"arms_mud": "Brazos (Lodo)",
|
||||
"back": "Espalda",
|
||||
"back_windsac": "Espalda (Saco de viento)",
|
||||
"body": "Cuerpo",
|
||||
"body_mud": "Cuerpo (Lodo)",
|
||||
"carapace": "Caparazón",
|
||||
"chest": "Pecho",
|
||||
"chest_windsac": "Pecho (Saco de viento)",
|
||||
"claw": "Garra",
|
||||
"crest": "Blasón",
|
||||
"dorsal_fin": "Aleta dorsal",
|
||||
"foreleg": "Pata delantera",
|
||||
"forelegs": "Patas delanteras",
|
||||
"head": "Cabeza",
|
||||
"head_mud": "Cabeza (Lodo)",
|
||||
"hind_leg": "Pata trasera",
|
||||
"hind_legs": "Patas traseras",
|
||||
"large_mudbulb": "Bulbo grande de barro",
|
||||
"left_arm": "Brazo izquierdo",
|
||||
"left_arm_ice": "Brazo izquierdo (Hielo)",
|
||||
"left_claw": "Garra izquierda",
|
||||
"left_cutwing": "Ala cortada izquierda",
|
||||
"left_foreleg": "Pata delantera izquierda",
|
||||
"left_hind_leg": "Pata trasera izquierda",
|
||||
"left_leg": "Pierna izquierda",
|
||||
"left_leg_mud": "Pierna izquierda (Lodo)",
|
||||
"left_legs": "Piernas izquierdas",
|
||||
"left_wing": "Ala izquierda",
|
||||
"left_wingclaw": "Garra alada izquierda",
|
||||
"legs": "Piernas",
|
||||
"lower_back": "Parte baja de la espalda",
|
||||
"lower_body": "Parte inferior del cuerpo",
|
||||
"mane": "Melena",
|
||||
"mudbulb": "Bulbo de barro",
|
||||
"neck": "Cuello",
|
||||
"rear": "Parte trasera",
|
||||
"right_arm": "Brazo derecho",
|
||||
"right_arm_ice": "Brazo derecho (Hielo)",
|
||||
"right_claw": "Garra derecha",
|
||||
"right_cutwing": "Ala cortada derecha",
|
||||
"right_foreleg": "Pata delantera derecha",
|
||||
"right_hind_leg": "Pata trasera derecha",
|
||||
"right_leg": "Pierna derecha",
|
||||
"right_leg_mud": "Pierna derecha (Lodo)",
|
||||
"right_legs": "Piernas derechas",
|
||||
"right_wing": "Ala derecha",
|
||||
"right_wingclaw": "Garra alada derecha",
|
||||
"rock": "Roca",
|
||||
"shell": "Caparazón",
|
||||
"spinning": "Barrido",
|
||||
"tail": "Cola",
|
||||
"tail_mud": "Cola (Lodo)",
|
||||
"tail_tip": "Punta de la cola",
|
||||
"tail_windsac": "Cola (Saco de viento)",
|
||||
"thundersacs": "Saco de truenos",
|
||||
"torso": "Torso",
|
||||
"torso_mud": "Torso (Lodo)",
|
||||
"unknown": "?",
|
||||
"upper_back": "Parte superior de la espalda",
|
||||
"upper_body": "Parte superior del cuerpo",
|
||||
"wingclaw": "Garra alada",
|
||||
"wingclaws": "Garras aladas",
|
||||
"wings": "Alas"
|
||||
},
|
||||
"rampage_skills": {
|
||||
"chameleos_soul": "Alma camaleónica",
|
||||
"kushala_daora_soul": "Alma de Kushala Daora"
|
||||
},
|
||||
"skills": {
|
||||
"adrenaline_rush": "Subidón de adrenalina",
|
||||
"affinity_sliding": "Afinidad deslizante",
|
||||
"agitator": "Agitador",
|
||||
"berserk": "Desenfrenado",
|
||||
"bladescale_hone": "Afilador de escamas",
|
||||
"blood_awakening": "Despertar de sangre",
|
||||
"bloodlust": "Sed de sangre",
|
||||
"burst": "Ráfaga",
|
||||
"coalescence": "Confluencia",
|
||||
"counterstrike": "Contraataque",
|
||||
"dereliction": "Desamparo",
|
||||
"dragon_conversion_elemental_attack_up": "Conversión dracónica: Ataque elemental +",
|
||||
"dragon_conversion_elemental_res_up": "Conversión dracónica: Res. elemental +",
|
||||
"dragonheart": "Corazón de dragón",
|
||||
"embolden": "Envalentonar",
|
||||
"frenzied_bloodlust": "Sed de sangre frenética",
|
||||
"furious": "Furia",
|
||||
"grinder_s": "Afilador (S)",
|
||||
"heaven_sent": "Enviado celestial",
|
||||
"hellfire_cloak": "Manto de fuego infernal",
|
||||
"heroics": " Heroísmo",
|
||||
"inspiration": "Inspiración",
|
||||
"intrepid_heart": "Corazón intrépido",
|
||||
"latent_power": "Poder latente",
|
||||
"maximum_might": "Poder máximo",
|
||||
"offensive_guard": "Guardia ofensiva",
|
||||
"partbreaker": "Rompepiezas",
|
||||
"peak_performance": "Rendimiento máximo",
|
||||
"powder_mantle_blue": "Manto de pólvora (azul)",
|
||||
"powder_mantle_red": "Manto de pólvora (rojo)",
|
||||
"protective_polish": "Pulido protector",
|
||||
"resentment": "Resentimiento",
|
||||
"resuscitate": "Reanimar",
|
||||
"spiribirds_call": "Canto de pájaro espiritual",
|
||||
"status_trigger": "Disparador de estado",
|
||||
"strife": "Conflicto",
|
||||
"wall_runner": "Corredor de muros",
|
||||
"wind_mantle": "Manto de viento"
|
||||
},
|
||||
"stats": {
|
||||
"affinity": "Afinidad",
|
||||
"attack": "Ataque",
|
||||
"defense": "Defensa",
|
||||
"dragon": "Dragón",
|
||||
"dragon_resistance": "Resist. de dragón",
|
||||
"fire": "Fuego",
|
||||
"fire_resistance": "Resist. de fuego",
|
||||
"ice": "Hielo",
|
||||
"ice_resistance": "Resist. de hielo",
|
||||
"stamina": "Resistencia",
|
||||
"thunder": "Trueno",
|
||||
"thunder_resistance": "Resist. de trueno",
|
||||
"water": "Agua",
|
||||
"water_resistance": "Resist. de agua"
|
||||
},
|
||||
"unicode_glyph_ranges": [
|
||||
32,
|
||||
255,
|
||||
256,
|
||||
591,
|
||||
1024,
|
||||
1327,
|
||||
7680,
|
||||
7935,
|
||||
8192,
|
||||
8303,
|
||||
65280,
|
||||
65519,
|
||||
0
|
||||
],
|
||||
"weapon_skills": {
|
||||
"bow": {
|
||||
"arc_shot_affinity": "Tiro con arco: Afinidad",
|
||||
"arc_shot_brace": "Tiro con arco: Apoyo",
|
||||
"bolt_boost": "Impulso de perno",
|
||||
"herculean_draw": "Reparto hercúleo"
|
||||
},
|
||||
"charge_blade": {
|
||||
"element_boost": "Potenciador de elementos",
|
||||
"sword_boost_mode": "Modo potenciador de espada"
|
||||
},
|
||||
"dual_blades": {
|
||||
"archdemon_mode": "Modo archidemonio",
|
||||
"ironshine_silk": "Seda iridiscente"
|
||||
},
|
||||
"great_sword": {
|
||||
"power_sheathe": "Funda protectora"
|
||||
},
|
||||
"gunlance": {
|
||||
"erupting_cannon": "Cañón en erupción",
|
||||
"ground_splitter": "Divisor de suelo"
|
||||
},
|
||||
"hammer": {
|
||||
"impact_burst": "Explosión de impacto"
|
||||
},
|
||||
"heavy_bowgun": {
|
||||
"counter_charger": "Contraataque",
|
||||
"overheat": "Sobrecalentamiento",
|
||||
"rising_moon": "Luna creciente",
|
||||
"setting_sun": "Puesta de sol",
|
||||
"wyvernsnipe_reload": "Recarga de Wyvernsnipe"
|
||||
},
|
||||
"hunting_horn": {
|
||||
"bead_of_resonance": "Cuenta de resonancia",
|
||||
"silkbind_shockwave": "Onda de choque Silkbind",
|
||||
"sonic_bloom": "Florecimiento sónico"
|
||||
},
|
||||
"insect_glaive": {
|
||||
"all_extracts_mix": "Mezcla de todos los extractos",
|
||||
"orange_extract": "Extracto naranja",
|
||||
"red_extract": "Extracto rojo",
|
||||
"white_extract": "Extracto blanco"
|
||||
},
|
||||
"lance": {
|
||||
"anchor_rage": "Rabia del ancla",
|
||||
"spiral_thrust": "Empuje en espiral",
|
||||
"twin_wine": "Vino doble"
|
||||
},
|
||||
"light_bowgun": {
|
||||
"fanning_maneuver": "Maniobra de Fanning",
|
||||
"wyvernblast_reload": "Recarga de Wyvernblast"
|
||||
},
|
||||
"long_sword": {
|
||||
"harvest_moon": "Luna de cosecha",
|
||||
"iai_slash": "Tajo Iai",
|
||||
"soaring_kick": "Patada voladora",
|
||||
"spirit_gauge": "Nivel de burbuja",
|
||||
"spirit_gauge_autofill": "Medidor de espíritu autocompletado"
|
||||
},
|
||||
"switch_axe": {
|
||||
"amped_state": "Estado amplificado",
|
||||
"axe_heavy_slam": "Hacha: Golpe pesado",
|
||||
"switch_charger": "Cargador conmutable"
|
||||
},
|
||||
"sword_and_shield": {
|
||||
"destroyer_oil": "Aceite destructor"
|
||||
}
|
||||
},
|
||||
"weapons": {
|
||||
"bow": "Arco",
|
||||
"charge_blade": "Hacha cargada",
|
||||
"dual_blades": "Espadas dobles",
|
||||
"great_sword": "Gran espada",
|
||||
"gunlance": "Lanza pistola",
|
||||
"hammer": "Martillo",
|
||||
"heavy_bowgun": "Ballesta Pesada",
|
||||
"hunting_horn": "Cornamusa",
|
||||
"insect_glaive": "Glaive insecto",
|
||||
"lance": "Lanza",
|
||||
"light_bowgun": "Ballesta ligera",
|
||||
"long_sword": "Espada larga",
|
||||
"switch_axe": "Hacha espada",
|
||||
"sword_and_shield": "Espada y escudo"
|
||||
}
|
||||
}
|
||||
@@ -3,11 +3,15 @@
|
||||
"HP": "HP:",
|
||||
"buildup": "蓄積値:",
|
||||
"gold": "金冠",
|
||||
"lv": "",
|
||||
"mini": "小型",
|
||||
"otomo": "Buddy",
|
||||
"part_anomaly_core": "Anomaly Core",
|
||||
"part_break": "部位破壊",
|
||||
"part_sever": "尻尾切断",
|
||||
"player": "Player",
|
||||
"rage": "怒り値:",
|
||||
"servant": "Follower",
|
||||
"silver": "銀冠",
|
||||
"stamina": "スタミナ:",
|
||||
"total_buildup": "合計蓄積値",
|
||||
@@ -15,30 +19,54 @@
|
||||
},
|
||||
"ailments": {
|
||||
"blast": "爆破",
|
||||
"blastblight": "Blastblight",
|
||||
"bleeding": "Bleeding",
|
||||
"bloodblight": "Bloodblight",
|
||||
"deadly_poison": "Deadly Poison",
|
||||
"defense_down": "Defense Down",
|
||||
"dragonblight": "Dragonblight",
|
||||
"dung_bomb": "悪臭",
|
||||
"engulfed": "Engulfed",
|
||||
"exhaust": "疲労",
|
||||
"fall_otomo_trap": "オトモ落とし穴",
|
||||
"fall_trap": "落とし穴",
|
||||
"falling_asleep": "Falling Asleep",
|
||||
"fireblight": "火属性やられ",
|
||||
"flash": "目くらまし",
|
||||
"frenzy": "Frenzy",
|
||||
"frenzy_infection": "Frenzy Infection",
|
||||
"frenzy_overcome": "Frenzy Overcome",
|
||||
"frostblight": "Frostblight",
|
||||
"hellfireblight": "Hellfireblight",
|
||||
"iceblight": "氷属性やられ",
|
||||
"leeched": "Leeched",
|
||||
"major_bubbleblight": "Major Bubbleblight",
|
||||
"minor_bubbleblight": "Minor Bubbleblight",
|
||||
"muck": "Muck",
|
||||
"paralysis": "麻痺",
|
||||
"poison": "毒",
|
||||
"quick_sand": "流砂",
|
||||
"resistance_down": "Resistance Down",
|
||||
"ride": "操竜",
|
||||
"roar": "Roar",
|
||||
"shock_otomo_trap": "オトモしびれ罠",
|
||||
"shock_trap": "しびれ罠",
|
||||
"sleep": "睡眠",
|
||||
"steel_fang": "ガルク噛み付き",
|
||||
"stench": "Stench",
|
||||
"stun": "スタン",
|
||||
"thunderblight": "雷属性やられ",
|
||||
"tranq_bomb": "捕獲用麻酔玉",
|
||||
"waterblight": "水属性やられ"
|
||||
"tremor": "Tremor",
|
||||
"waterblight": "水属性やられ",
|
||||
"webbed": "Webbed"
|
||||
},
|
||||
"customization_menu": {
|
||||
"UI_font": "UI フォント",
|
||||
"UI_font_notice": "フォントの変更後はスクリプトリセットを行ってください。",
|
||||
"abnormal_statuses": "Abnormal Statuses",
|
||||
"activation_count": "適用までのカウント",
|
||||
"affinity_label": "Affinity Label",
|
||||
"ailment_buildups": "状態異常の蓄積値",
|
||||
"ailment_name": "状態異常表示",
|
||||
"ailment_name_label": "状態異常表示ラベル",
|
||||
@@ -46,23 +74,32 @@
|
||||
"ailments": "状態異常表示",
|
||||
"all_UI": "全てのUI",
|
||||
"anchor": "固定",
|
||||
"anomaly_cores": "Anomaly Cores",
|
||||
"anomaly_filter": "Anomaly Core",
|
||||
"anomaly_health": "Anomaly Core Health",
|
||||
"anomaly_health_percentage": "Anomaly Core Health Percentage",
|
||||
"apply": "適用",
|
||||
"assign_new_key": "新規に割り当てるキーを入力",
|
||||
"attack_label": "Attack Label",
|
||||
"auto_highlight": "Auto-highlight",
|
||||
"background": "背景色",
|
||||
"bar": "バー",
|
||||
"blast_damage": "爆破ダメージ",
|
||||
"blast": "爆破",
|
||||
"body_parts": "部位",
|
||||
"bold": "ボールド",
|
||||
"bomb_damage": "爆弾ダメージ",
|
||||
"bombs": "Bombs",
|
||||
"bottom_left": "左下",
|
||||
"bottom_right": "右下",
|
||||
"bottom_to_top": "Bottom to Top",
|
||||
"break_anomaly_filter": "Break + Anomaly Core",
|
||||
"break_count": "破壊時間",
|
||||
"break_filter": "Break",
|
||||
"break_health": "部位破壊までのダメージ状況",
|
||||
"break_health_percentage": "部位破壊までのダメージ状況(%)",
|
||||
"break_max_count": "最大破壊数",
|
||||
"break_severe_filter": "Break + Severe",
|
||||
"break_sever_anomaly_filter": "Break + Sever + Anomaly Core",
|
||||
"break_sever_filter": "Break + Sever",
|
||||
"buff_UI": "Buff UI",
|
||||
"buildup": "蓄積値",
|
||||
"buildup_bar": "蓄積値バー",
|
||||
"buildup_bars_are_relative_to": "相対的な蓄積バー",
|
||||
@@ -76,48 +113,75 @@
|
||||
"closest": "Closest",
|
||||
"color": "カラー",
|
||||
"colors": "カラー",
|
||||
"config": "Config",
|
||||
"creature_name_label": "モンスターの名前ラベル",
|
||||
"crown": "王冠",
|
||||
"crown_thresholds": "王冠の閾値",
|
||||
"current_state": "Current State",
|
||||
"current_time": "Current Time",
|
||||
"current_value": "Current Value",
|
||||
"cutscene": "Cutscene",
|
||||
"damage": "ダメージ",
|
||||
"damage_bar": "ダメージバー",
|
||||
"damage_bars_are_relative_to": "相対的なダメージバー",
|
||||
"damage_meter_UI": "ダメージメーターUI",
|
||||
"damage_percentage_label": "ダメージ割合(%)ラベル",
|
||||
"damage_value_label": "ダメージラベル",
|
||||
"dango_skills": "Dango Skills",
|
||||
"debug": "Debug",
|
||||
"default_state": "Default State",
|
||||
"defense_label": "Defense Label",
|
||||
"delete": "Delete",
|
||||
"distance": "距離",
|
||||
"dps": "DPS",
|
||||
"dps_label": "DPSラベル",
|
||||
"dps_mode": "DPS モード",
|
||||
"during_quest": "クエスト中",
|
||||
"dragon_resistance_label": "Dragon Resistance Label",
|
||||
"duplicate": "Duplicate",
|
||||
"duration": "Duration",
|
||||
"dynamic_positioning": "動的な場所",
|
||||
"dynamically_positioned": "モンスターに追随して表示",
|
||||
"effect_level": "Effect Level",
|
||||
"element_2_label": "Element 2 Label",
|
||||
"element_label": "Element Label",
|
||||
"enable_for": "有効にする",
|
||||
"enabled": "有効",
|
||||
"endemic_life": "Endemic Life",
|
||||
"endemic_life_UI": "環境生物UI",
|
||||
"endemic_life_damage": "環境生物のダメージ",
|
||||
"endemic_life_buffs": "Endemic Life Buffs",
|
||||
"everything_seems_to_be_ok": "Everything seems to be OK!",
|
||||
"family": "Family",
|
||||
"farthest": "Farthest",
|
||||
"fight_time": "戦闘時間",
|
||||
"fill_direction": "Fill Direction",
|
||||
"filter": "フィルター",
|
||||
"filter_mode": "Filter Mode",
|
||||
"fire_resistance_label": "Fire Resistance Label",
|
||||
"first": "最初",
|
||||
"first_hit": "初撃",
|
||||
"flinch_count": "ひるみ回数",
|
||||
"foreground": "前面",
|
||||
"freeze_dps_on_quest_clear": "Freeze DPS when Quest is cleared",
|
||||
"freeze_dps_on_quest_end": "Freeze DPS on Quest End",
|
||||
"global_position_modifier": "全体的な位置の調整",
|
||||
"global_scale_modifier": "全体的なスケールの調整",
|
||||
"global_settings": "全体設定",
|
||||
"head_tracking": "Head Tracking",
|
||||
"health": "体力",
|
||||
"health_anomaly_filter": "Health + Anomaly Core",
|
||||
"health_break_anomaly_filter": "Health + Break + Anomaly Core",
|
||||
"health_break_filter": "Health + Break",
|
||||
"health_break_severe_filter": "Health + Break + Severe",
|
||||
"health_break_sever_anomaly_filter": "Health + Break + Sever + Anomaly Core",
|
||||
"health_break_sever_filter": "Health + Break + Sever",
|
||||
"health_filter": "Health",
|
||||
"health_label": "Health Label",
|
||||
"health_percentage": "ダメージ割合(%)",
|
||||
"health_severe_filter": "Health + Severe",
|
||||
"health_sever_anomaly_filter": "Health + Sever + Anomaly Core",
|
||||
"health_sever_filter": "Health + Sever",
|
||||
"height": "ヘイト",
|
||||
"hide_ailments_with_zero_buildup": "蓄積値がゼロの時に状態異常の表示を隠す",
|
||||
"hide_all_active_ailments": "全ての有効な状態異常を隠す",
|
||||
"hide_all_inactive_ailments": "全ての無効な状態異常を隠す",
|
||||
"hide_bar_for_infinite_buffs": "Hide Bar for infinite Buffs",
|
||||
"hide_dead_or_captured": "討伐済み、または捕獲済みも表示する",
|
||||
"hide_disabled_ailments": "無効な状態異常を隠す",
|
||||
"hide_inactive_ailments_with_no_buildup_support": "累積値がなく、非活性な異常状態を隠す",
|
||||
@@ -126,25 +190,37 @@
|
||||
"hide_myself": "自分自身の表示を隠す",
|
||||
"hide_other_players": "ほかのプレイヤーの表示を隠す",
|
||||
"hide_player_if_player_damage_is_zero": "プレイヤーのダメージが0の場合、プレイヤーの表示を隠す",
|
||||
"hide_servants": "Hide Followers",
|
||||
"hide_timer_for_infinite_buffs": "Hide Timer for infinite Buffs",
|
||||
"hide_total_damage": "合計ダメージの表示を隠す",
|
||||
"hide_total_if_total_damage_is_zero": "合計ダメージが0の場合、合計の表示を隠す",
|
||||
"hide_undamaged_parts": "攻撃していない部位の表示を隠す",
|
||||
"highest_health": "Highest Health",
|
||||
"highest_health_percentage": "Highest Health Percentage",
|
||||
"highlighted": "詳細表示 (ターゲット)",
|
||||
"highlighted": "詳細表示",
|
||||
"highlighted_bar": "ハイライトされたバー",
|
||||
"highlighted_buildup_bar": "ハイライトされた蓄積値バー",
|
||||
"highlighted_damage_bar": "ハイライトされたダメージバー",
|
||||
"highlighted_targeted": "詳細表示 (ターゲット)",
|
||||
"history": "History",
|
||||
"history_size": "History Size",
|
||||
"horizontal": "水平",
|
||||
"hotkeys": "ホットキー",
|
||||
"hunter_rank": "ハンターランク",
|
||||
"hunter_rank_label": "ハンターランクのラベル",
|
||||
"ice_resistance_label": "Ice Resistance Label",
|
||||
"id": "ID",
|
||||
"in_lobby": "In Lobby",
|
||||
"in_training_area": "In Training Area",
|
||||
"include": "含める情報",
|
||||
"infinite_buffs_location": "Infinite Buffs Location",
|
||||
"inside": "Inside",
|
||||
"installation_damage": "設備のダメージ",
|
||||
"installations": "Installations",
|
||||
"italic": "イタリック",
|
||||
"item_buffs": "Item Buffs",
|
||||
"join_time": "参加時間",
|
||||
"kunai_damage": "クナイダメージ",
|
||||
"killcam": "Killcam",
|
||||
"kunai": "Kunai",
|
||||
"language": "表示言語",
|
||||
"large_monster_UI": "大型モンスターUI",
|
||||
"large_monster_dynamic_UI": "大型モンスターのダイナミック表示UI",
|
||||
@@ -152,6 +228,10 @@
|
||||
"large_monster_static_UI": "大型モンスターのスタティック表示UI",
|
||||
"large_monsters": "大型モンスター",
|
||||
"last": "最後",
|
||||
"left_to_right": "Left to Right",
|
||||
"level": "Level",
|
||||
"level_label": "Level Label",
|
||||
"loading_quest": "Loading Quest",
|
||||
"loss_health": "尻尾切断までの体力",
|
||||
"loss_health_percentage": "尻尾切断までの体力(%)",
|
||||
"lowest_health": "Lowest Health",
|
||||
@@ -159,29 +239,39 @@
|
||||
"master_rank": "マスターランク",
|
||||
"max_distance": "最大距離",
|
||||
"max_monster_updates_per_tick": "モンスター情報をアップデートする間隔",
|
||||
"max_value": "Max Value",
|
||||
"me": "自分",
|
||||
"melody_effects": "Melody Effects",
|
||||
"menu_font": "メニューで使うフォント",
|
||||
"menu_font_change_disclaimer": "言語とメニューのフォントサイズを何度も変更すると、クラッシュが発生します。",
|
||||
"misc_buffs": "Misc Buffs",
|
||||
"mod_name": "MHR Overlay",
|
||||
"mode": "Mode",
|
||||
"modifiers": "全体的な調整",
|
||||
"module_visibility_on_different_screens": "画面ごとの表示設定",
|
||||
"module_visibility_based_on_game_state": "Module Visibility based on Game State",
|
||||
"modules": "モジュール",
|
||||
"monster_can_be_captured": "捕獲可能なモンスター",
|
||||
"monster_damage": "モンスターダメージ",
|
||||
"monster_id": "モンスターID",
|
||||
"monster_name": "モンスター名",
|
||||
"monster_name_label": "モンスター名ラベル",
|
||||
"monsters": "Monsters",
|
||||
"my_damage_bar_location": "自身のダメージバーの場所",
|
||||
"my_otomos": "My Buddies",
|
||||
"myself": "Myself",
|
||||
"name": "Name",
|
||||
"name_label": "Name Label",
|
||||
"new": "New",
|
||||
"none": "設定なし",
|
||||
"normal": "標準",
|
||||
"offset": "基準点からの位置",
|
||||
"offset_is_relative_to_parts": "部位表示に対する相対的な位置",
|
||||
"opacity_falloff": "透明度を上げる",
|
||||
"orientation": "並べ方",
|
||||
"other_damage": "その他のダメージ",
|
||||
"other": "Other",
|
||||
"other_player_otomos": "Other Player Buddies",
|
||||
"other_players": "他のプレイヤー",
|
||||
"otomo_damage": "オトモのダメージ",
|
||||
"otomo_moves": "Buddy Moves",
|
||||
"otomos": "Buddies",
|
||||
"outline": "Outline",
|
||||
"outside": "Outside",
|
||||
"part_health": "部位体力",
|
||||
@@ -189,79 +279,199 @@
|
||||
"part_name_label": "部位名ラベル",
|
||||
"percentage_label": "パーセンテージラベル",
|
||||
"performance": "パフォーマンス",
|
||||
"player_damage": "プレイヤーダメージ",
|
||||
"player_id": "プレイヤーID",
|
||||
"player_name": "プレイヤー名",
|
||||
"player_name_label": "プレイヤー名ラベル",
|
||||
"player_name_size_limit": "プレイヤー名のサイズ上限",
|
||||
"player_spacing": "プレイヤー表示の間隔",
|
||||
"poison_damage": "毒ダメージ",
|
||||
"players": "Players",
|
||||
"playing_quest": "Playing Quest",
|
||||
"poison": "毒",
|
||||
"position": "位置",
|
||||
"press_any_key": "何かボタンを押してください。",
|
||||
"prioritize_large_monsters": "大型モンスターを優先する",
|
||||
"quest_result_screen": "クエストクリア画面",
|
||||
"quest_end_animation": "Quest End Animation",
|
||||
"quest_end_screen": "Quest End Screen",
|
||||
"quest_end_timer": "Quest End Timer",
|
||||
"quest_start_animation": "Quest Start Animation",
|
||||
"quest_time": "クエスト時間",
|
||||
"rage": "怒り値",
|
||||
"rampage_skills": "Rampage Skills",
|
||||
"reframework_outdated": "Installed REFramework version is outdated. Please, update. Otherwise, MHR Overlay won't work correctly.",
|
||||
"relative_offset": "相対的な表示位置",
|
||||
"rename": "Rename",
|
||||
"render_highlighted_monster": "ハイライトされたモンスターをレンダリング(表示)する",
|
||||
"render_inactive_anomaly_cores": "Render Inactive Anomaly Cores",
|
||||
"render_not_highlighted_monsters": "ハイライトされていないモンスターをレンダリング(表示)する",
|
||||
"renderer": "Renderer",
|
||||
"reset": "Reset",
|
||||
"reversed_order": "逆順",
|
||||
"reward_screen": "Reward Screen",
|
||||
"right_alignment_shift": "Right Alignment Shift",
|
||||
"right_to_left": "Right to Left",
|
||||
"servant_otomos": "Servant Buddies",
|
||||
"servants": "Followers",
|
||||
"settings": "設定",
|
||||
"severe_filter": "Severe",
|
||||
"sever_anomaly_filter": "Sever + Anomaly Core",
|
||||
"sever_filter": "Sever",
|
||||
"shadow": "影",
|
||||
"show_my_otomos_separately": "Show my Buddies separately",
|
||||
"show_other_player_otomos_separately": "Show Other Player Buddies separately",
|
||||
"show_servant_otomos_separately": "Show Follower Buddies separately",
|
||||
"size": "サイズ",
|
||||
"skills": "Skills",
|
||||
"small_monster_UI": "小型モンスターUI",
|
||||
"small_monsters": "小型モンスター",
|
||||
"sorting": "ソート",
|
||||
"spacing": "間隔",
|
||||
"stamina": "スタミナ",
|
||||
"stamina_label": "Stamina Label",
|
||||
"static_orientation": "モンスター情報の配置を修正",
|
||||
"static_position": "モンスター情報の場所を修正",
|
||||
"static_sorting": "モンスター情報の並べ替えを修正",
|
||||
"static_spacing": "モンスター情報間の距離を修正",
|
||||
"statically_positioned": "モンスター情報の一覧表示",
|
||||
"stats_UI": "Stats UI",
|
||||
"status": "ステータス",
|
||||
"style": "Style",
|
||||
"summary_screen": "Summary Screen",
|
||||
"text_label": "テキストラベル",
|
||||
"thickness": "Thickness",
|
||||
"thunder_resistance_label": "Thunder Resistance Label",
|
||||
"time_UI": "タイムUI",
|
||||
"time_label": "タイムラベル",
|
||||
"time_limit": "タイムリミット(s.)",
|
||||
"timer": "Timer",
|
||||
"timer_delays": "Timer Delays",
|
||||
"timer_label": "タイマーラベル",
|
||||
"top_buildup": "最高蓄積値",
|
||||
"top_damage": "最高ダメージ",
|
||||
"top_dps": "最高DPS",
|
||||
"top_left": "左上",
|
||||
"top_right": "右上",
|
||||
"top_to_bottom": "Top to Bottom",
|
||||
"total": "Total",
|
||||
"total_buildup": "蓄積合計",
|
||||
"total_buildup_label": "合計蓄積ラベル",
|
||||
"total_buildup_value_label": "合計蓄積値ラベル",
|
||||
"total_cart_count_label": "Total Cart Count Label",
|
||||
"total_damage": "合計ダメージ",
|
||||
"total_damage_label": "合計ダメージラベル",
|
||||
"total_damage_location": "Total Damage Bar Location",
|
||||
"total_damage_offset_is_relative": "トータルダメージの表示位置を調整",
|
||||
"total_damage_value_label": "合計ダメージ値ラベル",
|
||||
"total_dps": "トータルDPS",
|
||||
"total_dps_label": "トータルDPSラベル",
|
||||
"tracked_damage_types": "ダメージタイプでの追跡",
|
||||
"tracked_monster_types": "モンスタータイプでの追跡",
|
||||
"training_area": "修練場",
|
||||
"type": "タイプ",
|
||||
"update_buffs_delay": "Update Buffs (seconds)",
|
||||
"update_is_online_delay": "Update Is Online (seconds)",
|
||||
"update_myself_position_delay": "Update Myself Position (seconds)",
|
||||
"update_player_info_delay": "Update Player Info (seconds)",
|
||||
"update_players_delay": "Update Players (seconds)",
|
||||
"update_quest_time_delay": "Update Quest Time (seconds)",
|
||||
"update_singletons_delay": "Update Singletons (seconds)",
|
||||
"update_window_size_delay": "Update Window Size (seconds)",
|
||||
"use_d2d_if_available": "Use Direct2D if available",
|
||||
"value": "Value",
|
||||
"value_label": "バリューラベル",
|
||||
"vertical": "縦",
|
||||
"viewport_offset": "表示領域からの位置",
|
||||
"visible": "表示する",
|
||||
"water_resistance_label": "Water Resistance Label",
|
||||
"weapon_skills": "Weapon Skills",
|
||||
"width": "幅",
|
||||
"word_player": "Word \"Player\"",
|
||||
"world_offset": "表示位置",
|
||||
"wyvern_riding_damage": "操竜ダメージ",
|
||||
"wyvern_riding": "Wyvern Riding",
|
||||
"x": "X",
|
||||
"y": "Y",
|
||||
"z": "Z"
|
||||
},
|
||||
"dango_skills": {
|
||||
"dango_adrenaline": "Dango Adrenaline",
|
||||
"dango_booster": "Dango Booster",
|
||||
"dango_bulker": "Dango Bulker",
|
||||
"dango_connector": "Dango Connector",
|
||||
"dango_defender": "Dango Defender",
|
||||
"dango_flyer": "Dango Flyer",
|
||||
"dango_glutton": "Dango Glutton",
|
||||
"dango_hunter": "Dango Hunter",
|
||||
"dango_insurance": "Dango Insurance",
|
||||
"dango_insurance_defense_up": "Dango Insurance Defense Up",
|
||||
"super_recovery_dango": "Super Recovery Dango"
|
||||
},
|
||||
"endemic_life": {
|
||||
"butterflame": "Butterflame",
|
||||
"clothfly": "Clothfly",
|
||||
"cutterfly": "Cutterfly",
|
||||
"gold_wirebug": "Gold Wirebug",
|
||||
"peepersects": "Peepersects",
|
||||
"red_lampsquid": "Red Lampsquid",
|
||||
"ruby_wirebug": "Ruby Wirebug",
|
||||
"stinkmink": "Stinkmink",
|
||||
"yellow_lampsquid": "Yellow Lampsquid"
|
||||
},
|
||||
"font_name": "NotoSansJP-Bold.otf",
|
||||
"item_buffs": {
|
||||
"adamant_seed": "Adamant Seed",
|
||||
"armor_ammo": "Armor Ammo",
|
||||
"armorskin": "Armorskin",
|
||||
"dash_juice": "Dash Juice",
|
||||
"demon_ammo": "Demon Ammo",
|
||||
"demon_powder": "Demon Powder",
|
||||
"demondrug": "Demondrug",
|
||||
"gourmet_fish": "Gourmet Fish",
|
||||
"hardshell_powder": "Hardshell Powder",
|
||||
"immunizer": "Immunizer",
|
||||
"mega_armorskin": "Mega Armorskin",
|
||||
"mega_demondrug": "Mega Demondrug",
|
||||
"might_seed": "Might Seed"
|
||||
},
|
||||
"melody_effects": {
|
||||
"affinity_up": "Affinity Up",
|
||||
"attack_and_affinity_up": "Attack and Affinity Up",
|
||||
"attack_and_defense_up": "Attack and Defense Up",
|
||||
"attack_up": "Attack Up",
|
||||
"blight_negated": "Blight Negated",
|
||||
"defense_up": "Defense Up",
|
||||
"divine_protection": "Divine Protection",
|
||||
"earplugs_l": "Earplugs (L)",
|
||||
"earplugs_s": "Earplugs (S)",
|
||||
"elemental_attack_boost": "Elemental Attack Boost",
|
||||
"environment_damage_negated": "Environment Damage Negated",
|
||||
"health_recovery_l": "Health Recovery (L)",
|
||||
"health_recovery_s": "Health Recovery (S)",
|
||||
"health_recovery_s_antidote": "Health Recovery (S) + Antidote",
|
||||
"health_regeneration": "Health Regeneration",
|
||||
"infernal_melody": "Infernal Melody",
|
||||
"knockbacks_negated": "Knockbacks Negated",
|
||||
"self_improvement": "Self-Improvement",
|
||||
"sharpness_extension": "Sharpness Extension",
|
||||
"sharpness_loss_reduced": "Sharpness Loss Reduced",
|
||||
"sharpness_regeneration": "Sharpness Regeneration",
|
||||
"sonic_barrier": "Sonic Barrier",
|
||||
"sonic_wave": "Sonic Wave",
|
||||
"stamina_recovery_up": "Stamina Recovery Up",
|
||||
"stamina_use_reduced": "Stamina Use Reduced",
|
||||
"stun_negated": "Stun Negated",
|
||||
"tremors_negated": "Tremors Negated",
|
||||
"wind_pressure_negated": "Wind Pressure Negated"
|
||||
},
|
||||
"misc_buffs": {
|
||||
"attack_up": "Attack Up",
|
||||
"defense_up": "Defense Up",
|
||||
"immunity": "Immunity",
|
||||
"natural_healing_up": "Natural Healing Up",
|
||||
"stamina_use_down": "Stamina Use Down"
|
||||
},
|
||||
"otomo_moves": {
|
||||
"go_fight_win": "Go, Fight, Win",
|
||||
"power_drum": "Power Drum",
|
||||
"rousing_roar": "Rousing Roar",
|
||||
"vase_of_vitality": "Vase of Vitality"
|
||||
},
|
||||
"parts": {
|
||||
"abdomen": "腹部",
|
||||
"amatsu_unknown": "?",
|
||||
"antenna": "触角",
|
||||
"arms": "腕",
|
||||
"arms_mud": "腕(泥)",
|
||||
@@ -327,5 +537,170 @@
|
||||
"wingclaw": "翼爪",
|
||||
"wingclaws": "Wingclaws",
|
||||
"wings": "翼"
|
||||
},
|
||||
"rampage_skills": {
|
||||
"chameleos_soul": "Chameleos Soul",
|
||||
"kushala_daora_soul": "Kushala Daora Soul"
|
||||
},
|
||||
"skills": {
|
||||
"adrenaline_rush": "Adrenaline Rush",
|
||||
"affinity_sliding": "Affinity Sliding",
|
||||
"agitator": "Agitator",
|
||||
"berserk": "Berserk",
|
||||
"bladescale_hone": "Bladescale Hone",
|
||||
"blood_awakening": "Blood Awakening",
|
||||
"bloodlust": "Bloodlust",
|
||||
"burst": "Burst",
|
||||
"coalescence": "Coalescence",
|
||||
"counterstrike": "Counterstrike",
|
||||
"dereliction": "Dereliction",
|
||||
"dragon_conversion_elemental_attack_up": "Dragon Conversion: Elem. Atk Up",
|
||||
"dragon_conversion_elemental_res_up": "Dragon Conversion: Elem. Res Up",
|
||||
"dragonheart": "Dragonheart",
|
||||
"embolden": "Embolden",
|
||||
"frenzied_bloodlust": "Frenzied Bloodlust",
|
||||
"furious": "Furious",
|
||||
"grinder_s": "Grinder (S)",
|
||||
"heaven_sent": "Heaven-Sent",
|
||||
"hellfire_cloak": "Hellfire Cloak",
|
||||
"heroics": "Heroics",
|
||||
"inspiration": "Inspiration",
|
||||
"intrepid_heart": "Intrepid Heart",
|
||||
"latent_power": "Latent Power",
|
||||
"maximum_might": "Maximum Might",
|
||||
"offensive_guard": "Offensive Guard",
|
||||
"partbreaker": "Partbreaker",
|
||||
"peak_performance": "Peak Performance",
|
||||
"powder_mantle_blue": "Powder Mantle (Blue)",
|
||||
"powder_mantle_red": "Powder Mantle (Red)",
|
||||
"protective_polish": "Protective Polish",
|
||||
"resentment": "Resentment",
|
||||
"resuscitate": "Resuscitate",
|
||||
"spiribirds_call": "Spiribird's Call",
|
||||
"status_trigger": "Status Trigger",
|
||||
"strife": "Strife",
|
||||
"wall_runner": "Wall Runner",
|
||||
"wind_mantle": "Wind Mantle"
|
||||
},
|
||||
"stats": {
|
||||
"affinity": "Affinity",
|
||||
"attack": "Attack",
|
||||
"defense": "Defense",
|
||||
"dragon": "Dragon",
|
||||
"dragon_resistance": "Dragon Res",
|
||||
"fire": "Fire",
|
||||
"fire_resistance": "Fire Res",
|
||||
"ice": "Ice",
|
||||
"ice_resistance": "Ice Res",
|
||||
"stamina": "Stamina",
|
||||
"thunder": "Thunder",
|
||||
"thunder_resistance": "Thunder Res",
|
||||
"water": "Water",
|
||||
"water_resistance": "Water Res"
|
||||
},
|
||||
"unicode_glyph_ranges": [
|
||||
32,
|
||||
255,
|
||||
8192,
|
||||
8303,
|
||||
11904,
|
||||
12031,
|
||||
12288,
|
||||
12543,
|
||||
12784,
|
||||
19903,
|
||||
19968,
|
||||
40959,
|
||||
63744,
|
||||
64255,
|
||||
65072,
|
||||
65103,
|
||||
65280,
|
||||
65519,
|
||||
0
|
||||
],
|
||||
"weapon_skills": {
|
||||
"bow": {
|
||||
"arc_shot_affinity": "Arc Shot: Affinity",
|
||||
"arc_shot_brace": "Arc Shot: Brace",
|
||||
"bolt_boost": "Bolt Boost",
|
||||
"herculean_draw": "Herculean Draw"
|
||||
},
|
||||
"charge_blade": {
|
||||
"element_boost": "Element Boost",
|
||||
"sword_boost_mode": "Sword Boost Mode"
|
||||
},
|
||||
"dual_blades": {
|
||||
"archdemon_mode": "Archdemon Mode",
|
||||
"ironshine_silk": "Ironshine Silk"
|
||||
},
|
||||
"great_sword": {
|
||||
"power_sheathe": "Power Sheathe"
|
||||
},
|
||||
"gunlance": {
|
||||
"erupting_cannon": "Erupting Cannon",
|
||||
"ground_splitter": "Ground Splitter"
|
||||
},
|
||||
"hammer": {
|
||||
"impact_burst": "Impact Burst"
|
||||
},
|
||||
"heavy_bowgun": {
|
||||
"counter_charger": "Counter Charger",
|
||||
"overheat": "Overheat",
|
||||
"rising_moon": "Rising Moon",
|
||||
"setting_sun": "Setting Sun",
|
||||
"wyvernsnipe_reload": "Wyvernsnipe Reload"
|
||||
},
|
||||
"hunting_horn": {
|
||||
"bead_of_resonance": "Bead of Resonance",
|
||||
"silkbind_shockwave": "Silkbind Shockwave",
|
||||
"sonic_bloom": "Sonic Bloom"
|
||||
},
|
||||
"insect_glaive": {
|
||||
"all_extracts_mix": "All Extracts Mix",
|
||||
"orange_extract": "Orange Extract",
|
||||
"red_extract": "Red Extract",
|
||||
"white_extract": "White Extract"
|
||||
},
|
||||
"lance": {
|
||||
"anchor_rage": "Anchor Rage",
|
||||
"spiral_thrust": "Spiral Thrust",
|
||||
"twin_wine": "Twin Wine"
|
||||
},
|
||||
"light_bowgun": {
|
||||
"fanning_maneuver": "Fanning Maneuver",
|
||||
"wyvernblast_reload": "Wyvernblast Reload"
|
||||
},
|
||||
"long_sword": {
|
||||
"harvest_moon": "Harvest Moon",
|
||||
"iai_slash": "Iai Slash",
|
||||
"soaring_kick": "Soaring Kick",
|
||||
"spirit_gauge": "Spirit Gauge",
|
||||
"spirit_gauge_autofill": "Spirit Gauge Autofill"
|
||||
},
|
||||
"switch_axe": {
|
||||
"amped_state": "Amped State",
|
||||
"axe_heavy_slam": "Axe: Heavy Slam",
|
||||
"switch_charger": "Switch Charger"
|
||||
},
|
||||
"sword_and_shield": {
|
||||
"destroyer_oil": "Destroyer Oil"
|
||||
}
|
||||
},
|
||||
"weapons": {
|
||||
"bow": "Bow",
|
||||
"charge_blade": "Charge Blade",
|
||||
"dual_blades": "Dual Blades",
|
||||
"great_sword": "Great Sword",
|
||||
"gunlance": "Gunlance",
|
||||
"hammer": "Hammer",
|
||||
"heavy_bowgun": "Heavy Bowgun",
|
||||
"hunting_horn": "Hunting Horn",
|
||||
"insect_glaive": "Insect Glaive",
|
||||
"lance": "Lance",
|
||||
"light_bowgun": "Light Bowgun",
|
||||
"long_sword": "Long Sword",
|
||||
"switch_axe": "Switch Axe",
|
||||
"sword_and_shield": "Sword & Shield"
|
||||
}
|
||||
}
|
||||
@@ -3,11 +3,15 @@
|
||||
"HP": "체력:",
|
||||
"buildup": "누적치:",
|
||||
"gold": "금관",
|
||||
"lv": "",
|
||||
"mini": "최소",
|
||||
"otomo": "동반자",
|
||||
"part_anomaly_core": "괴이핵",
|
||||
"part_break": "파괴",
|
||||
"part_sever": "절단",
|
||||
"player": "헌터",
|
||||
"rage": "분노:",
|
||||
"servant": "맹우",
|
||||
"silver": "은관",
|
||||
"stamina": "스태미나:",
|
||||
"total_buildup": "총 누적치",
|
||||
@@ -15,30 +19,54 @@
|
||||
},
|
||||
"ailments": {
|
||||
"blast": "폭파",
|
||||
"blastblight": "Blastblight",
|
||||
"bleeding": "Bleeding",
|
||||
"bloodblight": "Bloodblight",
|
||||
"deadly_poison": "Deadly Poison",
|
||||
"defense_down": "Defense Down",
|
||||
"dragonblight": "Dragonblight",
|
||||
"dung_bomb": "거름탄",
|
||||
"engulfed": "Engulfed",
|
||||
"exhaust": "탈진",
|
||||
"fall_otomo_trap": "동반자 구멍 함정",
|
||||
"fall_trap": "구멍 함정",
|
||||
"falling_asleep": "Falling Asleep",
|
||||
"fireblight": "불바위구리",
|
||||
"flash": "섬광",
|
||||
"frenzy": "Frenzy",
|
||||
"frenzy_infection": "Frenzy Infection",
|
||||
"frenzy_overcome": "Frenzy Overcome",
|
||||
"frostblight": "Frostblight",
|
||||
"hellfireblight": "Hellfireblight",
|
||||
"iceblight": "진흙구리",
|
||||
"leeched": "Leeched",
|
||||
"major_bubbleblight": "Major Bubbleblight",
|
||||
"minor_bubbleblight": "Minor Bubbleblight",
|
||||
"muck": "Muck",
|
||||
"paralysis": "마비",
|
||||
"poison": "독",
|
||||
"quick_sand": "유사(모래함정)",
|
||||
"resistance_down": "Resistance Down",
|
||||
"ride": "용조종",
|
||||
"roar": "Roar",
|
||||
"shock_otomo_trap": "동반자 마비덫",
|
||||
"shock_trap": "마비덫",
|
||||
"sleep": "수면",
|
||||
"steel_fang": "강철아",
|
||||
"stench": "Stench",
|
||||
"stun": "기절",
|
||||
"thunderblight": "번개털구리",
|
||||
"tranq_bomb": "포획용마취옥",
|
||||
"waterblight": "진흙구리"
|
||||
"tremor": "Tremor",
|
||||
"waterblight": "진흙구리",
|
||||
"webbed": "Webbed"
|
||||
},
|
||||
"customization_menu": {
|
||||
"UI_font": "UI 글꼴",
|
||||
"UI_font_notice": "글꼴 변경시 스크립트를 리로드 해야합니다!",
|
||||
"abnormal_statuses": "Abnormal Statuses",
|
||||
"activation_count": "활성 횟수",
|
||||
"affinity_label": "Affinity Label",
|
||||
"ailment_buildups": "상태이상 누적치",
|
||||
"ailment_name": "상태이상 이름",
|
||||
"ailment_name_label": "상태이상 이름 정보",
|
||||
@@ -46,26 +74,35 @@
|
||||
"ailments": "상태이상",
|
||||
"all_UI": "모든 UI",
|
||||
"anchor": "기준",
|
||||
"anomaly_cores": "괴이핵",
|
||||
"anomaly_filter": "괴이핵",
|
||||
"anomaly_health": "괴이핵 체력",
|
||||
"anomaly_health_percentage": "괴이핵 체력 비율",
|
||||
"apply": "적용",
|
||||
"assign_new_key": "새 키를 할당",
|
||||
"attack_label": "Attack Label",
|
||||
"auto_highlight": "자동 타겟 설정",
|
||||
"background": "배경색",
|
||||
"bar": "바",
|
||||
"blast_damage": "폭파 대미지",
|
||||
"bar": "막대",
|
||||
"blast": "폭파",
|
||||
"body_parts": "부위",
|
||||
"bold": "굵게",
|
||||
"bomb_damage": "폭탄 대미지",
|
||||
"bottom_left": "좌하단",
|
||||
"bottom_right": "우하단",
|
||||
"bombs": "폭탄",
|
||||
"bottom_left": "왼쪽 아래",
|
||||
"bottom_right": "오른쪽 아래",
|
||||
"bottom_to_top": "아래에서 위로",
|
||||
"break_anomaly_filter": "파괴 + 괴이핵",
|
||||
"break_count": "파괴 횟수",
|
||||
"break_filter": "파괴",
|
||||
"break_health": "파괴 수치",
|
||||
"break_health_percentage": "파괴 수치 비율",
|
||||
"break_max_count": "최대 파괴 횟수",
|
||||
"break_severe_filter": "파괴 + 절단",
|
||||
"break_sever_anomaly_filter": "파괴 + 절단 + 괴이핵",
|
||||
"break_sever_filter": "파괴 + 절단",
|
||||
"buff_UI": "버프 UI",
|
||||
"buildup": "누적치",
|
||||
"buildup_bar": "누적치 바",
|
||||
"buildup_bars_are_relative_to": "기준으로 누적치 바",
|
||||
"buildup_bar": "누적치 막대",
|
||||
"buildup_bars_are_relative_to": "기준으로 누적치 막대",
|
||||
"buildup_percentage": "누적치 비율",
|
||||
"buildup_percentage_label": "누적치 비율 정보",
|
||||
"buildup_value_label": "누적치 값 정보",
|
||||
@@ -76,82 +113,125 @@
|
||||
"closest": "가장 가까운",
|
||||
"color": "색상",
|
||||
"colors": "색상",
|
||||
"config": "설정",
|
||||
"creature_name_label": "환경생물 이름 정보",
|
||||
"crown": "금관",
|
||||
"crown_thresholds": "금관 판정값",
|
||||
"current_state": "현재 상태",
|
||||
"current_time": "Current Time",
|
||||
"current_value": "현재 값",
|
||||
"cutscene": "컷신",
|
||||
"damage": "대미지",
|
||||
"damage_bar": "대미지 바",
|
||||
"damage_bars_are_relative_to": "기준으로 대미지 바",
|
||||
"damage_bar": "대미지 막대",
|
||||
"damage_bars_are_relative_to": "대미지 막대 순서",
|
||||
"damage_meter_UI": "대미지 미터 UI",
|
||||
"damage_percentage_label": "대미지 비율 정보",
|
||||
"damage_value_label": "대미지 값 정보",
|
||||
"distance": "거리",
|
||||
"dango_skills": "Dango Skills",
|
||||
"debug": "Debug",
|
||||
"default_state": "기본 상태",
|
||||
"defense_label": "Defense Label",
|
||||
"delete": "삭제하기",
|
||||
"distance": "간격",
|
||||
"dps": "DPS",
|
||||
"dps_label": "DPS 정보",
|
||||
"dps_mode": "DPS 모드",
|
||||
"during_quest": "퀘스트 중",
|
||||
"dragon_resistance_label": "Dragon Resistance Label",
|
||||
"duplicate": "복제하기",
|
||||
"duration": "지속시간",
|
||||
"dynamic_positioning": "유동 위치",
|
||||
"dynamically_positioned": "유동 위치 UI",
|
||||
"effect_level": "Effect Level",
|
||||
"element_2_label": "Element 2 Label",
|
||||
"element_label": "Element Label",
|
||||
"enable_for": "표시 대상",
|
||||
"enabled": "사용함",
|
||||
"endemic_life": "환경생물",
|
||||
"endemic_life_UI": "환경생물 UI",
|
||||
"endemic_life_damage": "환경생물 대미지",
|
||||
"endemic_life_buffs": "Endemic Life Buffs",
|
||||
"everything_seems_to_be_ok": "Everything seems to be OK!",
|
||||
"family": "글꼴",
|
||||
"farthest": "가장 멀리있는",
|
||||
"fight_time": "전투 시간",
|
||||
"fill_direction": "채우는 방향",
|
||||
"filter": "필터",
|
||||
"first": "처음",
|
||||
"filter_mode": "필터 모드",
|
||||
"fire_resistance_label": "Fire Resistance Label",
|
||||
"first": "맨 앞",
|
||||
"first_hit": "첫 공격",
|
||||
"flinch_count": "경직 횟수",
|
||||
"foreground": "전경색",
|
||||
"freeze_dps_on_quest_clear": "퀘스트 종료시 DPS 집계 정지",
|
||||
"freeze_dps_on_quest_end": "퀘스트 종료시 DPS 멈춤",
|
||||
"global_position_modifier": "전역 위치 배율",
|
||||
"global_scale_modifier": "전역 크기 배율",
|
||||
"global_settings": "전역 설정",
|
||||
"head_tracking": "Head Tracking",
|
||||
"health": "체력",
|
||||
"health_anomaly_filter": "체력 + 괴이핵",
|
||||
"health_break_anomaly_filter": "체력 + 파괴 + 괴이핵",
|
||||
"health_break_filter": "체력 + 파괴",
|
||||
"health_break_severe_filter": "체력 + 파괴 + 절단",
|
||||
"health_break_sever_anomaly_filter": "체력 + 파괴 + 절단 + 괴이핵",
|
||||
"health_break_sever_filter": "체력 + 파괴 + 절단",
|
||||
"health_filter": "체력",
|
||||
"health_label": "Health Label",
|
||||
"health_percentage": "체력 비율",
|
||||
"health_severe_filter": "체력 + 절단",
|
||||
"health_sever_anomaly_filter": "체력 + 절단 + 괴이핵",
|
||||
"health_sever_filter": "체력 + 절단",
|
||||
"height": "높이",
|
||||
"hide_ailments_with_zero_buildup": "누적치가 0이면 상태이상 숨김",
|
||||
"hide_all_active_ailments": "걸린 상태이상 모두 숨김",
|
||||
"hide_all_inactive_ailments": "걸리지 않은 상태이상 모두 숨김",
|
||||
"hide_dead_or_captured": "토벌되거나 포획되면 숨김",
|
||||
"hide_disabled_ailments": "비활성화된 상태이상 숨김",
|
||||
"hide_inactive_ailments_with_no_buildup_support": "누적치가 없고 걸리지 않은 상태이상 숨김",
|
||||
"hide_inactive_creatures": "쿨타임인 환경생물 숨김",
|
||||
"hide_module_if_total_damage_is_zero": "총 대미지가 0이면 UI 숨김",
|
||||
"hide_myself": "내 정보 숨김",
|
||||
"hide_other_players": "다른 헌터 정보 숨김",
|
||||
"hide_player_if_player_damage_is_zero": "헌터 대미지가 0이면 헌터 숨김",
|
||||
"hide_total_damage": "모든 대미지 숨김",
|
||||
"hide_total_if_total_damage_is_zero": "총 대미지가 0이면 모두 숨김이 높은",
|
||||
"hide_undamaged_parts": "피해를 입히지 않은 부위 숨김",
|
||||
"hide_ailments_with_zero_buildup": "누적치가 0이면 상태이상 표시 안 함",
|
||||
"hide_all_active_ailments": "걸린 상태이상 모두 표시 안 함",
|
||||
"hide_all_inactive_ailments": "걸리지 않은 상태이상 모두 표시 안 함",
|
||||
"hide_bar_for_infinite_buffs": "무한 버프의 막대는 표시 안 함",
|
||||
"hide_dead_or_captured": "토벌되거나 포획되면 표시 안 함",
|
||||
"hide_disabled_ailments": "비활성화된 상태이상 표시 안 함",
|
||||
"hide_inactive_ailments_with_no_buildup_support": "누적치가 없고 걸리지 않은 상태이상 표시 안 함",
|
||||
"hide_inactive_creatures": "쿨타임인 환경생물 표시 안 함",
|
||||
"hide_module_if_total_damage_is_zero": "총 대미지가 0이면 UI 표시 안 함",
|
||||
"hide_myself": "내 정보 표시 안 함",
|
||||
"hide_other_players": "다른 헌터 정보 표시 안 함",
|
||||
"hide_player_if_player_damage_is_zero": "헌터 대미지가 0이면 헌터 표시 안 함",
|
||||
"hide_servants": "맹우 표시 안 함",
|
||||
"hide_timer_for_infinite_buffs": "무한 버프는 표시 안 함",
|
||||
"hide_total_damage": "모든 대미지 표시 안 함",
|
||||
"hide_total_if_total_damage_is_zero": "총 대미지가 0이면 모두 표시 안 함",
|
||||
"hide_undamaged_parts": "피해를 입히지 않은 부위 표시 안 함",
|
||||
"highest_health": "가장 체력이 높은",
|
||||
"highest_health_percentage": "가장 체력 비율이 높은",
|
||||
"highlighted": "타겟이 된 몬스터 표시",
|
||||
"highlighted_bar": "타겟이 된 몬스터 바",
|
||||
"highlighted_buildup_bar": "타겟이 된 몬스터 누적치 바",
|
||||
"highlighted_damage_bar": "타겟이 된 몬스터 대미지 바",
|
||||
"highlighted": "주시대상",
|
||||
"highlighted_bar": "주시대상 몬스터 막대",
|
||||
"highlighted_buildup_bar": "주시대상 몬스터 누적치 막대",
|
||||
"highlighted_damage_bar": "주시대상 몬스터 대미지 막대",
|
||||
"highlighted_targeted": "주시대상 몬스터 표시",
|
||||
"history": "History",
|
||||
"history_size": "History Size",
|
||||
"horizontal": "가로",
|
||||
"hotkeys": "단축키",
|
||||
"hunter_rank": "헌터 랭크",
|
||||
"hunter_rank_label": "헌터 랭크 정보",
|
||||
"ice_resistance_label": "Ice Resistance Label",
|
||||
"id": "ID",
|
||||
"in_lobby": "로비 내",
|
||||
"in_training_area": "훈련구역 내",
|
||||
"include": "포함",
|
||||
"infinite_buffs_location": "Infinite Buffs Location",
|
||||
"inside": "내부",
|
||||
"installation_damage": "설비 대미지",
|
||||
"installations": "설치",
|
||||
"italic": "기울임",
|
||||
"item_buffs": "Item Buffs",
|
||||
"join_time": "참가 시간",
|
||||
"kunai_damage": "쿠나이 대미지",
|
||||
"killcam": "처치 영상",
|
||||
"kunai": "쿠나이",
|
||||
"language": "언어",
|
||||
"large_monster_UI": "대형 몬스터 UI",
|
||||
"large_monster_dynamic_UI": "대형 몬스터 유동 UI",
|
||||
"large_monster_highlighted_UI": "타겟이 된 대형 몬스터 UI",
|
||||
"large_monster_highlighted_UI": "주시대상 대형 몬스터 UI",
|
||||
"large_monster_static_UI": "대형 몬스터 고정 UI",
|
||||
"large_monsters": "대형 몬스터",
|
||||
"last": "마지막",
|
||||
"last": "맨 뒤",
|
||||
"left_to_right": "왼쪽에서 오른쪽",
|
||||
"level": "레벨",
|
||||
"level_label": "레벨 정보",
|
||||
"loading_quest": "퀘스트 로딩 중",
|
||||
"loss_health": "절단 수치",
|
||||
"loss_health_percentage": "절단 수치 비율",
|
||||
"lowest_health": "가장 체력이 낮은",
|
||||
@@ -159,29 +239,39 @@
|
||||
"master_rank": "마스터 랭크",
|
||||
"max_distance": "최대 거리",
|
||||
"max_monster_updates_per_tick": "틱당 최대 몬스터 갱신 횟수",
|
||||
"max_value": "최대값",
|
||||
"me": "나",
|
||||
"melody_effects": "Melody Effects",
|
||||
"menu_font": "메뉴 글꼴",
|
||||
"menu_font_change_disclaimer": "언어 및 메뉴 글꼴 크기를 여러 번 변경하면 비정상 종료가 될 수 있습니다!",
|
||||
"misc_buffs": "Misc Buffs",
|
||||
"mod_name": "MHR Overlay",
|
||||
"mode": "모드",
|
||||
"modifiers": "설정 배율",
|
||||
"module_visibility_on_different_screens": "상황별 UI 표시",
|
||||
"modules": "UI",
|
||||
"module_visibility_based_on_game_state": "게임 상태에 따라 모듈 표시",
|
||||
"modules": "모듈",
|
||||
"monster_can_be_captured": "몬스터 포획 가능",
|
||||
"monster_damage": "몬스터 대미지",
|
||||
"monster_id": "Monster ID",
|
||||
"monster_id": "몬스터 ID",
|
||||
"monster_name": "몬스터명",
|
||||
"monster_name_label": "몬스터명 정보",
|
||||
"my_damage_bar_location": "내 대미지 바 위치",
|
||||
"monsters": "몬스터",
|
||||
"my_damage_bar_location": "내 대미지 막대 위치",
|
||||
"my_otomos": "내 동반자",
|
||||
"myself": "나",
|
||||
"name": "이름",
|
||||
"name_label": "이름 정보",
|
||||
"new": "새로 만들기",
|
||||
"none": "없음",
|
||||
"normal": "보통",
|
||||
"offset": "거리",
|
||||
"offset_is_relative_to_parts": "거리를 부위 기준으로",
|
||||
"normal": "기본",
|
||||
"offset": "오프셋",
|
||||
"offset_is_relative_to_parts": "오프셋을 부위 기준으로",
|
||||
"opacity_falloff": "투명도 감소",
|
||||
"orientation": "방향",
|
||||
"other_damage": "기타 대미지",
|
||||
"other": "기타",
|
||||
"other_player_otomos": "다른 플레이어 동반자",
|
||||
"other_players": "다른 헌터",
|
||||
"otomo_damage": "동반자 대미지",
|
||||
"otomo_moves": "Buddy Moves",
|
||||
"otomos": "동반자",
|
||||
"outline": "외곽선",
|
||||
"outside": "외부",
|
||||
"part_health": "부위 수치",
|
||||
@@ -189,79 +279,199 @@
|
||||
"part_name_label": "부위 정보",
|
||||
"percentage_label": "비율 정보",
|
||||
"performance": "성능",
|
||||
"player_damage": "헌터 대미지",
|
||||
"player_id": "헌터 ID",
|
||||
"player_name": "헌터명",
|
||||
"player_name_label": "헌터명 정보",
|
||||
"player_name_size_limit": "헌터명 크기 제한",
|
||||
"player_spacing": "플레이어 간격",
|
||||
"poison_damage": "독 대미지",
|
||||
"players": "모든 플레이어",
|
||||
"playing_quest": "퀘스트 중",
|
||||
"poison": "독",
|
||||
"position": "위치",
|
||||
"press_any_key": "설정할 키를 누르세요...",
|
||||
"prioritize_large_monsters": "대형 몬스터를 우선적으로",
|
||||
"quest_result_screen": "퀘스트 결과 화면",
|
||||
"quest_end_animation": "퀘스트 종료 영상",
|
||||
"quest_end_screen": "퀘스트 종료 화면",
|
||||
"quest_end_timer": "퀘스트 종료 타이머",
|
||||
"quest_start_animation": "퀘스트 시작 영상",
|
||||
"quest_time": "퀘스트 시간",
|
||||
"rage": "분노",
|
||||
"rampage_skills": "Rampage Skills",
|
||||
"reframework_outdated": "설치된 REFramework가 구버전입니다. 업데이트 하지 않으면 MHR Overlay가 제대로 동작하지 않을 수 있습니다.",
|
||||
"relative_offset": "상대적 위치 거리",
|
||||
"render_highlighted_monster": "타겟이 된 몬스터 표시",
|
||||
"render_not_highlighted_monsters": "타겟이 아닌 몬스터 표시",
|
||||
"relative_offset": "상대적 위치 오프셋",
|
||||
"rename": "이름 변경",
|
||||
"render_highlighted_monster": "주시대상 몬스터 표시",
|
||||
"render_inactive_anomaly_cores": "비활성화 된 괴이핵 표시",
|
||||
"render_not_highlighted_monsters": "주시대상이 아닌 아닌 몬스터 표시",
|
||||
"renderer": "렌더링",
|
||||
"reset": "리셋",
|
||||
"reversed_order": "역순",
|
||||
"reward_screen": "보상 화면",
|
||||
"right_alignment_shift": "우측정렬 이동",
|
||||
"right_to_left": "오른쪽에서 왼쪽",
|
||||
"servant_otomos": "맹우 동반자",
|
||||
"servants": "맹우",
|
||||
"settings": "설정",
|
||||
"severe_filter": "절단",
|
||||
"sever_anomaly_filter": "절단 + 괴이핵",
|
||||
"sever_filter": "절단",
|
||||
"shadow": "그림자",
|
||||
"show_my_otomos_separately": "내 동반자를 따로",
|
||||
"show_other_player_otomos_separately": "다른 플레이어의 동반자를 따로",
|
||||
"show_servant_otomos_separately": "맹우의 동반자를 따로",
|
||||
"size": "크기",
|
||||
"skills": "Skills",
|
||||
"small_monster_UI": "소형 몬스터 UI",
|
||||
"small_monsters": "소형 몬스터",
|
||||
"sorting": "정렬방법",
|
||||
"spacing": "간격",
|
||||
"stamina": "스태미나",
|
||||
"stamina_label": "Stamina Label",
|
||||
"static_orientation": "고정 방향",
|
||||
"static_position": "고정 위치",
|
||||
"static_sorting": "고정 정렬방법",
|
||||
"static_spacing": "고정 간격",
|
||||
"statically_positioned": "고정 위치 UI",
|
||||
"stats_UI": "Stats UI",
|
||||
"status": "상태",
|
||||
"style": "스타일",
|
||||
"summary_screen": "결과 요약 화면",
|
||||
"text_label": "텍스트 정보",
|
||||
"thickness": "두께",
|
||||
"thunder_resistance_label": "Thunder Resistance Label",
|
||||
"time_UI": "시간 UI",
|
||||
"time_label": "시간 정보",
|
||||
"time_limit": "시간 제한 (단위: 초)",
|
||||
"timer": "타이머",
|
||||
"timer_delays": "Timer Delays",
|
||||
"timer_label": "타이머 정보",
|
||||
"top_buildup": "총 누적치",
|
||||
"top_damage": "최고 대미지",
|
||||
"top_dps": "최고 DPS",
|
||||
"top_left": "좌상단",
|
||||
"top_right": "우상단",
|
||||
"top_left": "왼쪽 위",
|
||||
"top_right": "오른쪽 위",
|
||||
"top_to_bottom": "위에서 아래",
|
||||
"total": "전체",
|
||||
"total_buildup": "총 누적치",
|
||||
"total_buildup_label": "총 누적치 정보",
|
||||
"total_buildup_value_label": "총 누적치 값 정보",
|
||||
"total_cart_count_label": "총 수레 횟수 정보",
|
||||
"total_damage": "총 대미지",
|
||||
"total_damage_label": "총 대미지 정보",
|
||||
"total_damage_offset_is_relative": "총 대미지 거리를 상대적 값으로",
|
||||
"total_damage_location": "총 대미지 막대 위치",
|
||||
"total_damage_offset_is_relative": "총 대미지 오프셋을 상대적 값으로",
|
||||
"total_damage_value_label": "총 대미지 값 정보",
|
||||
"total_dps": "총 DPS",
|
||||
"total_dps_label": "총 DPS 정보",
|
||||
"tracked_damage_types": "추적할 대미지 종류",
|
||||
"tracked_monster_types": "추적할 몬스터 타입",
|
||||
"training_area": "훈련장",
|
||||
"type": "순으로",
|
||||
"type": "종류",
|
||||
"update_buffs_delay": "Update Buffs (seconds)",
|
||||
"update_is_online_delay": "Update Is Online (seconds)",
|
||||
"update_myself_position_delay": "Update Myself Position (seconds)",
|
||||
"update_player_info_delay": "Update Player Info (seconds)",
|
||||
"update_players_delay": "Update Players (seconds)",
|
||||
"update_quest_time_delay": "Update Quest Time (seconds)",
|
||||
"update_singletons_delay": "Update Singletons (seconds)",
|
||||
"update_window_size_delay": "Update Window Size (seconds)",
|
||||
"use_d2d_if_available": "가능한 Direct2D를 사용함",
|
||||
"value": "Value",
|
||||
"value_label": "값 정보",
|
||||
"vertical": "세로",
|
||||
"viewport_offset": "뷰포트 거리",
|
||||
"viewport_offset": "뷰포트 오프셋",
|
||||
"visible": "표시함",
|
||||
"water_resistance_label": "Water Resistance Label",
|
||||
"weapon_skills": "Weapon Skills",
|
||||
"width": "너비",
|
||||
"word_player": "\"헌터\" 명칭",
|
||||
"world_offset": "전역 거리",
|
||||
"wyvern_riding_damage": "용조종 대미지",
|
||||
"world_offset": "전역 오프셋",
|
||||
"wyvern_riding": "용조종",
|
||||
"x": "X",
|
||||
"y": "Y",
|
||||
"z": "Z"
|
||||
},
|
||||
"dango_skills": {
|
||||
"dango_adrenaline": "Dango Adrenaline",
|
||||
"dango_booster": "Dango Booster",
|
||||
"dango_bulker": "Dango Bulker",
|
||||
"dango_connector": "Dango Connector",
|
||||
"dango_defender": "Dango Defender",
|
||||
"dango_flyer": "Dango Flyer",
|
||||
"dango_glutton": "Dango Glutton",
|
||||
"dango_hunter": "Dango Hunter",
|
||||
"dango_insurance": "Dango Insurance",
|
||||
"dango_insurance_defense_up": "Dango Insurance Defense Up",
|
||||
"super_recovery_dango": "Super Recovery Dango"
|
||||
},
|
||||
"endemic_life": {
|
||||
"butterflame": "Butterflame",
|
||||
"clothfly": "Clothfly",
|
||||
"cutterfly": "Cutterfly",
|
||||
"gold_wirebug": "Gold Wirebug",
|
||||
"peepersects": "Peepersects",
|
||||
"red_lampsquid": "Red Lampsquid",
|
||||
"ruby_wirebug": "Ruby Wirebug",
|
||||
"stinkmink": "Stinkmink",
|
||||
"yellow_lampsquid": "Yellow Lampsquid"
|
||||
},
|
||||
"font_name": "NotoSansKR-Bold.otf",
|
||||
"item_buffs": {
|
||||
"adamant_seed": "Adamant Seed",
|
||||
"armor_ammo": "Armor Ammo",
|
||||
"armorskin": "Armorskin",
|
||||
"dash_juice": "Dash Juice",
|
||||
"demon_ammo": "Demon Ammo",
|
||||
"demon_powder": "Demon Powder",
|
||||
"demondrug": "Demondrug",
|
||||
"gourmet_fish": "Gourmet Fish",
|
||||
"hardshell_powder": "Hardshell Powder",
|
||||
"immunizer": "Immunizer",
|
||||
"mega_armorskin": "Mega Armorskin",
|
||||
"mega_demondrug": "Mega Demondrug",
|
||||
"might_seed": "Might Seed"
|
||||
},
|
||||
"melody_effects": {
|
||||
"affinity_up": "Affinity Up",
|
||||
"attack_and_affinity_up": "Attack and Affinity Up",
|
||||
"attack_and_defense_up": "Attack and Defense Up",
|
||||
"attack_up": "Attack Up",
|
||||
"blight_negated": "Blight Negated",
|
||||
"defense_up": "Defense Up",
|
||||
"divine_protection": "Divine Protection",
|
||||
"earplugs_l": "Earplugs (L)",
|
||||
"earplugs_s": "Earplugs (S)",
|
||||
"elemental_attack_boost": "Elemental Attack Boost",
|
||||
"environment_damage_negated": "Environment Damage Negated",
|
||||
"health_recovery_l": "Health Recovery (L)",
|
||||
"health_recovery_s": "Health Recovery (S)",
|
||||
"health_recovery_s_antidote": "Health Recovery (S) + Antidote",
|
||||
"health_regeneration": "Health Regeneration",
|
||||
"infernal_melody": "Infernal Melody",
|
||||
"knockbacks_negated": "Knockbacks Negated",
|
||||
"self_improvement": "Self-Improvement",
|
||||
"sharpness_extension": "Sharpness Extension",
|
||||
"sharpness_loss_reduced": "Sharpness Loss Reduced",
|
||||
"sharpness_regeneration": "Sharpness Regeneration",
|
||||
"sonic_barrier": "Sonic Barrier",
|
||||
"sonic_wave": "Sonic Wave",
|
||||
"stamina_recovery_up": "Stamina Recovery Up",
|
||||
"stamina_use_reduced": "Stamina Use Reduced",
|
||||
"stun_negated": "Stun Negated",
|
||||
"tremors_negated": "Tremors Negated",
|
||||
"wind_pressure_negated": "Wind Pressure Negated"
|
||||
},
|
||||
"misc_buffs": {
|
||||
"attack_up": "Attack Up",
|
||||
"defense_up": "Defense Up",
|
||||
"immunity": "Immunity",
|
||||
"natural_healing_up": "Natural Healing Up",
|
||||
"stamina_use_down": "Stamina Use Down"
|
||||
},
|
||||
"otomo_moves": {
|
||||
"go_fight_win": "Go, Fight, Win",
|
||||
"power_drum": "Power Drum",
|
||||
"rousing_roar": "Rousing Roar",
|
||||
"vase_of_vitality": "Vase of Vitality"
|
||||
},
|
||||
"parts": {
|
||||
"abdomen": "배",
|
||||
"amatsu_unknown": "?",
|
||||
"antenna": "더듬이",
|
||||
"arms": "팔",
|
||||
"arms_mud": "팔(진흙)",
|
||||
@@ -318,7 +528,7 @@
|
||||
"tail_mud": "꼬리(진흙)",
|
||||
"tail_tip": "꼬리끝",
|
||||
"tail_windsac": "꼬리(바람주머니)",
|
||||
"thundersacs": "Thundersacs",
|
||||
"thundersacs": "번개주머니",
|
||||
"torso": "몸통",
|
||||
"torso_mud": "몸통(진흙)",
|
||||
"unknown": "?",
|
||||
@@ -327,5 +537,176 @@
|
||||
"wingclaw": "날개발톱",
|
||||
"wingclaws": "날개발톱",
|
||||
"wings": "날개"
|
||||
},
|
||||
"rampage_skills": {
|
||||
"chameleos_soul": "Chameleos Soul",
|
||||
"kushala_daora_soul": "Kushala Daora Soul"
|
||||
},
|
||||
"skills": {
|
||||
"adrenaline_rush": "Adrenaline Rush",
|
||||
"affinity_sliding": "Affinity Sliding",
|
||||
"agitator": "Agitator",
|
||||
"berserk": "Berserk",
|
||||
"bladescale_hone": "Bladescale Hone",
|
||||
"blood_awakening": "Blood Awakening",
|
||||
"bloodlust": "Bloodlust",
|
||||
"burst": "Burst",
|
||||
"coalescence": "Coalescence",
|
||||
"counterstrike": "Counterstrike",
|
||||
"dereliction": "Dereliction",
|
||||
"dragon_conversion_elemental_attack_up": "Dragon Conversion: Elem. Atk Up",
|
||||
"dragon_conversion_elemental_res_up": "Dragon Conversion: Elem. Res Up",
|
||||
"dragonheart": "Dragonheart",
|
||||
"embolden": "Embolden",
|
||||
"frenzied_bloodlust": "Frenzied Bloodlust",
|
||||
"furious": "Furious",
|
||||
"grinder_s": "Grinder (S)",
|
||||
"heaven_sent": "Heaven-Sent",
|
||||
"hellfire_cloak": "Hellfire Cloak",
|
||||
"heroics": "Heroics",
|
||||
"inspiration": "Inspiration",
|
||||
"intrepid_heart": "Intrepid Heart",
|
||||
"latent_power": "Latent Power",
|
||||
"maximum_might": "Maximum Might",
|
||||
"offensive_guard": "Offensive Guard",
|
||||
"partbreaker": "Partbreaker",
|
||||
"peak_performance": "Peak Performance",
|
||||
"powder_mantle_blue": "Powder Mantle (Blue)",
|
||||
"powder_mantle_red": "Powder Mantle (Red)",
|
||||
"protective_polish": "Protective Polish",
|
||||
"resentment": "Resentment",
|
||||
"resuscitate": "Resuscitate",
|
||||
"spiribirds_call": "Spiribird's Call",
|
||||
"status_trigger": "Status Trigger",
|
||||
"strife": "Strife",
|
||||
"wall_runner": "Wall Runner",
|
||||
"wind_mantle": "Wind Mantle"
|
||||
},
|
||||
"stats": {
|
||||
"affinity": "Affinity",
|
||||
"attack": "Attack",
|
||||
"defense": "Defense",
|
||||
"dragon": "Dragon",
|
||||
"dragon_resistance": "Dragon Res",
|
||||
"fire": "Fire",
|
||||
"fire_resistance": "Fire Res",
|
||||
"ice": "Ice",
|
||||
"ice_resistance": "Ice Res",
|
||||
"stamina": "Stamina",
|
||||
"thunder": "Thunder",
|
||||
"thunder_resistance": "Thunder Res",
|
||||
"water": "Water",
|
||||
"water_resistance": "Water Res"
|
||||
},
|
||||
"unicode_glyph_ranges": [
|
||||
32,
|
||||
255,
|
||||
4352,
|
||||
4607,
|
||||
8192,
|
||||
8303,
|
||||
11904,
|
||||
12031,
|
||||
12288,
|
||||
12351,
|
||||
12592,
|
||||
12687,
|
||||
12800,
|
||||
19903,
|
||||
19968,
|
||||
40959,
|
||||
44032,
|
||||
55215,
|
||||
63744,
|
||||
64255,
|
||||
65072,
|
||||
65103,
|
||||
65280,
|
||||
65519,
|
||||
0
|
||||
],
|
||||
"weapon_skills": {
|
||||
"bow": {
|
||||
"arc_shot_affinity": "Arc Shot: Affinity",
|
||||
"arc_shot_brace": "Arc Shot: Brace",
|
||||
"bolt_boost": "Bolt Boost",
|
||||
"herculean_draw": "Herculean Draw"
|
||||
},
|
||||
"charge_blade": {
|
||||
"element_boost": "Element Boost",
|
||||
"sword_boost_mode": "Sword Boost Mode"
|
||||
},
|
||||
"dual_blades": {
|
||||
"archdemon_mode": "Archdemon Mode",
|
||||
"ironshine_silk": "Ironshine Silk"
|
||||
},
|
||||
"great_sword": {
|
||||
"power_sheathe": "Power Sheathe"
|
||||
},
|
||||
"gunlance": {
|
||||
"erupting_cannon": "Erupting Cannon",
|
||||
"ground_splitter": "Ground Splitter"
|
||||
},
|
||||
"hammer": {
|
||||
"impact_burst": "Impact Burst"
|
||||
},
|
||||
"heavy_bowgun": {
|
||||
"counter_charger": "Counter Charger",
|
||||
"overheat": "Overheat",
|
||||
"rising_moon": "Rising Moon",
|
||||
"setting_sun": "Setting Sun",
|
||||
"wyvernsnipe_reload": "Wyvernsnipe Reload"
|
||||
},
|
||||
"hunting_horn": {
|
||||
"bead_of_resonance": "Bead of Resonance",
|
||||
"silkbind_shockwave": "Silkbind Shockwave",
|
||||
"sonic_bloom": "Sonic Bloom"
|
||||
},
|
||||
"insect_glaive": {
|
||||
"all_extracts_mix": "All Extracts Mix",
|
||||
"orange_extract": "Orange Extract",
|
||||
"red_extract": "Red Extract",
|
||||
"white_extract": "White Extract"
|
||||
},
|
||||
"lance": {
|
||||
"anchor_rage": "Anchor Rage",
|
||||
"spiral_thrust": "Spiral Thrust",
|
||||
"twin_wine": "Twin Wine"
|
||||
},
|
||||
"light_bowgun": {
|
||||
"fanning_maneuver": "Fanning Maneuver",
|
||||
"wyvernblast_reload": "Wyvernblast Reload"
|
||||
},
|
||||
"long_sword": {
|
||||
"harvest_moon": "Harvest Moon",
|
||||
"iai_slash": "Iai Slash",
|
||||
"soaring_kick": "Soaring Kick",
|
||||
"spirit_gauge": "Spirit Gauge",
|
||||
"spirit_gauge_autofill": "Spirit Gauge Autofill"
|
||||
},
|
||||
"switch_axe": {
|
||||
"amped_state": "Amped State",
|
||||
"axe_heavy_slam": "Axe: Heavy Slam",
|
||||
"switch_charger": "Switch Charger"
|
||||
},
|
||||
"sword_and_shield": {
|
||||
"destroyer_oil": "Destroyer Oil"
|
||||
}
|
||||
},
|
||||
"weapons": {
|
||||
"bow": "Bow",
|
||||
"charge_blade": "Charge Blade",
|
||||
"dual_blades": "Dual Blades",
|
||||
"great_sword": "Great Sword",
|
||||
"gunlance": "Gunlance",
|
||||
"hammer": "Hammer",
|
||||
"heavy_bowgun": "Heavy Bowgun",
|
||||
"hunting_horn": "Hunting Horn",
|
||||
"insect_glaive": "Insect Glaive",
|
||||
"lance": "Lance",
|
||||
"light_bowgun": "Light Bowgun",
|
||||
"long_sword": "Long Sword",
|
||||
"switch_axe": "Switch Axe",
|
||||
"sword_and_shield": "Sword & Shield"
|
||||
}
|
||||
}
|
||||
@@ -3,11 +3,15 @@
|
||||
"HP": "ОЗ:",
|
||||
"buildup": "Накопление",
|
||||
"gold": "Золото",
|
||||
"lv": "",
|
||||
"mini": "Мини",
|
||||
"otomo": "Cпутник",
|
||||
"part_anomaly_core": "Ядро аномалии",
|
||||
"part_break": "Повреждение",
|
||||
"part_sever": "Отсечение",
|
||||
"player": "Игрок",
|
||||
"rage": "Ярость:",
|
||||
"servant": "Последователь",
|
||||
"silver": "Серебро",
|
||||
"stamina": "Выносливость:",
|
||||
"total_buildup": "Общее накопление",
|
||||
@@ -15,30 +19,54 @@
|
||||
},
|
||||
"ailments": {
|
||||
"blast": "Взрыв",
|
||||
"blastblight": "Взрывная порча",
|
||||
"bleeding": "Кровотечение",
|
||||
"bloodblight": "Кровавая порча",
|
||||
"deadly_poison": "Смертельный яд",
|
||||
"defense_down": "Защита снижена",
|
||||
"dragonblight": "Драконья Порча",
|
||||
"dung_bomb": "Навозная бомба",
|
||||
"engulfed": "Окутывание",
|
||||
"exhaust": "Усталость",
|
||||
"fall_otomo_trap": "Волчья яма спутника",
|
||||
"fall_trap": "Волчья яма",
|
||||
"falling_asleep": "Засыпание",
|
||||
"fireblight": "Огненная порча",
|
||||
"flash": "Оглушение",
|
||||
"frenzy": "Бешенство",
|
||||
"frenzy_infection": "Инфекция бешенства",
|
||||
"frenzy_overcome": "Преодоление бешенства",
|
||||
"frostblight": "Ледяная (морозная) порча",
|
||||
"hellfireblight": "Порча адского пламени",
|
||||
"iceblight": "Ледяная порча",
|
||||
"leeched": "Истощение",
|
||||
"major_bubbleblight": "Великая пузырьковая порча",
|
||||
"minor_bubbleblight": "Малая пузырьковая порча",
|
||||
"muck": "Грязь",
|
||||
"paralysis": "Паралич",
|
||||
"poison": "Отравление",
|
||||
"quick_sand": "Зыбучий песок",
|
||||
"resistance_down": "Сопротивление снижено",
|
||||
"ride": "Езда на виверне",
|
||||
"roar": "Рык",
|
||||
"shock_otomo_trap": "Шоковая ловушка спутника",
|
||||
"shock_trap": "Шоковая ловушка",
|
||||
"sleep": "Сон",
|
||||
"steel_fang": "Стальной клык",
|
||||
"stench": "Зловоние",
|
||||
"stun": "Оглушение",
|
||||
"thunderblight": "Грозовая порча",
|
||||
"tranq_bomb": "Снотворная порча",
|
||||
"waterblight": "Водяная порча"
|
||||
"tremor": "Тряска",
|
||||
"waterblight": "Водяная порча",
|
||||
"webbed": "В паутине"
|
||||
},
|
||||
"customization_menu": {
|
||||
"UI_font": "Шрифт интерфейса",
|
||||
"UI_font_notice": "Любые изменения шрифта требуют перезагрузку скрипта!",
|
||||
"abnormal_statuses": "Аномальные статусы",
|
||||
"activation_count": "Кол-во активаций",
|
||||
"affinity_label": "Метка мастерства",
|
||||
"ailment_buildups": "Накопление аномального статуса",
|
||||
"ailment_name": "Название аномального статуса",
|
||||
"ailment_name_label": "Метка названия аномального статуса",
|
||||
@@ -46,23 +74,32 @@
|
||||
"ailments": "Аномальные статусы",
|
||||
"all_UI": "Весь интерфейс",
|
||||
"anchor": "Привязка",
|
||||
"anomaly_cores": "Ядра аномалии",
|
||||
"anomaly_filter": "Ядро аномалии",
|
||||
"anomaly_health": "Здоровье ядра аномалии",
|
||||
"anomaly_health_percentage": "Здоровье ядра аномалии в процентах",
|
||||
"apply": "Применить",
|
||||
"assign_new_key": "Привязать клавишу",
|
||||
"attack_label": "Метка Атаки",
|
||||
"auto_highlight": "Автофокус",
|
||||
"background": "Фон",
|
||||
"bar": "Шкала",
|
||||
"blast_damage": "Урон от взрыва",
|
||||
"blast": "Взрыв",
|
||||
"body_parts": "Части тела",
|
||||
"bold": "Жирный",
|
||||
"bomb_damage": "Урон от бомб",
|
||||
"bombs": "Бомбы",
|
||||
"bottom_left": "Левый нижний угол",
|
||||
"bottom_right": "Правй нижний угол",
|
||||
"bottom_to_top": "Снизу вверх",
|
||||
"break_anomaly_filter": "Повреждение + Ядро аномалии",
|
||||
"break_count": "Счётчик повреждений",
|
||||
"break_filter": "Повреждение",
|
||||
"break_health": "Повреждение части",
|
||||
"break_health_percentage": "Повреждение части в процентах",
|
||||
"break_max_count": "Максимальное кол-во повреждений",
|
||||
"break_severe_filter": "Повреждение + Отсечение",
|
||||
"break_sever_anomaly_filter": "Повреждение + Отсечение + Ядро аномалии",
|
||||
"break_sever_filter": "Повреждение + Отсечение",
|
||||
"buff_UI": "Интерфейс эффектов",
|
||||
"buildup": "Накопление",
|
||||
"buildup_bar": "Шкала накопления",
|
||||
"buildup_bars_are_relative_to": "Шкалы накопления расположены относительно к",
|
||||
@@ -70,54 +107,81 @@
|
||||
"buildup_percentage_label": "Метка накопления в процентах",
|
||||
"buildup_value_label": "Метка значения накопления",
|
||||
"capture_line": "Линия здоровья захвата",
|
||||
"cart_count": "Кол-во потерь сознания",
|
||||
"cart_count_label": "Метка кол-ва потерь сознания",
|
||||
"cart_count": "Кол-во смертей",
|
||||
"cart_count_label": "Метка кол-ва смертей",
|
||||
"center": "Центр",
|
||||
"closest": "Ближайший",
|
||||
"color": "Цвет",
|
||||
"colors": "Цвета",
|
||||
"config": "Файл конфигурации",
|
||||
"creature_name_label": "Метка имени существа",
|
||||
"crown": "Корона",
|
||||
"crown_thresholds": "Лимиты корон",
|
||||
"current_state": "Текущее состояние",
|
||||
"current_time": "Текущее время",
|
||||
"current_value": "Текущее значение",
|
||||
"cutscene": "Катсцена",
|
||||
"damage": "Урон",
|
||||
"damage_bar": "Шкала урона",
|
||||
"damage_bars_are_relative_to": "Шкалы урона расположены относительно к",
|
||||
"damage_meter_UI": "Интерфейс модуля урона",
|
||||
"damage_percentage_label": "Метка урона в процентах",
|
||||
"damage_value_label": "Метка значений урона",
|
||||
"dango_skills": "Навыки данго",
|
||||
"debug": "Отладка",
|
||||
"default_state": "Состояние по умолчанию",
|
||||
"defense_label": "Метка защиты",
|
||||
"delete": "Удалить",
|
||||
"distance": "Расстояние",
|
||||
"dps": "Урон в секунду",
|
||||
"dps_label": "Метка урона в секунду",
|
||||
"dps_mode": "Режим урона в секунду",
|
||||
"during_quest": "Во время квеста",
|
||||
"dragon_resistance_label": "Метка сопротивления дракону",
|
||||
"duplicate": "Дублировать",
|
||||
"duration": "Продолжительность",
|
||||
"dynamic_positioning": "Динамическое позиционирование",
|
||||
"dynamically_positioned": "Рассположенный динамично",
|
||||
"effect_level": "Уровень эффекта",
|
||||
"element_2_label": "Метка элемента 2",
|
||||
"element_label": "Метка элемента",
|
||||
"enable_for": "Показывать для",
|
||||
"enabled": "Включить",
|
||||
"endemic_life": "Местная живность",
|
||||
"endemic_life_UI": "Интерфейс местной живности",
|
||||
"endemic_life_damage": "Урон от окружения",
|
||||
"endemic_life_buffs": "Эффекты местной живности",
|
||||
"everything_seems_to_be_ok": "Кажется, всё в порядке!",
|
||||
"family": "Семейство",
|
||||
"farthest": "Самый дальний",
|
||||
"fight_time": "Время в бою",
|
||||
"fill_direction": "Направление заполнения",
|
||||
"filter": "Фильтр",
|
||||
"filter_mode": "Режим Фильтра",
|
||||
"fire_resistance_label": "Метка сопротивления огню",
|
||||
"first": "Первый",
|
||||
"first_hit": "Первый удар",
|
||||
"flinch_count": "Кол-во вздрагиваний",
|
||||
"foreground": "Передний план",
|
||||
"freeze_dps_on_quest_clear": "Заморозить УВС после завершения квеста",
|
||||
"freeze_dps_on_quest_end": "Заморозить УВС после завершения квеста",
|
||||
"global_position_modifier": "Глобальный модификатор расположения",
|
||||
"global_scale_modifier": "Глобальный модификатор размера",
|
||||
"global_settings": "Общие настройки",
|
||||
"head_tracking": "Отслеживание головы",
|
||||
"health": "Здоровье",
|
||||
"health_anomaly_filter": "Здоровье + Ядро аномалии",
|
||||
"health_break_anomaly_filter": "Здоровье + Повреждение + Ядро аномалии",
|
||||
"health_break_filter": "Здоровье + Повреждение",
|
||||
"health_break_severe_filter": "Здоровье + Повреждение + Отсечение",
|
||||
"health_break_sever_anomaly_filter": "Здоровье + Повреждение + Отсечение + Ядро аномалии",
|
||||
"health_break_sever_filter": "Здоровье + Повреждение + Отсечение",
|
||||
"health_filter": "Здоровье",
|
||||
"health_label": "Метка здоровья",
|
||||
"health_percentage": "Здоровье в процентах",
|
||||
"health_severe_filter": "Здоровье + Отсечение",
|
||||
"health_sever_anomaly_filter": "Здоровье + Отсечение + Ядро аномалии",
|
||||
"health_sever_filter": "Здоровье + Отсечение",
|
||||
"height": "Высота",
|
||||
"hide_ailments_with_zero_buildup": "Скрыть аномальный статус, если накопление равно 0",
|
||||
"hide_all_active_ailments": "Скрыть все активные аномальные статусы",
|
||||
"hide_all_inactive_ailments": "Скрыть все неактивные аномальные статусы",
|
||||
"hide_bar_for_infinite_buffs": "Скрыть шкалу у бесконечных эффектов",
|
||||
"hide_dead_or_captured": "Скрыть мёртвых и захваченных монстров",
|
||||
"hide_disabled_ailments": "Скрыть отключенные аномальные статусы",
|
||||
"hide_inactive_ailments_with_no_buildup_support": "Скрыть неактивные аномальные статусы без поддержки накопления",
|
||||
@@ -126,6 +190,8 @@
|
||||
"hide_myself": "Скрыть себя",
|
||||
"hide_other_players": "Скрыть остальных игроков",
|
||||
"hide_player_if_player_damage_is_zero": "Скрыть игрока, если его урон равен 0",
|
||||
"hide_servants": "Скрыть последователей",
|
||||
"hide_timer_for_infinite_buffs": "Скрыть таймер у бесконечных эффектов",
|
||||
"hide_total_damage": "Скрыть общий урон",
|
||||
"hide_total_if_total_damage_is_zero": "Скрыть общий урон, если он равен 0",
|
||||
"hide_undamaged_parts": "Скрыть неповреждённые части тела",
|
||||
@@ -135,16 +201,26 @@
|
||||
"highlighted_bar": "Помеченная шкала",
|
||||
"highlighted_buildup_bar": "Помеченная шкала накопления",
|
||||
"highlighted_damage_bar": "Помеченная шкала урона",
|
||||
"highlighted_targeted": "Помеченный",
|
||||
"history": "История",
|
||||
"history_size": "Размер истории",
|
||||
"horizontal": "Горизонтально",
|
||||
"hotkeys": "Горячие клавиши",
|
||||
"hunter_rank": "Ранг охотника",
|
||||
"hunter_rank_label": "Метка ранга охотника",
|
||||
"ice_resistance_label": "Метка сопротивления льду",
|
||||
"id": "ID",
|
||||
"in_lobby": "В лобби",
|
||||
"in_training_area": "В тренировочной зоне",
|
||||
"include": "Элементы",
|
||||
"infinite_buffs_location": "Позиция бесконечных эффектов",
|
||||
"inside": "Внутри",
|
||||
"installation_damage": "Урон от установок",
|
||||
"installations": "Установки",
|
||||
"italic": "Курсив",
|
||||
"item_buffs": "Эффекты предметов",
|
||||
"join_time": "Время присоединения",
|
||||
"kunai_damage": "Урон от кунаев",
|
||||
"killcam": "Камера смерти",
|
||||
"kunai": "Кунаи",
|
||||
"language": "Язык",
|
||||
"large_monster_UI": "Интерфейс больший монстров",
|
||||
"large_monster_dynamic_UI": "Динамический интерфейс больших монстров",
|
||||
@@ -152,6 +228,10 @@
|
||||
"large_monster_static_UI": "Статический интерфейс больших монстров",
|
||||
"large_monsters": "Большие монстры",
|
||||
"last": "Последний",
|
||||
"left_to_right": "Слева направо",
|
||||
"level": "Уровень",
|
||||
"level_label": "Метка уровня",
|
||||
"loading_quest": "Загрузка квеста",
|
||||
"loss_health": "Отсечение части",
|
||||
"loss_health_percentage": "Отсечение части в процентах",
|
||||
"lowest_health": "Наименьшее здоровье",
|
||||
@@ -159,29 +239,39 @@
|
||||
"master_rank": "Ранг мастера",
|
||||
"max_distance": "Макс. расстояние",
|
||||
"max_monster_updates_per_tick": "Макс. кол-во обновлений за тик",
|
||||
"max_value": "Максимальное значение",
|
||||
"me": "Я",
|
||||
"melody_effects": "Эффекты мелодии",
|
||||
"menu_font": "Шрифт меню",
|
||||
"menu_font_change_disclaimer": "Изменение языка и размера шрифта меню несколько раз приведёт к вылету!",
|
||||
"misc_buffs": "Разные эффекты",
|
||||
"mod_name": "MHR Overlay",
|
||||
"mode": "Режим",
|
||||
"modifiers": "Модификаторы",
|
||||
"module_visibility_on_different_screens": "Видимость модулей на разных экранах",
|
||||
"module_visibility_based_on_game_state": "Видимость модулей в зависимости от состояния игры",
|
||||
"modules": "Модули",
|
||||
"monster_can_be_captured": "Монстр может быть схвачен",
|
||||
"monster_damage": "Урон от монстров",
|
||||
"monster_id": "ИД монстра",
|
||||
"monster_name": "Имя монстра",
|
||||
"monster_name_label": "Метка имени монстра",
|
||||
"monsters": "Монстры",
|
||||
"my_damage_bar_location": "Позиция моей шкалы урона",
|
||||
"my_otomos": "Мои спутники",
|
||||
"myself": "Я",
|
||||
"name": "Имя",
|
||||
"name_label": "Метка имени",
|
||||
"new": "Создать",
|
||||
"none": "Нет",
|
||||
"normal": "Обычный",
|
||||
"offset": "Сдвиг",
|
||||
"offset_is_relative_to_parts": "Сдвиг относителен к частям тела",
|
||||
"opacity_falloff": "Увеличение прозрачности от расстояния",
|
||||
"orientation": "Ориентация",
|
||||
"other_damage": "Другой урон",
|
||||
"other": "Другое",
|
||||
"other_player_otomos": "Спутники других игроков",
|
||||
"other_players": "Другие игроки",
|
||||
"otomo_damage": "Урон от отомо",
|
||||
"otomo_moves": "Навыки спутника",
|
||||
"otomos": "Спутники",
|
||||
"outline": "Обводка",
|
||||
"outside": "Снаружи",
|
||||
"part_health": "Здоровье части",
|
||||
@@ -189,79 +279,199 @@
|
||||
"part_name_label": "Метка имени части тела",
|
||||
"percentage_label": "Метка процентов",
|
||||
"performance": "Производительность",
|
||||
"player_damage": "Урон игрока",
|
||||
"player_id": "ИД игрока",
|
||||
"player_name": "Имя игрока",
|
||||
"player_name_label": "Метка имени игрока",
|
||||
"player_name_size_limit": "Ограничить ширину имени игрока",
|
||||
"player_spacing": "Расстояние между игроками",
|
||||
"poison_damage": "Урон от отравления",
|
||||
"players": "Игроки",
|
||||
"playing_quest": "Во время квеста",
|
||||
"poison": "Отравление",
|
||||
"position": "Расположение",
|
||||
"press_any_key": "Нажмите любую клавишу...",
|
||||
"prioritize_large_monsters": "Большие монстры в приоритете",
|
||||
"quest_result_screen": "Экран результатов квеста",
|
||||
"quest_end_animation": "Анимация конца квеста",
|
||||
"quest_end_screen": "Экран конца квеста",
|
||||
"quest_end_timer": "Таймер конца квеста",
|
||||
"quest_start_animation": "Анимация начала квеста",
|
||||
"quest_time": "Время квеста",
|
||||
"rage": "Ярость",
|
||||
"rampage_skills": "Навыки буйства",
|
||||
"reframework_outdated": "Установленная версия REFramework устарела. Пожалуйста, обновитесь, иначе MHR Overlay будет работать некорректно.",
|
||||
"relative_offset": "Относительный сдвиг",
|
||||
"rename": "Переименовать",
|
||||
"render_highlighted_monster": "Показывать помеченного монстра",
|
||||
"render_inactive_anomaly_cores": "Показывать неактивные ядра аномалии",
|
||||
"render_not_highlighted_monsters": "Показывать непомеченных монстров",
|
||||
"renderer": "Рендерер",
|
||||
"reset": "Сбросить",
|
||||
"reversed_order": "Обратный порядок",
|
||||
"reward_screen": "Экран наград",
|
||||
"right_alignment_shift": "Сдвиг для выравнивания по правому краю",
|
||||
"right_to_left": "Справа налево",
|
||||
"servant_otomos": "Спутники последователей",
|
||||
"servants": "Последователи",
|
||||
"settings": "Настройки",
|
||||
"severe_filter": "Отсечение",
|
||||
"sever_anomaly_filter": "Отсечение + Ядро аномалии",
|
||||
"sever_filter": "Отсечение",
|
||||
"shadow": "Тень",
|
||||
"show_my_otomos_separately": "Показывать моих спутников отдельно",
|
||||
"show_other_player_otomos_separately": "Показывать спутников других игроков отдельно",
|
||||
"show_servant_otomos_separately": "Показывать спутников последователей отдельно",
|
||||
"size": "Размер",
|
||||
"skills": "Навыки",
|
||||
"small_monster_UI": "Интерфейс малых монстров",
|
||||
"small_monsters": "Малые монстры",
|
||||
"sorting": "Сортировка",
|
||||
"spacing": "Расстояние между элементами",
|
||||
"stamina": "Выносливость",
|
||||
"stamina_label": "Метка выносливости",
|
||||
"static_orientation": "Статичная ориентация",
|
||||
"static_position": "Статичное расположение",
|
||||
"static_sorting": "Статичная сортировка",
|
||||
"static_spacing": "Статичное расстояние между элементами",
|
||||
"statically_positioned": "Рассположенный статично",
|
||||
"stats_UI": "Интерфейс статуса",
|
||||
"status": "Статус",
|
||||
"style": "Стиль",
|
||||
"summary_screen": "Экран результатов",
|
||||
"text_label": "Текстовая метка",
|
||||
"thickness": "Thickness",
|
||||
"thickness": "Толщина",
|
||||
"thunder_resistance_label": "Метка сопротивления грозе",
|
||||
"time_UI": "Интерфейс времени",
|
||||
"time_label": "Метка времени",
|
||||
"time_limit": "Ограничение по времени",
|
||||
"time_limit": "Ограничение по времени (cек.)",
|
||||
"timer": "Таймер",
|
||||
"timer_delays": "Задержка таймеров",
|
||||
"timer_label": "Метка таймера",
|
||||
"top_buildup": "Наибольшее накопление",
|
||||
"top_damage": "Наибольший урон",
|
||||
"top_dps": "Наибольший урон в секунду",
|
||||
"top_left": "Левый верхний угол",
|
||||
"top_right": "Правый верхний угол",
|
||||
"top_to_bottom": "Сверху вниз",
|
||||
"total": "Всего",
|
||||
"total_buildup": "Общее накопление",
|
||||
"total_buildup_label": "Метка общего накопления",
|
||||
"total_buildup_value_label": "Метка значения общего накопления",
|
||||
"total_cart_count_label": "Метка общего кол-ва смертей",
|
||||
"total_damage": "Общий урон",
|
||||
"total_damage_label": "Метка общего урона",
|
||||
"total_damage_location": "Позиция общего урона",
|
||||
"total_damage_offset_is_relative": "Относительный сдвиг общего урона",
|
||||
"total_damage_value_label": "Метка значений общего урона",
|
||||
"total_dps": "Общий урон в секунду",
|
||||
"total_dps_label": "Метка общего урона в секунду",
|
||||
"tracked_damage_types": "Отслеживаемые типы урона",
|
||||
"tracked_monster_types": "Отслеживаемые типы монстров",
|
||||
"training_area": "Тренировочная зона",
|
||||
"type": "Тип",
|
||||
"update_buffs_delay": "Обновление эффектов (cек.)",
|
||||
"update_is_online_delay": "Обновление онлайн статуса (cек.)",
|
||||
"update_myself_position_delay": "Обновление собственных координат (cек.)",
|
||||
"update_player_info_delay": "Обновление информации об игроке (cек.)",
|
||||
"update_players_delay": "Обновление списка игроков (cек.)",
|
||||
"update_quest_time_delay": "Обновление продолжительности задания (cек.)",
|
||||
"update_singletons_delay": "Обновление синглтонов (cек.)",
|
||||
"update_window_size_delay": "Обновление размеров окна (cек.)",
|
||||
"use_d2d_if_available": "Использовать Direct2D, если доступен",
|
||||
"value": "Значение",
|
||||
"value_label": "Метка значений",
|
||||
"vertical": "Вертикально",
|
||||
"viewport_offset": "Сдвиг в экранном пространстве",
|
||||
"visible": "Включить",
|
||||
"water_resistance_label": "Метка сопротивления воде",
|
||||
"weapon_skills": "Навыки оружия",
|
||||
"width": "Ширина",
|
||||
"word_player": "Слово \"Игрок\"",
|
||||
"world_offset": "Сдвиг в игровом пространстве",
|
||||
"wyvern_riding_damage": "Урон от езды на виверне",
|
||||
"wyvern_riding": "Езда на виверне",
|
||||
"x": "X",
|
||||
"y": "Y",
|
||||
"z": "Z"
|
||||
},
|
||||
"font_name": "NotoSansKR-Bold.otf",
|
||||
"dango_skills": {
|
||||
"dango_adrenaline": "Данго-адреналин",
|
||||
"dango_booster": "Данго-усилитель",
|
||||
"dango_bulker": "Данго-пижон",
|
||||
"dango_connector": "Данго-сцепщик",
|
||||
"dango_defender": "Данго-защитник",
|
||||
"dango_flyer": "Данго-пилот",
|
||||
"dango_glutton": "Данго-обжора",
|
||||
"dango_hunter": "Данго-охотник",
|
||||
"dango_insurance": "Данго-страховщик",
|
||||
"dango_insurance_defense_up": "Данго-страховщик: усил. защиты",
|
||||
"super_recovery_dango": "Супервосстан. данго"
|
||||
},
|
||||
"endemic_life": {
|
||||
"butterflame": "Огнебабочка",
|
||||
"clothfly": "Тканебабочка",
|
||||
"cutterfly": "Стрекоза-нож",
|
||||
"gold_wirebug": "Золотой Протожук",
|
||||
"peepersects": "Глазобабочки",
|
||||
"red_lampsquid": "Крс. Лампокальм.",
|
||||
"ruby_wirebug": "Рубиновый Протожук",
|
||||
"stinkmink": "Пахучка",
|
||||
"yellow_lampsquid": "Жлт. Лампокальм."
|
||||
},
|
||||
"font_name": "NotoSans-Bold.otf",
|
||||
"item_buffs": {
|
||||
"adamant_seed": "Адамант. зерно",
|
||||
"armor_ammo": "Защитные снаряды",
|
||||
"armorskin": "Бронир. кожа",
|
||||
"dash_juice": "Сок бодрости",
|
||||
"demon_ammo": "Демон. снаряды",
|
||||
"demon_powder": "Демон. порошок",
|
||||
"demondrug": "Демон. снадобье",
|
||||
"gourmet_fish": "Вкусная рыба",
|
||||
"hardshell_powder": "Пор. из скорлупы",
|
||||
"immunizer": "Иммунатор",
|
||||
"mega_armorskin": "Мегабронир. кожа",
|
||||
"mega_demondrug": "Мегадемон. снад.",
|
||||
"might_seed": "Зер. могущества"
|
||||
},
|
||||
"melody_effects": {
|
||||
"affinity_up": "Усиление мастерства",
|
||||
"attack_and_affinity_up": "Усиление атаки и мастерства",
|
||||
"attack_and_defense_up": "Усиление атаки и защиты",
|
||||
"attack_up": "Усиление атаки",
|
||||
"blight_negated": "Снятие порчи",
|
||||
"defense_up": "Усиление защиты",
|
||||
"divine_protection": "Божественная защита",
|
||||
"earplugs_l": "Наушники (L)",
|
||||
"earplugs_s": "Наушники (S)",
|
||||
"elemental_attack_boost": "Усиление атаки стихией",
|
||||
"environment_damage_negated": "Отмена урона окружением",
|
||||
"health_recovery_l": "Восст. здоровья (L)",
|
||||
"health_recovery_s": "Восст. здоровья (S)",
|
||||
"health_recovery_s_antidote": "Восст. здоровья (S) + по-ядие",
|
||||
"health_regeneration": "Регенерация ",
|
||||
"infernal_melody": "Песня яростного пламени",
|
||||
"knockbacks_negated": "Нейтрализация сбив. с ног",
|
||||
"self_improvement": "Самосовершенствование",
|
||||
"sharpness_extension": "Увеличение остроты",
|
||||
"sharpness_loss_reduced": "Замедление затупления",
|
||||
"sharpness_regeneration": "Регенерация остроты",
|
||||
"sonic_barrier": "Звуковой барьер",
|
||||
"sonic_wave": "Звуковая волна",
|
||||
"stamina_recovery_up": "Улучш. восст. выносливости",
|
||||
"stamina_use_reduced": "Усиление выносливости",
|
||||
"stun_negated": "Нейтрализация оглушения",
|
||||
"tremors_negated": "Нейтрализация тряски",
|
||||
"wind_pressure_negated": "Отмена давления ветра"
|
||||
},
|
||||
"misc_buffs": {
|
||||
"attack_up": "Усиление атаки",
|
||||
"defense_up": "Усиление защиты",
|
||||
"immunity": "Устойчивость",
|
||||
"natural_healing_up": "Естественное лечение",
|
||||
"stamina_use_down": "Уменьшение расхода выносливости"
|
||||
},
|
||||
"otomo_moves": {
|
||||
"go_fight_win": "Сражайся, побеждай",
|
||||
"power_drum": "Барабан силы",
|
||||
"rousing_roar": "Воодушевляющий рев",
|
||||
"vase_of_vitality": "Ваза живучести"
|
||||
},
|
||||
"parts": {
|
||||
"abdomen": "Брюхо",
|
||||
"amatsu_unknown": "?",
|
||||
"antenna": "Антернна",
|
||||
"arms": "Передние лапы",
|
||||
"arms_mud": "Передние лапы (в грязи)",
|
||||
@@ -327,5 +537,170 @@
|
||||
"wingclaw": "Крыло-коготь",
|
||||
"wingclaws": "Крыло-коготь",
|
||||
"wings": "Крылья"
|
||||
},
|
||||
"rampage_skills": {
|
||||
"chameleos_soul": "Душа Хамелеоса",
|
||||
"kushala_daora_soul": "Душа Кушалы Даоры"
|
||||
},
|
||||
"skills": {
|
||||
"adrenaline_rush": "Прилив адреналина",
|
||||
"affinity_sliding": "Мастерский подкат",
|
||||
"agitator": "Подстрекатель",
|
||||
"berserk": "Безумец",
|
||||
"bladescale_hone": "Острая чешуя",
|
||||
"blood_awakening": "Пробуждение крови",
|
||||
"bloodlust": "Кровожадность",
|
||||
"burst": "Выброс",
|
||||
"coalescence": "Сращивание",
|
||||
"counterstrike": "Контрудар",
|
||||
"dereliction": "Упущение",
|
||||
"dragon_conversion_elemental_attack_up": "Преобраз-е дракона: усил. эл. атаки",
|
||||
"dragon_conversion_elemental_res_up": "Преобраз-е дракона: усил. сопротивл.",
|
||||
"dragonheart": "Драконье сердце",
|
||||
"embolden": "Воодушевление",
|
||||
"frenzied_bloodlust": "Буйная кровожадность",
|
||||
"furious": "Гнев",
|
||||
"grinder_s": "Дробилка (S)",
|
||||
"heaven_sent": "Божий посланник",
|
||||
"hellfire_cloak": "Завеса ад. пламени",
|
||||
"heroics": "Героизм",
|
||||
"inspiration": "Вдохновение",
|
||||
"intrepid_heart": "бесстрашное сердце",
|
||||
"latent_power": "Скрытая энергия",
|
||||
"maximum_might": "Макс. могущество",
|
||||
"offensive_guard": "Агрессивная защита",
|
||||
"partbreaker": "Рассекатель",
|
||||
"peak_performance": "На высоте",
|
||||
"powder_mantle_blue": "Порошковый покров (синий)",
|
||||
"powder_mantle_red": "Порошковый покров (красный)",
|
||||
"protective_polish": "Защитная полировка",
|
||||
"resentment": "Презрение",
|
||||
"resuscitate": "Оживление",
|
||||
"spiribirds_call": "Зов Духоптицы",
|
||||
"status_trigger": "Смена статуса",
|
||||
"strife": "Борьба",
|
||||
"wall_runner": "Бегун по стенам",
|
||||
"wind_mantle": "Мантия ветра"
|
||||
},
|
||||
"stats": {
|
||||
"affinity": "Мастерство",
|
||||
"attack": "Атака",
|
||||
"defense": "Защита",
|
||||
"dragon": "Дракон",
|
||||
"dragon_resistance": "Сопрот. дракону",
|
||||
"fire": "Огонь",
|
||||
"fire_resistance": "Сопрот. огню",
|
||||
"ice": "Лед",
|
||||
"ice_resistance": "Сопрот. льду",
|
||||
"stamina": "Выносливость",
|
||||
"thunder": "Гроза",
|
||||
"thunder_resistance": "Сопрот. грозе",
|
||||
"water": "Вода",
|
||||
"water_resistance": "Сопрот. воде"
|
||||
},
|
||||
"unicode_glyph_ranges": [
|
||||
32,
|
||||
255,
|
||||
256,
|
||||
383,
|
||||
1024,
|
||||
1327,
|
||||
7680,
|
||||
7935,
|
||||
8192,
|
||||
8303,
|
||||
65280,
|
||||
65519,
|
||||
0,
|
||||
64255,
|
||||
65072,
|
||||
65103,
|
||||
65280,
|
||||
65519,
|
||||
0
|
||||
],
|
||||
"weapon_skills": {
|
||||
"bow": {
|
||||
"arc_shot_affinity": "Выстрел дугой: мастерство",
|
||||
"arc_shot_brace": "Выстрел дугой: сгруппир.",
|
||||
"bolt_boost": "Усиление снарядов",
|
||||
"herculean_draw": "Натяжение Геркулеса"
|
||||
},
|
||||
"charge_blade": {
|
||||
"element_boost": "Усиление стихии",
|
||||
"sword_boost_mode": "Режим усиления меча"
|
||||
},
|
||||
"dual_blades": {
|
||||
"archdemon_mode": "Режим архидемона",
|
||||
"ironshine_silk": "Блестящий шелк"
|
||||
},
|
||||
"great_sword": {
|
||||
"power_sheathe": "Мощное убирание оружия"
|
||||
},
|
||||
"gunlance": {
|
||||
"erupting_cannon": "Вулканическая пушка",
|
||||
"ground_splitter": "Раскол земли"
|
||||
},
|
||||
"hammer": {
|
||||
"impact_burst": "Взрыв от удара"
|
||||
},
|
||||
"heavy_bowgun": {
|
||||
"counter_charger": "Заряженная контратака",
|
||||
"overheat": "Перегрев",
|
||||
"rising_moon": "Восходящая луна",
|
||||
"setting_sun": "Заходящее солнце",
|
||||
"wyvernsnipe_reload": "Перезарядка меткости виверны"
|
||||
},
|
||||
"hunting_horn": {
|
||||
"bead_of_resonance": "Бусина резонанса",
|
||||
"silkbind_shockwave": "Волна паутины",
|
||||
"sonic_bloom": "Звуковой цветов"
|
||||
},
|
||||
"insect_glaive": {
|
||||
"all_extracts_mix": "Смесь всех экстрактов",
|
||||
"orange_extract": "Оранжевый экстракт",
|
||||
"red_extract": "Красный экстракт",
|
||||
"white_extract": "Белый экстракт"
|
||||
},
|
||||
"lance": {
|
||||
"anchor_rage": "Опорный гнев",
|
||||
"spiral_thrust": "Спиральный выпад",
|
||||
"twin_wine": "Побеги-близнецы"
|
||||
},
|
||||
"light_bowgun": {
|
||||
"fanning_maneuver": "Веерный маневр",
|
||||
"wyvernblast_reload": "Перезарядка взрыва виверны"
|
||||
},
|
||||
"long_sword": {
|
||||
"harvest_moon": "Луна урожая",
|
||||
"iai_slash": "Удар на выхвате",
|
||||
"soaring_kick": "Парящий удар ногой",
|
||||
"spirit_gauge": "Шкала духа",
|
||||
"spirit_gauge_autofill": "Самозаполнение шкалы духа"
|
||||
},
|
||||
"switch_axe": {
|
||||
"amped_state": "Усил. состояние",
|
||||
"axe_heavy_slam": "Топор: Неистовый удар",
|
||||
"switch_charger": "Выкидной заряд"
|
||||
},
|
||||
"sword_and_shield": {
|
||||
"destroyer_oil": "Масло уничтожения"
|
||||
}
|
||||
},
|
||||
"weapons": {
|
||||
"bow": "Лук",
|
||||
"charge_blade": "Силовой клинок",
|
||||
"dual_blades": "Два клинка",
|
||||
"great_sword": "Двуручный меч",
|
||||
"gunlance": "Копьепушка",
|
||||
"hammer": "Молот",
|
||||
"heavy_bowgun": "Тяжелое лукорудие",
|
||||
"hunting_horn": "Охотничий рог",
|
||||
"insect_glaive": "Глефа насекомых",
|
||||
"lance": "Копье",
|
||||
"light_bowgun": "Легкое лукорудие",
|
||||
"long_sword": "Бастард",
|
||||
"switch_axe": "Выкидной топор",
|
||||
"sword_and_shield": "Меч и щит"
|
||||
}
|
||||
}
|
||||
@@ -3,11 +3,15 @@
|
||||
"HP": "生命:",
|
||||
"buildup": "积累值:",
|
||||
"gold": "金冠",
|
||||
"lv": "",
|
||||
"mini": "小型",
|
||||
"part_break": "Break",
|
||||
"part_sever": "Sever",
|
||||
"otomo": "随从",
|
||||
"part_anomaly_core": "Anomaly Core",
|
||||
"part_break": "部位破坏",
|
||||
"part_sever": "部位切断",
|
||||
"player": "玩家",
|
||||
"rage": "愤怒值:",
|
||||
"servant": "盟友",
|
||||
"silver": "银冠",
|
||||
"stamina": "耐力:",
|
||||
"total_buildup": "总积累值",
|
||||
@@ -15,30 +19,54 @@
|
||||
},
|
||||
"ailments": {
|
||||
"blast": "爆破",
|
||||
"blastblight": "Blastblight",
|
||||
"bleeding": "Bleeding",
|
||||
"bloodblight": "Bloodblight",
|
||||
"deadly_poison": "Deadly Poison",
|
||||
"defense_down": "Defense Down",
|
||||
"dragonblight": "Dragonblight",
|
||||
"dung_bomb": "异臭球",
|
||||
"engulfed": "Engulfed",
|
||||
"exhaust": "减气",
|
||||
"fall_otomo_trap": "随从落穴陷阱",
|
||||
"fall_trap": "落穴陷阱",
|
||||
"falling_asleep": "Falling Asleep",
|
||||
"fireblight": "火异常状态",
|
||||
"flash": "闪光",
|
||||
"frenzy": "Frenzy",
|
||||
"frenzy_infection": "Frenzy Infection",
|
||||
"frenzy_overcome": "Frenzy Overcome",
|
||||
"frostblight": "Frostblight",
|
||||
"hellfireblight": "Hellfireblight",
|
||||
"iceblight": "冰异常状态",
|
||||
"leeched": "Leeched",
|
||||
"major_bubbleblight": "Major Bubbleblight",
|
||||
"minor_bubbleblight": "Minor Bubbleblight",
|
||||
"muck": "Muck",
|
||||
"paralysis": "麻痹",
|
||||
"poison": "中毒",
|
||||
"quick_sand": "流沙",
|
||||
"resistance_down": "Resistance Down",
|
||||
"ride": "御龙",
|
||||
"roar": "Roar",
|
||||
"shock_otomo_trap": "随从麻痹陷阱",
|
||||
"shock_trap": "麻痹陷阱",
|
||||
"sleep": "睡眠",
|
||||
"steel_fang": "双刃锁镰",
|
||||
"stench": "Stench",
|
||||
"stun": "昏厥",
|
||||
"thunderblight": "雷异常状态",
|
||||
"tranq_bomb": "捕获用麻醉球",
|
||||
"waterblight": "水异常状态"
|
||||
"tremor": "Tremor",
|
||||
"waterblight": "水异常状态",
|
||||
"webbed": "Webbed"
|
||||
},
|
||||
"customization_menu": {
|
||||
"UI_font": "UI字体",
|
||||
"UI_font_notice": "当更改字体时,请重新加载脚本!",
|
||||
"abnormal_statuses": "Abnormal Statuses",
|
||||
"activation_count": "激活次数",
|
||||
"affinity_label": "Affinity Label",
|
||||
"ailment_buildups": "状态异常积累值",
|
||||
"ailment_name": "状态异常名",
|
||||
"ailment_name_label": "状态异常标签",
|
||||
@@ -46,23 +74,32 @@
|
||||
"ailments": "状态异常",
|
||||
"all_UI": "所有UI",
|
||||
"anchor": "锚点",
|
||||
"apply": "Apply",
|
||||
"anomaly_cores": "Anomaly Cores",
|
||||
"anomaly_filter": "Anomaly Core",
|
||||
"anomaly_health": "Anomaly Core Health",
|
||||
"anomaly_health_percentage": "Anomaly Core Health Percentage",
|
||||
"apply": "应用",
|
||||
"assign_new_key": "指定新按键",
|
||||
"auto_highlight": "Auto-highlight",
|
||||
"attack_label": "Attack Label",
|
||||
"auto_highlight": "自动高亮",
|
||||
"background": "背景",
|
||||
"bar": "状态条",
|
||||
"blast_damage": "爆破伤害",
|
||||
"blast": "爆破",
|
||||
"body_parts": "身体部位",
|
||||
"bold": "粗体",
|
||||
"bomb_damage": "炸弹伤害",
|
||||
"bombs": "Bombs",
|
||||
"bottom_left": "左下",
|
||||
"bottom_right": "右下",
|
||||
"bottom_to_top": "Bottom to Top",
|
||||
"break_anomaly_filter": "Break + Anomaly Core",
|
||||
"break_count": "破坏次数",
|
||||
"break_filter": "Break",
|
||||
"break_health": "Break Health",
|
||||
"break_health_percentage": "Break Health Percentage",
|
||||
"break_max_count": "Break Max Count",
|
||||
"break_severe_filter": "Break + Severe",
|
||||
"break_filter": "破坏",
|
||||
"break_health": "破坏值",
|
||||
"break_health_percentage": "破坏值百分比",
|
||||
"break_max_count": "最大破坏次数",
|
||||
"break_sever_anomaly_filter": "Break + Sever + Anomaly Core",
|
||||
"break_sever_filter": "破坏+切断",
|
||||
"buff_UI": "Buff UI",
|
||||
"buildup": "积累值",
|
||||
"buildup_bar": "积累值条",
|
||||
"buildup_bars_are_relative_to": "积累值条基于",
|
||||
@@ -70,81 +107,120 @@
|
||||
"buildup_percentage_label": "积累值百分比标签",
|
||||
"buildup_value_label": "积累值标签",
|
||||
"capture_line": "可捕捉线",
|
||||
"cart_count": "Cart Count",
|
||||
"cart_count_label": "Cart Count Label",
|
||||
"center": "Center",
|
||||
"closest": "Closest",
|
||||
"cart_count": "猫车数",
|
||||
"cart_count_label": "猫车数标签",
|
||||
"center": "中央",
|
||||
"closest": "最近的",
|
||||
"color": "颜色",
|
||||
"colors": "颜色",
|
||||
"config": "设置",
|
||||
"creature_name_label": "生物名标签",
|
||||
"crown": "皇冠",
|
||||
"crown_thresholds": "皇冠阈值",
|
||||
"current_state": "当前阶段",
|
||||
"current_time": "Current Time",
|
||||
"current_value": "当前值",
|
||||
"cutscene": "过场动画",
|
||||
"damage": "伤害",
|
||||
"damage_bar": "伤害条",
|
||||
"damage_bars_are_relative_to": "伤害条基于",
|
||||
"damage_meter_UI": "伤害统计UI",
|
||||
"damage_percentage_label": "伤害百分比标签",
|
||||
"damage_value_label": "伤害量标签",
|
||||
"dango_skills": "Dango Skills",
|
||||
"debug": "Debug",
|
||||
"default_state": "默认阶段",
|
||||
"defense_label": "Defense Label",
|
||||
"delete": "删除",
|
||||
"distance": "距离",
|
||||
"dps": "DPS",
|
||||
"dps_label": "DPS标签",
|
||||
"dps_mode": "DPS模式",
|
||||
"during_quest": "任务中",
|
||||
"dragon_resistance_label": "Dragon Resistance Label",
|
||||
"duplicate": "复制",
|
||||
"duration": "持续时间",
|
||||
"dynamic_positioning": "动态位置",
|
||||
"dynamically_positioned": "动态位置",
|
||||
"effect_level": "Effect Level",
|
||||
"element_2_label": "Element 2 Label",
|
||||
"element_label": "Element Label",
|
||||
"enable_for": "开启",
|
||||
"enabled": "开启",
|
||||
"endemic_life": "Endemic Life",
|
||||
"endemic_life_UI": "环境生物UI",
|
||||
"endemic_life_damage": "Endemic Life Damage",
|
||||
"endemic_life_buffs": "Endemic Life Buffs",
|
||||
"everything_seems_to_be_ok": "Everything seems to be OK!",
|
||||
"family": "字体",
|
||||
"farthest": "Farthest",
|
||||
"farthest": "最远",
|
||||
"fight_time": "战斗时间",
|
||||
"fill_direction": "Fill Direction",
|
||||
"filter": "筛选器",
|
||||
"filter_mode": "筛选方式",
|
||||
"fire_resistance_label": "Fire Resistance Label",
|
||||
"first": "第一",
|
||||
"first_hit": "第一击",
|
||||
"flinch_count": "胆怯次数",
|
||||
"foreground": "前景",
|
||||
"freeze_dps_on_quest_clear": "Freeze DPS when Quest is cleared",
|
||||
"freeze_dps_on_quest_end": "任务结束时冻结DPS",
|
||||
"global_position_modifier": "全局位置更改",
|
||||
"global_scale_modifier": "全局比例更改",
|
||||
"global_settings": "全局设定",
|
||||
"head_tracking": "Head Tracking",
|
||||
"health": "生命",
|
||||
"health_break_filter": "Health + Break",
|
||||
"health_break_severe_filter": "Health + Break + Severe",
|
||||
"health_filter": "Health",
|
||||
"health_anomaly_filter": "Health + Anomaly Core",
|
||||
"health_break_anomaly_filter": "Health + Break + Anomaly Core",
|
||||
"health_break_filter": "生命+破坏",
|
||||
"health_break_sever_anomaly_filter": "Health + Break + Sever + Anomaly Core",
|
||||
"health_break_sever_filter": "生命+破坏+切断",
|
||||
"health_filter": "生命",
|
||||
"health_label": "Health Label",
|
||||
"health_percentage": "生命百分比",
|
||||
"health_severe_filter": "Health + Severe",
|
||||
"health_sever_anomaly_filter": "Health + Sever + Anomaly Core",
|
||||
"health_sever_filter": "生命+切断",
|
||||
"height": "高度",
|
||||
"hide_ailments_with_zero_buildup": "当积累值为0时隐藏该状态异常",
|
||||
"hide_all_active_ailments": "隐藏所有激活的状态异常",
|
||||
"hide_all_inactive_ailments": "隐藏所有没有激活的状态异常",
|
||||
"hide_bar_for_infinite_buffs": "隐藏无限Buff的状态条",
|
||||
"hide_dead_or_captured": "隐藏死亡或被捕获的怪物",
|
||||
"hide_disabled_ailments": "隐藏禁用的状态异常",
|
||||
"hide_inactive_ailments_with_no_buildup_support": "隐藏无积累值的非激活状态异常",
|
||||
"hide_inactive_creatures": "隐藏没有激活的生物",
|
||||
"hide_module_if_total_damage_is_zero": "当总伤害为0时隐藏该模块",
|
||||
"hide_myself": "Hide Myself",
|
||||
"hide_other_players": "Hide Other Players",
|
||||
"hide_myself": "隐藏我自己",
|
||||
"hide_other_players": "隐藏其他玩家",
|
||||
"hide_player_if_player_damage_is_zero": "当玩家伤害为0时隐藏该玩家",
|
||||
"hide_total_damage": "Hide Total Damage",
|
||||
"hide_servants": "隐藏盟友",
|
||||
"hide_timer_for_infinite_buffs": "隐藏无限Buff的计时器",
|
||||
"hide_total_damage": "隐藏总伤害",
|
||||
"hide_total_if_total_damage_is_zero": "当总伤害为0时隐藏总伤害",
|
||||
"hide_undamaged_parts": "隐藏没有受到伤害的部位",
|
||||
"highest_health": "Highest Health",
|
||||
"highest_health_percentage": "Highest Health Percentage",
|
||||
"highlighted": "高亮(目标)",
|
||||
"highest_health": "最高生命值",
|
||||
"highest_health_percentage": "最高生命百分比",
|
||||
"highlighted": "高亮",
|
||||
"highlighted_bar": "高亮条",
|
||||
"highlighted_buildup_bar": "高亮积累值条",
|
||||
"highlighted_damage_bar": "高亮伤害条",
|
||||
"highlighted_targeted": "高亮目标[锁定目标的UI]",
|
||||
"history": "History",
|
||||
"history_size": "History Size",
|
||||
"horizontal": "水平",
|
||||
"hotkeys": "热键",
|
||||
"hunter_rank": "猎人等級",
|
||||
"hunter_rank": "猎人等级",
|
||||
"hunter_rank_label": "猎人等级标签",
|
||||
"ice_resistance_label": "Ice Resistance Label",
|
||||
"id": "ID",
|
||||
"in_lobby": "在大厅",
|
||||
"in_training_area": "在修炼场",
|
||||
"include": "包含",
|
||||
"inside": "Inside",
|
||||
"installation_damage": "设备伤害",
|
||||
"infinite_buffs_location": "Infinite Buffs Location",
|
||||
"inside": "里面",
|
||||
"installations": "Installations",
|
||||
"italic": "斜体",
|
||||
"item_buffs": "Item Buffs",
|
||||
"join_time": "加入时间",
|
||||
"kunai_damage": "苦无伤害",
|
||||
"killcam": "击杀镜头",
|
||||
"kunai": "Kunai",
|
||||
"language": "语言",
|
||||
"large_monster_UI": "大型怪物UI",
|
||||
"large_monster_dynamic_UI": "大型怪物浮动UI",
|
||||
@@ -152,180 +228,479 @@
|
||||
"large_monster_static_UI": "大型怪物固定UI",
|
||||
"large_monsters": "大型怪物群",
|
||||
"last": "最后",
|
||||
"loss_health": "Sever Health",
|
||||
"loss_health_percentage": "Sever Health Percentage",
|
||||
"lowest_health": "Lowest Health",
|
||||
"lowest_health_percentage": "Lowest Health Percentage",
|
||||
"master_rank": "Master Rank",
|
||||
"left_to_right": "Left to Right",
|
||||
"level": "等级",
|
||||
"level_label": "等级标签",
|
||||
"loading_quest": "任务加载中",
|
||||
"loss_health": "切断值",
|
||||
"loss_health_percentage": "切断值百分比",
|
||||
"lowest_health": "最低生命值",
|
||||
"lowest_health_percentage": "最低生命百分比",
|
||||
"master_rank": "大师等级",
|
||||
"max_distance": "最大距离",
|
||||
"max_monster_updates_per_tick": "每次更新的最大怪物数量",
|
||||
"max_value": "最大值",
|
||||
"me": "我",
|
||||
"melody_effects": "Melody Effects",
|
||||
"menu_font": "菜单字体",
|
||||
"menu_font_change_disclaimer": "Changing Language and Menu Font Size several times will cause a crash!",
|
||||
"menu_font_change_disclaimer": "多次改变字体或语言会导致崩溃!",
|
||||
"misc_buffs": "Misc Buffs",
|
||||
"mod_name": "MHR Overlay",
|
||||
"mode": "Mode",
|
||||
"mode": "模式",
|
||||
"modifiers": "更改项",
|
||||
"module_visibility_on_different_screens": "不同场景中使用的模块",
|
||||
"module_visibility_based_on_game_state": "基于游戏状态的模组可视化设置",
|
||||
"modules": "模块",
|
||||
"monster_can_be_captured": "可捕获的怪物",
|
||||
"monster_damage": "怪物伤害",
|
||||
"monster_id": "Monster ID",
|
||||
"monster_id": "怪物ID",
|
||||
"monster_name": "怪物名",
|
||||
"monster_name_label": "怪物名标签",
|
||||
"monsters": "Monsters",
|
||||
"my_damage_bar_location": "我的伤害条位置",
|
||||
"my_otomos": "我的随从",
|
||||
"myself": "我自己",
|
||||
"name": "名称",
|
||||
"name_label": "名字标签",
|
||||
"new": "新建",
|
||||
"none": "空",
|
||||
"normal": "正常",
|
||||
"offset": "偏移",
|
||||
"offset_is_relative_to_parts": "根据部位偏移",
|
||||
"opacity_falloff": "透明度增加",
|
||||
"orientation": "方向",
|
||||
"other_damage": "Other Damage",
|
||||
"other": "Other",
|
||||
"other_player_otomos": "其他玩家的随从",
|
||||
"other_players": "其他玩家",
|
||||
"otomo_damage": "随从伤害",
|
||||
"outline": "Outline",
|
||||
"outside": "Outside",
|
||||
"part_health": "Part Health",
|
||||
"otomo_moves": "Buddy Moves",
|
||||
"otomos": "Buddies",
|
||||
"outline": "轮廓",
|
||||
"outside": "外面",
|
||||
"part_health": "部位生命值",
|
||||
"part_name": "部位名",
|
||||
"part_name_label": "部位名标签",
|
||||
"percentage_label": "百分比标签",
|
||||
"performance": "性能",
|
||||
"player_damage": "玩家伤害",
|
||||
"player_id": "玩家ID",
|
||||
"player_name": "玩家名",
|
||||
"player_name_label": "玩家名标签",
|
||||
"player_name_size_limit": "Player Name Size Limit",
|
||||
"player_name_size_limit": "玩家名长度限制",
|
||||
"player_spacing": "玩家间距",
|
||||
"poison_damage": "中毒伤害",
|
||||
"players": "Players",
|
||||
"playing_quest": "操作界面/正常游玩时",
|
||||
"poison": "中毒",
|
||||
"position": "位置",
|
||||
"press_any_key": "按任意键...",
|
||||
"prioritize_large_monsters": "大型怪物优先",
|
||||
"quest_result_screen": "任务结果页",
|
||||
"quest_end_animation": "任务结束动画",
|
||||
"quest_end_screen": "任务结束界面",
|
||||
"quest_end_timer": "任务结束计时器",
|
||||
"quest_start_animation": "任务开始动画",
|
||||
"quest_time": "任务时间",
|
||||
"rage": "愤怒",
|
||||
"reframework_outdated": "Installed REFramework version is outdated. Please, update. Otherwise, MHR Overlay won't work correctly.",
|
||||
"rampage_skills": "Rampage Skills",
|
||||
"reframework_outdated": "已安装的REFramework版本过低,请更新。否则MHR Overlay不能正常工作。",
|
||||
"relative_offset": "相对偏移",
|
||||
"rename": "重命名",
|
||||
"render_highlighted_monster": "渲染高亮怪物",
|
||||
"render_inactive_anomaly_cores": "Render Inactive Anomaly Cores",
|
||||
"render_not_highlighted_monsters": "渲染非高亮怪物",
|
||||
"renderer": "渲染器",
|
||||
"reset": "重置",
|
||||
"reversed_order": "逆向排序",
|
||||
"reward_screen": "奖励界面",
|
||||
"right_alignment_shift": "Right Alignment Shift",
|
||||
"right_to_left": "Right to Left",
|
||||
"servant_otomos": "盟友随从",
|
||||
"servants": "盟友",
|
||||
"settings": "设定",
|
||||
"severe_filter": "Severe",
|
||||
"sever_anomaly_filter": "Sever + Anomaly Core",
|
||||
"sever_filter": "切断",
|
||||
"shadow": "阴影",
|
||||
"show_my_otomos_separately": "分开显示我的随从",
|
||||
"show_other_player_otomos_separately": "分开显示其他玩家的随从",
|
||||
"show_servant_otomos_separately": "分开显示盟友的随从",
|
||||
"size": "大小",
|
||||
"skills": "Skills",
|
||||
"small_monster_UI": "小型怪物UI",
|
||||
"small_monsters": "小型怪物群",
|
||||
"sorting": "排序方式",
|
||||
"spacing": "间距",
|
||||
"stamina": "耐力",
|
||||
"stamina_label": "Stamina Label",
|
||||
"static_orientation": "固定方向",
|
||||
"static_position": "固定位置",
|
||||
"static_sorting": "固定排序",
|
||||
"static_spacing": "固定间距",
|
||||
"statically_positioned": "固定位置",
|
||||
"stats_UI": "Stats UI",
|
||||
"status": "状态",
|
||||
"style": "Style",
|
||||
"style": "样式",
|
||||
"summary_screen": "总结界面",
|
||||
"text_label": "文字标签",
|
||||
"thickness": "Thickness",
|
||||
"thickness": "粗细度",
|
||||
"thunder_resistance_label": "Thunder Resistance Label",
|
||||
"time_UI": "时间UI",
|
||||
"time_label": "时间标签",
|
||||
"time_limit": "时间限制(秒)",
|
||||
"timer": "计时器",
|
||||
"timer_delays": "Timer Delays",
|
||||
"timer_label": "计时器标签",
|
||||
"top_buildup": "最高积累值",
|
||||
"top_damage": "最高伤害",
|
||||
"top_damage": "Top Damage",
|
||||
"top_dps": "最高DPS",
|
||||
"top_left": "左上",
|
||||
"top_right": "右上",
|
||||
"top_to_bottom": "Top to Bottom",
|
||||
"total": "总计",
|
||||
"total_buildup": "总积累值",
|
||||
"total_buildup_label": "总积累值标签",
|
||||
"total_buildup_value_label": "总积累值标签",
|
||||
"total_cart_count_label": "总猫车数标签",
|
||||
"total_damage": "总伤害",
|
||||
"total_damage_label": "总伤害标签",
|
||||
"total_damage_location": "总伤害条位置",
|
||||
"total_damage_offset_is_relative": "总伤害相对偏移",
|
||||
"total_damage_value_label": "总伤害量标签",
|
||||
"total_dps": "总DPS",
|
||||
"total_dps_label": "总DPS标签",
|
||||
"tracked_damage_types": "跟踪的伤害类型",
|
||||
"tracked_monster_types": "跟踪的怪物类型",
|
||||
"training_area": "训练场",
|
||||
"type": "类型",
|
||||
"update_buffs_delay": "Update Buffs (seconds)",
|
||||
"update_is_online_delay": "Update Is Online (seconds)",
|
||||
"update_myself_position_delay": "Update Myself Position (seconds)",
|
||||
"update_player_info_delay": "Update Player Info (seconds)",
|
||||
"update_players_delay": "Update Players (seconds)",
|
||||
"update_quest_time_delay": "Update Quest Time (seconds)",
|
||||
"update_singletons_delay": "Update Singletons (seconds)",
|
||||
"update_window_size_delay": "Update Window Size (seconds)",
|
||||
"use_d2d_if_available": "可用时使用Direct2D",
|
||||
"value": "Value",
|
||||
"value_label": "数字",
|
||||
"vertical": "垂直",
|
||||
"viewport_offset": "窗口偏移",
|
||||
"visible": "可见",
|
||||
"water_resistance_label": "Water Resistance Label",
|
||||
"weapon_skills": "Weapon Skills",
|
||||
"width": "宽度",
|
||||
"word_player": "名称 \"玩家\"",
|
||||
"world_offset": "整体偏移",
|
||||
"wyvern_riding_damage": "Wyvern Riding Damage",
|
||||
"wyvern_riding": "Wyvern Riding",
|
||||
"x": "X轴",
|
||||
"y": "Y轴",
|
||||
"z": "Z轴"
|
||||
},
|
||||
"dango_skills": {
|
||||
"dango_adrenaline": "Dango Adrenaline",
|
||||
"dango_booster": "Dango Booster",
|
||||
"dango_bulker": "Dango Bulker",
|
||||
"dango_connector": "Dango Connector",
|
||||
"dango_defender": "Dango Defender",
|
||||
"dango_flyer": "Dango Flyer",
|
||||
"dango_glutton": "Dango Glutton",
|
||||
"dango_hunter": "Dango Hunter",
|
||||
"dango_insurance": "Dango Insurance",
|
||||
"dango_insurance_defense_up": "Dango Insurance Defense Up",
|
||||
"super_recovery_dango": "Super Recovery Dango"
|
||||
},
|
||||
"endemic_life": {
|
||||
"butterflame": "Butterflame",
|
||||
"clothfly": "Clothfly",
|
||||
"cutterfly": "Cutterfly",
|
||||
"gold_wirebug": "Gold Wirebug",
|
||||
"peepersects": "Peepersects",
|
||||
"red_lampsquid": "Red Lampsquid",
|
||||
"ruby_wirebug": "Ruby Wirebug",
|
||||
"stinkmink": "Stinkmink",
|
||||
"yellow_lampsquid": "Yellow Lampsquid"
|
||||
},
|
||||
"font_name": "NotoSansSC-Bold.otf",
|
||||
"item_buffs": {
|
||||
"adamant_seed": "Adamant Seed",
|
||||
"armor_ammo": "Armor Ammo",
|
||||
"armorskin": "Armorskin",
|
||||
"dash_juice": "Dash Juice",
|
||||
"demon_ammo": "Demon Ammo",
|
||||
"demon_powder": "Demon Powder",
|
||||
"demondrug": "Demondrug",
|
||||
"gourmet_fish": "Gourmet Fish",
|
||||
"hardshell_powder": "Hardshell Powder",
|
||||
"immunizer": "Immunizer",
|
||||
"mega_armorskin": "Mega Armorskin",
|
||||
"mega_demondrug": "Mega Demondrug",
|
||||
"might_seed": "Might Seed"
|
||||
},
|
||||
"melody_effects": {
|
||||
"affinity_up": "Affinity Up",
|
||||
"attack_and_affinity_up": "Attack and Affinity Up",
|
||||
"attack_and_defense_up": "Attack and Defense Up",
|
||||
"attack_up": "Attack Up",
|
||||
"blight_negated": "Blight Negated",
|
||||
"defense_up": "Defense Up",
|
||||
"divine_protection": "Divine Protection",
|
||||
"earplugs_l": "Earplugs (L)",
|
||||
"earplugs_s": "Earplugs (S)",
|
||||
"elemental_attack_boost": "Elemental Attack Boost",
|
||||
"environment_damage_negated": "Environment Damage Negated",
|
||||
"health_recovery_l": "Health Recovery (L)",
|
||||
"health_recovery_s": "Health Recovery (S)",
|
||||
"health_recovery_s_antidote": "Health Recovery (S) + Antidote",
|
||||
"health_regeneration": "Health Regeneration",
|
||||
"infernal_melody": "Infernal Melody",
|
||||
"knockbacks_negated": "Knockbacks Negated",
|
||||
"self_improvement": "Self-Improvement",
|
||||
"sharpness_extension": "Sharpness Extension",
|
||||
"sharpness_loss_reduced": "Sharpness Loss Reduced",
|
||||
"sharpness_regeneration": "Sharpness Regeneration",
|
||||
"sonic_barrier": "Sonic Barrier",
|
||||
"sonic_wave": "Sonic Wave",
|
||||
"stamina_recovery_up": "Stamina Recovery Up",
|
||||
"stamina_use_reduced": "Stamina Use Reduced",
|
||||
"stun_negated": "Stun Negated",
|
||||
"tremors_negated": "Tremors Negated",
|
||||
"wind_pressure_negated": "Wind Pressure Negated"
|
||||
},
|
||||
"misc_buffs": {
|
||||
"attack_up": "Attack Up",
|
||||
"defense_up": "Defense Up",
|
||||
"immunity": "Immunity",
|
||||
"natural_healing_up": "Natural Healing Up",
|
||||
"stamina_use_down": "Stamina Use Down"
|
||||
},
|
||||
"otomo_moves": {
|
||||
"go_fight_win": "Go, Fight, Win",
|
||||
"power_drum": "Power Drum",
|
||||
"rousing_roar": "Rousing Roar",
|
||||
"vase_of_vitality": "Vase of Vitality"
|
||||
},
|
||||
"parts": {
|
||||
"abdomen": "腹部",
|
||||
"antenna": "Antenna",
|
||||
"amatsu_unknown": "?",
|
||||
"antenna": "触角",
|
||||
"arms": "手臂",
|
||||
"arms_mud": "Arms (Mud)",
|
||||
"arms_mud": "手臂(泥)",
|
||||
"back": "背部",
|
||||
"back_windsac": "背部(风袋)",
|
||||
"body": "本体",
|
||||
"body_mud": "Body (Mud)",
|
||||
"body_mud": "身体(泥)",
|
||||
"carapace": "甲壳",
|
||||
"chest": "Chest",
|
||||
"chest": "胸部",
|
||||
"chest_windsac": "胸部(风袋)",
|
||||
"claw": "爪",
|
||||
"crest": "Crest",
|
||||
"crest": "头冠",
|
||||
"dorsal_fin": "背鳍",
|
||||
"foreleg": "Foreleg",
|
||||
"forelegs": "Forelegs",
|
||||
"foreleg": "前腿",
|
||||
"forelegs": "前腿",
|
||||
"head": "头部",
|
||||
"head_mud": "头部(泥)",
|
||||
"hind_leg": "Hind Leg",
|
||||
"hind_legs": "Hind Legs",
|
||||
"hind_leg": "后腿",
|
||||
"hind_legs": "后腿",
|
||||
"large_mudbulb": "大泥球",
|
||||
"left_arm": "左臂",
|
||||
"left_arm_ice": "左臂(冰)",
|
||||
"left_claw": "Left Claw",
|
||||
"left_claw": "左爪",
|
||||
"left_cutwing": "左刃翼",
|
||||
"left_foreleg": "Foreleg L",
|
||||
"left_hind_leg": "Hind Leg L",
|
||||
"left_foreleg": "左前腿",
|
||||
"left_hind_leg": "左后腿",
|
||||
"left_leg": "左腿",
|
||||
"left_leg_mud": "Leg L (Mud)",
|
||||
"left_legs": "左腿部",
|
||||
"left_leg_mud": "左腿(泥)",
|
||||
"left_legs": "左腿",
|
||||
"left_wing": "左翼",
|
||||
"left_wingclaw": "Wingclaw L",
|
||||
"left_wingclaw": "左翼爪",
|
||||
"legs": "四肢",
|
||||
"lower_back": "下背部",
|
||||
"lower_body": "下半身",
|
||||
"mane": "鬃毛",
|
||||
"mudbulb": "Mudbulb",
|
||||
"mudbulb": "泥球",
|
||||
"neck": "颈部",
|
||||
"rear": "臀部",
|
||||
"right_arm": "右臂",
|
||||
"right_arm_ice": "右臂(冰)",
|
||||
"right_claw": "Right Claw",
|
||||
"right_claw": "右爪",
|
||||
"right_cutwing": "右刃翼",
|
||||
"right_foreleg": "Foreleg R",
|
||||
"right_hind_leg": "Hind Leg R",
|
||||
"right_foreleg": "右前腿",
|
||||
"right_hind_leg": "右后腿",
|
||||
"right_leg": "右腿",
|
||||
"right_leg_mud": "Leg R (Mud)",
|
||||
"right_legs": "右腿部",
|
||||
"right_leg_mud": "右腿(泥)",
|
||||
"right_legs": "右腿",
|
||||
"right_wing": "右翼",
|
||||
"right_wingclaw": "Wingclaw R",
|
||||
"right_wingclaw": "右翼爪",
|
||||
"rock": "岩石",
|
||||
"shell": "Shell",
|
||||
"shell": "壳",
|
||||
"spinning": "旋转中",
|
||||
"tail": "尾巴",
|
||||
"tail_mud": "尾巴(泥)",
|
||||
"tail_tip": "Tail Tip",
|
||||
"tail_tip": "尾尖",
|
||||
"tail_windsac": "尾巴(风袋)",
|
||||
"thundersacs": "Thundersacs",
|
||||
"thundersacs": "雷袋",
|
||||
"torso": "躯干",
|
||||
"torso_mud": "Torso (Mud)",
|
||||
"unknown": "?",
|
||||
"upper_back": "上背部",
|
||||
"torso_mud": "躯干(泥)",
|
||||
"unknown": "未知【等待更新】",
|
||||
"upper_back": "上背",
|
||||
"upper_body": "上半身",
|
||||
"wingclaw": "Wingclaw",
|
||||
"wingclaws": "Wingclaws",
|
||||
"wingclaw": "翼爪",
|
||||
"wingclaws": "翼爪",
|
||||
"wings": "翼"
|
||||
},
|
||||
"rampage_skills": {
|
||||
"chameleos_soul": "Chameleos Soul",
|
||||
"kushala_daora_soul": "Kushala Daora Soul"
|
||||
},
|
||||
"skills": {
|
||||
"adrenaline_rush": "Adrenaline Rush",
|
||||
"affinity_sliding": "Affinity Sliding",
|
||||
"agitator": "Agitator",
|
||||
"berserk": "Berserk",
|
||||
"bladescale_hone": "Bladescale Hone",
|
||||
"blood_awakening": "Blood Awakening",
|
||||
"bloodlust": "Bloodlust",
|
||||
"burst": "Burst",
|
||||
"coalescence": "Coalescence",
|
||||
"counterstrike": "Counterstrike",
|
||||
"dereliction": "Dereliction",
|
||||
"dragon_conversion_elemental_attack_up": "Dragon Conversion: Elem. Atk Up",
|
||||
"dragon_conversion_elemental_res_up": "Dragon Conversion: Elem. Res Up",
|
||||
"dragonheart": "Dragonheart",
|
||||
"embolden": "Embolden",
|
||||
"frenzied_bloodlust": "Frenzied Bloodlust",
|
||||
"furious": "Furious",
|
||||
"grinder_s": "Grinder (S)",
|
||||
"heaven_sent": "Heaven-Sent",
|
||||
"hellfire_cloak": "Hellfire Cloak",
|
||||
"heroics": "Heroics",
|
||||
"inspiration": "Inspiration",
|
||||
"intrepid_heart": "Intrepid Heart",
|
||||
"latent_power": "Latent Power",
|
||||
"maximum_might": "Maximum Might",
|
||||
"offensive_guard": "Offensive Guard",
|
||||
"partbreaker": "Partbreaker",
|
||||
"peak_performance": "Peak Performance",
|
||||
"powder_mantle_blue": "Powder Mantle (Blue)",
|
||||
"powder_mantle_red": "Powder Mantle (Red)",
|
||||
"protective_polish": "Protective Polish",
|
||||
"resentment": "Resentment",
|
||||
"resuscitate": "Resuscitate",
|
||||
"spiribirds_call": "Spiribird's Call",
|
||||
"status_trigger": "Status Trigger",
|
||||
"strife": "Strife",
|
||||
"wall_runner": "Wall Runner",
|
||||
"wind_mantle": "Wind Mantle"
|
||||
},
|
||||
"stats": {
|
||||
"affinity": "Affinity",
|
||||
"attack": "Attack",
|
||||
"defense": "Defense",
|
||||
"dragon": "Dragon",
|
||||
"dragon_resistance": "Dragon Res",
|
||||
"fire": "Fire",
|
||||
"fire_resistance": "Fire Res",
|
||||
"ice": "Ice",
|
||||
"ice_resistance": "Ice Res",
|
||||
"stamina": "Stamina",
|
||||
"thunder": "Thunder",
|
||||
"thunder_resistance": "Thunder Res",
|
||||
"water": "Water",
|
||||
"water_resistance": "Water Res"
|
||||
},
|
||||
"unicode_glyph_ranges": [
|
||||
32,
|
||||
255,
|
||||
8192,
|
||||
8303,
|
||||
11904,
|
||||
12031,
|
||||
12288,
|
||||
12351,
|
||||
12800,
|
||||
19903,
|
||||
19968,
|
||||
40959,
|
||||
63744,
|
||||
64255,
|
||||
65072,
|
||||
65103,
|
||||
65280,
|
||||
65519,
|
||||
0
|
||||
],
|
||||
"weapon_skills": {
|
||||
"bow": {
|
||||
"arc_shot_affinity": "Arc Shot: Affinity",
|
||||
"arc_shot_brace": "Arc Shot: Brace",
|
||||
"bolt_boost": "Bolt Boost",
|
||||
"herculean_draw": "Herculean Draw"
|
||||
},
|
||||
"charge_blade": {
|
||||
"element_boost": "Element Boost",
|
||||
"sword_boost_mode": "Sword Boost Mode"
|
||||
},
|
||||
"dual_blades": {
|
||||
"archdemon_mode": "Archdemon Mode",
|
||||
"ironshine_silk": "Ironshine Silk"
|
||||
},
|
||||
"great_sword": {
|
||||
"power_sheathe": "Power Sheathe"
|
||||
},
|
||||
"gunlance": {
|
||||
"erupting_cannon": "Erupting Cannon",
|
||||
"ground_splitter": "Ground Splitter"
|
||||
},
|
||||
"hammer": {
|
||||
"impact_burst": "Impact Burst"
|
||||
},
|
||||
"heavy_bowgun": {
|
||||
"counter_charger": "Counter Charger",
|
||||
"overheat": "Overheat",
|
||||
"rising_moon": "Rising Moon",
|
||||
"setting_sun": "Setting Sun",
|
||||
"wyvernsnipe_reload": "Wyvernsnipe Reload"
|
||||
},
|
||||
"hunting_horn": {
|
||||
"bead_of_resonance": "Bead of Resonance",
|
||||
"silkbind_shockwave": "Silkbind Shockwave",
|
||||
"sonic_bloom": "Sonic Bloom"
|
||||
},
|
||||
"insect_glaive": {
|
||||
"all_extracts_mix": "All Extracts Mix",
|
||||
"orange_extract": "Orange Extract",
|
||||
"red_extract": "Red Extract",
|
||||
"white_extract": "White Extract"
|
||||
},
|
||||
"lance": {
|
||||
"anchor_rage": "Anchor Rage",
|
||||
"spiral_thrust": "Spiral Thrust",
|
||||
"twin_wine": "Twin Wine"
|
||||
},
|
||||
"light_bowgun": {
|
||||
"fanning_maneuver": "Fanning Maneuver",
|
||||
"wyvernblast_reload": "Wyvernblast Reload"
|
||||
},
|
||||
"long_sword": {
|
||||
"harvest_moon": "Harvest Moon",
|
||||
"iai_slash": "Iai Slash",
|
||||
"soaring_kick": "Soaring Kick",
|
||||
"spirit_gauge": "Spirit Gauge",
|
||||
"spirit_gauge_autofill": "Spirit Gauge Autofill"
|
||||
},
|
||||
"switch_axe": {
|
||||
"amped_state": "Amped State",
|
||||
"axe_heavy_slam": "Axe: Heavy Slam",
|
||||
"switch_charger": "Switch Charger"
|
||||
},
|
||||
"sword_and_shield": {
|
||||
"destroyer_oil": "Destroyer Oil"
|
||||
}
|
||||
},
|
||||
"weapons": {
|
||||
"bow": "Bow",
|
||||
"charge_blade": "Charge Blade",
|
||||
"dual_blades": "Dual Blades",
|
||||
"great_sword": "Great Sword",
|
||||
"gunlance": "Gunlance",
|
||||
"hammer": "Hammer",
|
||||
"heavy_bowgun": "Heavy Bowgun",
|
||||
"hunting_horn": "Hunting Horn",
|
||||
"insect_glaive": "Insect Glaive",
|
||||
"lance": "Lance",
|
||||
"light_bowgun": "Light Bowgun",
|
||||
"long_sword": "Long Sword",
|
||||
"switch_axe": "Switch Axe",
|
||||
"sword_and_shield": "Sword & Shield"
|
||||
}
|
||||
}
|
||||
@@ -3,11 +3,15 @@
|
||||
"HP": "生命:",
|
||||
"buildup": "累積值:",
|
||||
"gold": "金冠",
|
||||
"lv": "",
|
||||
"mini": "小型",
|
||||
"otomo": "Buddy",
|
||||
"part_anomaly_core": "Anomaly Core",
|
||||
"part_break": "Break",
|
||||
"part_sever": "Sever",
|
||||
"player": "玩家",
|
||||
"rage": "憤怒值:",
|
||||
"servant": "Follower",
|
||||
"silver": "銀冠",
|
||||
"stamina": "耐力:",
|
||||
"total_buildup": "總累積值",
|
||||
@@ -15,30 +19,54 @@
|
||||
},
|
||||
"ailments": {
|
||||
"blast": "爆破",
|
||||
"blastblight": "Blastblight",
|
||||
"bleeding": "Bleeding",
|
||||
"bloodblight": "Bloodblight",
|
||||
"deadly_poison": "Deadly Poison",
|
||||
"defense_down": "Defense Down",
|
||||
"dragonblight": "Dragonblight",
|
||||
"dung_bomb": "異臭",
|
||||
"engulfed": "Engulfed",
|
||||
"exhaust": "疲勞",
|
||||
"fall_otomo_trap": "隨從地洞陷阱",
|
||||
"fall_trap": "地洞陷阱",
|
||||
"falling_asleep": "Falling Asleep",
|
||||
"fireblight": "火屬性異常",
|
||||
"flash": "失明",
|
||||
"frenzy": "Frenzy",
|
||||
"frenzy_infection": "Frenzy Infection",
|
||||
"frenzy_overcome": "Frenzy Overcome",
|
||||
"frostblight": "Frostblight",
|
||||
"hellfireblight": "Hellfireblight",
|
||||
"iceblight": "冰屬性異常",
|
||||
"leeched": "Leeched",
|
||||
"major_bubbleblight": "Major Bubbleblight",
|
||||
"minor_bubbleblight": "Minor Bubbleblight",
|
||||
"muck": "Muck",
|
||||
"paralysis": "麻痺",
|
||||
"poison": "毒",
|
||||
"quick_sand": "流沙",
|
||||
"resistance_down": "Resistance Down",
|
||||
"ride": "操龍",
|
||||
"roar": "Roar",
|
||||
"shock_otomo_trap": "隨從麻痺陷阱",
|
||||
"shock_trap": "麻痺陷阱",
|
||||
"sleep": "睡眠",
|
||||
"steel_fang": "獵犬鋼牙",
|
||||
"stench": "Stench",
|
||||
"stun": "暈眩",
|
||||
"thunderblight": "雷屬性異常",
|
||||
"tranq_bomb": "麻醉",
|
||||
"waterblight": "水屬性異常"
|
||||
"tremor": "Tremor",
|
||||
"waterblight": "水屬性異常",
|
||||
"webbed": "Webbed"
|
||||
},
|
||||
"customization_menu": {
|
||||
"UI_font": "UI 字型",
|
||||
"UI_font_notice": "當更改文字時,請重新載入",
|
||||
"abnormal_statuses": "Abnormal Statuses",
|
||||
"activation_count": "觸發次數",
|
||||
"affinity_label": "Affinity Label",
|
||||
"ailment_buildups": "異常狀態累積值",
|
||||
"ailment_name": "異常狀態",
|
||||
"ailment_name_label": "異常狀態名稱",
|
||||
@@ -46,23 +74,32 @@
|
||||
"ailments": "異常狀態",
|
||||
"all_UI": "全部UI",
|
||||
"anchor": "錨點",
|
||||
"anomaly_cores": "Anomaly Cores",
|
||||
"anomaly_filter": "Anomaly Core",
|
||||
"anomaly_health": "Anomaly Core Health",
|
||||
"anomaly_health_percentage": "Anomaly Core Health Percentage",
|
||||
"apply": "套用",
|
||||
"assign_new_key": "指定新按鍵",
|
||||
"attack_label": "Attack Label",
|
||||
"auto_highlight": "自動高亮",
|
||||
"background": "圖形化顯示條的背景底色",
|
||||
"bar": "圖形化顯示條",
|
||||
"blast_damage": "爆破傷害",
|
||||
"blast": "爆破",
|
||||
"body_parts": "身體部位",
|
||||
"bold": "粗體",
|
||||
"bomb_damage": "爆炸傷害",
|
||||
"bombs": "Bombs",
|
||||
"bottom_left": "左下",
|
||||
"bottom_right": "右下",
|
||||
"bottom_to_top": "Bottom to Top",
|
||||
"break_anomaly_filter": "Break + Anomaly Core",
|
||||
"break_count": "破壞次數",
|
||||
"break_filter": "Break",
|
||||
"break_health": "Break Health",
|
||||
"break_health_percentage": "Break Health Percentage",
|
||||
"break_max_count": "Break Max Count",
|
||||
"break_severe_filter": "Break + Severe",
|
||||
"break_sever_anomaly_filter": "Break + Sever + Anomaly Core",
|
||||
"break_sever_filter": "Break + Sever",
|
||||
"buff_UI": "Buff UI",
|
||||
"buildup": "累積值",
|
||||
"buildup_bar": "累積值條",
|
||||
"buildup_bars_are_relative_to": "累積值條顯示位置調整",
|
||||
@@ -76,48 +113,75 @@
|
||||
"closest": "最近的",
|
||||
"color": "調色盤",
|
||||
"colors": "調色盤",
|
||||
"config": "Config",
|
||||
"creature_name_label": "環境生物名稱",
|
||||
"crown": "皇冠",
|
||||
"crown_thresholds": "皇冠的大小判定範圍",
|
||||
"current_state": "Current State",
|
||||
"current_time": "Current Time",
|
||||
"current_value": "Current Value",
|
||||
"cutscene": "Cutscene",
|
||||
"damage": "傷害",
|
||||
"damage_bar": "傷害條",
|
||||
"damage_bars_are_relative_to": "傷害條基於",
|
||||
"damage_meter_UI": "傷害量計算 UI",
|
||||
"damage_percentage_label": "傷害量百分比",
|
||||
"damage_value_label": "傷害量",
|
||||
"dango_skills": "Dango Skills",
|
||||
"debug": "Debug",
|
||||
"default_state": "Default State",
|
||||
"defense_label": "Defense Label",
|
||||
"delete": "Delete",
|
||||
"distance": "距離",
|
||||
"dps": "DPS",
|
||||
"dps_label": "DPS文字",
|
||||
"dps_mode": "DPS模式",
|
||||
"during_quest": "任務中",
|
||||
"dragon_resistance_label": "Dragon Resistance Label",
|
||||
"duplicate": "Duplicate",
|
||||
"duration": "Duration",
|
||||
"dynamic_positioning": "浮動的資訊位置",
|
||||
"dynamically_positioned": "浮動的魔物資訊",
|
||||
"effect_level": "Effect Level",
|
||||
"element_2_label": "Element 2 Label",
|
||||
"element_label": "Element Label",
|
||||
"enable_for": "啟用對象",
|
||||
"enabled": "啟用",
|
||||
"endemic_life": "Endemic Life",
|
||||
"endemic_life_UI": "環境生物 UI",
|
||||
"endemic_life_damage": "環境生物傷害",
|
||||
"endemic_life_buffs": "Endemic Life Buffs",
|
||||
"everything_seems_to_be_ok": "Everything seems to be OK!",
|
||||
"family": "字體",
|
||||
"farthest": "最遠的",
|
||||
"fight_time": "戰鬥時間",
|
||||
"fill_direction": "Fill Direction",
|
||||
"filter": "篩選器",
|
||||
"filter_mode": "Filter Mode",
|
||||
"fire_resistance_label": "Fire Resistance Label",
|
||||
"first": "第一",
|
||||
"first_hit": "第一擊",
|
||||
"flinch_count": "膽怯次數",
|
||||
"foreground": "圖形化顯示條的底色",
|
||||
"freeze_dps_on_quest_clear": "當任務結束時凍結DPS",
|
||||
"freeze_dps_on_quest_end": "Freeze DPS on Quest End",
|
||||
"global_position_modifier": "全域位置更改",
|
||||
"global_scale_modifier": "全域比例更改",
|
||||
"global_settings": "全域設定",
|
||||
"head_tracking": "Head Tracking",
|
||||
"health": "血量",
|
||||
"health_anomaly_filter": "Health + Anomaly Core",
|
||||
"health_break_anomaly_filter": "Health + Break + Anomaly Core",
|
||||
"health_break_filter": "Health + Break",
|
||||
"health_break_severe_filter": "Health + Break + Severe",
|
||||
"health_break_sever_anomaly_filter": "Health + Break + Sever + Anomaly Core",
|
||||
"health_break_sever_filter": "Health + Break + Sever",
|
||||
"health_filter": "Health",
|
||||
"health_label": "Health Label",
|
||||
"health_percentage": "血量百分比",
|
||||
"health_severe_filter": "Health + Severe",
|
||||
"health_sever_anomaly_filter": "Health + Sever + Anomaly Core",
|
||||
"health_sever_filter": "Health + Sever",
|
||||
"height": "高度",
|
||||
"hide_ailments_with_zero_buildup": "當累積值為0時,隱藏該異常狀態",
|
||||
"hide_all_active_ailments": "隱藏觸發中的異常狀態",
|
||||
"hide_all_inactive_ailments": "隱藏尚未被觸發的異常狀態",
|
||||
"hide_bar_for_infinite_buffs": "Hide Bar for infinite Buffs",
|
||||
"hide_dead_or_captured": "隱藏死亡或被捕獲的魔物",
|
||||
"hide_disabled_ailments": "隱藏並停用所有異常狀態",
|
||||
"hide_inactive_ailments_with_no_buildup_support": "隱藏無累積值的非觸發下異常狀態",
|
||||
@@ -126,25 +190,37 @@
|
||||
"hide_myself": "隱藏自己",
|
||||
"hide_other_players": "隱藏其他玩家",
|
||||
"hide_player_if_player_damage_is_zero": "當玩家傷害為0時,隱藏玩家傷害",
|
||||
"hide_servants": "Hide Followers",
|
||||
"hide_timer_for_infinite_buffs": "Hide Timer for infinite Buffs",
|
||||
"hide_total_damage": "隱藏總傷害",
|
||||
"hide_total_if_total_damage_is_zero": "當總傷害為0時,隱藏總傷害",
|
||||
"hide_undamaged_parts": "隱藏沒受到傷害的部位",
|
||||
"highest_health": "最高血量",
|
||||
"highest_health_percentage": "最高血量百分比",
|
||||
"highlighted": "鎖定的魔物資訊(目標)",
|
||||
"highlighted": "鎖定的魔物資訊",
|
||||
"highlighted_bar": "重點條",
|
||||
"highlighted_buildup_bar": "重點累積條",
|
||||
"highlighted_damage_bar": "重點傷害條",
|
||||
"highlighted_targeted": "鎖定的魔物資訊(目標)",
|
||||
"history": "History",
|
||||
"history_size": "History Size",
|
||||
"horizontal": "水平",
|
||||
"hotkeys": "快捷鍵",
|
||||
"hunter_rank": "獵人等級",
|
||||
"hunter_rank_label": "獵人等級",
|
||||
"ice_resistance_label": "Ice Resistance Label",
|
||||
"id": "ID",
|
||||
"in_lobby": "In Lobby",
|
||||
"in_training_area": "In Training Area",
|
||||
"include": "細部資訊調整",
|
||||
"infinite_buffs_location": "Infinite Buffs Location",
|
||||
"inside": "內部",
|
||||
"installation_damage": "設備傷害",
|
||||
"installations": "Installations",
|
||||
"italic": "斜體",
|
||||
"item_buffs": "Item Buffs",
|
||||
"join_time": "加入時間",
|
||||
"kunai_damage": "苦無傷害",
|
||||
"killcam": "Killcam",
|
||||
"kunai": "Kunai",
|
||||
"language": "語言",
|
||||
"large_monster_UI": "大型魔物 UI",
|
||||
"large_monster_dynamic_UI": "大型魔物浮動 UI",
|
||||
@@ -152,6 +228,10 @@
|
||||
"large_monster_static_UI": "大型魔物固定 UI",
|
||||
"large_monsters": "大型魔物群",
|
||||
"last": "最後",
|
||||
"left_to_right": "Left to Right",
|
||||
"level": "Level",
|
||||
"level_label": "Level Label",
|
||||
"loading_quest": "Loading Quest",
|
||||
"loss_health": "Sever Health",
|
||||
"loss_health_percentage": "Sever Health Percentage",
|
||||
"lowest_health": "最低血量",
|
||||
@@ -159,29 +239,39 @@
|
||||
"master_rank": "大師等級",
|
||||
"max_distance": "最大距離",
|
||||
"max_monster_updates_per_tick": "每次更新的最大魔物數量",
|
||||
"max_value": "Max Value",
|
||||
"me": "我",
|
||||
"melody_effects": "Melody Effects",
|
||||
"menu_font": "選單字體大小",
|
||||
"menu_font_change_disclaimer": "重複變更語言和選單字型大小有可能會當機!",
|
||||
"misc_buffs": "Misc Buffs",
|
||||
"mod_name": "MHR Overlay",
|
||||
"mode": "Mode",
|
||||
"modifiers": "更改項",
|
||||
"module_visibility_on_different_screens": "不同場景中使用的模組",
|
||||
"module_visibility_based_on_game_state": "Module Visibility based on Game State",
|
||||
"modules": "模組",
|
||||
"monster_can_be_captured": "可捕獲的魔物",
|
||||
"monster_damage": "魔物傷害",
|
||||
"monster_id": "Monster ID",
|
||||
"monster_name": "魔物名稱",
|
||||
"monster_name_label": "魔物名稱",
|
||||
"monsters": "Monsters",
|
||||
"my_damage_bar_location": "我的傷害條",
|
||||
"my_otomos": "My Buddies",
|
||||
"myself": "Myself",
|
||||
"name": "Name",
|
||||
"name_label": "Name Label",
|
||||
"new": "New",
|
||||
"none": "空",
|
||||
"normal": "正常",
|
||||
"offset": "位置",
|
||||
"offset_is_relative_to_parts": "與部位顯示相對偏移",
|
||||
"opacity_falloff": "透明度提高",
|
||||
"orientation": "對齊方式",
|
||||
"other_damage": "其他傷害",
|
||||
"other": "Other",
|
||||
"other_player_otomos": "Other Player Buddies",
|
||||
"other_players": "其他玩家",
|
||||
"otomo_damage": "隨從傷害",
|
||||
"otomo_moves": "Buddy Moves",
|
||||
"otomos": "Buddies",
|
||||
"outline": "描邊",
|
||||
"outside": "外部",
|
||||
"part_health": "部位血量",
|
||||
@@ -189,79 +279,199 @@
|
||||
"part_name_label": "部位名稱",
|
||||
"percentage_label": "百分比",
|
||||
"performance": "效能",
|
||||
"player_damage": "玩家傷害量",
|
||||
"player_id": "玩家ID",
|
||||
"player_name": "玩家名稱",
|
||||
"player_name_label": "玩家名稱",
|
||||
"player_name_size_limit": "玩家名稱大小限制",
|
||||
"player_spacing": "玩家間格",
|
||||
"poison_damage": "毒傷害",
|
||||
"players": "Players",
|
||||
"playing_quest": "Playing Quest",
|
||||
"poison": "毒",
|
||||
"position": "位置",
|
||||
"press_any_key": "輸入任意鍵...",
|
||||
"prioritize_large_monsters": "大型魔物優先",
|
||||
"quest_result_screen": "任務結算頁",
|
||||
"quest_end_animation": "Quest End Animation",
|
||||
"quest_end_screen": "Quest End Screen",
|
||||
"quest_end_timer": "Quest End Timer",
|
||||
"quest_start_animation": "Quest Start Animation",
|
||||
"quest_time": "任務時間",
|
||||
"rage": "憤怒度",
|
||||
"rampage_skills": "Rampage Skills",
|
||||
"reframework_outdated": "已安裝的 REFramework 版本已過期. 麻煩請更新版本, 否則 MHR Overlay 無法正確作用.",
|
||||
"relative_offset": "相對偏移",
|
||||
"rename": "Rename",
|
||||
"render_highlighted_monster": "渲染目標魔物",
|
||||
"render_inactive_anomaly_cores": "Render Inactive Anomaly Cores",
|
||||
"render_not_highlighted_monsters": "渲染非目標魔物",
|
||||
"renderer": "Renderer",
|
||||
"reset": "Reset",
|
||||
"reversed_order": "反向排序",
|
||||
"reward_screen": "Reward Screen",
|
||||
"right_alignment_shift": "Right Alignment Shift",
|
||||
"right_to_left": "Right to Left",
|
||||
"servant_otomos": "Servant Buddies",
|
||||
"servants": "Followers",
|
||||
"settings": "設定",
|
||||
"severe_filter": "Severe",
|
||||
"sever_anomaly_filter": "Sever + Anomaly Core",
|
||||
"sever_filter": "Sever",
|
||||
"shadow": "陰影",
|
||||
"show_my_otomos_separately": "Show my Buddies separately",
|
||||
"show_other_player_otomos_separately": "Show Other Player Buddies separately",
|
||||
"show_servant_otomos_separately": "Show Follower Buddies separately",
|
||||
"size": "大小",
|
||||
"skills": "Skills",
|
||||
"small_monster_UI": "小型魔物 UI",
|
||||
"small_monsters": "小型魔物群",
|
||||
"sorting": "排序方式",
|
||||
"spacing": "間距",
|
||||
"stamina": "耐力",
|
||||
"stamina_label": "Stamina Label",
|
||||
"static_orientation": "固定魔物資訊的對齊方式",
|
||||
"static_position": "固定魔物資訊的位置",
|
||||
"static_sorting": "固定魔物資訊的排序",
|
||||
"static_spacing": "固定魔物資訊的間距",
|
||||
"statically_positioned": "固定的魔物資訊",
|
||||
"stats_UI": "Stats UI",
|
||||
"status": "狀態",
|
||||
"style": "樣式",
|
||||
"summary_screen": "Summary Screen",
|
||||
"text_label": "文字",
|
||||
"thickness": "粗細",
|
||||
"thunder_resistance_label": "Thunder Resistance Label",
|
||||
"time_UI": "時間 UI",
|
||||
"time_label": "時間",
|
||||
"time_limit": "時限 (秒)",
|
||||
"timer": "Timer",
|
||||
"timer_delays": "Timer Delays",
|
||||
"timer_label": "計時器",
|
||||
"top_buildup": "最高累積值",
|
||||
"top_damage": "最高傷害",
|
||||
"top_dps": "最高 DPS",
|
||||
"top_left": "左上",
|
||||
"top_right": "右上",
|
||||
"top_to_bottom": "Top to Bottom",
|
||||
"total": "Total",
|
||||
"total_buildup": "總累積值",
|
||||
"total_buildup_label": "總累積值文字",
|
||||
"total_buildup_value_label": "總累積值數值文字",
|
||||
"total_cart_count_label": "Total Cart Count Label",
|
||||
"total_damage": "總傷害",
|
||||
"total_damage_label": "總傷害文字",
|
||||
"total_damage_location": "Total Damage Bar Location",
|
||||
"total_damage_offset_is_relative": "總傷害顯示位置調整",
|
||||
"total_damage_value_label": "總傷害量",
|
||||
"total_dps": "全體DPS",
|
||||
"total_dps_label": "全體DPS文字",
|
||||
"tracked_damage_types": "追蹤的傷害類型",
|
||||
"tracked_monster_types": "追蹤的魔物類型",
|
||||
"training_area": "訓練場",
|
||||
"type": "類型",
|
||||
"update_buffs_delay": "Update Buffs (seconds)",
|
||||
"update_is_online_delay": "Update Is Online (seconds)",
|
||||
"update_myself_position_delay": "Update Myself Position (seconds)",
|
||||
"update_player_info_delay": "Update Player Info (seconds)",
|
||||
"update_players_delay": "Update Players (seconds)",
|
||||
"update_quest_time_delay": "Update Quest Time (seconds)",
|
||||
"update_singletons_delay": "Update Singletons (seconds)",
|
||||
"update_window_size_delay": "Update Window Size (seconds)",
|
||||
"use_d2d_if_available": "Use Direct2D if available",
|
||||
"value": "Value",
|
||||
"value_label": "數字",
|
||||
"vertical": "垂直",
|
||||
"viewport_offset": "視窗的位置",
|
||||
"visible": "可見",
|
||||
"water_resistance_label": "Water Resistance Label",
|
||||
"weapon_skills": "Weapon Skills",
|
||||
"width": "寬度",
|
||||
"word_player": "名稱 \"玩家\"",
|
||||
"world_offset": "地圖中的位置",
|
||||
"wyvern_riding_damage": "操龍傷害",
|
||||
"wyvern_riding": "Wyvern Riding",
|
||||
"x": "X軸",
|
||||
"y": "Y軸",
|
||||
"z": "Z軸"
|
||||
},
|
||||
"dango_skills": {
|
||||
"dango_adrenaline": "Dango Adrenaline",
|
||||
"dango_booster": "Dango Booster",
|
||||
"dango_bulker": "Dango Bulker",
|
||||
"dango_connector": "Dango Connector",
|
||||
"dango_defender": "Dango Defender",
|
||||
"dango_flyer": "Dango Flyer",
|
||||
"dango_glutton": "Dango Glutton",
|
||||
"dango_hunter": "Dango Hunter",
|
||||
"dango_insurance": "Dango Insurance",
|
||||
"dango_insurance_defense_up": "Dango Insurance Defense Up",
|
||||
"super_recovery_dango": "Super Recovery Dango"
|
||||
},
|
||||
"endemic_life": {
|
||||
"butterflame": "Butterflame",
|
||||
"clothfly": "Clothfly",
|
||||
"cutterfly": "Cutterfly",
|
||||
"gold_wirebug": "Gold Wirebug",
|
||||
"peepersects": "Peepersects",
|
||||
"red_lampsquid": "Red Lampsquid",
|
||||
"ruby_wirebug": "Ruby Wirebug",
|
||||
"stinkmink": "Stinkmink",
|
||||
"yellow_lampsquid": "Yellow Lampsquid"
|
||||
},
|
||||
"font_name": "NotoSansTC-Bold.otf",
|
||||
"item_buffs": {
|
||||
"adamant_seed": "Adamant Seed",
|
||||
"armor_ammo": "Armor Ammo",
|
||||
"armorskin": "Armorskin",
|
||||
"dash_juice": "Dash Juice",
|
||||
"demon_ammo": "Demon Ammo",
|
||||
"demon_powder": "Demon Powder",
|
||||
"demondrug": "Demondrug",
|
||||
"gourmet_fish": "Gourmet Fish",
|
||||
"hardshell_powder": "Hardshell Powder",
|
||||
"immunizer": "Immunizer",
|
||||
"mega_armorskin": "Mega Armorskin",
|
||||
"mega_demondrug": "Mega Demondrug",
|
||||
"might_seed": "Might Seed"
|
||||
},
|
||||
"melody_effects": {
|
||||
"affinity_up": "Affinity Up",
|
||||
"attack_and_affinity_up": "Attack and Affinity Up",
|
||||
"attack_and_defense_up": "Attack and Defense Up",
|
||||
"attack_up": "Attack Up",
|
||||
"blight_negated": "Blight Negated",
|
||||
"defense_up": "Defense Up",
|
||||
"divine_protection": "Divine Protection",
|
||||
"earplugs_l": "Earplugs (L)",
|
||||
"earplugs_s": "Earplugs (S)",
|
||||
"elemental_attack_boost": "Elemental Attack Boost",
|
||||
"environment_damage_negated": "Environment Damage Negated",
|
||||
"health_recovery_l": "Health Recovery (L)",
|
||||
"health_recovery_s": "Health Recovery (S)",
|
||||
"health_recovery_s_antidote": "Health Recovery (S) + Antidote",
|
||||
"health_regeneration": "Health Regeneration",
|
||||
"infernal_melody": "Infernal Melody",
|
||||
"knockbacks_negated": "Knockbacks Negated",
|
||||
"self_improvement": "Self-Improvement",
|
||||
"sharpness_extension": "Sharpness Extension",
|
||||
"sharpness_loss_reduced": "Sharpness Loss Reduced",
|
||||
"sharpness_regeneration": "Sharpness Regeneration",
|
||||
"sonic_barrier": "Sonic Barrier",
|
||||
"sonic_wave": "Sonic Wave",
|
||||
"stamina_recovery_up": "Stamina Recovery Up",
|
||||
"stamina_use_reduced": "Stamina Use Reduced",
|
||||
"stun_negated": "Stun Negated",
|
||||
"tremors_negated": "Tremors Negated",
|
||||
"wind_pressure_negated": "Wind Pressure Negated"
|
||||
},
|
||||
"misc_buffs": {
|
||||
"attack_up": "Attack Up",
|
||||
"defense_up": "Defense Up",
|
||||
"immunity": "Immunity",
|
||||
"natural_healing_up": "Natural Healing Up",
|
||||
"stamina_use_down": "Stamina Use Down"
|
||||
},
|
||||
"otomo_moves": {
|
||||
"go_fight_win": "Go, Fight, Win",
|
||||
"power_drum": "Power Drum",
|
||||
"rousing_roar": "Rousing Roar",
|
||||
"vase_of_vitality": "Vase of Vitality"
|
||||
},
|
||||
"parts": {
|
||||
"abdomen": "腹部",
|
||||
"amatsu_unknown": "?",
|
||||
"antenna": "觸角",
|
||||
"arms": "手臂",
|
||||
"arms_mud": "手臂 (泥)",
|
||||
@@ -327,5 +537,170 @@
|
||||
"wingclaw": "翼爪",
|
||||
"wingclaws": "翼爪",
|
||||
"wings": "翅膀"
|
||||
},
|
||||
"rampage_skills": {
|
||||
"chameleos_soul": "Chameleos Soul",
|
||||
"kushala_daora_soul": "Kushala Daora Soul"
|
||||
},
|
||||
"skills": {
|
||||
"adrenaline_rush": "Adrenaline Rush",
|
||||
"affinity_sliding": "Affinity Sliding",
|
||||
"agitator": "Agitator",
|
||||
"berserk": "Berserk",
|
||||
"bladescale_hone": "Bladescale Hone",
|
||||
"blood_awakening": "Blood Awakening",
|
||||
"bloodlust": "Bloodlust",
|
||||
"burst": "Burst",
|
||||
"coalescence": "Coalescence",
|
||||
"counterstrike": "Counterstrike",
|
||||
"dereliction": "Dereliction",
|
||||
"dragon_conversion_elemental_attack_up": "Dragon Conversion: Elem. Atk Up",
|
||||
"dragon_conversion_elemental_res_up": "Dragon Conversion: Elem. Res Up",
|
||||
"dragonheart": "Dragonheart",
|
||||
"embolden": "Embolden",
|
||||
"frenzied_bloodlust": "Frenzied Bloodlust",
|
||||
"furious": "Furious",
|
||||
"grinder_s": "Grinder (S)",
|
||||
"heaven_sent": "Heaven-Sent",
|
||||
"hellfire_cloak": "Hellfire Cloak",
|
||||
"heroics": "Heroics",
|
||||
"inspiration": "Inspiration",
|
||||
"intrepid_heart": "Intrepid Heart",
|
||||
"latent_power": "Latent Power",
|
||||
"maximum_might": "Maximum Might",
|
||||
"offensive_guard": "Offensive Guard",
|
||||
"partbreaker": "Partbreaker",
|
||||
"peak_performance": "Peak Performance",
|
||||
"powder_mantle_blue": "Powder Mantle (Blue)",
|
||||
"powder_mantle_red": "Powder Mantle (Red)",
|
||||
"protective_polish": "Protective Polish",
|
||||
"resentment": "Resentment",
|
||||
"resuscitate": "Resuscitate",
|
||||
"spiribirds_call": "Spiribird's Call",
|
||||
"status_trigger": "Status Trigger",
|
||||
"strife": "Strife",
|
||||
"wall_runner": "Wall Runner",
|
||||
"wind_mantle": "Wind Mantle"
|
||||
},
|
||||
"stats": {
|
||||
"affinity": "Affinity",
|
||||
"attack": "Attack",
|
||||
"defense": "Defense",
|
||||
"dragon": "Dragon",
|
||||
"dragon_resistance": "Dragon Res",
|
||||
"fire": "Fire",
|
||||
"fire_resistance": "Fire Res",
|
||||
"ice": "Ice",
|
||||
"ice_resistance": "Ice Res",
|
||||
"stamina": "Stamina",
|
||||
"thunder": "Thunder",
|
||||
"thunder_resistance": "Thunder Res",
|
||||
"water": "Water",
|
||||
"water_resistance": "Water Res"
|
||||
},
|
||||
"unicode_glyph_ranges": [
|
||||
32,
|
||||
255,
|
||||
8192,
|
||||
8303,
|
||||
11904,
|
||||
12031,
|
||||
12288,
|
||||
12351,
|
||||
12800,
|
||||
19903,
|
||||
19968,
|
||||
40959,
|
||||
63744,
|
||||
64255,
|
||||
65072,
|
||||
65103,
|
||||
65280,
|
||||
65519,
|
||||
0
|
||||
],
|
||||
"weapon_skills": {
|
||||
"bow": {
|
||||
"arc_shot_affinity": "Arc Shot: Affinity",
|
||||
"arc_shot_brace": "Arc Shot: Brace",
|
||||
"bolt_boost": "Bolt Boost",
|
||||
"herculean_draw": "Herculean Draw"
|
||||
},
|
||||
"charge_blade": {
|
||||
"element_boost": "Element Boost",
|
||||
"sword_boost_mode": "Sword Boost Mode"
|
||||
},
|
||||
"dual_blades": {
|
||||
"archdemon_mode": "Archdemon Mode",
|
||||
"ironshine_silk": "Ironshine Silk"
|
||||
},
|
||||
"great_sword": {
|
||||
"power_sheathe": "Power Sheathe"
|
||||
},
|
||||
"gunlance": {
|
||||
"erupting_cannon": "Erupting Cannon",
|
||||
"ground_splitter": "Ground Splitter"
|
||||
},
|
||||
"hammer": {
|
||||
"impact_burst": "Impact Burst"
|
||||
},
|
||||
"heavy_bowgun": {
|
||||
"counter_charger": "Counter Charger",
|
||||
"overheat": "Overheat",
|
||||
"rising_moon": "Rising Moon",
|
||||
"setting_sun": "Setting Sun",
|
||||
"wyvernsnipe_reload": "Wyvernsnipe Reload"
|
||||
},
|
||||
"hunting_horn": {
|
||||
"bead_of_resonance": "Bead of Resonance",
|
||||
"silkbind_shockwave": "Silkbind Shockwave",
|
||||
"sonic_bloom": "Sonic Bloom"
|
||||
},
|
||||
"insect_glaive": {
|
||||
"all_extracts_mix": "All Extracts Mix",
|
||||
"orange_extract": "Orange Extract",
|
||||
"red_extract": "Red Extract",
|
||||
"white_extract": "White Extract"
|
||||
},
|
||||
"lance": {
|
||||
"anchor_rage": "Anchor Rage",
|
||||
"spiral_thrust": "Spiral Thrust",
|
||||
"twin_wine": "Twin Wine"
|
||||
},
|
||||
"light_bowgun": {
|
||||
"fanning_maneuver": "Fanning Maneuver",
|
||||
"wyvernblast_reload": "Wyvernblast Reload"
|
||||
},
|
||||
"long_sword": {
|
||||
"harvest_moon": "Harvest Moon",
|
||||
"iai_slash": "Iai Slash",
|
||||
"soaring_kick": "Soaring Kick",
|
||||
"spirit_gauge": "Spirit Gauge",
|
||||
"spirit_gauge_autofill": "Spirit Gauge Autofill"
|
||||
},
|
||||
"switch_axe": {
|
||||
"amped_state": "Amped State",
|
||||
"axe_heavy_slam": "Axe: Heavy Slam",
|
||||
"switch_charger": "Switch Charger"
|
||||
},
|
||||
"sword_and_shield": {
|
||||
"destroyer_oil": "Destroyer Oil"
|
||||
}
|
||||
},
|
||||
"weapons": {
|
||||
"bow": "Bow",
|
||||
"charge_blade": "Charge Blade",
|
||||
"dual_blades": "Dual Blades",
|
||||
"great_sword": "Great Sword",
|
||||
"gunlance": "Gunlance",
|
||||
"hammer": "Hammer",
|
||||
"heavy_bowgun": "Heavy Bowgun",
|
||||
"hunting_horn": "Hunting Horn",
|
||||
"insect_glaive": "Insect Glaive",
|
||||
"lance": "Lance",
|
||||
"light_bowgun": "Light Bowgun",
|
||||
"long_sword": "Long Sword",
|
||||
"switch_axe": "Switch Axe",
|
||||
"sword_and_shield": "Sword & Shield"
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
reframework/fonts/NotoSans-Bold.otf
Normal file
BIN
reframework/fonts/NotoSans-Bold.otf
Normal file
Binary file not shown.
Binary file not shown.
BIN
reframework/fonts/NotoSansArabic-Bold.otf
Normal file
BIN
reframework/fonts/NotoSansArabic-Bold.otf
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user