mirror of
https://github.com/GreenComfyTea/MHR-Overlay.git
synced 2026-01-30 07:18:03 -08:00
Compare commits
130 Commits
v2.5
...
5177a207a9
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 |
135
README.md
135
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/2023?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.503%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%20v0.4.0%2B-yellow?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,8 +135,8 @@ 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.503 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) (v0.4.0+) - Needed for Unicode Support.
|
||||
|
||||
# How to install:
|
||||
1. Install [REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26);
|
||||
@@ -53,4 +173,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>
|
||||
|
||||
|
||||
@@ -35,13 +35,26 @@ 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 part_names = require("MHR_Overlay.Misc.part_names");
|
||||
local utils = require("MHR_Overlay.Misc.utils");
|
||||
|
||||
--local buffs = require("MHR_Overlay.Buffs.buffs");
|
||||
local player_info = require("MHR_Overlay.Misc.player_info");
|
||||
|
||||
local buffs = require("MHR_Overlay.Buffs.buffs");
|
||||
local consumables = require("MHR_Overlay.Buffs.consumables");
|
||||
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");
|
||||
@@ -63,7 +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 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");
|
||||
@@ -72,7 +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 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");
|
||||
@@ -92,15 +106,96 @@ local drawing = require("MHR_Overlay.UI.drawing");
|
||||
|
||||
------------------------INIT MODULES-------------------------
|
||||
-- #region
|
||||
|
||||
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();
|
||||
consumables.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();
|
||||
part_names.init_module();
|
||||
|
||||
screen.init_module();
|
||||
singletons.init_module();
|
||||
utils.init_module();
|
||||
time.init_module();
|
||||
|
||||
language.init_module();
|
||||
config.init_module();
|
||||
part_names.init_module();
|
||||
|
||||
damage_UI_entity.init_module();
|
||||
health_UI_entity.init_module();
|
||||
stamina_UI_entity.init_module();
|
||||
@@ -108,9 +203,21 @@ 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();
|
||||
buff_UI_entity.init_module();
|
||||
|
||||
--buffs.init_module();
|
||||
player_info.init_module();
|
||||
|
||||
buffs.init_module();
|
||||
consumables.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();
|
||||
players.init_module();
|
||||
@@ -151,7 +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();
|
||||
buff_UI.init_module();
|
||||
stats_UI.init_module();
|
||||
|
||||
keyboard.init_module();
|
||||
|
||||
@@ -162,68 +270,107 @@ log.info("[MHR Overlay] Loaded.");
|
||||
----------------------------LOOP-----------------------------
|
||||
-- #region
|
||||
|
||||
local function draw_modules(module_visibility_config, flow_state_name)
|
||||
local function update_modules(module_visibility_config, flow_state_name)
|
||||
if module_visibility_config.small_monster_UI and config.current_config.small_monster_UI.enabled then
|
||||
local success = pcall(small_monster_UI.draw);
|
||||
local success = pcall(small_monster_UI.update);
|
||||
if not success then
|
||||
customization_menu.status = string.format("[%s] Small Monster UI Drawing Function threw an Exception", flow_state_name);
|
||||
error_handler.report("MHR_Overlay.update_modules", string.format("[%s] Small Monster UI Update Function threw an Exception", flow_state_name));
|
||||
end
|
||||
end
|
||||
|
||||
local large_monster_UI_config = 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;
|
||||
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 = 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 Update Function threw an Exception", flow_state_name));
|
||||
end
|
||||
end
|
||||
|
||||
if config.current_config.damage_meter_UI.enabled and module_visibility_config.damage_meter_UI then
|
||||
local success = pcall(damage_meter_UI.update);
|
||||
if not success then
|
||||
error_handler.report("MHR_Overlay.update_modules", string.format("[%s] Damage Meter UI Update Function threw an Exception", flow_state_name));
|
||||
end
|
||||
end
|
||||
|
||||
if config.current_config.endemic_life_UI.enabled and module_visibility_config.endemic_life_UI then
|
||||
local success = pcall(env_creature_UI.update);
|
||||
if not success then
|
||||
error_handler.report("MHR_Overlay.update_modules", string.format("[%s] Endemic Life UI Update Function threw an Exception", flow_state_name));
|
||||
end
|
||||
end
|
||||
|
||||
if config.current_config.buff_UI.enabled and module_visibility_config.buff_UI then
|
||||
local success = pcall(buff_UI.update);
|
||||
if not success then
|
||||
error_handler.report("MHR_Overlay.update_modules", string.format("[%s] Buff UI Update Function threw an Exception", flow_state_name));
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function draw_modules(module_visibility_config, flow_state_name)
|
||||
if module_visibility_config.small_monster_UI and config.current_config.small_monster_UI.enabled then
|
||||
local success = pcall(small_monster_UI.draw);
|
||||
if not success then
|
||||
error_handler.report("MHR_Overlay.draw_modules", string.format("[%s] Small Monster UI Draw Function threw an Exception", flow_state_name));
|
||||
end
|
||||
end
|
||||
|
||||
local large_monster_UI_config = 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 = pcall(large_monster_UI.draw, dynamic_enabled, static_enabled, highlighted_enabled);
|
||||
if not success then
|
||||
customization_menu.status = string.format("[%s] Large Monster UI Drawing Function threw an Exception", flow_state_name);
|
||||
error_handler.report("MHR_Overlay.draw_modules", string.format("[%s] Large Monster UI Draw Function threw an Exception", flow_state_name));
|
||||
end
|
||||
end
|
||||
|
||||
if config.current_config.time_UI.enabled and module_visibility_config.time_UI then
|
||||
local success = pcall(time_UI.draw);
|
||||
if not success then
|
||||
customization_menu.status = string.format("[%s] Time UI Drawing Function threw an Exception", flow_state_name);
|
||||
error_handler.report("MHR_Overlay.draw_modules", string.format("[%s] Time UI Draw Function threw an Exception", flow_state_name));
|
||||
end
|
||||
end
|
||||
|
||||
if config.current_config.damage_meter_UI.enabled and module_visibility_config.damage_meter_UI then
|
||||
local success = pcall(damage_meter_UI.draw);
|
||||
if not success then
|
||||
customization_menu.status = string.format("[%s] Damage Meter UI Drawing Function threw an Exception", flow_state_name);
|
||||
error_handler.report("MHR_Overlay.draw_modules", string.format("[%s] Damage Meter UI Draw Function threw an Exception", flow_state_name));
|
||||
end
|
||||
end
|
||||
|
||||
if config.current_config.endemic_life_UI.enabled and module_visibility_config.endemic_life_UI then
|
||||
local success = pcall(env_creature_UI.draw);
|
||||
if not success then
|
||||
customization_menu.status = string.format("[%s] Endemic Life UI Drawing Function threw an Exception", flow_state_name);
|
||||
error_handler.report("MHR_Overlay.draw_modules", string.format("[%s] Endemic Life UI Draw Function threw an Exception", flow_state_name));
|
||||
end
|
||||
end
|
||||
|
||||
--[[if config.current_config.buff_UI.enabled and module_visibility_config.buff_UI then
|
||||
local success = truepcall(buff_UI.draw);
|
||||
if config.current_config.buff_UI.enabled and module_visibility_config.buff_UI then
|
||||
local success = pcall(buff_UI.draw);
|
||||
if not success then
|
||||
customization_menu.status = string.format("[%s] Buff UI Drawing Function threw an Exception", flow_state_name);
|
||||
error_handler.report("MHR_Overlay.draw_modules", string.format("[%s] Buff UI Draw Function threw an Exception", flow_state_name));
|
||||
end
|
||||
end]]
|
||||
end
|
||||
|
||||
local function main_loop()
|
||||
customization_menu.status = "OK";
|
||||
singletons.init();
|
||||
screen.update_window_size();
|
||||
players.update_myself_position();
|
||||
quest_status.update_is_online();
|
||||
--quest_status.update_is_quest_host();
|
||||
time.tick();
|
||||
if config.current_config.stats_UI.enabled and module_visibility_config.stats_UI then
|
||||
local success = pcall(stats_UI.draw);
|
||||
if not success then
|
||||
error_handler.report("MHR_Overlay.draw_modules", string.format("[%s] Stats UI Draw Function threw an Exception", flow_state_name));
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function update_UI()
|
||||
if quest_status.flow_state == quest_status.flow_states.IN_TRAINING_AREA then
|
||||
|
||||
local large_monster_UI_config = config.current_config.large_monster_UI;
|
||||
@@ -233,33 +380,111 @@ local function main_loop()
|
||||
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 = pcall(large_monster_UI.update, dynamic_enabled, static_enabled, highlighted_enabled);
|
||||
if not success then
|
||||
error_handler.report("MHR_Overlay.update_loop", "[In Training Area] Large Monster UI Update Function threw an Exception");
|
||||
end
|
||||
end
|
||||
|
||||
if config.current_config.damage_meter_UI.enabled and module_visibility_config.damage_meter_UI then
|
||||
local success = pcall(damage_meter_UI.update);
|
||||
if not success then
|
||||
error_handler.report("MHR_Overlay.update_modules", "[In Training Area] Damage Meter UI Update Function threw an Exception");
|
||||
end
|
||||
end
|
||||
|
||||
if config.current_config.endemic_life_UI.enabled and module_visibility_config.endemic_life_UI then
|
||||
local success = pcall(env_creature_UI.update);
|
||||
if not success then
|
||||
error_handler.report("MHR_Overlay.update_loop", "[In Training Area] Endemic Life UI Update Function threw an Exception");
|
||||
end
|
||||
end
|
||||
|
||||
if config.current_config.buff_UI.enabled and module_visibility_config.buff_UI then
|
||||
local success = pcall(buff_UI.update);
|
||||
if not success then
|
||||
error_handler.report("MHR_Overlay.update_loop", "[In Training Area] Buff UI Update Function threw an Exception");
|
||||
end
|
||||
end
|
||||
|
||||
elseif quest_status.flow_state == quest_status.flow_states.CUTSCENE then
|
||||
update_modules(config.current_config.global_settings.module_visibility.cutscene, "Cutscene");
|
||||
elseif quest_status.flow_state == quest_status.flow_states.LOADING_QUEST then
|
||||
update_modules(config.current_config.global_settings.module_visibility.loading_quest, "Loading Quest");
|
||||
elseif quest_status.flow_state == quest_status.flow_states.QUEST_START_ANIMATION then
|
||||
update_modules(config.current_config.global_settings.module_visibility.quest_start_animation, "Quest Start Animation");
|
||||
elseif quest_status.flow_state >= quest_status.flow_states.PLAYING_QUEST and quest_status.flow_state <= quest_status.flow_states.WYVERN_RIDING_START_ANIMATION then
|
||||
update_modules(config.current_config.global_settings.module_visibility.playing_quest, "Playing Quest");
|
||||
elseif quest_status.flow_state == quest_status.flow_states.KILLCAM then
|
||||
update_modules(config.current_config.global_settings.module_visibility.killcam, "Killcam");
|
||||
elseif quest_status.flow_state == quest_status.flow_states.QUEST_END_TIMER then
|
||||
update_modules(config.current_config.global_settings.module_visibility.quest_end_timer, "Quest End Timer");
|
||||
elseif quest_status.flow_state == quest_status.flow_states.QUEST_END_ANIMATION then
|
||||
update_modules(config.current_config.global_settings.module_visibility.quest_end_animation, "Quest End Animation");
|
||||
elseif quest_status.flow_state == quest_status.flow_states.QUEST_END_SCREEN then
|
||||
update_modules(config.current_config.global_settings.module_visibility.quest_end_screen, "Quest End Screen");
|
||||
elseif quest_status.flow_state == quest_status.flow_states.REWARD_SCREEN then
|
||||
update_modules(config.current_config.global_settings.module_visibility.reward_screen, "Reward Screen");
|
||||
elseif quest_status.flow_state == quest_status.flow_states.SUMMARY_SCREEN then
|
||||
update_modules(config.current_config.global_settings.module_visibility.summary_screen, "Summary Screen");
|
||||
end
|
||||
end
|
||||
|
||||
local function draw_loop()
|
||||
if quest_status.flow_state == quest_status.flow_states.IN_LOBBY then
|
||||
local module_visibility_config = config.current_config.global_settings.module_visibility.in_lobby;
|
||||
|
||||
if config.current_config.stats_UI.enabled and module_visibility_config.stats_UI then
|
||||
local success = pcall(stats_UI.draw);
|
||||
if not success then
|
||||
error_handler.report("MHR_Overlay.main_loop", "[In Training Area] Stats UI Draw Function threw an Exception");
|
||||
end
|
||||
end
|
||||
|
||||
elseif quest_status.flow_state == quest_status.flow_states.IN_TRAINING_AREA then
|
||||
|
||||
local large_monster_UI_config = config.current_config.large_monster_UI;
|
||||
local module_visibility_config = config.current_config.global_settings.module_visibility.in_training_area;
|
||||
|
||||
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 = pcall(large_monster_UI.draw, dynamic_enabled, static_enabled, highlighted_enabled);
|
||||
if not success then
|
||||
customization_menu.status = "[In Training Area] Large Monster UI Drawing Function threw an Exception";
|
||||
error_handler.report("MHR_Overlay.main_loop", "[In Training Area] Large Monster UI Draw Function threw an Exception");
|
||||
end
|
||||
end
|
||||
|
||||
if config.current_config.damage_meter_UI.enabled and module_visibility_config.damage_meter_UI then
|
||||
local success = pcall(damage_meter_UI.draw);
|
||||
if not success then
|
||||
customization_menu.status = "[In Training Area] Damage Meter UI Drawing Function threw an Exception";
|
||||
error_handler.report("MHR_Overlay.main_loop", "[In Training Area] Damage Meter UI Draw Function threw an Exception");
|
||||
end
|
||||
end
|
||||
|
||||
if config.current_config.endemic_life_UI.enabled and module_visibility_config.endemic_life_UI then
|
||||
local success = pcall(env_creature_UI.draw);
|
||||
if not success then
|
||||
customization_menu.status = "[In Training Area] Endemic Life UI Drawing Function threw an Exception";
|
||||
error_handler.report("MHR_Overlay.main_loop", "[In Training Area] Endemic Life UI Draw Function threw an Exception");
|
||||
end
|
||||
end
|
||||
|
||||
--[[if config.current_config.buff_UI.enabled and module_visibility_config.buff_UI then
|
||||
if config.current_config.buff_UI.enabled and module_visibility_config.buff_UI then
|
||||
local success = pcall(buff_UI.draw);
|
||||
if not success then
|
||||
customization_menu.status = "[In Training Area] Buff UI Drawing Function threw an Exception";
|
||||
error_handler.report("MHR_Overlay.main_loop", "[In Training Area] Buff UI Draw Function threw an Exception");
|
||||
end
|
||||
end
|
||||
|
||||
if config.current_config.stats_UI.enabled and module_visibility_config.stats_UI then
|
||||
local success = pcall(stats_UI.draw);
|
||||
if not success then
|
||||
error_handler.report("MHR_Overlay.main_loop", "[In Training Area] Stats UI Draw Function threw an Exception");
|
||||
end
|
||||
end
|
||||
end]]
|
||||
|
||||
|
||||
elseif quest_status.flow_state == quest_status.flow_states.CUTSCENE then
|
||||
@@ -297,38 +522,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, function()
|
||||
if config.current_config.global_settings.renderer.use_d2d_if_available then
|
||||
main_loop();
|
||||
draw_loop();
|
||||
end
|
||||
end);
|
||||
end
|
||||
|
||||
re.on_frame(function()
|
||||
time.update_timers();
|
||||
keyboard.update();
|
||||
|
||||
if d2d == nil or not config.current_config.global_settings.renderer.use_d2d_if_available then
|
||||
main_loop();
|
||||
draw_loop();
|
||||
end
|
||||
end);
|
||||
-- #endregion
|
||||
----------------------------D2D------------------------------
|
||||
-----------------------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);
|
||||
|
||||
326
reframework/autorun/MHR_Overlay/Buffs/abnormal_statuses.lua
Normal file
326
reframework/autorun/MHR_Overlay/Buffs/abnormal_statuses.lua
Normal file
@@ -0,0 +1,326 @@
|
||||
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,
|
||||
iceblight = nil,
|
||||
thunderblight = nil,
|
||||
dragonblight = nil,
|
||||
blastblight = nil,
|
||||
minor_bubbleblight = nil,
|
||||
major_bubbleblight = nil,
|
||||
hellfireblight = nil,
|
||||
bloodblight = nil,
|
||||
poison = nil,
|
||||
deadly_poison = nil,
|
||||
stun = nil,
|
||||
paralysis = 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,
|
||||
frenzy_infection = nil,
|
||||
engulfed = nil,
|
||||
frostblight = nil,
|
||||
muck = nil
|
||||
};
|
||||
|
||||
local ailments_type_name = "ailments";
|
||||
|
||||
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");
|
||||
-- Iceblight
|
||||
local ice_duration_timer_field = player_quest_base_type_def:get_field("_IceLDurationTimer");
|
||||
-- Thunderblight
|
||||
local thunder_duration_timer_field = player_quest_base_type_def:get_field("_ThunderLDurationTimer");
|
||||
-- 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)
|
||||
--local item_parameter = get_ref_item_parameter_method:call(singletons.player_manager);
|
||||
--if item_parameter == nil then
|
||||
-- error_handler.report("consumables.update", "Failed to access Data: item_parameter");
|
||||
-- return;
|
||||
--end
|
||||
|
||||
-- Missing:
|
||||
-- whirlwind?
|
||||
-- Wind Pressure?
|
||||
|
||||
this.update_poison(player);
|
||||
this.update_bubbleblight(player);
|
||||
this.update_muck(player);
|
||||
this.update_frenzy_infection(player);
|
||||
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "fireblight", this.get_abnormal_status_name, nil, nil, player, fire_duration_timer_field);
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "fireblight", this.get_abnormal_status_name, nil, nil, player, fire_duration_timer_field);
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "waterblight", this.get_abnormal_status_name, nil, nil, player, water_duration_timer_field);
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "iceblight", this.get_abnormal_status_name, nil, nil, player, ice_duration_timer_field);
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "thunderblight", this.get_abnormal_status_name, nil, nil, player, thunder_duration_timer_field);
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "dragonblight", this.get_abnormal_status_name, nil, nil, player, dragon_duration_timer_field);
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "blastblight", this.get_abnormal_status_name, nil, nil, player, bomb_duration_timer_field);
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "hellfireblight", this.get_abnormal_status_name, nil, nil, player, oni_bomb_duration_timer_field);
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "bloodblight", this.get_abnormal_status_name, nil, nil, player, mystery_debuff_timer_field);
|
||||
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "stun", this.get_abnormal_status_name, nil, nil, player, stun_duration_timer_field);
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "paralysis", this.get_abnormal_status_name, nil, nil, player, paralyze_duration_timer_field);
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "falling_asleep", this.get_abnormal_status_name, nil, nil, player, get_sleep_movable_timer_method);
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "defense_down", this.get_abnormal_status_name, nil, nil, player, defense_down_duration_timer_field);
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "resistance_down", this.get_abnormal_status_name, nil, nil, player, resistance_down_duration_timer_field);
|
||||
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "tremor", this.get_abnormal_status_name, nil, nil, player, quake_duration_timer_field);
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "roar", this.get_abnormal_status_name, nil, nil, player, ear_duration_timer_field);
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "webbed", this.get_abnormal_status_name, nil, nil, player, beto_duration_timer_field);
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "stench", this.get_abnormal_status_name, nil, nil, player, stink_duration_timer_field);
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "leeched", this.get_abnormal_status_name, nil, nil, player, blooding_enemy_timer_field, nil, nil, true);
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "bleeding", this.get_abnormal_status_name, nil, nil, player, bleeding_debuff_timer_field);
|
||||
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "frenzy", this.get_abnormal_status_name, nil, nil, player, virus_onset_timer_field);
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "frenzy_overcome", this.get_abnormal_status_name, nil, nil, player_data, virus_overcome_buff_timer_field);
|
||||
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "engulfed", this.get_abnormal_status_name, player, get_is_vacuum_damage_method);
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "frostblight", this.get_abnormal_status_name, player, get_is_frozen_damage_method);
|
||||
|
||||
this.update_sleep(player);
|
||||
end
|
||||
|
||||
function this.update_poison(player)
|
||||
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");
|
||||
return;
|
||||
end
|
||||
|
||||
if poison_level == 0 then
|
||||
this.list.poison = nil;
|
||||
this.list.deadly_poison = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if poison_level == 1 then
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "poison", this.get_abnormal_status_name, player, poison_duration_timer_field);
|
||||
this.list.deadly_poison = nil;
|
||||
else
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "deadly_poison", this.get_abnormal_status_name, player, poison_duration_timer_field);
|
||||
this.list.poison = nil;
|
||||
end
|
||||
end
|
||||
|
||||
function this.update_bubbleblight(player)
|
||||
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");
|
||||
return;
|
||||
end
|
||||
|
||||
if bubble_type == 0 then
|
||||
this.list.minor_bubbleblight = nil;
|
||||
this.list.major_bubbleblight = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if bubble_type == 1 then
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "minor_bubbleblight", this.get_abnormal_status_name, player, bubble_damage_timer_field);
|
||||
this.list.major_bubbleblight = nil;
|
||||
else
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "major_bubbleblight", this.get_abnormal_status_name, player, bubble_damage_timer_field);
|
||||
this.list.minor_bubbleblight = nil;
|
||||
end
|
||||
end
|
||||
|
||||
function this.update_muck(player)
|
||||
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");
|
||||
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");
|
||||
return;
|
||||
end
|
||||
|
||||
if not is_mud_damage and not is_gold_mud_damage then
|
||||
this.list.muck = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
buffs.update_generic(ailments_type_name, "muck", this.get_abnormal_status_name);
|
||||
end
|
||||
|
||||
function this.update_frenzy_infection(player)
|
||||
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");
|
||||
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");
|
||||
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);
|
||||
|
||||
buffs.update_generic(this.list, ailments_type_name, "frenzy_infection", this.get_abnormal_status_name, 1, timer, frenzy_infected_duration);
|
||||
end
|
||||
|
||||
function this.update_sleep(player)
|
||||
if this.list.falling_asleep ~= nil then
|
||||
this.list.sleep = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
buffs.update_generic_buff(this.list, ailments_type_name, "sleep", this.get_abnormal_status_name, nil, nil, player, sleep_duration_timer_field);
|
||||
end
|
||||
|
||||
function this.init_names()
|
||||
for abnormal_status_key, debuff in pairs(this.list) do
|
||||
debuff.name = this.get_abnormal_status_name(abnormal_status_key);
|
||||
end
|
||||
end
|
||||
|
||||
function this.get_abnormal_status_name(abnormal_status_key)
|
||||
local abnormal_status_name = language.current_language.ailments[abnormal_status_key];
|
||||
if abnormal_status_name == nil then
|
||||
return abnormal_status_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;
|
||||
@@ -2,6 +2,23 @@ local this = {};
|
||||
|
||||
local buff_UI_entity;
|
||||
local config;
|
||||
local singletons;
|
||||
local players;
|
||||
local consumables;
|
||||
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;
|
||||
@@ -35,14 +52,74 @@ local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
this.list = {};
|
||||
--[[
|
||||
TODO:
|
||||
[x] DONE! Wirebug-related skills
|
||||
[x] DONE! More Dango skills
|
||||
[x] DONE! Weapon buffs
|
||||
[x] DONE! Horn music
|
||||
[x] DONE! abnormal_statuses: Immunity
|
||||
[x] DONE! consumables: Stinkmink
|
||||
[x] DONE! rampage skills: Chameleos Soul
|
||||
[x] WONT IMPLEMENT! skills: Furious Buildup
|
||||
[x] DONE! skills: powder mantle
|
||||
[x] WONT IMPLEMENT! skills: frostcraft
|
||||
[x] COULDNT FIND! skills: defiance --
|
||||
[x] DONE! skills: embolden
|
||||
[x] DONE! skills: strife
|
||||
[x] DONE! skills: berserk
|
||||
[x] DONE! skills: dragon conversion
|
||||
[x] DONE! abnormal_statuses: Pre-Sleep
|
||||
More otomo skills
|
||||
skills: Part breaker, charge master
|
||||
Demon Ammo, Armor Ammo
|
||||
weapon skills - Arc Shot: Affinity, Arc Shot: Brace
|
||||
endemic_life_buffs: Red, Yellow Lampsquid
|
||||
Add duration detection to skills
|
||||
Add duration detection to otomo moves
|
||||
Add duration detection to dango skills
|
||||
Add duration detection to rampage skills
|
||||
Add duration detection to endemic life buffs
|
||||
]]
|
||||
|
||||
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_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;
|
||||
|
||||
function this.new(name)
|
||||
local buff = {};
|
||||
|
||||
buff.type = type;
|
||||
buff.key = key;
|
||||
buff.name = name;
|
||||
buff.timer = 0;
|
||||
buff.duration = 0;
|
||||
buff.level = level;
|
||||
|
||||
buff.timer = duration;
|
||||
buff.duration = duration;
|
||||
|
||||
buff.is_active = true;
|
||||
|
||||
@@ -51,7 +128,9 @@ function this.new(name)
|
||||
buff.minutes_left = 0;
|
||||
buff.seconds_left = 0;
|
||||
|
||||
buff.is_infinite = false;
|
||||
buff.is_infinite = is_infinite;
|
||||
|
||||
this.update_timer(buff, buff.timer);
|
||||
|
||||
this.init_UI(buff);
|
||||
|
||||
@@ -67,42 +146,243 @@ function this.init_UI(buff)
|
||||
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();
|
||||
skills.init_names();
|
||||
weapon_skills.init_names();
|
||||
misc_buffs.init_names();
|
||||
end
|
||||
|
||||
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("skills.update", "Failed to access Data: weapon_type");
|
||||
return;
|
||||
end
|
||||
|
||||
local is_player_lobby_base = master_player:get_type_definition() == player_lobby_base_type_def;
|
||||
|
||||
consumables.update(master_player_data);
|
||||
otomo_moves.update(master_player_data);
|
||||
rampage_skills.update(master_player_data);
|
||||
|
||||
if not is_player_lobby_base then
|
||||
skills.update(master_player, master_player_data, weapon_type);
|
||||
dango_skills.update(master_player, master_player_data);
|
||||
endemic_life_buffs.update(master_player, master_player_data);
|
||||
abnormal_statuses.update(master_player, master_player_data);
|
||||
weapon_skills.update(master_player, master_player_data, weapon_type);
|
||||
misc_buffs.update(master_player, master_player_data);
|
||||
end
|
||||
|
||||
-- xy = "";
|
||||
|
||||
-- local fields = sdk.find_type_definition("snow.player.PlayerData"):get_fields();
|
||||
-- for i = 1, 999 do
|
||||
-- if fields[i] ~= nil then
|
||||
-- local value = fields[i]:get_data(master_player_data);
|
||||
-- if value ~= nil then
|
||||
-- pcall(function()
|
||||
-- if not utils.number.is_equal(value, 0) then
|
||||
-- xy = string.format("%s%s: %s\n", xy, fields[i]:get_name(), tostring(value));
|
||||
-- end
|
||||
-- end);
|
||||
-- end
|
||||
-- end
|
||||
-- end
|
||||
end
|
||||
|
||||
function this.update_timer(buff, timer, duration)
|
||||
if timer == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
if timer < 0 then
|
||||
timer = 0;
|
||||
end
|
||||
|
||||
duration = duration or timer;
|
||||
|
||||
if duration > buff.duration then
|
||||
buff.duration = duration;
|
||||
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, buff_type, buff_key, get_name_function,
|
||||
value_owner, value_holder,
|
||||
timer_owner, timer_holder,
|
||||
duration_owner, duration_holder,
|
||||
is_infinite, minimal_value, level_breakpoints)
|
||||
|
||||
if timer_owner == nil then timer_owner = value_owner; end
|
||||
if duration_owner == nil then duration_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));
|
||||
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));
|
||||
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
|
||||
|
||||
local duration = nil;
|
||||
if duration_holder ~= nil then
|
||||
if utils.type.is_REField(duration_holder) then
|
||||
duration = duration_holder:get_data(duration_owner);
|
||||
else
|
||||
duration = duration_holder:call(duration_owner);
|
||||
end
|
||||
|
||||
if duration == nil then
|
||||
error_handler.report("buffs.update_generic_number", string.format("Failed to access Data: %s_duration", buff_key));
|
||||
return;
|
||||
end
|
||||
end
|
||||
|
||||
return this.update_generic(buff_list, buff_type, buff_key, get_name_function, level, timer, duration);
|
||||
end
|
||||
|
||||
function this.update_generic(buff_list, buff_type, buff_key, get_name_function, level, timer, duration)
|
||||
duration = duration or 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, duration);
|
||||
buff_list[buff_key] = buff;
|
||||
else
|
||||
buff.level = level;
|
||||
this.update_timer(buff, timer, duration);
|
||||
end
|
||||
|
||||
return buff;
|
||||
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_module()
|
||||
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");
|
||||
consumables = require("MHR_Overlay.Buffs.consumables");
|
||||
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()
|
||||
|
||||
local buff = this.new("Enviroment Damage Negated");
|
||||
buff.duration = 90;
|
||||
buff.timer = 65;
|
||||
buff.timer_percentage = 0.66;
|
||||
buff.minutes_left = 1;
|
||||
buff.seconds_left = 5
|
||||
|
||||
this.list["Enviroment Damage Negated"] = buff;
|
||||
|
||||
local buff = this.new("Sharpness Loss Reduced");
|
||||
buff.duration = 120;
|
||||
buff.timer = 70;
|
||||
buff.timer_percentage = 0.583;
|
||||
buff.minutes_left = 1;
|
||||
buff.seconds_left = 10
|
||||
|
||||
this.list["Sharpness Loss Reduced"] = buff;
|
||||
|
||||
local buff = this.new("Sharpness Loss Reduced 2");
|
||||
buff.duration = 120;
|
||||
buff.timer = 70;
|
||||
buff.timer_percentage = 0.583;
|
||||
buff.minutes_left = 1;
|
||||
buff.seconds_left = 10
|
||||
buff.is_infinite = true;
|
||||
|
||||
this.list["Sharpness Loss Reduced 2"] = buff;
|
||||
end
|
||||
|
||||
return this;
|
||||
241
reframework/autorun/MHR_Overlay/Buffs/consumables.lua
Normal file
241
reframework/autorun/MHR_Overlay/Buffs/consumables.lua
Normal file
@@ -0,0 +1,241 @@
|
||||
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,
|
||||
};
|
||||
|
||||
local consumable_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
|
||||
}
|
||||
|
||||
local consumables_type_name = "consumables";
|
||||
|
||||
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 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();
|
||||
|
||||
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");
|
||||
|
||||
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");
|
||||
|
||||
local might_seed_atk_up_field = player_user_data_item_parameter_type_def:get_field("_MightSeedAtkUp");
|
||||
local might_seed_timer_field = player_user_data_item_parameter_type_def:get_field("_MightSeedTimer");
|
||||
|
||||
local adamant_seed_timer_field = player_user_data_item_parameter_type_def:get_field("_AdamantSeedTimer");
|
||||
local demondrug_powder_timer_field = player_user_data_item_parameter_type_def:get_field("_DemondrugPowderTimer");
|
||||
local armorskin_powder_timer_field = player_user_data_item_parameter_type_def:get_field("_ArmorSkinPowderTimer");
|
||||
local vitalizer_timer_const_field = player_user_data_item_parameter_type_def:get_field("_VitalizerTimer");
|
||||
local stamina_up_buff_second_field = player_user_data_item_parameter_type_def:get_field("_StaminaUpBuffSecond");
|
||||
|
||||
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");
|
||||
-- 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");
|
||||
-- Immunizer
|
||||
local vitalizer_timer_field = player_data_type_def:get_field("_VitalizerTimer");
|
||||
-- Gourmet Fish
|
||||
local fish_regene_enable_field = player_data_type_def:get_field("_FishRegeneEnableTimer");
|
||||
|
||||
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)
|
||||
local item_parameter = get_ref_item_parameter_method:call(singletons.player_manager);
|
||||
if item_parameter == nil then
|
||||
error_handler.report("consumables.update", "Failed to access Data: item_parameter");
|
||||
return;
|
||||
end
|
||||
|
||||
local cached_language = language.current_language
|
||||
|
||||
this.update_demondrug(player_data, item_parameter);
|
||||
this.update_armorskin(player_data, item_parameter);
|
||||
|
||||
buffs.update_generic_buff(this.list, consumables_type_name, "demon_powder", this.get_consumable_name,
|
||||
player_data, atk_up_item_second_field, player_data, atk_up_item_second_timer_field, item_parameter, demondrug_powder_timer_field);
|
||||
|
||||
buffs.update_generic_buff(this.list, consumables_type_name, "hardshell_powder", this.get_consumable_name,
|
||||
player_data, def_up_item_second_field, player_data, def_up_item_second_timer_field, item_parameter, armorskin_powder_timer_field);
|
||||
|
||||
buffs.update_generic_buff(this.list, consumables_type_name, "immunizer", this.get_consumable_name,
|
||||
nil, nil, player_data, vitalizer_timer_field, item_parameter, vitalizer_timer_const_field);
|
||||
|
||||
buffs.update_generic_buff(this.list, consumables_type_name, "gourmet_fish", this.get_consumable_name,
|
||||
nil, nil, player_data, fish_regene_enable_field, nil, nil);
|
||||
end
|
||||
|
||||
function this.update_demondrug(player_data, item_parameter)
|
||||
local demondrug_value = atk_up_alive_field:get_data(player_data);
|
||||
if demondrug_value == nil then
|
||||
error_handler.report("consumables.update_demondrug", "Failed to access Data: demondrug_value");
|
||||
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("consumables.update_demondrug", "Failed to access Data: demondrug_const_value");
|
||||
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("consumables.update_demondrug", "Failed to access Data: mega_demondrug_const_value");
|
||||
return;
|
||||
end
|
||||
|
||||
local consumable_key;
|
||||
if demondrug_value == demondrug_const_value then
|
||||
consumable_key = "demondrug";
|
||||
this.list.mega_demondrug = nil;
|
||||
|
||||
elseif demondrug_value == mega_demondrug_const_value then
|
||||
consumable_key = "mega_demondrug";
|
||||
this.list.demondrug = nil;
|
||||
end
|
||||
|
||||
buffs.update_generic(this.list, consumables_type_name, consumable_key, this.get_consumable_name);
|
||||
end
|
||||
|
||||
function this.update_armorskin(player_data, item_parameter)
|
||||
local armorskin_value = def_up_alive_field:get_data(player_data);
|
||||
if armorskin_value == nil then
|
||||
error_handler.report("consumables.update_armorskin", "Failed to access Data: armorskin_value");
|
||||
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("consumables.update_armorskin", "Failed to access Data: armorskin_const_value");
|
||||
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("consumables.update_armorskin", "Failed to access Data: mega_armorskin_const_value");
|
||||
return;
|
||||
end
|
||||
|
||||
local consumable_key;
|
||||
if armorskin_value == armorskin_const_value then
|
||||
consumable_key = "armorskin";
|
||||
this.list.mega_armorskin = nil;
|
||||
|
||||
elseif armorskin_value == mega_armorskin_const_value then
|
||||
consumable_key = "mega_armorskin";
|
||||
this.list.armorskin = nil;
|
||||
end
|
||||
|
||||
buffs.update_generic(this.list, consumables_type_name, consumable_key, this.get_consumable_name);
|
||||
end
|
||||
|
||||
function this.get_consumable_name(consumable_key)
|
||||
local consumable_name = get_name_method:call(nil, consumable_ids[consumable_key]);
|
||||
if consumable_name == nil then
|
||||
error_handler.report("consumables.get_consumable_name", string.format("Failed to access Data: %s_name", consumable_key));
|
||||
return consumable_key;
|
||||
end
|
||||
|
||||
return consumable_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;
|
||||
399
reframework/autorun/MHR_Overlay/Buffs/dango_skills.lua
Normal file
399
reframework/autorun/MHR_Overlay/Buffs/dango_skills.lua
Normal file
@@ -0,0 +1,399 @@
|
||||
local this = {};
|
||||
|
||||
local buffs;
|
||||
local buff_UI_entity;
|
||||
local config;
|
||||
local singletons;
|
||||
local players;
|
||||
local utils;
|
||||
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;
|
||||
|
||||
this.list = {
|
||||
dango_adrenaline = nil,
|
||||
dango_booster = nil,
|
||||
dango_insurance = nil,
|
||||
dango_insurance_defense_up = nil,
|
||||
dango_glutton = nil,
|
||||
dango_flyer = nil,
|
||||
dango_defender = nil,
|
||||
dango_hunter = nil,
|
||||
dango_connector = nil,
|
||||
super_recovery_dango = nil
|
||||
};
|
||||
|
||||
local dango_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 get_player_data_method = player_manager_type_def:get_method("get_PlayerData");
|
||||
local get_player_skill_method = player_manager_type_def:get_method("get_PlayerSkill");
|
||||
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();
|
||||
|
||||
|
||||
|
||||
local player_data_type_def = sdk.find_type_definition("snow.player.PlayerData");
|
||||
-- Dango Defender
|
||||
local is_enable_kitchen_skill_048_reduce_method = 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 player_quest_base_type_def = sdk.find_type_definition("snow.player.PlayerQuestBase");
|
||||
|
||||
local player_skill_list_type_def = sdk.find_type_definition("snow.player.PlayerSkillList");
|
||||
local has_kitchen_skill_method = player_skill_list_type_def:get_method("hasKitchenSkill");
|
||||
|
||||
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");
|
||||
|
||||
|
||||
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.update(player, player_data)
|
||||
local item_parameter = get_ref_item_parameter_method:call(singletons.player_manager);
|
||||
if item_parameter == nil then
|
||||
error_handler.report("dango_skills.update", "Failed to access Data: item_parameter");
|
||||
return;
|
||||
end
|
||||
|
||||
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);
|
||||
|
||||
buffs.update_generic_buff(this.list, dango_skills_type_name, "dango_defender", this.get_dango_name,
|
||||
player_data, is_enable_kitchen_skill_048_reduce_method, nil, nil, nil, nil, true);
|
||||
|
||||
buffs.update_generic_buff(this.list, dango_skills_type_name, "dango_booster", this.get_dango_name,
|
||||
nil, nil, player_data, kitchen_skill_027_timer_field);
|
||||
|
||||
buffs.update_generic_buff(this.list, dango_skills_type_name, "dango_glutton", this.get_dango_name,
|
||||
nil, nil, player_data, kitchen_skill_045_timer_field);
|
||||
|
||||
buffs.update_generic_buff(this.list, dango_skills_type_name, "dango_connector", this.get_dango_name,
|
||||
nil, nil, player_data, kitchen_skill_054_timer_field);
|
||||
end
|
||||
|
||||
function this.update_dango_adrenaline()
|
||||
if not this.is_dango_adrenaline_active then
|
||||
this.list.dango_adrenaline = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
buffs.update_generic(this.list, dango_skills_type_name, "dango_adrenaline", this.get_dango_name);
|
||||
end
|
||||
|
||||
function this.update_dango_insurance()
|
||||
if singletons.player_manager == nil then
|
||||
error_handler.report("consumables.update_dango_insurance", "Failed to access Data: player_manager");
|
||||
return;
|
||||
end
|
||||
|
||||
if singletons.quest_manager == nil then
|
||||
error_handler.report("consumables.update_dango_insurance", "Failed to access Data: quest_manager");
|
||||
return;
|
||||
end
|
||||
|
||||
local player_skill_list_array = get_player_skill_method:call(singletons.player_manager);
|
||||
if player_skill_list_array == nil then
|
||||
error_handler.report("consumables.update_dango_insurance", "Failed to access Data: player_skill_list_array");
|
||||
return;
|
||||
end
|
||||
|
||||
local player_skill_list_array_length = get_length_method:call(player_skill_list_array);
|
||||
if player_skill_list_array_length == nil then
|
||||
error_handler.report("consumables.update_dango_insurance", "Failed to access Data: player_skill_array_list_length");
|
||||
return;
|
||||
end
|
||||
|
||||
local length = player_skill_list_array_length - 1;
|
||||
|
||||
local has_insurance_skill = false;
|
||||
|
||||
for player_id = 0, length do
|
||||
if players.list[player_id] == nil then
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local player_skill_list = get_value_method:call(player_skill_list_array, player_id);
|
||||
if player_skill_list_array_length == nil then
|
||||
error_handler.report("consumables.update_dango_insurance", "Failed to access Data: player_skill_list No. " .. tostring(player_id));
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local kitchen_skill = has_kitchen_skill_method:call(player_skill_list, dango_ids.dango_insurance);
|
||||
if kitchen_skill == nil then
|
||||
error_handler.report("consumables.update_dango_insurance", "Failed to access Data: kitchen_skill No. " .. tostring(player_id));
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if kitchen_skill then
|
||||
has_insurance_skill = true;
|
||||
break;
|
||||
end
|
||||
|
||||
::continue::
|
||||
end
|
||||
|
||||
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("consumables.update_dango_insurance", "Failed to access Data: flag_cat_skill_insurance");
|
||||
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("consumables.update_dango_insurance", "Failed to access Data: is_cat_skill_insurance");
|
||||
return;
|
||||
end
|
||||
|
||||
if not has_insurance_skill or is_cat_skill_insurance then
|
||||
this.list.dango_insurance = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
buffs.update_generic(this.list, dango_skills_type_name, "dango_insurance", this.get_dango_name, 1);
|
||||
end
|
||||
|
||||
function this.update_dango_insurance_defense_up(player_data)
|
||||
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");
|
||||
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");
|
||||
return;
|
||||
end
|
||||
|
||||
if not insurance_def_up_lv4 then
|
||||
this.list.dango_insurance_defense_up = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
level = 4;
|
||||
end
|
||||
|
||||
buffs.update_generic(this.list, dango_skills_type_name, "dango_insurance_defense_up", this.get_dango_name, level);
|
||||
end
|
||||
|
||||
function this.update_dango_flyer(player)
|
||||
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");
|
||||
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");
|
||||
return;
|
||||
end
|
||||
|
||||
if not is_kitchen_skill_wire_stop_regene then
|
||||
this.list.dango_flyer = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
level = 3;
|
||||
end
|
||||
|
||||
buffs.update_generic(this.list, dango_skills_type_name, "dango_flyer", this.get_dango_name, level);
|
||||
end
|
||||
|
||||
function this.update_dango_hunter(player_data)
|
||||
local dango_hunter_buff = buffs.update_generic_buff(this.list, dango_skills_type_name, "dango_hunter", this.get_dango_name,
|
||||
nil, nil, player_data, kitchen_skill_051_atk_up_timer_field);
|
||||
|
||||
if dango_hunter_buff then
|
||||
dango_hunter_buff.level = 4;
|
||||
end
|
||||
end
|
||||
|
||||
function this.update_super_recovery_dango(player)
|
||||
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");
|
||||
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;
|
||||
|
||||
buffs.update_generic(this.list, dango_skills_type_name, "super_recovery_dango", this.get_dango_name);
|
||||
end
|
||||
|
||||
function this.get_dango_name(dango_key)
|
||||
if dango_ids[dango_key] == nil then
|
||||
|
||||
local dango_skill_name = language.current_language.dango_skills[dango_key];
|
||||
if dango_skill_name == nil then
|
||||
return dango_key;
|
||||
end
|
||||
|
||||
return dango_skill_name;
|
||||
end
|
||||
|
||||
local dango_skill_name = get_name_method:call(nil, dango_ids[dango_key]);
|
||||
if dango_skill_name == nil then
|
||||
error_handler.report("dango_skills.get_dango_name", string.format("Failed to access Data: %s_name", dango_key));
|
||||
return dango_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");
|
||||
end
|
||||
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
205
reframework/autorun/MHR_Overlay/Buffs/endemic_life_buffs.lua
Normal file
205
reframework/autorun/MHR_Overlay/Buffs/endemic_life_buffs.lua
Normal file
@@ -0,0 +1,205 @@
|
||||
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 consumables;
|
||||
|
||||
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 = {
|
||||
clothfly = nil,
|
||||
stinkmink = nil,
|
||||
butterflame = nil,
|
||||
-- peepersects = nil,
|
||||
cutterfly = nil,
|
||||
ruby_wirebug = nil,
|
||||
gold_wirebug = nil
|
||||
};
|
||||
|
||||
this.peepersects_duration = 90;
|
||||
|
||||
local endemic_life_buffs_type_name = "endemic_life_buffs";
|
||||
|
||||
local marionette_mode_types = { "ruby_wirebug", "gold_wirebug" };
|
||||
local butterflame_attack_up = 25;
|
||||
|
||||
|
||||
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 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();
|
||||
local demondrug_atk_up_field = player_user_data_item_parameter_type_def:get_field("_DemondrugAtkUp");
|
||||
|
||||
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");
|
||||
|
||||
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);
|
||||
|
||||
buffs.update_generic_buff(this.list, endemic_life_buffs_type_name, "cutterfly", this.get_endemic_life_name,
|
||||
nil, nil, player_data, crit_up_ec_second_timer_field);
|
||||
|
||||
buffs.update_generic_buff(this.list, endemic_life_buffs_type_name, "clothfly", this.get_endemic_life_name,
|
||||
nil, nil, player_data, def_up_buff_second_rate_timer_field);
|
||||
|
||||
buffs.update_generic_buff(this.list, endemic_life_buffs_type_name, "stinkmink", this.get_endemic_life_name,
|
||||
nil, nil, player_data, lead_enemy_timer_field);
|
||||
end
|
||||
|
||||
function this.update_ruby_and_gold_wirebugs(player, player_data)
|
||||
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");
|
||||
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];
|
||||
|
||||
buffs.update_generic_buff(this.list, endemic_life_buffs_type_name, endemic_life_buff_key, this.get_endemic_life_name,
|
||||
nil, nil, player_data, wirebug_powerup_timer_field);
|
||||
end
|
||||
|
||||
function this.update_butterflame(player_data)
|
||||
local atk_up_buff_second = atk_up_buff_second_field:get_data(player_data);
|
||||
if atk_up_buff_second == nil then
|
||||
error_handler.report("consumables.update_butterflame", "Failed to access Data: atk_up_buff_second");
|
||||
return;
|
||||
end
|
||||
|
||||
if atk_up_buff_second ~= butterflame_attack_up then
|
||||
this.list.butterflame = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
buffs.update_generic_buff(this.list, endemic_life_buffs_type_name, "butterflame", this.get_endemic_life_name,
|
||||
nil, nil, player_data, atk_up_buff_second_timer_field);
|
||||
end
|
||||
|
||||
function this.update_peepersects(player_data)
|
||||
local stamina_up_buff_second_timer = stamina_up_buff_second_timer_field:get_data(player_data);
|
||||
if stamina_up_buff_second_timer == nil then
|
||||
error_handler.report("consumables.update_peepersects", "Failed to access Data: stamina_up_buff_second_timer");
|
||||
return;
|
||||
end
|
||||
|
||||
if utils.number.is_equal(stamina_up_buff_second_timer, 0) then
|
||||
this.list.peepersects = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local timer = stamina_up_buff_second_timer / 60;
|
||||
local peepersects_buff = this.list.peepersects;
|
||||
|
||||
if peepersects_buff == nil and consumables.list.dash_juice ~= nil and timer <= consumables.list.dash_juice.timer then
|
||||
return;
|
||||
end
|
||||
|
||||
if peepersects_buff == nil
|
||||
or (peepersects_buff ~= nil and timer > peepersects_buff.timer) then
|
||||
local timer_percentage = timer / this.peepersects_duration;
|
||||
if timer_percentage < 0.95 or timer_percentage > 1.05 then
|
||||
this.list.peepersects = nil;
|
||||
return;
|
||||
end
|
||||
end
|
||||
|
||||
buffs.update_generic(this.list, endemic_life_buffs_type_name, "peepersects", this.get_endemic_life_name, 1, timer, this.peepersects_duration);
|
||||
end
|
||||
|
||||
function this.get_endemic_life_name(endemic_life_buff_key)
|
||||
if singletons.message_manager == nil then
|
||||
error_handler.report("endemic_life_buffs.get_endemic_life_name", "Failed to access Data: message_manager");
|
||||
return endemic_life_buff_key;
|
||||
end
|
||||
|
||||
local endemic_life_name = get_env_creature_name_message_method:call(singletons.message_manager, env_creature.creature_ids[endemic_life_buff_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", endemic_life_buff_key));
|
||||
return endemic_life_buff_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");
|
||||
consumables = require("MHR_Overlay.Buffs.consumables");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
168
reframework/autorun/MHR_Overlay/Buffs/melody_effects.lua
Normal file
168
reframework/autorun/MHR_Overlay/Buffs/melody_effects.lua
Normal file
@@ -0,0 +1,168 @@
|
||||
local this = {};
|
||||
|
||||
local buffs;
|
||||
local buff_UI_entity;
|
||||
local config;
|
||||
local singletons;
|
||||
local players;
|
||||
local utils;
|
||||
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;
|
||||
|
||||
--[[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.list = {};
|
||||
|
||||
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) - 1;
|
||||
if length == nil then
|
||||
error_handler.report("melody_effects.update", "Failed to access Data: music_data_array -> length");
|
||||
return;
|
||||
end
|
||||
|
||||
for i = 0, length do
|
||||
local music_data = get_value_method:call(music_data_array, i);
|
||||
if music_data == nil then
|
||||
error_handler.report("melody_effects.update", "Failed to access Data: music_data No." .. tostring(i));
|
||||
goto continue;
|
||||
end
|
||||
|
||||
this.update_melody_effect(i, music_data);
|
||||
::continue::
|
||||
end
|
||||
end
|
||||
|
||||
function this.update_melody_effect(index, melody_data)
|
||||
local lua_index = index + 1;
|
||||
|
||||
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(index));
|
||||
return;
|
||||
end
|
||||
|
||||
if utils.number.is_equal(melody_timer, 0) then
|
||||
this.list[lua_index] = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
local melody_effect = this.list[lua_index];
|
||||
if melody_effect == nil then
|
||||
local melody_effect_name = this.get_melody_effect_name(index);
|
||||
|
||||
melody_effect = buffs.new("melody_effects", lua_index, 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.get_melody_effect_name(melody_effect_id)
|
||||
local melody_effect_name = get_name_method:call(nil, melody_effect_id);
|
||||
if melody_effect_name == nil then
|
||||
local name = string.format("Melody Effect No. %d", melody_effect_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");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
125
reframework/autorun/MHR_Overlay/Buffs/misc_buffs.lua
Normal file
125
reframework/autorun/MHR_Overlay/Buffs/misc_buffs.lua
Normal file
@@ -0,0 +1,125 @@
|
||||
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 consumables;
|
||||
|
||||
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,
|
||||
};
|
||||
|
||||
local misc_buffs_type_name = "misc_buffs";
|
||||
|
||||
-- Attack Up
|
||||
-- Might Seed +10 3min
|
||||
-- Dango Bulker + 15 30sec
|
||||
-- Chameleos Souls +15 30sec
|
||||
|
||||
-- Defense Up
|
||||
-- Adamant Seed +20 3min
|
||||
-- Chameleos Souls +20 30sec
|
||||
|
||||
-- Stamina Use Down
|
||||
-- Dash Juice 3min
|
||||
-- Peepersects 1.5min
|
||||
-- Chameleos Soul 30sec
|
||||
|
||||
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");
|
||||
|
||||
function this.update(player, player_data)
|
||||
buffs.update_generic_buff(this.list, misc_buffs_type_name, "stamina_use_down", this.get_misc_buff_name,
|
||||
nil, nil, player_data, stamina_up_buff_second_timer_field);
|
||||
|
||||
buffs.update_generic_buff(this.list, misc_buffs_type_name, "attack_up", this.get_misc_buff_name,
|
||||
player_data, atk_up_buff_second_field, player_data, atk_up_buff_second_timer_field);
|
||||
|
||||
buffs.update_generic_buff(this.list, misc_buffs_type_name, "defense_up", this.get_misc_buff_name,
|
||||
player_data, def_up_buff_second_field, player_data, def_up_buff_second_timer_field);
|
||||
|
||||
buffs.update_generic_buff(this.list, misc_buffs_type_name, "immunity", this.get_misc_buff_name,
|
||||
nil, nil, player_data, debuff_prevention_timer_field);
|
||||
end
|
||||
|
||||
function this.init_names()
|
||||
for misc_buff_key, dango in pairs(this.list) do
|
||||
dango.name = this.get_misc_buff_name(misc_buff_key);
|
||||
end
|
||||
end
|
||||
|
||||
function this.get_misc_buff_name(misc_buff_key)
|
||||
local misc_buff_name = language.current_language.misc_buffs[misc_buff_key];
|
||||
if misc_buff_name == nil then
|
||||
return misc_buff_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");
|
||||
consumables = require("MHR_Overlay.Buffs.consumables");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
142
reframework/autorun/MHR_Overlay/Buffs/otomo_moves.lua
Normal file
142
reframework/autorun/MHR_Overlay/Buffs/otomo_moves.lua
Normal file
@@ -0,0 +1,142 @@
|
||||
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 = {
|
||||
rousing_roar = nil,
|
||||
go_fight_win = nil,
|
||||
power_drum = nil
|
||||
};
|
||||
|
||||
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_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");
|
||||
-- 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)
|
||||
buffs.update_generic_buff(this.list, otomo_moves_type_name, "rousing_roar", this.get_otomo_move_name,
|
||||
nil, nil, player_data, beast_roar_otomo_timer_field);
|
||||
|
||||
buffs.update_generic_buff(this.list, otomo_moves_type_name, "go_fight_win", this.get_otomo_move_name,
|
||||
nil, nil, player_data, runhigh_otomo_timer_field);
|
||||
|
||||
buffs.update_generic_buff(this.list, otomo_moves_type_name, "power_drum", this.get_otomo_move_name,
|
||||
nil, nil, player_data, kijin_otomo_timer_field);
|
||||
end
|
||||
|
||||
function this.get_otomo_move_name(otomo_move_key)
|
||||
local otomo_move_name = get_name_method:call(nil, otomo_moves_ids[otomo_move_key]);
|
||||
if otomo_move_name == nil then
|
||||
error_handler.report("otomo_moves.get_otomo_move_name", string.format("Failed to access Data: %s_name", otomo_move_key));
|
||||
return otomo_move_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;
|
||||
160
reframework/autorun/MHR_Overlay/Buffs/rampage_skills.lua
Normal file
160
reframework/autorun/MHR_Overlay/Buffs/rampage_skills.lua
Normal file
@@ -0,0 +1,160 @@
|
||||
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 = {
|
||||
burst = nil,
|
||||
kushala_daora_soul = nil,
|
||||
intrepid_heart = nil,
|
||||
dereliction = nil,
|
||||
latent_power = nil,
|
||||
protective_polish = nil,
|
||||
wind_mantle = nil,
|
||||
grinder_s = nil,
|
||||
counterstrike = nil,
|
||||
affinity_sliding = nil,
|
||||
coalescence = nil,
|
||||
adrenaline_rush = nil,
|
||||
wall_runner = nil,
|
||||
offensive_guard = nil,
|
||||
hellfire_cloak = nil,
|
||||
agitator = nil,
|
||||
furious = nil,
|
||||
status_trigger = nil,
|
||||
heaven_sent = nil,
|
||||
heroics = nil,
|
||||
resuscitate = nil,
|
||||
maximum_might = nil,
|
||||
bloodlust = nil,
|
||||
frenzied_bloodlust = nil,
|
||||
peak_performance = nil,
|
||||
dragonheart = nil,
|
||||
resentment = nil,
|
||||
bladescale_hone = nil,
|
||||
spiribirds_call = nil,
|
||||
embolden = nil,
|
||||
berserk = nil,
|
||||
powder_mantle_red = nil,
|
||||
powder_mantle_blue = nil,
|
||||
strife = nil,
|
||||
inspiration = nil,
|
||||
blood_awakening = nil
|
||||
};
|
||||
|
||||
local rampage_skills_type_name = "rampage_skills";
|
||||
|
||||
local rampage_skill_ids = {
|
||||
chameleos_soul = 250,
|
||||
kushala_daora_soul = 251,
|
||||
};
|
||||
|
||||
local kushara_daora_soul_breakpoint = 5;
|
||||
|
||||
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 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();
|
||||
|
||||
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)
|
||||
--local item_parameter = get_ref_item_parameter_method:call(singletons.player_manager);
|
||||
--if item_parameter == nil then
|
||||
-- error_handler.report("skills.update", "Failed to access Data: item_parameter");
|
||||
-- return;
|
||||
--end
|
||||
|
||||
buffs.update_generic_buff(this.list, rampage_skills_type_name, "kushala_daora_soul", this.get_skill_name,
|
||||
player_data, hyakuryu_dragon_power_up_count_field, player_data, hyakuryu_dragon_power_up_timer_field, nil, nil, false, nil, {kushara_daora_soul_breakpoint});
|
||||
|
||||
buffs.update_generic_buff(this.list, rampage_skills_type_name, "chameleos_soul", this.get_skill_name,
|
||||
nil, nil, player_data, hyakuryu_onazuti_power_up_interval_field);
|
||||
end
|
||||
|
||||
function this.init_names()
|
||||
for rampage_skill_key, skill in pairs(this.list) do
|
||||
skill.name = this.get_skill_name(rampage_skill_key);
|
||||
end
|
||||
end
|
||||
|
||||
function this.get_skill_name(rampage_skill_key)
|
||||
local rampage_skill_name = get_name_method:call(nil, rampage_skill_ids[rampage_skill_key]);
|
||||
if rampage_skill_name == nil then
|
||||
error_handler.report("skills.get_skill_name", string.format("Failed to access Data: %s_name", rampage_skill_key));
|
||||
return rampage_skill_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;
|
||||
814
reframework/autorun/MHR_Overlay/Buffs/skills.lua
Normal file
814
reframework/autorun/MHR_Overlay/Buffs/skills.lua
Normal file
@@ -0,0 +1,814 @@
|
||||
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 = {
|
||||
burst = nil,
|
||||
intrepid_heart = nil,
|
||||
dereliction = nil,
|
||||
latent_power = nil,
|
||||
protective_polish = nil,
|
||||
wind_mantle = nil,
|
||||
grinder_s = nil,
|
||||
counterstrike = nil,
|
||||
affinity_sliding = nil,
|
||||
coalescence = nil,
|
||||
adrenaline_rush = nil,
|
||||
wall_runner = nil,
|
||||
offensive_guard = nil,
|
||||
hellfire_cloak = nil,
|
||||
agitator = nil,
|
||||
furious = nil,
|
||||
status_trigger = nil,
|
||||
heaven_sent = nil,
|
||||
heroics = nil,
|
||||
resuscitate = nil,
|
||||
maximum_might = nil,
|
||||
bloodlust = nil,
|
||||
frenzied_bloodlust = nil,
|
||||
peak_performance = nil,
|
||||
dragonheart = nil,
|
||||
resentment = nil,
|
||||
bladescale_hone = nil,
|
||||
spiribirds_call = nil,
|
||||
embolden = nil,
|
||||
berserk = nil,
|
||||
powder_mantle_red = nil,
|
||||
powder_mantle_blue = nil,
|
||||
strife = nil,
|
||||
inspiration = nil,
|
||||
blood_awakening = nil
|
||||
};
|
||||
|
||||
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 },
|
||||
-- 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 },
|
||||
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 },
|
||||
}
|
||||
|
||||
|
||||
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_manager_type_def = sdk.find_type_definition("snow.player.PlayerManager");
|
||||
local get_player_data_method = player_manager_type_def:get_method("get_PlayerData");
|
||||
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();
|
||||
|
||||
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 player_weapon_type_field = player_base_type_def:get_field("_playerWeaponType");
|
||||
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 = get_player_skill_list_method:get_return_type();
|
||||
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 get_equip_skill_232_param_method = player_quest_base_type_def:get_method("getEquipSkill232Param");
|
||||
|
||||
local equip_skill_232_param_type_def = get_equip_skill_232_param_method:get_return_type();
|
||||
local activation_time_lv_1_field = equip_skill_232_param_type_def:get_field("_ActivationTime_Lv1");
|
||||
local activation_time_lv_2_field = equip_skill_232_param_type_def:get_field("_ActivationTime_Lv2");
|
||||
|
||||
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)
|
||||
--local item_parameter = get_ref_item_parameter_method:call(singletons.player_manager);
|
||||
--if item_parameter == nil then
|
||||
-- error_handler.report("skills.update", "Failed to access Data: item_parameter");
|
||||
-- return;
|
||||
--end
|
||||
|
||||
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_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_generic_skill("dereliction", player_data, symbiosis_skill_lost_vital_field,
|
||||
nil, nil, nil, nil, true, nil, dereliction_breakpoints);
|
||||
|
||||
this.update_generic_skill("burst", player_data, rengeki_power_up_count_field,
|
||||
player_data, rengeki_power_up_timer_field, nil, nil, false, nil, burst_breakpoints);
|
||||
|
||||
this.update_generic_skill("intrepid_heart", player_data, equip_skill_223_accumulator_field,
|
||||
nil, nil, nil, nil, true, intrepid_heart_minimal_value);
|
||||
|
||||
this.update_generic_skill("latent_power", nil, nil, player, power_freedom_timer_field);
|
||||
this.update_generic_skill("protective_polish", nil, nil, player, sharpness_gauge_boost_timer_field);
|
||||
this.update_generic_skill("grinder_s", nil, nil, player_data, brand_new_sharpness_adjust_up_timer_field);
|
||||
this.update_generic_skill("counterstrike", nil, nil, player_data, counterattack_powerup_timer_field);
|
||||
this.update_generic_skill("affinity_sliding", nil, nil, player_data, sliding_powerup_timer_field);
|
||||
this.update_generic_skill("coalescence", nil, nil, player_data, disaster_turn_powerup_timer_field);
|
||||
this.update_generic_skill("adrenaline_rush", nil, nil, player_data, equip_skill_208_atk_up_field);
|
||||
this.update_generic_skill("wall_runner", nil, nil, player_data, wall_run_powerup_timer_field);
|
||||
this.update_generic_skill("offensive_guard", nil, nil, player_data, equip_skill_036_timer_field);
|
||||
this.update_generic_skill("hellfire_cloak", nil, nil, player_data, onibi_powerup_timer_field);
|
||||
this.update_generic_skill("agitator", nil, nil, player_data, challenge_timer_field, nil, nil, true);
|
||||
this.update_generic_skill("furious", nil, nil, player_data, furious_skill_stamina_buff_second_timer_field);
|
||||
this.update_generic_skill("status_trigger", nil, nil, player_data, equip_skill_222_timer_field);
|
||||
this.update_generic_skill("inspiration", nil, nil, player_data, equip_skill_235_atk_up_second_timer_field);
|
||||
|
||||
this.update_generic_skill("heaven_sent", player, is_active_equip_skill_230_method);
|
||||
this.update_generic_skill("heroics", player, is_predicament_power_up_method);
|
||||
this.update_generic_skill("resuscitate", player, is_debuff_state_method);
|
||||
this.update_generic_skill("embolden", player, get_active_equip_209_method);
|
||||
this.update_generic_skill("berserk", player, get_is_enable_equip_skill_225_method);
|
||||
this.update_generic_skill("dragon_conversion_elemental_attack_up", player, equip_skill_229_sum_resist_field);
|
||||
this.update_generic_skill("dragon_conversion_elemental_res_up", player, equip_skill_229_use_up_flag_field);
|
||||
|
||||
this.update_generic_skill("strife", player, get_affinity_equip_skill_233_method,
|
||||
nil, nil, nil, nil, nil, nil, strife_breakpoints[skill_data_list.strife.level]);
|
||||
end
|
||||
|
||||
function this.update_generic_skill(skill_key, value_owner, value_holder, timer_owner, timer_holder, duration_owner, duration_holder,
|
||||
is_infinite, minimal_value, level_breakpoints)
|
||||
|
||||
local skill_data = skill_data_list[skill_key];
|
||||
if skill_data ~= nil and skill_data.is_equipped ~= nil and not skill_data.is_equipped then
|
||||
this.list[skill_key] = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
buffs.update_generic_buff(this.list, skills_type_name, skill_key, this.get_skill_name,
|
||||
value_owner, value_holder, timer_owner, timer_holder, duration_owner, duration_holder,
|
||||
is_infinite, minimal_value, level_breakpoints);
|
||||
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("skills.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
|
||||
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)
|
||||
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");
|
||||
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");
|
||||
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");
|
||||
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
|
||||
|
||||
buffs.update_generic(this.list, skills_type_name, "wind_mantle", this.get_skill_name, level, wind_mantle_duration - (wind_mantle_timer / 60), wind_mantle_duration);
|
||||
end
|
||||
|
||||
function this.update_maximum_might(player_data)
|
||||
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");
|
||||
return;
|
||||
end
|
||||
|
||||
if player_info.list.max_stamina == -1 then
|
||||
return;
|
||||
end
|
||||
|
||||
local skill = this.list.maximum_might;
|
||||
local is_timer_zero = utils.number.is_equal(whole_body_timer, 0);
|
||||
|
||||
if player_info.list.stamina ~= player_info.list.max_stamina then
|
||||
if skill ~= nil and whole_body_timer < maximum_might_previous_timer_value then
|
||||
this.list.maximum_might = nil;
|
||||
end
|
||||
|
||||
elseif skill == 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 is_timer_zero 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;
|
||||
end
|
||||
|
||||
function this.update_bloodlust()
|
||||
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
|
||||
|
||||
if this.list.bloodlust == nil then
|
||||
local bloodlust_name = this.get_skill_name("bloodlust");
|
||||
if bloodlust_name == nil then
|
||||
error_handler.report("skills.update_generic_buff", "Failed to access Data: bloodlust_name");
|
||||
return;
|
||||
end
|
||||
|
||||
this.list.bloodlust = buffs.new(skills_type_name, "bloodlust", bloodlust_name);
|
||||
end
|
||||
end
|
||||
|
||||
function this.update_frenzied_bloodlust(player, player_data)
|
||||
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");
|
||||
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");
|
||||
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");
|
||||
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 = buffs.update_generic(this.list, skills_type_name, "frenzied_bloodlust", this.get_skill_name, 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 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
|
||||
|
||||
buffs.update_generic(this.list, skills_type_name, "peak_performance", this.get_skill_name);
|
||||
end
|
||||
|
||||
function this.update_dragonheart()
|
||||
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
|
||||
|
||||
buffs.update_generic(this.list, skills_type_name, "dragonheart", this.get_skill_name);
|
||||
end
|
||||
|
||||
function this.update_resentment(player_data)
|
||||
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");
|
||||
return;
|
||||
end
|
||||
|
||||
if player_info.list.health >= r_vital then
|
||||
this.list.resentment = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
buffs.update_generic(this.list, skills_type_name, "resentment", this.get_skill_name);
|
||||
end
|
||||
|
||||
function this.update_bladescale_hone(player, weapon_type)
|
||||
if weapon_type ~= 13 then -- 13 = Bow
|
||||
this.list.bladescale_hone = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
this.update_generic_skill("bladescale_hone", nil, nil, player, _equip_skill_216_bottle_up_timer_field);
|
||||
end
|
||||
|
||||
function this.update_spiribirds_call(player_data)
|
||||
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");
|
||||
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);
|
||||
|
||||
buffs.update_generic(this.list, skills_type_name, "spiribirds_call", this.get_skill_name, 1, timer, spiribirds_call_duration);
|
||||
end
|
||||
|
||||
function this.update_powder_mantle(player_data)
|
||||
this.update_generic_skill("powder_mantle_blue", player_data, equip_skill_227_state_field,
|
||||
player_data, equip_skill_227_state_timer_field, nil, nil, nil, 2);
|
||||
|
||||
if this.list.powder_mantle_blue ~= nil then
|
||||
this.list.powder_mantle_red = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
this.update_generic_skill("powder_mantle_red", player_data, equip_skill_227_state_field,
|
||||
player_data, equip_skill_227_state_timer_field, nil, nil, nil);
|
||||
end
|
||||
|
||||
function this.update_blood_awakening(player, player_data)
|
||||
this.update_generic_skill("blood_awakening", player, get_equip_skill_232_lv_method,
|
||||
player_data, equip_skill_232_timer_field,
|
||||
nil, nil,
|
||||
nil, nil, blood_awakening_breakpoints);
|
||||
|
||||
local blood_awakening = this.list.blood_awakening;
|
||||
if this.list.blood_awakening == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
local activation_time_field = activation_time_lv_1_field;
|
||||
if blood_awakening.level == 2 then
|
||||
activation_time_field = activation_time_lv_2_field;
|
||||
end
|
||||
|
||||
local blood_awakening_param = get_equip_skill_232_param_method:call(player);
|
||||
|
||||
local blood_awakening_duration = activation_time_field:get_data(blood_awakening_param);
|
||||
|
||||
blood_awakening.duration = blood_awakening_duration / 60;
|
||||
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(skill_key)
|
||||
local skill_data = skill_data_list[skill_key];
|
||||
|
||||
if skill_data == nil then
|
||||
local skill_name = language.current_language.skills[skill_key];
|
||||
|
||||
if skill_name == nil then
|
||||
return skill_key;
|
||||
end
|
||||
|
||||
return skill_name;
|
||||
end
|
||||
|
||||
local skill_name = get_name_method:call(nil, skill_data_list[skill_key].id);
|
||||
if skill_name == nil then
|
||||
error_handler.report("skills.get_skill_name", string.format("Failed to access Data: %s_name", skill_key));
|
||||
return skill_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;
|
||||
1235
reframework/autorun/MHR_Overlay/Buffs/weapon_skills.lua
Normal file
1235
reframework/autorun/MHR_Overlay/Buffs/weapon_skills.lua
Normal file
File diff suppressed because it is too large
Load Diff
@@ -8,6 +8,7 @@ local ailments;
|
||||
local singletons;
|
||||
local non_players;
|
||||
local utils;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -106,11 +107,13 @@ 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
|
||||
|
||||
@@ -260,14 +263,8 @@ end
|
||||
function this.cart(dead_player_id, flag_cat_skill_insurance)
|
||||
-- flag_cat_skill_insurance = 0
|
||||
-- flag_cat_skill_insurance = 1
|
||||
local player = players.list[dead_player_id];
|
||||
if player == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
player.cart_count = player.cart_count + 1;
|
||||
|
||||
quest_status.get_cart_count();
|
||||
quest_status.update_cart_count();
|
||||
end
|
||||
|
||||
function this.on_stock_direct_marionette_finish_shoot_hit_parts_damage(enemy, damage_rate, is_endure, is_ignore_multi_rate, category, no)
|
||||
@@ -295,6 +292,7 @@ function this.on_stock_direct_marionette_finish_shoot_hit_parts_damage(enemy, da
|
||||
end
|
||||
|
||||
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
|
||||
|
||||
@@ -354,11 +352,13 @@ function this.on_anomaly_core_break(anomaly_core_part)
|
||||
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
|
||||
|
||||
@@ -373,7 +373,7 @@ function this.on_anomaly_core_break(anomaly_core_part)
|
||||
players.update_damage(players.total, players.damage_types.anomaly_core, true, damage_object);
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
function this.init_dependencies()
|
||||
quest_status = require("MHR_Overlay.Game_Handler.quest_status");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
small_monster = require("MHR_Overlay.Monsters.small_monster");
|
||||
@@ -382,7 +382,10 @@ function this.init_module()
|
||||
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
|
||||
|
||||
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]);
|
||||
|
||||
@@ -9,6 +9,8 @@ local quest_status;
|
||||
local drawing;
|
||||
local language;
|
||||
local players;
|
||||
local error_handler;
|
||||
local utils;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -55,8 +57,8 @@ function this.new(id, name, level, type)
|
||||
|
||||
non_player.type = type;
|
||||
|
||||
non_player.join_time = -1;
|
||||
non_player.first_hit_time = -1;
|
||||
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()
|
||||
@@ -132,17 +134,19 @@ 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
|
||||
customization_menu.status = "No quest servant id list count";
|
||||
error_handler.report("non_players.update_servant_list", "Failed to access Data: servant_count");
|
||||
return;
|
||||
end
|
||||
|
||||
@@ -150,19 +154,20 @@ function this.update_servant_list()
|
||||
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
|
||||
customization_menu.status = "No quest servant ai control";
|
||||
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
|
||||
customization_menu.status = "No quest servant info";
|
||||
error_handler.report("non_players.update_servant_list", "Failed to access Data: servant_info No." .. tostring(i));
|
||||
goto continue;
|
||||
end
|
||||
|
||||
@@ -180,15 +185,16 @@ function this.update_servant_list()
|
||||
this.servant_list[id] = this.new(id, name, 0, players.types.servant);
|
||||
end
|
||||
|
||||
if not cached_config.settings.hide_servants then
|
||||
table.insert(players.display_list, this.servant_list[id]);
|
||||
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();
|
||||
@@ -213,35 +219,45 @@ 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
|
||||
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;
|
||||
if this.otomo_list[myself_id] == nil then
|
||||
this.otomo_list[myself_id] = this.new(0, name, level, players.types.my_otomo);
|
||||
end
|
||||
|
||||
if cached_config.settings.show_my_otomos_separately then
|
||||
table.insert(players.display_list, this.otomo_list[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
|
||||
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 and name ~= "" then
|
||||
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!
|
||||
if this.otomo_list[this.my_second_otomo_id] == nil then
|
||||
this.otomo_list[this.my_second_otomo_id] = this.new(this.my_second_otomo_id, name, level, players.types.my_otomo);
|
||||
end
|
||||
local otomo = this.otomo_list[this.my_second_otomo_id];
|
||||
|
||||
if cached_config.settings.show_my_otomos_separately then
|
||||
table.insert(players.display_list, 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
|
||||
@@ -252,20 +268,21 @@ function this.update_servant_otomos()
|
||||
|
||||
local servant_otomo_list = get_servant_otomo_list_method:call(singletons.otomo_manager);
|
||||
if servant_otomo_list == nil then
|
||||
customization_menu.status = "No servant otomo list";
|
||||
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
|
||||
customization_menu.status = "No servant otomo list count";
|
||||
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
|
||||
goto continue
|
||||
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");
|
||||
@@ -275,15 +292,15 @@ function this.update_servant_otomos()
|
||||
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
|
||||
|
||||
if this.otomo_list[member_id] == nil then
|
||||
this.otomo_list[member_id] = this.new(member_id, name, level, players.types.servant_otomo);
|
||||
end
|
||||
local otomo = this.otomo_list[member_id];
|
||||
|
||||
if cached_config.settings.show_servant_otomos_separately then
|
||||
table.insert(players.display_list, 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
|
||||
|
||||
@@ -296,30 +313,33 @@ 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
|
||||
customization_menu.status = "No otomo info list";
|
||||
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
|
||||
customization_menu.status = "No otomo info list count";
|
||||
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
|
||||
|
||||
@@ -345,20 +365,6 @@ function this.update_otomos(otomo_info_field_)
|
||||
end
|
||||
end
|
||||
|
||||
if id == players.myself.id then
|
||||
if cached_config.settings.show_my_otomos_separately then
|
||||
table.insert(players.display_list, otomo);
|
||||
end
|
||||
elseif id >= 4 then
|
||||
if cached_config.settings.show_servant_otomos_separately then
|
||||
table.insert(players.display_list, otomo);
|
||||
end
|
||||
else
|
||||
if cached_config.settings.show_other_player_otomos_separately then
|
||||
table.insert(players.display_list, otomo);
|
||||
end
|
||||
end
|
||||
|
||||
::continue::
|
||||
end
|
||||
end
|
||||
@@ -377,7 +383,7 @@ function this.init_UI(non_player)
|
||||
end
|
||||
end
|
||||
|
||||
function this.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");
|
||||
@@ -387,7 +393,11 @@ function this.init_module()
|
||||
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
|
||||
|
||||
|
||||
@@ -10,6 +10,8 @@ local drawing;
|
||||
local language;
|
||||
local non_players;
|
||||
local utils;
|
||||
local error_handler;
|
||||
local large_monster;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -48,8 +50,6 @@ this.myself = nil;
|
||||
this.myself_position = Vector3f.new(0, 0, 0);
|
||||
this.total = nil;
|
||||
|
||||
this.display_list = {};
|
||||
|
||||
this.highlighted_damage_UI = nil;
|
||||
|
||||
this.damage_types = {
|
||||
@@ -90,8 +90,8 @@ function this.new(id, name, master_rank, hunter_rank, type)
|
||||
|
||||
player.cart_count = 0;
|
||||
|
||||
player.join_time = -1;
|
||||
player.first_hit_time = -1;
|
||||
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();
|
||||
@@ -136,11 +136,12 @@ function this.get_player(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 == -1 then
|
||||
if player.first_hit_time == utils.constants.uninitialized_int then
|
||||
player.first_hit_time = time.total_elapsed_script_seconds;
|
||||
end
|
||||
|
||||
@@ -155,6 +156,7 @@ end
|
||||
|
||||
function this.update_display(player)
|
||||
if player == nil then
|
||||
error_handler.report("players.update_display", "Missing Parameter: player");
|
||||
return;
|
||||
end
|
||||
|
||||
@@ -359,7 +361,7 @@ end
|
||||
function this.update_player_dps(player)
|
||||
local cached_config = config.current_config.damage_meter_UI.settings;
|
||||
|
||||
if player.join_time == -1 then
|
||||
if player.join_time == utils.constants.uninitialized_int then
|
||||
player.join_time = time.total_elapsed_script_seconds;
|
||||
end
|
||||
|
||||
@@ -380,54 +382,6 @@ function this.update_player_dps(player)
|
||||
this.total.dps = this.total.dps + player.dps;
|
||||
end
|
||||
|
||||
function this.sort_players()
|
||||
local cached_config = config.current_config.damage_meter_UI;
|
||||
|
||||
if cached_config.settings.my_damage_bar_location == "Normal" then
|
||||
table.insert(this.display_list, this.myself);
|
||||
end
|
||||
|
||||
-- sort here
|
||||
if cached_config.sorting.type == "Normal" then
|
||||
if cached_config.sorting.reversed_order then
|
||||
table.sort(this.display_list, function(left, right)
|
||||
return left.id > right.id;
|
||||
end);
|
||||
else
|
||||
table.sort(this.display_list, 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.display_list, function(left, right)
|
||||
return left.dps < right.dps;
|
||||
end);
|
||||
else
|
||||
table.sort(this.display_list, function(left, right)
|
||||
return left.dps > right.dps;
|
||||
end);
|
||||
end
|
||||
else
|
||||
if cached_config.sorting.reversed_order then
|
||||
table.sort(this.display_list, function(left, right)
|
||||
return left.display.total_damage < right.display.total_damage;
|
||||
end);
|
||||
else
|
||||
table.sort(this.display_list, 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
|
||||
table.insert(this.display_list, 1, this.myself);
|
||||
|
||||
elseif cached_config.settings.my_damage_bar_location == "Last" then
|
||||
table.insert(this.display_list, this.myself);
|
||||
end
|
||||
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");
|
||||
|
||||
@@ -436,27 +390,33 @@ local get_pos_field = player_base_type_def:get_method("get_Pos");
|
||||
|
||||
function this.update_myself_position()
|
||||
if singletons.player_manager == nil then
|
||||
customization_menu.status = "No player manager";
|
||||
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
|
||||
customization_menu.status = "No master player";
|
||||
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
|
||||
this.myself_position = position;
|
||||
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.display_list = {};
|
||||
this.total = this.new(0, "Total", 0, 0, this.types.total);
|
||||
this.myself = this.new(-1, "DummyMHROverlay", -1, -1, this.types.myself);
|
||||
this.myself = this.new(-1, "MHROverlayDummy", -1, -1, this.types.myself);
|
||||
end
|
||||
|
||||
local lobby_manager_type_def = sdk.find_type_definition("snow.LobbyManager");
|
||||
@@ -486,35 +446,45 @@ local get_master_rank_method = progress_manager_type_def:get_method("get_MasterR
|
||||
|
||||
local get_master_player_id_method = player_manager_type_def:get_method("getMasterPlayerID");
|
||||
|
||||
function this.update_player_list(is_on_quest)
|
||||
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);
|
||||
this.update_player_list(quest_hunter_info_field);
|
||||
else
|
||||
this.update_player_list_(hunter_info_field);
|
||||
end
|
||||
this.update_player_list(hunter_info_field);
|
||||
end
|
||||
|
||||
function this.update_player_list_(hunter_info_field_)
|
||||
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
|
||||
customization_menu.status = "No myself player info list";
|
||||
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
|
||||
customization_menu.status = "No myself player name";
|
||||
error_handler.report("players.update_player_list", "Failed to access Data: myself_player_name");
|
||||
return;
|
||||
end
|
||||
|
||||
@@ -524,7 +494,7 @@ function this.update_player_list_(hunter_info_field_)
|
||||
local myself_id = get_master_player_id_method:call(singletons.player_manager);
|
||||
|
||||
if myself_id == nil then
|
||||
customization_menu.status = "No myself player id";
|
||||
error_handler.report("players.update_player_list", "Failed to access Data: myself_id");
|
||||
return;
|
||||
end
|
||||
|
||||
@@ -535,28 +505,29 @@ function this.update_player_list_(hunter_info_field_)
|
||||
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";
|
||||
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_list);
|
||||
local count = get_count_method:call(player_info_array);
|
||||
if count == nil then
|
||||
customization_menu.status = "No player info list count";
|
||||
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_list, i);
|
||||
local player_info = get_item_method:call(player_info_array, i);
|
||||
if player_info == nil then
|
||||
goto continue
|
||||
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
|
||||
goto continue
|
||||
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;
|
||||
@@ -564,13 +535,13 @@ function this.update_player_list_(hunter_info_field_)
|
||||
|
||||
local name = name_field:get_data(player_info);
|
||||
if name == nil then
|
||||
goto continue
|
||||
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;
|
||||
@@ -592,10 +563,6 @@ function this.update_player_list_(hunter_info_field_)
|
||||
end
|
||||
end
|
||||
|
||||
if player ~= this.myself then
|
||||
table.insert(this.display_list, player);
|
||||
end
|
||||
|
||||
::continue::
|
||||
end
|
||||
end
|
||||
@@ -622,7 +589,7 @@ function this.draw(player, position_on_screen, opacity_scale, top_damage, top_dp
|
||||
damage_UI_entity.draw(player, position_on_screen, opacity_scale, top_damage, top_dps);
|
||||
end
|
||||
|
||||
function this.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");
|
||||
@@ -633,7 +600,11 @@ function this.init_module()
|
||||
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
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ local customization_menu;
|
||||
local singletons;
|
||||
local config;
|
||||
local utils;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -40,6 +41,16 @@ local package = package;
|
||||
|
||||
this.list = {};
|
||||
|
||||
this.creature_ids = {
|
||||
clothfly = 7,
|
||||
stinkmink = 23,
|
||||
butterflame = 28,
|
||||
peepersects = 29,
|
||||
cutterfly = 50,
|
||||
ruby_wirebug = 62,
|
||||
gold_wirebug = 63,
|
||||
};
|
||||
|
||||
function this.new(REcreature)
|
||||
local creature = {};
|
||||
|
||||
@@ -80,15 +91,18 @@ local get_pos_method = environment_creature_base_type_def:get_method("get_Pos");
|
||||
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;
|
||||
end
|
||||
|
||||
function this.init_UI(creature)
|
||||
@@ -110,9 +124,11 @@ function this.update_position(REcreature, creature)
|
||||
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;
|
||||
end
|
||||
|
||||
function this.update(REcreature, creature)
|
||||
@@ -125,9 +141,11 @@ function this.update(REcreature, creature)
|
||||
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 this.draw(creature, position_on_screen, opacity_scale)
|
||||
@@ -136,14 +154,14 @@ function this.draw(creature, position_on_screen, opacity_scale)
|
||||
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);
|
||||
drawing.draw_label(creature.name_label, position_on_screen, opacity_scale, creature.name .. " " .. creature.id);
|
||||
end
|
||||
|
||||
function this.init_list()
|
||||
this.list = {};
|
||||
end
|
||||
|
||||
function this.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");
|
||||
@@ -154,6 +172,10 @@ function this.init_module()
|
||||
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
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -3,6 +3,7 @@ local this = {};
|
||||
local env_creature;
|
||||
local config;
|
||||
local time;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -45,11 +46,14 @@ function this.update(REcreature)
|
||||
env_creature.update_position(REcreature, creature);
|
||||
end
|
||||
|
||||
function this.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(this.update, sdk.to_managed_object(args[2]));
|
||||
end, function(retval)
|
||||
|
||||
@@ -8,6 +8,7 @@ local small_monster;
|
||||
local large_monster;
|
||||
local damage_meter_UI;
|
||||
local time;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -333,16 +334,15 @@ this.keys = {
|
||||
--[254] = "Clear"
|
||||
};
|
||||
|
||||
|
||||
function this.update()
|
||||
if singletons.game_keyboard == nil then
|
||||
customization_menu.status = "No game keyboard";
|
||||
error_handler.report("keyboard.update", "Failed to access Data: game_keyboard");
|
||||
return;
|
||||
end
|
||||
|
||||
local hard_keyboard = hard_keyboard_field:get_data(singletons.game_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
|
||||
|
||||
@@ -350,10 +350,8 @@ function this.update()
|
||||
|
||||
local new_hotkey_registered = this.register_hotkey(hard_keyboard);
|
||||
|
||||
|
||||
|
||||
if new_hotkey_registered then
|
||||
config.save();
|
||||
config.save_current();
|
||||
else
|
||||
this.check_hotkeys(hard_keyboard);
|
||||
end
|
||||
@@ -493,8 +491,13 @@ function this.check_hotkeys(hard_keyboard)
|
||||
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
|
||||
if get_release_method:call(hard_keyboard, math.tointeger(cached_config.all_UI.key)) 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
|
||||
@@ -514,7 +517,13 @@ function this.check_hotkeys(hard_keyboard)
|
||||
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
|
||||
if get_release_method:call(hard_keyboard, math.tointeger(cached_config.small_monster_UI.key)) 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
|
||||
@@ -522,7 +531,13 @@ function this.check_hotkeys(hard_keyboard)
|
||||
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
|
||||
if get_release_method:call(hard_keyboard, math.tointeger(cached_config.large_monster_UI.key)) 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;
|
||||
@@ -536,8 +551,13 @@ function this.check_hotkeys(hard_keyboard)
|
||||
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
|
||||
if get_release_method:call(hard_keyboard,
|
||||
math.tointeger(cached_config.large_monster_dynamic_UI.key)) 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
|
||||
@@ -545,8 +565,13 @@ function this.check_hotkeys(hard_keyboard)
|
||||
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
|
||||
if get_release_method:call(hard_keyboard,
|
||||
math.tointeger(cached_config.large_monster_static_UI.key)) 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
|
||||
@@ -554,17 +579,27 @@ function this.check_hotkeys(hard_keyboard)
|
||||
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
|
||||
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;
|
||||
|
||||
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 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
|
||||
if get_release_method:call(hard_keyboard, math.tointeger(cached_config.time_UI.key)) 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
|
||||
@@ -572,7 +607,13 @@ function this.check_hotkeys(hard_keyboard)
|
||||
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
|
||||
if get_release_method:call(hard_keyboard, math.tointeger(cached_config.damage_meter_UI.key)) 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
|
||||
@@ -580,7 +621,13 @@ function this.check_hotkeys(hard_keyboard)
|
||||
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
|
||||
if get_release_method:call(hard_keyboard, math.tointeger(cached_config.endemic_life_UI.key)) 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
|
||||
@@ -604,7 +651,7 @@ function this.get_hotkey_name(hotkey)
|
||||
return hotkey_name .. tostring(this.keys[hotkey.key]);
|
||||
end
|
||||
|
||||
function this.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");
|
||||
@@ -613,6 +660,10 @@ function this.init_module()
|
||||
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");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -9,6 +9,7 @@ local damage_meter_UI;
|
||||
local time;
|
||||
local env_creature;
|
||||
local non_players;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -116,6 +117,16 @@ local unique_event_manager_type_def = sdk.find_type_definition("snow.eventcut.Un
|
||||
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
|
||||
@@ -144,25 +155,90 @@ function this.set_flow_state(new_flow_state)
|
||||
small_monster.init_list();
|
||||
large_monster.init_list();
|
||||
env_creature.init_list();
|
||||
|
||||
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_cart_count();
|
||||
this.get_max_cart_count();
|
||||
end
|
||||
|
||||
players.update_players();
|
||||
end
|
||||
|
||||
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
|
||||
|
||||
function this.get_cart_count()
|
||||
local death_num = get_death_num_method:call(singletons.quest_manager);
|
||||
if death_num ~= nil then
|
||||
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
|
||||
|
||||
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 this.get_max_cart_count()
|
||||
local quest_life = get_quest_life_method:call(singletons.quest_manager);
|
||||
if quest_life ~= nil then
|
||||
this.max_cart_count = quest_life;
|
||||
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
|
||||
@@ -170,6 +246,7 @@ end
|
||||
--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
|
||||
|
||||
@@ -179,6 +256,7 @@ function this.on_demo_request_activation(request_data_base)
|
||||
|
||||
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
|
||||
|
||||
@@ -278,6 +356,7 @@ 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
|
||||
|
||||
@@ -289,6 +368,11 @@ function this.on_village_fast_travel(area)
|
||||
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
|
||||
@@ -304,12 +388,13 @@ 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
|
||||
customization_menu.status = "No quest status";
|
||||
error_handler.report("quest_status.init", "Failed to access Data: new_quest_status");
|
||||
return;
|
||||
end
|
||||
|
||||
@@ -330,11 +415,13 @@ 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
|
||||
|
||||
@@ -343,11 +430,13 @@ end
|
||||
|
||||
--[[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_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
|
||||
|
||||
@@ -356,21 +445,22 @@ end--]]
|
||||
|
||||
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 _is_training_area then
|
||||
if is_training_area then
|
||||
this.set_flow_state(this.flow_states.IN_TRAINING_AREA);
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
function this.init_dependencies()
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
@@ -380,7 +470,10 @@ function this.init_module()
|
||||
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
|
||||
|
||||
function this.init_module()
|
||||
this.init();
|
||||
|
||||
sdk.hook(on_changed_game_status_method, function(args)
|
||||
|
||||
@@ -2,6 +2,9 @@ local this = {};
|
||||
|
||||
local config;
|
||||
local singletons;
|
||||
local utils;
|
||||
local time;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -42,11 +45,13 @@ function this.update_window_size()
|
||||
local width;
|
||||
local height;
|
||||
|
||||
if d2d ~= nil and config.current_config.global_settings.renderer.use_d2d_if_available then
|
||||
width, height = d2d.surface_size();
|
||||
else
|
||||
-- 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();
|
||||
end
|
||||
|
||||
if width ~= nil then
|
||||
this.width = width;
|
||||
@@ -70,26 +75,26 @@ function this.get_game_window_size()
|
||||
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
|
||||
|
||||
@@ -131,9 +136,15 @@ function this.calculate_absolute_coordinates(position)
|
||||
return { x = _position.x, y = _position.y };
|
||||
end
|
||||
|
||||
function this.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
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
local this = {};
|
||||
|
||||
local time;
|
||||
local utils;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
@@ -58,42 +62,33 @@ function this.init()
|
||||
this.init_game_manager();
|
||||
this.init_servant_manager();
|
||||
this.init_otomo_manager();
|
||||
this.init_long_sword_shell_manager();
|
||||
this.init_light_bowgun_shell_manager();
|
||||
this.init_horn_shell_manager();
|
||||
end
|
||||
|
||||
function this.init_message_manager()
|
||||
if this.message_manager ~= nil then
|
||||
return;
|
||||
end
|
||||
|
||||
this.message_manager = sdk.get_managed_singleton("snow.gui.MessageManager");
|
||||
if this.message_manager == nil then
|
||||
--log.error("[MHR Overlay] No message manager");
|
||||
error_handler.report("singletons.init_message_manager", "Failed to access Data: message_manager");
|
||||
end
|
||||
|
||||
return this.message_manager;
|
||||
end
|
||||
|
||||
function this.init_enemy_manager()
|
||||
if this.enemy_manager ~= nil then
|
||||
return;
|
||||
end
|
||||
|
||||
this.enemy_manager = sdk.get_managed_singleton("snow.enemy.EnemyManager");
|
||||
if this.enemy_manager == nil then
|
||||
--log.error("[MHR Overlay] No enemy manager");
|
||||
error_handler.report("singletons.init_enemy_manager", "Failed to access Data: enemy_manager");
|
||||
end
|
||||
|
||||
return this.enemy_manager;
|
||||
end
|
||||
|
||||
function this.init_lobby_manager()
|
||||
if this.lobby_manager ~= nil then
|
||||
return;
|
||||
end
|
||||
|
||||
this.lobby_manager = sdk.get_managed_singleton("snow.LobbyManager");
|
||||
if this.lobby_manager == nil then
|
||||
--log.error("[MHR Overlay] No lobby manager");
|
||||
error_handler.report("singletons.init_lobby_manager", "Failed to access Data: lobby_manager");
|
||||
return false;
|
||||
end
|
||||
|
||||
@@ -101,13 +96,9 @@ function this.init_lobby_manager()
|
||||
end
|
||||
|
||||
function this.init_progress_manager()
|
||||
if this.progress_manager ~= nil then
|
||||
return;
|
||||
end
|
||||
|
||||
this.progress_manager = sdk.get_managed_singleton("snow.progress.ProgressManager");
|
||||
if this.progress_manager == nil then
|
||||
--log.error("[MHR Overlay] No progress manager");
|
||||
error_handler.report("singletons.init_lobby_manager", "Failed to access Data: progress_manager");
|
||||
return false;
|
||||
end
|
||||
|
||||
@@ -115,122 +106,120 @@ function this.init_progress_manager()
|
||||
end
|
||||
|
||||
function this.init_quest_manager()
|
||||
if this.quest_manager ~= nil then
|
||||
return;
|
||||
end
|
||||
|
||||
this.quest_manager = sdk.get_managed_singleton("snow.QuestManager");
|
||||
if this.quest_manager == nil then
|
||||
--log.error("[MHR Overlay] No quest manager");
|
||||
error_handler.report("singletons.init_quest_manager", "Failed to access Data: quest_manager");
|
||||
end
|
||||
|
||||
return this.quest_manager;
|
||||
end
|
||||
|
||||
function this.init_player_manager()
|
||||
if this.player_manager ~= nil then
|
||||
return;
|
||||
end
|
||||
|
||||
this.player_manager = sdk.get_managed_singleton("snow.player.PlayerManager");
|
||||
if this.player_manager == nil then
|
||||
--log.error("[MHR Overlay] No player manager");
|
||||
error_handler.report("singletons.init_player_manager", "Failed to access Data: player_manager");
|
||||
end
|
||||
|
||||
return this.player_manager;
|
||||
end
|
||||
|
||||
function this.init_village_area_manager()
|
||||
if this.village_area_manager ~= nil then
|
||||
return;
|
||||
end
|
||||
|
||||
this.village_area_manager = sdk.get_managed_singleton("snow.VillageAreaManager");
|
||||
if this.village_area_manager == nil then
|
||||
--log.error("[MHR Overlay] No village area manager");
|
||||
error_handler.report("singletons.init_village_area_manager", "Failed to access Data: village_area_manager");
|
||||
end
|
||||
|
||||
return this.village_area_manager;
|
||||
end
|
||||
|
||||
function this.init_gui_manager()
|
||||
if this.gui_manager ~= nil then
|
||||
return;
|
||||
end
|
||||
|
||||
this.gui_manager = sdk.get_managed_singleton("snow.gui.GuiManager");
|
||||
if this.gui_manager == nil then
|
||||
--log.error("[MHR Overlay] No gui manager");
|
||||
error_handler.report("singletons.init_gui_manager", "Failed to access Data: gui_manager");
|
||||
end
|
||||
|
||||
return this.gui_manager;
|
||||
end
|
||||
|
||||
function this.init_game_keyboard()
|
||||
if this.game_keyboard ~= nil then
|
||||
return;
|
||||
end
|
||||
|
||||
this.game_keyboard = sdk.get_managed_singleton("snow.GameKeyboard");
|
||||
if this.game_keyboard == nil then
|
||||
--log.error("[MHR Overlay] No game keyboard");
|
||||
error_handler.report("singletons.init_game_keyboard", "Failed to access Data: game_keyboard");
|
||||
end
|
||||
|
||||
return this.game_keyboard;
|
||||
end
|
||||
|
||||
function this.init_scene_manager()
|
||||
if this.scene_manager ~= nil then
|
||||
return;
|
||||
end
|
||||
|
||||
this.scene_manager = sdk.get_native_singleton("via.SceneManager");
|
||||
if this.scene_manager == nil then
|
||||
--log.error("[MHR Overlay] No enemy manager");
|
||||
error_handler.report("singletons.init_scene_manager", "Failed to access Data: scene_manager");
|
||||
end
|
||||
|
||||
return this.scene_manager;
|
||||
end
|
||||
|
||||
function this.init_game_manager()
|
||||
if this.game_manager ~= nil then
|
||||
return;
|
||||
end
|
||||
|
||||
this.game_manager = sdk.get_managed_singleton("snow.SnowGameManager");
|
||||
if this.game_manager == nil then
|
||||
--log.error("[MHR Overlay] No enemy manager");
|
||||
error_handler.report("singletons.init_game_manager", "Failed to access Data: game_manager");
|
||||
end
|
||||
|
||||
return this.game_manager;
|
||||
end
|
||||
|
||||
function this.init_servant_manager()
|
||||
if this.servant_manager ~= nil then
|
||||
return;
|
||||
end
|
||||
|
||||
this.servant_manager = sdk.get_managed_singleton("snow.ai.ServantManager");
|
||||
if this.servant_manager == nil then
|
||||
--log.error("[MHR Overlay] No enemy manager");
|
||||
error_handler.report("singletons.init_servant_manager", "Failed to access Data: servant_manager");
|
||||
end
|
||||
|
||||
return this.servant_manager;
|
||||
end
|
||||
|
||||
function this.init_otomo_manager()
|
||||
if this.otomo_manager ~= nil then
|
||||
return;
|
||||
end
|
||||
|
||||
this.otomo_manager = sdk.get_managed_singleton("snow.otomo.OtomoManager");
|
||||
if this.otomo_manager == nil then
|
||||
--log.error("[MHR Overlay] No enemy manager");
|
||||
error_handler.report("singletons.init_otomo_manager", "Failed to access Data: otomo_manager");
|
||||
end
|
||||
|
||||
return this.otomo_manager;
|
||||
end
|
||||
|
||||
function this.init_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.init_long_sword_shell_manager", "Failed to access Data: long_sword_shell_manager");
|
||||
end
|
||||
|
||||
return this.long_sword_shell_manager;
|
||||
end
|
||||
|
||||
function this.init_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.init_light_bowgun_shell_manager", "Failed to access Data: light_bowgun_shell_manager");
|
||||
end
|
||||
|
||||
return this.light_bowgun_shell_manager;
|
||||
end
|
||||
|
||||
function this.init_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.init_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.init();
|
||||
end
|
||||
|
||||
@@ -7,6 +7,11 @@ 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;
|
||||
@@ -49,51 +54,115 @@ this.elapsed_minutes = 0;
|
||||
this.elapsed_seconds = 0;
|
||||
|
||||
this.total_elapsed_script_seconds = 0;
|
||||
this.last_elapsed_script_seconds = 0;
|
||||
|
||||
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 this.new_delay_timer(callback, delay)
|
||||
if callback == nil or delay == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
local delay_timer = {};
|
||||
delay_timer.callback = callback;
|
||||
delay_timer.delay = delay;
|
||||
|
||||
delay_timer.init_time = os.clock();
|
||||
|
||||
this.delay_timer_list[callback] = delay_timer;
|
||||
|
||||
return delay_timer;
|
||||
|
||||
end
|
||||
|
||||
function this.remove_delay_timer(delay_timer)
|
||||
this.delay_timer_list[delay_timer.callback] = nil;
|
||||
end
|
||||
|
||||
function this.init_global_timers()
|
||||
this.new_timer(singletons.init, 1);
|
||||
this.new_timer(screen.update_window_size, 1);
|
||||
this.new_timer(quest_status.update_is_online, 1);
|
||||
this.new_timer(this.update_quest_time, 1 / 60);
|
||||
this.new_timer(players.update_players, 0.5);
|
||||
this.new_timer(players.update_myself_position, 1);
|
||||
this.new_timer(buffs.update, 1/60);
|
||||
this.new_timer(player_info.update, 0.5);
|
||||
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.tick()
|
||||
this.update_script_time();
|
||||
|
||||
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";
|
||||
error_handler.report("time.update_quest_time", "Failed to access Data: quest_time_elapsed_minutes");
|
||||
else
|
||||
this.elapsed_minutes = quest_time_elapsed_minutes;
|
||||
end
|
||||
|
||||
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";
|
||||
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
|
||||
|
||||
this.elapsed_seconds = quest_time_total_elapsed_seconds - quest_time_elapsed_minutes * 60;
|
||||
|
||||
if this.total_elapsed_script_seconds - this.last_elapsed_script_seconds > 0.5 then
|
||||
this.last_elapsed_script_seconds = this.total_elapsed_script_seconds;
|
||||
|
||||
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;
|
||||
|
||||
players.display_list = {};
|
||||
players.update_player_list(is_on_quest);
|
||||
non_players.update_servant_list();
|
||||
non_players.update_otomo_list(is_on_quest, quest_status.is_online);
|
||||
|
||||
players.update_dps(false);
|
||||
players.sort_players();
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
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");
|
||||
@@ -101,6 +170,14 @@ function this.init_module()
|
||||
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
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -2,6 +2,7 @@ local this = {};
|
||||
|
||||
local utils;
|
||||
local language;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -83,13 +84,18 @@ function this.init_default()
|
||||
},
|
||||
|
||||
module_visibility = {
|
||||
in_lobby = {
|
||||
stats_UI = true
|
||||
},
|
||||
|
||||
in_training_area = {
|
||||
large_monster_dynamic_UI = true,
|
||||
large_monster_static_UI = true,
|
||||
large_monster_highlighted_UI = true,
|
||||
damage_meter_UI = true,
|
||||
endemic_life_UI = true,
|
||||
--buff_UI = true
|
||||
buff_UI = true,
|
||||
stats_UI = true
|
||||
},
|
||||
|
||||
cutscene = {
|
||||
@@ -100,7 +106,8 @@ function this.init_default()
|
||||
time_UI = false,
|
||||
damage_meter_UI = false,
|
||||
endemic_life_UI = false,
|
||||
--buff_UI = false
|
||||
buff_UI = false,
|
||||
stats_UI = false
|
||||
},
|
||||
|
||||
loading_quest = {
|
||||
@@ -111,7 +118,8 @@ function this.init_default()
|
||||
time_UI = false,
|
||||
damage_meter_UI = false,
|
||||
endemic_life_UI = false,
|
||||
--buff_UI = false
|
||||
buff_UI = false,
|
||||
stats_UI = false
|
||||
},
|
||||
|
||||
quest_start_animation = {
|
||||
@@ -122,7 +130,8 @@ function this.init_default()
|
||||
time_UI = true,
|
||||
damage_meter_UI = true,
|
||||
endemic_life_UI = true,
|
||||
--buff_UI = true
|
||||
buff_UI = true,
|
||||
stats_UI = true
|
||||
},
|
||||
|
||||
playing_quest = {
|
||||
@@ -133,7 +142,8 @@ function this.init_default()
|
||||
time_UI = true,
|
||||
damage_meter_UI = true,
|
||||
endemic_life_UI = true,
|
||||
--buff_UI = true
|
||||
buff_UI = true,
|
||||
stats_UI = true
|
||||
},
|
||||
|
||||
killcam = {
|
||||
@@ -144,7 +154,8 @@ function this.init_default()
|
||||
time_UI = true,
|
||||
damage_meter_UI = true,
|
||||
endemic_life_UI = true,
|
||||
--buff_UI = true
|
||||
buff_UI = true,
|
||||
stats_UI = true
|
||||
},
|
||||
|
||||
quest_end_timer = {
|
||||
@@ -155,7 +166,8 @@ function this.init_default()
|
||||
time_UI = true,
|
||||
damage_meter_UI = true,
|
||||
endemic_life_UI = true,
|
||||
--buff_UI = true
|
||||
buff_UI = true,
|
||||
stats_UI = true
|
||||
},
|
||||
|
||||
quest_end_animation = {
|
||||
@@ -166,7 +178,8 @@ function this.init_default()
|
||||
time_UI = false,
|
||||
damage_meter_UI = false,
|
||||
endemic_life_UI = false,
|
||||
--buff_UI = false
|
||||
buff_UI = false,
|
||||
stats_UI = false
|
||||
},
|
||||
|
||||
quest_end_screen = {
|
||||
@@ -177,7 +190,9 @@ function this.init_default()
|
||||
time_UI = false,
|
||||
damage_meter_UI = false,
|
||||
endemic_life_UI = false,
|
||||
--buff_UI = false
|
||||
buff_UI = false,
|
||||
stats_UI = false
|
||||
|
||||
},
|
||||
|
||||
reward_screen = {
|
||||
@@ -188,7 +203,8 @@ function this.init_default()
|
||||
time_UI = true,
|
||||
damage_meter_UI = true,
|
||||
endemic_life_UI = false,
|
||||
--buff_UI = false
|
||||
buff_UI = false,
|
||||
stats_UI = false
|
||||
},
|
||||
|
||||
summary_screen = {
|
||||
@@ -199,7 +215,8 @@ function this.init_default()
|
||||
time_UI = true,
|
||||
damage_meter_UI = true,
|
||||
endemic_life_UI = false,
|
||||
--buff_UI = false
|
||||
buff_UI = false,
|
||||
stats_UI = false
|
||||
},
|
||||
},
|
||||
|
||||
@@ -476,6 +493,11 @@ function this.init_default()
|
||||
y = 40
|
||||
},
|
||||
|
||||
relative_offset = {
|
||||
x = 0,
|
||||
y = 45
|
||||
},
|
||||
|
||||
spacing = {
|
||||
x = 0,
|
||||
y = 24
|
||||
@@ -6118,6 +6140,7 @@ function this.init_default()
|
||||
x = 205,
|
||||
y = 0
|
||||
},
|
||||
|
||||
color = 0xFFF59FC4,
|
||||
|
||||
shadow = {
|
||||
@@ -7034,10 +7057,10 @@ function this.init_default()
|
||||
visibility = true,
|
||||
|
||||
settings = {
|
||||
right_alignment_shift = 0
|
||||
right_alignment_shift = 6
|
||||
},
|
||||
|
||||
text_formatting = "%6.1f%%",
|
||||
text_formatting = "%.1f%%",
|
||||
|
||||
offset = {
|
||||
x = 262,
|
||||
@@ -7452,7 +7475,7 @@ function this.init_default()
|
||||
}
|
||||
},
|
||||
|
||||
--[[buff_UI = {
|
||||
buff_UI = {
|
||||
enabled = true,
|
||||
|
||||
settings = {
|
||||
@@ -7487,6 +7510,10 @@ function this.init_default()
|
||||
|
||||
text_formatting = "%s",
|
||||
|
||||
include = {
|
||||
skill_level = true
|
||||
},
|
||||
|
||||
offset = {
|
||||
x = 5,
|
||||
y = 0
|
||||
@@ -7564,7 +7591,437 @@ function this.init_default()
|
||||
outline = 0xC0000000
|
||||
}
|
||||
}
|
||||
}]]
|
||||
},
|
||||
|
||||
stats_UI = {
|
||||
enabled = false,
|
||||
|
||||
position = {
|
||||
x = 0,
|
||||
y = 0,
|
||||
-- Possible values: "Top-Left", "Top-Right", "Bottom-Left", "Bottom-Right"
|
||||
anchor = "Bottom-Right"
|
||||
},
|
||||
|
||||
health_label = {
|
||||
visibility = false,
|
||||
|
||||
settings = {
|
||||
right_alignment_shift = 16
|
||||
},
|
||||
|
||||
text_formatting = "%s",
|
||||
|
||||
include = {
|
||||
name = true,
|
||||
value = true,
|
||||
max_value = true
|
||||
},
|
||||
|
||||
offset = {
|
||||
x = -514,
|
||||
y = -35
|
||||
},
|
||||
|
||||
color = 0xFFFEFF88,
|
||||
|
||||
shadow = {
|
||||
visibility = true,
|
||||
|
||||
offset = {
|
||||
x = 1,
|
||||
y = 1
|
||||
},
|
||||
|
||||
color = 0xFF000000
|
||||
}
|
||||
},
|
||||
|
||||
stamina_label = {
|
||||
visibility = false,
|
||||
|
||||
settings = {
|
||||
right_alignment_shift = 16
|
||||
},
|
||||
|
||||
text_formatting = "%s",
|
||||
|
||||
include = {
|
||||
name = true,
|
||||
value = true,
|
||||
max_value = true
|
||||
},
|
||||
|
||||
offset = {
|
||||
x = -382,
|
||||
y = -35
|
||||
},
|
||||
|
||||
color = 0xFFFEFF88,
|
||||
|
||||
shadow = {
|
||||
visibility = true,
|
||||
|
||||
offset = {
|
||||
x = 1,
|
||||
y = 1
|
||||
},
|
||||
|
||||
color = 0xFF000000
|
||||
}
|
||||
},
|
||||
|
||||
attack_label = {
|
||||
visibility = true,
|
||||
|
||||
settings = {
|
||||
right_alignment_shift = 11
|
||||
},
|
||||
|
||||
text_formatting = "%s",
|
||||
|
||||
include = {
|
||||
name = true,
|
||||
value = true
|
||||
},
|
||||
|
||||
offset = {
|
||||
x = -353,
|
||||
y = -17
|
||||
},
|
||||
|
||||
color = 0xFFF27979,
|
||||
|
||||
shadow = {
|
||||
visibility = true,
|
||||
|
||||
offset = {
|
||||
x = 1,
|
||||
y = 1
|
||||
},
|
||||
|
||||
color = 0xFF000000
|
||||
}
|
||||
},
|
||||
|
||||
affinity_label = {
|
||||
visibility = true,
|
||||
|
||||
settings = {
|
||||
right_alignment_shift = 14
|
||||
},
|
||||
|
||||
text_formatting = "%s",
|
||||
|
||||
include = {
|
||||
name = true,
|
||||
value = true
|
||||
},
|
||||
|
||||
offset = {
|
||||
x = -242,
|
||||
y = -17
|
||||
},
|
||||
|
||||
color = 0xFFF27979,
|
||||
|
||||
shadow = {
|
||||
visibility = true,
|
||||
|
||||
offset = {
|
||||
x = 1,
|
||||
y = 1
|
||||
},
|
||||
|
||||
color = 0xFF000000
|
||||
}
|
||||
},
|
||||
|
||||
defense_label = {
|
||||
visibility = true,
|
||||
|
||||
settings = {
|
||||
right_alignment_shift = 13
|
||||
},
|
||||
|
||||
text_formatting = "%s",
|
||||
|
||||
include = {
|
||||
name = true,
|
||||
value = true
|
||||
},
|
||||
|
||||
offset = {
|
||||
x = -103,
|
||||
y = -17
|
||||
},
|
||||
|
||||
color = 0xFFBFF7FF,
|
||||
|
||||
shadow = {
|
||||
visibility = true,
|
||||
|
||||
offset = {
|
||||
x = 1,
|
||||
y = 1
|
||||
},
|
||||
|
||||
color = 0xFF000000
|
||||
}
|
||||
},
|
||||
|
||||
fire_resistance_label = {
|
||||
visibility = false,
|
||||
|
||||
settings = {
|
||||
right_alignment_shift = 13
|
||||
},
|
||||
|
||||
text_formatting = "%s",
|
||||
|
||||
include = {
|
||||
name = true,
|
||||
value = true
|
||||
},
|
||||
|
||||
offset = {
|
||||
x = -625,
|
||||
y = -53
|
||||
},
|
||||
|
||||
color = 0xFFF27979,
|
||||
|
||||
shadow = {
|
||||
visibility = true,
|
||||
|
||||
offset = {
|
||||
x = 1,
|
||||
y = 1
|
||||
},
|
||||
|
||||
color = 0xFF000000
|
||||
}
|
||||
},
|
||||
|
||||
water_resistance_label = {
|
||||
visibility = false,
|
||||
|
||||
settings = {
|
||||
right_alignment_shift = 14
|
||||
},
|
||||
|
||||
text_formatting = "%s",
|
||||
|
||||
include = {
|
||||
name = true,
|
||||
value = true
|
||||
},
|
||||
|
||||
offset = {
|
||||
x = -507,
|
||||
y = -53
|
||||
},
|
||||
|
||||
color = 0xFF7AB8F8,
|
||||
|
||||
shadow = {
|
||||
visibility = true,
|
||||
|
||||
offset = {
|
||||
x = 1,
|
||||
y = 1
|
||||
},
|
||||
|
||||
color = 0xFF000000
|
||||
}
|
||||
},
|
||||
|
||||
thunder_resistance_label = {
|
||||
visibility = false,
|
||||
|
||||
settings = {
|
||||
right_alignment_shift = 16
|
||||
},
|
||||
|
||||
text_formatting = "%s",
|
||||
|
||||
include = {
|
||||
name = true,
|
||||
value = true
|
||||
},
|
||||
|
||||
offset = {
|
||||
x = -382,
|
||||
y = -53
|
||||
},
|
||||
|
||||
color = 0xFFFEFF88,
|
||||
|
||||
shadow = {
|
||||
visibility = true,
|
||||
|
||||
offset = {
|
||||
x = 1,
|
||||
y = 1
|
||||
},
|
||||
|
||||
color = 0xFF000000
|
||||
}
|
||||
},
|
||||
|
||||
ice_resistance_label = {
|
||||
visibility = false,
|
||||
|
||||
settings = {
|
||||
right_alignment_shift = 12
|
||||
},
|
||||
|
||||
text_formatting = "%s",
|
||||
|
||||
include = {
|
||||
name = true,
|
||||
value = true
|
||||
},
|
||||
|
||||
offset = {
|
||||
x = -228,
|
||||
y = -53
|
||||
},
|
||||
|
||||
color = 0xFFBFF7FF,
|
||||
|
||||
shadow = {
|
||||
visibility = true,
|
||||
|
||||
offset = {
|
||||
x = 1,
|
||||
y = 1
|
||||
},
|
||||
|
||||
color = 0xFF000000
|
||||
}
|
||||
},
|
||||
|
||||
dragon_resistance_label = {
|
||||
visibility = false,
|
||||
|
||||
settings = {
|
||||
right_alignment_shift = 15
|
||||
},
|
||||
|
||||
text_formatting = "%s",
|
||||
|
||||
include = {
|
||||
name = true,
|
||||
value = true
|
||||
},
|
||||
|
||||
offset = {
|
||||
x = -117,
|
||||
y = -53
|
||||
},
|
||||
|
||||
color = 0xFFB999FF,
|
||||
|
||||
shadow = {
|
||||
visibility = true,
|
||||
|
||||
offset = {
|
||||
x = 1,
|
||||
y = 1
|
||||
},
|
||||
|
||||
color = 0xFF000000
|
||||
}
|
||||
},
|
||||
|
||||
element_label = {
|
||||
visibility = false,
|
||||
|
||||
settings = {
|
||||
right_alignment_shift = 14
|
||||
},
|
||||
|
||||
text_formatting = "%s",
|
||||
|
||||
include = {
|
||||
name = true,
|
||||
value = true
|
||||
},
|
||||
|
||||
offset = {
|
||||
x = -110,
|
||||
y = -35
|
||||
},
|
||||
|
||||
color = 0xFFF59FC4,
|
||||
|
||||
shadow = {
|
||||
visibility = true,
|
||||
|
||||
offset = {
|
||||
x = 1,
|
||||
y = 1
|
||||
},
|
||||
|
||||
color = 0xFF000000
|
||||
}
|
||||
},
|
||||
|
||||
element_2_label = {
|
||||
visibility = false,
|
||||
|
||||
settings = {
|
||||
right_alignment_shift = 14
|
||||
},
|
||||
|
||||
text_formatting = "%s",
|
||||
|
||||
include = {
|
||||
name = true,
|
||||
value = true
|
||||
},
|
||||
|
||||
offset = {
|
||||
x = -242,
|
||||
y = -35
|
||||
},
|
||||
|
||||
color = 0xFFF59FC4,
|
||||
|
||||
shadow = {
|
||||
visibility = true,
|
||||
|
||||
offset = {
|
||||
x = 1,
|
||||
y = 1
|
||||
},
|
||||
|
||||
color = 0xFF000000
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
debug = {
|
||||
history_size = 64
|
||||
},
|
||||
|
||||
customization_menu = {
|
||||
position = {
|
||||
x = 360,
|
||||
y = 50
|
||||
},
|
||||
|
||||
size = {
|
||||
width = 785,
|
||||
height = 500
|
||||
},
|
||||
|
||||
pivot = {
|
||||
x = 0,
|
||||
y = 0
|
||||
}
|
||||
}
|
||||
};
|
||||
end
|
||||
|
||||
@@ -7572,7 +8029,7 @@ function this.load_current_config_value()
|
||||
local loaded_config = json.load_file(this.current_config_value_file_name);
|
||||
if loaded_config ~= nil then
|
||||
if loaded_config.config == nil then
|
||||
log.info("[MHR Overlay] old config.json loaded successfully");
|
||||
log.info("[MHR Overlay] Old config.json Loaded Successfully");
|
||||
|
||||
local config_save = {
|
||||
config = this.current_config_name
|
||||
@@ -7590,11 +8047,12 @@ function this.load_current_config_value()
|
||||
|
||||
is_old_config_transferred = true;
|
||||
else
|
||||
log.info("[MHR Overlay] config.json loaded successfully");
|
||||
log.info("[MHR Overlay] config.json Loaded Successfully");
|
||||
this.current_config_name = loaded_config.config;
|
||||
end
|
||||
else
|
||||
log.error("[MHR Overlay] Failed to load config.json");
|
||||
log.error("[MHR Overlay] Failed to Load config.json");
|
||||
error_handler.report("config.load_current_config_value", "Failed to Load config.json");
|
||||
end
|
||||
end
|
||||
|
||||
@@ -7615,8 +8073,7 @@ function this.load_configs()
|
||||
|
||||
local loaded_config = json.load_file(config_file_name);
|
||||
if loaded_config ~= nil then
|
||||
log.info("[MHR Overlay] " .. config_name .. ".json loaded successfully");
|
||||
|
||||
log.info(string.format("[MHR Overlay] %s.json Loaded Successfully", config_name));
|
||||
|
||||
local merged_config = utils.table.merge(this.default_config, loaded_config);
|
||||
merged_config.version = this.version;
|
||||
@@ -7630,7 +8087,8 @@ function this.load_configs()
|
||||
this.current_config = merged_config;
|
||||
end
|
||||
else
|
||||
log.error("[MHR Overlay] Failed to load " .. config_name .. ".json");
|
||||
log.error(string.format("[MHR Overlay] Failed to Load %s.json", config_name));
|
||||
error_handler.report("config.load_configs", string.format("Failed to Load %s.json", config_name));
|
||||
end
|
||||
|
||||
::continue::
|
||||
@@ -7664,7 +8122,8 @@ function this.save(file_name, config_table)
|
||||
if success then
|
||||
log.info("[MHR Overlay] " .. file_name .. " saved successfully");
|
||||
else
|
||||
log.error("[MHR Overlay] Failed to save " .. file_name);
|
||||
error_handler.report("config.load_configs", string.format("Failed to Save %s", file_name));
|
||||
log.error(string.format("[MHR Overlay] Failed to Save %s", file_name));
|
||||
end
|
||||
end
|
||||
|
||||
@@ -7716,10 +8175,13 @@ function this.update(index)
|
||||
this.save_current_config_name();
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
function this.init_dependencies()
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
this.init_default();
|
||||
this.load_current_config_value();
|
||||
this.load_configs();
|
||||
|
||||
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,6 +1,7 @@
|
||||
local this = {};
|
||||
|
||||
local utils;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -170,12 +171,15 @@ this.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",
|
||||
waterblight = "Waterblight",
|
||||
iceblight = "Iceblight",
|
||||
thunderblight = "Thunderblight",
|
||||
|
||||
@@ -186,7 +190,101 @@ this.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"
|
||||
},
|
||||
|
||||
dango_skills = {
|
||||
dango_insurance_defense_up = "Dango Insurance Defense Up"
|
||||
},
|
||||
|
||||
skills = {
|
||||
powder_mantle_red = "Powder Mantle (Red)",
|
||||
powder_mantle_blue = "Powder Mantle (Blue)",
|
||||
dragon_conversion_elemental_attack_up = "Dragon Conversion Elem. Atk Up",
|
||||
dragon_conversion_elemental_res_up = "Dragon Conversion Elem. Res Up",
|
||||
},
|
||||
|
||||
weapon_skills = {
|
||||
-- Great Sword
|
||||
power_sheathe = "Power Sheathe",
|
||||
-- Switch Axe
|
||||
amped_state = "Amped State",
|
||||
switch_charger = "Switch Charger",
|
||||
axe_heavy_slam = "Axe: Heavy Slam",
|
||||
-- Long Sword
|
||||
spirit_gauge_autofill = "Spirit Gauge Autofill", -- Soaring Kick, Iai Slash
|
||||
spirit_gauge = "Spirit Gauge",
|
||||
--harvest_moon = "Harvest Moon",
|
||||
-- Light Bowgun
|
||||
--fanning_maneuver = "Fanning Maneuver",
|
||||
wyvernblast_reload = "Wyvernblast Reload",
|
||||
-- Heavy Bowgun
|
||||
--counter_charger = "Counter Charger",
|
||||
--rising_moon = "Rising Moon",
|
||||
--setting_sun = "Setting Sun",
|
||||
overheat = "Overheat",
|
||||
wyvernsnipe_reload = "Wyvernsnipe Reload",
|
||||
-- Hammer
|
||||
--impact_burst = "Impact Burst",
|
||||
-- Gunlance
|
||||
--ground_splitter = "Ground Splitter",
|
||||
--erupting_cannon = "Erupting Cannon",
|
||||
-- Lance
|
||||
--anchor_rage = "Anchor Rage",
|
||||
--spiral_thrust = "Spiral Thrust",
|
||||
twin_wine = "Twin Wine",
|
||||
-- Sword & Shield
|
||||
--destroyer_oil = "Destroyer Oil",
|
||||
-- Dual Blades
|
||||
ironshine_silk = "Ironshine Silk",
|
||||
archdemon_mode = "Archdemon Mode",
|
||||
-- Hunting Horn
|
||||
--silkbind_shockwave = "Silkbind Shockwave",
|
||||
--bead_of_resonance = "Bead of Resonance",
|
||||
--sonic_bloom = "Sonic Bloom",
|
||||
-- Charge Blade
|
||||
element_boost = "Element Boost",
|
||||
sword_boost_mode ="Sword Boost Mode",
|
||||
-- Insect Glaive
|
||||
red_extract = "Red Extract",
|
||||
white_extract = "White Extract",
|
||||
orange_extract = "Orange Extract",
|
||||
all_extracts_mix = "All Extracts Mix",
|
||||
-- Bow
|
||||
herculean_draw = "Herculean Draw",
|
||||
--bolt_boost = "Bolt Boost"
|
||||
},
|
||||
|
||||
misc_buffs = {
|
||||
attack_up = "Attack Up",
|
||||
defense_up = "Defense Up",
|
||||
stamina_use_down = "Stamina Use Down",
|
||||
immunity = "Immunity"
|
||||
},
|
||||
|
||||
UI = {
|
||||
@@ -206,6 +304,8 @@ this.default_language = {
|
||||
|
||||
otomo = "Buddy",
|
||||
servant = "Follower",
|
||||
|
||||
lv = "Lv."
|
||||
},
|
||||
|
||||
customization_menu = {
|
||||
@@ -563,7 +663,49 @@ this.default_language = {
|
||||
top_to_bottom = "Top to Bottom",
|
||||
bottom_to_top = "Bottom to Top",
|
||||
|
||||
right_alignment_shift = "Right Alignment Shift"
|
||||
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"
|
||||
},
|
||||
|
||||
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",
|
||||
}
|
||||
};
|
||||
|
||||
@@ -582,18 +724,17 @@ function this.load()
|
||||
|
||||
local loaded_language = json.load_file(language_file_name);
|
||||
if loaded_language ~= nil then
|
||||
log.info(string.format("[MHR Overlay] %s.json Loaded Successfully", language_file_name));
|
||||
|
||||
log.info("[MHR Overlay] " .. language_file_name .. ".json loaded successfully");
|
||||
table.insert(this.language_names, language_name);
|
||||
|
||||
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_file_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
|
||||
@@ -601,9 +742,10 @@ end
|
||||
function this.save(file_name, language_table)
|
||||
local success = json.dump_file(file_name, language_table);
|
||||
if success then
|
||||
log.info("[MHR Overlay] " .. file_name .. " saved successfully");
|
||||
log.info(string.format("[MHR Overlay] %s Saved Successfully", file_name));
|
||||
else
|
||||
log.error("[MHR Overlay] Failed to save " .. file_name);
|
||||
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
|
||||
|
||||
@@ -615,9 +757,12 @@ function this.update(index)
|
||||
this.current_language = this.languages[index];
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
function this.init_dependencies()
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
this.save_default();
|
||||
this.load();
|
||||
this.current_language = this.default_language;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
local this = {};
|
||||
|
||||
local language;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -954,9 +955,12 @@ function this.get_part_name(monster_id, part_id)
|
||||
return part_name;
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
function this.init_dependencies()
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
this.init();
|
||||
end
|
||||
|
||||
|
||||
327
reframework/autorun/MHR_Overlay/Misc/player_info.lua
Normal file
327
reframework/autorun/MHR_Overlay/Misc/player_info.lua
Normal file
@@ -0,0 +1,327 @@
|
||||
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 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");
|
||||
-- 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_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_dango_adrenaline(quest_player_base)
|
||||
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");
|
||||
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,5 +1,7 @@
|
||||
local this = {};
|
||||
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
local pairs = pairs;
|
||||
@@ -39,8 +41,10 @@ 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 = {};
|
||||
@@ -48,6 +52,12 @@ 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
|
||||
@@ -207,6 +217,18 @@ function this.table.merge(...)
|
||||
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
|
||||
@@ -223,6 +245,14 @@ 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
|
||||
@@ -413,6 +443,44 @@ function this.unicode.sub(str, i, j)
|
||||
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
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ local time;
|
||||
local small_monster;
|
||||
local large_monster;
|
||||
local drawing;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -52,28 +53,27 @@ function this.draw(monster, ailment_buildup_UI, cached_config, ailment_buildups_
|
||||
return;
|
||||
end
|
||||
|
||||
|
||||
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
|
||||
|
||||
|
||||
@@ -154,7 +154,7 @@ function this.draw(monster, ailment_buildup_UI, cached_config, ailment_buildups_
|
||||
end
|
||||
|
||||
if total_buildup == 0 then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if cached_config.sorting.type == "Normal" then
|
||||
@@ -227,11 +227,9 @@ function this.draw(monster, ailment_buildup_UI, cached_config, ailment_buildups_
|
||||
|
||||
::continue::
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
function this.init_dependencies()
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
@@ -241,6 +239,10 @@ function this.init_module()
|
||||
small_monster = require("MHR_Overlay.Monsters.small_monster");
|
||||
large_monster = require("MHR_Overlay.Monsters.large_monster");
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -4,6 +4,7 @@ local small_monster;
|
||||
local large_monster;
|
||||
local config;
|
||||
local ailments;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -62,16 +63,19 @@ local blast_adjust_rate_method = blast_param_type:get_method("get_BlastDamageAdj
|
||||
|
||||
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
|
||||
|
||||
@@ -90,16 +94,19 @@ end
|
||||
|
||||
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
|
||||
|
||||
@@ -113,7 +120,6 @@ function this.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
|
||||
@@ -122,10 +128,15 @@ function this.stock_damage()
|
||||
for enemy, monster in pairs(large_monster.list) do
|
||||
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::
|
||||
@@ -134,22 +145,30 @@ function this.stock_damage()
|
||||
for enemy, monster in pairs(small_monster.list) do
|
||||
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 this.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");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
sdk.hook(stock_damage_method, function(args)
|
||||
pcall(this.stock_damage, sdk.to_managed_object(args[2]));
|
||||
end, function(retval)
|
||||
|
||||
@@ -9,6 +9,8 @@ local time;
|
||||
local small_monster;
|
||||
local large_monster;
|
||||
local non_players;
|
||||
local error_handler;
|
||||
local utils;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -94,7 +96,7 @@ function this.new(_ailments, ailment_id)
|
||||
new_ailment.buildup_percentage = 0;
|
||||
|
||||
new_ailment.timer = 0;
|
||||
new_ailment.duration = 100000;
|
||||
new_ailment.duration = 0;
|
||||
new_ailment.timer_percentage = 0;
|
||||
|
||||
new_ailment.minutes_left = 0;
|
||||
@@ -247,8 +249,6 @@ end
|
||||
local enemy_character_base_type_def = sdk.find_type_definition("snow.enemy.EnemyCharacterBase");
|
||||
local get_damage_param_method = enemy_character_base_type_def:get_method("get_DamageParam");
|
||||
|
||||
|
||||
|
||||
local damage_param_type_def = get_damage_param_method:get_return_type();
|
||||
local get_condition_param_method = damage_param_type_def:get_method("get_ConditionParam");
|
||||
|
||||
@@ -272,15 +272,24 @@ local poison_damage_field = poison_param_type_def:get_field("<Damage>k__BackingF
|
||||
local poison_get_is_damage_method = poison_param_type_def:get_method("get_IsDamage");
|
||||
|
||||
local system_array_type_def = sdk.find_type_definition("System.Array");
|
||||
local length_method = system_array_type_def:get_method("get_Length");
|
||||
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 int32_type_def = sdk.find_type_definition("System.Int32");
|
||||
local int32_mvalue_field = int32_type_def:get_field("mValue");
|
||||
|
||||
local single_type_def = sdk.find_type_definition("System.Single");
|
||||
local single_mvalue_field = single_type_def:get_field("mValue");
|
||||
|
||||
function this.update_ailments(enemy, monster)
|
||||
if enemy == nil then
|
||||
error_handler.report("ailments.update_ailments", "Missing Parameter: enemy");
|
||||
return;
|
||||
end
|
||||
|
||||
local damage_param = get_damage_param_method:call(enemy);
|
||||
if damage_param == nil then
|
||||
error_handler.report("ailments.update_ailments", "Failed to access Data: damage_param");
|
||||
return;
|
||||
end
|
||||
|
||||
@@ -297,24 +306,26 @@ function this.update_ailments(enemy, monster)
|
||||
end
|
||||
|
||||
local condition_param_array = get_condition_param_method:call(damage_param);
|
||||
|
||||
if condition_param_array == nil then
|
||||
error_handler.report("ailments.update_ailments", "Failed to access Data: condition_param_array");
|
||||
return;
|
||||
end
|
||||
|
||||
local condition_param_array_length = length_method:call(condition_param_array);
|
||||
local condition_param_array_length = get_length_method:call(condition_param_array);
|
||||
if condition_param_array_length == nil then
|
||||
error_handler.report("ailments.update_ailments", "Failed to access Data: condition_param_array_length");
|
||||
return;
|
||||
end
|
||||
|
||||
for id = 0, condition_param_array_length - 1 do
|
||||
if id == this.stun_id or id == this.poison_id or id == this.blast_id then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local ailment_param = get_value_method:call(condition_param_array, id);
|
||||
if ailment_param == nil then
|
||||
goto continue
|
||||
error_handler.report("ailments.update_ailments", "Failed to access Data: ailment_param No. " .. tostring(id));
|
||||
goto continue;
|
||||
end
|
||||
|
||||
this.update_ailment(monster, ailment_param, id);
|
||||
@@ -326,16 +337,22 @@ function this.update_stun_poison_blast_ailments(monster, damage_param)
|
||||
local stun_param = stun_param_field:get_data(damage_param);
|
||||
if stun_param ~= nil then
|
||||
this.update_ailment(monster, stun_param, this.stun_id);
|
||||
else
|
||||
error_handler.report("ailments.update_stun_poison_blast_ailments", "Failed to access Data: stun_param");
|
||||
end
|
||||
|
||||
local poison_param = poison_param_field:get_data(damage_param);
|
||||
if poison_param ~= nil then
|
||||
this.update_ailment(monster, poison_param, this.poison_id);
|
||||
else
|
||||
error_handler.report("ailments.update_stun_poison_blast_ailments", "Failed to access Data: poison_param");
|
||||
end
|
||||
|
||||
local blast_param = blast_param_field:get_data(damage_param);
|
||||
if blast_param ~= nil then
|
||||
this.update_ailment(monster, blast_param, this.blast_id);
|
||||
else
|
||||
error_handler.report("ailments.update_stun_poison_blast_ailments", "Failed to access Data: blast_param");
|
||||
end
|
||||
end
|
||||
|
||||
@@ -348,65 +365,71 @@ function this.update_ailment(monster, ailment_param, id)
|
||||
local duration = get_active_time_method:call(ailment_param);
|
||||
local is_active = get_is_active_method:call(ailment_param);
|
||||
|
||||
local activate_count = -999;
|
||||
local buildup = -999;
|
||||
local buildup_limit = 9999;
|
||||
local activate_count = nil;
|
||||
local buildup = nil;
|
||||
local buildup_limit = nil;
|
||||
|
||||
if activate_count_array ~= nil then
|
||||
local activate_count_array_length = length_method:call(activate_count_array);
|
||||
local activate_count_array_length = get_length_method:call(activate_count_array);
|
||||
|
||||
if activate_count_array_length ~= nil then
|
||||
|
||||
if activate_count_array_length > 0 then
|
||||
local activate_count_valuetype = get_value_method:call(activate_count_array, 0);
|
||||
local activate_count_valtype = get_value_method:call(activate_count_array, 0);
|
||||
|
||||
if activate_count_valuetype ~= nil then
|
||||
local _activate_count = activate_count_valuetype:get_field("mValue");
|
||||
|
||||
if _activate_count ~= nil then
|
||||
activate_count = _activate_count;
|
||||
end
|
||||
if activate_count_valtype ~= nil then
|
||||
activate_count = int32_mvalue_field:get_data(activate_count_valtype);
|
||||
else
|
||||
error_handler.report("ailments.update_ailment", "Failed to access Data: activate_count_valtype");
|
||||
end
|
||||
end
|
||||
else
|
||||
error_handler.report("ailments.update_ailment", "Failed to access Data: activate_count_array_length");
|
||||
end
|
||||
else
|
||||
error_handler.report("ailments.update_ailment", "Failed to access Data: activate_count_array");
|
||||
end
|
||||
|
||||
if buildup_array ~= nil then
|
||||
local buildup_array_length = length_method:call(buildup_array);
|
||||
local buildup_array_length = get_length_method:call(buildup_array);
|
||||
|
||||
if buildup_array_length ~= nil then
|
||||
|
||||
if buildup_array_length > 0 then
|
||||
local buildup_valuetype = get_value_method:call(buildup_array, 0);
|
||||
local buildup_valtype = get_value_method:call(buildup_array, 0);
|
||||
|
||||
if buildup_valuetype ~= nil then
|
||||
local _buildup = buildup_valuetype:get_field("mValue");
|
||||
|
||||
if _buildup ~= nil then
|
||||
buildup = _buildup;
|
||||
end
|
||||
if buildup_valtype ~= nil then
|
||||
buildup = single_mvalue_field:get_data(buildup_valtype);
|
||||
else
|
||||
error_handler.report("ailments.update_ailment", "Failed to access Data: buildup_valtype");
|
||||
end
|
||||
end
|
||||
else
|
||||
error_handler.report("ailments.update_ailment", "Failed to access Data: buildup_array_length");
|
||||
end
|
||||
else
|
||||
error_handler.report("ailments.update_ailment", "Failed to access Data: buildup_array");
|
||||
end
|
||||
|
||||
if buildup_limit_array ~= nil then
|
||||
local buildup_limit_array_length = length_method:call(buildup_limit_array);
|
||||
local buildup_limit_array_length = get_length_method:call(buildup_limit_array);
|
||||
|
||||
if buildup_limit_array_length ~= nil then
|
||||
|
||||
if buildup_limit_array_length > 0 then
|
||||
local buildup_limit_valuetype = get_value_method:call(buildup_limit_array, 0);
|
||||
local buildup_limit_valtype = get_value_method:call(buildup_limit_array, 0);
|
||||
|
||||
if buildup_limit_valuetype ~= nil then
|
||||
local _buildup_limit = buildup_limit_valuetype:get_field("mValue");
|
||||
|
||||
if _buildup_limit ~= nil then
|
||||
buildup_limit = _buildup_limit;
|
||||
end
|
||||
if buildup_limit_valtype ~= nil then
|
||||
buildup_limit = single_mvalue_field:get_data(buildup_limit_valtype);
|
||||
else
|
||||
error_handler.report("ailments.update_ailment", "Failed to access Data: buildup_limit_valtype");
|
||||
end
|
||||
end
|
||||
else
|
||||
error_handler.report("ailments.update_ailment", "Failed to access Data: buildup_limit_array_length");
|
||||
end
|
||||
else
|
||||
error_handler.report("ailments.update_ailment", "Failed to access Data: buildup_limit_array");
|
||||
end
|
||||
|
||||
if is_enable == nil then
|
||||
@@ -429,6 +452,8 @@ function this.update_ailment(monster, ailment_param, id)
|
||||
end
|
||||
|
||||
monster.ailments[id].activate_count = activate_count;
|
||||
else
|
||||
error_handler.report("ailments.update_ailment", "Failed to access Data: activate_count");
|
||||
end
|
||||
|
||||
if buildup ~= nil then
|
||||
@@ -437,6 +462,8 @@ function this.update_ailment(monster, ailment_param, id)
|
||||
end
|
||||
|
||||
monster.ailments[id].total_buildup = buildup;
|
||||
else
|
||||
error_handler.report("ailments.update_ailment", "Failed to access Data: buildup");
|
||||
end
|
||||
|
||||
if buildup_limit ~= nil then
|
||||
@@ -445,6 +472,8 @@ function this.update_ailment(monster, ailment_param, id)
|
||||
end
|
||||
|
||||
monster.ailments[id].buildup_limit = buildup_limit;
|
||||
else
|
||||
error_handler.report("ailments.update_ailment", "Failed to access Data: buildup_limit");
|
||||
end
|
||||
|
||||
if buildup ~= nil and buildup_limit ~= nil and buildup_limit ~= 0 then
|
||||
@@ -503,19 +532,34 @@ end
|
||||
-- Code by coavins
|
||||
function this.update_poison(monster, poison_param)
|
||||
if monster == nil then
|
||||
error_handler.report("ailments.update_poison", "Missing Parameter: monster");
|
||||
return;
|
||||
end
|
||||
|
||||
if poison_param == nil then
|
||||
error_handler.report("ailments.update_poison", "Missing Parameter: poison_param");
|
||||
return;
|
||||
end
|
||||
|
||||
if poison_param ~= nil then
|
||||
--if poison tick, apply damage
|
||||
local is_damage = poison_get_is_damage_method:call(poison_param);
|
||||
if is_damage then
|
||||
if is_damage == nil then
|
||||
error_handler.report("ailments.update_poison", "Failed to access Data: is_damage");
|
||||
return;
|
||||
end
|
||||
|
||||
if not is_damage then
|
||||
return;
|
||||
end
|
||||
|
||||
local poison_damage = poison_damage_field:get_data(poison_param);
|
||||
if poison_damage == nil then
|
||||
error_handler.report("ailments.update_poison", "Failed to access Data: poison_damage");
|
||||
return;
|
||||
end
|
||||
|
||||
this.apply_ailment_damage(monster, this.poison_id, poison_damage);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function this.draw(monster, ailment_UI, cached_config, ailments_position_on_screen, opacity_scale)
|
||||
local cached_config = cached_config.ailments;
|
||||
@@ -526,115 +570,118 @@ function this.draw(monster, ailment_UI, cached_config, ailments_position_on_scre
|
||||
for id, ailment in pairs(monster.ailments) do
|
||||
if id == this.paralyze_id then
|
||||
if not cached_config.filter.paralysis then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
elseif id == this.sleep_id then
|
||||
if not cached_config.filter.sleep then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
elseif id == this.stun_id then
|
||||
if not cached_config.filter.stun then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
elseif id == this.flash_id then
|
||||
if not cached_config.filter.flash then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
elseif id == this.poison_id then
|
||||
if not cached_config.filter.poison then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
elseif id == this.blast_id then
|
||||
if not cached_config.filter.blast then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
elseif id == this.exhaust_id then
|
||||
if not cached_config.filter.exhaust then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
elseif id == this.ride_id then
|
||||
if not cached_config.filter.ride then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
elseif id == this.water_id then
|
||||
if not cached_config.filter.waterblight then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
elseif id == this.fire_id then
|
||||
if not cached_config.filter.fireblight then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
elseif id == this.ice_id then
|
||||
if not cached_config.filter.iceblight then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
elseif id == this.thunder_id then
|
||||
if not cached_config.filter.thunderblight then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
elseif id == this.fall_trap_id then
|
||||
if not cached_config.filter.fall_trap then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
elseif id == this.shock_trap_id then
|
||||
if not cached_config.filter.shock_trap then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
elseif id == this.capture_id then
|
||||
if not cached_config.filter.tranq_bomb then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
elseif id == this.koyashi_id then
|
||||
if not cached_config.filter.dung_bomb then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
elseif id == this.steel_fang_id then
|
||||
if not cached_config.filter.steel_fang then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
elseif id == this.fall_quick_sand_id then
|
||||
if not cached_config.filter.quick_sand then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
elseif id == this.fall_otomo_trap_id then
|
||||
if not cached_config.filter.fall_otomo_trap then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
elseif id == this.shock_otomo_trap_id then
|
||||
if not cached_config.filter.shock_otomo_trap then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
else
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if cached_config.settings.hide_ailments_with_zero_buildup and ailment.total_buildup == 0 and
|
||||
ailment.buildup_limit ~= 0
|
||||
and ailment.activate_count == 0 and not ailment.is_active then
|
||||
goto continue
|
||||
if cached_config.settings.hide_ailments_with_zero_buildup
|
||||
and ailment.total_buildup == 0
|
||||
and ailment.buildup_limit ~= 0
|
||||
and ailment.activate_count == 0
|
||||
and not ailment.is_active then
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if cached_config.settings.hide_inactive_ailments_with_no_buildup_support and ailment.buildup_limit == 0 and
|
||||
not ailment.is_active then
|
||||
goto continue
|
||||
if cached_config.settings.hide_inactive_ailments_with_no_buildup_support
|
||||
and ailment.buildup_limit == 0
|
||||
and not ailment.is_active then
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if cached_config.settings.hide_all_inactive_ailments and not ailment.is_active then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if cached_config.settings.hide_all_active_ailments and ailment.is_active then
|
||||
goto continue
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if cached_config.settings.hide_disabled_ailments and not ailment.is_enable then
|
||||
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 and
|
||||
not ailment.is_active then
|
||||
goto continue
|
||||
if cached_config.settings.time_limit ~= 0
|
||||
and time.total_elapsed_script_seconds - ailment.last_change_time > cached_config.settings.time_limit
|
||||
and not ailment.is_active then
|
||||
goto continue;
|
||||
end
|
||||
|
||||
table.insert(displayed_ailments, ailment);
|
||||
@@ -682,14 +729,21 @@ function this.draw(monster, ailment_UI, cached_config, ailments_position_on_scre
|
||||
|
||||
ailment_UI_entity.draw(ailment, ailment_UI, cached_config, ailment_position_on_screen, opacity_scale);
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
function this.apply_ailment_buildup(monster, player, otomo, ailment_type, ailment_buildup)
|
||||
if monster == nil or
|
||||
(ailment_type ~= this.poison_id and ailment_type ~= this.blast_id and ailment_type ~= this.stun_id)
|
||||
or (ailment_buildup == 0 or ailment_buildup == nil) then
|
||||
if monster == nil then
|
||||
error_handler.report("ailments.apply_ailment_buildup", "Missing Parameter: monster");
|
||||
return;
|
||||
end
|
||||
|
||||
if ailment_buildup == nil then
|
||||
error_handler.report("ailments.apply_ailment_buildup", "Missing Parameter: ailment_buildup");
|
||||
return;
|
||||
end
|
||||
|
||||
if (ailment_type ~= this.poison_id and ailment_type ~= this.blast_id and ailment_type ~= this.stun_id)
|
||||
or ailment_buildup == 0 then
|
||||
return;
|
||||
end
|
||||
|
||||
@@ -709,7 +763,6 @@ function this.apply_ailment_buildup(monster, player, otomo, ailment_type, ailmen
|
||||
monster.ailments[ailment_type].otomo_buildup[otomo] = (monster.ailments[ailment_type].otomo_buildup[otomo] or 0) + ailment_buildup;
|
||||
end
|
||||
|
||||
|
||||
this.calculate_ailment_contribution(monster, ailment_type);
|
||||
end
|
||||
|
||||
@@ -751,7 +804,17 @@ end
|
||||
-- Code by coavins
|
||||
function this.apply_ailment_damage(monster, ailment_type, ailment_damage)
|
||||
-- we only track poison and blast for now
|
||||
if ailment_type == nil or ailment_damage == nil then
|
||||
if monster == nil then
|
||||
error_handler.report("ailments.apply_ailment_damage", "Missing Parameter: monster");
|
||||
end
|
||||
|
||||
if ailment_type == nil then
|
||||
error_handler.report("ailments.apply_ailment_damage", "Missing Parameter: ailment_type");
|
||||
return;
|
||||
end
|
||||
|
||||
if ailment_damage == nil then
|
||||
error_handler.report("ailments.apply_ailment_damage", "Missing Parameter: ailment_damage");
|
||||
return;
|
||||
end
|
||||
|
||||
@@ -798,10 +861,7 @@ function this.apply_ailment_damage(monster, ailment_type, ailment_damage)
|
||||
|
||||
local player = players.get_player(otomo.id);
|
||||
|
||||
if player ~= nil then
|
||||
players.update_damage(player, otomo_damage_source_type, monster.is_large, damage_object);
|
||||
end
|
||||
|
||||
players.update_damage(otomo, otomo_damage_source_type, monster.is_large, damage_object);
|
||||
end
|
||||
|
||||
@@ -814,7 +874,7 @@ function this.apply_ailment_damage(monster, ailment_type, ailment_damage)
|
||||
players.update_damage(players.total, damage_source_type, monster.is_large, damage_object);
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
function this.init_dependencies()
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
non_players = require("MHR_Overlay.Damage_Meter.non_players");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
@@ -824,6 +884,11 @@ function this.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");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -12,6 +12,7 @@ local drawing;
|
||||
local part_names;
|
||||
local time;
|
||||
local utils;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -50,7 +51,6 @@ this.list = {};
|
||||
function this.new(id, name)
|
||||
local part = {};
|
||||
|
||||
|
||||
part.id = id;
|
||||
part.name = name;
|
||||
|
||||
@@ -316,19 +316,19 @@ function this.draw(monster, part_UI, cached_config, parts_position_on_screen, op
|
||||
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
|
||||
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 sever_supported or part.is_severed)
|
||||
and (not part_UI.anomaly_visibility or not anomaly_supported) then
|
||||
goto continue
|
||||
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);
|
||||
@@ -462,7 +462,7 @@ function this.draw(monster, part_UI, cached_config, parts_position_on_screen, op
|
||||
return last_part_position_on_screen;
|
||||
end
|
||||
|
||||
function this.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");
|
||||
@@ -475,6 +475,10 @@ function this.init_module()
|
||||
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
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -19,6 +19,8 @@ local players;
|
||||
local time;
|
||||
local body_part;
|
||||
local part_names;
|
||||
local error_handler;
|
||||
local quest_status;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -53,9 +55,18 @@ local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
this.list = {};
|
||||
this.highlighted_id = -1;
|
||||
|
||||
this.monster_ids = {
|
||||
chameleos = 25,
|
||||
toadversary = 131,
|
||||
lucent_nargacuga = 549,
|
||||
risen_chameleos = 2073
|
||||
}
|
||||
|
||||
function this.new(enemy)
|
||||
local monster = {};
|
||||
|
||||
monster.enemy = enemy;
|
||||
monster.is_large = true;
|
||||
|
||||
@@ -63,9 +74,10 @@ function this.new(enemy)
|
||||
monster.unique_id = 0;
|
||||
|
||||
monster.health = 0;
|
||||
monster.max_health = 999999;
|
||||
monster.max_health = 0;
|
||||
monster.health_percentage = 0;
|
||||
monster.missing_health = 0;
|
||||
monster.is_health_update_requested = true;
|
||||
|
||||
monster.is_capturable = true;
|
||||
monster.capture_health = 0;
|
||||
@@ -78,12 +90,12 @@ function this.new(enemy)
|
||||
|
||||
monster.is_tired = false;
|
||||
monster.stamina = 0;
|
||||
monster.max_stamina = 1000;
|
||||
monster.max_stamina = 0;
|
||||
monster.stamina_percentage = 0;
|
||||
monster.missing_stamina = 0;
|
||||
|
||||
monster.tired_timer = 0;
|
||||
monster.tired_duration = 600;
|
||||
monster.tired_duration = 0;
|
||||
|
||||
monster.tired_total_seconds_left = 0;
|
||||
monster.tired_minutes_left = 0;
|
||||
@@ -92,12 +104,12 @@ function this.new(enemy)
|
||||
|
||||
monster.is_in_rage = false;
|
||||
monster.rage_point = 0;
|
||||
monster.rage_limit = 3000;
|
||||
monster.rage_limit = 0;
|
||||
monster.rage_count = 0;
|
||||
monster.rage_percentage = 0;
|
||||
|
||||
monster.rage_timer = 0;
|
||||
monster.rage_duration = 600;
|
||||
monster.rage_duration = 0;
|
||||
|
||||
monster.rage_total_seconds_left = 0;
|
||||
monster.rage_minutes_left = 0;
|
||||
@@ -108,17 +120,16 @@ function this.new(enemy)
|
||||
monster.distance = 0;
|
||||
|
||||
monster.name = "Large Monster";
|
||||
monster.size = 1;
|
||||
monster.size = 0;
|
||||
monster.small_border = 0;
|
||||
monster.big_border = 5;
|
||||
monster.king_border = 10;
|
||||
monster.big_border = 0;
|
||||
monster.king_border = 0;
|
||||
monster.crown = "";
|
||||
|
||||
monster.is_anomaly = false;
|
||||
monster.parts = {};
|
||||
|
||||
monster.ailments = ailments.init_ailments();
|
||||
|
||||
monster.rider_id = -1;
|
||||
|
||||
monster.dynamic_UI = {};
|
||||
@@ -131,17 +142,12 @@ function this.new(enemy)
|
||||
this.init_UI(monster, monster.highlighted_UI, config.current_config.large_monster_UI.highlighted);
|
||||
|
||||
this.update_position(enemy, monster);
|
||||
|
||||
local physical_param = this.update_health(enemy, monster);
|
||||
|
||||
this.update_stamina(enemy, monster, nil);
|
||||
this.update_stamina_timer(enemy, monster, nil);
|
||||
|
||||
this.update_rage(enemy, monster, nil);
|
||||
this.update_rage_timer(enemy, monster, nil);
|
||||
|
||||
this.update(enemy, monster);
|
||||
pcall(this.update_parts, enemy, monster, physical_param);
|
||||
pcall(this.update_anomaly_parts, enemy, monster, nil);
|
||||
|
||||
if this.list[enemy] == nil then
|
||||
@@ -156,6 +162,7 @@ function this.get_monster(enemy)
|
||||
if monster == nil then
|
||||
monster = this.new(enemy);
|
||||
end
|
||||
|
||||
return monster;
|
||||
end
|
||||
|
||||
@@ -222,7 +229,7 @@ local get_mario_player_index_method = mario_param_type:get_method("get_MarioPlay
|
||||
local get_pos_field = enemy_character_base_type_def:get_method("get_Pos");
|
||||
|
||||
local system_array_type_def = sdk.find_type_definition("System.Array");
|
||||
local length_method = system_array_type_def:get_method("get_Length");
|
||||
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)");
|
||||
|
||||
-- Lucent Nargacuga
|
||||
@@ -256,33 +263,49 @@ local core_parts_get_is_active_method = enemy_mystery_core_parts_type_def:get_me
|
||||
local core_parts_get_dying_vital_threashold_method = enemy_mystery_core_parts_type_def:get_method("get_DyingVitalThreashold");
|
||||
local on_break_method = enemy_mystery_core_parts_type_def:get_method("onBreak");
|
||||
|
||||
local gui_manager_type_def = sdk.find_type_definition("snow.gui.GuiManager");
|
||||
local get_tg_camera_method = gui_manager_type_def:get_method("get_refGuiHud_TgCamera");
|
||||
|
||||
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");
|
||||
|
||||
local lobby_manager_type_def = sdk.find_type_definition("snow.LobbyManager");
|
||||
local receive_quest_hunter_info_method = lobby_manager_type_def:get_method("receiveQuestHunterInfo");
|
||||
|
||||
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";
|
||||
local monster_id = enemy_type_field:get_data(enemy);
|
||||
if monster_id == nil then
|
||||
error_handler.report("large_monster.init", "Failed to access Data: enemy_type");
|
||||
return;
|
||||
end
|
||||
|
||||
monster.id = enemy_type;
|
||||
monster.id = monster_id;
|
||||
|
||||
if monster.id == 549 or monster.id == 25 or monster.id == 2073 then
|
||||
if monster_id == this.monster_ids.lucent_nargacuga or monster_id == this.monster_ids.chameleos or monster_id == this.monster_ids.risen_chameleos then
|
||||
monster.can_go_stealth = true;
|
||||
end
|
||||
|
||||
local enemy_name = get_enemy_name_message_method:call(singletons.message_manager, enemy_type);
|
||||
local enemy_name = get_enemy_name_message_method:call(singletons.message_manager, monster_id);
|
||||
if enemy_name ~= nil then
|
||||
monster.name = enemy_name;
|
||||
else
|
||||
error_handler.report("large_monster.init", "Failed to access Data: enemy_name");
|
||||
end
|
||||
|
||||
if monster_id ~= this.monster_ids.toadversary then
|
||||
local set_info = get_set_info_method:call(enemy);
|
||||
if set_info ~= nil then
|
||||
local unique_id = get_unique_id_method:call(set_info);
|
||||
if unique_id ~= nil then
|
||||
monster.unique_id = unique_id;
|
||||
else
|
||||
error_handler.report("large_monster.init", "Failed to access Data: unique_id");
|
||||
end
|
||||
else
|
||||
error_handler.report("large_monster.init", "Failed to access Data: set_info");
|
||||
end
|
||||
|
||||
local size_info = find_enemy_size_info_method:call(singletons.enemy_manager, enemy_type);
|
||||
local size_info = find_enemy_size_info_method:call(singletons.enemy_manager, monster_id);
|
||||
if size_info ~= nil then
|
||||
local small_border = get_small_border_method:call(size_info);
|
||||
local big_border = get_big_border_method:call(size_info);
|
||||
@@ -292,18 +315,26 @@ function this.init(monster, enemy)
|
||||
|
||||
if small_border ~= nil then
|
||||
monster.small_border = small_border;
|
||||
else
|
||||
error_handler.report("large_monster.init", "Failed to access Data: small_border");
|
||||
end
|
||||
|
||||
if big_border ~= nil then
|
||||
monster.big_border = big_border;
|
||||
else
|
||||
error_handler.report("large_monster.init", "Failed to access Data: big_border");
|
||||
end
|
||||
|
||||
if king_border ~= nil then
|
||||
monster.king_border = king_border;
|
||||
else
|
||||
error_handler.report("large_monster.init", "Failed to access Data: king_border");
|
||||
end
|
||||
|
||||
if size ~= nil then
|
||||
monster.size = size;
|
||||
else
|
||||
error_handler.report("large_monster.init", "Failed to access Data: size");
|
||||
end
|
||||
|
||||
if monster.size <= monster.small_border then
|
||||
@@ -313,6 +344,9 @@ function this.init(monster, enemy)
|
||||
elseif monster.size >= monster.big_border then
|
||||
monster.crown = language.current_language.UI.silver;
|
||||
end
|
||||
else
|
||||
error_handler.report("large_monster.init", "Failed to access Data: size_info");
|
||||
end
|
||||
end
|
||||
|
||||
local is_capture_enable = true;
|
||||
@@ -325,11 +359,16 @@ function this.init(monster, enemy)
|
||||
local is_capture_enable_ = capture_param:call("get_IsEnable");
|
||||
if is_capture_enable_ ~= nil then
|
||||
is_capture_enable = is_capture_enable_;
|
||||
else
|
||||
error_handler.report("large_monster.init", "Failed to access Data: is_capture_enable_");
|
||||
end
|
||||
else
|
||||
error_handler.report("large_monster.init", "Failed to access Data: capture_param");
|
||||
end
|
||||
else
|
||||
error_handler.report("large_monster.init", "Failed to access Data: damage_param");
|
||||
end
|
||||
|
||||
--local curia_param = enemy:get_field("<CuriaParam>k__BackingField");
|
||||
local mystery_param = get_mystery_param_method:call(enemy);
|
||||
local is_anomaly = mystery_param ~= nil;
|
||||
|
||||
@@ -425,16 +464,24 @@ function this.init_UI(monster, monster_UI, cached_config)
|
||||
body_part.init_part_names(monster.id, monster.parts);
|
||||
end
|
||||
|
||||
function this.request_health_update()
|
||||
for enemy, monster in pairs(this.list) do
|
||||
monster.is_health_update_requested = true;
|
||||
end
|
||||
end
|
||||
|
||||
function this.update_position(enemy, monster)
|
||||
if not config.current_config.large_monster_UI.dynamic.enabled and
|
||||
config.current_config.large_monster_UI.static.sorting.type ~= "Distance" then
|
||||
if not config.current_config.large_monster_UI.dynamic.enabled
|
||||
and config.current_config.large_monster_UI.static.sorting.type ~= "Distance" then
|
||||
return;
|
||||
end
|
||||
|
||||
local position = get_pos_field:call(enemy);
|
||||
if position ~= nil then
|
||||
monster.position = position;
|
||||
if position == nil then
|
||||
error_handler.report("large_monster.update_position", "Failed to access Data: position");
|
||||
end
|
||||
|
||||
monster.position = position;
|
||||
end
|
||||
|
||||
-- Code by coavins
|
||||
@@ -442,26 +489,31 @@ function this.update_all_riders()
|
||||
for enemy, monster in pairs(this.list) do
|
||||
-- get marionette rider
|
||||
local mario_param = get_mario_param_method:call(enemy);
|
||||
if mario_param ~= nil then
|
||||
local is_marionette = get_is_marionette_method:call(mario_param);
|
||||
if mario_param == nil then
|
||||
error_handler.report("large_monster.update_all_riders", "Failed to access Data: mario_param");
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local is_marionette = get_is_marionette_method:call(mario_param);
|
||||
if is_marionette == nil then
|
||||
error_handler.report("large_monster.update_all_riders", "Failed to access Data: is_marionette");
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if is_marionette then
|
||||
local player_id = get_mario_player_index_method:call(mario_param);
|
||||
if player_id ~= nil then
|
||||
monster.rider_id = player_id;
|
||||
if player_id == nil then
|
||||
error_handler.report("large_monster.update_all_riders", "Failed to access Data: player_id");
|
||||
goto continue;
|
||||
end
|
||||
|
||||
monster.rider_id = player_id;
|
||||
else
|
||||
monster.rider_id = -1;
|
||||
end
|
||||
end
|
||||
|
||||
::continue::
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function this.update(enemy, monster)
|
||||
@@ -476,38 +528,48 @@ function this.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("large_monster.update", "Failed to access Data: dead_or_captured");
|
||||
end
|
||||
|
||||
local is_disp_icon_mini_map = is_disp_icon_mini_map_method:call(enemy);
|
||||
if is_disp_icon_mini_map ~= nil then
|
||||
monster.is_disp_icon_mini_map = is_disp_icon_mini_map;
|
||||
else
|
||||
error_handler.report("large_monster.update", "Failed to access Data: is_disp_icon_mini_map");
|
||||
end
|
||||
|
||||
if monster.id == 549 or monster.id == 25 or monster.id == 2073 then
|
||||
if monster.id == this.monster_ids.lucent_nargacuga or monster.id == this.monster_ids.chameleos or monster.id == this.monster_ids.risen_chameleos then
|
||||
monster.can_go_stealth = true;
|
||||
end
|
||||
|
||||
if monster.can_go_stealth then
|
||||
-- Lucent Nargacuga
|
||||
if monster.id == 549 then
|
||||
if monster.id == this.monster_ids.lucent_nargacuga then
|
||||
local is_stealth = is_stealth_method:call(enemy);
|
||||
if is_stealth ~= nil then
|
||||
if is_stealth == nil then
|
||||
monster.is_stealth = is_stealth;
|
||||
else
|
||||
error_handler.report("large_monster.update", "Failed to access Data: is_stealth");
|
||||
end
|
||||
|
||||
-- Chameleos and Risen Chameleos
|
||||
elseif monster.id == 25 or monster.id == 2073 then
|
||||
elseif monster.id == this.monster_ids.chameleos or monster.id == this.monster_ids.risen_chameleos then
|
||||
local stealth_controller = get_stealth_ctrl_method:call(enemy);
|
||||
if stealth_controller ~= nil then
|
||||
local status = get_current_status_method:call(stealth_controller);
|
||||
|
||||
if status >= 2 then
|
||||
if status == nil then
|
||||
error_handler.report("large_monster.update", "Failed to access Data: status");
|
||||
elseif status >= 2 then
|
||||
monster.is_stealth = true;
|
||||
else
|
||||
monster.is_stealth = false;
|
||||
end
|
||||
else
|
||||
error_handler.report("large_monster.update", "Failed to access Data: stealth_controller");
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
pcall(ailments.update_ailments, enemy, monster);
|
||||
@@ -530,26 +592,45 @@ function this.update_health(enemy, monster)
|
||||
|
||||
local physical_param = get_physical_param_method:call(enemy);
|
||||
if physical_param == nil then
|
||||
customization_menu.status = "No physical param";
|
||||
error_handler.report("large_monster.update_health", "Failed to access Data: physical_param");
|
||||
return nil;
|
||||
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("large_monster.update_health", "Failed to access Data: vital_param");
|
||||
return nil;
|
||||
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.capture_health = get_capture_hp_vital_method:call(physical_param) or monster.capture_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("large_monster.update_health", "Failed to access Data: health");
|
||||
end
|
||||
|
||||
local max_health = get_max_method:call(vital_param);
|
||||
if max_health ~= nil then
|
||||
monster.max_health = max_health;
|
||||
else
|
||||
error_handler.report("large_monster.update_health", "Failed to access Data: max_health");
|
||||
end
|
||||
|
||||
local capture_health = get_capture_hp_vital_method:call(physical_param);
|
||||
if capture_health ~= nil then
|
||||
monster.capture_health = capture_health;
|
||||
else
|
||||
error_handler.report("large_monster.update_health", "Failed to access Data: capture_health");
|
||||
end
|
||||
|
||||
monster.missing_health = max_health - health;
|
||||
if monster.max_health ~= 0 then
|
||||
monster.health_percentage = health / max_health;
|
||||
monster.capture_percentage = capture_health / max_health;
|
||||
end
|
||||
|
||||
monster.is_health_update_requested = false;
|
||||
|
||||
return physical_param;
|
||||
end
|
||||
|
||||
@@ -571,7 +652,7 @@ function this.update_stamina(enemy, monster, stamina_param)
|
||||
if stamina_param == nil then
|
||||
stamina_param = get_stamina_param_method:call(enemy);
|
||||
if stamina_param == nil then
|
||||
customization_menu.status = "No stamina param";
|
||||
error_handler.report("large_monster.update_stamina", "Failed to access Data: stamina_param");
|
||||
return;
|
||||
end
|
||||
end
|
||||
@@ -579,14 +660,34 @@ function this.update_stamina(enemy, monster, stamina_param)
|
||||
local is_tired = is_tired_method:call(stamina_param, false);
|
||||
if is_tired ~= nil then
|
||||
monster.is_tired = is_tired;
|
||||
else
|
||||
error_handler.report("large_monster.update_stamina", "Failed to access Data: is_tired");
|
||||
return;
|
||||
end
|
||||
|
||||
monster.stamina = get_stamina_method:call(stamina_param) or monster.stamina;
|
||||
monster.max_stamina = get_max_stamina_method:call(stamina_param) or monster.max_stamina;
|
||||
if is_tired then
|
||||
return;
|
||||
end
|
||||
|
||||
monster.missing_stamina = monster.max_stamina - monster.stamina;
|
||||
if monster.max_stamina ~= 0 then
|
||||
monster.stamina_percentage = monster.stamina / monster.max_stamina;
|
||||
local stamina = get_stamina_method:call(stamina_param);
|
||||
if stamina ~= nil then
|
||||
monster.stamina = stamina;
|
||||
else
|
||||
error_handler.report("large_monster.update_stamina", "Failed to access Data: stamina");
|
||||
return;
|
||||
end
|
||||
|
||||
local max_stamina = get_max_stamina_method:call(stamina_param);
|
||||
if max_stamina ~= nil then
|
||||
monster.max_stamina = max_stamina;
|
||||
else
|
||||
error_handler.report("large_monster.update_stamina", "Failed to access Data: max_stamina");
|
||||
return;
|
||||
end
|
||||
|
||||
monster.missing_stamina = max_stamina - stamina;
|
||||
if max_stamina ~= 0 then
|
||||
monster.stamina_percentage = stamina / max_stamina;
|
||||
end
|
||||
end
|
||||
|
||||
@@ -608,7 +709,7 @@ function this.update_stamina_timer(enemy, monster, stamina_param)
|
||||
if stamina_param == nil then
|
||||
stamina_param = get_stamina_param_method:call(enemy);
|
||||
if stamina_param == nil then
|
||||
customization_menu.status = "No stamina param";
|
||||
error_handler.report("large_monster.update_stamina_timer", "Failed to access Data: stamina_param");
|
||||
return;
|
||||
end
|
||||
end
|
||||
@@ -616,14 +717,32 @@ function this.update_stamina_timer(enemy, monster, stamina_param)
|
||||
local is_tired = is_tired_method:call(stamina_param, false);
|
||||
if is_tired ~= nil then
|
||||
monster.is_tired = is_tired;
|
||||
else
|
||||
error_handler.report("large_monster.update_stamina_timer", "Failed to access Data: is_tired");
|
||||
return;
|
||||
end
|
||||
|
||||
if not is_tired then
|
||||
return;
|
||||
end
|
||||
|
||||
monster.tired_timer = get_remaining_tired_time_method:call(stamina_param) or monster.tired_timer;
|
||||
monster.tired_duration = get_total_tired_time_method:call(stamina_param) or monster.tired_duration;
|
||||
local tired_timer = get_remaining_tired_time_method:call(stamina_param);
|
||||
if tired_timer ~= nil then
|
||||
monster.tired_timer = tired_timer;
|
||||
else
|
||||
error_handler.report("large_monster.update_stamina_timer", "Failed to access Data: tired_timer");
|
||||
return;
|
||||
end
|
||||
|
||||
if monster.is_tired then
|
||||
monster.tired_total_seconds_left = monster.tired_timer;
|
||||
local tired_duration = get_total_tired_time_method:call(stamina_param);
|
||||
if tired_duration ~= nil then
|
||||
monster.tired_duration = tired_duration;
|
||||
else
|
||||
error_handler.report("large_monster.update_stamina_timer", "Failed to access Data: tired_duration");
|
||||
return;
|
||||
end
|
||||
|
||||
monster.tired_total_seconds_left = tired_timer;
|
||||
if monster.tired_total_seconds_left < 0 then
|
||||
monster.tired_total_seconds_left = 0;
|
||||
end
|
||||
@@ -631,9 +750,8 @@ function this.update_stamina_timer(enemy, monster, stamina_param)
|
||||
monster.tired_minutes_left = math.floor(monster.tired_total_seconds_left / 60);
|
||||
monster.tired_seconds_left = monster.tired_total_seconds_left - 60 * monster.tired_minutes_left;
|
||||
|
||||
if monster.tired_duration ~= 0 then
|
||||
monster.tired_timer_percentage = monster.tired_total_seconds_left / monster.tired_duration;
|
||||
end
|
||||
if tired_duration ~= 0 then
|
||||
monster.tired_timer_percentage = monster.tired_total_seconds_left / tired_duration;
|
||||
end
|
||||
end
|
||||
|
||||
@@ -655,17 +773,41 @@ function this.update_rage(enemy, monster, anger_param)
|
||||
if anger_param == nil then
|
||||
anger_param = get_anger_param_method:call(enemy);
|
||||
if anger_param == nil then
|
||||
customization_menu.status = "No anger param";
|
||||
error_handler.report("large_monster.update_rage", "Failed to access Data: anger_param");
|
||||
return;
|
||||
end
|
||||
end
|
||||
|
||||
local is_in_rage = is_anger_method:call(anger_param);
|
||||
if is_in_rage ~= nil then
|
||||
monster.is_in_rage = is_in_rage;
|
||||
else
|
||||
error_handler.report("large_monster.update_rage", "Failed to access Data: is_in_rage");
|
||||
return;
|
||||
end
|
||||
|
||||
monster.rage_point = get_anger_point_method:call(anger_param) or monster.rage_point;
|
||||
monster.rage_limit = get_limit_anger_method:call(anger_param) or monster.rage_limit;
|
||||
if is_in_rage then
|
||||
return;
|
||||
end
|
||||
|
||||
if monster.rage_limit ~= 0 then
|
||||
monster.rage_percentage = monster.rage_point / monster.rage_limit;
|
||||
local rage_point = get_anger_point_method:call(anger_param);
|
||||
if rage_point ~= nil then
|
||||
monster.rage_point = rage_point;
|
||||
else
|
||||
error_handler.report("large_monster.update_rage", "Failed to access Data: rage_point");
|
||||
return;
|
||||
end
|
||||
|
||||
local rage_limit = get_limit_anger_method:call(anger_param);
|
||||
if rage_limit ~= nil then
|
||||
monster.rage_limit = rage_limit;
|
||||
else
|
||||
error_handler.report("large_monster.update_rage", "Failed to access Data: rage_limit");
|
||||
return;
|
||||
end
|
||||
|
||||
if rage_limit ~= 0 then
|
||||
monster.rage_percentage = rage_point / rage_limit;
|
||||
end
|
||||
end
|
||||
|
||||
@@ -687,7 +829,7 @@ function this.update_rage_timer(enemy, monster, anger_param)
|
||||
if anger_param == nil then
|
||||
anger_param = get_anger_param_method:call(enemy);
|
||||
if anger_param == nil then
|
||||
customization_menu.status = "No anger param";
|
||||
error_handler.report("large_monster.update_rage_timer", "Failed to access Data: anger_param");
|
||||
return;
|
||||
end
|
||||
end
|
||||
@@ -695,13 +837,32 @@ function this.update_rage_timer(enemy, monster, anger_param)
|
||||
local is_in_rage = is_anger_method:call(anger_param);
|
||||
if is_in_rage ~= nil then
|
||||
monster.is_in_rage = is_in_rage;
|
||||
else
|
||||
error_handler.report("large_monster.update_rage_timer", "Failed to access Data: is_in_rage");
|
||||
return;
|
||||
end
|
||||
|
||||
monster.rage_timer = get_remaining_anger_time_method:call(anger_param) or monster.rage_timer;
|
||||
monster.rage_duration = get_total_anger_time_method:call(anger_param) or monster.rage_duration;
|
||||
if not is_in_rage then
|
||||
return;
|
||||
end
|
||||
|
||||
if monster.is_in_rage then
|
||||
monster.rage_total_seconds_left = monster.rage_timer;
|
||||
local rage_timer = get_remaining_anger_time_method:call(anger_param);
|
||||
if rage_timer ~= nil then
|
||||
monster.rage_timer = rage_timer;
|
||||
else
|
||||
error_handler.report("large_monster.update_rage_timer", "Failed to access Data: rage_timer");
|
||||
return;
|
||||
end
|
||||
|
||||
local rage_duration = get_total_anger_time_method:call(anger_param);
|
||||
if rage_duration ~= nil then
|
||||
monster.rage_duration = rage_duration;
|
||||
else
|
||||
error_handler.report("large_monster.update_rage_timer", "Failed to access Data: rage_duration");
|
||||
return;
|
||||
end
|
||||
|
||||
monster.rage_total_seconds_left = rage_timer;
|
||||
if monster.rage_total_seconds_left < 0 then
|
||||
monster.rage_total_seconds_left = 0;
|
||||
end
|
||||
@@ -709,9 +870,8 @@ function this.update_rage_timer(enemy, monster, anger_param)
|
||||
monster.rage_minutes_left = math.floor(monster.rage_total_seconds_left / 60);
|
||||
monster.rage_seconds_left = monster.rage_total_seconds_left - 60 * monster.rage_minutes_left;
|
||||
|
||||
if monster.rage_duration ~= 0 then
|
||||
monster.rage_timer_percentage = monster.rage_total_seconds_left / monster.rage_duration;
|
||||
end
|
||||
if rage_duration ~= 0 then
|
||||
monster.rage_timer_percentage = monster.rage_total_seconds_left / rage_duration;
|
||||
end
|
||||
end
|
||||
|
||||
@@ -745,31 +905,32 @@ function this.update_parts(enemy, monster, physical_param)
|
||||
if physical_param == nil then
|
||||
physical_param = get_physical_param_method:call(enemy);
|
||||
if physical_param == nil then
|
||||
customization_menu.status = "No physical param";
|
||||
error_handler.report("large_monster.update_parts", "Failed to access Data: physical_param");
|
||||
return;
|
||||
end
|
||||
end
|
||||
|
||||
local damage_param = get_damage_param_method:call(enemy);
|
||||
if damage_param == nil then
|
||||
customization_menu.status = "No damage param";
|
||||
error_handler.report("large_monster.update_parts", "Failed to access Data: damage_param");
|
||||
return;
|
||||
end
|
||||
|
||||
local enemy_parts_damage_info = enemy_parts_damage_info_field:get_data(damage_param);
|
||||
if enemy_parts_damage_info == nil then
|
||||
customization_menu.status = "No parts damage info";
|
||||
error_handler.report("large_monster.update_parts", "Failed to access Data: enemy_parts_damage_info");
|
||||
return;
|
||||
end
|
||||
|
||||
local core_parts_array = get_part_info_array_method:call(enemy_parts_damage_info);
|
||||
if core_parts_array == nil then
|
||||
customization_menu.status = "No parts damage info array";
|
||||
error_handler.report("large_monster.update_parts", "Failed to access Data: core_parts_array");
|
||||
return;
|
||||
end
|
||||
|
||||
local core_parts_array_length = length_method:call(core_parts_array);
|
||||
local core_parts_array_length = get_length_method:call(core_parts_array);
|
||||
if core_parts_array_length == nil then
|
||||
error_handler.report("large_monster.update_parts", "Failed to access Data: core_parts_array_length");
|
||||
return;
|
||||
end
|
||||
|
||||
@@ -778,7 +939,8 @@ function this.update_parts(enemy, monster, physical_param)
|
||||
|
||||
local enemy_parts_info = get_value_method:call(core_parts_array, i);
|
||||
if enemy_parts_info == nil then
|
||||
goto continue
|
||||
error_handler.report("large_monster.update_parts", "Failed to access Data: enemy_parts_info No. " .. tostring(i));
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local part = monster.parts[part_id];
|
||||
@@ -795,53 +957,91 @@ function this.update_parts(enemy, monster, physical_param)
|
||||
if cached_config.dynamic.body_parts.part_health.visibility
|
||||
or cached_config.static.body_parts.part_health.visibility
|
||||
or cached_config.highlighted.body_parts.part_health.visibility then
|
||||
|
||||
local part_vital = get_vital_method:call(physical_param, 1, i);
|
||||
if part_vital ~= nil then
|
||||
local part_current = get_current_method:call(part_vital) or -1;
|
||||
local part_max = get_max_method:call(part_vital) or -1;
|
||||
|
||||
local part_current = get_current_method:call(part_vital);
|
||||
if part_current == nil then
|
||||
error_handler.report("large_monster.update_parts", string.format("Failed to access Data: enemy_parts_info No. %d -> part_current", i));
|
||||
end
|
||||
|
||||
local part_max = get_max_method:call(part_vital);
|
||||
if part_max == nil then
|
||||
error_handler.report("large_monster.update_parts", string.format("Failed to access Data: enemy_parts_info No. %d -> part_max", i));
|
||||
end
|
||||
|
||||
if part_current ~= nil and part_max ~= nil then
|
||||
body_part.update_flinch(part, part_current, part_max);
|
||||
|
||||
end
|
||||
else
|
||||
error_handler.report("large_monster.update_parts", string.format("Failed to access Data: enemy_parts_info No. %d -> part_vital", i));
|
||||
end
|
||||
end
|
||||
|
||||
if cached_config.dynamic.body_parts.part_break.visibility
|
||||
or cached_config.static.body_parts.part_break.visibility
|
||||
or cached_config.highlighted.body_parts.part_break.visibility then
|
||||
|
||||
local part_break_vital = get_vital_method:call(physical_param, 2, i);
|
||||
if part_break_vital ~= nil then
|
||||
local part_break_current = get_current_method:call(part_break_vital) or -1;
|
||||
local part_break_max = get_max_method:call(part_break_vital) or -1;
|
||||
local part_break_count = -1;
|
||||
local part_break_max_count = -1;
|
||||
|
||||
if enemy_parts_info ~= nil then
|
||||
part_break_count = get_parts_break_damage_level_method:call(enemy_parts_info) or part_break_count;
|
||||
part_break_max_count = get_parts_break_damage_max_level_method:call(enemy_parts_info) or part_break_max_count;
|
||||
local part_break_current = get_current_method:call(part_break_vital);
|
||||
if part_break_current == nil then
|
||||
error_handler.report("large_monster.update_parts", string.format("Failed to access Data: enemy_parts_info No. %d -> part_break_current", i));
|
||||
end
|
||||
|
||||
body_part.update_break(part, part_break_current, part_break_max, part_break_count, part_break_max_count)
|
||||
local part_break_max = get_max_method:call(part_break_vital);
|
||||
if part_break_max == nil then
|
||||
error_handler.report("large_monster.update_parts", string.format("Failed to access Data: enemy_parts_info No. %d -> part_break_max", i));
|
||||
end
|
||||
|
||||
local part_break_count = get_parts_break_damage_level_method:call(enemy_parts_info);
|
||||
if part_break_count == nil then
|
||||
error_handler.report("large_monster.update_parts", string.format("Failed to access Data: enemy_parts_info No. %d -> part_break_count", i));
|
||||
end
|
||||
|
||||
local part_break_max_count = get_parts_break_damage_max_level_method:call(enemy_parts_info);
|
||||
if part_break_max_count == nil then
|
||||
error_handler.report("large_monster.update_parts", string.format("Failed to access Data: enemy_parts_info No. %d -> part_break_max_count", i));
|
||||
end
|
||||
|
||||
if part_break_current ~= nil and part_break_max ~= nil and part_break_count ~= nil and part_break_max_count ~= nil then
|
||||
body_part.update_break(part, part_break_current, part_break_max, part_break_count, part_break_max_count);
|
||||
end
|
||||
else
|
||||
error_handler.report("large_monster.update_parts", string.format("Failed to access Data: enemy_parts_info No. %d -> part_break_vital", i));
|
||||
end
|
||||
end
|
||||
|
||||
if cached_config.dynamic.body_parts.part_loss.visibility
|
||||
or cached_config.static.body_parts.part_loss.visibility
|
||||
or cached_config.highlighted.body_parts.part_loss.visibility then
|
||||
|
||||
local part_loss_vital = get_vital_method:call(physical_param, 3, i);
|
||||
if part_loss_vital ~= nil then
|
||||
local part_loss_current = get_current_method:call(part_loss_vital) or -1;
|
||||
local part_loss_max = get_max_method:call(part_loss_vital) or -1;
|
||||
local is_severed = false;
|
||||
|
||||
if enemy_parts_info ~= nil then
|
||||
local _is_severed = get_parts_loss_state_method:call(enemy_parts_info);
|
||||
if _is_severed ~= nil then
|
||||
is_severed = _is_severed;
|
||||
end
|
||||
local part_loss_current = get_current_method:call(part_loss_vital);
|
||||
if part_loss_current == nil then
|
||||
error_handler.report("large_monster.update_parts", string.format("Failed to access Data: enemy_parts_info No. %d -> part_loss_current", i));
|
||||
end
|
||||
|
||||
local part_loss_max = get_max_method:call(part_loss_vital);
|
||||
if part_loss_max == nil then
|
||||
error_handler.report("large_monster.update_parts", string.format("Failed to access Data: enemy_parts_info No. %d -> part_loss_max", i));
|
||||
end
|
||||
|
||||
local is_severed = get_parts_loss_state_method:call(enemy_parts_info);
|
||||
if is_severed == nil then
|
||||
error_handler.report("large_monster.update_parts", string.format("Failed to access Data: enemy_parts_info No. %d -> is_severed", i));
|
||||
end
|
||||
|
||||
if part_loss_current ~= nil and part_loss_max ~= nil and is_severed ~= nil then
|
||||
body_part.update_loss(part, part_loss_current, part_loss_max, is_severed);
|
||||
end
|
||||
else
|
||||
error_handler.report("large_monster.update_parts", string.format("Failed to access Data: enemy_parts_info No. %d -> part_loss_vital", i));
|
||||
end
|
||||
end
|
||||
|
||||
::continue::
|
||||
@@ -878,12 +1078,13 @@ function this.update_anomaly_parts(enemy, monster, mystery_param)
|
||||
|
||||
local core_parts_array = core_parts_array_field:get_data(mystery_param);
|
||||
if core_parts_array == nil then
|
||||
customization_menu.status = "No core parts array";
|
||||
error_handler.report("large_monster.update_anomaly_parts", "Failed to access Data: core_parts_array");
|
||||
return;
|
||||
end
|
||||
|
||||
local core_parts_array_length = length_method:call(core_parts_array);
|
||||
local core_parts_array_length = get_length_method:call(core_parts_array);
|
||||
if core_parts_array_length == nil then
|
||||
error_handler.report("large_monster.update_anomaly_parts", "Failed to access Data: core_parts_array_length");
|
||||
return;
|
||||
end
|
||||
|
||||
@@ -892,7 +1093,8 @@ function this.update_anomaly_parts(enemy, monster, mystery_param)
|
||||
|
||||
local core_part = get_value_method:call(core_parts_array, i);
|
||||
if core_part == nil then
|
||||
goto continue
|
||||
error_handler.report("large_monster.update_anomaly_parts", "Failed to access Data: core_part No. " .. tostring(i));
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local part = monster.parts[part_id];
|
||||
@@ -907,18 +1109,36 @@ function this.update_anomaly_parts(enemy, monster, mystery_param)
|
||||
end
|
||||
|
||||
local part_vital = core_parts_get_vital_method:call(core_part);
|
||||
local part_is_active = core_parts_get_is_active_method:call(core_part);
|
||||
--local part_dying_vital_threshold = core_parts_get_dying_vital_threashold_method:call(core_part);
|
||||
|
||||
if part_is_active == nil then
|
||||
part_is_active = false;
|
||||
if part_vital == nil then
|
||||
error_handler.report("large_monster.update_anomaly_parts", "Failed to access Data: part_vital No. " .. tostring(i));
|
||||
return;
|
||||
end
|
||||
|
||||
if part_vital ~= nil then
|
||||
local part_current = get_current_method:call(part_vital) or -1;
|
||||
local part_max = get_max_method:call(part_vital) or -1;
|
||||
local part_is_enabled = is_enable_method:call(part_vital);
|
||||
local part_is_active = core_parts_get_is_active_method:call(core_part);
|
||||
if part_is_active == nil then
|
||||
error_handler.report("large_monster.update_anomaly_parts", "Failed to access Data: part_is_active No. " .. tostring(i));
|
||||
return;
|
||||
end
|
||||
|
||||
--local part_dying_vital_threshold = core_parts_get_dying_vital_threashold_method:call(core_part);
|
||||
|
||||
local part_current = get_current_method:call(part_vital);
|
||||
if part_current == nil then
|
||||
error_handler.report("large_monster.update_anomaly_parts", "Failed to access Data: part_current No. " .. tostring(i));
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local part_max = get_max_method:call(part_vital);
|
||||
if part_max == nil then
|
||||
error_handler.report("large_monster.update_anomaly_parts", "Failed to access Data: part_max No. " .. tostring(i));
|
||||
goto continue;
|
||||
end
|
||||
|
||||
local part_is_enabled = is_enable_method:call(part_vital);
|
||||
if part_is_enabled == nil then
|
||||
error_handler.report("large_monster.update_anomaly_parts", "Failed to access Data: part_is_enabled No. " .. tostring(i));
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if not part_is_enabled then
|
||||
goto continue;
|
||||
@@ -926,23 +1146,41 @@ function this.update_anomaly_parts(enemy, monster, mystery_param)
|
||||
|
||||
body_part.update_anomaly(part, core_part, part_current, part_max, part_is_active);
|
||||
|
||||
end
|
||||
|
||||
::continue::
|
||||
end
|
||||
end
|
||||
|
||||
function this.draw(monster, type, cached_config, position_on_screen, opacity_scale)
|
||||
local monster_UI;
|
||||
|
||||
if type == "dynamic" then
|
||||
monster_UI = monster.dynamic_UI;
|
||||
elseif type == "static" then
|
||||
monster_UI = monster.static_UI;
|
||||
else
|
||||
monster_UI = monster.highlighted_UI;
|
||||
function this.update_highlighted_id()
|
||||
if quest_status.flow_state <= quest_status.flow_states.IN_LOBBY
|
||||
or quest_status.flow_state == quest_status.flow_states.LOADING_QUEST
|
||||
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
|
||||
|
||||
if singletons.gui_manager == nil then
|
||||
error_handler.report("large_monster.update_highlighted_id", "Failed to access Data: gui_manager");
|
||||
return;
|
||||
end
|
||||
|
||||
local gui_hud_target_camera = get_tg_camera_method:call(singletons.gui_manager);
|
||||
if gui_hud_target_camera == nil then
|
||||
error_handler.report("large_monster.update_highlighted_id", "Failed to access Data: gui_hud_target_camera");
|
||||
return;
|
||||
end
|
||||
|
||||
local highlighted_id = get_targeting_enemy_index_field:get_data(gui_hud_target_camera);
|
||||
if highlighted_id == nil then
|
||||
error_handler.report("large_monster_UI.update_highlighted_id", "Failed to access Data: highlighted_id");
|
||||
return;
|
||||
end
|
||||
|
||||
this.highlighted_id = highlighted_id;
|
||||
end
|
||||
|
||||
function this.draw(monster, type, cached_config, position_on_screen, opacity_scale)
|
||||
local monster_UI = monster[type];
|
||||
|
||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||
|
||||
local monster_name_text = "";
|
||||
@@ -951,20 +1189,29 @@ function this.draw(monster, type, cached_config, position_on_screen, opacity_sca
|
||||
end
|
||||
|
||||
if cached_config.monster_name_label.include.monster_id then
|
||||
monster_name_text = monster_name_text .. tostring(monster.id) .. " ";
|
||||
monster_name_text = string.format("%s%s ", monster_name_text, tostring(monster.id));
|
||||
end
|
||||
|
||||
if cached_config.monster_name_label.include.crown and monster.crown ~= "" then
|
||||
monster_name_text = monster_name_text .. string.format("%s ", monster.crown);
|
||||
monster_name_text = string.format("%s%s ", monster_name_text, monster.crown);
|
||||
end
|
||||
|
||||
if cached_config.monster_name_label.include.size then
|
||||
monster_name_text = monster_name_text .. string.format("#%.0f ", 100 * monster.size);
|
||||
if cached_config.monster_name_label.include.size and monster.size > 0 then
|
||||
monster_name_text = string.format("%s#%.0f ", monster_name_text, 100 * monster.size);
|
||||
end
|
||||
|
||||
if cached_config.monster_name_label.include.scrown_thresholds then
|
||||
monster_name_text = monster_name_text .. string.format("<=%.0f >=%.0f >=%.0f", 100 * monster.small_border,
|
||||
100 * monster.big_border, 100 * monster.king_border);
|
||||
if cached_config.monster_name_label.include.crown_thresholds then
|
||||
if monster.small_border ~= -1 then
|
||||
monster_name_text = string.format("%s<=%.0f ", monster_name_text, 100 * monster.small_border);
|
||||
end
|
||||
|
||||
if monster.big_border ~= -1 then
|
||||
monster_name_text = string.format("%s>=%.0f ", monster_name_text, 100 * monster.big_border);
|
||||
end
|
||||
|
||||
if monster.king_border ~= -1 then
|
||||
monster_name_text = string.format("%s>=%.0f ", monster_name_text, 100 * monster.king_border);
|
||||
end
|
||||
end
|
||||
|
||||
if monster.is_capturable and monster.health < monster.capture_health then
|
||||
@@ -1033,13 +1280,15 @@ function this.init_list()
|
||||
this.list = {};
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
function this.init_dependencies()
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
body_part = require("MHR_Overlay.Monsters.body_part");
|
||||
quest_status = require("MHR_Overlay.Game_Handler.quest_status");
|
||||
|
||||
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");
|
||||
@@ -1054,6 +1303,15 @@ function this.init_module()
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
time = require("MHR_Overlay.Game_Handler.time");
|
||||
ailment_buildup = require("MHR_Overlay.Monsters.ailment_buildup");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
sdk.hook(receive_quest_hunter_info_method, function(args)
|
||||
this.request_health_update();
|
||||
end, function(retval)
|
||||
return retval;
|
||||
end);
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -6,6 +6,7 @@ local config;
|
||||
local ailments;
|
||||
local players;
|
||||
local quest_status;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -153,7 +154,8 @@ function this.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 players.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);
|
||||
@@ -194,7 +196,8 @@ function this.update_small_monster(enemy)
|
||||
|
||||
small_monster.update(enemy, monster);
|
||||
|
||||
if quest_status.is_online and players.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
|
||||
@@ -202,11 +205,13 @@ end
|
||||
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
|
||||
|
||||
@@ -229,6 +234,7 @@ function this.update_stamina(stamina_param, stamina_sub)
|
||||
|
||||
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
|
||||
|
||||
@@ -255,14 +261,17 @@ function this.update_rage_timer(anger_param, enemy)
|
||||
large_monster.update_rage_timer(enemy, monster, anger_param);
|
||||
end
|
||||
|
||||
function this.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");
|
||||
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(this.update_monster, sdk.to_managed_object(args[2]));
|
||||
end, function(retval)
|
||||
|
||||
@@ -12,6 +12,7 @@ local ailments;
|
||||
local ailment_UI_entity;
|
||||
local ailment_buildup;
|
||||
local ailment_buildup_UI_entity;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -52,7 +53,7 @@ function this.new(enemy)
|
||||
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;
|
||||
@@ -70,7 +71,6 @@ function this.new(enemy)
|
||||
this.init_UI(monster);
|
||||
|
||||
this.update_position(enemy, monster);
|
||||
this.update_health(enemy, monster);
|
||||
this.update(enemy, monster);
|
||||
|
||||
if this.list[enemy] == nil then
|
||||
@@ -98,16 +98,18 @@ local get_enemy_name_message_method = message_manager_type_def:get_method("getEn
|
||||
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;
|
||||
end
|
||||
|
||||
function this.init_UI(monster)
|
||||
@@ -161,7 +163,7 @@ 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");
|
||||
local get_pos_method = enemy_character_base_type_def:get_method("get_Pos");
|
||||
|
||||
function this.update_position(enemy, monster)
|
||||
local cached_config = config.current_config.small_monster_UI;
|
||||
@@ -174,10 +176,13 @@ function this.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;
|
||||
end
|
||||
|
||||
function this.update(enemy, monster)
|
||||
@@ -188,6 +193,8 @@ function this.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);
|
||||
@@ -200,24 +207,38 @@ function this.update_health(enemy, monster)
|
||||
|
||||
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 this.draw(monster, cached_config, position_on_screen, opacity_scale)
|
||||
@@ -249,7 +270,7 @@ function this.init_list()
|
||||
this.list = {};
|
||||
end
|
||||
|
||||
function this.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");
|
||||
@@ -262,6 +283,10 @@ function this.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
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -14,6 +14,7 @@ local keyboard;
|
||||
local customization_menu;
|
||||
local label_customization;
|
||||
local bar_customization;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -255,7 +256,7 @@ function this.draw(cached_config)
|
||||
return config_changed;
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
function this.init_dependencies()
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
@@ -271,6 +272,10 @@ function this.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
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -14,6 +14,7 @@ local keyboard;
|
||||
local customization_menu;
|
||||
local label_customization;
|
||||
local bar_customization;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -386,7 +387,7 @@ function this.draw(cached_config)
|
||||
return config_changed;
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
function this.init_dependencies()
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
@@ -401,6 +402,10 @@ function this.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
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -13,6 +13,7 @@ local time_UI;
|
||||
local keyboard;
|
||||
local customization_menu;
|
||||
local line_customization;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -149,15 +150,13 @@ function this.draw(bar_name, bar)
|
||||
bar.outline.offset, 0.1, -screen.height, screen.height, "%.1f");
|
||||
bar_changed = bar_changed or changed;
|
||||
|
||||
|
||||
changed, index = imgui.combo(cached_language.style,
|
||||
utils.table.find_index(this.outline_styles,
|
||||
bar.outline.style),
|
||||
this.displayed_outline_styles);
|
||||
utils.table.find_index(outline_styles, bar.outline.style),
|
||||
displayed_outline_styles);
|
||||
bar_changed = bar_changed or changed;
|
||||
|
||||
if changed then
|
||||
bar.outline.style = this.outline_styles[index];
|
||||
bar.outline.style = outline_styles[index];
|
||||
end
|
||||
|
||||
imgui.tree_pop();
|
||||
@@ -243,7 +242,7 @@ function this.draw(bar_name, bar)
|
||||
return bar_changed;
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
function this.init_dependencies()
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
@@ -257,6 +256,10 @@ function this.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
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -14,6 +14,7 @@ local keyboard;
|
||||
local customization_menu;
|
||||
local label_customization;
|
||||
local bar_customization;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -511,7 +512,7 @@ function this.draw(cached_config)
|
||||
return config_changed;
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
function this.init_dependencies()
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
@@ -526,6 +527,10 @@ function this.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
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -13,6 +13,7 @@ local keyboard;
|
||||
local customization_menu;
|
||||
local label_customization;
|
||||
local bar_customization;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -88,7 +89,7 @@ function this.draw(cached_config)
|
||||
return config_changed;
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
function this.init_dependencies()
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
@@ -102,6 +103,10 @@ function this.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
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -11,6 +11,7 @@ local part_names;
|
||||
local time_UI;
|
||||
local keyboard;
|
||||
local customization_menu;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -61,6 +62,17 @@ function this.draw(label_name, label)
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
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;
|
||||
@@ -79,8 +91,7 @@ function this.draw(label_name, label)
|
||||
end
|
||||
|
||||
if imgui.tree_node(cached_language.shadow) then
|
||||
changed, label.shadow.visibility = imgui.checkbox(cached_language
|
||||
.visible, label.shadow.visibility);
|
||||
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
|
||||
@@ -112,7 +123,7 @@ function this.draw(label_name, label)
|
||||
return label_changed;
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
function this.init_dependencies()
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
@@ -124,6 +135,10 @@ function this.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
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -11,6 +11,7 @@ local part_names;
|
||||
local time_UI;
|
||||
local keyboard;
|
||||
local customization_menu;
|
||||
local error_handler;
|
||||
|
||||
local label_customization;
|
||||
local bar_customization;
|
||||
@@ -81,7 +82,7 @@ function this.draw(cached_config)
|
||||
return config_changed;
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
function this.init_dependencies()
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
@@ -93,9 +94,10 @@ function this.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");
|
||||
@@ -104,4 +106,7 @@ function this.init_module()
|
||||
ailment_buildups_customization = require("MHR_Overlay.UI.Customizations.ailment_buildups_customization");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -11,6 +11,7 @@ local part_names;
|
||||
local time_UI;
|
||||
local keyboard;
|
||||
local customization_menu;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -95,7 +96,7 @@ function this.draw(line_name, line)
|
||||
return line_changed;
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
function this.init_dependencies()
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
@@ -107,6 +108,10 @@ function this.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
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -13,6 +13,7 @@ local keyboard;
|
||||
local customization_menu;
|
||||
local label_customization;
|
||||
local bar_customization;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -92,16 +93,20 @@ function this.draw(cached_config)
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
--[[changed, cached_config.buff_UI = imgui.checkbox(
|
||||
changed, cached_config.buff_UI = imgui.checkbox(
|
||||
language.current_language.customization_menu.buff_UI,
|
||||
cached_config.buff_UI);
|
||||
|
||||
config_changed = config_changed or changed;]]
|
||||
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_module()
|
||||
function this.init_dependencies()
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
@@ -113,6 +118,10 @@ function this.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
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -13,6 +13,7 @@ local keyboard;
|
||||
local customization_menu;
|
||||
local label_customization;
|
||||
local bar_customization;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -91,7 +92,7 @@ function this.draw(cached_config)
|
||||
return config_changed;
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
function this.init_dependencies()
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
@@ -105,6 +106,10 @@ function this.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
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -13,6 +13,7 @@ local keyboard;
|
||||
local customization_menu;
|
||||
local label_customization;
|
||||
local bar_customization;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -91,7 +92,7 @@ function this.draw(cached_config)
|
||||
return config_changed;
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
function this.init_dependencies()
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
@@ -105,6 +106,10 @@ function this.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
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -3,7 +3,19 @@ local this = {};
|
||||
local buff_UI_entity;
|
||||
local config;
|
||||
local buffs;
|
||||
local consumables;
|
||||
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;
|
||||
@@ -37,67 +49,166 @@ local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
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 displayed_buffs = {};
|
||||
|
||||
for _, buff in pairs(buffs.list) do
|
||||
function this.update()
|
||||
local cached_config = config.current_config.buff_UI;
|
||||
|
||||
if not buff.is_active then
|
||||
goto continue
|
||||
local _displayed_buffs = {};
|
||||
|
||||
for key, consumable in pairs(consumables.list) do
|
||||
|
||||
if not consumable.is_active then
|
||||
goto continue;
|
||||
end
|
||||
|
||||
table.insert(displayed_buffs, buff);
|
||||
table.insert(_displayed_buffs, consumable);
|
||||
|
||||
::continue::
|
||||
end
|
||||
|
||||
-- sort
|
||||
if cached_config.sorting.type == "Name" then
|
||||
if cached_config.sorting.reversed_order then
|
||||
table.sort(displayed_buffs, function(left, right)
|
||||
for _, melody_effect in pairs(melody_effects.list) do
|
||||
|
||||
if not melody_effect.is_active then
|
||||
goto continue2;
|
||||
end
|
||||
|
||||
table.insert(_displayed_buffs, melody_effect);
|
||||
|
||||
::continue2::
|
||||
end
|
||||
|
||||
for key, endemic_life_buff in pairs(endemic_life_buff.list) do
|
||||
if not endemic_life_buff.is_active then
|
||||
goto continue3;
|
||||
end
|
||||
|
||||
table.insert(_displayed_buffs, endemic_life_buff);
|
||||
|
||||
::continue3::
|
||||
end
|
||||
|
||||
for key, skill in pairs(skills.list) do
|
||||
if not skill.is_active then
|
||||
goto continue4;
|
||||
end
|
||||
|
||||
table.insert(_displayed_buffs, skill);
|
||||
|
||||
::continue4::
|
||||
end
|
||||
|
||||
for key, dango_skill in pairs(dango_skills.list) do
|
||||
if not dango_skill.is_active then
|
||||
goto continue5;
|
||||
end
|
||||
|
||||
table.insert(_displayed_buffs, dango_skill);
|
||||
|
||||
::continue5::
|
||||
end
|
||||
|
||||
for key, abnormal_status in pairs(abnormal_statuses.list) do
|
||||
if not abnormal_status.is_active then
|
||||
goto continue6;
|
||||
end
|
||||
|
||||
table.insert(_displayed_buffs, abnormal_status);
|
||||
|
||||
::continue6::
|
||||
end
|
||||
|
||||
for key, otomo_move in pairs(otomo_moves.list) do
|
||||
if not otomo_move.is_active then
|
||||
goto continue7;
|
||||
end
|
||||
|
||||
table.insert(_displayed_buffs, otomo_move);
|
||||
|
||||
::continue7::
|
||||
end
|
||||
|
||||
for key, weapon_skill in pairs(weapon_skills.list) do
|
||||
if not weapon_skill.is_active then
|
||||
goto continue8;
|
||||
end
|
||||
|
||||
table.insert(_displayed_buffs, weapon_skill);
|
||||
|
||||
::continue8::
|
||||
end
|
||||
|
||||
for key, rampage_skill in pairs(rampage_skills.list) do
|
||||
if not rampage_skill.is_active then
|
||||
goto continue9;
|
||||
end
|
||||
|
||||
table.insert(_displayed_buffs, rampage_skill);
|
||||
|
||||
::continue9::
|
||||
end
|
||||
|
||||
for key, misc_buffs in pairs(misc_buffs.list) do
|
||||
if not misc_buffs.is_active then
|
||||
goto continue10;
|
||||
end
|
||||
|
||||
table.insert(_displayed_buffs, misc_buffs);
|
||||
|
||||
::continue10::
|
||||
end
|
||||
|
||||
|
||||
displayed_buffs = this.sort_buffs(_displayed_buffs, cached_config);
|
||||
end
|
||||
|
||||
function this.sort_buffs(_displayed_buffs, cached_config)
|
||||
cached_config = cached_config.sorting;
|
||||
|
||||
if cached_config.type == "Name" then
|
||||
if cached_config.reversed_order then
|
||||
table.sort(_displayed_buffs, function(left, right)
|
||||
return left.name > right.name;
|
||||
end);
|
||||
else
|
||||
table.sort(displayed_buffs, function(left, right)
|
||||
table.sort(_displayed_buffs, function(left, right)
|
||||
return left.name < right.name;
|
||||
end);
|
||||
end
|
||||
elseif cached_config.sorting.type == "Timer" then
|
||||
if cached_config.sorting.reversed_order then
|
||||
table.sort(displayed_buffs, function(left, right)
|
||||
elseif cached_config.type == "Timer" then
|
||||
if cached_config.reversed_order then
|
||||
table.sort(_displayed_buffs, function(left, right)
|
||||
return left.timer > right.timer;
|
||||
end);
|
||||
else
|
||||
table.sort(displayed_buffs, function(left, right)
|
||||
table.sort(_displayed_buffs, function(left, right)
|
||||
return left.timer < right.timer;
|
||||
end);
|
||||
end
|
||||
else
|
||||
if cached_config.sorting.reversed_order then
|
||||
table.sort(displayed_buffs, function(left, right)
|
||||
if cached_config.reversed_order then
|
||||
table.sort(_displayed_buffs, function(left, right)
|
||||
return left.duration > right.duration;
|
||||
end);
|
||||
else
|
||||
table.sort(displayed_buffs, function(left, right)
|
||||
table.sort(_displayed_buffs, function(left, right)
|
||||
return left.duration < right.duration;
|
||||
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
|
||||
|
||||
if not buff.is_active then
|
||||
goto continue2
|
||||
end
|
||||
|
||||
buffs.draw(buff, buff.buff_UI, position_on_screen, 1);
|
||||
|
||||
if cached_config.settings.orientation == "Horizontal" then
|
||||
@@ -106,13 +217,15 @@ function this.draw()
|
||||
position_on_screen.y = position_on_screen.y + cached_config.spacing.y * global_scale_modifier;
|
||||
end
|
||||
|
||||
::continue2::
|
||||
::continue::
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
function this.init_dependencies()
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
|
||||
consumables = require("MHR_Overlay.Buffs.consumables");
|
||||
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");
|
||||
@@ -122,6 +235,19 @@ function this.init_module()
|
||||
--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;
|
||||
@@ -10,6 +10,7 @@ local screen;
|
||||
local drawing;
|
||||
local language;
|
||||
local utils;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -43,19 +44,163 @@ local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
local top_damage = 0;
|
||||
local top_dps = 0;
|
||||
|
||||
this.displayed_players = {};
|
||||
this.last_displayed_players = {};
|
||||
this.freeze_displayed_players = false;
|
||||
|
||||
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");
|
||||
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;
|
||||
|
||||
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");
|
||||
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 hunter_info_type_def = sdk.find_type_definition("snow.LobbyManager.HunterInfo");
|
||||
local member_index_field = hunter_info_type_def:get_field("_memberIndex");
|
||||
if players.total.display.total_damage == 0 and cached_config.settings.hide_module_if_total_damage_is_zero then
|
||||
return;
|
||||
end
|
||||
|
||||
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 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
|
||||
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
|
||||
|
||||
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;
|
||||
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;
|
||||
@@ -65,41 +210,15 @@ function this.draw()
|
||||
return;
|
||||
end
|
||||
|
||||
local quest_players = {};
|
||||
|
||||
if this.freeze_displayed_players and not utils.table.is_empty(this.last_displayed_players) then
|
||||
quest_players = this.last_displayed_players;
|
||||
else
|
||||
quest_players = players.display_list;
|
||||
end
|
||||
|
||||
this.last_displayed_players = quest_players;
|
||||
|
||||
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;
|
||||
end
|
||||
|
||||
if player.dps > top_dps then
|
||||
top_dps = player.dps;
|
||||
end
|
||||
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" then
|
||||
if cached_config.settings.hide_total_damage then
|
||||
return;
|
||||
end
|
||||
|
||||
if cached_config.settings.hide_total_if_total_damage_is_zero and players.total.display.total_damage == 0 then
|
||||
return;
|
||||
end
|
||||
|
||||
players.draw(players.total, position_on_screen, 1, top_damage, top_dps);
|
||||
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;
|
||||
@@ -107,43 +226,14 @@ function this.draw()
|
||||
position_on_screen.y = position_on_screen.y + cached_config.spacing.y * global_scale_modifier;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- draw
|
||||
if not cached_config.settings.total_damage_offset_is_relative then
|
||||
position_on_screen = screen.calculate_absolute_coordinates(cached_config.position);
|
||||
end
|
||||
|
||||
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 player.type == players.types.myself then
|
||||
if cached_config.settings.hide_myself then
|
||||
goto continue
|
||||
end
|
||||
elseif player.type == players.types.servant then
|
||||
if cached_config.settings.hide_servants then
|
||||
goto continue
|
||||
end
|
||||
elseif player.type == players.types.other_player then
|
||||
if cached_config.settings.hide_other_players then
|
||||
goto continue
|
||||
end
|
||||
elseif player.type == players.types.my_otomo then
|
||||
if not cached_config.settings.show_my_otomos_separately then
|
||||
goto continue
|
||||
end
|
||||
elseif player.type == players.types.other_player_otomo then
|
||||
if not cached_config.settings.show_other_player_otomos_separately then
|
||||
goto continue
|
||||
end
|
||||
elseif player.type == players.types.servant_otomo then
|
||||
if not cached_config.settings.show_servant_otomos_separately then
|
||||
goto continue
|
||||
end
|
||||
end
|
||||
for _, player in ipairs(this.displayed_players) do
|
||||
|
||||
players.draw(player, position_on_screen, 1, top_damage, top_dps);
|
||||
|
||||
@@ -154,18 +244,13 @@ function this.draw()
|
||||
end
|
||||
|
||||
::continue::
|
||||
|
||||
end
|
||||
|
||||
-- draw total damage
|
||||
if cached_config.settings.total_damage_location == "Last" then
|
||||
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 players.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);
|
||||
@@ -174,8 +259,9 @@ function this.draw()
|
||||
players.draw(players.total, position_on_screen, 1);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function this.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");
|
||||
@@ -186,6 +272,10 @@ function this.init_module()
|
||||
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
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -11,6 +11,8 @@ local health_UI_entity;
|
||||
local stamina_UI_entity;
|
||||
local rage_UI_entity;
|
||||
local env_creature;
|
||||
local error_handler;
|
||||
local utils;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -44,48 +46,58 @@ local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
local enemy_manager_type_def = sdk.find_type_definition("snow.enemy.EnemyManager");
|
||||
local displayed_creatures = {};
|
||||
|
||||
function this.draw()
|
||||
if singletons.enemy_manager == nil then
|
||||
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 REcreature, creature in pairs(env_creature.list) do
|
||||
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
|
||||
);
|
||||
|
||||
if cached_config.settings.max_distance == 0 then
|
||||
break
|
||||
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);
|
||||
local 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 = (players.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
|
||||
|
||||
@@ -94,7 +106,7 @@ function this.draw()
|
||||
end
|
||||
end
|
||||
|
||||
function this.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");
|
||||
@@ -106,6 +118,11 @@ function this.init_module()
|
||||
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
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -10,6 +10,8 @@ local drawing;
|
||||
local health_UI_entity;
|
||||
local stamina_UI_entity;
|
||||
local rage_UI_entity;
|
||||
local error_handler;
|
||||
local utils;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -53,246 +55,319 @@ 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 this.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 = (players.myself_position - monster.position):length();
|
||||
end
|
||||
|
||||
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
|
||||
local success = pcall(this.draw_dynamic, displayed_monsters, highlighted_monster, cached_config);
|
||||
this.update_dynamic_monsters(large_monster_list, cached_config);
|
||||
end
|
||||
|
||||
if static_enabled then
|
||||
this.update_static_monsters(large_monster_list, cached_config);
|
||||
end
|
||||
end
|
||||
|
||||
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
|
||||
customization_menu.status = string.format("[%s] Dynamic Large Monster drawing function threw an exception");
|
||||
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, highlighted_monster, cached_config);
|
||||
local success = pcall(this.draw_highlighted, cached_config);
|
||||
if not success then
|
||||
customization_menu.status = string.format("[%s] Highlighted Large Monster drawing function threw an exception");
|
||||
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, displayed_monsters, highlighted_monster, cached_config);
|
||||
local success = pcall(this.draw_static, cached_config);
|
||||
if not success then
|
||||
customization_menu.status = string.format("[%s] Static Large Monster drawing function threw an exception");
|
||||
error_handler.report("large_monster_UI.draw", "Static Large Monster drawing function threw an exception");
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function this.draw_dynamic(displayed_monsters, highlighted_monster, cached_config)
|
||||
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
|
||||
|
||||
if monster.is_stealth then
|
||||
goto continue
|
||||
end
|
||||
|
||||
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
|
||||
|
||||
local position_on_screen = {};
|
||||
|
||||
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);
|
||||
|
||||
position_on_screen = draw.world_to_screen(monster.position + world_offset);
|
||||
local 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 this.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
|
||||
@@ -304,30 +379,26 @@ function this.draw_static(displayed_monsters, highlighted_monster, cached_config
|
||||
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 this.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 then
|
||||
return;
|
||||
large_monster.draw(highlighted_monster, "highlighted_UI", cached_config, position_on_screen, 1);
|
||||
end
|
||||
|
||||
large_monster.draw(monster, "highlighted", cached_config, position_on_screen, 1);
|
||||
end
|
||||
|
||||
function this.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");
|
||||
@@ -338,6 +409,11 @@ function this.init_module()
|
||||
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
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -9,6 +9,8 @@ local players;
|
||||
local drawing;
|
||||
local health_UI_entity;
|
||||
local stamina_UI_entity;
|
||||
local error_handler;
|
||||
local utils;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -46,105 +48,101 @@ 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 this.draw()
|
||||
if singletons.enemy_manager == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
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";
|
||||
function this.update()
|
||||
local cached_config = config.current_config.small_monster_UI;
|
||||
|
||||
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 _displayed_monsters = {};
|
||||
|
||||
local monster = small_monster.list[enemy];
|
||||
if monster == nil then
|
||||
customization_menu.status = "No small monster entry";
|
||||
goto continue
|
||||
end
|
||||
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
|
||||
|
||||
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 = (players.myself_position - monster.position):length();
|
||||
end
|
||||
displayed_monsters = this.sort_monsters(_displayed_monsters, cached_config);
|
||||
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 is_dynamic_positioning_enabled = cached_config.dynamic_positioning.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,
|
||||
if is_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);
|
||||
cached_config.dynamic_positioning.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.dynamic_positioning.viewport_offset.x;
|
||||
@@ -153,31 +151,16 @@ function this.draw()
|
||||
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
|
||||
if is_dynamic_positioning_enabled and cached_config.dynamic_positioning.opacity_falloff then
|
||||
monster.distance = (players.myself_position - monster.position):length();
|
||||
opacity_scale = 1 - (monster.distance / cached_config.dynamic_positioning.max_distance);
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
small_monster.draw(monster, cached_config, position_on_screen, opacity_scale);
|
||||
|
||||
@@ -186,7 +169,7 @@ function this.draw()
|
||||
end
|
||||
end
|
||||
|
||||
function this.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");
|
||||
@@ -196,6 +179,11 @@ function this.init_module()
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
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
|
||||
|
||||
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 consumables;
|
||||
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");
|
||||
consumables = require("MHR_Overlay.Buffs.consumables");
|
||||
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;
|
||||
@@ -5,6 +5,7 @@ local screen;
|
||||
local config;
|
||||
local drawing;
|
||||
local utils;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -62,13 +63,16 @@ function this.init_UI()
|
||||
this.label.offset.y = this.label.offset.y * global_scale_modifier;
|
||||
end
|
||||
|
||||
function this.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");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
this.init_UI()
|
||||
end
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ local config;
|
||||
local utils;
|
||||
local drawing;
|
||||
local language;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -118,11 +119,15 @@ function this.draw(ailment, ailment_UI, cached_config, position_on_screen, opaci
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
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;
|
||||
|
||||
@@ -5,6 +5,7 @@ local drawing;
|
||||
local config;
|
||||
local players;
|
||||
local language;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -117,12 +118,16 @@ function this.draw(player, player_buildup, ailment_buildup_UI, cached_config, po
|
||||
drawing.draw_label(ailment_buildup_UI.buildup_percentage_label, position_on_screen, opacity_scale, 100 * player_buildup.buildup_share);
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
function this.init_dependencies()
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -3,6 +3,7 @@ local this = {};
|
||||
local config;
|
||||
local utils;
|
||||
local drawing;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -302,10 +303,14 @@ function this.draw(part, part_UI, cached_config, position_on_screen, opacity_sca
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
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
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -4,6 +4,7 @@ local config;
|
||||
local utils;
|
||||
local drawing;
|
||||
local language;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -72,7 +73,12 @@ function this.draw(buff, buff_UI, position_on_screen, opacity_scale)
|
||||
drawing.draw_bar(buff_UI.bar, position_on_screen, opacity_scale, 1);
|
||||
end
|
||||
|
||||
drawing.draw_label(buff_UI.name_label, position_on_screen, opacity_scale, buff.name);
|
||||
local buff_name = buff.name;
|
||||
if cached_config.name_label.include.skill_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);
|
||||
@@ -81,11 +87,15 @@ function this.draw(buff, buff_UI, position_on_screen, opacity_scale)
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
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;
|
||||
@@ -7,6 +7,7 @@ local players;
|
||||
local language;
|
||||
local quest_status;
|
||||
local non_players;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -114,6 +115,9 @@ end
|
||||
function this.draw(player, position_on_screen, opacity_scale, top_damage, top_dps)
|
||||
local cached_config = config.current_config.damage_meter_UI;
|
||||
|
||||
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;
|
||||
@@ -197,6 +201,7 @@ function this.draw(player, position_on_screen, opacity_scale, top_damage, top_dp
|
||||
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;
|
||||
@@ -207,6 +212,7 @@ function this.draw(player, position_on_screen, opacity_scale, top_damage, top_dp
|
||||
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;
|
||||
@@ -227,13 +233,13 @@ function this.draw(player, position_on_screen, opacity_scale, top_damage, top_dp
|
||||
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(player.damage_UI.cart_count_label, position_on_screen, opacity_scale, player.cart_count);
|
||||
drawing.draw_label(cart_count_label, position_on_screen, opacity_scale, player.cart_count);
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
function this.init_dependencies()
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
@@ -241,6 +247,10 @@ function this.init_module()
|
||||
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
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -4,6 +4,7 @@ local utils;
|
||||
local drawing;
|
||||
local language;
|
||||
local config;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -91,11 +92,15 @@ function this.draw(monster, health_UI, position_on_screen, opacity_scale)
|
||||
drawing.draw_label(health_UI.percentage_label, position_on_screen, opacity_scale, 100 * monster.health_percentage);
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
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
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -4,6 +4,7 @@ local utils;
|
||||
local drawing;
|
||||
local language;
|
||||
local config;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -105,11 +106,15 @@ function this.draw(monster, rage_UI, position_on_screen, opacity_scale)
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
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
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -4,6 +4,7 @@ local utils;
|
||||
local drawing;
|
||||
local language;
|
||||
local config;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -102,11 +103,15 @@ function this.draw(monster, stamina_UI, position_on_screen, opacity_scale)
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
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
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -14,6 +14,9 @@ local keyboard;
|
||||
local non_players;
|
||||
local quest_status;
|
||||
local buffs;
|
||||
local error_handler;
|
||||
local time;
|
||||
local stats_UI;
|
||||
|
||||
local label_customization;
|
||||
local bar_customization;
|
||||
@@ -61,10 +64,10 @@ local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
this.is_opened = false;
|
||||
|
||||
this.font = nil;
|
||||
this.full_font_range = {0x1, 0xFFFF, 0};
|
||||
this.is_opened = false;
|
||||
this.status = "OK";
|
||||
|
||||
this.window_position = Vector2f.new(480, 200);
|
||||
this.window_pivot = Vector2f.new(0, 0);
|
||||
@@ -325,21 +328,33 @@ function this.init()
|
||||
end
|
||||
|
||||
function this.draw()
|
||||
imgui.set_next_window_pos(this.window_position, 1 << 3, this.window_pivot);
|
||||
imgui.set_next_window_size(this.window_size, 1 << 3);
|
||||
if not this.is_opened then
|
||||
return;
|
||||
end
|
||||
|
||||
local window_position = Vector2f.new(config.current_config.customization_menu.position.x, config.current_config.customization_menu.position.y);
|
||||
local window_pivot = Vector2f.new(config.current_config.customization_menu.pivot.x, config.current_config.customization_menu.pivot.y);
|
||||
local window_size = Vector2f.new(config.current_config.customization_menu.size.width, config.current_config.customization_menu.size.height);
|
||||
|
||||
imgui.set_next_window_pos(window_position, 1 << 3, window_pivot);
|
||||
imgui.set_next_window_size(window_size, 1 << 3);
|
||||
|
||||
imgui.push_font(this.font);
|
||||
|
||||
this.is_opened = imgui.begin_window(
|
||||
language.current_language.customization_menu.mod_name .. " v" .. config.current_config.version, this.is_opened,
|
||||
string.format("%s v%s", language.current_language.customization_menu.mod_name, config.current_config.version),
|
||||
this.is_opened,
|
||||
this.window_flags);
|
||||
|
||||
|
||||
if not this.is_opened then
|
||||
imgui.pop_font();
|
||||
imgui.end_window();
|
||||
config.save_current();
|
||||
return;
|
||||
end
|
||||
|
||||
local window_changed = false;
|
||||
local config_changed = false;
|
||||
local language_changed = false;
|
||||
local modifiers_changed = false;
|
||||
@@ -353,11 +368,28 @@ function this.draw()
|
||||
local damage_meter_UI_changed = false;
|
||||
local endemic_life_UI_changed = false;
|
||||
local buff_UI_changed = false;
|
||||
local stats_UI_changed = false;
|
||||
local debug_changed = false;
|
||||
local apply_font_requested = false;
|
||||
|
||||
local status_string = tostring(this.status);
|
||||
local new_window_position = imgui.get_window_pos();
|
||||
if window_position.x ~= new_window_position.x or window_position.y ~= new_window_position.y then
|
||||
window_changed = window_changed or true;
|
||||
|
||||
imgui.text(language.current_language.customization_menu.status .. ": " .. status_string);
|
||||
config.current_config.customization_menu.position.x = new_window_position.x;
|
||||
config.current_config.customization_menu.position.y = new_window_position.y;
|
||||
end
|
||||
|
||||
local new_window_size = imgui.get_window_size();
|
||||
if window_size.x ~= new_window_size.x or window_size.y ~= new_window_size.y then
|
||||
window_changed = window_changed or true;
|
||||
|
||||
config.current_config.customization_menu.size.width = new_window_size.x;
|
||||
config.current_config.customization_menu.size.height = new_window_size.y;
|
||||
end
|
||||
|
||||
local new_window_size = imgui.get_window_size();
|
||||
window_changed = window_changed or new_window_size.x ~= window_size.x or new_window_size.y ~= window_size.y;
|
||||
|
||||
config_changed, apply_font_requested = this.draw_config();
|
||||
modules_changed = this.draw_modules();
|
||||
@@ -375,7 +407,11 @@ function this.draw()
|
||||
time_UI_changed = this.draw_time_UI();
|
||||
damage_meter_UI_changed = this.draw_damage_meter_UI();
|
||||
endemic_life_UI_changed = this.draw_endemic_life_UI()
|
||||
--buff_UI_changed = customization_menu.draw_buff_UI();
|
||||
buff_UI_changed = this.draw_buff_UI();
|
||||
stats_UI_changed = this.draw_stats_UI()
|
||||
|
||||
imgui.new_line();
|
||||
debug_changed = this.draw_debug();
|
||||
|
||||
imgui.pop_font();
|
||||
imgui.end_window();
|
||||
@@ -434,22 +470,28 @@ function this.draw()
|
||||
end
|
||||
end
|
||||
|
||||
--[[if buff_UI_changed or modifiers_changed or config_changed then
|
||||
if buff_UI_changed or modifiers_changed or config_changed then
|
||||
for _, buff in pairs(buffs.list) do
|
||||
buffs.init_UI(buff);
|
||||
end
|
||||
end]]
|
||||
end
|
||||
|
||||
if stats_UI_changed or modifiers_changed or config_changed then
|
||||
stats_UI.init_UI();
|
||||
end
|
||||
|
||||
|
||||
if this.menu_font_changed and (apply_font_requested or config_changed) then
|
||||
this.menu_font_changed = false;
|
||||
this.reload_font();
|
||||
end
|
||||
|
||||
if modules_changed or global_settings_changed or small_monster_UI_changed or large_monster_dynamic_UI_changed or
|
||||
if window_changed or modules_changed or global_settings_changed or small_monster_UI_changed or large_monster_dynamic_UI_changed or
|
||||
large_monster_static_UI_changed or large_monster_highlighted_UI_changed or time_UI_changed or damage_meter_UI_changed or
|
||||
endemic_life_UI_changed or buff_UI_changed or modifiers_changed or config_changed then
|
||||
endemic_life_UI_changed or buff_UI_changed or stats_UI_changed or modifiers_changed or config_changed or debug_changed then
|
||||
config.save_current();
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function this.draw_config()
|
||||
@@ -569,9 +611,9 @@ function this.draw_modules()
|
||||
language.current_language.customization_menu.endemic_life_UI, config.current_config.endemic_life_UI.enabled);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
--[[changed, config.current_config.buff_UI.enabled = imgui.checkbox(
|
||||
changed, config.current_config.buff_UI.enabled = imgui.checkbox(
|
||||
language.current_language.customization_menu.buff_UI, config.current_config.buff_UI.enabled);
|
||||
config_changed = config_changed or changed;]]
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
@@ -970,6 +1012,17 @@ function this.draw_global_settings(apply_font_requested, language_changed)
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.module_visibility_based_on_game_state) then
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.in_lobby) then
|
||||
|
||||
changed, cached_config.module_visibility.in_lobby.stats_UI = imgui.checkbox(
|
||||
language.current_language.customization_menu.stats_UI,
|
||||
cached_config.module_visibility.in_lobby.stats_UI);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.in_training_area) then
|
||||
|
||||
changed, cached_config.module_visibility.in_training_area.large_monster_dynamic_UI = imgui.checkbox(
|
||||
@@ -1002,11 +1055,17 @@ function this.draw_global_settings(apply_font_requested, language_changed)
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
--[[changed, cached_config.module_visibility.in_training_area.buff_UI = imgui.checkbox(
|
||||
changed, cached_config.module_visibility.in_training_area.buff_UI = imgui.checkbox(
|
||||
language.current_language.customization_menu.buff_UI,
|
||||
cached_config.module_visibility.in_training_area.buff_UI);
|
||||
|
||||
config_changed = config_changed or changed;]]
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.module_visibility.in_training_area.stats_UI = imgui.checkbox(
|
||||
language.current_language.customization_menu.stats_UI,
|
||||
cached_config.module_visibility.in_training_area.stats_UI);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
@@ -2026,6 +2085,9 @@ function this.draw_damage_meter_UI()
|
||||
changed = label_customization.draw(language.current_language.customization_menu.hunter_rank_label, cached_config.highlighted.hunter_rank_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = label_customization.draw(language.current_language.customization_menu.cart_count_label, cached_config.highlighted.cart_count_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = label_customization.draw(language.current_language.customization_menu.dps_label, cached_config.highlighted.dps_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
@@ -2042,12 +2104,7 @@ function this.draw_damage_meter_UI()
|
||||
end
|
||||
|
||||
if config_changed then
|
||||
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;
|
||||
|
||||
players.display_list = {};
|
||||
players.update_player_list(is_on_quest);
|
||||
non_players.update_servant_list();
|
||||
non_players.update_otomo_list(is_on_quest, quest_status.is_online);
|
||||
players.update_players();
|
||||
end
|
||||
|
||||
if damage_display_changed then
|
||||
@@ -2067,10 +2124,6 @@ function this.draw_damage_meter_UI()
|
||||
players.update_dps(true);
|
||||
end
|
||||
|
||||
if config_changed then
|
||||
players.sort_players();
|
||||
end
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
@@ -2142,7 +2195,7 @@ function this.draw_endemic_life_UI()
|
||||
end
|
||||
|
||||
changed = label_customization.draw(
|
||||
language.current_language.customization_menu.creature_name_label, cached_config.creature_name_label.visibility);
|
||||
language.current_language.customization_menu.creature_name_label, cached_config.creature_name_label);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
@@ -2264,7 +2317,143 @@ function this.draw_buff_UI()
|
||||
return config_changed;
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
function this.draw_stats_UI()
|
||||
local changed = false;
|
||||
local config_changed = false;
|
||||
local index = 0;
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.stats_UI) then
|
||||
local cached_config = config.current_config.stats_UI;
|
||||
|
||||
changed, cached_config.enabled = imgui.checkbox(
|
||||
language.current_language.customization_menu.enabled, cached_config.enabled);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.position) then
|
||||
changed, cached_config.position.x = imgui.drag_float(
|
||||
language.current_language.customization_menu.x, cached_config.position.x, 0.1, 0, screen.width, "%.1f");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, cached_config.position.y = imgui.drag_float(
|
||||
language.current_language.customization_menu.y, cached_config.position.y, 0.1, 0, screen.height, "%.1f");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed, index = imgui.combo(
|
||||
language.current_language.customization_menu.anchor,
|
||||
utils.table.find_index(this.anchor_types, cached_config.position.anchor),
|
||||
this.displayed_anchor_types);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
if changed then
|
||||
cached_config.position.anchor = this.anchor_types[index];
|
||||
end
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
changed = label_customization.draw(language.current_language.customization_menu.health_label, cached_config.health_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = label_customization.draw(language.current_language.customization_menu.stamina_label, cached_config.stamina_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = label_customization.draw(language.current_language.customization_menu.attack_label, cached_config.attack_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = label_customization.draw(language.current_language.customization_menu.affinity_label, cached_config.affinity_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = label_customization.draw(language.current_language.customization_menu.defense_label, cached_config.defense_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = label_customization.draw(language.current_language.customization_menu.fire_resistance_label, cached_config.fire_resistance_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = label_customization.draw(language.current_language.customization_menu.water_resistance_label, cached_config.water_resistance_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = label_customization.draw(language.current_language.customization_menu.thunder_resistance_label, cached_config.thunder_resistance_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = label_customization.draw(language.current_language.customization_menu.ice_resistance_label, cached_config.ice_resistance_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = label_customization.draw(language.current_language.customization_menu.dragon_resistance_label, cached_config.dragon_resistance_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = label_customization.draw(language.current_language.customization_menu.element_label, cached_config.element_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
changed = label_customization.draw(language.current_language.customization_menu.element_2_label, cached_config.element_2_label);
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
return config_changed;
|
||||
end
|
||||
|
||||
function this.draw_debug()
|
||||
local cached_config = config.current_config.debug;
|
||||
|
||||
local changed = false;
|
||||
local config_changed = false;
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.debug) then
|
||||
|
||||
imgui.text_colored(string.format("%s:", language.current_language.customization_menu.current_time), 0xFFAAAA66);
|
||||
imgui.same_line();
|
||||
imgui.text(string.format("%.3fs", time.total_elapsed_script_seconds));
|
||||
|
||||
if error_handler.is_empty then
|
||||
imgui.text(language.current_language.customization_menu.everything_seems_to_be_ok);
|
||||
else
|
||||
for error_key, error in pairs(error_handler.list) do
|
||||
|
||||
imgui.button(string.format("%.3fs", error.time));
|
||||
imgui.same_line();
|
||||
imgui.text_colored(error_key, 0xFFAA66AA);
|
||||
imgui.same_line();
|
||||
imgui.text(error.message);
|
||||
end
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.history) then
|
||||
|
||||
changed, cached_config.history_size = imgui.drag_int(
|
||||
language.current_language.customization_menu.history_size, cached_config.history_size, 1, 0, 1024);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
if changed then
|
||||
error_handler.history = {};
|
||||
end
|
||||
|
||||
for index, error in pairs(error_handler.history) do
|
||||
imgui.text_colored(index, 0xFF66AA66);
|
||||
imgui.same_line();
|
||||
imgui.button(string.format("%.3fs", error.time));
|
||||
imgui.same_line();
|
||||
imgui.text_colored(error.key, 0xFFAA66AA);
|
||||
imgui.same_line();
|
||||
imgui.text(error.message);
|
||||
end
|
||||
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
return config_changed;
|
||||
end
|
||||
|
||||
function this.init_dependencies()
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
@@ -2279,6 +2468,9 @@ function this.init_module()
|
||||
non_players = require("MHR_Overlay.Damage_Meter.non_players");
|
||||
quest_status = require("MHR_Overlay.Game_Handler.quest_status");
|
||||
buffs = require("MHR_Overlay.Buffs.buffs");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
time = require("MHR_Overlay.Game_Handler.time");
|
||||
stats_UI = require("MHR_Overlay.UI.Modules.stats_UI");
|
||||
|
||||
label_customization = require("MHR_Overlay.UI.Customizations.label_customization");
|
||||
bar_customization = require("MHR_Overlay.UI.Customizations.bar_customization");
|
||||
@@ -2291,7 +2483,9 @@ function this.init_module()
|
||||
ailments_customization = require("MHR_Overlay.UI.Customizations.ailments_customization");
|
||||
ailment_buildups_customization = require("MHR_Overlay.UI.Customizations.ailment_buildups_customization");
|
||||
module_visibility_customization = require("MHR_Overlay.UI.Customizations.module_visibility_customization");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
this.init();
|
||||
this.reload_font();
|
||||
end
|
||||
|
||||
@@ -2,6 +2,7 @@ local this = {};
|
||||
|
||||
local config;
|
||||
local utils;
|
||||
local error_handler;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -82,7 +83,7 @@ function this.limit_text_size(text, size_limit)
|
||||
limited_text = utils.unicode.sub(limited_text, 1, -5) .. "...";
|
||||
|
||||
if limited_text == old_limited_text then
|
||||
break
|
||||
break;
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -199,7 +200,7 @@ function this.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;
|
||||
@@ -376,9 +377,13 @@ function this.draw_capture_line(health_UI, position, opacity_scale, percentage)
|
||||
end
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
function this.init_dependencies()
|
||||
config = require("MHR_Overlay.Misc.config");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
error_handler = require("MHR_Overlay.Misc.error_handler");
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
"HP": "HP:",
|
||||
"buildup": "Buildup:",
|
||||
"gold": "Gold",
|
||||
"lv": "Lv.",
|
||||
"mini": "Mini",
|
||||
"otomo": "Buddy",
|
||||
"part_anomaly_core": "Anomaly Core",
|
||||
@@ -18,30 +19,53 @@
|
||||
},
|
||||
"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!",
|
||||
"activation_count": "Activation Count",
|
||||
"affinity_label": "Affinity Label",
|
||||
"ailment_buildups": "Ailment Buildups",
|
||||
"ailment_name": "Ailment Name",
|
||||
"ailment_name_label": "Ailment Name Label",
|
||||
@@ -55,6 +79,7 @@
|
||||
"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",
|
||||
@@ -92,6 +117,7 @@
|
||||
"crown": "Crown",
|
||||
"crown_thresholds": "Crown Thresholds",
|
||||
"current_state": "Current State",
|
||||
"current_time": "Current Time",
|
||||
"current_value": "Current Value",
|
||||
"cutscene": "Cutscene",
|
||||
"damage": "Damage",
|
||||
@@ -100,26 +126,33 @@
|
||||
"damage_meter_UI": "Damage Meter UI",
|
||||
"damage_percentage_label": "Damage Percentage Label",
|
||||
"damage_value_label": "Damage Value Label",
|
||||
"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",
|
||||
"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",
|
||||
"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",
|
||||
@@ -135,6 +168,7 @@
|
||||
"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",
|
||||
@@ -163,10 +197,13 @@
|
||||
"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",
|
||||
@@ -274,16 +311,19 @@
|
||||
"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)",
|
||||
@@ -311,10 +351,12 @@
|
||||
"tracked_monster_types": "Tracked Monster Types",
|
||||
"type": "Type",
|
||||
"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",
|
||||
"width": "Width",
|
||||
"world_offset": "World Offset",
|
||||
"wyvern_riding": "Wyvern Riding",
|
||||
@@ -322,7 +364,16 @@
|
||||
"y": "Y",
|
||||
"z": "Z"
|
||||
},
|
||||
"dango_skills": {
|
||||
"dango_insurance_defense_up": "Dango Insurance Defense Up"
|
||||
},
|
||||
"font_name": "",
|
||||
"misc_buffs": {
|
||||
"attack_up": "Attack Up",
|
||||
"defense_up": "Defense Up",
|
||||
"immunity": "Immunity",
|
||||
"stamina_use_down": "Stamina Use Down"
|
||||
},
|
||||
"parts": {
|
||||
"abdomen": "Abdomen",
|
||||
"amatsu_unknown": "?",
|
||||
@@ -392,7 +443,51 @@
|
||||
"wingclaws": "Wingclaws",
|
||||
"wings": "Wings"
|
||||
},
|
||||
"skills": {
|
||||
"dragon_conversion_elemental_attack_up": "Dragon Conversion Elem. Atk Up",
|
||||
"dragon_conversion_elemental_res_up": "Dragon Conversion Elem. Res Up",
|
||||
"kushala_daora_soul": "Kushala Daora Soul",
|
||||
"powder_mantle_blue": "Powder Mantle (Blue)",
|
||||
"powder_mantle_red": "Powder Mantle (Red)"
|
||||
},
|
||||
"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": [
|
||||
0
|
||||
]
|
||||
],
|
||||
"weapon_skills": {
|
||||
"all_extracts_mix": "All Extracts Mix",
|
||||
"amped_state": "Amped State",
|
||||
"archdemon_mode": "Archdemon Mode",
|
||||
"axe_heavy_slam": "Axe: Heavy Slam",
|
||||
"element_boost": "Element Boost",
|
||||
"herculean_draw": "Herculean Draw",
|
||||
"ironshine_silk": "Ironshine Silk",
|
||||
"orange_extract": "Orange Extract",
|
||||
"overheat": "Overheat",
|
||||
"power_sheathe": "Power Sheathe",
|
||||
"red_extract": "Red Extract",
|
||||
"spirit_gauge": "Spirit Gauge",
|
||||
"spirit_gauge_autofill": "Spirit Gauge Autofill",
|
||||
"switch_charger": "Switch Charger",
|
||||
"sword_boost_mode": "Sword Boost Mode",
|
||||
"twin_wine": "Twin Wine",
|
||||
"white_extract": "White Extract",
|
||||
"wyvernblast_reload": "Wyvernblast Reload",
|
||||
"wyvernsnipe_reload": "Wyvernsnipe Reload"
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@
|
||||
"HP": "HP:",
|
||||
"buildup": "蓄積値:",
|
||||
"gold": "金冠",
|
||||
"lv": "Lv.",
|
||||
"mini": "小型",
|
||||
"otomo": "Buddy",
|
||||
"part_anomaly_core": "Anomaly Core",
|
||||
@@ -18,30 +19,67 @@
|
||||
},
|
||||
"ailments": {
|
||||
"blast": "爆破",
|
||||
"blastblight": "Blastblight",
|
||||
"bleeding": "Bleeding",
|
||||
"bloodblight": "Bloodblight",
|
||||
"bubbleblight": "Bubbleblight",
|
||||
"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"
|
||||
},
|
||||
"consumables": {
|
||||
"adamant_seed": "Adamant Seed",
|
||||
"armorskin": "Armorskin",
|
||||
"dash_juice": "Dash Juice",
|
||||
"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"
|
||||
},
|
||||
"customization_menu": {
|
||||
"UI_font": "UI フォント",
|
||||
"UI_font_notice": "フォントの変更後はスクリプトリセットを行ってください。",
|
||||
"activation_count": "適用までのカウント",
|
||||
"affinity_label": "Affinity Label",
|
||||
"ailment_buildups": "状態異常の蓄積値",
|
||||
"ailment_name": "状態異常表示",
|
||||
"ailment_name_label": "状態異常表示ラベル",
|
||||
@@ -55,6 +93,7 @@
|
||||
"anomaly_health_percentage": "Anomaly Core Health Percentage",
|
||||
"apply": "適用",
|
||||
"assign_new_key": "新規に割り当てるキーを入力",
|
||||
"attack_label": "Attack Label",
|
||||
"auto_highlight": "Auto-highlight",
|
||||
"background": "背景色",
|
||||
"bar": "バー",
|
||||
@@ -92,6 +131,7 @@
|
||||
"crown": "王冠",
|
||||
"crown_thresholds": "王冠の閾値",
|
||||
"current_state": "Current State",
|
||||
"current_time": "Current Time",
|
||||
"current_value": "Current Value",
|
||||
"cutscene": "Cutscene",
|
||||
"damage": "ダメージ",
|
||||
@@ -100,26 +140,33 @@
|
||||
"damage_meter_UI": "ダメージメーターUI",
|
||||
"damage_percentage_label": "ダメージ割合(%)ラベル",
|
||||
"damage_value_label": "ダメージラベル",
|
||||
"debug": "Debug",
|
||||
"default_state": "Default State",
|
||||
"defense_label": "Defense Label",
|
||||
"delete": "Delete",
|
||||
"distance": "距離",
|
||||
"dps": "DPS",
|
||||
"dps_label": "DPSラベル",
|
||||
"dps_mode": "DPS モード",
|
||||
"dragon_resistance_label": "Dragon Resistance Label",
|
||||
"duplicate": "Duplicate",
|
||||
"duration": "Duration",
|
||||
"dynamic_positioning": "動的な場所",
|
||||
"dynamically_positioned": "モンスターに追随して表示",
|
||||
"element_2_label": "Element 2 Label",
|
||||
"element_label": "Element Label",
|
||||
"enable_for": "有効にする",
|
||||
"enabled": "有効",
|
||||
"endemic_life": "Endemic Life",
|
||||
"endemic_life_UI": "環境生物UI",
|
||||
"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": "ひるみ回数",
|
||||
@@ -135,6 +182,7 @@
|
||||
"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_sever_anomaly_filter": "Health + Sever + Anomaly Core",
|
||||
"health_sever_filter": "Health + Sever",
|
||||
@@ -163,10 +211,13 @@
|
||||
"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",
|
||||
@@ -274,16 +325,19 @@
|
||||
"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.)",
|
||||
@@ -311,10 +365,12 @@
|
||||
"tracked_monster_types": "モンスタータイプでの追跡",
|
||||
"type": "タイプ",
|
||||
"use_d2d_if_available": "Use Direct2D if available",
|
||||
"value": "Value",
|
||||
"value_label": "バリューラベル",
|
||||
"vertical": "縦",
|
||||
"viewport_offset": "表示領域からの位置",
|
||||
"visible": "表示する",
|
||||
"water_resistance_label": "Water Resistance Label",
|
||||
"width": "幅",
|
||||
"world_offset": "表示位置",
|
||||
"wyvern_riding": "Wyvern Riding",
|
||||
@@ -322,7 +378,98 @@
|
||||
"y": "Y",
|
||||
"z": "Z"
|
||||
},
|
||||
"dango_skills": {
|
||||
"dango_insurance_defense_up": "Dango Insurance Defense Up"
|
||||
},
|
||||
"dangos": {
|
||||
"dango_adrenaline": "Dango Adrenaline",
|
||||
"dango_bombardier": "Dango Bombardier",
|
||||
"dango_booster": "Dango Booster",
|
||||
"dango_bulker": "Dango Bulker",
|
||||
"dango_connector": "Dango Connector",
|
||||
"dango_defender": "Dango Defender",
|
||||
"dango_defender_hi": "Dango Defender (Hi)",
|
||||
"dango_deflector": "Dango Deflector",
|
||||
"dango_dragon_res": "Dango Dragon Res",
|
||||
"dango_dragon_res_hi": "Dango Dragon Res (Hi)",
|
||||
"dango_driver": "Dango Driver",
|
||||
"dango_feet": "Dango Feet",
|
||||
"dango_fighter": "Dango Fighter",
|
||||
"dango_fire_res": "Dango Fire Res",
|
||||
"dango_fire_res_hi": "Dango Fire Res (Hi)",
|
||||
"dango_flyer": "Dango Flyer",
|
||||
"dango_glutton": "Dango Glutton",
|
||||
"dango_guard": "Dango Guard",
|
||||
"dango_hunter": "Dango Hunter",
|
||||
"dango_hurler": "Dango Hurler",
|
||||
"dango_ice_res": "Dango Ice Res",
|
||||
"dango_ice_res_hi": "Dango Ice Res (Hi)",
|
||||
"dango_immunizer": "Dango Immunizer",
|
||||
"dango_insurance": "Dango Insurance",
|
||||
"dango_insurance_defense_up": "Dango Insurance Defense Up",
|
||||
"dango_marksman": "Dango Marksman",
|
||||
"dango_medic": "Dango Medic",
|
||||
"dango_medic_hi": "Dango Medic (Hi)",
|
||||
"dango_moxie": "Dango Moxie",
|
||||
"dango_polisher": "Dango Polisher",
|
||||
"dango_pyro": "Dango Pyro",
|
||||
"dango_reviver": "Dango Reviver",
|
||||
"dango_rider": "Dango Rider",
|
||||
"dango_shifter": "Dango Shifter",
|
||||
"dango_slugger": "Dango Slugger",
|
||||
"dango_specialist": "Dango Specialist",
|
||||
"dango_temper": "Dango Temper",
|
||||
"dango_thunder_res": "Dango Thunder Res ",
|
||||
"dango_thunder_res_hi": "Dango Thunder Res (Hi)",
|
||||
"dango_wall_runner": "Dango Wall Runner",
|
||||
"dango_water_res": "Dango Water Res",
|
||||
"dango_water_res_hi": "Dango Water Res (Hi)",
|
||||
"dango_weakener": "Dango Weakener",
|
||||
"super_recovery_dango": "Super Recovery Dango"
|
||||
},
|
||||
"font_name": "NotoSansJP-Bold.otf",
|
||||
"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_down": "Defense Down",
|
||||
"defense_up": "Defense Up",
|
||||
"immunity": "Immunity",
|
||||
"stamina_use_down": "Stamina Use Down"
|
||||
},
|
||||
"otomo_moves": {
|
||||
"go_fight_win": "Go, Fight, Win",
|
||||
"power_drum": "Power Drum",
|
||||
"rousing_roar": "Rousing Roar"
|
||||
},
|
||||
"parts": {
|
||||
"abdomen": "腹部",
|
||||
"amatsu_unknown": "?",
|
||||
@@ -392,6 +539,57 @@
|
||||
"wingclaws": "Wingclaws",
|
||||
"wings": "翼"
|
||||
},
|
||||
"skills": {
|
||||
"adrenaline_rush": "Adrenaline Rush",
|
||||
"affinity_sliding": "Affinity Sliding",
|
||||
"agitator": "Agitator",
|
||||
"bladescale_hone": "Bladescale Hone",
|
||||
"bloodlust": "Bloodlust",
|
||||
"burst": "Burst",
|
||||
"coalescence": "Coalescence",
|
||||
"counterstrike": "Counterstrike",
|
||||
"dereliction": "Dereliction",
|
||||
"dragon_conversion_elemental_attack_up": "Dragon Conversion Elem. Attack Up",
|
||||
"dragon_conversion_elemental_res_up": "Dragon Conversion Elem. Res. Up",
|
||||
"dragonheart": "Dragonheart",
|
||||
"frenzied_bloodlust": "Frenzied Bloodlust",
|
||||
"furious": "Furious",
|
||||
"grinder_s": "Grinder (S)",
|
||||
"heaven_sent": "Heaven-Sent",
|
||||
"hellfire_cloak": "Hellfire Cloak",
|
||||
"heroics": "Heroics",
|
||||
"intrepid_heart": "Intrepid Heart",
|
||||
"kushala_daora_soul": "Kushala Daora Soul",
|
||||
"latent_power": "Latent Power",
|
||||
"maximum_might": "Maximum Might",
|
||||
"offensive_guard": "Offensive Guard",
|
||||
"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",
|
||||
"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,
|
||||
@@ -406,5 +604,45 @@
|
||||
65280,
|
||||
65519,
|
||||
0
|
||||
]
|
||||
],
|
||||
"weapon_skills": {
|
||||
"all_extracts_mix": "All Extracts Mix",
|
||||
"amped_state": "Amped State",
|
||||
"anchor_rage": "Anchor Rage",
|
||||
"archdemon_mode": "Archdemon Mode",
|
||||
"axe_heavy_slam": "Axe: Heavy Slam",
|
||||
"bead_of_resonance": "Bead of Resonance",
|
||||
"bolt_boost": "Bolt Boost",
|
||||
"counter_charger": "Counter Charger",
|
||||
"destroyer_oil": "Destroyer Oil",
|
||||
"element_boost": "Element Boost",
|
||||
"erupting_cannon": "Erupting Cannon",
|
||||
"fanning_maneuver": "Fannin Maneuver",
|
||||
"ground_splitter": "Ground Splitter",
|
||||
"harvest_moon": "Harvest Moon",
|
||||
"herculean_draw": "Herculean Draw",
|
||||
"iai_slash": "Iai Slash",
|
||||
"impact_burst": "Impact Burst",
|
||||
"ironshine_silk": "Ironshine Silk",
|
||||
"orange_extract": "O Extract",
|
||||
"overheat": "Overheat",
|
||||
"power_sheathe": "Power Sheathe",
|
||||
"red_extract": "Red Extract",
|
||||
"rising_moon": "Rising Moon",
|
||||
"setting_sun": "Setting Sun",
|
||||
"shield_charge": "Shield Charge",
|
||||
"silkbind_shockwave": "Silkbind Shockwave",
|
||||
"soaring_kick": "Soaring Kick",
|
||||
"sonic_bloom": "Sonic Bloom",
|
||||
"spiral_thrust": "Spiral Thrust",
|
||||
"spirit_gauge": "Spirit Gauge",
|
||||
"spirit_gauge_autofill": "Spirit Gauge Autofill",
|
||||
"switch_charger": "Switch Charger",
|
||||
"sword_boost_mode": "Sword Boost Mode",
|
||||
"sword_charge": "Sword Charge",
|
||||
"twin_wine": "Twin Wine",
|
||||
"white_extract": "White Extract",
|
||||
"wyvernblast_reload": "Wyvernblast Reload",
|
||||
"wyvernsnipe_reload": "Wyvernsnipe Reload"
|
||||
}
|
||||
}
|
||||
@@ -3,9 +3,10 @@
|
||||
"HP": "체력:",
|
||||
"buildup": "누적치:",
|
||||
"gold": "금관",
|
||||
"lv": "Lv.",
|
||||
"mini": "최소",
|
||||
"otomo": "동반자",
|
||||
"part_anomaly_core": "Anomaly Core",
|
||||
"part_anomaly_core": "괴이핵",
|
||||
"part_break": "파괴",
|
||||
"part_sever": "절단",
|
||||
"player": "헌터",
|
||||
@@ -18,30 +19,67 @@
|
||||
},
|
||||
"ailments": {
|
||||
"blast": "폭파",
|
||||
"blastblight": "Blastblight",
|
||||
"bleeding": "Bleeding",
|
||||
"bloodblight": "Bloodblight",
|
||||
"bubbleblight": "Bubbleblight",
|
||||
"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"
|
||||
},
|
||||
"consumables": {
|
||||
"adamant_seed": "Adamant Seed",
|
||||
"armorskin": "Armorskin",
|
||||
"dash_juice": "Dash Juice",
|
||||
"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"
|
||||
},
|
||||
"customization_menu": {
|
||||
"UI_font": "UI 글꼴",
|
||||
"UI_font_notice": "글꼴 변경시 스크립트를 리로드 해야합니다!",
|
||||
"activation_count": "활성 횟수",
|
||||
"affinity_label": "Affinity Label",
|
||||
"ailment_buildups": "상태이상 누적치",
|
||||
"ailment_name": "상태이상 이름",
|
||||
"ailment_name_label": "상태이상 이름 정보",
|
||||
@@ -49,29 +87,30 @@
|
||||
"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",
|
||||
"anomaly_cores": "괴이핵",
|
||||
"anomaly_filter": "괴이핵",
|
||||
"anomaly_health": "괴이핵 체력",
|
||||
"anomaly_health_percentage": "괴이핵 체력 비율",
|
||||
"apply": "적용",
|
||||
"assign_new_key": "새 키를 할당",
|
||||
"attack_label": "Attack Label",
|
||||
"auto_highlight": "자동 타겟 설정",
|
||||
"background": "배경색",
|
||||
"bar": "막대",
|
||||
"blast": "폭파",
|
||||
"body_parts": "부위",
|
||||
"bold": "굵게",
|
||||
"bombs": "Bombs",
|
||||
"bottom_left": "좌하단",
|
||||
"bottom_right": "우하단",
|
||||
"bottom_to_top": "Bottom to Top",
|
||||
"break_anomaly_filter": "Break + Anomaly Core",
|
||||
"bombs": "폭탄",
|
||||
"bottom_left": "왼쪽 아래",
|
||||
"bottom_right": "오른쪽 아래",
|
||||
"bottom_to_top": "아래에서 위로",
|
||||
"break_anomaly_filter": "파괴 + 괴이핵",
|
||||
"break_count": "파괴 횟수",
|
||||
"break_filter": "파괴",
|
||||
"break_health": "파괴 수치",
|
||||
"break_health_percentage": "파괴 수치 비율",
|
||||
"break_max_count": "최대 파괴 횟수",
|
||||
"break_sever_anomaly_filter": "Break + Sever + Anomaly Core",
|
||||
"break_sever_anomaly_filter": "파괴 + 절단 + 괴이핵",
|
||||
"break_sever_filter": "파괴 + 절단",
|
||||
"buff_UI": "버프 UI",
|
||||
"buildup": "누적치",
|
||||
@@ -91,8 +130,9 @@
|
||||
"creature_name_label": "환경생물 이름 정보",
|
||||
"crown": "금관",
|
||||
"crown_thresholds": "금관 판정값",
|
||||
"current_state": "Current State",
|
||||
"current_value": "Current Value",
|
||||
"current_state": "현재 상태",
|
||||
"current_time": "Current Time",
|
||||
"current_value": "현재 값",
|
||||
"cutscene": "컷신",
|
||||
"damage": "대미지",
|
||||
"damage_bar": "대미지 막대",
|
||||
@@ -100,26 +140,34 @@
|
||||
"damage_meter_UI": "대미지 미터 UI",
|
||||
"damage_percentage_label": "대미지 비율 정보",
|
||||
"damage_value_label": "대미지 값 정보",
|
||||
"default_state": "Default State",
|
||||
"debug": "Debug",
|
||||
"debug_errors": "Debug Errors",
|
||||
"default_state": "기본 상태",
|
||||
"defense_label": "Defense Label",
|
||||
"delete": "삭제하기",
|
||||
"distance": "간격",
|
||||
"dps": "DPS",
|
||||
"dps_label": "DPS 정보",
|
||||
"dps_mode": "DPS 모드",
|
||||
"dragon_resistance_label": "Dragon Resistance Label",
|
||||
"duplicate": "복제하기",
|
||||
"duration": "지속시간",
|
||||
"dynamic_positioning": "유동 위치",
|
||||
"dynamically_positioned": "유동 위치 UI",
|
||||
"element_2_label": "Element 2 Label",
|
||||
"element_label": "Element Label",
|
||||
"enable_for": "표시 대상",
|
||||
"enabled": "사용함",
|
||||
"endemic_life": "Endemic Life",
|
||||
"endemic_life": "환경생물",
|
||||
"endemic_life_UI": "환경생물 UI",
|
||||
"everything_seems_to_be_ok": "Everything seems to be OK!",
|
||||
"family": "글꼴",
|
||||
"farthest": "가장 멀리있는",
|
||||
"fight_time": "전투 시간",
|
||||
"fill_direction": "Fill Direction",
|
||||
"fill_direction": "채우는 방향",
|
||||
"filter": "필터",
|
||||
"filter_mode": "Filter Mode",
|
||||
"filter_mode": "필터 모드",
|
||||
"fire_resistance_label": "Fire Resistance Label",
|
||||
"first": "맨 앞",
|
||||
"first_hit": "첫 공격",
|
||||
"flinch_count": "경직 횟수",
|
||||
@@ -129,14 +177,15 @@
|
||||
"global_scale_modifier": "전역 크기 배율",
|
||||
"global_settings": "전역 설정",
|
||||
"health": "체력",
|
||||
"health_anomaly_filter": "Health + Anomaly Core",
|
||||
"health_break_anomaly_filter": "Health + Break + Anomaly Core",
|
||||
"health_anomaly_filter": "체력 + 괴이핵",
|
||||
"health_break_anomaly_filter": "체력 + 파괴 + 괴이핵",
|
||||
"health_break_filter": "체력 + 파괴",
|
||||
"health_break_sever_anomaly_filter": "Health + Break + Sever + Anomaly Core",
|
||||
"health_break_sever_anomaly_filter": "체력 + 파괴 + 절단 + 괴이핵",
|
||||
"health_break_sever_filter": "체력 + 파괴 + 절단",
|
||||
"health_filter": "체력",
|
||||
"health_label": "Health Label",
|
||||
"health_percentage": "체력 비율",
|
||||
"health_sever_anomaly_filter": "Health + Sever + Anomaly Core",
|
||||
"health_sever_anomaly_filter": "체력 + 절단 + 괴이핵",
|
||||
"health_sever_filter": "체력 + 절단",
|
||||
"height": "높이",
|
||||
"hide_ailments_with_zero_buildup": "누적치가 0이면 상태이상 표시 안 함",
|
||||
@@ -163,20 +212,23 @@
|
||||
"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": "포함",
|
||||
"inside": "내부",
|
||||
"installations": "Installations",
|
||||
"installations": "설치",
|
||||
"italic": "기울임",
|
||||
"join_time": "참가 시간",
|
||||
"killcam": "처치 영상",
|
||||
"kunai": "Kunai",
|
||||
"kunai": "쿠나이",
|
||||
"language": "언어",
|
||||
"large_monster_UI": "대형 몬스터 UI",
|
||||
"large_monster_dynamic_UI": "대형 몬스터 유동 UI",
|
||||
@@ -184,7 +236,7 @@
|
||||
"large_monster_static_UI": "대형 몬스터 고정 UI",
|
||||
"large_monsters": "대형 몬스터",
|
||||
"last": "맨 뒤",
|
||||
"left_to_right": "Left to Right",
|
||||
"left_to_right": "왼쪽에서 오른쪽",
|
||||
"level": "레벨",
|
||||
"level_label": "레벨 정보",
|
||||
"loading_quest": "퀘스트 로딩 중",
|
||||
@@ -195,7 +247,7 @@
|
||||
"master_rank": "마스터 랭크",
|
||||
"max_distance": "최대 거리",
|
||||
"max_monster_updates_per_tick": "틱당 최대 몬스터 갱신 횟수",
|
||||
"max_value": "Max Value",
|
||||
"max_value": "최대값",
|
||||
"me": "나",
|
||||
"menu_font": "메뉴 글꼴",
|
||||
"menu_font_change_disclaimer": "언어 및 메뉴 글꼴 크기를 여러 번 변경하면 비정상 종료가 될 수 있습니다!",
|
||||
@@ -203,28 +255,28 @@
|
||||
"mode": "모드",
|
||||
"modifiers": "설정 배율",
|
||||
"module_visibility_based_on_game_state": "게임 상태에 따라 모듈 표시",
|
||||
"modules": "UI",
|
||||
"modules": "모듈",
|
||||
"monster_can_be_captured": "몬스터 포획 가능",
|
||||
"monster_id": "몬스터 ID",
|
||||
"monster_name": "몬스터명",
|
||||
"monster_name_label": "몬스터명 정보",
|
||||
"monsters": "Monsters",
|
||||
"monsters": "몬스터",
|
||||
"my_damage_bar_location": "내 대미지 막대 위치",
|
||||
"my_otomos": "내 동반자",
|
||||
"myself": "나",
|
||||
"name": "이름",
|
||||
"name_label": "이름 정보",
|
||||
"new": "새",
|
||||
"new": "새로 만들기",
|
||||
"none": "없음",
|
||||
"normal": "기본",
|
||||
"offset": "오프셋",
|
||||
"offset_is_relative_to_parts": "오프셋을 부위 기준으로",
|
||||
"opacity_falloff": "투명도 감소",
|
||||
"orientation": "방향",
|
||||
"other": "Other",
|
||||
"other": "기타",
|
||||
"other_player_otomos": "다른 플레이어 동반자",
|
||||
"other_players": "다른 헌터",
|
||||
"otomos": "Buddies",
|
||||
"otomos": "동반자",
|
||||
"outline": "외곽선",
|
||||
"outside": "외부",
|
||||
"part_health": "부위 수치",
|
||||
@@ -235,7 +287,7 @@
|
||||
"player_name_label": "헌터명 정보",
|
||||
"player_name_size_limit": "헌터명 크기 제한",
|
||||
"player_spacing": "플레이어 간격",
|
||||
"players": "Players",
|
||||
"players": "모든 플레이어",
|
||||
"playing_quest": "퀘스트 중",
|
||||
"poison": "독",
|
||||
"position": "위치",
|
||||
@@ -251,18 +303,18 @@
|
||||
"relative_offset": "상대적 위치 오프셋",
|
||||
"rename": "이름 변경",
|
||||
"render_highlighted_monster": "주시대상 몬스터 표시",
|
||||
"render_inactive_anomaly_cores": "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",
|
||||
"right_alignment_shift": "우측정렬 이동",
|
||||
"right_to_left": "오른쪽에서 왼쪽",
|
||||
"servant_otomos": "맹우 동반자",
|
||||
"servants": "맹우",
|
||||
"settings": "설정",
|
||||
"sever_anomaly_filter": "Sever + Anomaly Core",
|
||||
"sever_anomaly_filter": "절단 + 괴이핵",
|
||||
"sever_filter": "절단",
|
||||
"shadow": "그림자",
|
||||
"show_my_otomos_separately": "내 동반자를 따로",
|
||||
@@ -274,16 +326,19 @@
|
||||
"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": "시간 제한 (단위: 초)",
|
||||
@@ -292,9 +347,9 @@
|
||||
"top_buildup": "총 누적치",
|
||||
"top_damage": "최고 대미지",
|
||||
"top_dps": "최고 DPS",
|
||||
"top_left": "좌상단",
|
||||
"top_right": "우상단",
|
||||
"top_to_bottom": "Top to Bottom",
|
||||
"top_left": "왼쪽 위",
|
||||
"top_right": "오른쪽 위",
|
||||
"top_to_bottom": "위에서 아래",
|
||||
"total": "전체",
|
||||
"total_buildup": "총 누적치",
|
||||
"total_buildup_label": "총 누적치 정보",
|
||||
@@ -311,18 +366,111 @@
|
||||
"tracked_monster_types": "추적할 몬스터 타입",
|
||||
"type": "종류",
|
||||
"use_d2d_if_available": "가능한 Direct2D를 사용함",
|
||||
"value": "Value",
|
||||
"value_label": "값 정보",
|
||||
"vertical": "세로",
|
||||
"viewport_offset": "뷰포트 오프셋",
|
||||
"visible": "표시함",
|
||||
"water_resistance_label": "Water Resistance Label",
|
||||
"width": "너비",
|
||||
"world_offset": "전역 오프셋",
|
||||
"wyvern_riding": "Wyvern Riding",
|
||||
"wyvern_riding": "용조종",
|
||||
"x": "X",
|
||||
"y": "Y",
|
||||
"z": "Z"
|
||||
},
|
||||
"dango_skills": {
|
||||
"dango_insurance_defense_up": "Dango Insurance Defense Up"
|
||||
},
|
||||
"dangos": {
|
||||
"dango_adrenaline": "Dango Adrenaline",
|
||||
"dango_bombardier": "Dango Bombardier",
|
||||
"dango_booster": "Dango Booster",
|
||||
"dango_bulker": "Dango Bulker",
|
||||
"dango_connector": "Dango Connector",
|
||||
"dango_defender": "Dango Defender",
|
||||
"dango_defender_hi": "Dango Defender (Hi)",
|
||||
"dango_deflector": "Dango Deflector",
|
||||
"dango_dragon_res": "Dango Dragon Res",
|
||||
"dango_dragon_res_hi": "Dango Dragon Res (Hi)",
|
||||
"dango_driver": "Dango Driver",
|
||||
"dango_feet": "Dango Feet",
|
||||
"dango_fighter": "Dango Fighter",
|
||||
"dango_fire_res": "Dango Fire Res",
|
||||
"dango_fire_res_hi": "Dango Fire Res (Hi)",
|
||||
"dango_flyer": "Dango Flyer",
|
||||
"dango_glutton": "Dango Glutton",
|
||||
"dango_guard": "Dango Guard",
|
||||
"dango_hunter": "Dango Hunter",
|
||||
"dango_hurler": "Dango Hurler",
|
||||
"dango_ice_res": "Dango Ice Res",
|
||||
"dango_ice_res_hi": "Dango Ice Res (Hi)",
|
||||
"dango_immunizer": "Dango Immunizer",
|
||||
"dango_insurance": "Dango Insurance",
|
||||
"dango_insurance_defense_up": "Dango Insurance Defense Up",
|
||||
"dango_marksman": "Dango Marksman",
|
||||
"dango_medic": "Dango Medic",
|
||||
"dango_medic_hi": "Dango Medic (Hi)",
|
||||
"dango_moxie": "Dango Moxie",
|
||||
"dango_polisher": "Dango Polisher",
|
||||
"dango_pyro": "Dango Pyro",
|
||||
"dango_reviver": "Dango Reviver",
|
||||
"dango_rider": "Dango Rider",
|
||||
"dango_shifter": "Dango Shifter",
|
||||
"dango_slugger": "Dango Slugger",
|
||||
"dango_specialist": "Dango Specialist",
|
||||
"dango_temper": "Dango Temper",
|
||||
"dango_thunder_res": "Dango Thunder Res ",
|
||||
"dango_thunder_res_hi": "Dango Thunder Res (Hi)",
|
||||
"dango_wall_runner": "Dango Wall Runner",
|
||||
"dango_water_res": "Dango Water Res",
|
||||
"dango_water_res_hi": "Dango Water Res (Hi)",
|
||||
"dango_weakener": "Dango Weakener",
|
||||
"super_recovery_dango": "Super Recovery Dango"
|
||||
},
|
||||
"font_name": "NotoSansKR-Bold.otf",
|
||||
"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_down": "Defense Down",
|
||||
"defense_up": "Defense Up",
|
||||
"immunity": "Immunity",
|
||||
"stamina_use_down": "Stamina Use Down"
|
||||
},
|
||||
"otomo_moves": {
|
||||
"go_fight_win": "Go, Fight, Win",
|
||||
"power_drum": "Power Drum",
|
||||
"rousing_roar": "Rousing Roar"
|
||||
},
|
||||
"parts": {
|
||||
"abdomen": "배",
|
||||
"amatsu_unknown": "?",
|
||||
@@ -392,6 +540,57 @@
|
||||
"wingclaws": "날개발톱",
|
||||
"wings": "날개"
|
||||
},
|
||||
"skills": {
|
||||
"adrenaline_rush": "Adrenaline Rush",
|
||||
"affinity_sliding": "Affinity Sliding",
|
||||
"agitator": "Agitator",
|
||||
"bladescale_hone": "Bladescale Hone",
|
||||
"bloodlust": "Bloodlust",
|
||||
"burst": "Burst",
|
||||
"coalescence": "Coalescence",
|
||||
"counterstrike": "Counterstrike",
|
||||
"dereliction": "Dereliction",
|
||||
"dragon_conversion_elemental_attack_up": "Dragon Conversion Elem. Attack Up",
|
||||
"dragon_conversion_elemental_res_up": "Dragon Conversion Elem. Res. Up",
|
||||
"dragonheart": "Dragonheart",
|
||||
"frenzied_bloodlust": "Frenzied Bloodlust",
|
||||
"furious": "Furious",
|
||||
"grinder_s": "Grinder (S)",
|
||||
"heaven_sent": "Heaven-Sent",
|
||||
"hellfire_cloak": "Hellfire Cloak",
|
||||
"heroics": "Heroics",
|
||||
"intrepid_heart": "Intrepid Heart",
|
||||
"kushala_daora_soul": "Kushala Daora Soul",
|
||||
"latent_power": "Latent Power",
|
||||
"maximum_might": "Maximum Might",
|
||||
"offensive_guard": "Offensive Guard",
|
||||
"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",
|
||||
"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,
|
||||
@@ -406,5 +605,45 @@
|
||||
65280,
|
||||
65519,
|
||||
0
|
||||
]
|
||||
],
|
||||
"weapon_skills": {
|
||||
"all_extracts_mix": "All Extracts Mix",
|
||||
"amped_state": "Amped State",
|
||||
"anchor_rage": "Anchor Rage",
|
||||
"archdemon_mode": "Archdemon Mode",
|
||||
"axe_heavy_slam": "Axe: Heavy Slam",
|
||||
"bead_of_resonance": "Bead of Resonance",
|
||||
"bolt_boost": "Bolt Boost",
|
||||
"counter_charger": "Counter Charger",
|
||||
"destroyer_oil": "Destroyer Oil",
|
||||
"element_boost": "Element Boost",
|
||||
"erupting_cannon": "Erupting Cannon",
|
||||
"fanning_maneuver": "Fannin Maneuver",
|
||||
"ground_splitter": "Ground Splitter",
|
||||
"harvest_moon": "Harvest Moon",
|
||||
"herculean_draw": "Herculean Draw",
|
||||
"iai_slash": "Iai Slash",
|
||||
"impact_burst": "Impact Burst",
|
||||
"ironshine_silk": "Ironshine Silk",
|
||||
"orange_extract": "O Extract",
|
||||
"overheat": "Overheat",
|
||||
"power_sheathe": "Power Sheathe",
|
||||
"red_extract": "Red Extract",
|
||||
"rising_moon": "Rising Moon",
|
||||
"setting_sun": "Setting Sun",
|
||||
"shield_charge": "Shield Charge",
|
||||
"silkbind_shockwave": "Silkbind Shockwave",
|
||||
"soaring_kick": "Soaring Kick",
|
||||
"sonic_bloom": "Sonic Bloom",
|
||||
"spiral_thrust": "Spiral Thrust",
|
||||
"spirit_gauge": "Spirit Gauge",
|
||||
"spirit_gauge_autofill": "Spirit Gauge Autofill",
|
||||
"switch_charger": "Switch Charger",
|
||||
"sword_boost_mode": "Sword Boost Mode",
|
||||
"sword_charge": "Sword Charge",
|
||||
"twin_wine": "Twin Wine",
|
||||
"white_extract": "White Extract",
|
||||
"wyvernblast_reload": "Wyvernblast Reload",
|
||||
"wyvernsnipe_reload": "Wyvernsnipe Reload"
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@
|
||||
"HP": "ОЗ:",
|
||||
"buildup": "Накопление",
|
||||
"gold": "Золото",
|
||||
"lv": "Lv.",
|
||||
"mini": "Мини",
|
||||
"otomo": "Cпутник",
|
||||
"part_anomaly_core": "Ядро аномалии",
|
||||
@@ -18,30 +19,67 @@
|
||||
},
|
||||
"ailments": {
|
||||
"blast": "Взрыв",
|
||||
"blastblight": "Blastblight",
|
||||
"bleeding": "Bleeding",
|
||||
"bloodblight": "Bloodblight",
|
||||
"bubbleblight": "Bubbleblight",
|
||||
"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"
|
||||
},
|
||||
"consumables": {
|
||||
"adamant_seed": "Adamant Seed",
|
||||
"armorskin": "Armorskin",
|
||||
"dash_juice": "Dash Juice",
|
||||
"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"
|
||||
},
|
||||
"customization_menu": {
|
||||
"UI_font": "Шрифт интерфейса",
|
||||
"UI_font_notice": "Любые изменения шрифта требуют перезагрузку скрипта!",
|
||||
"activation_count": "Кол-во активаций",
|
||||
"affinity_label": "Affinity Label",
|
||||
"ailment_buildups": "Накопление аномального статуса",
|
||||
"ailment_name": "Название аномального статуса",
|
||||
"ailment_name_label": "Метка названия аномального статуса",
|
||||
@@ -55,6 +93,7 @@
|
||||
"anomaly_health_percentage": "Здоровье ядра аномалии в процентах",
|
||||
"apply": "Применить",
|
||||
"assign_new_key": "Привязать клавишу",
|
||||
"attack_label": "Attack Label",
|
||||
"auto_highlight": "Автофокус",
|
||||
"background": "Фон",
|
||||
"bar": "Шкала",
|
||||
@@ -92,6 +131,7 @@
|
||||
"crown": "Корона",
|
||||
"crown_thresholds": "Лимиты корон",
|
||||
"current_state": "Текущее состояние",
|
||||
"current_time": "Current Time",
|
||||
"current_value": "Текущее значение",
|
||||
"cutscene": "Катсцена",
|
||||
"damage": "Урон",
|
||||
@@ -100,26 +140,34 @@
|
||||
"damage_meter_UI": "Интерфейс модуля урона",
|
||||
"damage_percentage_label": "Метка урона в процентах",
|
||||
"damage_value_label": "Метка значений урона",
|
||||
"debug": "Debug",
|
||||
"debug_errors": "Debug Errors",
|
||||
"default_state": "Состояние по умолчанию",
|
||||
"defense_label": "Defense Label",
|
||||
"delete": "Удалить",
|
||||
"distance": "Расстояние",
|
||||
"dps": "Урон в секунду",
|
||||
"dps_label": "Метка урона в секунду",
|
||||
"dps_mode": "Режим урона в секунду",
|
||||
"dragon_resistance_label": "Dragon Resistance Label",
|
||||
"duplicate": "Дублировать",
|
||||
"duration": "Продолжительность",
|
||||
"dynamic_positioning": "Динамическое позиционирование",
|
||||
"dynamically_positioned": "Рассположенный динамично",
|
||||
"element_2_label": "Element 2 Label",
|
||||
"element_label": "Element Label",
|
||||
"enable_for": "Показывать для",
|
||||
"enabled": "Включить",
|
||||
"endemic_life": "Местная живность",
|
||||
"endemic_life_UI": "Интерфейс местной живности",
|
||||
"everything_seems_to_be_ok": "Everything seems to be OK!",
|
||||
"family": "Семейство",
|
||||
"farthest": "Самый дальний",
|
||||
"fight_time": "Время в бою",
|
||||
"fill_direction": "Направление заполнения",
|
||||
"filter": "Фильтр",
|
||||
"filter_mode": "Режим Фильтра",
|
||||
"fire_resistance_label": "Fire Resistance Label",
|
||||
"first": "Первый",
|
||||
"first_hit": "Первый удар",
|
||||
"flinch_count": "Кол-во вздрагиваний",
|
||||
@@ -135,6 +183,7 @@
|
||||
"health_break_sever_anomaly_filter": "Здоровье + Повреждение + Отсечение + Ядро аномалии",
|
||||
"health_break_sever_filter": "Здоровье + Повреждение + Отсечение",
|
||||
"health_filter": "Здоровье",
|
||||
"health_label": "Health Label",
|
||||
"health_percentage": "Здоровье в процентах",
|
||||
"health_sever_anomaly_filter": "Здоровье + Отсечение + Ядро аномалии",
|
||||
"health_sever_filter": "Здоровье + Отсечение",
|
||||
@@ -163,10 +212,13 @@
|
||||
"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": "В тренировочной зоне",
|
||||
@@ -274,16 +326,19 @@
|
||||
"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": "Экран Результатов",
|
||||
"text_label": "Текстовая метка",
|
||||
"thickness": "Толщина",
|
||||
"thunder_resistance_label": "Thunder Resistance Label",
|
||||
"time_UI": "Интерфейс времени",
|
||||
"time_label": "Метка времени",
|
||||
"time_limit": "Ограничение по времени (cек.)",
|
||||
@@ -311,10 +366,12 @@
|
||||
"tracked_monster_types": "Отслеживаемые типы монстров",
|
||||
"type": "Тип",
|
||||
"use_d2d_if_available": "Использовать Direct2D, если доступен",
|
||||
"value": "Value",
|
||||
"value_label": "Метка значений",
|
||||
"vertical": "Вертикально",
|
||||
"viewport_offset": "Сдвиг в экранном пространстве",
|
||||
"visible": "Включить",
|
||||
"water_resistance_label": "Water Resistance Label",
|
||||
"width": "Ширина",
|
||||
"world_offset": "Сдвиг в игровом пространстве",
|
||||
"wyvern_riding": "Езда на виверне",
|
||||
@@ -322,7 +379,98 @@
|
||||
"y": "Y",
|
||||
"z": "Z"
|
||||
},
|
||||
"dango_skills": {
|
||||
"dango_insurance_defense_up": "Dango Insurance Defense Up"
|
||||
},
|
||||
"dangos": {
|
||||
"dango_adrenaline": "Dango Adrenaline",
|
||||
"dango_bombardier": "Dango Bombardier",
|
||||
"dango_booster": "Dango Booster",
|
||||
"dango_bulker": "Dango Bulker",
|
||||
"dango_connector": "Dango Connector",
|
||||
"dango_defender": "Dango Defender",
|
||||
"dango_defender_hi": "Dango Defender (Hi)",
|
||||
"dango_deflector": "Dango Deflector",
|
||||
"dango_dragon_res": "Dango Dragon Res",
|
||||
"dango_dragon_res_hi": "Dango Dragon Res (Hi)",
|
||||
"dango_driver": "Dango Driver",
|
||||
"dango_feet": "Dango Feet",
|
||||
"dango_fighter": "Dango Fighter",
|
||||
"dango_fire_res": "Dango Fire Res",
|
||||
"dango_fire_res_hi": "Dango Fire Res (Hi)",
|
||||
"dango_flyer": "Dango Flyer",
|
||||
"dango_glutton": "Dango Glutton",
|
||||
"dango_guard": "Dango Guard",
|
||||
"dango_hunter": "Dango Hunter",
|
||||
"dango_hurler": "Dango Hurler",
|
||||
"dango_ice_res": "Dango Ice Res",
|
||||
"dango_ice_res_hi": "Dango Ice Res (Hi)",
|
||||
"dango_immunizer": "Dango Immunizer",
|
||||
"dango_insurance": "Dango Insurance",
|
||||
"dango_insurance_defense_up": "Dango Insurance Defense Up",
|
||||
"dango_marksman": "Dango Marksman",
|
||||
"dango_medic": "Dango Medic",
|
||||
"dango_medic_hi": "Dango Medic (Hi)",
|
||||
"dango_moxie": "Dango Moxie",
|
||||
"dango_polisher": "Dango Polisher",
|
||||
"dango_pyro": "Dango Pyro",
|
||||
"dango_reviver": "Dango Reviver",
|
||||
"dango_rider": "Dango Rider",
|
||||
"dango_shifter": "Dango Shifter",
|
||||
"dango_slugger": "Dango Slugger",
|
||||
"dango_specialist": "Dango Specialist",
|
||||
"dango_temper": "Dango Temper",
|
||||
"dango_thunder_res": "Dango Thunder Res ",
|
||||
"dango_thunder_res_hi": "Dango Thunder Res (Hi)",
|
||||
"dango_wall_runner": "Dango Wall Runner",
|
||||
"dango_water_res": "Dango Water Res",
|
||||
"dango_water_res_hi": "Dango Water Res (Hi)",
|
||||
"dango_weakener": "Dango Weakener",
|
||||
"super_recovery_dango": "Super Recovery Dango"
|
||||
},
|
||||
"font_name": "NotoSansKR-Bold.otf",
|
||||
"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_down": "Defense Down",
|
||||
"defense_up": "Defense Up",
|
||||
"immunity": "Immunity",
|
||||
"stamina_use_down": "Stamina Use Down"
|
||||
},
|
||||
"otomo_moves": {
|
||||
"go_fight_win": "Go, Fight, Win",
|
||||
"power_drum": "Power Drum",
|
||||
"rousing_roar": "Rousing Roar"
|
||||
},
|
||||
"parts": {
|
||||
"abdomen": "Брюхо",
|
||||
"amatsu_unknown": "?",
|
||||
@@ -392,6 +540,57 @@
|
||||
"wingclaws": "Крыло-коготь",
|
||||
"wings": "Крылья"
|
||||
},
|
||||
"skills": {
|
||||
"adrenaline_rush": "Adrenaline Rush",
|
||||
"affinity_sliding": "Affinity Sliding",
|
||||
"agitator": "Agitator",
|
||||
"bladescale_hone": "Bladescale Hone",
|
||||
"bloodlust": "Bloodlust",
|
||||
"burst": "Burst",
|
||||
"coalescence": "Coalescence",
|
||||
"counterstrike": "Counterstrike",
|
||||
"dereliction": "Dereliction",
|
||||
"dragon_conversion_elemental_attack_up": "Dragon Conversion Elem. Attack Up",
|
||||
"dragon_conversion_elemental_res_up": "Dragon Conversion Elem. Res. Up",
|
||||
"dragonheart": "Dragonheart",
|
||||
"frenzied_bloodlust": "Frenzied Bloodlust",
|
||||
"furious": "Furious",
|
||||
"grinder_s": "Grinder (S)",
|
||||
"heaven_sent": "Heaven-Sent",
|
||||
"hellfire_cloak": "Hellfire Cloak",
|
||||
"heroics": "Heroics",
|
||||
"intrepid_heart": "Intrepid Heart",
|
||||
"kushala_daora_soul": "Kushala Daora Soul",
|
||||
"latent_power": "Latent Power",
|
||||
"maximum_might": "Maximum Might",
|
||||
"offensive_guard": "Offensive Guard",
|
||||
"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",
|
||||
"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,
|
||||
@@ -402,5 +601,45 @@
|
||||
65280,
|
||||
65519,
|
||||
0
|
||||
]
|
||||
],
|
||||
"weapon_skills": {
|
||||
"all_extracts_mix": "All Extracts Mix",
|
||||
"amped_state": "Amped State",
|
||||
"anchor_rage": "Anchor Rage",
|
||||
"archdemon_mode": "Archdemon Mode",
|
||||
"axe_heavy_slam": "Axe: Heavy Slam",
|
||||
"bead_of_resonance": "Bead of Resonance",
|
||||
"bolt_boost": "Bolt Boost",
|
||||
"counter_charger": "Counter Charger",
|
||||
"destroyer_oil": "Destroyer Oil",
|
||||
"element_boost": "Element Boost",
|
||||
"erupting_cannon": "Erupting Cannon",
|
||||
"fanning_maneuver": "Fannin Maneuver",
|
||||
"ground_splitter": "Ground Splitter",
|
||||
"harvest_moon": "Harvest Moon",
|
||||
"herculean_draw": "Herculean Draw",
|
||||
"iai_slash": "Iai Slash",
|
||||
"impact_burst": "Impact Burst",
|
||||
"ironshine_silk": "Ironshine Silk",
|
||||
"orange_extract": "O Extract",
|
||||
"overheat": "Overheat",
|
||||
"power_sheathe": "Power Sheathe",
|
||||
"red_extract": "Red Extract",
|
||||
"rising_moon": "Rising Moon",
|
||||
"setting_sun": "Setting Sun",
|
||||
"shield_charge": "Shield Charge",
|
||||
"silkbind_shockwave": "Silkbind Shockwave",
|
||||
"soaring_kick": "Soaring Kick",
|
||||
"sonic_bloom": "Sonic Bloom",
|
||||
"spiral_thrust": "Spiral Thrust",
|
||||
"spirit_gauge": "Spirit Gauge",
|
||||
"spirit_gauge_autofill": "Spirit Gauge Autofill",
|
||||
"switch_charger": "Switch Charger",
|
||||
"sword_boost_mode": "Sword Boost Mode",
|
||||
"sword_charge": "Sword Charge",
|
||||
"twin_wine": "Twin Wine",
|
||||
"white_extract": "White Extract",
|
||||
"wyvernblast_reload": "Wyvernblast Reload",
|
||||
"wyvernsnipe_reload": "Wyvernsnipe Reload"
|
||||
}
|
||||
}
|
||||
@@ -3,9 +3,10 @@
|
||||
"HP": "生命:",
|
||||
"buildup": "积累值:",
|
||||
"gold": "金冠",
|
||||
"lv": "Lv.",
|
||||
"mini": "小型",
|
||||
"otomo": "随从",
|
||||
"part_anomaly_core": "Anomaly Core",
|
||||
"part_anomaly_core": "怪异核",
|
||||
"part_break": "部位破坏",
|
||||
"part_sever": "部位切断",
|
||||
"player": "玩家",
|
||||
@@ -18,30 +19,67 @@
|
||||
},
|
||||
"ailments": {
|
||||
"blast": "爆破",
|
||||
"blastblight": "Blastblight",
|
||||
"bleeding": "Bleeding",
|
||||
"bloodblight": "Bloodblight",
|
||||
"bubbleblight": "Bubbleblight",
|
||||
"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"
|
||||
},
|
||||
"consumables": {
|
||||
"adamant_seed": "Adamant Seed",
|
||||
"armorskin": "Armorskin",
|
||||
"dash_juice": "Dash Juice",
|
||||
"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"
|
||||
},
|
||||
"customization_menu": {
|
||||
"UI_font": "UI字体",
|
||||
"UI_font_notice": "当更改字体时,请重新加载脚本!",
|
||||
"activation_count": "激活次数",
|
||||
"affinity_label": "Affinity Label",
|
||||
"ailment_buildups": "状态异常积累值",
|
||||
"ailment_name": "状态异常名",
|
||||
"ailment_name_label": "状态异常标签",
|
||||
@@ -49,29 +87,30 @@
|
||||
"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",
|
||||
"anomaly_cores": "怪异核",
|
||||
"anomaly_filter": "怪异核",
|
||||
"anomaly_health": "怪异核破坏值",
|
||||
"anomaly_health_percentage": "怪异核破坏百分比",
|
||||
"apply": "应用",
|
||||
"assign_new_key": "指定新按键",
|
||||
"attack_label": "Attack Label",
|
||||
"auto_highlight": "自动高亮",
|
||||
"background": "背景",
|
||||
"bar": "状态条",
|
||||
"blast": "爆破",
|
||||
"body_parts": "身体部位",
|
||||
"bold": "粗体",
|
||||
"bombs": "Bombs",
|
||||
"bombs": "爆桶",
|
||||
"bottom_left": "左下",
|
||||
"bottom_right": "右下",
|
||||
"bottom_to_top": "Bottom to Top",
|
||||
"break_anomaly_filter": "Break + Anomaly Core",
|
||||
"bottom_to_top": "从下到上",
|
||||
"break_anomaly_filter": "破坏+怪异核",
|
||||
"break_count": "破坏次数",
|
||||
"break_filter": "破坏",
|
||||
"break_health": "破坏值",
|
||||
"break_health_percentage": "破坏值百分比",
|
||||
"break_max_count": "最大破坏次数",
|
||||
"break_sever_anomaly_filter": "Break + Sever + Anomaly Core",
|
||||
"break_sever_anomaly_filter": "破坏+切断+怪异核",
|
||||
"break_sever_filter": "破坏+切断",
|
||||
"buff_UI": "Buff UI",
|
||||
"buildup": "积累值",
|
||||
@@ -92,6 +131,7 @@
|
||||
"crown": "皇冠",
|
||||
"crown_thresholds": "皇冠阈值",
|
||||
"current_state": "当前阶段",
|
||||
"current_time": "Current Time",
|
||||
"current_value": "当前值",
|
||||
"cutscene": "过场动画",
|
||||
"damage": "伤害",
|
||||
@@ -100,26 +140,34 @@
|
||||
"damage_meter_UI": "伤害统计UI",
|
||||
"damage_percentage_label": "伤害百分比标签",
|
||||
"damage_value_label": "伤害量标签",
|
||||
"debug": "Debug",
|
||||
"debug_errors": "Debug Errors",
|
||||
"default_state": "默认阶段",
|
||||
"defense_label": "Defense Label",
|
||||
"delete": "删除",
|
||||
"distance": "距离",
|
||||
"dps": "DPS",
|
||||
"dps_label": "DPS标签",
|
||||
"dps_mode": "DPS模式",
|
||||
"dragon_resistance_label": "Dragon Resistance Label",
|
||||
"duplicate": "复制",
|
||||
"duration": "持续时间",
|
||||
"dynamic_positioning": "动态位置",
|
||||
"dynamically_positioned": "动态位置",
|
||||
"element_2_label": "Element 2 Label",
|
||||
"element_label": "Element Label",
|
||||
"enable_for": "开启",
|
||||
"enabled": "开启",
|
||||
"endemic_life": "Endemic Life",
|
||||
"endemic_life": "环境生物",
|
||||
"endemic_life_UI": "环境生物UI",
|
||||
"everything_seems_to_be_ok": "Everything seems to be OK!",
|
||||
"family": "字体",
|
||||
"farthest": "最远",
|
||||
"fight_time": "战斗时间",
|
||||
"fill_direction": "Fill Direction",
|
||||
"fill_direction": "填充方向",
|
||||
"filter": "筛选器",
|
||||
"filter_mode": "筛选方式",
|
||||
"fire_resistance_label": "Fire Resistance Label",
|
||||
"first": "第一",
|
||||
"first_hit": "第一击",
|
||||
"flinch_count": "胆怯次数",
|
||||
@@ -129,14 +177,15 @@
|
||||
"global_scale_modifier": "全局比例更改",
|
||||
"global_settings": "全局设定",
|
||||
"health": "生命",
|
||||
"health_anomaly_filter": "Health + Anomaly Core",
|
||||
"health_break_anomaly_filter": "Health + Break + Anomaly Core",
|
||||
"health_anomaly_filter": "生命+怪异核",
|
||||
"health_break_anomaly_filter": "生命+破坏+怪异核",
|
||||
"health_break_filter": "生命+破坏",
|
||||
"health_break_sever_anomaly_filter": "Health + Break + Sever + Anomaly Core",
|
||||
"health_break_sever_anomaly_filter": "生命+破坏+切断+怪异核",
|
||||
"health_break_sever_filter": "生命+破坏+切断",
|
||||
"health_filter": "生命",
|
||||
"health_label": "Health Label",
|
||||
"health_percentage": "生命百分比",
|
||||
"health_sever_anomaly_filter": "Health + Sever + Anomaly Core",
|
||||
"health_sever_anomaly_filter": "生命+切断+怪异核",
|
||||
"health_sever_filter": "生命+切断",
|
||||
"height": "高度",
|
||||
"hide_ailments_with_zero_buildup": "当积累值为0时隐藏该状态异常",
|
||||
@@ -163,20 +212,23 @@
|
||||
"highlighted_buildup_bar": "高亮积累值条",
|
||||
"highlighted_damage_bar": "高亮伤害条",
|
||||
"highlighted_targeted": "高亮目标[锁定目标的UI]",
|
||||
"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": "包含",
|
||||
"inside": "里面",
|
||||
"installations": "Installations",
|
||||
"installations": "狩猎设备",
|
||||
"italic": "斜体",
|
||||
"join_time": "加入时间",
|
||||
"killcam": "击杀镜头",
|
||||
"kunai": "Kunai",
|
||||
"kunai": "苦无",
|
||||
"language": "语言",
|
||||
"large_monster_UI": "大型怪物UI",
|
||||
"large_monster_dynamic_UI": "大型怪物浮动UI",
|
||||
@@ -184,7 +236,7 @@
|
||||
"large_monster_static_UI": "大型怪物固定UI",
|
||||
"large_monsters": "大型怪物群",
|
||||
"last": "最后",
|
||||
"left_to_right": "Left to Right",
|
||||
"left_to_right": "从左到右",
|
||||
"level": "等级",
|
||||
"level_label": "等级标签",
|
||||
"loading_quest": "任务加载中",
|
||||
@@ -208,7 +260,7 @@
|
||||
"monster_id": "怪物ID",
|
||||
"monster_name": "怪物名",
|
||||
"monster_name_label": "怪物名标签",
|
||||
"monsters": "Monsters",
|
||||
"monsters": "怪物",
|
||||
"my_damage_bar_location": "我的伤害条位置",
|
||||
"my_otomos": "我的随从",
|
||||
"myself": "我自己",
|
||||
@@ -221,10 +273,10 @@
|
||||
"offset_is_relative_to_parts": "根据部位偏移",
|
||||
"opacity_falloff": "透明度增加",
|
||||
"orientation": "方向",
|
||||
"other": "Other",
|
||||
"other": "其它",
|
||||
"other_player_otomos": "其他玩家的随从",
|
||||
"other_players": "其他玩家",
|
||||
"otomos": "Buddies",
|
||||
"otomos": "随从",
|
||||
"outline": "轮廓",
|
||||
"outside": "外面",
|
||||
"part_health": "部位生命值",
|
||||
@@ -235,7 +287,7 @@
|
||||
"player_name_label": "玩家名标签",
|
||||
"player_name_size_limit": "玩家名长度限制",
|
||||
"player_spacing": "玩家间距",
|
||||
"players": "Players",
|
||||
"players": "玩家",
|
||||
"playing_quest": "操作界面/正常游玩时",
|
||||
"poison": "中毒",
|
||||
"position": "位置",
|
||||
@@ -251,18 +303,18 @@
|
||||
"relative_offset": "相对偏移",
|
||||
"rename": "重命名",
|
||||
"render_highlighted_monster": "渲染高亮怪物",
|
||||
"render_inactive_anomaly_cores": "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",
|
||||
"right_alignment_shift": "右对齐偏移距离",
|
||||
"right_to_left": "从右到左",
|
||||
"servant_otomos": "盟友随从",
|
||||
"servants": "盟友",
|
||||
"settings": "设定",
|
||||
"sever_anomaly_filter": "Sever + Anomaly Core",
|
||||
"sever_anomaly_filter": "切断+怪异核",
|
||||
"sever_filter": "切断",
|
||||
"shadow": "阴影",
|
||||
"show_my_otomos_separately": "分开显示我的随从",
|
||||
@@ -274,27 +326,30 @@
|
||||
"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": "总结界面",
|
||||
"text_label": "文字标签",
|
||||
"thickness": "粗细度",
|
||||
"thunder_resistance_label": "Thunder Resistance Label",
|
||||
"time_UI": "时间UI",
|
||||
"time_label": "时间标签",
|
||||
"time_limit": "时间限制(秒)",
|
||||
"timer": "计时器",
|
||||
"timer_label": "计时器标签",
|
||||
"top_buildup": "最高积累值",
|
||||
"top_damage": "Top Damage",
|
||||
"top_damage": "最高伤害",
|
||||
"top_dps": "最高DPS",
|
||||
"top_left": "左上",
|
||||
"top_right": "右上",
|
||||
"top_to_bottom": "Top to Bottom",
|
||||
"top_to_bottom": "从上到下",
|
||||
"total": "总计",
|
||||
"total_buildup": "总积累值",
|
||||
"total_buildup_label": "总积累值标签",
|
||||
@@ -311,18 +366,111 @@
|
||||
"tracked_monster_types": "跟踪的怪物类型",
|
||||
"type": "类型",
|
||||
"use_d2d_if_available": "可用时使用Direct2D",
|
||||
"value": "Value",
|
||||
"value_label": "数字",
|
||||
"vertical": "垂直",
|
||||
"viewport_offset": "窗口偏移",
|
||||
"visible": "可见",
|
||||
"water_resistance_label": "Water Resistance Label",
|
||||
"width": "宽度",
|
||||
"world_offset": "整体偏移",
|
||||
"wyvern_riding": "Wyvern Riding",
|
||||
"wyvern_riding": "御龙",
|
||||
"x": "X轴",
|
||||
"y": "Y轴",
|
||||
"z": "Z轴"
|
||||
},
|
||||
"dango_skills": {
|
||||
"dango_insurance_defense_up": "Dango Insurance Defense Up"
|
||||
},
|
||||
"dangos": {
|
||||
"dango_adrenaline": "Dango Adrenaline",
|
||||
"dango_bombardier": "Dango Bombardier",
|
||||
"dango_booster": "Dango Booster",
|
||||
"dango_bulker": "Dango Bulker",
|
||||
"dango_connector": "Dango Connector",
|
||||
"dango_defender": "Dango Defender",
|
||||
"dango_defender_hi": "Dango Defender (Hi)",
|
||||
"dango_deflector": "Dango Deflector",
|
||||
"dango_dragon_res": "Dango Dragon Res",
|
||||
"dango_dragon_res_hi": "Dango Dragon Res (Hi)",
|
||||
"dango_driver": "Dango Driver",
|
||||
"dango_feet": "Dango Feet",
|
||||
"dango_fighter": "Dango Fighter",
|
||||
"dango_fire_res": "Dango Fire Res",
|
||||
"dango_fire_res_hi": "Dango Fire Res (Hi)",
|
||||
"dango_flyer": "Dango Flyer",
|
||||
"dango_glutton": "Dango Glutton",
|
||||
"dango_guard": "Dango Guard",
|
||||
"dango_hunter": "Dango Hunter",
|
||||
"dango_hurler": "Dango Hurler",
|
||||
"dango_ice_res": "Dango Ice Res",
|
||||
"dango_ice_res_hi": "Dango Ice Res (Hi)",
|
||||
"dango_immunizer": "Dango Immunizer",
|
||||
"dango_insurance": "Dango Insurance",
|
||||
"dango_insurance_defense_up": "Dango Insurance Defense Up",
|
||||
"dango_marksman": "Dango Marksman",
|
||||
"dango_medic": "Dango Medic",
|
||||
"dango_medic_hi": "Dango Medic (Hi)",
|
||||
"dango_moxie": "Dango Moxie",
|
||||
"dango_polisher": "Dango Polisher",
|
||||
"dango_pyro": "Dango Pyro",
|
||||
"dango_reviver": "Dango Reviver",
|
||||
"dango_rider": "Dango Rider",
|
||||
"dango_shifter": "Dango Shifter",
|
||||
"dango_slugger": "Dango Slugger",
|
||||
"dango_specialist": "Dango Specialist",
|
||||
"dango_temper": "Dango Temper",
|
||||
"dango_thunder_res": "Dango Thunder Res ",
|
||||
"dango_thunder_res_hi": "Dango Thunder Res (Hi)",
|
||||
"dango_wall_runner": "Dango Wall Runner",
|
||||
"dango_water_res": "Dango Water Res",
|
||||
"dango_water_res_hi": "Dango Water Res (Hi)",
|
||||
"dango_weakener": "Dango Weakener",
|
||||
"super_recovery_dango": "Super Recovery Dango"
|
||||
},
|
||||
"font_name": "NotoSansSC-Bold.otf",
|
||||
"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_down": "Defense Down",
|
||||
"defense_up": "Defense Up",
|
||||
"immunity": "Immunity",
|
||||
"stamina_use_down": "Stamina Use Down"
|
||||
},
|
||||
"otomo_moves": {
|
||||
"go_fight_win": "Go, Fight, Win",
|
||||
"power_drum": "Power Drum",
|
||||
"rousing_roar": "Rousing Roar"
|
||||
},
|
||||
"parts": {
|
||||
"abdomen": "腹部",
|
||||
"amatsu_unknown": "?",
|
||||
@@ -392,6 +540,57 @@
|
||||
"wingclaws": "翼爪",
|
||||
"wings": "翼"
|
||||
},
|
||||
"skills": {
|
||||
"adrenaline_rush": "Adrenaline Rush",
|
||||
"affinity_sliding": "Affinity Sliding",
|
||||
"agitator": "Agitator",
|
||||
"bladescale_hone": "Bladescale Hone",
|
||||
"bloodlust": "Bloodlust",
|
||||
"burst": "Burst",
|
||||
"coalescence": "Coalescence",
|
||||
"counterstrike": "Counterstrike",
|
||||
"dereliction": "Dereliction",
|
||||
"dragon_conversion_elemental_attack_up": "Dragon Conversion Elem. Attack Up",
|
||||
"dragon_conversion_elemental_res_up": "Dragon Conversion Elem. Res. Up",
|
||||
"dragonheart": "Dragonheart",
|
||||
"frenzied_bloodlust": "Frenzied Bloodlust",
|
||||
"furious": "Furious",
|
||||
"grinder_s": "Grinder (S)",
|
||||
"heaven_sent": "Heaven-Sent",
|
||||
"hellfire_cloak": "Hellfire Cloak",
|
||||
"heroics": "Heroics",
|
||||
"intrepid_heart": "Intrepid Heart",
|
||||
"kushala_daora_soul": "Kushala Daora Soul",
|
||||
"latent_power": "Latent Power",
|
||||
"maximum_might": "Maximum Might",
|
||||
"offensive_guard": "Offensive Guard",
|
||||
"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",
|
||||
"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,
|
||||
@@ -406,5 +605,45 @@
|
||||
65280,
|
||||
65519,
|
||||
0
|
||||
]
|
||||
],
|
||||
"weapon_skills": {
|
||||
"all_extracts_mix": "All Extracts Mix",
|
||||
"amped_state": "Amped State",
|
||||
"anchor_rage": "Anchor Rage",
|
||||
"archdemon_mode": "Archdemon Mode",
|
||||
"axe_heavy_slam": "Axe: Heavy Slam",
|
||||
"bead_of_resonance": "Bead of Resonance",
|
||||
"bolt_boost": "Bolt Boost",
|
||||
"counter_charger": "Counter Charger",
|
||||
"destroyer_oil": "Destroyer Oil",
|
||||
"element_boost": "Element Boost",
|
||||
"erupting_cannon": "Erupting Cannon",
|
||||
"fanning_maneuver": "Fannin Maneuver",
|
||||
"ground_splitter": "Ground Splitter",
|
||||
"harvest_moon": "Harvest Moon",
|
||||
"herculean_draw": "Herculean Draw",
|
||||
"iai_slash": "Iai Slash",
|
||||
"impact_burst": "Impact Burst",
|
||||
"ironshine_silk": "Ironshine Silk",
|
||||
"orange_extract": "O Extract",
|
||||
"overheat": "Overheat",
|
||||
"power_sheathe": "Power Sheathe",
|
||||
"red_extract": "Red Extract",
|
||||
"rising_moon": "Rising Moon",
|
||||
"setting_sun": "Setting Sun",
|
||||
"shield_charge": "Shield Charge",
|
||||
"silkbind_shockwave": "Silkbind Shockwave",
|
||||
"soaring_kick": "Soaring Kick",
|
||||
"sonic_bloom": "Sonic Bloom",
|
||||
"spiral_thrust": "Spiral Thrust",
|
||||
"spirit_gauge": "Spirit Gauge",
|
||||
"spirit_gauge_autofill": "Spirit Gauge Autofill",
|
||||
"switch_charger": "Switch Charger",
|
||||
"sword_boost_mode": "Sword Boost Mode",
|
||||
"sword_charge": "Sword Charge",
|
||||
"twin_wine": "Twin Wine",
|
||||
"white_extract": "White Extract",
|
||||
"wyvernblast_reload": "Wyvernblast Reload",
|
||||
"wyvernsnipe_reload": "Wyvernsnipe Reload"
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@
|
||||
"HP": "生命:",
|
||||
"buildup": "累積值:",
|
||||
"gold": "金冠",
|
||||
"lv": "Lv.",
|
||||
"mini": "小型",
|
||||
"otomo": "Buddy",
|
||||
"part_anomaly_core": "Anomaly Core",
|
||||
@@ -18,30 +19,67 @@
|
||||
},
|
||||
"ailments": {
|
||||
"blast": "爆破",
|
||||
"blastblight": "Blastblight",
|
||||
"bleeding": "Bleeding",
|
||||
"bloodblight": "Bloodblight",
|
||||
"bubbleblight": "Bubbleblight",
|
||||
"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"
|
||||
},
|
||||
"consumables": {
|
||||
"adamant_seed": "Adamant Seed",
|
||||
"armorskin": "Armorskin",
|
||||
"dash_juice": "Dash Juice",
|
||||
"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"
|
||||
},
|
||||
"customization_menu": {
|
||||
"UI_font": "UI 字型",
|
||||
"UI_font_notice": "當更改文字時,請重新載入",
|
||||
"activation_count": "觸發次數",
|
||||
"affinity_label": "Affinity Label",
|
||||
"ailment_buildups": "異常狀態累積值",
|
||||
"ailment_name": "異常狀態",
|
||||
"ailment_name_label": "異常狀態名稱",
|
||||
@@ -55,6 +93,7 @@
|
||||
"anomaly_health_percentage": "Anomaly Core Health Percentage",
|
||||
"apply": "套用",
|
||||
"assign_new_key": "指定新按鍵",
|
||||
"attack_label": "Attack Label",
|
||||
"auto_highlight": "自動高亮",
|
||||
"background": "圖形化顯示條的背景底色",
|
||||
"bar": "圖形化顯示條",
|
||||
@@ -92,6 +131,7 @@
|
||||
"crown": "皇冠",
|
||||
"crown_thresholds": "皇冠的大小判定範圍",
|
||||
"current_state": "Current State",
|
||||
"current_time": "Current Time",
|
||||
"current_value": "Current Value",
|
||||
"cutscene": "Cutscene",
|
||||
"damage": "傷害",
|
||||
@@ -100,26 +140,34 @@
|
||||
"damage_meter_UI": "傷害量計算 UI",
|
||||
"damage_percentage_label": "傷害量百分比",
|
||||
"damage_value_label": "傷害量",
|
||||
"debug": "Debug",
|
||||
"debug_errors": "Debug Errors",
|
||||
"default_state": "Default State",
|
||||
"defense_label": "Defense Label",
|
||||
"delete": "Delete",
|
||||
"distance": "距離",
|
||||
"dps": "DPS",
|
||||
"dps_label": "DPS文字",
|
||||
"dps_mode": "DPS模式",
|
||||
"dragon_resistance_label": "Dragon Resistance Label",
|
||||
"duplicate": "Duplicate",
|
||||
"duration": "Duration",
|
||||
"dynamic_positioning": "浮動的資訊位置",
|
||||
"dynamically_positioned": "浮動的魔物資訊",
|
||||
"element_2_label": "Element 2 Label",
|
||||
"element_label": "Element Label",
|
||||
"enable_for": "啟用對象",
|
||||
"enabled": "啟用",
|
||||
"endemic_life": "Endemic Life",
|
||||
"endemic_life_UI": "環境生物 UI",
|
||||
"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": "膽怯次數",
|
||||
@@ -135,6 +183,7 @@
|
||||
"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_sever_anomaly_filter": "Health + Sever + Anomaly Core",
|
||||
"health_sever_filter": "Health + Sever",
|
||||
@@ -163,10 +212,13 @@
|
||||
"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",
|
||||
@@ -274,16 +326,19 @@
|
||||
"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": "時限 (秒)",
|
||||
@@ -311,10 +366,12 @@
|
||||
"tracked_monster_types": "追蹤的魔物類型",
|
||||
"type": "類型",
|
||||
"use_d2d_if_available": "Use Direct2D if available",
|
||||
"value": "Value",
|
||||
"value_label": "數字",
|
||||
"vertical": "垂直",
|
||||
"viewport_offset": "視窗的位置",
|
||||
"visible": "可見",
|
||||
"water_resistance_label": "Water Resistance Label",
|
||||
"width": "寬度",
|
||||
"world_offset": "地圖中的位置",
|
||||
"wyvern_riding": "Wyvern Riding",
|
||||
@@ -322,7 +379,98 @@
|
||||
"y": "Y軸",
|
||||
"z": "Z軸"
|
||||
},
|
||||
"dango_skills": {
|
||||
"dango_insurance_defense_up": "Dango Insurance Defense Up"
|
||||
},
|
||||
"dangos": {
|
||||
"dango_adrenaline": "Dango Adrenaline",
|
||||
"dango_bombardier": "Dango Bombardier",
|
||||
"dango_booster": "Dango Booster",
|
||||
"dango_bulker": "Dango Bulker",
|
||||
"dango_connector": "Dango Connector",
|
||||
"dango_defender": "Dango Defender",
|
||||
"dango_defender_hi": "Dango Defender (Hi)",
|
||||
"dango_deflector": "Dango Deflector",
|
||||
"dango_dragon_res": "Dango Dragon Res",
|
||||
"dango_dragon_res_hi": "Dango Dragon Res (Hi)",
|
||||
"dango_driver": "Dango Driver",
|
||||
"dango_feet": "Dango Feet",
|
||||
"dango_fighter": "Dango Fighter",
|
||||
"dango_fire_res": "Dango Fire Res",
|
||||
"dango_fire_res_hi": "Dango Fire Res (Hi)",
|
||||
"dango_flyer": "Dango Flyer",
|
||||
"dango_glutton": "Dango Glutton",
|
||||
"dango_guard": "Dango Guard",
|
||||
"dango_hunter": "Dango Hunter",
|
||||
"dango_hurler": "Dango Hurler",
|
||||
"dango_ice_res": "Dango Ice Res",
|
||||
"dango_ice_res_hi": "Dango Ice Res (Hi)",
|
||||
"dango_immunizer": "Dango Immunizer",
|
||||
"dango_insurance": "Dango Insurance",
|
||||
"dango_insurance_defense_up": "Dango Insurance Defense Up",
|
||||
"dango_marksman": "Dango Marksman",
|
||||
"dango_medic": "Dango Medic",
|
||||
"dango_medic_hi": "Dango Medic (Hi)",
|
||||
"dango_moxie": "Dango Moxie",
|
||||
"dango_polisher": "Dango Polisher",
|
||||
"dango_pyro": "Dango Pyro",
|
||||
"dango_reviver": "Dango Reviver",
|
||||
"dango_rider": "Dango Rider",
|
||||
"dango_shifter": "Dango Shifter",
|
||||
"dango_slugger": "Dango Slugger",
|
||||
"dango_specialist": "Dango Specialist",
|
||||
"dango_temper": "Dango Temper",
|
||||
"dango_thunder_res": "Dango Thunder Res ",
|
||||
"dango_thunder_res_hi": "Dango Thunder Res (Hi)",
|
||||
"dango_wall_runner": "Dango Wall Runner",
|
||||
"dango_water_res": "Dango Water Res",
|
||||
"dango_water_res_hi": "Dango Water Res (Hi)",
|
||||
"dango_weakener": "Dango Weakener",
|
||||
"super_recovery_dango": "Super Recovery Dango"
|
||||
},
|
||||
"font_name": "NotoSansTC-Bold.otf",
|
||||
"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_down": "Defense Down",
|
||||
"defense_up": "Defense Up",
|
||||
"immunity": "Immunity",
|
||||
"stamina_use_down": "Stamina Use Down"
|
||||
},
|
||||
"otomo_moves": {
|
||||
"go_fight_win": "Go, Fight, Win",
|
||||
"power_drum": "Power Drum",
|
||||
"rousing_roar": "Rousing Roar"
|
||||
},
|
||||
"parts": {
|
||||
"abdomen": "腹部",
|
||||
"amatsu_unknown": "?",
|
||||
@@ -392,6 +540,57 @@
|
||||
"wingclaws": "翼爪",
|
||||
"wings": "翅膀"
|
||||
},
|
||||
"skills": {
|
||||
"adrenaline_rush": "Adrenaline Rush",
|
||||
"affinity_sliding": "Affinity Sliding",
|
||||
"agitator": "Agitator",
|
||||
"bladescale_hone": "Bladescale Hone",
|
||||
"bloodlust": "Bloodlust",
|
||||
"burst": "Burst",
|
||||
"coalescence": "Coalescence",
|
||||
"counterstrike": "Counterstrike",
|
||||
"dereliction": "Dereliction",
|
||||
"dragon_conversion_elemental_attack_up": "Dragon Conversion Elem. Attack Up",
|
||||
"dragon_conversion_elemental_res_up": "Dragon Conversion Elem. Res. Up",
|
||||
"dragonheart": "Dragonheart",
|
||||
"frenzied_bloodlust": "Frenzied Bloodlust",
|
||||
"furious": "Furious",
|
||||
"grinder_s": "Grinder (S)",
|
||||
"heaven_sent": "Heaven-Sent",
|
||||
"hellfire_cloak": "Hellfire Cloak",
|
||||
"heroics": "Heroics",
|
||||
"intrepid_heart": "Intrepid Heart",
|
||||
"kushala_daora_soul": "Kushala Daora Soul",
|
||||
"latent_power": "Latent Power",
|
||||
"maximum_might": "Maximum Might",
|
||||
"offensive_guard": "Offensive Guard",
|
||||
"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",
|
||||
"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,
|
||||
@@ -406,5 +605,45 @@
|
||||
65280,
|
||||
65519,
|
||||
0
|
||||
]
|
||||
],
|
||||
"weapon_skills": {
|
||||
"all_extracts_mix": "All Extracts Mix",
|
||||
"amped_state": "Amped State",
|
||||
"anchor_rage": "Anchor Rage",
|
||||
"archdemon_mode": "Archdemon Mode",
|
||||
"axe_heavy_slam": "Axe: Heavy Slam",
|
||||
"bead_of_resonance": "Bead of Resonance",
|
||||
"bolt_boost": "Bolt Boost",
|
||||
"counter_charger": "Counter Charger",
|
||||
"destroyer_oil": "Destroyer Oil",
|
||||
"element_boost": "Element Boost",
|
||||
"erupting_cannon": "Erupting Cannon",
|
||||
"fanning_maneuver": "Fannin Maneuver",
|
||||
"ground_splitter": "Ground Splitter",
|
||||
"harvest_moon": "Harvest Moon",
|
||||
"herculean_draw": "Herculean Draw",
|
||||
"iai_slash": "Iai Slash",
|
||||
"impact_burst": "Impact Burst",
|
||||
"ironshine_silk": "Ironshine Silk",
|
||||
"orange_extract": "O Extract",
|
||||
"overheat": "Overheat",
|
||||
"power_sheathe": "Power Sheathe",
|
||||
"red_extract": "Red Extract",
|
||||
"rising_moon": "Rising Moon",
|
||||
"setting_sun": "Setting Sun",
|
||||
"shield_charge": "Shield Charge",
|
||||
"silkbind_shockwave": "Silkbind Shockwave",
|
||||
"soaring_kick": "Soaring Kick",
|
||||
"sonic_bloom": "Sonic Bloom",
|
||||
"spiral_thrust": "Spiral Thrust",
|
||||
"spirit_gauge": "Spirit Gauge",
|
||||
"spirit_gauge_autofill": "Spirit Gauge Autofill",
|
||||
"switch_charger": "Switch Charger",
|
||||
"sword_boost_mode": "Sword Boost Mode",
|
||||
"sword_charge": "Sword Charge",
|
||||
"twin_wine": "Twin Wine",
|
||||
"white_extract": "White Extract",
|
||||
"wyvernblast_reload": "Wyvernblast Reload",
|
||||
"wyvernsnipe_reload": "Wyvernsnipe Reload"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user