211 Commits

Author SHA1 Message Date
GreenComfyTea d633a20340 Update README.md 2025-12-31 10:24:47 +02:00
GreenComfyTea 9e18f27f14 chore: Bump version to 2.7.4 2025-12-31 10:17:22 +02:00
GreenComfyTea b013eca872 feat: Added partial spanish localization by LLDan 2025-12-31 10:16:48 +02:00
GreenComfyTea 837c45bb33 Update README.md 2024-09-07 10:44:40 +03:00
Artjoms Lužnovs 30f76efd37 Bump version to v2.7.3 2024-09-07 10:37:44 +03:00
GreenComfyTea dad031af4b Merge pull request #72 from Krude/main
Create de-de (German) translation
2024-09-07 10:26:32 +03:00
Krude 2f355308ce Update de-de.json
Add 2 more untranslated strings I missed, and slight changes to better reflect Capcom's official word choices.
2024-09-02 19:56:16 +02:00
Krude c6708876b1 Add untranslated string for Deadly Poison to de-de 2024-08-31 20:41:32 +02:00
Krude a6160f77fd Create de-de.json
Create German translation for MHR Overlay v2.7.2
2024-08-31 20:27:24 +02:00
GreenComfyTea e0e7c9d824 Update README.md 2024-06-29 10:47:58 +03:00
GreenComfyTea 3bd627fdfb Update README.md 2024-06-29 10:47:36 +03:00
GreenComfyTea beeb45db46 Bump version to v2.7.2 2024-06-29 10:39:08 +03:00
GreenComfyTea a82168fc4e Micro optimizations 2024-06-29 10:38:51 +03:00
GreenComfyTea d62a72a778 [Monster UI] Fix an issue when run away monsters UI was not disappearing 2024-06-29 10:38:29 +03:00
GreenComfyTea 2390bfe8ac Bump version to v2.7.1 2024-05-23 18:35:07 +03:00
GreenComfyTea 7398bab9ea [Buff UI] Fix buffs not working when Sorting by Timer/Duration is selected 2024-05-12 10:26:43 +03:00
GreenComfyTea 877a48583a Update russian localization 2024-05-11 08:26:14 +03:00
GreenComfyTea ee6dfe2139 Hide some errors 2024-05-11 08:06:20 +03:00
GreenComfyTea d4c52617d9 Add Endemic Life Head Tracking 2024-05-06 19:08:08 +03:00
GreenComfyTea 30d858b1f8 Bump version to 2.7 2024-05-06 18:45:16 +03:00
GreenComfyTea 3c8f5019ab Grammar 2024-05-06 18:44:49 +03:00
GreenComfyTea 4caa69930d Add Small and Large Monster Head Tracking 2024-05-06 18:44:33 +03:00
GreenComfyTea 874c89daa5 Update README.md 2024-04-10 13:53:11 +03:00
GreenComfyTea 26590a3e0b Bump version to v2.6.6 2024-03-01 16:57:15 +02:00
GreenComfyTea 1439498a67 [Hunting Horn -> Bead of Resonance]: Fixed in online when not host 2024-03-01 16:57:01 +02:00
GreenComfyTea 6a876ccdb4 Revert "Whitelist default.json localization file"
This reverts commit 9560dad602.
2024-02-09 10:48:45 +02:00
GreenComfyTea 9560dad602 Whitelist default.json localization file 2024-02-09 10:46:56 +02:00
GreenComfyTea 032b77ca95 Bump version to v2.6.5 2024-02-09 10:42:53 +02:00
GreenComfyTea efdaae5b5a Formatting 2024-02-09 10:42:37 +02:00
GreenComfyTea 419d25070b Make keyboard.update() event-based 2024-02-09 10:42:21 +02:00
GreenComfyTea bee2e7d873 Update README.md 2024-01-27 13:43:29 +02:00
GreenComfyTea 9bcc1142f6 Update README.md 2024-01-22 20:23:21 +02:00
GreenComfyTea afec53e5f1 Bump version to 2.6.4 2024-01-22 19:38:42 +02:00
GreenComfyTea b3cfa61660 Buff UI -> Fix Rampage Skills filters not working 2024-01-22 19:38:11 +02:00
GreenComfyTea 2f10a5d9e5 Buff UI -> Fix Harvest Moon not getting cleared when the buff expires or when skill is switched 2024-01-22 19:37:42 +02:00
GreenComfyTea 0dc74d4cc9 Buff UI -> Clear buff data on error 2024-01-22 19:36:12 +02:00
GreenComfyTea 9b82e27725 Bump version to 2.6.3 2023-10-29 15:36:43 +02:00
GreenComfyTea 2a3c8106d5 Fix: Power Shealthe, Sonic Boom, Bead of Resonance 2023-10-29 15:36:26 +02:00
GreenComfyTea 3b89ce8303 Bump version to v2.6.2 2023-10-24 10:15:42 +03:00
GreenComfyTea f2e23626cf Fix creating DEFAULT file in /data/ when no config 2023-10-24 10:15:19 +03:00
GreenComfyTea 8a55873e14 Bump version to 2.6.1 2023-10-16 08:56:48 +03:00
GreenComfyTea b93bdd0338 Add Buff UI and Stats UI to Hotkeys
+ Fix a Bug when Removed Hotkey was not Saved in the Config
+ Allow Changing Selected Hotkey when Any Other Hotkey is Waiting for a Keypress
2023-10-16 08:55:46 +03:00
GreenComfyTea f01ec08990 Merge branch 'main' of https://github.com/GreenComfyTea/MHR-Overlay 2023-10-10 12:56:26 +03:00
GreenComfyTea b6ed4f036a Adjust Dragon Conversion Buff Names 2023-10-10 12:56:18 +03:00
GreenComfyTea fedf5bc7af Update README.md 2023-10-10 12:54:29 +03:00
GreenComfyTea 009eb9ffb0 Add Missing Might Seed Buff Filter 2023-10-10 12:30:19 +03:00
GreenComfyTea b8a7f109e0 Add Missing Falling Asleep Buff Filter 2023-10-10 12:28:25 +03:00
GreenComfyTea 51b824e385 Update README.md 2023-10-10 11:08:50 +03:00
GreenComfyTea c8bd65556e Fix Unicode Ranges 2023-10-10 10:57:07 +03:00
GreenComfyTea 0781662344 Update Unicode Ranges 2023-10-10 10:17:36 +03:00
GreenComfyTea 5bdcd1b9cf Update NotoSans-CJK Fonts to v2.004 2023-10-10 09:55:02 +03:00
GreenComfyTea 305a78b654 Add NotoSansArabic-Bold.otf Font 2023-10-10 09:30:38 +03:00
GreenComfyTea 6236c1e088 Add Missing NotoSans-Bold.otf Font 2023-10-10 09:28:41 +03:00
GreenComfyTea ba571b0426 Update ru-ru.json to v2.6 + Add Buff Include Name 2023-10-09 17:46:29 +03:00
GreenComfyTea 2c7c229ec9 Add ID to Endemic Life Name Label 2023-10-09 15:19:54 +03:00
GreenComfyTea 39dbd23791 Change Default Customization Menu Font Size to 16 2023-10-09 15:00:42 +03:00
GreenComfyTea 96407c07bf Bump version to v2.6 2023-10-09 14:59:21 +03:00
GreenComfyTea 1f3a7d2bf8 Use Buff Filter Name frrom Localization File
+ Sort Names in English + Use NotoSans-Bold as Default Font
2023-10-09 14:58:10 +03:00
GreenComfyTea 423635400c Implement Buff Customization by Type 2023-09-30 11:03:25 +03:00
GreenComfyTea 17b89d3d7f Fix Include -> Skill Level Not Working 2023-09-30 11:02:38 +03:00
GreenComfyTea c3d78705a3 Add Missing skill_level Translation String 2023-09-30 11:01:21 +03:00
GreenComfyTea 764b72f0ea Add buff types back 2023-09-30 10:06:04 +03:00
GreenComfyTea df43908a31 Add Option to Set Infinite Buffs Location 2023-09-26 14:02:48 +03:00
GreenComfyTea 0f72fba92d Remove debug data 2023-09-26 13:15:25 +03:00
GreenComfyTea e586534c4d Add Timer Delays Customization 2023-09-26 13:14:23 +03:00
GreenComfyTea 0951de24e2 Check for null in time.remove_delay_timer() 2023-09-26 11:32:18 +03:00
GreenComfyTea 480bc9c9b7 Add Buff Filters 2023-09-26 11:31:00 +03:00
GreenComfyTea cbaa537a0b Improve Error Reporting in the Main Loop Functions 2023-09-26 11:29:14 +03:00
GreenComfyTea c25ceee3d6 Blood Awakening: Remove Duration Pulling 2023-09-19 14:10:10 +03:00
GreenComfyTea 5a29b60fca Clean Up 2023-09-19 14:02:48 +03:00
GreenComfyTea 41f75d19d3 Refactor player_skill_list 2023-09-19 13:50:21 +03:00
GreenComfyTea 43b2946939 Set default Buff.update Timer to 0.5 2023-09-19 13:49:55 +03:00
GreenComfyTea 43fc14e01e Remove Pulling Duration for Some Buffs
Because only a few of the buff durations were found, I would prefer a simpler, more consistent and more performant code.
2023-09-19 13:47:24 +03:00
GreenComfyTea 66b192717c Misc Buffs: Move/Rename Immunizer to Natural Healing Up 2023-09-19 13:37:24 +03:00
GreenComfyTea bfd9463c9e Merge branch 'main' of https://github.com/GreenComfyTea/MHR-Overlay 2023-09-15 12:58:19 +03:00
GreenComfyTea ae336eea2f Weapon Skills: Add Arc Shot: Affinity and Arc Shot: Brace 2023-09-15 12:58:03 +03:00
GreenComfyTea 5454bdd48e Skills: Add Partbreaker 2023-09-15 12:57:11 +03:00
GreenComfyTea 80e309a5dd Abnormal Statuses: Fix Error Message 2023-09-15 12:56:41 +03:00
GreenComfyTea f1102eaa28 Endemic Life Buffs: Add Red and Yellow Lampsquids 2023-09-15 12:55:32 +03:00
GreenComfyTea bd02dab872 Fix dango_skills error message 2023-09-15 12:54:59 +03:00
GreenComfyTea 8887f3c235 Rename consumables to item_buffs 2023-09-15 12:54:03 +03:00
GreenComfyTea 5177a207a9 Update README.md 2023-09-14 18:54:05 +03:00
GreenComfyTea 50131b08f1 Remove Kushala Daora Soul string 2023-09-06 16:31:54 +03:00
GreenComfyTea 89bb48602d language.lua upd 2023-09-06 16:31:10 +03:00
GreenComfyTea 1580b4c4c2 Add Embolden, Berserk, Powder Mantle, Strife, Inspiration, Blood Awakening Skills, move Kushala Daora Soul to Rampage Skills 2023-09-06 16:30:54 +03:00
GreenComfyTea 5c42502700 Remove Might/Adamant Seeds (covered by Attack/Defense Up) and Dash Juice(covered by Stamina Use Down) 2023-09-06 16:29:56 +03:00
GreenComfyTea d7a4450a37 Add Stinkmink, remove Peepersects (covered by Stamina Use Down) 2023-09-06 16:28:48 +03:00
GreenComfyTea 590b3b17c2 Remove Dango Bulker (covered by Attack Up) 2023-09-06 16:27:17 +03:00
GreenComfyTea e20af6479e Move Attack Up, Defense Up, Stamina Use Down to Misc Buffs 2023-09-06 16:26:55 +03:00
GreenComfyTea 6bab1b2435 Add Rampage Skills to Update Function 2023-09-06 16:26:08 +03:00
GreenComfyTea 195252ed70 Abnormal Statuses: Add Falling Asleep 2023-09-06 16:25:09 +03:00
GreenComfyTea b9a3088658 Add Rampage Skills 2023-09-06 16:24:17 +03:00
GreenComfyTea a8060c8c58 Rename "Dangos" to "Dango Skills" 2023-09-05 15:03:53 +03:00
GreenComfyTea 49cac58bec Dangos: Add Dango Insurance 2023-09-05 14:19:02 +03:00
GreenComfyTea af53399c50 Add Dango Flyer, Dango Connector and Super Recovery Dango 2023-09-04 10:43:52 +03:00
GreenComfyTea a418bb0132 Fix Dango Insurance Defense Up Lv.4 showing all the time 2023-09-04 09:29:30 +03:00
GreenComfyTea 5f609a588a Dangos: Add Dango Insurance Defense Up, Dango Hunter and Dango Connector 2023-09-03 15:53:11 +03:00
GreenComfyTea 8fb02699cc Fix init_names() 2023-09-03 14:16:32 +03:00
GreenComfyTea b52c903af3 Fix Errors from Previous Commit 2023-09-03 13:58:52 +03:00
GreenComfyTea 8ae3928fdc Pull Most Buff Name from the Game
+ Solve Consumable Buff Timer Collisions
2023-09-03 13:36:03 +03:00
GreenComfyTea bf282ca13b Weapon Skills: Add All Weapons 2023-08-25 15:10:15 +03:00
GreenComfyTea c7b9e5b8f9 Skills: Add Bladescale Hone 2023-08-25 15:09:21 +03:00
GreenComfyTea e67fbf923f Refactoring 2023-08-21 17:29:57 +03:00
GreenComfyTea 1d31a86a3f Cache mValues of ValTypes (Single) 2023-08-21 17:29:16 +03:00
GreenComfyTea e4108f7fa9 Add Weapon Skills (Great Sword, Switch Axe, Long Sword) 2023-08-21 17:28:36 +03:00
GreenComfyTea 4ede59c8c2 Cache mValue field of ValTypes (Int32 and Single) 2023-08-21 17:25:39 +03:00
GreenComfyTea 2db41e237f utils.type: Add is_boolean(), is_REField(), is_REMethodDefinition() 2023-08-21 17:25:07 +03:00
GreenComfyTea f9c1d89843 Fix Endemic Life UI not showing 2023-08-20 16:15:25 +03:00
GreenComfyTea f086ff2d5d Endemic Life Buffs: Add Ruby and Gold Wirebugs 2023-08-20 16:15:00 +03:00
GreenComfyTea 5e5df84308 Otomo Moves: Add Power Drum and Go, Fight, Win 2023-08-20 16:14:19 +03:00
GreenComfyTea 528d7f7238 Skills: Add Status Trigger 2023-08-20 16:13:49 +03:00
GreenComfyTea 1c83b282ef Update Otomo Entity when Swapping Otomos 2023-08-20 13:29:33 +03:00
GreenComfyTea a41ec08903 Skills: +Peak Performance, Dragonheart, Resentment 2023-08-20 13:27:24 +03:00
GreenComfyTea 89571bd2f4 Buff UI: Add Otomo Moves 2023-08-20 13:26:34 +03:00
GreenComfyTea 1fcb9aea5a Dangos: Add Dango Adrenaline, Fix Dango Defender 2023-08-20 13:26:09 +03:00
GreenComfyTea 13e68d67a9 Stats UI: Add Health and Max Health 2023-08-20 10:48:25 +03:00
GreenComfyTea 67e0e6db6b Update Highlighted Monster every frame 2023-08-20 09:29:50 +03:00
GreenComfyTea e79660010b Don't display Monster Size if 0 2023-08-20 09:29:30 +03:00
GreenComfyTea c597d1df09 Skills: Add Maximum Might, Bloodlust, Frenzied Bloodlust 2023-08-19 16:17:03 +03:00
GreenComfyTea bcb6355b61 Add remove_delay_timer() 2023-08-19 16:15:48 +03:00
GreenComfyTea 4f5350b631 Abnormal Statuses: Add Deadly Poison, Minor/Major Bubbleblight 2023-08-19 16:15:16 +03:00
GreenComfyTea 475cd22610 Remember Customization Open/Closed State per Session Only 2023-08-18 13:00:00 +03:00
GreenComfyTea a33b196521 Update Large Monster Health when Host on Player Join but it actually works 2023-08-18 10:27:36 +03:00
GreenComfyTea d5b83eef2a Fix typo 2023-08-18 10:26:49 +03:00
GreenComfyTea 2efdbd5f1a Implement Delay Timers 2023-08-17 12:28:12 +03:00
GreenComfyTea 5125de6701 Fix 2nd buddy appearing on online quests 2023-08-17 12:19:38 +03:00
GreenComfyTea 1c9eff6b06 Update Large Monster Health when Host on Player Join? 2023-08-17 12:18:55 +03:00
GreenComfyTea 6456e3bfaf formatting 2023-08-17 12:17:41 +03:00
GreenComfyTea f23cce3ba1 Formatting 2023-08-17 09:56:27 +03:00
GreenComfyTea 6528394876 Add Missing Highlighted Cart Count Label Customization 2023-08-17 09:53:19 +03:00
GreenComfyTea fcfdb33dbf Fix Highlighted Cart Count Label not working 2023-08-17 09:52:48 +03:00
GreenComfyTea 6f742d3234 Use in-game _DieCount instead of Manual Counting 2023-08-17 09:48:24 +03:00
GreenComfyTea 64130aa68c Formatting 2023-08-17 09:47:09 +03:00
GreenComfyTea 1f0cd6e883 Fix Abnormal Statuses showing trash values when teleporting to Training Area 2023-08-16 13:53:34 +03:00
GreenComfyTea 2d669a6c4a Stop using d2d.surface_size() 2023-08-16 12:36:48 +03:00
GreenComfyTea 2d77b78a1c Add more Singletons existence verifications 2023-08-16 12:34:17 +03:00
GreenComfyTea aac30e7a08 Fix Damage Meter UI bugs
when Hide Total Damage was hiding whole module instead
2023-08-16 12:21:22 +03:00
GreenComfyTea f2675e6d23 Move players.display_list to damage_meter_UI 2023-08-16 11:41:20 +03:00
GreenComfyTea 5ff6af9108 Move update_quest_time timer to init_global_timers 2023-08-16 10:32:43 +03:00
GreenComfyTea 728b7f990f Move timers initializations into time.lua 2023-08-16 10:30:59 +03:00
GreenComfyTea 758a02bce8 Add Stats UI 2023-08-15 16:02:01 +03:00
GreenComfyTea 9d16048c8d Move logic out from REF D2D loop callback 2023-08-11 16:10:19 +03:00
GreenComfyTea 084dd9667e Abnormal Statuses: Implemented 2023-08-10 16:52:47 +03:00
GreenComfyTea c509876712 Skills: Refactoring + Added Heroics, Resuscitate 2023-08-10 16:51:34 +03:00
GreenComfyTea 7b63e34ad0 Melody Effects: Use key if missing name 2023-08-10 16:50:19 +03:00
GreenComfyTea c6a520996f Dangos: Use key if missing name 2023-08-10 16:49:58 +03:00
GreenComfyTea f6fefb19d4 Consumables: Formatting + Use key if missing name 2023-08-10 16:49:42 +03:00
GreenComfyTea 1c20591b33 Fix Total Damage registering too large values 2023-08-10 16:48:41 +03:00
GreenComfyTea 3e66b920ef Skills: Add more skills
+ Latent Power, Protective Polish, Wind Mantle, Heaven-Sent, Grinder (S), Counterstrike, Affinity Sliding, Coalescence, Adrenaline Rush, Wall Runner, Offensive Guard, Hellfire Cloak, Agitator, Furious.
2023-08-09 16:11:53 +03:00
GreenComfyTea 7f38532026 Buffs: Use default values 2023-08-09 16:09:13 +03:00
GreenComfyTea b805d88205 Change default values 2023-08-09 16:08:27 +03:00
GreenComfyTea a100932a02 Melody Effects: move individual melody effect update into separate function 2023-08-09 16:07:53 +03:00
GreenComfyTea 692e911617 Consumables: Refactor most individual methods into 1 universal method 2023-08-09 16:06:51 +03:00
GreenComfyTea 6c2d09b505 Add some dangos, skills and endemic life buffs 2023-08-08 16:23:17 +03:00
GreenComfyTea 26966818b3 Dont update buffs if buff UI is disabled 2023-08-08 13:05:05 +03:00
GreenComfyTea e09c82278d Optimize small monster UI drawing function 2023-08-08 13:04:40 +03:00
GreenComfyTea e1d3754733 Fix is_health_initialized variable not being set to true 2023-08-08 12:24:33 +03:00
GreenComfyTea 6b8809b79e Add more quest_status restrictions 2023-08-06 16:20:15 +03:00
GreenComfyTea d20446fe37 Change default customization menu window height 2023-08-06 16:08:35 +03:00
GreenComfyTea 4e4aae3c68 Update localizations 2023-08-06 16:08:06 +03:00
GreenComfyTea 3e121fbd1c Add Customization Menu status, position and size to config
+ Customization Menu bugfixes
2023-08-06 15:57:48 +03:00
GreenComfyTea ade8a6bf19 Formatting 2023-08-06 14:43:41 +03:00
GreenComfyTea 0eac453bf4 Add some quest_status restrictions 2023-08-06 14:27:23 +03:00
GreenComfyTea c4b7f6d195 Fix Health access attempts outside hooks
(large monster updated in previous commit)
2023-08-06 14:26:59 +03:00
GreenComfyTea e389f6cf53 Remove magical numbers of stealth monster ids + process toadversary properly + Fix Crown Threshold Typo 2023-08-06 14:25:22 +03:00
GreenComfyTea 9e8c77f480 Singletons are not real singletons so track changes 2023-08-06 13:25:05 +03:00
GreenComfyTea 9c2bc59a37 Undo previous commit 2023-08-06 12:24:08 +03:00
GreenComfyTea effe5579a7 Move env.creature.update_position to draw function 2023-08-06 12:22:09 +03:00
GreenComfyTea 0fbf47f7ff comment out monster update_position 2023-08-06 12:18:02 +03:00
GreenComfyTea 3e508c0e28 Move highlight_id to large_monster from draw function 2023-08-06 12:17:06 +03:00
GreenComfyTea 972d874a99 Clean up 2023-08-06 12:15:42 +03:00
GreenComfyTea 50726b9291 Init Singletons on init_module 2023-08-06 12:15:25 +03:00
GreenComfyTea c39e5babea Rename list to array 2023-08-06 12:14:59 +03:00
GreenComfyTea d1f56f4316 Ignore error during REFramework Initialization 2023-08-06 12:14:34 +03:00
GreenComfyTea d3efcb5b08 Typo 2023-08-06 12:14:13 +03:00
GreenComfyTea 681b865f03 Create missing small monster entries in draw function 2023-08-06 12:13:48 +03:00
GreenComfyTea 6f40a1dfd3 Update localizations 2023-08-06 12:13:12 +03:00
GreenComfyTea 432e115aea Fix fake error when assigning creature name 2023-08-06 12:12:41 +03:00
GreenComfyTea dfb7893c1a Implement Error Handler 2023-08-05 16:30:15 +03:00
GreenComfyTea 4bdb4ee2e6 Separate Dependency Initializations 2023-08-05 11:24:26 +03:00
GreenComfyTea 30672922c4 Add callback timers 2023-08-05 10:50:36 +03:00
GreenComfyTea 31b5251c75 Fix Follower Otomo Percentage DMG being incorrectly formatted 2023-08-04 19:36:18 +03:00
GreenComfyTea 71b1992710 Add Horn Melody Effects to Buff UI 2023-08-04 19:35:25 +03:00
GreenComfyTea 63ddbff12a Fix Consumable Buff UI not working in online request if not host 2023-08-03 12:21:17 +03:00
GreenComfyTea 0359042c97 Fix Buff timers showing xx:60 sometimes 2023-08-03 12:20:36 +03:00
GreenComfyTea c8dab31265 Add back(?) label include customization code 2023-08-03 12:20:08 +03:00
GreenComfyTea 405c5e4aad Fix continue labels ambiguity 2023-08-03 12:19:41 +03:00
GreenComfyTea 597d27b935 Uncomment Buff UI code 2023-08-03 12:19:13 +03:00
GreenComfyTea 90190f5af7 Implement Consumable Buffs 2023-06-30 18:57:14 +03:00
GreenComfyTea b5757e3b1e Fix hotkeys not saving 2023-06-30 13:58:05 +03:00
GreenComfyTea 0992b918a3 Update README.md 2023-06-14 17:36:16 +03:00
GreenComfyTea 7865b3276c Update README.md 2023-06-14 17:07:58 +03:00
GreenComfyTea cc1fe03272 Update README.md 2023-06-11 13:07:27 +03:00
GreenComfyTea 57585cb5b5 Update README.md 2023-06-11 12:59:11 +03:00
GreenComfyTea 96563f92f7 Update README.md 2023-06-11 12:51:08 +03:00
GreenComfyTea ea29e20a2c Update README.md 2023-06-10 20:39:20 +03:00
GreenComfyTea 0a84471abc Update README.md 2023-06-10 18:49:22 +03:00
GreenComfyTea da2af8671a Update README.md 2023-06-10 18:47:56 +03:00
GreenComfyTea 474d0b9eb8 Update README.md 2023-06-10 18:45:12 +03:00
GreenComfyTea e4057b84f5 Update README.md 2023-06-10 18:38:57 +03:00
GreenComfyTea 3ac048aef9 Update README.md 2023-06-10 18:29:22 +03:00
GreenComfyTea 9c3085198d Update README.md 2023-06-10 18:26:27 +03:00
GreenComfyTea ecf119dd97 Update README.md 2023-06-10 17:48:58 +03:00
GreenComfyTea 663b456a4f Fix Total Cart Count showing lower value by 1 2023-06-10 14:20:11 +03:00
GreenComfyTea e571ca62eb Update README.md 2023-06-10 09:38:35 +03:00
GreenComfyTea 3b99512bb6 Merge branch 'main' of https://github.com/GreenComfyTea/MHR-Overlay 2023-06-10 09:34:51 +03:00
GreenComfyTea 0fe53700ae Update ko-kr localization to v2.5 2023-06-10 09:34:44 +03:00
GreenComfyTea 488da17887 Merge pull request #65 from sukiqwq/main 2023-06-09 09:33:35 +03:00
RqLiu 25d0035c16 Update zh-cn.json 2023-06-09 02:56:22 +08:00
RqLiu 34ac9e3c54 Update zh-cn.json 2023-06-09 02:54:51 +08:00
RqLiu ce212ff757 Update zh-cn.json 2023-06-09 02:51:48 +08:00
81 changed files with 14765 additions and 1772 deletions
+144 -22
View File
@@ -1,10 +1,130 @@
# "MHR Overlay" Mod for Monster Hunter: Rise
<p align="center">
<h2 align="center"><b>"MHR Overlay" Mod for Monster Hunter: Rise</b></h2>
<p align="center">Exposes internal game data about monsters, creatures, players, damage, buffs and debuffs. Draws a highly customizable UI.</p>
<p align="center">This mod is solely intended to empower players with means of self-improvement. Please don't use the information provided by this tool to make hurtful comments and actions toward other players.</p>
</p>
Exposes in-game data about monsters, creatures, players and damage. Draws a highly customizable UI.
<p align="center">
<a href="https://github.com/greencomfytea/mhr-overlay/graphs/contributors">
<img alt="Contributors" src="https://custom-icon-badges.demolab.com/github/contributors/greencomfytea/mhr-overlay?logo=person-add" />
</a>
<a href="https://github.com/greencomfytea/mhr-overlay/issues">
<img alt="Issues" src="https://custom-icon-badges.demolab.com/github/issues/greencomfytea/mhr-overlay?logo=issue-opened" />
</a>
<a href="https://github.com/greencomfytea/mhr-overlay/issues">
<img alt="Issues Closed" src="https://custom-icon-badges.demolab.com/github/issues-closed/greencomfytea/mhr-overlay?logo=issue-closed" />
</a>
<a href="https://github.com/greencomfytea/mhr-overlay/pulls">
<img alt="Pull Requests" src="https://custom-icon-badges.demolab.com/github/issues-pr/greencomfytea/mhr-overlay?logo=git-pull-request" />
</a>
<a href="https://github.com/greencomfytea/mhr-overlay/pulls">
<img alt="Pull Requests Closed" src="https://custom-icon-badges.demolab.com/github/issues-pr-closed/greencomfytea/mhr-overlay?logo=git-pull-request-closed" />
</a>
<br>
<a href="https://github.com/greencomfytea/mhr-overlay/blob/main/LICENSE">
<img alt="License" src="https://custom-icon-badges.demolab.com/github/license/greencomfytea/mhr-overlay?logo=law" />
</a>
<a href="https://github.com/greencomfytea/mhr-overlay/releases">
<img alt="Release Version" src="https://custom-icon-badges.demolab.com/github/v/release/greencomfytea/mhr-overlay?logo=tag" />
</a>
<a href="https://github.com/greencomfytea/mhr-overlay/releases">
<img alt="Release Date" src="https://custom-icon-badges.demolab.com/github/release-date/greencomfytea/mhr-overlay?logo=clock" />
</a>
<a href="">
<img alt="Platform" src="https://custom-icon-badges.demolab.com/badge/platform-win%20%7C%20linux%20%7C%20steam%20deck-blue?logo=device-desktop" />
</a>
<a href="">
<img alt="Maintenance" src="https://custom-icon-badges.demolab.com/maintenance/yes/2024?logo=tools" />
</a>
<br>
<a href="https://www.nexusmods.com/monsterhunterrise/mods/26">
<img alt="REFramework Dependency" src="https://custom-icon-badges.demolab.com/badge/dependency-REFramework%20v1.5.7%2B-green?logo=package-dependencies" />
</a>
<a href="https://www.nexusmods.com/monsterhunterrise/mods/134">
<img alt="REFramework Direct2D Dependency" src="https://custom-icon-badges.demolab.com/badge/dependency-REFramework%20Direct2D%20v1.0.1%2B-green?logo=package-dependencies" />
</a>
<br>
<br>
<a href="https://github.com/greencomfytea/mhr-overlay/commits/main">
<img alt="Commits" src="https://custom-icon-badges.demolab.com/github/commit-activity/t/greencomfytea/mhr-overlay?logo=git-commit" />
</a>
<a href="https://github.com/greencomfytea/mhr-overlay/commits/main">
<img alt="Last Commit" src="https://custom-icon-badges.demolab.com/github/last-commit/greencomfytea/mhr-overlay?logo=git-commit" />
</a>
<a href="https://github.com/greencomfytea/mhr-overlay/commits/main">
<img alt="Commits Since" src="https://custom-icon-badges.demolab.com/github/commits-since/greencomfytea/mhr-overlay/latest?logo=git-commit" />
</a>
<br>
<a href="https://github.com/greencomfytea/mhr-overlay/graphs/commit-activity">
<img alt="Commit Activity (Year)" src="https://custom-icon-badges.demolab.com/github/commit-activity/y/greencomfytea/mhr-overlay?logo=pulse" />
</a>
<a href="https://github.com/greencomfytea/mhr-overlay/graphs/commit-activity">
<img alt="Commit Activity (Month)" src="https://custom-icon-badges.demolab.com/github/commit-activity/m/greencomfytea/mhr-overlay?logo=pulse" />
</a>
<a href="https://github.com/greencomfytea/mhr-overlay/graphs/commit-activity">
<img alt="Commit Activity (Week)" src="https://custom-icon-badges.demolab.com/github/commit-activity/w/greencomfytea/mhr-overlay?logo=pulse" />
</a>
<br>
<br>
<a href="">
<img alt="Repo Size" src="https://custom-icon-badges.demolab.com/github/repo-size/greencomfytea/mhr-overlay?logo=database" />
</a>
<a href="">
<img alt="Line Count" src="https://sloc.xyz/github/greencomfytea/mhr-overlay" />
</a>
<a href="">
<img alt="COCOMO" src="https://sloc.xyz/github/greencomfytea/mhr-overlay/?category=cocomo" />
</a>
<a href="">
<img alt="Goto Counter" src="https://custom-icon-badges.demolab.com/github/search/greencomfytea/mhr-overlay/goto?logo=git-compare" />
</a>
<br>
<a href="https://github.com/sponsors/greencomfytea">
<img alt="Sponsors" src="https://custom-icon-badges.demolab.com/github/sponsors/greencomfytea?logo=heart" />
</a>
<a href="https://github.com/GreenComfyTea/mhr-overlay/watchers">
<img alt="Watchers" src="https://custom-icon-badges.demolab.com/github/watchers/greencomfytea/mhr-overlay?logo=eye" />
</a>
<a href="https://github.com/greencomfytea/mhr-overlay/forks">
<img alt="Forks" src="https://custom-icon-badges.demolab.com/github/forks/greencomfytea/mhr-overlay?logo=repo-forked" />
</a>
<a href="https://github.com/greencomfytea/mhr-overlay/stargazers">
<img alt="Stars" src="https://custom-icon-badges.demolab.com/github/stars/greencomfytea/mhr-overlay?logo=star" />
</a>
<a href="https://github.com/greencomfytea/mhr-overlay/graphs/traffic">
<img alt="Hits" src="https://custom-icon-badges.demolab.com/endpoint?url=https://hits.dwyl.com/greencomfytea/mhr-overlay.json?color=blue&logo=eye" />
</a>
<br>
<br>
<a href="https://www.nexusmods.com/monsterhunterrise/mods/50">
<img alt="Website" src="https://custom-icon-badges.demolab.com/website?down_color=red&down_message=down&up_color=brightgreen&up_message=up&logo=link&url=https://www.nexusmods.com/monsterhunterrise/mods/50" />
</a>
<a href="https://github.com/greencomfytea?tab=followers">
<img alt="Followers" src="https://custom-icon-badges.demolab.com/github/followers/greencomfytea?logo=people" />
</a>
<a href="https://twitter.com/greencomfytea">
<img alt="Twitter" src="https://img.shields.io/twitter/follow/greencomfytea?logo=twitter" />
</a>
<a href="https://www.twitch.tv/greencomfytea">
<img alt="Twitch" src="https://img.shields.io/twitch/status/greencomfytea?logo=twitch" />
</a>
<br>
<a href="https://github.com/greencomfytea">
<img alt="Author" src="https://custom-icon-badges.demolab.com/badge/author-GreenComfyTea-green?logo=person" />
</a>
<a href="https://github.com/topics/open-source">
<img alt="Open Source" src="https://img.shields.io/badge/open%20source-%20yes-brightgreen?logo=openvpn" />
</a>
<a href="https://cursey.github.io/reframework-book/index.html#lua-scripting">
<img alt="Written in" src="https://custom-icon-badges.demolab.com/badge/written in-lua-000080?logo=terminal" />
</a>
</p>
**This mod is solely intended to empower players with means of self-improvement. Please don't use the information provided by this tool to make hurtful comments and actions toward other players.**
![50-1659789731-551420562](https://user-images.githubusercontent.com/30152047/183250401-9f2898dd-feb4-4903-802c-c9d398261f11.png)
<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,33 +135,36 @@ 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)** (v1.0.0+) - Needed for Unicode Support.
# How to install:
1. Install [REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26);
2. Install [REFramework Direct2D](https://www.nexusmods.com/monsterhunterrise/mods/134);
1. Install **[REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26)**;
2. Install **[REFramework Direct2D](https://www.nexusmods.com/monsterhunterrise/mods/134)**;
>**:pushpin: Windows:** Works normally.
>**:pushpin: Linux:** Latest Experimental Proton seems to have it working normally as well (https://github.com/cursey/reframework-d2d/issues/5).
>**:pushpin: Steam Deck:** I've seen people getting it working but I don't have the exact instructions. You will have to figure it out yourself and/or search the nexus pages for information ([REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26?tab=description), [REFramework Direct2D](https://www.nexusmods.com/monsterhunterrise/mods/134), [MHR Overlay](https://www.nexusmods.com/monsterhunterrise/mods/50)).
>**:pushpin: Steam Deck:** I've seen people getting it working but I don't have the exact instructions. You will have to figure it out yourself and/or search the nexus pages for information (**[REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26?tab=description)**, **[REFramework Direct2D](https://www.nexusmods.com/monsterhunterrise/mods/134)**, **[MHR Overlay](https://www.nexusmods.com/monsterhunterrise/mods/50)**).
3. Download the mod:
* Official release can be downloaded from [Nexus Mods](https://www.nexusmods.com/monsterhunterrise/mods/50);
* Nightly builds are available in [this repo](https://github.com/GreenComfyTea/MHR-Overlay) and can contain broken functionality, debugging info on screen, bugs and might require the latest [nightly build](https://github.com/praydog/REFramework-nightly/releases) of [REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26). Use with caution!
4. Extract the mod from the archive and place it in MonsterHunterRise folder. Refer to [FAQ](https://github.com/GreenComfyTea/MHR-Overlay/wiki/FAQ) to verify how the file hierarchy should look like if everything is done correctly.
* Official release can be downloaded from **[Nexus Mods](https://www.nexusmods.com/monsterhunterrise/mods/50)**;
* Nightly builds are available in **[this repo](https://github.com/GreenComfyTea/MHR-Overlay)** and can contain broken functionality, debugging info on screen, bugs and might require the latest **[nightly build](https://github.com/praydog/REFramework-nightly/releases)** of **[REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26)**. Use with caution!
4. Extract the mod from the archive and place it in MonsterHunterRise folder. Refer to **[FAQ](https://github.com/GreenComfyTea/MHR-Overlay/wiki/FAQ)** to verify how the file hierarchy should look like if everything is done correctly.
# Credits
**GreenComfyTea** - creator of the mod and it's main contributor.
**cursecat** - creator of [REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26), [REFramework Direct2D](https://www.nexusmods.com/monsterhunterrise/mods/134) plugin and [Monster Has HP Bar](https://www.nexusmods.com/monsterhunterrise/mods/43) mod, which provided an example on how to retrieve monster HP data.
**praydog2** - creator of [REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26). Contributed huge improvements to the performance of the mod.
**coavins** - creator of [coavins damage meter](https://www.nexusmods.com/monsterhunterrise/mods/68) mod.
**[GreenComfyTea](https://github.com/GreenComfyTea)** - creator of the mod and it's main contributor.
**[cursey](https://github.com/cursey)** - creator of [REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26), [REFramework Direct2D](https://www.nexusmods.com/monsterhunterrise/mods/134) plugin and [Monster Has HP Bar](https://www.nexusmods.com/monsterhunterrise/mods/43) mod, which provided an example on how to retrieve monster HP data.
**[praydog](https://github.com/praydog)** - creator of [REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26). Contributed huge improvements to the performance of the mod.
**[coavins](https://github.com/coavins)** - creator of [coavins damage meter](https://www.nexusmods.com/monsterhunterrise/mods/68) mod.
**[lingsamuel](https://github.com/lingsamuel)** - creator of [Data Reporter and Buff Notification](https://www.nexusmods.com/monsterhunterrise/mods/1609) mod.
**neatnet** - Korean translation.
**s9000008, mcc1** - Traditional Chinese translation.
**etnAtker**, **sukiqwq** - Simplified Chinese translation.
**AKILAND0214** - Japanese translation.
**[neatnet](https://github.com/neatnet)** - Korean translation.
**[s9000008](https://github.com/s9000008)**, **[mcc1](https://github.com/mcc1)** - Traditional Chinese translation.
**[etnAtker](https://github.com/etnAtker)**, **[sukiqwq](https://github.com/sukiqwq)** - Simplified Chinese translation.
**[AKILAND0214](https://github.com/AKILAND0214)** - Japanese translation.
**[Krude](https://github.com/Krude)** - German translation.
**[LLDan](https://www.nexusmods.com/profile/LLDan)** - Spanish translation.
***
# Support
@@ -53,4 +176,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>
+332 -97
View File
@@ -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 item_buffs = require("MHR_Overlay.Buffs.item_buffs");
local melody_effects = require("MHR_Overlay.Buffs.melody_effects");
local endemic_life_buffs = require("MHR_Overlay.Buffs.endemic_life_buffs");
local skills = require("MHR_Overlay.Buffs.skills");
local dango_skills = require("MHR_Overlay.Buffs.dango_skills");
local abnormal_statuses = require("MHR_Overlay.Buffs.abnormal_statuses");
local otomo_moves = require("MHR_Overlay.Buffs.otomo_moves");
local weapon_skills = require("MHR_Overlay.Buffs.weapon_skills");
local rampage_skills = require("MHR_Overlay.Buffs.rampage_skills");
local misc_buffs = require("MHR_Overlay.Buffs.misc_buffs");
local players = require("MHR_Overlay.Damage_Meter.players");
local non_players = require("MHR_Overlay.Damage_Meter.non_players");
@@ -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();
item_buffs.init_dependencies();
melody_effects.init_dependencies();
endemic_life_buffs.init_dependencies();
skills.init_dependencies();
dango_skills.init_dependencies();
abnormal_statuses.init_dependencies();
otomo_moves.init_dependencies();
weapon_skills.init_dependencies();
rampage_skills.init_dependencies();
misc_buffs.init_dependencies();
damage_hook.init_dependencies();
players.init_dependencies();
non_players.init_dependencies();
quest_status.init_dependencies();
env_creature_hook.init_dependencies();
env_creature.init_dependencies();
body_part.init_dependencies();
ailments.init_dependencies();
large_monster.init_dependencies();
monster_hook.init_dependencies();
small_monster.init_dependencies();
ailment_hook.init_dependencies();
ailment_buildup.init_dependencies();
label_customization.init_dependencies();
bar_customization.init_dependencies();
line_customization.init_dependencies();
large_monster_UI_customization.init_dependencies();
label_customization.init_dependencies();
bar_customization.init_dependencies();
health_customization.init_dependencies();
stamina_customization.init_dependencies();
rage_customization.init_dependencies();
body_parts_customization.init_dependencies();
ailments_customization.init_dependencies();
ailment_buildups_customization.init_dependencies();
module_visibility_customization.init_dependencies();
customization_menu.init_dependencies();
drawing.init_dependencies();
damage_meter_UI.init_dependencies();
large_monster_UI.init_dependencies();
small_monster_UI.init_dependencies();
time_UI.init_dependencies();
env_creature_UI.init_dependencies();
buff_UI.init_dependencies();
stats_UI.init_dependencies();
keyboard.init_dependencies();
------------------------------------------------------------
error_handler.init_module();
language.init_module();
config.init_module();
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();
item_buffs.init_module();
melody_effects.init_module();
endemic_life_buffs.init_module();
skills.init_module();
dango_skills.init_module();
abnormal_statuses.init_module();
otomo_moves.init_module();
weapon_skills.init_module();
rampage_skills.init_module();
misc_buffs.init_module();
damage_hook.init_module();
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,126 +270,254 @@ log.info("[MHR Overlay] Loaded.");
----------------------------LOOP-----------------------------
-- #region
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);
local function update_modules(module_visibility_config, flow_state_name)
local current_config = config.current_config;
if module_visibility_config.small_monster_UI and current_config.small_monster_UI.enabled then
local success, error = pcall(small_monster_UI.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: %s", flow_state_name, tostring(error)));
end
end
local large_monster_UI_config = config.current_config.large_monster_UI;
local large_monster_UI_config = current_config.large_monster_UI;
local dynamic_enabled = large_monster_UI_config.dynamic.enabled and
module_visibility_config.large_monster_dynamic_UI;
local static_enabled = large_monster_UI_config.static.enabled and
module_visibility_config.large_monster_static_UI;
local highlighted_enabled = large_monster_UI_config.highlighted.enabled and
module_visibility_config.large_monster_highlighted_UI;
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);
local success, error = pcall(large_monster_UI.update, 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.update_modules", string.format("[%s] Large Monster UI: %s", flow_state_name, tostring(error)));
end
end
if config.current_config.time_UI.enabled and module_visibility_config.time_UI then
local success = pcall(time_UI.draw);
if current_config.damage_meter_UI.enabled and module_visibility_config.damage_meter_UI then
local success, error = pcall(damage_meter_UI.update);
if not success then
customization_menu.status = string.format("[%s] Time UI Drawing Function threw an Exception", flow_state_name);
error_handler.report("MHR_Overlay.update_modules", string.format("[%s] Damage Meter UI: %s", flow_state_name, tostring(error)));
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 current_config.endemic_life_UI.enabled and module_visibility_config.endemic_life_UI then
local success, error = pcall(env_creature_UI.update);
if not success then
customization_menu.status = string.format("[%s] Damage Meter UI Drawing Function threw an Exception", flow_state_name);
error_handler.report("MHR_Overlay.update_modules", string.format("[%s] Endemic Life UI: %s", flow_state_name, tostring(error)));
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 current_config.buff_UI.enabled and module_visibility_config.buff_UI then
local success, error = pcall(buff_UI.update);
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.update_modules", string.format("[%s] Buff UI: %s", flow_state_name, tostring(error)));
end
end
--[[if config.current_config.buff_UI.enabled and module_visibility_config.buff_UI then
local success = truepcall(buff_UI.draw);
if not success then
customization_menu.status = string.format("[%s] Buff UI Drawing 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();
local function draw_modules(module_visibility_config, flow_state_name)
local current_config = config.current_config;
if quest_status.flow_state == quest_status.flow_states.IN_TRAINING_AREA then
if module_visibility_config.small_monster_UI and current_config.small_monster_UI.enabled then
local success, error = pcall(small_monster_UI.draw);
if not success then
error_handler.report("MHR_Overlay.draw_modules", string.format("[%s] Small Monster UI: %s", flow_state_name, tostring(error)));
end
end
local large_monster_UI_config = config.current_config.large_monster_UI;
local module_visibility_config = config.current_config.global_settings.module_visibility.in_training_area;
local large_monster_UI_config = current_config.large_monster_UI;
local dynamic_enabled = large_monster_UI_config.dynamic.enabled and module_visibility_config.large_monster_dynamic_UI;
local static_enabled = large_monster_UI_config.static.enabled and module_visibility_config.large_monster_static_UI;
local highlighted_enabled = large_monster_UI_config.highlighted.enabled and module_visibility_config.large_monster_highlighted_UI;
local dynamic_enabled = large_monster_UI_config.dynamic.enabled and module_visibility_config.large_monster_dynamic_UI;
local static_enabled = large_monster_UI_config.static.enabled and module_visibility_config.large_monster_static_UI;
local highlighted_enabled = large_monster_UI_config.highlighted.enabled and module_visibility_config.large_monster_highlighted_UI;
if dynamic_enabled or static_enabled or highlighted_enabled then
local success, error = pcall(large_monster_UI.draw, dynamic_enabled, static_enabled, highlighted_enabled);
if not success then
error_handler.report("MHR_Overlay.draw_modules", string.format("[%s] Large Monster UI: %s", flow_state_name, tostring(error)));
end
end
if current_config.time_UI.enabled and module_visibility_config.time_UI then
local success, error = pcall(time_UI.draw);
if not success then
error_handler.report("MHR_Overlay.draw_modules", string.format("[%s] Time UI: %s", flow_state_name, tostring(error)));
end
end
if current_config.damage_meter_UI.enabled and module_visibility_config.damage_meter_UI then
local success, error = pcall(damage_meter_UI.draw);
if not success then
error_handler.report("MHR_Overlay.draw_modules", string.format("[%s] Damage Meter UI: %s", flow_state_name, tostring(error)));
end
end
if current_config.endemic_life_UI.enabled and module_visibility_config.endemic_life_UI then
local success, error = pcall(env_creature_UI.draw);
if not success then
error_handler.report("MHR_Overlay.draw_modules", string.format("[%s] Endemic Life UI: %s", flow_state_name, tostring(error)));
end
end
if current_config.buff_UI.enabled and module_visibility_config.buff_UI then
local success, error = pcall(buff_UI.draw);
if not success then
error_handler.report("MHR_Overlay.draw_modules", string.format("[%s] Buff UI: %s", flow_state_name, tostring(error)));
end
end
if current_config.stats_UI.enabled and module_visibility_config.stats_UI then
local success, error = pcall(stats_UI.draw);
if not success then
error_handler.report("MHR_Overlay.draw_modules", string.format("[%s] Stats UI: %s", flow_state_name, tostring(error)));
end
end
end
local function update_UI()
local current_config = config.current_config;
local module_visibility_config = current_config.global_settings.module_visibility;
local flow_states = quest_status.flow_states;
if quest_status.flow_state == flow_states.IN_TRAINING_AREA then
local large_monster_UI_config = current_config.large_monster_UI;
local module_visibility_in_training_area_config = module_visibility_config.in_training_area;
local dynamic_enabled = large_monster_UI_config.dynamic.enabled and module_visibility_in_training_area_config.large_monster_dynamic_UI;
local static_enabled = large_monster_UI_config.static.enabled and module_visibility_in_training_area_config.large_monster_static_UI;
local highlighted_enabled = large_monster_UI_config.highlighted.enabled and module_visibility_in_training_area_config.large_monster_highlighted_UI;
if dynamic_enabled or static_enabled or highlighted_enabled then
local success = pcall(large_monster_UI.draw, dynamic_enabled, static_enabled, highlighted_enabled);
local success, error = pcall(large_monster_UI.update, dynamic_enabled, static_enabled, highlighted_enabled);
if not success then
customization_menu.status = "[In Training Area] Large Monster UI Drawing Function threw an Exception";
error_handler.report("MHR_Overlay.update_UI", string.format("[In Training Area] Large Monster UI: %s", tostring(error)));
end
end
if config.current_config.damage_meter_UI.enabled and module_visibility_config.damage_meter_UI then
local success = pcall(damage_meter_UI.draw);
if current_config.damage_meter_UI.enabled and module_visibility_in_training_area_config.damage_meter_UI then
local success, error = pcall(damage_meter_UI.update);
if not success then
customization_menu.status = "[In Training Area] Damage Meter UI Drawing Function threw an Exception";
error_handler.report("MHR_Overlay.update_UI", string.format("[In Training Area] Damage Meter UI: %s", tostring(error)));
end
end
if config.current_config.endemic_life_UI.enabled and module_visibility_config.endemic_life_UI then
local success = pcall(env_creature_UI.draw);
if current_config.endemic_life_UI.enabled and module_visibility_in_training_area_config.endemic_life_UI then
local success, error = pcall(env_creature_UI.update);
if not success then
customization_menu.status = "[In Training Area] Endemic Life UI Drawing Function threw an Exception";
error_handler.report("MHR_Overlay.update_UI", string.format("[In Training Area] Endemic Life UI: %s", tostring(error)));
end
end
--[[if config.current_config.buff_UI.enabled and module_visibility_config.buff_UI then
local success = pcall(buff_UI.draw);
if current_config.buff_UI.enabled and module_visibility_in_training_area_config.buff_UI then
local success, error = pcall(buff_UI.update);
if not success then
customization_menu.status = "[In Training Area] Buff UI Drawing Function threw an Exception";
error_handler.report("MHR_Overlay.update_UI", string.format("[In Training Area] Buff UI: %s", tostring(error)));
end
end]]
end
elseif quest_status.flow_state == flow_states.CUTSCENE then
update_modules(module_visibility_config.cutscene, "Cutscene");
elseif quest_status.flow_state == flow_states.LOADING_QUEST then
update_modules(module_visibility_config.loading_quest, "Loading Quest");
elseif quest_status.flow_state == flow_states.QUEST_START_ANIMATION then
update_modules(module_visibility_config.quest_start_animation, "Quest Start Animation");
elseif quest_status.flow_state >= flow_states.PLAYING_QUEST and quest_status.flow_state <= flow_states.WYVERN_RIDING_START_ANIMATION then
update_modules(module_visibility_config.playing_quest, "Playing Quest");
elseif quest_status.flow_state == flow_states.KILLCAM then
update_modules(module_visibility_config.killcam, "Killcam");
elseif quest_status.flow_state == flow_states.QUEST_END_TIMER then
update_modules(module_visibility_config.quest_end_timer, "Quest End Timer");
elseif quest_status.flow_state == flow_states.QUEST_END_ANIMATION then
update_modules(module_visibility_config.quest_end_animation, "Quest End Animation");
elseif quest_status.flow_state == flow_states.QUEST_END_SCREEN then
update_modules(module_visibility_config.quest_end_screen, "Quest End Screen");
elseif quest_status.flow_state == flow_states.REWARD_SCREEN then
update_modules(module_visibility_config.reward_screen, "Reward Screen");
elseif quest_status.flow_state == flow_states.SUMMARY_SCREEN then
update_modules(module_visibility_config.summary_screen, "Summary Screen");
end
end
elseif quest_status.flow_state == quest_status.flow_states.CUTSCENE then
draw_modules(config.current_config.global_settings.module_visibility.cutscene, "Cutscene");
elseif quest_status.flow_state == quest_status.flow_states.LOADING_QUEST then
draw_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
draw_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
draw_modules(config.current_config.global_settings.module_visibility.playing_quest, "Playing Quest");
elseif quest_status.flow_state == quest_status.flow_states.KILLCAM then
draw_modules(config.current_config.global_settings.module_visibility.killcam, "Killcam");
elseif quest_status.flow_state == quest_status.flow_states.QUEST_END_TIMER then
draw_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
draw_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
draw_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
draw_modules(config.current_config.global_settings.module_visibility.reward_screen, "Reward Screen");
elseif quest_status.flow_state == quest_status.flow_states.SUMMARY_SCREEN then
draw_modules(config.current_config.global_settings.module_visibility.summary_screen, "Summary Screen");
local function draw_loop()
local current_config = config.current_config;
local module_visibility_config = current_config.global_settings.module_visibility;
local flow_states = quest_status.flow_states;
if quest_status.flow_state == flow_states.IN_LOBBY then
local module_visibility_in_lobby_config = module_visibility_config.in_lobby;
if current_config.stats_UI.enabled and module_visibility_in_lobby_config.stats_UI then
local success, error = pcall(stats_UI.draw);
if not success then
error_handler.report("MHR_Overlay.main_loop", string.format("[In Training Area] Stats UI: %s", tostring(error)));
end
end
elseif quest_status.flow_state == flow_states.IN_TRAINING_AREA then
local large_monster_UI_config = current_config.large_monster_UI;
local module_visibility_in_training_area_config = module_visibility_config.in_training_area;
local dynamic_enabled = large_monster_UI_config.dynamic.enabled and module_visibility_in_training_area_config.large_monster_dynamic_UI;
local static_enabled = large_monster_UI_config.static.enabled and module_visibility_in_training_area_config.large_monster_static_UI;
local highlighted_enabled = large_monster_UI_config.highlighted.enabled and module_visibility_in_training_area_config.large_monster_highlighted_UI;
if dynamic_enabled or static_enabled or highlighted_enabled then
local success, error = pcall(large_monster_UI.draw, dynamic_enabled, static_enabled, highlighted_enabled);
if not success then
error_handler.report("MHR_Overlay.main_loop", string.format("[In Training Area] Large Monster UI: %s", tostring(error)));
end
end
if current_config.damage_meter_UI.enabled and module_visibility_in_training_area_config.damage_meter_UI then
local success, error = pcall(damage_meter_UI.draw);
if not success then
error_handler.report("MHR_Overlay.main_loop", string.format("[In Training Area] Damage Meter UI: %s", tostring(error)));
end
end
if current_config.endemic_life_UI.enabled and module_visibility_in_training_area_config.endemic_life_UI then
local success, error = pcall(env_creature_UI.draw);
if not success then
error_handler.report("MHR_Overlay.main_loop", string.format("[In Training Area] Endemic Life UI: %s", tostring(error)));
end
end
if current_config.buff_UI.enabled and module_visibility_in_training_area_config.buff_UI then
local success, error = pcall(buff_UI.draw);
if not success then
error_handler.report("MHR_Overlay.main_loop", string.format("[In Training Area] Buff UI: %s", tostring(error)));
end
end
if current_config.stats_UI.enabled and module_visibility_in_training_area_config.stats_UI then
local success, error = pcall(stats_UI.draw);
if not success then
error_handler.report("MHR_Overlay.main_loop", string.format("[In Training Area] Stats UI: %s", tostring(error)));
end
end
elseif quest_status.flow_state == flow_states.CUTSCENE then
draw_modules(module_visibility_config.cutscene, "Cutscene");
elseif quest_status.flow_state == flow_states.LOADING_QUEST then
draw_modules(module_visibility_config.loading_quest, "Loading Quest");
elseif quest_status.flow_state == flow_states.QUEST_START_ANIMATION then
draw_modules(module_visibility_config.quest_start_animation, "Quest Start Animation");
elseif quest_status.flow_state >= flow_states.PLAYING_QUEST and quest_status.flow_state <= flow_states.WYVERN_RIDING_START_ANIMATION then
draw_modules(module_visibility_config.playing_quest, "Playing Quest");
elseif quest_status.flow_state == flow_states.KILLCAM then
draw_modules(module_visibility_config.killcam, "Killcam");
elseif quest_status.flow_state == flow_states.QUEST_END_TIMER then
draw_modules(module_visibility_config.quest_end_timer, "Quest End Timer");
elseif quest_status.flow_state == flow_states.QUEST_END_ANIMATION then
draw_modules(module_visibility_config.quest_end_animation, "Quest End Animation");
elseif quest_status.flow_state == flow_states.QUEST_END_SCREEN then
draw_modules(module_visibility_config.quest_end_screen, "Quest End Screen");
elseif quest_status.flow_state == flow_states.REWARD_SCREEN then
draw_modules(module_visibility_config.reward_screen, "Reward Screen");
elseif quest_status.flow_state == flow_states.SUMMARY_SCREEN then
draw_modules(module_visibility_config.summary_screen, "Summary Screen");
end
end
@@ -297,38 +533,37 @@ 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()
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();
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);
@@ -0,0 +1,420 @@
local this = {};
local buffs;
local buff_UI_entity;
local config;
local singletons;
local players;
local utils;
local language;
local error_handler;
local time;
local sdk = sdk;
local tostring = tostring;
local pairs = pairs;
local ipairs = ipairs;
local tonumber = tonumber;
local require = require;
local pcall = pcall;
local table = table;
local string = string;
local Vector3f = Vector3f;
local d2d = d2d;
local math = math;
local json = json;
local log = log;
local fs = fs;
local next = next;
local type = type;
local setmetatable = setmetatable;
local getmetatable = getmetatable;
local assert = assert;
local select = select;
local coroutine = coroutine;
local utf8 = utf8;
local re = re;
local imgui = imgui;
local draw = draw;
local Vector2f = Vector2f;
local reframework = reframework;
local os = os;
local ValueType = ValueType;
local package = package;
this.list = {
fireblight = nil,
waterblight = nil,
thunderblight = nil,
iceblight = nil,
dragonblight = nil,
blastblight = nil,
minor_bubbleblight = nil,
major_bubbleblight = nil,
hellfireblight = nil,
bloodblight = nil,
poison = nil,
deadly_poison = nil,
stun = nil,
paralysis = nil,
falling_asleep = nil,
sleep = nil,
defense_down = nil,
resistance_down = nil,
tremor = nil,
roar = nil,
webbed = nil,
stench = nil,
leeched = nil,
-- whirlwind = nil,
bleeding = nil,
frenzy = nil,
frenzy_overcome = nil,
engulfed = nil,
frostblight = nil,
muck = nil
};
this.keys = {
"fireblight",
"waterblight",
"thunderblight",
"iceblight",
"dragonblight",
"blastblight",
"minor_bubbleblight",
"major_bubbleblight",
"hellfireblight",
"bloodblight",
"frostblight",
"poison",
"deadly_poison",
"stun",
"paralysis",
"falling_asleep",
"sleep",
"defense_down",
"resistance_down",
"tremor",
"roar",
"webbed",
"stench",
"leeched",
-- "whirlwind",
"bleeding",
"engulfed",
"muck",
"frenzy",
"frenzy_overcome",
"frenzy_infection"
};
this.UI = nil;
local abnormal_statuses_type_name = "abnormal_statuses";
local frenzy_infected_duration = 121;
local player_quest_base_type_def = sdk.find_type_definition("snow.player.PlayerQuestBase");
-- Fireblight
local fire_duration_timer_field = player_quest_base_type_def:get_field("_FireLDurationTimer");
-- Waterblight
local water_duration_timer_field = player_quest_base_type_def:get_field("_WaterLDurationTimer");
-- Thunderblight
local thunder_duration_timer_field = player_quest_base_type_def:get_field("_ThunderLDurationTimer");
-- Iceblight
local ice_duration_timer_field = player_quest_base_type_def:get_field("_IceLDurationTimer");
-- Dragonblight
local dragon_duration_timer_field = player_quest_base_type_def:get_field("_DragonLDurationTimer");
-- blastblight
local bomb_duration_timer_field = player_quest_base_type_def:get_field("_BombDurationTimer");
-- Bubbleblight
local bubble_type_field = player_quest_base_type_def:get_field("_BubbleType");
local bubble_damage_timer_field = player_quest_base_type_def:get_field("_BubbleDamageTimer");
-- Hellfireblight
local oni_bomb_duration_timer_field = player_quest_base_type_def:get_field("_OniBombDurationTimer");
-- Bloodblight
local mystery_debuff_timer_field = player_quest_base_type_def:get_field("_MysteryDebuffTimer");
-- Frostblight
local get_is_frozen_damage_method = player_quest_base_type_def:get_method("get_IsFrozenDamage");
-- Poison
local poison_level_field = player_quest_base_type_def:get_field("_PoisonLv");
local poison_duration_timer_field = player_quest_base_type_def:get_field("_PoisonDurationTimer");
-- Stun
local stun_duration_timer_field = player_quest_base_type_def:get_field("_StunDurationTimer");
-- Falling Sleep
local get_sleep_movable_timer_method = player_quest_base_type_def:get_method("get_SleepMovableTimer");
-- Sleep
local sleep_duration_timer_field = player_quest_base_type_def:get_field("_SleepDurationTimer");
-- Paralysis
local paralyze_duration_timer_field = player_quest_base_type_def:get_field("_ParalyzeDurationTimer");
-- Defense Down
local defense_down_duration_timer_field = player_quest_base_type_def:get_field("_DefenceDownDurationTimer");
-- Resistance Down
local resistance_down_duration_timer_field = player_quest_base_type_def:get_field("_ResistanceDownDurationTimer");
-- Tremor
local quake_duration_timer_field = player_quest_base_type_def:get_field("_QuakeDurationTimer");
-- Roar
local ear_duration_timer_field = player_quest_base_type_def:get_field("_EarDurationTimer");
-- Webbed
local beto_duration_timer_field = player_quest_base_type_def:get_field("_BetoDurationTimer");
-- Stench
local stink_duration_timer_field = player_quest_base_type_def:get_field("_StinkDurationTimer");
-- Leeched
local blooding_enemy_timer_field = player_quest_base_type_def:get_field("_BloodingEnemyTimer");
-- Bleeding
local bleeding_debuff_timer_field = player_quest_base_type_def:get_field("_BleedingDebuffTimer");
-- Engulfed
local get_is_vacuum_damage_method = player_quest_base_type_def:get_method("get__IsVacuumDamage");
-- Muck
local get_is_mud_damage_method = player_quest_base_type_def:get_method("get__IsMudDamage");
local get_is_gold_mud_damage_method = player_quest_base_type_def:get_method("get__IsGoldMudDamage");
-- Frenzy Infected
local virus_accumulator_field = player_quest_base_type_def:get_field("_VirusAccumulator");
local virus_timer_field = player_quest_base_type_def:get_field("_VirusTimer");
-- Frenzy
local virus_onset_timer_field = player_quest_base_type_def:get_field("_VirusOnsetTimer");
local player_data_type_def = sdk.find_type_definition("snow.player.PlayerData");
-- Frenzy Overcome
local virus_overcome_buff_timer_field = player_data_type_def:get_field("_VirusOvercomeBuffTimer");
function this.update(player, player_data)
-- Missing:
-- whirlwind?
-- Wind Pressure?
this.update_poison(player);
this.update_bubbleblight(player);
this.update_muck(player);
this.update_frenzy_infection(player);
this.update_abnormal_status("fireblight", nil, nil, player, fire_duration_timer_field);
this.update_abnormal_status("waterblight", nil, nil, player, water_duration_timer_field);
this.update_abnormal_status("thunderblight", nil, nil, player, thunder_duration_timer_field);
this.update_abnormal_status("iceblight", nil, nil, player, ice_duration_timer_field);
this.update_abnormal_status("dragonblight", nil, nil, player, dragon_duration_timer_field);
this.update_abnormal_status("blastblight", nil, nil, player, bomb_duration_timer_field);
this.update_abnormal_status("hellfireblight", nil, nil, player, oni_bomb_duration_timer_field);
this.update_abnormal_status("bloodblight", nil, nil, player, mystery_debuff_timer_field);
this.update_abnormal_status("frostblight", player, get_is_frozen_damage_method);
this.update_abnormal_status("stun", nil, nil, player, stun_duration_timer_field);
this.update_abnormal_status("paralysis", nil, nil, player, paralyze_duration_timer_field);
this.update_abnormal_status("falling_asleep", nil, nil, player, get_sleep_movable_timer_method);
this.update_abnormal_status("defense_down", nil, nil, player, defense_down_duration_timer_field);
this.update_abnormal_status("resistance_down", nil, nil, player, resistance_down_duration_timer_field);
this.update_abnormal_status("tremor", nil, nil, player, quake_duration_timer_field);
this.update_abnormal_status("roar", nil, nil, player, ear_duration_timer_field);
this.update_abnormal_status("webbed", nil, nil, player, beto_duration_timer_field);
this.update_abnormal_status("stench", nil, nil, player, stink_duration_timer_field);
this.update_abnormal_status("leeched", nil, nil, player, blooding_enemy_timer_field, true);
this.update_abnormal_status("bleeding", nil, nil, player, bleeding_debuff_timer_field);
this.update_abnormal_status("engulfed", player, get_is_vacuum_damage_method);
this.update_abnormal_status("frenzy", nil, nil, player, virus_onset_timer_field);
this.update_abnormal_status("frenzy_overcome", nil, nil, player_data, virus_overcome_buff_timer_field);
this.update_sleep(player);
end
function this.update_abnormal_status(key, value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints)
return buffs.update_generic_buff(this.list, config.current_config.buff_UI.filter.abnormal_statuses, this.get_abnormal_status_name,
abnormal_statuses_type_name, key, value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints);
end
function this.update_generic(key, level, timer)
return buffs.update_generic(this.list, this.get_abnormal_status_name, abnormal_statuses_type_name, key, level, timer);
end
function this.apply_filter(key)
return buffs.apply_filter(this.list, config.current_config.buff_UI.filter.abnormal_statuses, key);
end
function this.update_poison(player)
local cached_config = config.current_config.buff_UI.filter.abnormal_statuses;
if not cached_config.poison
and not cached_config.deadly_poison then
if this.apply_filter("poison") then
return;
end
if this.apply_filter("deadly_poison") then
return;
end
end
local poison_level = poison_level_field:get_data(player);
if poison_level == nil then
error_handler.report("abnormal_statuses.update_poison", "Failed to Access Data: poison_level");
this.list.poison = nil;
this.list.deadly_poison = nil;
return;
end
if poison_level == 0 then
this.list.poison = nil;
this.list.deadly_poison = nil;
return;
end
if poison_level == 1 then
this.update_abnormal_status("poison", nil, nil, player, poison_duration_timer_field);
this.list.deadly_poison = nil;
else
this.update_abnormal_status("deadly_poison", nil, nil, player, poison_duration_timer_field);
this.list.poison = nil;
end
end
function this.update_bubbleblight(player)
local cached_config = config.current_config.buff_UI.filter.abnormal_statuses;
if not cached_config.minor_bubbleblight
and not cached_config.major_bubbleblight then
if this.apply_filter("minor_bubbleblight") then
return;
end
if this.apply_filter("major_bubbleblight") then
return;
end
end
local bubble_type = bubble_type_field:get_data(player);
if bubble_type == nil then
error_handler.report("abnormal_statuses.update_bubbleblight", "Failed to Access Data: bubble_Type");
this.list.minor_bubbleblight = nil;
this.list.major_bubbleblight = nil;
return;
end
if bubble_type == 0 then
this.list.minor_bubbleblight = nil;
this.list.major_bubbleblight = nil;
return;
end
if bubble_type == 1 then
this.update_abnormal_status("minor_bubbleblight", nil, nil, player, bubble_damage_timer_field);
this.list.major_bubbleblight = nil;
else
this.update_abnormal_status("major_bubbleblight", nil, nil, player, bubble_damage_timer_field);
this.list.minor_bubbleblight = nil;
end
end
function this.update_muck(player)
if this.apply_filter("muck") then
return;
end
local is_mud_damage = get_is_mud_damage_method:call(player);
if is_mud_damage == nil then
error_handler.report("abnormal_statuses.update_generic_boolean_value_method", "Failed to Access Data: is_mud_damage");
this.list.muck = nil;
return;
end
local is_gold_mud_damage = get_is_gold_mud_damage_method:call(player);
if is_gold_mud_damage == nil then
error_handler.report("abnormal_statuses.update_generic_boolean_value_method", "Failed to Access Data: is_gold_mud_damage");
this.list.muck = nil;
return;
end
if not is_mud_damage and not is_gold_mud_damage then
this.list.muck = nil;
return;
end
this.update_generic("muck");
end
function this.update_frenzy_infection(player)
if this.apply_filter("frenzy_infection") then
return;
end
local virus_accumulator_value = virus_accumulator_field:get_data(player);
if virus_accumulator_value == nil then
error_handler.report("abnormal_statuses.update_frenzy_infection", "Failed to Access Data: virus_accumulator_value");
this.list.frenzy_infection = nil;
return;
end
local virus_timer = virus_timer_field:get_data(player);
if virus_timer == nil then
error_handler.report("abnormal_statuses.update_frenzy_infection", "Failed to Access Data: virus_timer");
this.list.frenzy_infection = nil;
return;
end
if virus_accumulator_value == 0 and utils.number.is_equal(virus_timer, 0) then
this.list.frenzy_infection = nil;
return;
end
local timer = frenzy_infected_duration - (virus_accumulator_value + virus_timer / 60);
this.update_generic("frenzy_infection", 1, timer);
end
function this.update_sleep(player)
if this.apply_filter("sleep") then
this.list.sleep = nil;
return;
end
if this.list.falling_asleep ~= nil then
this.list.sleep = nil;
return;
end
this.update_abnormal_status("sleep", nil, nil, player, sleep_duration_timer_field);
end
function this.init_all_UI()
for abnormal_status_key, abnormal_status in pairs(this.list) do
buffs.init_UI(abnormal_status);
end
end
function this.init_names()
for abnormal_status_key, abnormal_status in pairs(this.list) do
abnormal_status.name = this.get_abnormal_status_name(abnormal_status_key);
end
end
function this.get_abnormal_status_name(key)
local abnormal_status_name = language.current_language.ailments[key];
if abnormal_status_name == nil then
return key;
end
return abnormal_status_name;
end
function this.init_dependencies()
buffs = require("MHR_Overlay.Buffs.buffs");
config = require("MHR_Overlay.Misc.config");
utils = require("MHR_Overlay.Misc.utils");
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
singletons = require("MHR_Overlay.Game_Handler.singletons");
players = require("MHR_Overlay.Damage_Meter.players");
language = require("MHR_Overlay.Misc.language");
error_handler = require("MHR_Overlay.Misc.error_handler");
time = require("MHR_Overlay.Game_Handler.time");
end
function this.init_module()
end
return this;
+330 -36
View File
@@ -2,6 +2,23 @@ local this = {};
local buff_UI_entity;
local config;
local singletons;
local players;
local item_buffs;
local melody_effects;
local utils;
local language;
local time;
local quest_status;
local error_handler;
local endemic_life_buffs;
local skills;
local dango_skills;
local abnormal_statuses;
local otomo_moves;
local weapon_skills;
local misc_buffs;
local rampage_skills;
local sdk = sdk;
local tostring = tostring;
@@ -35,23 +52,55 @@ local os = os;
local ValueType = ValueType;
local package = package;
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 get_ref_item_parameter_method = player_manager_type_def:get_method("get_RefItemParameter");
local player_base_type_def = find_master_player_method:get_return_type();
local get_player_data_method = player_base_type_def:get_method("get_PlayerData");
local player_lobby_base_type_def = sdk.find_type_definition("snow.player.PlayerLobbyBase");
local player_base_type_def = sdk.find_type_definition("snow.player.PlayerBase");
local player_weapon_type_field = player_base_type_def:get_field("_playerWeaponType");
function this.new(type, key, name, level, duration)
local is_infinite = false;
if name == nil then
name = utils.constants.uninitialized_string;
end
if duration == nil then
duration = 0;
end
if utils.number.is_equal(duration, 0) then
is_infinite = true;
end
level = level or 1;
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.is_active = true;
buff.timer = duration;
buff.duration = duration;
buff.is_visible = true;
buff.timer_percentage = 0;
buff.minutes_left = 0;
buff.seconds_left = 0;
buff.is_infinite = false;
buff.is_infinite = is_infinite;
this.update_timer(buff, buff.timer);
this.init_UI(buff);
@@ -62,47 +111,292 @@ function this.init_buffs()
this.list = {};
end
function this.init_all_UI()
abnormal_statuses.init_all_UI();
item_buffs.init_all_UI();
endemic_life_buffs.init_all_UI();
melody_effects.init_all_UI();
dango_skills.init_all_UI();
rampage_skills.init_all_UI();
skills.init_all_UI();
weapon_skills.init_all_UI();
otomo_moves.init_all_UI();
misc_buffs.init_all_UI();
end
function this.init_UI(buff)
local cached_config = config.current_config.buff_UI;
local cached_config = config.current_config.buff_UI[buff.type];
buff.buff_UI = buff_UI_entity.new(cached_config.bar, cached_config.name_label, cached_config.timer_label);
end
function this.init_names()
abnormal_statuses.init_names();
item_buffs.init_names();
endemic_life_buffs.init_names();
melody_effects.init_names();
dango_skills.init_names();
rampage_skills.init_names();
skills.init_names();
weapon_skills.init_names();
otomo_moves.init_names();
misc_buffs.init_names();
end
local tere = {};
local tere2 = {};
local tere3 = {};
function this.update()
if not config.current_config.buff_UI.enabled then
return;
end
if singletons.player_manager == nil then
error_handler.report("buffs.update", "Failed to Access Data: player_manager");
return;
end
if quest_status.flow_state <= quest_status.flow_states.IN_LOBBY
or quest_status.flow_state == quest_status.flow_states.CUTSCENE
or quest_status.flow_state >= quest_status.flow_states.QUEST_END_ANIMATION then
return;
end
local master_player = find_master_player_method:call(singletons.player_manager);
if master_player == nil then
error_handler.report("buffs.update", "Failed to Access Data: master_player");
return;
end
melody_effects.update(master_player);
local master_player_data = get_player_data_method:call(master_player);
if master_player_data == nil then
error_handler.report("buffs.update", "Failed to Access Data: master_player_data");
return;
end
local weapon_type = player_weapon_type_field:get_data(master_player);
if weapon_type == nil then
error_handler.report("buffs.update", "Failed to Access Data: weapon_type");
return;
end
if singletons.player_manager == nil then
error_handler.report("buffs.update", "Failed to Access Data: player_manager");
return;
end
local item_parameter = get_ref_item_parameter_method:call(singletons.player_manager);
if item_parameter == nil then
error_handler.report("buffs.update", "Failed to Access Data: item_parameter");
return;
end
local is_player_lobby_base = master_player:get_type_definition() == player_lobby_base_type_def;
item_buffs.update(master_player_data, item_parameter);
rampage_skills.update(master_player_data);
otomo_moves.update(master_player_data);
if not is_player_lobby_base then
abnormal_statuses.update(master_player, master_player_data);
endemic_life_buffs.update(master_player, master_player_data);
dango_skills.update(master_player, master_player_data);
skills.update(master_player, master_player_data, weapon_type);
weapon_skills.update(master_player, master_player_data, weapon_type);
misc_buffs.update(master_player, master_player_data, item_parameter);
end
end
function this.update_timer(buff, timer)
buff.is_visible = true;
if timer == nil then
return;
end
if timer < 0 then
timer = 0;
end
if timer > buff.duration or timer > buff.timer then
buff.duration = timer;
end
local minutes_left = math.floor(timer / 60);
buff.timer = timer;
buff.minutes_left = minutes_left;
buff.seconds_left = math.floor(timer - 60 * minutes_left);
if buff.duration ~= 0 then
buff.timer_percentage = timer / buff.duration;
end
end
function this.update_generic_buff(buff_list, filter_list, get_name_function,
buff_type, buff_key,
value_owner, value_holder,
timer_owner, timer_holder,
is_infinite, minimal_value, level_breakpoints)
if this.apply_filter(buff_list, filter_list, buff_key) then
return;
end
if timer_owner == nil then timer_owner = value_owner; end
if minimal_value == nil then minimal_value = 1; end
local level = 1;
if value_holder ~= nil then
local value;
if utils.type.is_REField(value_holder) then
value = value_holder:get_data(value_owner);
else
value = value_holder:call(value_owner);
end
if value == nil then
error_handler.report("buffs.update_generic_number", string.format("Failed to Access Data: %s_value", buff_key));
buff_list[buff_key] = nil;
return;
end
if utils.type.is_boolean(value) then
if not value then
buff_list[buff_key] = nil;
return;
end
else
if value < minimal_value then
buff_list[buff_key] = nil;
return;
end
if level_breakpoints ~= nil then
local level_breakpoints_count = #level_breakpoints;
for index, breakpoint in ipairs(level_breakpoints) do
if value >= breakpoint then
level = 2 + level_breakpoints_count - index;
break;
end
end
end
end
end
local timer = nil;
if timer_holder ~= nil then
if utils.type.is_REField(timer_holder) then
timer = timer_holder:get_data(timer_owner);
else
timer = timer_holder:call(timer_owner);
end
if timer == nil then
error_handler.report("buffs.update_generic_number", string.format("Failed to Access Data: %s_timer", buff_key));
buff_list[buff_key] = nil;
return;
end
if value_holder == nil and utils.number.is_equal(timer, 0) then
buff_list[buff_key] = nil;
return;
end
if is_infinite then
timer = nil;
else
timer = timer / 60;
end
end
return this.update_generic(buff_list, get_name_function, buff_type, buff_key, level, timer);
end
function this.update_generic(buff_list, get_name_function, buff_type, buff_key, level, timer)
level = level or 1;
local buff = buff_list[buff_key];
if buff == nil then
local name = get_name_function(buff_key);
buff = this.new(buff_type, buff_key, name, level, timer);
buff_list[buff_key] = buff;
else
if buff.level ~= level then
buff.duration = timer;
end
buff.level = level;
this.update_timer(buff, timer);
end
return buff;
end
function this.apply_filter(buff_list, filter_list, buff_key)
if filter_list[buff_key] then
return false;
end
local buff = buff_list[buff_key];
if buff == nil then
return true;
end
if not buff.is_visible then
return true;
end
if buff.is_infinite then
buff_list[buff_key] = nil;
return true;
end
time.new_delay_timer(function()
local _buff = buff_list[buff_key];
if _buff ~= nil and not _buff.is_visible then
buff_list[buff_key] = nil;
end
end, buff.timer);
buff.is_visible = false;
return true;
end
function this.draw(buff, buff_UI, position_on_screen, opacity_scale)
buff_UI_entity.draw(buff, buff_UI, position_on_screen, opacity_scale);
end
function this.init_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");
item_buffs = require("MHR_Overlay.Buffs.item_buffs");
melody_effects = require("MHR_Overlay.Buffs.melody_effects");
utils = require("MHR_Overlay.Misc.utils");
language = require("MHR_Overlay.Misc.language");
time = require("MHR_Overlay.Game_Handler.time");
quest_status = require("MHR_Overlay.Game_Handler.quest_status");
error_handler = require("MHR_Overlay.Misc.error_handler");
endemic_life_buffs = require("MHR_Overlay.Buffs.endemic_life_buffs");
skills = require("MHR_Overlay.Buffs.skills");
dango_skills = require("MHR_Overlay.Buffs.dango_skills");
abnormal_statuses = require("MHR_Overlay.Buffs.abnormal_statuses");
otomo_moves = require("MHR_Overlay.Buffs.otomo_moves");
weapon_skills = require("MHR_Overlay.Buffs.weapon_skills");
rampage_skills = require("MHR_Overlay.Buffs.rampage_skills");
misc_buffs = require("MHR_Overlay.Buffs.misc_buffs");
end
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;
function this.init_module()
end
return this;
@@ -0,0 +1,405 @@
local this = {};
local buffs;
local buff_UI_entity;
local config;
local singletons;
local players;
local utils;
local language;
local error_handler;
local time;
local sdk = sdk;
local tostring = tostring;
local pairs = pairs;
local ipairs = ipairs;
local tonumber = tonumber;
local require = require;
local pcall = pcall;
local table = table;
local string = string;
local Vector3f = Vector3f;
local d2d = d2d;
local math = math;
local json = json;
local log = log;
local fs = fs;
local next = next;
local type = type;
local setmetatable = setmetatable;
local getmetatable = getmetatable;
local assert = assert;
local select = select;
local coroutine = coroutine;
local utf8 = utf8;
local re = re;
local imgui = imgui;
local draw = draw;
local Vector2f = Vector2f;
local reframework = reframework;
local os = os;
local ValueType = ValueType;
local package = package;
this.list = {
dango_adrenaline = nil,
dango_booster = nil,
dango_connector = nil,
dango_defender = nil,
dango_flyer = nil,
dango_glutton = nil,
dango_hunter = nil,
dango_insurance = nil,
dango_insurance_defense_up = nil,
super_recovery_dango = nil
};
this.keys = {
"dango_adrenaline",
"dango_booster",
"dango_connector",
"dango_defender",
"dango_flyer",
"dango_glutton",
"dango_hunter",
"dango_insurance",
"dango_insurance_defense_up",
"super_recovery_dango"
};
local dango_skill_ids = {
-- dango_polisher = 1,
-- dango_rider = 2,
dango_adrenaline = 3,
-- dango_carver_lo = 4,
-- dango_carver_hi = 5,
-- dango_medic_lo = 6,
-- dango_medic_hi = 7,
-- dango_fighter = 8,
-- dango_pyro = 9,
-- dango_specialist = 10,
-- dango_defender_lo = 11,
-- dango_defender_hi = 12,
-- dango_harvester = 13,
-- dango_marksman = 14,
-- dango_fortune_caller = 15,
-- dango_miracle_worker = 16,
-- dango_deflector = 17,
-- dango_weakener = 18,
-- dango_calculator = 19,
-- dango_temper = 20,
-- dango_wall_runner = 21,
-- dango_slugger = 22,
-- dango_money_maker = 23,
-- dango_bombardier = 24,
-- dango_moxie = 25,
-- dango_immunizer = 26,
-- dango_trainer = 27,
dango_booster = 28,
-- dango_feet = 29,
dango_bulker = 30,
dango_insurance = 31,
-- dango_reviver = 32,
-- dango_summoner = 33,
-- dango_hurler = 34,
-- dango_fire_res_lo = 35,
-- dango_fire_res_hi = 36,
-- dango_water_res_lo = 37,
-- dango_water_res_hi = 38,
-- dango_thunder_res_lo = 39,
-- dango_thunder_res_hi = 40,
-- dango_ice_res_lo = 41,
-- dango_ice_res_hi = 42,
-- dango_dragon_res_lo = 43,
-- dango_dragon_res_hi = 44,
-- dango_gatherer = 45,
dango_glutton = 46,
-- dango_bird_caller = 47,
dango_flyer = 48,
dango_defender = 49,
-- enhanced_dango_fighter = 50,
-- dango_driver = 51,
dango_hunter = 52,
-- dango_guard = 53,
-- dango_shifter = 54,
dango_connector = 55,
super_recovery_dango = 56
};
this.is_dango_adrenaline_active = false;
local dango_skills_type_name = "dango_skills";
local dango_bulker_attack_up = 15;
local previous_super_recovery_dango_timer = 0;
local player_manager_type_def = sdk.find_type_definition("snow.player.PlayerManager");
local has_anyone_kitchen_skill_in_quest_method = player_manager_type_def:get_method("hasAnyoneKitchenSkillInQuest");
local player_data_type_def = sdk.find_type_definition("snow.player.PlayerData");
-- Dango Defender
local is_enable_kitchen_skill_048_reduce_field = player_data_type_def:get_field("_IsEnable_KitchenSkill048_Reduce");
-- Dango Booster
local kitchen_skill_027_timer_field = player_data_type_def:get_field("_KitchenSkill027Timer");
-- Dango Glutton
local kitchen_skill_045_timer_field = player_data_type_def:get_field("_KitchenSkill045Timer");
-- Dango Insurance
local kitchen_skill_insurance_def_up_lv3_field = player_data_type_def:get_field("_KitchenSkill_Insurance_DefUp_Lv3");
local kitchen_skill_insurance_def_up_lv4_field = player_data_type_def:get_field("_KitchenSkill_Insurance_DefUp_Lv4");
-- Dango Hunter
local kitchen_skill_051_atk_up_timer_field = player_data_type_def:get_field("_KitchenSkill051_AtkUpTimer");
-- Dango Connector
local kitchen_skill_054_timer_field = player_data_type_def:get_field("_KitchenSkill054_Timer");
local player_base_type_def = sdk.find_type_definition("snow.player.PlayerBase");
-- Dango Adrenaline
-- local is_kitchen_skill_predicament_powerup_method = player_base_type_def:get_method("isKitchenSkillPredicamentPowerUp");
-- Dango Flyer
local get_is_kitchen_skill_wire_stop_heal_spd_method = player_base_type_def:get_method("get_IsKitchenSkill_WireStop_HealSpd");
local get_is_kitchen_skill_wire_stop_regene_method = player_base_type_def:get_method("get_IsKitchenSkill_WireStop_Regene");
-- Super Recovery Dango
local get_kitchen_skill_surume_regene_timer_method = player_base_type_def:get_method("get_KitchenSkill_Surume_RegeneTimer");
local data_shortcut_type_def = sdk.find_type_definition("snow.data.DataShortcut");
local get_name_method = data_shortcut_type_def:get_method("getName(snow.data.DataDef.PlKitchenSkillId)");
local quest_manager_type_def = sdk.find_type_definition("snow.QuestManager");
local flag_cat_skill_insurance_field = quest_manager_type_def:get_field("_FlagCatSkillInsurance");
local is_cat_skill_insurance_method = quest_manager_type_def:get_method("isCatSkillInsurance");
function this.update(player, player_data)
this.update_dango_adrenaline();
this.update_dango_hunter(player_data);
this.update_dango_insurance();
this.update_dango_insurance_defense_up(player_data);
this.update_dango_flyer(player);
this.update_super_recovery_dango(player);
this.update_dango_skill("dango_booster", nil, nil, player_data, kitchen_skill_027_timer_field);
this.update_dango_skill("dango_defender", player_data, is_enable_kitchen_skill_048_reduce_field, nil, nil, true);
this.update_dango_skill("dango_glutton", nil, nil, player_data, kitchen_skill_045_timer_field);
this.update_dango_skill("dango_connector", nil, nil, player_data, kitchen_skill_054_timer_field);
end
function this.update_dango_skill(key, value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints)
return buffs.update_generic_buff(this.list, config.current_config.buff_UI.filter.dango_skills, this.get_dango_skill_name,
dango_skills_type_name, key,
value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints);
end
function this.update_generic(key, level, timer)
return buffs.update_generic(this.list, this.get_dango_skill_name, dango_skills_type_name, key, level, timer);
end
function this.apply_filter(key)
return buffs.apply_filter(this.list, config.current_config.buff_UI.filter.dango_skills, key);
end
function this.update_dango_adrenaline()
if this.apply_filter("dango_adrenaline") then
return;
end
if not this.is_dango_adrenaline_active then
this.list.dango_adrenaline = nil;
return;
end
this.update_generic("dango_adrenaline");
end
function this.update_dango_insurance()
if this.apply_filter("dango_insurance") then
return;
end
if singletons.player_manager == nil then
error_handler.report("dango_skills.update_dango_insurance", "Failed to Access Data: player_manager");
this.list.dango_insurance = nil;
return;
end
if singletons.quest_manager == nil then
error_handler.report("dango_skills.update_dango_insurance", "Failed to Access Data: quest_manager");
this.list.dango_insurance = nil;
return;
end
local has_insurance_skill = has_anyone_kitchen_skill_in_quest_method:call(singletons.player_manager, dango_skill_ids.dango_insurance);
local flag_cat_skill_insurance = flag_cat_skill_insurance_field:get_data(singletons.quest_manager);
if flag_cat_skill_insurance == nil then
error_handler.report("dango_skills.update_dango_insurance", "Failed to Access Data: flag_cat_skill_insurance");
this.list.dango_insurance = nil;
return;
end
local is_cat_skill_insurance = is_cat_skill_insurance_method:call(singletons.quest_manager, flag_cat_skill_insurance);
if is_cat_skill_insurance == nil then
error_handler.report("dango_skills.update_dango_insurance", "Failed to Access Data: is_cat_skill_insurance");
this.list.dango_insurance = nil;
return;
end
if not has_insurance_skill or is_cat_skill_insurance then
this.list.dango_insurance = nil;
return;
end
this.update_generic("dango_insurance");
end
function this.update_dango_insurance_defense_up(player_data)
if this.apply_filter("dango_insurance_defense_up") then
return;
end
local level = 3;
local insurance_def_up_lv3 = kitchen_skill_insurance_def_up_lv3_field:get_data(player_data);
if insurance_def_up_lv3 == nil then
error_handler.report("dango_skills.update_dango_insurance_defense_up", "Failed to Access Data: insurance_def_up_lv3");
this.list.dango_insurance_defense_up = nil;
return;
end
if not insurance_def_up_lv3 then
local insurance_def_up_lv4 = kitchen_skill_insurance_def_up_lv4_field:get_data(player_data);
if insurance_def_up_lv4 == nil then
error_handler.report("dango_skills.update_dango_insurance_defense_up", "Failed to Access Data: insurance_def_up_lv4");
this.list.dango_insurance_defense_up = nil;
return;
end
if not insurance_def_up_lv4 then
this.list.dango_insurance_defense_up = nil;
return;
end
level = 4;
end
this.update_generic("dango_insurance_defense_up", level);
end
function this.update_dango_flyer(player)
if this.apply_filter("dango_flyer") then
return;
end
local level = 4;
local is_kitchen_skill_wire_stop_regene = get_is_kitchen_skill_wire_stop_regene_method:call(player);
if is_kitchen_skill_wire_stop_regene == nil then
error_handler.report("dango_skills.update_dango_flyer", "Failed to Access Data: is_kitchen_skill_wire_stop_regene");
this.list.dango_flyer = nil;
return;
end
if not is_kitchen_skill_wire_stop_regene then
local is_kitchen_skill_wire_stop_heal_spd = get_is_kitchen_skill_wire_stop_heal_spd_method:call(player);
if is_kitchen_skill_wire_stop_heal_spd == nil then
error_handler.report("dango_skills.update_dango_flyer", "Failed to Access Data: is_kitchen_skill_wire_stop_heal_spd");
this.list.dango_flyer = nil;
return;
end
if not is_kitchen_skill_wire_stop_regene then
this.list.dango_flyer = nil;
return;
end
level = 3;
end
this.update_generic("dango_flyer", level);
end
function this.update_dango_hunter(player_data)
local dango_hunter_buff = this.update_dango_skill("dango_hunter", nil, nil, player_data, kitchen_skill_051_atk_up_timer_field);
if dango_hunter_buff ~= nil then
dango_hunter_buff.level = 4;
end
end
function this.update_super_recovery_dango(player)
if this.apply_filter("super_recovery_dango") then
return;
end
local kitchen_skill_surume_regene_timer = get_kitchen_skill_surume_regene_timer_method:call(player);
if kitchen_skill_surume_regene_timer == nil then
error_handler.report("dango_skills.update_super_recovery_dango", "Failed to Access Data: kitchen_skill_surume_regene_timer");
this.list.super_recovery_dango = nil;
return;
end
if utils.number.is_equal(kitchen_skill_surume_regene_timer, 0)
and utils.number.is_equal(previous_super_recovery_dango_timer, 0) then
this.list.super_recovery_dango = nil;
return;
end
previous_super_recovery_dango_timer = kitchen_skill_surume_regene_timer;
this.update_generic("super_recovery_dango");
end
function this.init_all_UI()
for dango_skill_key, dango_skill in pairs(this.list) do
buffs.init_UI(dango_skill);
end
end
function this.init_names()
for dango_skill_key, dango_skill in pairs(this.list) do
dango_skill.name = this.get_dango_skill_name(dango_skill_key);
end
end
function this.get_dango_skill_name(key)
local dango_skill_id = dango_skill_ids[key];
if dango_skill_id == nil then
local dango_skill_name = language.current_language.dango_skills[key];
if dango_skill_name == nil then
return key;
end
return dango_skill_name;
end
local dango_skill_name = get_name_method:call(nil, dango_skill_id);
if dango_skill_name == nil then
error_handler.report("dango_skills.get_dango_name", string.format("Failed to Access Data: %s_name", key));
return key;
end
return dango_skill_name;
end
function this.init_dependencies()
buffs = require("MHR_Overlay.Buffs.buffs");
config = require("MHR_Overlay.Misc.config");
utils = require("MHR_Overlay.Misc.utils");
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
singletons = require("MHR_Overlay.Game_Handler.singletons");
players = require("MHR_Overlay.Damage_Meter.players");
language = require("MHR_Overlay.Misc.language");
error_handler = require("MHR_Overlay.Misc.error_handler");
time = require("MHR_Overlay.Game_Handler.time");
end
function this.init_module()
end
return this;
@@ -0,0 +1,229 @@
local this = {};
local buffs;
local buff_UI_entity;
local config;
local singletons;
local players;
local utils;
local language;
local error_handler;
local env_creature;
local item_buffs;
local time;
local sdk = sdk;
local tostring = tostring;
local pairs = pairs;
local ipairs = ipairs;
local tonumber = tonumber;
local require = require;
local pcall = pcall;
local table = table;
local string = string;
local Vector3f = Vector3f;
local d2d = d2d;
local math = math;
local json = json;
local log = log;
local fs = fs;
local next = next;
local type = type;
local setmetatable = setmetatable;
local getmetatable = getmetatable;
local assert = assert;
local select = select;
local coroutine = coroutine;
local utf8 = utf8;
local re = re;
local imgui = imgui;
local draw = draw;
local Vector2f = Vector2f;
local reframework = reframework;
local os = os;
local ValueType = ValueType;
local package = package;
this.list = {
cutterfly = nil,
clothfly = nil,
butterflame = nil,
-- peepersects = nil,
stinkmink = nil,
ruby_wirebug = nil,
gold_wirebug = nil,
red_lampsquid = nil,
yellow_lampsquid = nil
};
this.keys = {
"cutterfly",
"clothfly",
"butterflame",
-- "peepersects",
"stinkmink",
"ruby_wirebug",
"gold_wirebug",
"red_lampsquid",
"yellow_lampsquid"
};
this.peepersects_duration = 90;
this.butterflame_attack_up = 25;
local endemic_life_buffs_type_name = "endemic_life_buffs";
local marionette_mode_types = { "ruby_wirebug", "gold_wirebug" };
local player_data_type_def = sdk.find_type_definition("snow.player.PlayerData");
-- Cutterfly
local crit_up_ec_second_timer_field = player_data_type_def:get_field("_CritUpEcSecondTimer");
-- Clothfly
local def_up_buff_second_rate_timer_field = player_data_type_def:get_field("_DefUpBuffSecondRateTimer");
-- Ruby/Gold Wirebugs
local wirebug_powerup_timer_field = player_data_type_def:get_field("_WireBugPowerUpTimer");
-- Butterflame
local atk_up_buff_second_field = player_data_type_def:get_field("_AtkUpBuffSecond");
local atk_up_buff_second_timer_field = player_data_type_def:get_field("_AtkUpBuffSecondTimer");
-- Stinkmink
local lead_enemy_timer_field = player_data_type_def:get_field("_LeadEnemyTimer");
-- Red Lampsquid
local atk_up_ec_second_timer_field = player_data_type_def:get_field("_AtkUpEcSecondTimer");
-- Yellow Lampsquid
local def_up_ec_second_timer_field = player_data_type_def:get_field("_DefUpEcSecondTimer");
local player_quest_base_type_def = sdk.find_type_definition("snow.player.PlayerQuestBase");
-- Ruby/Gold Wirebugs
local get_marionette_mode_type_method = player_quest_base_type_def:get_method("get_MarionetteModeType");
local message_manager_type_def = sdk.find_type_definition("snow.gui.MessageManager");
local get_env_creature_name_message_method = message_manager_type_def:get_method("getEnvCreatureNameMessage");
function this.update(player, player_data, item_parameter)
this.update_ruby_and_gold_wirebugs(player, player_data);
this.update_butterflame(player_data);
this.update_endemic_life_buff("cutterfly", nil, nil, player_data, crit_up_ec_second_timer_field);
this.update_endemic_life_buff("clothfly", nil, nil, player_data, def_up_buff_second_rate_timer_field);
this.update_endemic_life_buff("stinkmink", nil, nil, player_data, lead_enemy_timer_field);
this.update_endemic_life_buff("red_lampsquid", nil, nil, player_data, atk_up_ec_second_timer_field);
this.update_endemic_life_buff("yellow_lampsquid", nil, nil, player_data, def_up_ec_second_timer_field);
end
function this.update_endemic_life_buff(key, value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints)
return buffs.update_generic_buff(this.list, config.current_config.buff_UI.filter.endemic_life_buffs, this.get_endemic_life_name,
endemic_life_buffs_type_name, key,
value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints)
end
function this.update_generic(key, level, timer)
return buffs.update_generic(this.list, this.get_endemic_life_name, endemic_life_buffs_type_name, key, level, timer);
end
function this.apply_filter(key)
return buffs.apply_filter(this.list, config.current_config.buff_UI.filter.endemic_life_buffs, key);
end
function this.update_ruby_and_gold_wirebugs(player, player_data)
local cached_config = config.current_config.buff_UI.filter.endemic_life_buffs;
if not cached_config.ruby_wirebug
and not cached_config.gold_wirebug then
if this.apply_filter("ruby_wirebug") then
return;
end
if this.apply_filter("gold_wirebug") then
return;
end
end
local marionette_mode_type = get_marionette_mode_type_method:call(player);
if marionette_mode_type == nil then
error_handler.report("endemic_life_buffs.update_ruby_and_gold_wirebugs", "Failed to Access Data: marionette_mode_type");
this.list.ruby_wirebug = nil;
this.list.gold_wirebug = nil;
end
if marionette_mode_type ~= 1 and marionette_mode_type ~= 2 then
this.list.ruby_wirebug = nil;
this.list.gold_wirebug = nil;
return;
elseif marionette_mode_type ~= 1 then
this.list.ruby_wirebug = nil;
else
this.list.gold_wirebug = nil;
end
local endemic_life_buff_key = marionette_mode_types[marionette_mode_type];
this.update_endemic_life_buff(endemic_life_buff_key, nil, nil, player_data, wirebug_powerup_timer_field);
end
function this.update_butterflame(player_data)
if this.apply_filter("butterflame") then
return;
end
local atk_up_buff_second = atk_up_buff_second_field:get_data(player_data);
if atk_up_buff_second == nil then
error_handler.report("item_buffs.update_butterflame", "Failed to Access Data: atk_up_buff_second");
this.list.butterflame = nil;
return;
end
if atk_up_buff_second ~= this.butterflame_attack_up then
this.list.butterflame = nil;
return;
end
this.update_endemic_life_buff("butterflame", nil, nil, player_data, atk_up_buff_second_timer_field);
end
function this.init_all_UI()
for endemic_life_key, endemic_life in pairs(this.list) do
buffs.init_UI(endemic_life);
end
end
function this.init_names()
for endemic_life_key, endemic_life in pairs(this.list) do
endemic_life.name = this.get_endemic_life_name(endemic_life_key);
end
end
function this.get_endemic_life_name(key)
if singletons.message_manager == nil then
error_handler.report("endemic_life_buffs.get_endemic_life_name", "Failed to Access Data: message_manager");
return key;
end
local endemic_life_name = get_env_creature_name_message_method:call(singletons.message_manager, env_creature.creature_ids[key]);
if endemic_life_name == nil then
error_handler.report("endemic_life_buffs.get_endemic_life_name", string.format("Failed to Access Data: %s_name", key));
return key;
end
return endemic_life_name;
end
function this.init_dependencies()
buffs = require("MHR_Overlay.Buffs.buffs");
config = require("MHR_Overlay.Misc.config");
utils = require("MHR_Overlay.Misc.utils");
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
singletons = require("MHR_Overlay.Game_Handler.singletons");
players = require("MHR_Overlay.Damage_Meter.players");
language = require("MHR_Overlay.Misc.language");
error_handler = require("MHR_Overlay.Misc.error_handler");
env_creature = require("MHR_Overlay.Endemic_Life.env_creature");
item_buffs = require("MHR_Overlay.Buffs.item_buffs");
time = require("MHR_Overlay.Game_Handler.time");
end
function this.init_module()
end
return this;
@@ -0,0 +1,340 @@
local this = {};
local buffs;
local buff_UI_entity;
local config;
local singletons;
local players;
local utils;
local language;
local error_handler;
local endemic_life_buffs;
local sdk = sdk;
local tostring = tostring;
local pairs = pairs;
local ipairs = ipairs;
local tonumber = tonumber;
local require = require;
local pcall = pcall;
local table = table;
local string = string;
local Vector3f = Vector3f;
local d2d = d2d;
local math = math;
local json = json;
local log = log;
local fs = fs;
local next = next;
local type = type;
local setmetatable = setmetatable;
local getmetatable = getmetatable;
local assert = assert;
local select = select;
local coroutine = coroutine;
local utf8 = utf8;
local re = re;
local imgui = imgui;
local draw = draw;
local Vector2f = Vector2f;
local reframework = reframework;
local os = os;
local ValueType = ValueType;
local package = package;
this.list = {
demondrug = nil,
mega_demondrug = nil,
armorskin = nil,
mega_armorskin = nil,
might_seed = nil,
-- adamant_seed = nil,
demon_powder = nil,
hardshell_powder = nil,
-- immunizer = nil,
-- dash_juice = nil,
gourmet_fish = nil,
demon_ammo = nil,
armor_ammo = nil
};
this.keys = {
"demondrug",
"mega_demondrug",
"armorskin",
"mega_armorskin",
"might_seed",
-- "adamant_seed",
"demon_powder",
"hardshell_powder",
-- "immunizer",
-- "dash_juice",
"gourmet_fish",
"demon_ammo",
"armor_ammo"
};
local item_ids = {
demondrug = 68157917,
mega_demondrug = 68157918,
armorskin = 68157922,
mega_armorskin = 68157923,
might_seed = 68157919,
-- adamant_seed = 68157924,
demon_powder = 68157920,
hardshell_powder = 68157925,
-- immunizer = 68157911,
-- dash_juice = 68157913,
gourmet_fish = 68157909,
demon_ammo = 68157595,
armor_ammo = 68157596
}
this.might_seed_attack_up = 10;
local item_buffs_type_name = "item_buffs";
local player_data_type_def = sdk.find_type_definition("snow.player.PlayerData");
-- Demondrug/Mega Demondrug
local atk_up_alive_field = player_data_type_def:get_field("_AtkUpAlive");
-- Armorskin/Mega Armorskin
local def_up_alive_field = player_data_type_def:get_field("_DefUpAlive");
-- Might Seed
local atk_up_buff_second_field = player_data_type_def:get_field("_AtkUpBuffSecond");
local atk_up_buff_second_timer_field = player_data_type_def:get_field("_AtkUpBuffSecondTimer");
-- Demon Powder
local atk_up_item_second_field = player_data_type_def:get_field("_AtkUpItemSecond");
local atk_up_item_second_timer_field = player_data_type_def:get_field("_AtkUpItemSecondTimer");
-- Hardshell Powder
local def_up_item_second_field = player_data_type_def:get_field("_DefUpItemSecond");
local def_up_item_second_timer_field = player_data_type_def:get_field("_DefUpItemSecondTimer");
-- Gourmet Fish
local fish_regene_enable_field = player_data_type_def:get_field("_FishRegeneEnableTimer");
-- Demon Ammo
local kijin_bullet_timer_field = player_data_type_def:get_field("_KijinBulletTimer");
-- Armor Ammo
local kouka_bullet_timer_field = player_data_type_def:get_field("_KoukaBulletTimer");
local player_manager_type_def = sdk.find_type_definition("snow.player.PlayerManager");
local get_ref_item_parameter_method = player_manager_type_def:get_method("get_RefItemParameter");
local player_user_data_item_parameter_type_def = get_ref_item_parameter_method:get_return_type();
-- Demondrug/Mega Demondrug
local demondrug_atk_up_field = player_user_data_item_parameter_type_def:get_field("_DemondrugAtkUp");
local great_demondrug_atk_up_field = player_user_data_item_parameter_type_def:get_field("_GreatDemondrugAtkUp");
-- Armorskin/Mega Armorskin
local armorskin_def_up_field = player_user_data_item_parameter_type_def:get_field("_ArmorSkinDefUp");
local great_armorskin_def_up_field = player_user_data_item_parameter_type_def:get_field("_GreatArmorSkinDefUp");
-- Might Seed
local might_seed_atk_up_field = player_user_data_item_parameter_type_def:get_field("_MightSeedAtkUp");
local data_shortcut_type_def = sdk.find_type_definition("snow.data.DataShortcut");
local get_name_method = data_shortcut_type_def:get_method("getName(snow.data.ContentsIdSystem.ItemId)");
function this.update(player_data, item_parameter)
this.update_demondrug(player_data, item_parameter);
this.update_armorskin(player_data, item_parameter);
this.update_might_seed(player_data, item_parameter);
this.update_item_buff("demon_powder", player_data, atk_up_item_second_field, player_data, atk_up_item_second_timer_field);
this.update_item_buff("hardshell_powder", player_data, def_up_item_second_field, player_data, def_up_item_second_timer_field);
this.update_item_buff("gourmet_fish", nil, nil, player_data, fish_regene_enable_field);
this.update_item_buff("demon_ammo", nil, nil, player_data, kijin_bullet_timer_field);
this.update_item_buff("armor_ammo", nil, nil, player_data, kouka_bullet_timer_field);
end
function this.update_item_buff(key, value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints)
return buffs.update_generic_buff(this.list, config.current_config.buff_UI.filter.item_buffs, this.get_item_buff_name,
item_buffs_type_name, key,
value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints)
end
function this.update_generic(key, level, timer)
return buffs.update_generic(this.list, this.get_item_buff_name, item_buffs_type_name, key, level, timer);
end
function this.apply_filter(key)
return buffs.apply_filter(this.list, config.current_config.buff_UI.filter.item_buffs, key);
end
function this.update_demondrug(player_data, item_parameter)
local cached_config = config.current_config.buff_UI.filter.item_buffs;
if not cached_config.demondrug and not cached_config.mega_demondrug then
this.list.demondrug = nil;
this.list.mega_demondrug = nil;
return;
end
local demondrug_value = atk_up_alive_field:get_data(player_data);
if demondrug_value == nil then
error_handler.report("item_buffs.update_demondrug", "Failed to Access Data: demondrug_value");
this.list.demondrug = nil;
this.list.mega_demondrug = nil;
return;
end
if demondrug_value == 0 then
this.list.demondrug = nil;
this.list.mega_demondrug = nil;
return;
end
local demondrug_const_value = demondrug_atk_up_field:get_data(item_parameter);
if demondrug_const_value == nil then
error_handler.report("item_buffs.update_demondrug", "Failed to Access Data: demondrug_const_value");
this.list.demondrug = nil;
this.list.mega_demondrug = nil;
return;
end
local mega_demondrug_const_value = great_demondrug_atk_up_field:get_data(item_parameter);
if mega_demondrug_const_value == nil then
error_handler.report("item_buffs.update_demondrug", "Failed to Access Data: mega_demondrug_const_value");
this.list.demondrug = nil;
this.list.mega_demondrug = nil;
return;
end
local item_key;
if demondrug_value == demondrug_const_value then
item_key = "demondrug";
this.list.mega_demondrug = nil;
elseif demondrug_value == mega_demondrug_const_value then
item_key = "mega_demondrug";
this.list.demondrug = nil;
end
if not cached_config[item_key] then
this.list[item_key] = nil;
return;
end
this.update_generic(item_key);
end
function this.update_armorskin(player_data, item_parameter)
local cached_config = config.current_config.buff_UI.filter.item_buffs;
if not cached_config.armorskin and not cached_config.mega_armorskin then
this.list.armorskin = nil;
this.list.mega_armorskin = nil;
return;
end
local armorskin_value = def_up_alive_field:get_data(player_data);
if armorskin_value == nil then
error_handler.report("item_buffs.update_armorskin", "Failed to Access Data: armorskin_value");
this.list.armorskin = nil;
this.list.mega_armorskin = nil;
return;
end
if armorskin_value == 0 then
this.list.armorskin = nil;
this.list.mega_armorskin = nil;
return;
end
local armorskin_const_value = armorskin_def_up_field:get_data(item_parameter);
if armorskin_const_value == nil then
error_handler.report("item_buffs.update_armorskin", "Failed to Access Data: armorskin_const_value");
this.list.armorskin = nil;
this.list.mega_armorskin = nil;
return;
end
local mega_armorskin_const_value = great_armorskin_def_up_field:get_data(item_parameter);
if mega_armorskin_const_value == nil then
error_handler.report("item_buffs.update_armorskin", "Failed to Access Data: mega_armorskin_const_value");
this.list.armorskin = nil;
this.list.mega_armorskin = nil;
return;
end
local item_key;
if armorskin_value == armorskin_const_value then
item_key = "armorskin";
this.list.mega_armorskin = nil;
elseif armorskin_value == mega_armorskin_const_value then
item_key = "mega_armorskin";
this.list.armorskin = nil;
end
if not cached_config[item_key] then
this.list[item_key] = nil;
return;
end
this.update_generic(item_key);
end
function this.update_might_seed(player_data, item_parameter)
if this.apply_filter("might_seed") then
return;
end
local atk_up_buff_second = atk_up_buff_second_field:get_data(player_data);
if atk_up_buff_second == nil then
error_handler.report("item_buffs.update_might_seed", "Failed to Access Data: atk_up_buff_second");
this.list.might_seed = nil;
return;
end
local might_seed_atk_up = might_seed_atk_up_field:get_data(item_parameter);
if might_seed_atk_up == nil then
error_handler.report("item_buffs.update_might_seed", "Failed to Access Data: might_seed_atk_up");
this.list.might_seed = nil;
return;
end
if atk_up_buff_second ~= might_seed_atk_up then
this.list.might_seed = nil;
return;
end
this.update_item_buff("might_seed", nil, nil, player_data, atk_up_buff_second_timer_field);
end
function this.init_all_UI()
for item_buff_key, item_buff in pairs(this.list) do
buffs.init_UI(item_buff);
end
end
function this.init_names()
for item_buff_key, item_buff in pairs(this.list) do
item_buff.name = this.get_item_buff_name(item_buff_key);
end
end
function this.get_item_buff_name(key)
local item_buff_name = get_name_method:call(nil, item_ids[key]);
if item_buff_name == nil then
error_handler.report("item_buffs.get_item_buff_name", string.format("Failed to Access Data: %s_name", key));
return key;
end
return item_buff_name;
end
function this.init_dependencies()
buffs = require("MHR_Overlay.Buffs.buffs");
config = require("MHR_Overlay.Misc.config");
utils = require("MHR_Overlay.Misc.utils");
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
singletons = require("MHR_Overlay.Game_Handler.singletons");
players = require("MHR_Overlay.Damage_Meter.players");
language = require("MHR_Overlay.Misc.language");
error_handler = require("MHR_Overlay.Misc.error_handler");
endemic_life_buffs = require("MHR_Overlay.Buffs.endemic_life_buffs");
end
function this.init_module()
end
return this;
@@ -0,0 +1,258 @@
local this = {};
local buffs;
local buff_UI_entity;
local config;
local singletons;
local players;
local utils;
local language;
local error_handler;
local time;
local sdk = sdk;
local tostring = tostring;
local pairs = pairs;
local ipairs = ipairs;
local tonumber = tonumber;
local require = require;
local pcall = pcall;
local table = table;
local string = string;
local Vector3f = Vector3f;
local d2d = d2d;
local math = math;
local json = json;
local log = log;
local fs = fs;
local next = next;
local type = type;
local setmetatable = setmetatable;
local getmetatable = getmetatable;
local assert = assert;
local select = select;
local coroutine = coroutine;
local utf8 = utf8;
local re = re;
local imgui = imgui;
local draw = draw;
local Vector2f = Vector2f;
local reframework = reframework;
local os = os;
local ValueType = ValueType;
local package = package;
--[[local melody_effect_ids = {
self_improvement = 0,
attack_up = 1,
defense_up = 2,
affinity_up = 3,
elemental_attack_boost = 4,
attack_and_defense_up = 5,
attack_and_affinity_up = 6,
knockbacks_negated = 7,
earplugs_s = 8,
earplugs_l = 9,
tremors_negated = 10,
wind_pressure_negated = 11,
stun_negated = 12,
blight_negated = 13,
divine_protection = 14,
health_recovery_s = 15,
health_recovery_l = 16,
health_recovery_s_antidote = 17,
health_regeneration = 18,
stamina_use_reduced = 19,
stamina_recovery_up = 20,
sharpness_loss_reduced = 21,
environment_damage_negated = 22,
sonic_wave = 23,
sonic_barrier = 24,
infernal_melody = 25,
sharpness_regeneration = 26,
sharpness_extension = 27
};]]
this.keys = {
"self_improvement",
"attack_up",
"defense_up",
"affinity_up",
"elemental_attack_boost",
"attack_and_defense_up",
"attack_and_affinity_up",
"knockbacks_negated",
"earplugs_s",
"earplugs_l",
"tremors_negated",
"wind_pressure_negated",
"stun_negated",
"blight_negated",
"divine_protection",
"health_recovery_s",
"health_recovery_l",
"health_recovery_s_antidote",
"health_regeneration",
"stamina_use_reduced",
"stamina_recovery_up",
"sharpness_loss_reduced",
"environment_damage_negated",
"sonic_wave",
"sonic_barrier",
"infernal_melody",
"sharpness_regeneration",
"sharpness_extension"
};
this.list = {};
local melody_effects_type_name = "melody_effects";
local player_manager_type_def = sdk.find_type_definition("snow.player.PlayerManager");
local find_master_player_method = player_manager_type_def:get_method("findMasterPlayer");
local player_base_type_def = find_master_player_method:get_return_type();
local music_data_field = player_base_type_def:get_field("_MusicData");
local music_data_type_def = sdk.find_type_definition("snow.player.Horn.MusicData");
local time_field = music_data_type_def:get_field("_Time");
local system_array_type_def = sdk.find_type_definition("System.Array");
local get_length_method = system_array_type_def:get_method("get_Length");
local get_value_method = system_array_type_def:get_method("GetValue(System.Int32)");
local data_shortcut_type_def = sdk.find_type_definition("snow.data.DataShortcut");
local get_name_method = data_shortcut_type_def:get_method("getName(snow.data.DataDef.HornConcertId)");
function this.update(master_player)
local music_data_array = music_data_field:get_data(master_player);
if music_data_array == nil then
error_handler.report("melody_effects.update", "Failed to Access Data: music_data_array");
return;
end
local length = get_length_method:call(music_data_array);
if length == nil then
error_handler.report("melody_effects.update", "Failed to Access Data: music_data_array -> length");
return;
end
length = length - 1;
for id = 0, length do
local lua_index = id + 1;
local melody_effect = this.list[lua_index];
local key = this.keys[lua_index];
if this.apply_filter(key, lua_index) then
goto continue;
end
local music_data = get_value_method:call(music_data_array, id);
if music_data == nil then
error_handler.report("melody_effects.update", "Failed to Access Data: music_data No." .. tostring(id));
this.list[lua_index] = nil;
goto continue;
end
this.update_melody_effect(lua_index, id, key, melody_effect, music_data);
::continue::
end
end
function this.update_melody_effect(lua_index, id, key, melody_effect, melody_data)
local melody_timer = time_field:get_data(melody_data);
if melody_timer == nil then
error_handler.report("melody_effects.update_melody_effect", "Failed to Access Data: melody_timer No. " .. tostring(id));
this.list[lua_index] = nil;
return;
end
if utils.number.is_equal(melody_timer, 0) then
this.list[lua_index] = nil;
return;
end
if melody_effect == nil then
local melody_effect_name = this.get_melody_effect_name(id);
melody_effect = buffs.new(melody_effects_type_name, key, melody_effect_name, 1, melody_timer / 60);
this.list[lua_index] = melody_effect;
else
buffs.update_timer(melody_effect, melody_timer / 60);
end
end
function this.apply_filter(key, lua_index)
if config.current_config.buff_UI.filter.melody_effects[key] then
return false;
end
local buff = this.list[lua_index];
if buff == nil then
return true;
end
if not buff.is_visible then
return true;
end
if buff.is_infinite then
this.list[lua_index] = nil;
return true;
end
time.new_delay_timer(function()
local _buff = this.list[lua_index];
if _buff ~= nil and not _buff.is_visible then
this.list[lua_index] = nil;
end
end, buff.timer);
buff.is_visible = false;
return true;
end
function this.init_all_UI()
for melody_effect_id, melody_effect in pairs(this.list) do
buffs.init_UI(melody_effect);
end
end
function this.init_names()
for melody_effect_id, melody_effect in pairs(this.list) do
melody_effect.name = this.get_melody_effect_name(melody_effect_id - 1);
end
end
function this.get_melody_effect_name(id)
local melody_effect_name = get_name_method:call(nil, id);
if melody_effect_name == nil then
local name = string.format("Melody Effect No. %d", id);
error_handler.report("melody_effects.get_melody_effect_name", "Failed to Access Data: " .. melody_effect_name);
return name;
end
return melody_effect_name;
end
function this.init_dependencies()
buffs = require("MHR_Overlay.Buffs.buffs");
config = require("MHR_Overlay.Misc.config");
utils = require("MHR_Overlay.Misc.utils");
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
singletons = require("MHR_Overlay.Game_Handler.singletons");
players = require("MHR_Overlay.Damage_Meter.players");
language = require("MHR_Overlay.Misc.language");
error_handler = require("MHR_Overlay.Misc.error_handler");
time = require("MHR_Overlay.Game_Handler.time");
end
function this.init_module()
end
return this;
@@ -0,0 +1,190 @@
local this = {};
local buffs;
local buff_UI_entity;
local config;
local singletons;
local players;
local utils;
local language;
local error_handler;
local endemic_life_buffs;
local item_buffs;
local sdk = sdk;
local tostring = tostring;
local pairs = pairs;
local ipairs = ipairs;
local tonumber = tonumber;
local require = require;
local pcall = pcall;
local table = table;
local string = string;
local Vector3f = Vector3f;
local d2d = d2d;
local math = math;
local json = json;
local log = log;
local fs = fs;
local next = next;
local type = type;
local setmetatable = setmetatable;
local getmetatable = getmetatable;
local assert = assert;
local select = select;
local coroutine = coroutine;
local utf8 = utf8;
local re = re;
local imgui = imgui;
local draw = draw;
local Vector2f = Vector2f;
local reframework = reframework;
local os = os;
local ValueType = ValueType;
local package = package;
this.list = {
attack_up = nil,
defense_up = nil,
stamina_use_down = nil,
natural_healing_up = nil,
immunity = nil
};
this.keys = {
"attack_up",
"defense_up",
"stamina_use_down",
"natural_healing_up",
"immunity"
};
-- Attack Up
-- Might Seed +10 3min -- Separated
-- Dango Bulker + 15 30sec
-- Chameleos Soul +15 30sec
-- Butterflame +25 1min -- Separated
-- Defense Up
-- Adamant Seed +20 3min
-- Chameleos Souls +20 30sec
-- Stamina Use Down
-- Dash Juice 3min
-- Peepersects 1.5min
-- Chameleos Soul 30sec
-- Natural Healing Up
-- Immunizer 5min
-- Vase of Vitality 20sec
local misc_buffs_type_name = "misc_buffs";
local player_data_type_def = sdk.find_type_definition("snow.player.PlayerData");
-- Attack Up
local atk_up_buff_second_field = player_data_type_def:get_field("_AtkUpBuffSecond");
local atk_up_buff_second_timer_field = player_data_type_def:get_field("_AtkUpBuffSecondTimer");
-- Defense Up
local def_up_buff_second_field = player_data_type_def:get_field("_DefUpBuffSecond");
local def_up_buff_second_timer_field = player_data_type_def:get_field("_DefUpBuffSecondTimer");
-- Stamina Use Down
local stamina_up_buff_second_timer_field = player_data_type_def:get_field("_StaminaUpBuffSecondTimer");
-- Immunity
local debuff_prevention_timer_field = player_data_type_def:get_field("_DebuffPreventionTimer");
-- Immunizer
local vitalizer_timer_field = player_data_type_def:get_field("_VitalizerTimer");
local player_manager_type_def = sdk.find_type_definition("snow.player.PlayerManager");
local get_ref_item_parameter_method = player_manager_type_def:get_method("get_RefItemParameter");
local player_user_data_item_parameter_type_def = get_ref_item_parameter_method:get_return_type();
-- Might Seed
local might_seed_atk_up_field = player_user_data_item_parameter_type_def:get_field("_MightSeedAtkUp");
function this.update(player, player_data, item_parameter)
this.update_attack_up(player_data, item_parameter);
--this.update_misc_buff("attack_up", player_data, atk_up_buff_second_field, player_data, atk_up_buff_second_timer_field);
this.update_misc_buff("defense_up", player_data, def_up_buff_second_field, player_data, def_up_buff_second_timer_field);
this.update_misc_buff("stamina_use_down", nil, nil, player_data, stamina_up_buff_second_timer_field);
this.update_misc_buff("natural_healing_up", nil, nil, player_data, vitalizer_timer_field);
this.update_misc_buff("immunity", nil, nil, player_data, debuff_prevention_timer_field);
end
function this.update_misc_buff(key, value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints)
return buffs.update_generic_buff(this.list, config.current_config.buff_UI.filter.misc_buffs, this.get_misc_buff_name,
misc_buffs_type_name, key,
value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints);
end
function this.apply_filter(key)
return buffs.apply_filter(this.list, config.current_config.buff_UI.filter.misc_buffs, key);
end
function this.update_attack_up(player_data, item_parameter)
if this.apply_filter("attack_up") then
return;
end
local atk_up_buff_second = atk_up_buff_second_field:get_data(player_data);
if atk_up_buff_second == nil then
error_handler.report("item_buffs.update_attack_up", "Failed to Access Data: atk_up_buff_second");
this.list.attack_up = nil;
return;
end
local might_seed_atk_up = might_seed_atk_up_field:get_data(item_parameter);
if might_seed_atk_up == nil then
error_handler.report("item_buffs.update_might_seed", "Failed to Access Data: might_seed_atk_up");
this.list.attack_up = nil;
return;
end
if atk_up_buff_second == might_seed_atk_up or atk_up_buff_second == endemic_life_buffs.butterflame_attack_up then
this.list.attack_up = nil;
return;
end
this.update_misc_buff("attack_up", nil, nil, player_data, atk_up_buff_second_timer_field);
end
function this.init_all_UI()
for misc_buff_key, misc_buff in pairs(this.list) do
buffs.init_UI(misc_buff);
end
end
function this.init_names()
for misc_buff_key, misc_buff in pairs(this.list) do
misc_buff.name = this.get_misc_buff_name(misc_buff_key);
end
end
function this.get_misc_buff_name(key)
local misc_buff_name = language.current_language.misc_buffs[key];
if misc_buff_name == nil then
return key;
end
return misc_buff_name;
end
function this.init_dependencies()
buffs = require("MHR_Overlay.Buffs.buffs");
config = require("MHR_Overlay.Misc.config");
utils = require("MHR_Overlay.Misc.utils");
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
singletons = require("MHR_Overlay.Game_Handler.singletons");
players = require("MHR_Overlay.Damage_Meter.players");
language = require("MHR_Overlay.Misc.language");
error_handler = require("MHR_Overlay.Misc.error_handler");
endemic_life_buffs = require("MHR_Overlay.Buffs.endemic_life_buffs");
item_buffs = require("MHR_Overlay.Buffs.item_buffs");
end
function this.init_module()
end
return this;
@@ -0,0 +1,162 @@
local this = {};
local buffs;
local buff_UI_entity;
local config;
local singletons;
local players;
local utils;
local language;
local error_handler;
local env_creature;
local player_info;
local time;
local abnormal_statuses;
local sdk = sdk;
local tostring = tostring;
local pairs = pairs;
local ipairs = ipairs;
local tonumber = tonumber;
local require = require;
local pcall = pcall;
local table = table;
local string = string;
local Vector3f = Vector3f;
local d2d = d2d;
local math = math;
local json = json;
local log = log;
local fs = fs;
local next = next;
local type = type;
local setmetatable = setmetatable;
local getmetatable = getmetatable;
local assert = assert;
local select = select;
local coroutine = coroutine;
local utf8 = utf8;
local re = re;
local imgui = imgui;
local draw = draw;
local Vector2f = Vector2f;
local reframework = reframework;
local os = os;
local ValueType = ValueType;
local package = package;
this.list = {
go_fight_win = nil,
power_drum = nil,
rousing_roar = nil
};
this.keys = {
"go_fight_win",
"power_drum",
"rousing_roar"
};
local otomo_moves_ids = {
-- herbaceous_healing = 1,
-- felyne_silkbind = 2,
-- felyne_wyvernblast = 3,
rousing_roar = 4,
-- endemic_life_barrage = 5,
-- health_horn = 6,
-- healing_bubble = 7,
vase_of_vitality = 8,
-- furbidden_acorn = 9,
-- poison_purr_ison = 10,
-- summeown_endemic_life = 11,
-- shock_purr_ison = 12,
go_fight_win = 13,
-- giga_barrel_bombay = 14,
-- flash_bombay = 15,
-- anti_monster_mine = 16,
-- zap_blast_spinner = 17,
-- furr_ious = 18,
power_drum = 19,
-- fleet_foot_feat = 20,
-- whirlwind_assault = 21,
-- pilfer = 22,
-- shock_tripper = 23,
-- mega_boomerang = 24,
-- camouflage = 25,
-- healing_clover_bat = 26,
-- felyne_firewors = 27,
-- lottery_box = 28,
-- felyne_powered_up = 29,
-- ameowzing_mist = 30
};
local otomo_moves_type_name = "otomo_moves"
local player_data_type_def = sdk.find_type_definition("snow.player.PlayerData");
-- Palico: Rousing Roar
local beast_roar_otomo_timer_field = player_data_type_def:get_field("_BeastRoarOtomoTimer");
-- Palico: Power Drum
local kijin_otomo_timer_field = player_data_type_def:get_field("_KijinOtomoTimer");
-- Palico: Go, Fight, Win
local runhigh_otomo_timer_field = player_data_type_def:get_field("_RunhighOtomoTimer");
local data_shortcut_type_def = sdk.find_type_definition("snow.data.DataShortcut");
local get_name_method = data_shortcut_type_def:get_method("getName(snow.data.DataDef.OtSupportActionId)");
function this.update(player_data)
this.update_otomo_move("rousing_roar", nil, nil, player_data, beast_roar_otomo_timer_field);
this.update_otomo_move("go_fight_win", nil, nil, player_data, runhigh_otomo_timer_field);
this.update_otomo_move("power_drum", nil, nil, player_data, kijin_otomo_timer_field);
end
function this.update_otomo_move(key, value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints)
return buffs.update_generic_buff(this.list, config.current_config.buff_UI.filter.otomo_moves, this.get_otomo_move_name,
otomo_moves_type_name, key,
value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints)
end
function this.apply_filter(key)
return buffs.apply_filter(this.list, config.current_config.buff_UI.filter.otomo_moves, key);
end
function this.init_all_UI()
for otomo_move_key, otomo_move in pairs(this.list) do
buffs.init_UI(otomo_move);
end
end
function this.init_names()
for otomo_move_key, otomo_move in pairs(this.list) do
otomo_move.name = this.get_otomo_move_name(otomo_move_key);
end
end
function this.get_otomo_move_name(key)
local otomo_move_name = get_name_method:call(nil, otomo_moves_ids[key]);
if otomo_move_name == nil then
error_handler.report("otomo_moves.get_otomo_move_name", string.format("Failed to Access Data: %s_name", key));
return key;
end
return otomo_move_name;
end
function this.init_dependencies()
buffs = require("MHR_Overlay.Buffs.buffs");
config = require("MHR_Overlay.Misc.config");
utils = require("MHR_Overlay.Misc.utils");
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
singletons = require("MHR_Overlay.Game_Handler.singletons");
players = require("MHR_Overlay.Damage_Meter.players");
language = require("MHR_Overlay.Misc.language");
error_handler = require("MHR_Overlay.Misc.error_handler");
env_creature = require("MHR_Overlay.Endemic_Life.env_creature");
player_info = require("MHR_Overlay.Misc.player_info");
time = require("MHR_Overlay.Game_Handler.time");
abnormal_statuses = require("MHR_Overlay.Buffs.abnormal_statuses");
end
function this.init_module()
end
return this;
@@ -0,0 +1,134 @@
local this = {};
local buffs;
local buff_UI_entity;
local config;
local singletons;
local players;
local utils;
local language;
local error_handler;
local env_creature;
local player_info;
local time;
local abnormal_statuses;
local sdk = sdk;
local tostring = tostring;
local pairs = pairs;
local ipairs = ipairs;
local tonumber = tonumber;
local require = require;
local pcall = pcall;
local table = table;
local string = string;
local Vector3f = Vector3f;
local d2d = d2d;
local math = math;
local json = json;
local log = log;
local fs = fs;
local next = next;
local skills_type_name = type;
local setmetatable = setmetatable;
local getmetatable = getmetatable;
local assert = assert;
local select = select;
local coroutine = coroutine;
local utf8 = utf8;
local re = re;
local imgui = imgui;
local draw = draw;
local Vector2f = Vector2f;
local reframework = reframework;
local os = os;
local ValueType = ValueType;
local package = package;
this.list = {
chameleos_soul = nil,
kushala_daora_soul = nil,
};
this.keys = {
"chameleos_soul",
"kushala_daora_soul",
};
local rampage_skill_ids = {
chameleos_soul = 250,
kushala_daora_soul = 251,
};
local rampage_skills_type_name = "rampage_skills";
local kushara_daora_soul_breakpoint = 5;
local player_data_type_def = sdk.find_type_definition("snow.player.PlayerData");
-- Kushala Daora Soul
local hyakuryu_dragon_power_up_count_field = player_data_type_def:get_field("_HyakuryuDragonPowerUpCnt");
local hyakuryu_dragon_power_up_timer_field = player_data_type_def:get_field("_HyakuryuDragonPowerUpTimer");
-- Chameleos Soul
local hyakuryu_onazuti_power_up_interval_field = player_data_type_def:get_field("_HyakuryuHyakuryuOnazutiPowerUpInterval");
local data_shortcut_type_def = sdk.find_type_definition("snow.data.DataShortcut");
local get_name_method = data_shortcut_type_def:get_method("getName(snow.data.DataDef.PlHyakuryuSkillId)");
function this.update(player_data)
this.update_rampage_skill("kushala_daora_soul", player_data, hyakuryu_dragon_power_up_count_field,
player_data, hyakuryu_dragon_power_up_timer_field, false, nil, {kushara_daora_soul_breakpoint});
this.update_rampage_skill("chameleos_soul", nil, nil, player_data, hyakuryu_onazuti_power_up_interval_field);
end
function this.update_rampage_skill(key, value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints)
return buffs.update_generic_buff(this.list, config.current_config.buff_UI.filter.rampage_skills, this.get_rampage_skill_name,
rampage_skills_type_name, key,
value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints)
end
function this.apply_filter(key)
return buffs.apply_filter(this.list, config.current_config.buff_UI.filter.rampage_skills, key);
end
function this.init_all_UI()
for rampage_skill_key, rampage_skill in pairs(this.list) do
buffs.init_UI(rampage_skill);
end
end
function this.init_names()
for rampage_skill_key, rampage_skill in pairs(this.list) do
rampage_skill.name = this.get_rampage_skill_name(rampage_skill_key);
end
end
function this.get_rampage_skill_name(key)
local rampage_skill_name = get_name_method:call(nil, rampage_skill_ids[key]);
if rampage_skill_name == nil then
error_handler.report("rampage_skills.get_rampage_skill_name", string.format("Failed to Access Data: %s_name", key));
return key;
end
return rampage_skill_name;
end
function this.init_dependencies()
buffs = require("MHR_Overlay.Buffs.buffs");
config = require("MHR_Overlay.Misc.config");
utils = require("MHR_Overlay.Misc.utils");
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
singletons = require("MHR_Overlay.Game_Handler.singletons");
players = require("MHR_Overlay.Damage_Meter.players");
language = require("MHR_Overlay.Misc.language");
error_handler = require("MHR_Overlay.Misc.error_handler");
env_creature = require("MHR_Overlay.Endemic_Life.env_creature");
player_info = require("MHR_Overlay.Misc.player_info");
time = require("MHR_Overlay.Game_Handler.time");
abnormal_statuses = require("MHR_Overlay.Buffs.abnormal_statuses");
end
function this.init_module()
end
return this;
@@ -0,0 +1,902 @@
local this = {};
local buffs;
local buff_UI_entity;
local config;
local singletons;
local players;
local utils;
local language;
local error_handler;
local env_creature;
local player_info;
local time;
local abnormal_statuses;
local sdk = sdk;
local tostring = tostring;
local pairs = pairs;
local ipairs = ipairs;
local tonumber = tonumber;
local require = require;
local pcall = pcall;
local table = table;
local string = string;
local Vector3f = Vector3f;
local d2d = d2d;
local math = math;
local json = json;
local log = log;
local fs = fs;
local next = next;
local skills_type_name = type;
local setmetatable = setmetatable;
local getmetatable = getmetatable;
local assert = assert;
local select = select;
local coroutine = coroutine;
local utf8 = utf8;
local re = re;
local imgui = imgui;
local draw = draw;
local Vector2f = Vector2f;
local reframework = reframework;
local os = os;
local ValueType = ValueType;
local package = package;
this.list = {
adrenaline_rush = nil,
affinity_sliding = nil,
agitator = nil,
berserk = nil,
bladescale_hone = nil,
blood_awakening = nil,
bloodlust = nil,
burst = nil,
coalescence = nil,
counterstrike = nil,
dereliction = nil,
dragon_conversion_elemental_attack_up = nil,
dragon_conversion_elemental_res_up = nil,
dragonheart = nil,
embolden = nil,
frenzied_bloodlust = nil,
furious = nil,
grinder_s = nil,
heaven_sent = nil,
hellfire_cloak = nil,
heroics = nil,
inspiration = nil,
intrepid_heart = nil,
latent_power = nil,
maximum_might = nil,
offensive_guard = nil,
partbreaker = nil,
peak_performance = nil,
powder_mantle_red = nil,
powder_mantle_blue = nil,
protective_polish = nil,
resentment = nil,
resuscitate = nil,
spiribirds_call = nil,
status_trigger = nil,
strife = nil,
wall_runner = nil,
wind_mantle = nil,
};
this.keys = {
"adrenaline_rush",
"affinity_sliding",
"agitator",
"berserk",
"bladescale_hone",
"blood_awakening",
"bloodlust",
"burst",
"coalescence",
"counterstrike",
"dereliction",
"dragon_conversion_elemental_attack_up",
"dragon_conversion_elemental_res_up",
"dragonheart",
"embolden",
"frenzied_bloodlust",
"furious",
"grinder_s",
"heaven_sent",
"hellfire_cloak",
"heroics",
"inspiration",
"intrepid_heart",
"latent_power",
"maximum_might",
"offensive_guard",
"partbreaker",
"peak_performance",
"powder_mantle_red",
"powder_mantle_blue",
"protective_polish",
"resentment",
"resuscitate",
"spiribirds_call",
"status_trigger",
"strife",
"wall_runner",
"wind_mantle"
};
local skills_type_name = "skills";
local skill_data_list = {
-- attack_boost = { id = 1 },
agitator = { id = 2 },
peak_performance = { id = 3, level = 0, is_equipped = false },
resentment = { id = 4, level = 0, is_equipped = false },
resuscitate = { id = 5, level = 0, is_equipped = false },
-- critical_eye = { id = 6 },
-- critical_boost = { id = 7 },
-- weakness_exploit = { id = 8 },
latent_power = { id = 9 },
maximum_might = { id = 10, level = 0, is_equipped = false },
-- critical_element = { id = 11 },
-- masters_touch = { id = 12 },
-- fire_attack = { id = 13 },
-- water_attack = { id = 14 },
-- ice_attack = { id = 15 },
-- thunder_attack = { id = 16 },
-- dragon_attack = { id = 17 },
-- poison_attack = { id = 18 },
-- paralysis_attack = { id = 19 },
-- sleep_attack = { id = 20 },
-- blast_attack = { id = 21 },
-- handicraft = { id = 22 },
-- razor_sharp = { id = 23 },
-- spare_shot = { id = 24 },
protective_polish = { id = 25 },
-- minds_eye = { id = 26 },
-- ballistics = { id = 27 },
-- bludgeoner = { id = 28 },
-- bow_charge_plus = { id = 29 },
-- focus = { id = 30 },
-- power_prolonger = { id = 31 },
-- marathon_runner = { id = 32 },
-- constitution = { id = 33 },
-- stamina_surge = { id = 34 },
-- guard = { id = 35 },
-- guard_up = { id = 36 },
offensive_guard = { id = 37 },
-- critical_draw = { id = 38 },
-- punishing_draw = { id = 39 },
-- quick_sheathe = { id = 40 },
-- slugger = { id = 41 },
-- stamina_thief = { id = 42 },
affinity_sliding = { id = 43 },
-- horn_maestro = { id = 44 },
-- artillery = { id = 45 },
-- load_shells = { id = 46 },
-- special_ammo_boost = { id = 47 },
-- normal_rapid_up = { id = 48 },
-- pierce_up = { id = 49 },
-- spread_up = { id = 50 },
-- ammo_up = { id = 51 },
-- reload_speed = { id = 52 },
-- recoil_down = { id = 53 },
-- steadiness = { id = 54 },
-- rapid_fire_up = { id = 55 },
-- defense_boost = { id = 56 },
-- divine_blessing = { id = 57 },
-- recovery_up = { id = 58 },
-- recovery_speed = { id = 59 },
-- speed_eating = { id = 60 },
-- earplugs = { id = 61 },
-- windproof = { id = 62 },
-- tremor_resistance = { id = 63 },
-- bubbly_dance = { id = 64 },
-- evade_window = { id = 65 },
-- evade_extender = { id = 66 },
-- fire_resistance = { id = 67 },
-- water_resistance = { id = 68 },
-- ice_resistance = { id = 69 },
-- thunder_resistance = { id = 70 },
-- dragon_resistance = { id = 71 },
-- blight_resistance = { id = 72 },
-- poison_resistance = { id = 73 },
-- paralysis_resistance = { id = 74 },
-- sleep_resistance = { id = 75 },
-- stun_resistance = { id = 76 },
-- muck_resistance = { id = 77 },
-- blast_resistance = { id = 78 },
-- botanist = { id = 79 },
-- geologist = { id = 80 },
partbreaker = { id = 81, level = 0, is_equipped = false },
-- capture_master = { id = 82 },
-- carving_master = { id = 83 },
-- good_luck = { id = 84 },
-- speed_sharpening = { id = 85 },
-- bombardier = { id = 86 },
-- mushroomancer = { id = 87 },
-- item_prolonger = { id = 88 },
-- wide_range = { id = 89 },
-- free_meal = { id = 90 },
heroics = { id = 91, level = 0, is_equipped = false },
-- fortify = { id = 92 },
-- flinch_free = { id = 93 },
-- jump_master = { id = 94 },
-- carving_pro = { id = 95 },
-- hunger_resistance = { id = 96 },
-- leap_of_faith = { id = 97 },
-- diversion = { id = 98 },
-- master_mounter = { id = 99 },
-- chameleos_blessing = { id = 100 },
-- kushala_blessing = { id = 101 },
-- teostra_blessing = { id = 102 },
dragonheart = { id = 103, level = 0, is_equipped = false },
-- wirebug_whisperer = { id = 104 },
wall_runner = { id = 105 },
counterstrike = { id = 106 },
-- rapid_morph = { id = 107 },
hellfire_cloak = { id = 108 },
-- wind_alignment = { id = 109 },
-- thunder_alignment = { id = 110 },
-- stormsoul = { id = 111 },
-- blood_rite = { id = 112 },
dereliction = { id = 113, level = 0, is_equipped = false },
furious = { id = 114 },
-- mail_of_hellfire = { id = 115 },
coalescence = { id = 116 },
bloodlust = { id = 117, level = 0, is_equipped = false },
-- defiance = { id = 118 },
-- sneak_attack = { id = 119 },
adrenaline_rush = { id = 120 },
embolden = { id = 121 },
-- redirection = { id = 122 },
spiribirds_call = { id = 123 },
charge_master = { id = 124 },
-- foray = { id = 125 },
-- tune_up = { id = 126 },
grinder_s = { id = 127 },
bladescale_hone = { id = 128 },
-- wall_runner_boost = { id = 129 },
-- element_exploit = { id = 130 },
burst = { id = 131 },
-- guts = { id = 132 },
-- quick_breath = { id = 133 },
status_trigger = { id = 134 },
intrepid_heart = { id = 135 },
-- buildup_boost = { id = 136 },
berserk = { id = 137 },
wind_mantle = { id = 138 },
-- powder_mantle = { id = 139 },
-- frostcraft = { id = 140 },
-- dragon_conversion = { id = 141 }, -- implemented
heaven_sent = { id = 142 },
frenzied_bloodlust = { id = 143 },
blood_awakening = { id = 144 },
strife = { id = 145, level = 0, is_equipped = false },
-- shock_absorber = { id = 146 },
inspiration = { id = 147 },
}
this.is_heroics_active = false;
local intrepid_heart_minimal_value = 400;
local burst_breakpoints = { 5 };
local dereliction_breakpoints = { 100, 50 };
local dragonheart_breakpoints = { 0.5, 0.5, 0.7, 0.7, 0.8 };
local strife_breakpoints = { { 10 }, { 15 }, { 20 } };
local blood_awakening_breakpoints = { 2 };
local wind_mantle_breakpoints = { 20, 10 }; -- Sword & Shield, Lance, Hammer, Switch Axe, Insect Glaive, Long Sword, Hunting Horn
local wind_mantle_special_breakpoints = {
[0] = { 10, 5 }, -- Great Sword
[3] = { 60, 30 }, -- Light Bowgun
[4] = { 60, 30 }, -- Heavy Bowgun
[6] = { 30, 15 }, -- Gunlance
[9] = { 40, 20 }, -- Dual Blades
[11] = { 30, 15 }, -- Charge Blade
[13] = { 60, 30 }, -- Bow
};
local maximum_might_delay_timer = nil;
local maximum_might_previous_timer_value = 0;
local frenzied_bloodlust_duration = 0;
local frenzied_bloodlust_sheathed_duration = 0;
local spiribirds_call_duration = 60;
local wind_mantle_duration = 15;
local player_data_type_def = sdk.find_type_definition("snow.player.PlayerData");
-- Burst
local rengeki_power_up_count_field = player_data_type_def:get_field("_RengekiPowerUpCnt");
local rengeki_power_up_timer_field = player_data_type_def:get_field("_RengekiPowerUpTimer");
-- Intrepid Heart
local equip_skill_223_accumulator_field = player_data_type_def:get_field("_EquipSkill223Accumulator");
-- Derelection
local symbiosis_skill_lost_vital_field = player_data_type_def:get_field("_SymbiosisSkillLostVital");
-- Grinder (S)
local brand_new_sharpness_adjust_up_timer_field = player_data_type_def:get_field("_BrandNewSharpnessAdjustUpTimer");
-- Counterstrike
local counterattack_powerup_timer_field = player_data_type_def:get_field("_CounterattackPowerupTimer");
-- Affinity Sliding
local sliding_powerup_timer_field = player_data_type_def:get_field("_SlidingPowerupTimer");
-- Coalescence
local disaster_turn_powerup_timer_field = player_data_type_def:get_field("_DisasterTurnPowerUpTimer");
-- Adrenaline Rush
local equip_skill_208_atk_up_field = player_data_type_def:get_field("_EquipSkill208_AtkUpTimer");
-- Wall Runner
local wall_run_powerup_timer_field = player_data_type_def:get_field("_WallRunPowerupTimer");
-- Offensive Guard
local equip_skill_036_timer_field = player_data_type_def:get_field("_EquipSkill_036_Timer");
-- Hellfire Cloak
local onibi_powerup_timer_field = player_data_type_def:get_field("_OnibiPowerUpTiemr");
-- Agitator
local challenge_timer_field = player_data_type_def:get_field("_ChallengeTimer");
-- Furious
local furious_skill_stamina_buff_second_timer_field = player_data_type_def:get_field("_FuriousSkillStaminaBuffSecondTimer");
-- Maximum Might
local whole_body_timer_field = player_data_type_def:get_field("_WholeBodyTimer");
-- Frenzied Bloodlust
local equip_skill_231_wire_num_timer_field = player_data_type_def:get_field("_EquipSkill231_WireNumTimer");
local equip_skill_231_wp_off_timer_field = player_data_type_def:get_field("_EquipSkill231_WpOffTimer");
-- Resentment
local r_vital_field = player_data_type_def:get_field("_r_Vital");
-- Status Trigger
local equip_skill_222_timer_field = player_data_type_def:get_field("_EquipSkill222_Timer");
-- Spiritbird's Call
local equip_skill_211_timer_field = player_data_type_def:get_field("_EquipSkill211_Timer");
-- Powder Mantle
local equip_skill_227_state_field = player_data_type_def:get_field("_EquipSkill227State");
local equip_skill_227_state_timer_field = player_data_type_def:get_field("_EquipSkill227StateTimer");
-- Inspiration
local equip_skill_235_atk_up_second_timer_field = player_data_type_def:get_field("_EquipSkill235AtkUpSecondTimer");
-- Blood Awakening
local equip_skill_232_timer_field = player_data_type_def:get_field("_EquipSkill232Timer");
local player_base_type_def = sdk.find_type_definition("snow.player.PlayerBase");
local get_player_skill_list_method = player_base_type_def:get_method("get_PlayerSkillList");
-- Latent Power
local power_freedom_timer_field = player_base_type_def:get_field("_PowerFreedomTimer");
-- Protective Polish
local sharpness_gauge_boost_timer_field = player_base_type_def:get_field("_SharpnessGaugeBoostTimer");
-- Heroics
--local is_predicament_power_up_method = player_base_type_def:get_method("isPredicamentPowerUp");
-- Berserk
local get_is_enable_equip_skill_225_method = player_base_type_def:get_method("get_IsEnableEquipSkill225");
-- Dragon Conversion
local equip_skill_229_sum_resist_field = player_base_type_def:get_field("_EquipSkill229SumResist");
-- Resuscitate
local is_debuff_state_method = player_base_type_def:get_method("isDebuffState");
local player_skill_list_type_def = sdk.find_type_definition("snow.player.PlayerSkillList");
local get_skill_data_method = player_skill_list_type_def:get_method("getSkillData");
local skill_data_type_def = get_skill_data_method:get_return_type();
local skill_lv_field = skill_data_type_def:get_field("SkillLv");
local player_quest_base_type_def = sdk.find_type_definition("snow.player.PlayerQuestBase");
-- Wind Mantle
local is_equip_skill_226_enable_field = player_quest_base_type_def:get_field("_IsEquipSkill226Enable");
local equip_skill_226_attack_count_field = player_quest_base_type_def:get_field("_EquipSkill226AttackCount");
local equip_skill_226_attack_off_timer_field = player_quest_base_type_def:get_field("_EquipSkill226AttackOffTimer");
-- Heaven-Sent
local is_active_equip_skill_230_method = player_quest_base_type_def:get_method("isActiveEquipSkill230");
-- Frenzied Bloodlust
local get_hunter_wire_skill_231_num_method = player_quest_base_type_def:get_method("get_HunterWireSkill231Num");
-- Embolden
local get_active_equip_209_method = player_quest_base_type_def:get_method("getActiveEquipSkill209");
-- Dragon Conversion
local equip_skill_229_use_up_flag_field = player_quest_base_type_def:get_field("_EquipSkill229UseUpFlg");
-- Strife
local get_affinity_equip_skill_233_method = player_quest_base_type_def:get_method("getAffinityEquipSkill233");
-- Blood Awakening
local get_equip_skill_232_lv_method = player_quest_base_type_def:get_method("getEquipSkill232Lv");
local bow_type_def = sdk.find_type_definition("snow.player.Bow");
local _equip_skill_216_bottle_up_timer_field = bow_type_def:get_field("_EquipSkill216_BottleUpTimer");
local data_shortcut_type_def = sdk.find_type_definition("snow.data.DataShortcut");
local get_name_method = data_shortcut_type_def:get_method("getName(snow.data.DataDef.PlEquipSkillId)");
function this.update(player, player_data, weapon_type)
this.update_equipped_skill_data(player);
this.update_wind_mantle(player, weapon_type);
this.update_maximum_might(player_data);
this.update_bloodlust();
this.update_frenzied_bloodlust(player, player_data);
this.update_peak_performance();
this.update_heroics();
this.update_dragonheart();
this.update_resentment(player_data);
this.update_bladescale_hone(player, weapon_type);
this.update_spiribirds_call(player_data);
this.update_powder_mantle(player_data);
this.update_blood_awakening(player, player_data);
this.update_skill("dereliction", player_data, symbiosis_skill_lost_vital_field, nil, nil, true, nil, dereliction_breakpoints);
this.update_skill("burst", player_data, rengeki_power_up_count_field, player_data, rengeki_power_up_timer_field, false, nil, burst_breakpoints);
this.update_skill("intrepid_heart", player_data, equip_skill_223_accumulator_field, nil, nil, true, intrepid_heart_minimal_value);
this.update_skill("latent_power", nil, nil, player, power_freedom_timer_field);
this.update_skill("protective_polish", nil, nil, player, sharpness_gauge_boost_timer_field);
this.update_skill("grinder_s", nil, nil, player_data, brand_new_sharpness_adjust_up_timer_field);
this.update_skill("counterstrike", nil, nil, player_data, counterattack_powerup_timer_field);
this.update_skill("affinity_sliding", nil, nil, player_data, sliding_powerup_timer_field);
this.update_skill("coalescence", nil, nil, player_data, disaster_turn_powerup_timer_field);
this.update_skill("adrenaline_rush", nil, nil, player_data, equip_skill_208_atk_up_field);
this.update_skill("wall_runner", nil, nil, player_data, wall_run_powerup_timer_field);
this.update_skill("offensive_guard", nil, nil, player_data, equip_skill_036_timer_field);
this.update_skill("hellfire_cloak", nil, nil, player_data, onibi_powerup_timer_field);
this.update_skill("agitator", nil, nil, player_data, challenge_timer_field, nil, nil, true);
this.update_skill("furious", nil, nil, player_data, furious_skill_stamina_buff_second_timer_field);
this.update_skill("status_trigger", nil, nil, player_data, equip_skill_222_timer_field);
this.update_skill("inspiration", nil, nil, player_data, equip_skill_235_atk_up_second_timer_field);
this.update_skill("heaven_sent", player, is_active_equip_skill_230_method);
this.update_skill("resuscitate", player, is_debuff_state_method);
this.update_skill("embolden", player, get_active_equip_209_method);
this.update_skill("berserk", player, get_is_enable_equip_skill_225_method);
this.update_skill("dragon_conversion_elemental_attack_up", player, equip_skill_229_sum_resist_field);
this.update_skill("dragon_conversion_elemental_res_up", player, equip_skill_229_use_up_flag_field);
this.update_skill("partbreaker", nil, nil, nil, nil, true);
this.update_skill("strife", player, get_affinity_equip_skill_233_method, nil, nil, nil, nil, strife_breakpoints[skill_data_list.strife.level]);
end
function this.update_skill(key, value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints)
local skill_data = skill_data_list[key];
if skill_data ~= nil and skill_data.is_equipped ~= nil and not skill_data.is_equipped then
this.list[key] = nil;
return nil;
end
return buffs.update_generic_buff(this.list, config.current_config.buff_UI.filter.skills, this.get_skill_name,
skills_type_name, key,
value_owner, value_holder, timer_owner, timer_holder, is_infinite, minimal_value, level_breakpoints);
end
function this.update_generic(key, level, timer)
return buffs.update_generic(this.list, this.get_skill_name, skills_type_name, key, level, timer);
end
function this.apply_filter(key)
return buffs.apply_filter(this.list, config.current_config.buff_UI.filter.skills, key);
end
function this.update_equipped_skill_data(player)
local player_skill_list = get_player_skill_list_method:call(player);
if player_skill_list == nil then
error_handler.report("this.update_equipped_skill_data", "Failed to Access Data: player_skill_list");
return;
end
for skill_key, skill_data in pairs(skill_data_list) do
if skill_data.is_equipped == nil then
goto continue;
end
local re_skill_data = get_skill_data_method:call(player_skill_list, skill_data.id);
if re_skill_data == nil then
skill_data.is_equipped = false;
skill_data.level = 0;
goto continue;
end
local skill_level = skill_lv_field:get_data(re_skill_data);
if skill_level == nil then
error_handler.report("skills.update_equipped_skill_data", string.format("Failed to Access Data: %s -> skill_level", skill_key));
goto continue;
end
if skill_level <= 0 then
skill_data.is_equipped = false;
skill_data.level = 0;
goto continue;
end
skill_data.is_equipped = true;
skill_data.level = skill_level;
::continue::
end
end
function this.update_wind_mantle(player, weapon_type)
if this.apply_filter("wind_mantle") then
return;
end
local is_wind_mantle_enable = is_equip_skill_226_enable_field:get_data(player);
if is_wind_mantle_enable == nil then
error_handler.report("skills.update_wind_mantle", "Failed to Access Data: is_wind_mantle_enable");
this.list.wind_mantle = nil;
return;
end
if not is_wind_mantle_enable then
this.list.wind_mantle = nil;
return;
end
local wind_mantle_timer = equip_skill_226_attack_off_timer_field:get_data(player);
if wind_mantle_timer == nil then
error_handler.report("skills.update_wind_mantle", "Failed to Access Data: wind_mantle_timer");
this.list.wind_mantle = nil;
return;
end
local wind_mantle_value = equip_skill_226_attack_count_field:get_data(player);
if wind_mantle_value == nil then
error_handler.report("skills.update_wind_mantle", "Failed to Access Data: wind_mantle_value");
this.list.wind_mantle = nil;
return;
end
local level = 1;
local breakpoints = wind_mantle_special_breakpoints[weapon_type] or wind_mantle_breakpoints;
local breakpoint_count = #breakpoints;
for index, breakpoint in ipairs(breakpoints) do
if wind_mantle_value >= breakpoint then
level = 2 + breakpoint_count - index;
break;
end
end
this.update_generic("wind_mantle", level, wind_mantle_duration - (wind_mantle_timer / 60));
end
function this.update_maximum_might(player_data)
if not config.current_config.buff_UI.filter.skills.maximum_might then
this.list.maximum_might = nil;
maximum_might_previous_timer_value = 0;
return;
end
if not skill_data_list.maximum_might.is_equipped then
this.list.maximum_might = nil;
return;
end
local whole_body_timer = whole_body_timer_field:get_data(player_data);
if whole_body_timer == nil then
error_handler.report("skills.update_maximum_might", "Failed to Access Data: whole_body_timer");
this.list.maximum_might = nil;
return;
end
if player_info.list.max_stamina == -1 then
this.list.maximum_might = nil;
return;
end
local maximum_might = this.list.maximum_might;
if player_info.list.stamina ~= player_info.list.max_stamina then
if whole_body_timer < maximum_might_previous_timer_value then
this.list.maximum_might = nil;
end
elseif maximum_might == nil then
local maximum_might_name = this.get_skill_name("maximum_might");
if whole_body_timer < maximum_might_previous_timer_value then
this.list.maximum_might = buffs.new(skills_type_name, "maximum_might", maximum_might_name, 1);
elseif utils.number.is_equal(whole_body_timer, 0) then
if maximum_might_delay_timer == nil then
maximum_might_delay_timer = time.new_delay_timer(function()
maximum_might_delay_timer = nil;
this.list.maximum_might = buffs.new(skills_type_name, "maximum_might", maximum_might_name, 1);
end, 3.5);
end
else
time.remove_delay_timer(maximum_might_delay_timer);
end
end
maximum_might_previous_timer_value = whole_body_timer;
if maximum_might ~= nil then
maximum_might.is_visible = true;
end
end
function this.update_bloodlust()
if not config.current_config.buff_UI.filter.skills.bloodlust then
this.list.bloodlust = nil;
return;
end
if not skill_data_list.bloodlust.is_equipped then
this.list.bloodlust = nil;
return;
end
if not abnormal_statuses.list.frenzy_infection
and not abnormal_statuses.list.frenzy_overcome then
this.list.bloodlust = nil;
return;
end
local bloodlust = this.list.bloodlust;
if bloodlust == nil then
local bloodlust_name = this.get_skill_name("bloodlust");
if bloodlust_name == nil then
error_handler.report("skills.update_bloodlust", "Failed to Access Data: bloodlust_name");
this.list.bloodlust = nil;
return;
end
this.list.bloodlust = buffs.new(skills_type_name, "bloodlust", bloodlust_name);
end
this.list.bloodlust.is_visible = true;
end
function this.update_frenzied_bloodlust(player, player_data)
if this.apply_filter("frenzied_bloodlust") then
return;
end
local hunter_wire_skill_231_num = get_hunter_wire_skill_231_num_method:call(player);
if hunter_wire_skill_231_num == nil then
error_handler.report("skills.update_frenzied_bloodlust", "Failed to Access Data: hunter_wire_skill_231_num");
this.list.frenzied_bloodlust = nil;
return;
end
if hunter_wire_skill_231_num == 0 then
this.list.frenzied_bloodlust = nil;
frenzied_bloodlust_duration = 0;
frenzied_bloodlust_sheathed_duration = 0;
return;
end
local equip_skill_231_wire_num_timer = equip_skill_231_wire_num_timer_field:get_data(player_data);
if equip_skill_231_wire_num_timer == nil then
error_handler.report("skills.update_frenzied_bloodlust", "Failed to Access Data: equip_skill_231_wire_num_timer");
this.list.frenzied_bloodlust = nil;
return;
end
local equip_skill_231_wp_off_timer = equip_skill_231_wp_off_timer_field:get_data(player_data);
if equip_skill_231_wp_off_timer == nil then
error_handler.report("skills.update_frenzied_bloodlust", "Failed to Access Data: equip_skill_231_wp_off_timer");
this.list.frenzied_bloodlust = nil;
return;
end
local is_wire_num_timer_zero = utils.number.is_equal(equip_skill_231_wire_num_timer, 0);
if is_wire_num_timer_zero then
this.list.frenzied_bloodlust = nil;
return;
end
if equip_skill_231_wire_num_timer > frenzied_bloodlust_duration then
frenzied_bloodlust_duration = equip_skill_231_wire_num_timer;
end
if equip_skill_231_wp_off_timer > frenzied_bloodlust_sheathed_duration then
frenzied_bloodlust_sheathed_duration = equip_skill_231_wp_off_timer;
end
local is_wp_off_timer_max = utils.number.is_equal(equip_skill_231_wp_off_timer, frenzied_bloodlust_sheathed_duration);
local timer = equip_skill_231_wire_num_timer;
if not is_wp_off_timer_max then
timer = equip_skill_231_wp_off_timer;
end
local skill = this.update_generic("frenzied_bloodlust", 1, timer / 60);
if is_wp_off_timer_max then
skill.duration = frenzied_bloodlust_duration / 60;
else
skill.duration = frenzied_bloodlust_sheathed_duration / 60;
end
end
function this.update_peak_performance()
if not config.current_config.buff_UI.filter.skills.peak_performance then
this.list.peak_performance = nil;
return;
end
if not skill_data_list.peak_performance.is_equipped then
this.list.peak_performance = nil;
return;
end
if player_info.list.health ~= player_info.list.max_health then
this.list.peak_performance = nil;
return;
end
this.update_generic("peak_performance");
end
function this.update_heroics()
if this.apply_filter("heroics") then
return;
end
if not this.is_heroics_active then
this.list.heroics = nil;
return;
end
this.update_generic("heroics");
end
function this.update_dragonheart()
if not config.current_config.buff_UI.filter.skills.dragonheart then
this.list.dragonheart = nil;
return;
end
if not skill_data_list.dragonheart.is_equipped then
this.list.dragonheart = nil;
return;
end
local breakpoint = dragonheart_breakpoints[skill_data_list.dragonheart.level];
local health_percentage = 1;
local max_health = player_info.list.max_health;
if max_health ~= 0 then
health_percentage = player_info.list.health / max_health;
end
if health_percentage > breakpoint then
this.list.dragonheart = nil;
return;
end
this.update_generic("dragonheart");
end
function this.update_resentment(player_data)
if not config.current_config.buff_UI.filter.skills.resentment then
this.list.resentment = nil;
return;
end
if not skill_data_list.resentment.is_equipped then
this.list.resentment = nil;
return;
end
local r_vital = r_vital_field:get_data(player_data);
if r_vital == nil then
error_handler.report("skills.update_resentment", "Failed to Access Data: r_vital");
this.list.resentment = nil;
return;
end
if player_info.list.health >= r_vital then
this.list.resentment = nil;
return;
end
this.update_generic("resentment");
end
function this.update_bladescale_hone(player, weapon_type)
if weapon_type ~= 13 then -- 13 = Bow
this.list.bladescale_hone = nil;
return;
end
if this.apply_filter("bladescale_hone") then
return;
end
this.update_skill("bladescale_hone", nil, nil, player, _equip_skill_216_bottle_up_timer_field);
end
function this.update_spiribirds_call(player_data)
if this.apply_filter("spiribirds_call") then
return;
end
local equip_skill_211_timer = equip_skill_211_timer_field:get_data(player_data);
if equip_skill_211_timer == nil then
error_handler.report("skills.update_spiribirds_call", "Failed to Access Data: equip_skill_211_timer");
this.list.spiribirds_call = nil;
return;
end
if utils.number.is_equal(equip_skill_211_timer, 0) then
this.list.spiribirds_call = nil;
return;
end
local timer = spiribirds_call_duration - (equip_skill_211_timer / 60);
this.update_generic("spiribirds_call", 1, timer);
end
function this.update_powder_mantle(player_data)
if not this.apply_filter("powder_mantle_blue") then
this.update_skill("powder_mantle_blue", player_data, equip_skill_227_state_field, player_data, equip_skill_227_state_timer_field, nil, 2);
end
if this.list.powder_mantle_blue ~= nil then
this.list.powder_mantle_red = nil;
return;
end
if this.apply_filter("powder_mantle_red") then
return;
end
this.update_skill("powder_mantle_red", player_data, equip_skill_227_state_field, player_data, equip_skill_227_state_timer_field);
end
function this.update_blood_awakening(player, player_data)
this.update_skill("blood_awakening", player, get_equip_skill_232_lv_method, player_data, equip_skill_232_timer_field, nil, nil, blood_awakening_breakpoints);
end
function this.init_all_UI()
for skill_key, skill in pairs(this.list) do
buffs.init_UI(skill);
end
end
function this.init_names()
for skill_key, skill in pairs(this.list) do
skill.name = this.get_skill_name(skill_key);
end
end
function this.get_skill_name(key)
local skill_data = skill_data_list[key];
if skill_data == nil then
local skill_name = language.current_language.skills[key];
if skill_name == nil then
return key;
end
return skill_name;
end
local skill_name = get_name_method:call(nil, skill_data_list[key].id);
if skill_name == nil then
error_handler.report("skills.get_skill_name", string.format("Failed to Access Data: %s_name", key));
return key;
end
return skill_name;
end
function this.init_dependencies()
buffs = require("MHR_Overlay.Buffs.buffs");
config = require("MHR_Overlay.Misc.config");
utils = require("MHR_Overlay.Misc.utils");
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
singletons = require("MHR_Overlay.Game_Handler.singletons");
players = require("MHR_Overlay.Damage_Meter.players");
language = require("MHR_Overlay.Misc.language");
error_handler = require("MHR_Overlay.Misc.error_handler");
env_creature = require("MHR_Overlay.Endemic_Life.env_creature");
player_info = require("MHR_Overlay.Misc.player_info");
time = require("MHR_Overlay.Game_Handler.time");
abnormal_statuses = require("MHR_Overlay.Buffs.abnormal_statuses");
end
function this.init_module()
end
return this;
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
@@ -228,46 +231,13 @@ function this.update_damage(enemy, enemy_calc_damage_info)
players.update_damage(players.total, damage_source_type, is_large_monster, damage_object);
players.update_damage(player, damage_source_type, is_large_monster, damage_object);
--[[xy = string.format(
PhysicalPartsVitalDamage(): %s
PhysicalPartsBreakVitalDamage(): %s
PhysicalPartsLossVitalDamage(): %s
PhysicalMultiPartsVitalDamage(): %s
ElementPartsVitalDamage(): %s
ElementPartsBreakVitalDamage(): %s
ElementPartsLossVitalDamage(): %s
ElementMultiPartsVitalDamage(): %s
IsBreakPartsDamage(): %s
,
tostring(enemy_calc_damage_info:get_PhysicalPartsVitalDamage()),
tostring(enemy_calc_damage_info:get_PhysicalPartsBreakVitalDamage()),
tostring(enemy_calc_damage_info:get_PhysicalPartsLossVitalDamage()),
tostring(enemy_calc_damage_info:get_PhysicalMultiPartsVitalDamage()),
tostring(enemy_calc_damage_info:get_ElementPartsVitalDamage()),
tostring(enemy_calc_damage_info:get_ElementPartsBreakVitalDamage()),
tostring(enemy_calc_damage_info:get_ElementPartsLossVitalDamage()),
tostring(enemy_calc_damage_info:get_ElementMultiPartsVitalDamage()),
tostring(enemy_calc_damage_info:get_IsBreakPartsDamage())
);]]
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 +265,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
@@ -326,7 +297,7 @@ function this.on_stock_direct_marionette_finish_shoot_hit_parts_damage(enemy, da
end
wall_hit_damage_queue = {};
players.update_damage(players.total, damage_source_type, false, small_monster_damage_object);
players.update_damage(player, damage_source_type, false, small_monster_damage_object);
@@ -354,11 +325,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 +346,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 +355,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);
this.update_player_list(hunter_info_field);
end
non_players.update_servant_list();
non_players.update_otomo_list(is_on_quest, quest_status.is_online);
this.update_dps(false);
quest_status.update_cart_count();
end
function this.update_player_list_(hunter_info_field_)
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,41 @@ local package = package;
this.list = {};
this.creature_ids = {
clothfly = 7,
stinkmink = 23,
butterflame = 28,
peepersects = 29,
red_lampsquid = 34,
yellow_lampsquid = 35,
cutterfly = 50,
ruby_wirebug = 62,
gold_wirebug = 63,
};
local environment_creature_base_type_def = sdk.find_type_definition("snow.envCreature.EnvironmentCreatureBase");
local creature_type_field = environment_creature_base_type_def:get_field("_Type");
local creature_is_inactive_field = environment_creature_base_type_def:get_field("<Muteki>k__BackingField");
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");
local get_pos_method = environment_creature_base_type_def:get_method("get_Pos");
local get_ref_mesh_method = environment_creature_base_type_def:get_method("getMesh");
local mesh_type_def = get_ref_mesh_method:get_return_type();
local get_game_object_method = mesh_type_def:get_method("get_GameObject");
local game_object_type_def = get_game_object_method:get_return_type();
local get_transform_method = game_object_type_def:get_method("get_Transform");
local transform_type_def = get_transform_method:get_return_type();
local get_joint_by_name_method = transform_type_def:get_method("getJointByName");
local joint_type_def = get_joint_by_name_method:get_return_type();
local get_position_method = joint_type_def:get_method("get_Position");
function this.new(REcreature)
local creature = {};
@@ -68,27 +104,23 @@ function this.get_creature(REcreature)
return this.list[REcreature];
end
local environment_creature_base_type_def = sdk.find_type_definition("snow.envCreature.EnvironmentCreatureBase");
local creature_type_field = environment_creature_base_type_def:get_field("_Type");
local creature_is_inactive_field = environment_creature_base_type_def:get_field("<Muteki>k__BackingField");
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");
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;
this.update_head_joint(REcreature, creature)
end
function this.init_UI(creature)
@@ -110,9 +142,13 @@ 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;
this.update_head_position(REcreature, creature);
end
function this.update(REcreature, creature)
@@ -125,9 +161,75 @@ 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.update_head_joint(REcreature, creature)
local mesh = get_ref_mesh_method:call(REcreature);
if mesh == nil then
error_handler.report("env_creature.update_head_joint", "Failed to Access Data: Mesh");
return;
end
local game_object = get_game_object_method:call(mesh);
if game_object == nil then
error_handler.report("env_creature.update_head_joint", "Failed to Access Data: GameObject");
return;
end
local transform = get_transform_method:call(game_object);
if transform == nil then
error_handler.report("env_creature.update_head_joint", "Failed to Access Data: Transform");
return;
end
local head_joint = get_joint_by_name_method:call(transform, "Head_00")
or get_joint_by_name_method:call(transform, "Head")
or get_joint_by_name_method:call(transform, "Head_01")
or get_joint_by_name_method:call(transform, "Spine_00")
or get_joint_by_name_method:call(transform, "Body_00")
or get_joint_by_name_method:call(transform, "body_00")
or get_joint_by_name_method:call(transform, "Cog")
or get_joint_by_name_method:call(transform, "Cog_00")
or get_joint_by_name_method:call(transform, "head")
or get_joint_by_name_method:call(transform, "root");
if head_joint == nil then
-- local out = "";
-- local joints = transform:get_Joints();
-- for i = 0, joints:get_Length() - 1 do
-- local joint = joints[i];
-- local joint_name = joint:get_Name();
-- out = out .. joint_name .. "\n";
-- end
-- error_handler.report(creature.name, out);
error_handler.report("small_monster.update_head_joint", "Failed to Access Data: HeadJoint");
return;
end
creature.head_joint = head_joint;
end
function this.update_head_position(REcreature, creature)
if creature.head_joint == nil then
return;
end
local head_position = get_position_method:call(creature.head_joint);
if head_position == nil then
error_handler.report("env_creature.update_head_position", "Failed to Access Data: HeadPosition");
return;
end
creature.head_position = head_position;
end
function this.draw(creature, position_on_screen, opacity_scale)
@@ -136,14 +238,25 @@ 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);
local cached_config = config.current_config.endemic_life_UI.creature_name_label.include;
local name_text = "";
if cached_config.name then
name_text = string.format("%s ", creature.name);
end
if cached_config.id then
name_text = string.format("%s%s ", name_text, tostring(creature.id));
end
drawing.draw_label(creature.name_label, position_on_screen, opacity_scale, name_text);
end
function 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 +267,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,8 @@ local small_monster;
local large_monster;
local damage_meter_UI;
local time;
local error_handler;
local quest_status;
local sdk = sdk;
local tostring = tostring;
@@ -48,6 +50,7 @@ local hard_keyboard_field_type_def = hard_keyboard_field:get_type();
local get_down_method = hard_keyboard_field_type_def:get_method("getDown");
local get_trigger_method = hard_keyboard_field_type_def:get_method("getTrg");
local get_release_method = hard_keyboard_field_type_def:get_method("getRelease");
local update_method = hard_keyboard_field_type_def:get_method("update");
this.hotkey_modifiers_down = {
ctrl = false,
@@ -333,16 +336,9 @@ this.keys = {
--[254] = "Clear"
};
function this.update()
if singletons.game_keyboard == nil then
customization_menu.status = "No game keyboard";
return;
end
local hard_keyboard = hard_keyboard_field:get_data(singletons.game_keyboard);
function this.update(hard_keyboard)
if hard_keyboard == nil then
customization_menu.status = "No hard keyboard";
error_handler.report("keyboard.update", "Failed to Access Data: hard_keyboard");
return;
end
@@ -350,10 +346,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
@@ -482,6 +476,28 @@ function this.register_hotkey(hard_keyboard)
return true;
end
end
elseif customization_menu.buff_UI_waiting_for_key then
for key, key_name in pairs(this.keys) do
if get_release_method:call(hard_keyboard, key) then
cached_config.buff_UI.ctrl = this.hotkey_modifiers_down.ctrl;
cached_config.buff_UI.shift = this.hotkey_modifiers_down.shift;
cached_config.buff_UI.alt = this.hotkey_modifiers_down.alt;
cached_config.buff_UI.key = key;
customization_menu.buff_UI_waiting_for_key = false;
return true;
end
end
elseif customization_menu.stats_UI_waiting_for_key then
for key, key_name in pairs(this.keys) do
if get_release_method:call(hard_keyboard, key) then
cached_config.stats_UI.ctrl = this.hotkey_modifiers_down.ctrl;
cached_config.stats_UI.shift = this.hotkey_modifiers_down.shift;
cached_config.stats_UI.alt = this.hotkey_modifiers_down.alt;
cached_config.stats_UI.key = key;
customization_menu.stats_UI_waiting_for_key = false;
return true;
end
end
end
return false;
@@ -491,16 +507,24 @@ function this.check_hotkeys(hard_keyboard)
local cached_config = config.current_config.global_settings.hotkeys_with_modifiers;
if not (cached_config.all_UI.ctrl and not 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
and not (cached_config.all_UI.shift and not this.hotkey_modifiers_down.shift)
and not (cached_config.all_UI.alt and not this.hotkey_modifiers_down.alt) then
local all_UI_key_release = get_release_method:call(hard_keyboard, math.tointeger(cached_config.all_UI.key));
if all_UI_key_release == nil then
error_handler.report("keyboard.check_hotkeys", "Failed to Access Data: all_UI_key_release");
elseif all_UI_key_release then
local is_any_enabled = config.current_config.time_UI.enabled
or config.current_config.small_monster_UI.enabled
or config.current_config.large_monster_UI.dynamic.enabled
or config.current_config.large_monster_UI.static.enabled
or config.current_config.large_monster_UI.highlighted.enabled
or config.current_config.damage_meter_UI.enabled;
or config.current_config.damage_meter_UI.enabled
or config.current_config.endemic_life_UI.enabled
or config.current_config.buff_UI.enabled
or config.current_config.stats_UI.enabled;
config.current_config.time_UI.enabled = not is_any_enabled;
config.current_config.small_monster_UI.enabled = not is_any_enabled;
@@ -508,21 +532,36 @@ function this.check_hotkeys(hard_keyboard)
config.current_config.large_monster_UI.static.enabled = not is_any_enabled;
config.current_config.large_monster_UI.highlighted.enabled = not is_any_enabled;
config.current_config.damage_meter_UI.enabled = not is_any_enabled;
config.current_config.endemic_life_UI.enabled = not is_any_enabled;
config.current_config.buff_UI.enabled = not is_any_enabled;
config.current_config.stats_UI.enabled = not is_any_enabled;
end
end
if not (cached_config.small_monster_UI.ctrl and not 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
and not (cached_config.small_monster_UI.shift and not this.hotkey_modifiers_down.shift)
and not (cached_config.small_monster_UI.alt and not this.hotkey_modifiers_down.alt) then
local small_monster_UI_key_release = get_release_method:call(hard_keyboard, math.tointeger(cached_config.small_monster_UI.key));
if small_monster_UI_key_release == nil then
error_handler.report("keyboard.check_hotkeys", "Failed to Access Data: small_monster_UI_key_release");
elseif small_monster_UI_key_release then
config.current_config.small_monster_UI.enabled = not config.current_config.small_monster_UI.enabled;
end
end
if not (cached_config.large_monster_UI.ctrl and not 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
and not (cached_config.large_monster_UI.shift and not this.hotkey_modifiers_down.shift)
and not (cached_config.large_monster_UI.alt and not this.hotkey_modifiers_down.alt) then
local large_monster_UI_key_release = get_release_method:call(hard_keyboard, math.tointeger(cached_config.large_monster_UI.key));
if large_monster_UI_key_release == nil then
error_handler.report("keyboard.check_hotkeys", "Failed to Access Data: large_monster_UI_key_release");
elseif large_monster_UI_key_release then
local is_any_enabled = config.current_config.large_monster_UI.dynamic.enabled
or config.current_config.large_monster_UI.static.enabled
or config.current_config.large_monster_UI.highlighted.enabled;
@@ -534,56 +573,116 @@ function this.check_hotkeys(hard_keyboard)
end
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
and not (cached_config.large_monster_dynamic_UI.shift and not this.hotkey_modifiers_down.shift)
and not (cached_config.large_monster_dynamic_UI.alt and not this.hotkey_modifiers_down.alt) then
local large_monster_dynamic_UI_key_release = get_release_method:call(hard_keyboard, math.tointeger(cached_config.large_monster_dynamic_UI.key));
if large_monster_dynamic_UI_key_release == nil then
error_handler.report("keyboard.check_hotkeys", "Failed to Access Data: large_monster_dynamic_UI_key_release");
elseif large_monster_dynamic_UI_key_release then
config.current_config.large_monster_UI.dynamic.enabled = not config.current_config.large_monster_UI.dynamic.enabled;
end
end
if not (cached_config.large_monster_static_UI.ctrl and not 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
and not (cached_config.large_monster_static_UI.shift and not this.hotkey_modifiers_down.shift)
and not (cached_config.large_monster_static_UI.alt and not this.hotkey_modifiers_down.alt) then
local large_monster_static_UI_key_release = get_release_method:call(hard_keyboard, math.tointeger(cached_config.large_monster_static_UI.key));
if large_monster_static_UI_key_release == nil then
error_handler.report("keyboard.check_hotkeys", "Failed to Access Data: large_monster_static_UI_key_release");
elseif large_monster_static_UI_key_release then
config.current_config.large_monster_UI.static.enabled = not config.current_config.large_monster_UI.static.enabled;
end
end
if not (cached_config.large_monster_highlighted_UI.ctrl and not 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;
and not (cached_config.large_monster_highlighted_UI.shift and not this.hotkey_modifiers_down.shift)
and not (cached_config.large_monster_highlighted_UI.alt and not this.hotkey_modifiers_down.alt) then
local large_monster_highlighted_UI_key_release = get_release_method:call(hard_keyboard, math.tointeger(cached_config.large_monster_highlighted_UI.key));
if large_monster_highlighted_UI_key_release == nil then
error_handler.report("keyboard.check_hotkeys", "Failed to Access Data: large_monster_highlighted_UI_key_release");
elseif large_monster_highlighted_UI_key_release then
config.current_config.large_monster_UI.highlighted.enabled = not config.current_config.large_monster_UI.highlighted.enabled;
end
end
if not (cached_config.time_UI.ctrl and not 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
and not (cached_config.time_UI.shift and not this.hotkey_modifiers_down.shift)
and not (cached_config.time_UI.alt and not this.hotkey_modifiers_down.alt) then
local time_UI_key_release = get_release_method:call(hard_keyboard, math.tointeger(cached_config.time_UI.key));
if time_UI_key_release == nil then
error_handler.report("keyboard.check_hotkeys", "Failed to Access Data: time_UI_key_release");
elseif time_UI_key_release then
config.current_config.time_UI.enabled = not config.current_config.time_UI.enabled;
end
end
if not (cached_config.damage_meter_UI.ctrl and not 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
and not (cached_config.damage_meter_UI.shift and not this.hotkey_modifiers_down.shift)
and not (cached_config.damage_meter_UI.alt and not this.hotkey_modifiers_down.alt) then
local damage_meter_UI_key_release = get_release_method:call(hard_keyboard, math.tointeger(cached_config.damage_meter_UI.key));
if damage_meter_UI_key_release == nil then
error_handler.report("keyboard.check_hotkeys", "Failed to Access Data: damage_meter_UI_key_release");
elseif damage_meter_UI_key_release then
config.current_config.damage_meter_UI.enabled = not config.current_config.damage_meter_UI.enabled;
end
end
if not (cached_config.endemic_life_UI.ctrl and not 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
and not (cached_config.endemic_life_UI.shift and not this.hotkey_modifiers_down.shift)
and not (cached_config.endemic_life_UI.alt and not this.hotkey_modifiers_down.alt) then
local endemic_life_UI_key_release = get_release_method:call(hard_keyboard, math.tointeger(cached_config.endemic_life_UI.key));
if endemic_life_UI_key_release == nil then
error_handler.report("keyboard.check_hotkeys", "Failed to Access Data: endemic_life_UI_key_release");
elseif endemic_life_UI_key_release then
config.current_config.endemic_life_UI.enabled = not config.current_config.endemic_life_UI.enabled;
end
end
if not (cached_config.buff_UI.ctrl and not this.hotkey_modifiers_down.ctrl)
and not (cached_config.buff_UI.shift and not this.hotkey_modifiers_down.shift)
and not (cached_config.buff_UI.alt and not this.hotkey_modifiers_down.alt) then
local buff_UI_key_release = get_release_method:call(hard_keyboard, math.tointeger(cached_config.buff_UI.key));
if buff_UI_key_release == nil then
error_handler.report("keyboard.check_hotkeys", "Failed to Access Data: buff_UI_key_release");
elseif buff_UI_key_release then
config.current_config.buff_UI.enabled = not config.current_config.buff_UI.enabled;
end
end
if not (cached_config.stats_UI.ctrl and not this.hotkey_modifiers_down.ctrl)
and not (cached_config.stats_UI.shift and not this.hotkey_modifiers_down.shift)
and not (cached_config.stats_UI.alt and not this.hotkey_modifiers_down.alt) then
local stats_UI_key_release = get_release_method:call(hard_keyboard, math.tointeger(cached_config.stats_UI.key));
if stats_UI_key_release == nil then
error_handler.report("keyboard.check_hotkeys", "Failed to Access Data: stats_UI_key_release");
elseif stats_UI_key_release then
config.current_config.stats_UI.enabled = not config.current_config.stats_UI.enabled;
end
end
end
function this.get_hotkey_name(hotkey)
@@ -604,7 +703,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 +712,20 @@ 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");
quest_status = require("MHR_Overlay.Game_Handler.quest_status");
end
return this;
function this.init_module()
sdk.hook(update_method, function(args)
local hard_keyboard = sdk.to_managed_object(args[2]);
this.update(hard_keyboard);
end, function(retval)
return retval;
end);
end
return this;
@@ -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.get_cart_count()
function this.update_cart_count()
if singletons.quest_manager == nil then
error_handler.report("quest_status.update_cart_count", "Failed to Access Data: quest_manager");
return;
end
local 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
width, height = this.get_game_window_size();
end
-- if d2d ~= nil and config.current_config.global_settings.renderer.use_d2d_if_available then
-- width, height = d2d.surface_size();
-- else
-- width, height = this.get_game_window_size();
-- end
width, height = this.get_game_window_size();
if width ~= nil then
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;
@@ -44,195 +48,180 @@ this.game_keyboard = nil;
this.scene_manager = nil;
this.game_manager = nil;
function this.init()
this.init_message_manager();
this.init_enemy_manager();
this.init_lobby_manager()
this.init_progress_manager();
this.init_quest_manager();
this.init_player_manager();
this.init_village_area_manager();
this.init_gui_manager();
this.init_game_keyboard();
this.init_scene_manager();
this.init_game_manager();
this.init_servant_manager();
this.init_otomo_manager();
function this.update()
this.update_message_manager();
this.update_enemy_manager();
this.update_lobby_manager()
this.update_progress_manager();
this.update_quest_manager();
this.update_player_manager();
this.update_village_area_manager();
this.update_gui_manager();
this.update_game_keyboard();
this.update_scene_manager();
this.update_game_manager();
this.update_servant_manager();
this.update_otomo_manager();
this.update_long_sword_shell_manager();
this.update_light_bowgun_shell_manager();
this.update_horn_shell_manager();
end
function this.init_message_manager()
if this.message_manager ~= nil then
return;
end
function this.update_message_manager()
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.update_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
function this.update_enemy_manager()
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.update_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
function this.update_lobby_manager()
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.update_lobby_manager", "Failed to Access Data: lobby_manager");
return false;
end
return this.lobby_manager;
end
function this.init_progress_manager()
if this.progress_manager ~= nil then
return;
end
function this.update_progress_manager()
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.update_progress_manager", "Failed to Access Data: progress_manager");
return false;
end
return this.progress_manager;
end
function this.init_quest_manager()
if this.quest_manager ~= nil then
return;
end
function this.update_quest_manager()
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.update_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
function this.update_player_manager()
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.update_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
function this.update_village_area_manager()
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.update_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
function this.update_gui_manager()
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.update_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
function this.update_game_keyboard()
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.update_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
function this.update_scene_manager()
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.update_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
function this.update_game_manager()
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.update_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
function this.update_servant_manager()
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.update_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
function this.update_otomo_manager()
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.update_otomo_manager", "Failed to Access Data: otomo_manager");
end
return this.otomo_manager;
end
function this.update_long_sword_shell_manager()
this.long_sword_shell_manager = sdk.get_managed_singleton("snow.shell.LongSwordShellManager");
if this.long_sword_shell_manager == nil then
error_handler.report("singletons.update_long_sword_shell_manager", "Failed to Access Data: long_sword_shell_manager");
end
return this.long_sword_shell_manager;
end
function this.update_light_bowgun_shell_manager()
this.light_bowgun_shell_manager = sdk.get_managed_singleton("snow.shell.LightBowgunShellManager");
if this.light_bowgun_shell_manager == nil then
error_handler.report("singletons.update_light_bowgun_shell_manager", "Failed to Access Data: light_bowgun_shell_manager");
end
return this.light_bowgun_shell_manager;
end
function this.update_horn_shell_manager()
this.horn_shell_manager = sdk.get_managed_singleton("snow.shell.HornShellManager");
if this.horn_shell_manager == nil then
error_handler.report("singletons.update_horn_shell_manager", "Failed to Access Data: horn_shell_manager");
end
return this.horn_shell_manager;
end
function this.init_dependencies()
time = require("MHR_Overlay.Game_Handler.time");
utils = require("MHR_Overlay.Misc.utils");
error_handler = require("MHR_Overlay.Misc.error_handler");
end
function this.init_module()
this.init();
this.update();
end
return this;
@@ -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,121 @@ 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_seconds)
if callback == nil or delay_seconds == nil then
return;
end
local delay_timer = {};
delay_timer.callback = callback;
delay_timer.delay = delay_seconds;
delay_timer.init_time = os.clock();
this.delay_timer_list[callback] = delay_timer;
return delay_timer;
end
function this.remove_delay_timer(delay_timer)
if delay_timer == nil then
return;
end
this.delay_timer_list[delay_timer.callback] = nil;
end
function this.init_global_timers()
local cached_config = config.current_config.global_settings.performance.timer_delays;
this.timer_list = {};
this.new_timer(singletons.update, cached_config.update_singletons_delay);
this.new_timer(screen.update_window_size, cached_config.update_window_size_delay);
this.new_timer(quest_status.update_is_online, cached_config.update_is_online_delay);
this.new_timer(this.update_quest_time, cached_config.update_quest_time_delay);
this.new_timer(players.update_players, cached_config.update_players_delay);
this.new_timer(players.update_myself_position, cached_config.update_myself_position_delay);
this.new_timer(buffs.update, cached_config.update_buffs_delay);
this.new_timer(player_info.update, cached_config.update_player_info_delay);
end
function this.update_timers()
this.update_script_time();
for callback, timer in pairs(this.timer_list) do
if this.total_elapsed_script_seconds - timer.last_trigger_time > timer.cooldown then
timer.last_trigger_time = this.total_elapsed_script_seconds;
callback();
end
end
local remove_list = {};
for callback, delay_timer in pairs(this.delay_timer_list) do
if this.total_elapsed_script_seconds - delay_timer.init_time > delay_timer.delay then
callback();
table.insert(remove_list, callback);
end
end
for i, callback in ipairs(remove_list) do
this.delay_timer_list[callback] = nil;
end
end
function this.update_script_time()
this.total_elapsed_script_seconds = os.clock();
end
function this.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 +176,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;
File diff suppressed because it is too large Load Diff
@@ -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;
+407 -52
View File
@@ -1,6 +1,7 @@
local this = {};
local utils;
local error_handler;
local sdk = sdk;
local tostring = tostring;
@@ -36,47 +37,53 @@ local package = package;
this.language_folder = "MHR Overlay\\languages\\";
--[[
EXAMPLE:
unicode_glyph_ranges = {
0x0020, 0x00FF, -- Basic Latin + Latin Supplement
0x2000, 0x206F, -- General Punctuation
0x3000, 0x30FF, -- CJK Symbols and Punctuations, Hiragana, Katakana
0x31F0, 0x31FF, -- Katakana Phonetic Extensions
0x4e00, 0x9FAF, -- CJK Ideograms
0xFF00, 0xFFEF, -- Half-width characters
0
},
]]
-- this.chinese_ranges = {
-- 0x0020, 0x00FF, -- Basic Latin + Latin Supplement
-- 0x2000, 0x206F, -- General Punctuations
-- 0x2E80, 0x2EFF, -- CJK Radicals Supplement
-- 0x3000, 0x303F, -- CJK Symbols and Punctuations
-- 0x3200, 0x4DBF, -- Enclosed CJK Letters and Months, CJK Compatibility, CJK Unified Ideographs Extension A
-- 0x4E00, 0x9FFF, -- CJK Unified Ideograms
-- 0xF900, 0xFAFF, -- CJK Compatibility Ideographs
-- 0xFE30, 0xFE4F, -- CJK Compatibility Forms
-- 0xFF00, 0xFFEF, -- Half-width characters
-- 0
-- };
--[[
EXAMPLE:
unicode_glyph_ranges = {
0x0020, 0x00FF, -- Basic Latin + Latin Supplement
0x0400, 0x052F, -- Cyrillic
0x2000, 0x206F, -- General Punctuation
0xFF00, 0xFFEF, -- Half-width characters
0
},
]]
-- this.japanese_glyph_ranges = {
-- 0x0020, 0x00FF, -- Basic Latin + Latin Supplement
-- 0x2000, 0x206F, -- General Punctuation
-- 0x2E80, 0x2EFF, -- CJK Radicals Supplement
-- 0x3000, 0x30FF, -- CJK Symbols and Punctuations, Hiragana, Katakana
-- 0x31F0, 0x4DBF, -- Katakana Phonetic Extensions, Enclosed CJK Letters and Months, CJK Compatibility, CJK Unified Ideographs Extension A
-- 0x4E00, 0x9FFF, -- CJK Unified Ideograms
-- 0xF900, 0xFAFF, -- CJK Compatibility Ideographs
-- 0xFE30, 0xFE4F, -- CJK Compatibility Forms
-- 0xFF00, 0xFFEF, -- Half-width characters
-- 0
-- };
--[[
EXAMPLE:
unicode_glyph_ranges = {
0x0020, 0x00FF, -- Basic Latin + Latin Supplement
0x1100, 0x11FF, -- Hangul Jamo
0x2000, 0x206F, -- General Punctuation
0x3130, 0x318F, -- Hangul Compatibility Jamo
0xAC00, 0xD7AF, -- Hangul Syllables
0xFF00, 0xFFEF, -- Half-width characters
0
},
]]
-- this.korean_glyph_ranges = {
-- 0x0020, 0x00FF, -- Basic Latin + Latin Supplement
-- 0x1100, 0x11FF, -- Hangul Jamo
-- 0x2000, 0x206F, -- General Punctuation
-- 0x2E80, 0x2EFF, -- CJK Radicals Supplement
-- 0x3000, 0x303F, -- CJK Symbols and Punctuations
-- 0x3130, 0x318F, -- Hangul Compatibility Jamo
-- 0x3200, 0x4DBF, -- Enclosed CJK Letters and Months, CJK Compatibility, CJK Unified Ideographs Extension A
-- 0x4E00, 0x9FFF, -- CJK Unified Ideograms
-- 0xAC00, 0xD7AF, -- Hangul Syllables
-- 0xF900, 0xFAFF, -- CJK Compatibility Ideographs
-- 0xFE30, 0xFE4F, -- CJK Compatibility Forms
-- 0xFF00, 0xFFEF, -- Half-width characters
-- 0
-- }
this.current_language = {};
this.default_language = {
font_name = "",
unicode_glyph_ranges = {0},
font_name = nil,
unicode_glyph_ranges = nil,
parts = {
head = "Head",
neck = "Neck",
@@ -170,14 +177,17 @@ 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",
iceblight = "Iceblight",
waterblight = "Waterblight",
thunderblight = "Thunderblight",
iceblight = "Iceblight",
fall_trap = "Fall Trap",
shock_trap = "Shock Trap",
@@ -186,7 +196,266 @@ 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"
},
item_buffs = {
demondrug = "Demondrug",
mega_demondrug = "Mega Demondrug",
armorskin = "Armorskin",
mega_armorskin = "Mega Armorskin",
might_seed = "Might Seed",
adamant_seed = "Adamant Seed",
demon_powder = "Demon Powder",
hardshell_powder = "Hardshell Powder",
immunizer = "Immunizer",
dash_juice = "Dash Juice",
gourmet_fish = "Gourmet Fish",
demon_ammo = "Demon Ammo",
armor_ammo = "Armor Ammo",
},
endemic_life = {
cutterfly = "Cutterfly",
clothfly = "Clothfly",
butterflame = "Butterflame",
peepersects = "Peepersects",
stinkmink = "Stinkmink",
ruby_wirebug = "Ruby Wirebug",
gold_wirebug = "Gold Wirebug",
red_lampsquid = "Red Lampsquid",
yellow_lampsquid = "Yellow Lampsquid"
},
melody_effects = {
self_improvement = "Self-Improvement",
attack_up = "Attack Up",
defense_up ="Defense Up",
affinity_up = "Affinity Up",
elemental_attack_boost = "Elemental Attack Boost",
attack_and_defense_up = "Attack and Defense Up",
attack_and_affinity_up = "Attack and Affinity Up",
knockbacks_negated = "Knockbacks Negated",
earplugs_s = "Earplugs (S)",
earplugs_l = "Earplugs (L)",
tremors_negated = "Tremors Negated",
wind_pressure_negated = "Wind Pressure Negated",
stun_negated = "Stun Negated",
blight_negated = "Blight Negated",
divine_protection = "Divine Protection",
health_recovery_s = "Health Recovery (S)",
health_recovery_l = "Health Recovery (L)",
health_recovery_s_antidote = "Health Recovery (S) + Antidote",
health_regeneration = "Health Regeneration",
stamina_use_reduced = "Stamina Use Reduced",
stamina_recovery_up = "Stamina Recovery Up",
sharpness_loss_reduced = "Sharpness Loss Reduced",
environment_damage_negated = "Environment Damage Negated",
sonic_wave = "Sonic Wave",
sonic_barrier = "Sonic Barrier",
infernal_melody = "Infernal Melody",
sharpness_regeneration = "Sharpness Regeneration",
sharpness_extension = "Sharpness Extension",
},
dango_skills = {
dango_adrenaline = "Dango Adrenaline",
dango_booster = "Dango Booster",
dango_bulker = "Dango Bulker",
dango_connector = "Dango Connector",
dango_defender = "Dango Defender",
dango_flyer = "Dango Flyer",
dango_glutton = "Dango Glutton",
dango_hunter = "Dango Hunter",
dango_insurance = "Dango Insurance",
dango_insurance_defense_up = "Dango Insurance Defense Up",
super_recovery_dango = "Super Recovery Dango"
},
rampage_skills = {
chameleos_soul = "Chameleos Soul",
kushala_daora_soul = "Kushala Daora Soul"
},
skills = {
adrenaline_rush = "Adrenaline Rush",
affinity_sliding = "Affinity Sliding",
agitator = "Agitator",
berserk = "Berserk",
bladescale_hone = "Bladescale Hone",
blood_awakening = "Blood Awakening",
bloodlust = "Bloodlust",
burst = "Burst",
coalescence = "Coalescence",
counterstrike = "Counterstrike",
dereliction = "Dereliction",
dragon_conversion_elemental_attack_up = "Dragon Conversion: Elem. Atk Up",
dragon_conversion_elemental_res_up = "Dragon Conversion: Elem. Res Up",
dragonheart = "Dragonheart",
embolden = "Embolden",
frenzied_bloodlust = "Frenzied Bloodlust",
furious = "Furious",
grinder_s = "Grinder (S)",
heaven_sent = "Heaven-Sent",
hellfire_cloak = "Hellfire Cloak",
heroics = "Heroics",
inspiration = "Inspiration",
intrepid_heart = "Intrepid Heart",
latent_power = "Latent Power",
maximum_might = "Maximum Might",
offensive_guard = "Offensive Guard",
partbreaker = "Partbreaker",
peak_performance = "Peak Performance",
powder_mantle_red = "Powder Mantle (Red)",
powder_mantle_blue = "Powder Mantle (Blue)",
protective_polish = "Protective Polish",
resentment = "Resentment",
resuscitate = "Resuscitate",
spiribirds_call = "Spiribird's Call",
status_trigger = "Status Trigger",
strife = "Strife",
wall_runner = "Wall Runner",
wind_mantle = "Wind Mantle"
},
weapons = {
great_sword = "Great Sword",
long_sword = "Long Sword",
sword_and_shield = "Sword & Shield",
dual_blades = "Dual Blades",
lance = "Lance",
gunlance = "Gunlance",
hammer = "Hammer",
hunting_horn = "Hunting Horn",
switch_axe = "Switch Axe",
charge_blade = "Charge Blade",
insect_glaive = "Insect Glaive",
light_bowgun = "Light Bowgun",
heavy_bowgun = "Heavy Bowgun",
bow = "Bow"
},
weapon_skills = {
-- Great Sword
great_sword = {
power_sheathe = "Power Sheathe"
},
-- Long Sword
long_sword = {
harvest_moon = "Harvest Moon",
iai_slash = "Iai Slash",
soaring_kick = "Soaring Kick",
spirit_gauge = "Spirit Gauge",
spirit_gauge_autofill = "Spirit Gauge Autofill", -- Soaring Kick, Iai Slash
},
-- Sword & Shield
sword_and_shield = {
destroyer_oil = "Destroyer Oil"
},
-- Dual Blades
dual_blades = {
archdemon_mode = "Archdemon Mode",
ironshine_silk = "Ironshine Silk"
},
-- Lance
lance = {
anchor_rage = "Anchor Rage",
spiral_thrust = "Spiral Thrust",
twin_wine = "Twin Wine"
},
-- Gunlance
gunlance = {
erupting_cannon = "Erupting Cannon",
ground_splitter = "Ground Splitter"
},
-- Hammer
hammer = {
impact_burst = "Impact Burst"
},
-- Hunting Horn
hunting_horn = {
bead_of_resonance = "Bead of Resonance",
silkbind_shockwave = "Silkbind Shockwave",
sonic_bloom = "Sonic Bloom"
},
-- Switch Axe
switch_axe = {
amped_state = "Amped State",
axe_heavy_slam = "Axe: Heavy Slam",
switch_charger = "Switch Charger"
},
-- Charge Blade
charge_blade = {
element_boost = "Element Boost",
sword_boost_mode = "Sword Boost Mode"
},
-- Insect Glaive
insect_glaive = {
red_extract = "Red Extract",
white_extract = "White Extract",
orange_extract = "Orange Extract",
all_extracts_mix = "All Extracts Mix"
},
-- Light Bowgun
light_bowgun = {
fanning_maneuver = "Fanning Maneuver",
wyvernblast_reload = "Wyvernblast Reload"
},
-- Heavy Bowgun
heavy_bowgun = {
counter_charger = "Counter Charger",
overheat = "Overheat",
rising_moon = "Rising Moon",
setting_sun = "Setting Sun",
wyvernsnipe_reload = "Wyvernsnipe Reload"
},
-- Bow
bow = {
arc_shot_affinity = "Arc Shot: Affinity",
arc_shot_brace = "Arc Shot: Brace",
bolt_boost = "Bolt Boost",
herculean_draw = "Herculean Draw"
}
},
otomo_moves = {
go_fight_win = "Go, Fight, Win",
power_drum = "Power Drum",
rousing_roar = "Rousing Roar",
vase_of_vitality = "Vase of Vitality",
},
misc_buffs = {
attack_up = "Attack Up",
defense_up = "Defense Up",
stamina_use_down = "Stamina Use Down",
immunity = "Immunity",
natural_healing_up = "Natural Healing Up"
},
UI = {
@@ -206,6 +475,28 @@ this.default_language = {
otomo = "Buddy",
servant = "Follower",
lv = ""
},
stats = {
attack = "Attack",
defense = "Defense",
affinity = "Affinity",
fire_resistance = "Fire Res";
water_resistance = "Water Res";
thunder_resistance = "Thunder Res";
ice_resistance = "Ice Res";
dragon_resistance = "Dragon Res";
stamina = "Stamina",
fire = "Fire",
water = "Water",
thunder = "Thunder",
ice = "Ice",
dragon = "Dragon",
},
customization_menu = {
@@ -563,11 +854,60 @@ 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",
abnormal_statuses = "Abnormal Statuses",
item_buffs = "Item Buffs",
endemic_life_buffs = "Endemic Life Buffs",
melody_effects = "Melody Effects",
dango_skills = "Dango Skills",
rampage_skills = "Rampage Skills",
skills = "Skills",
weapon_skills = "Weapon Skills",
otomo_moves = "Buddy Moves",
misc_buffs = "Misc Buffs",
timer_delays = "Timer Delays",
update_singletons_delay = "Update Singletons (seconds)",
update_window_size_delay = "Update Window Size (seconds)",
update_quest_time_delay = "Update Quest Time (seconds)",
update_is_online_delay = "Update Is Online (seconds)",
update_players_delay = "Update Players (seconds)",
update_myself_position_delay = "Update Myself Position (seconds)",
update_player_info_delay = "Update Player Info (seconds)",
update_buffs_delay = "Update Buffs (seconds)",
infinite_buffs_location = "Infinite Buffs Location",
effect_level = "Effect Level",
head_tracking = "Head Tracking"
},
};
this.language_names = { "default"};
this.language_names = { "default" };
this.languages = { this.default_language };
function this.load()
@@ -582,18 +922,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 +940,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,12 +955,27 @@ 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");
this.save_default();
error_handler = require("MHR_Overlay.Misc.error_handler");
end
function this.init_module()
this.load();
this.current_language = this.default_language;
this.default_language.font_name = "NotoSans-Bold.otf";
this.default_language.unicode_glyph_ranges = {
0x0020, 0x00FF, -- Basic Latin + Latin Supplement
0x0100, 0x024F, -- Latin Extended-A, Latin Extended-B,
0x0400, 0x052F, -- Cyrillic, Cyrillic Supplementary
0x1E00, 0x1EFF, -- Latin Extended Additional
0x2000, 0x206F, -- General Punctuation
0xFF00, 0xFFEF, -- Halfwidth and Fullwidth Forms
0
};
this.save_default();
end
return this;
@@ -1,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
@@ -0,0 +1,350 @@
local this = {};
local drawing;
local customization_menu;
local singletons;
local config;
local utils;
local error_handler;
local quest_status;
local time;
local dango_skills;
local skills;
local sdk = sdk;
local tostring = tostring;
local pairs = pairs;
local ipairs = ipairs;
local tonumber = tonumber;
local require = require;
local pcall = pcall;
local table = table;
local string = string;
local Vector3f = Vector3f;
local d2d = d2d;
local math = math;
local json = json;
local log = log;
local fs = fs;
local next = next;
local type = type;
local setmetatable = setmetatable;
local getmetatable = getmetatable;
local assert = assert;
local select = select;
local coroutine = coroutine;
local utf8 = utf8;
local re = re;
local imgui = imgui;
local draw = draw;
local Vector2f = Vector2f;
local reframework = reframework;
local os = os;
local ValueType = ValueType;
local package = package;
this.list = {
health = 0;
max_health = 0;
attack = 0;
defense = 0;
affinity = 0;
stamina = 0;
max_stamina = -1;
element_type = 0;
element_attack = 0;
element_type_2 = 0;
element_attack_2 = 0;
fire_resistance = 0;
water_resistance = 0;
thunder_resistance = 0;
ice_resistance = 0;
dragon_resistance = 0;
};
local should_health_update = true;
local player_manager_type_def = sdk.find_type_definition("snow.player.PlayerManager");
local get_player_method = player_manager_type_def:get_method("getPlayer");
local find_master_player_method = player_manager_type_def:get_method("findMasterPlayer");
local player_base_type_def = find_master_player_method:get_return_type();
local get_player_data_method = player_base_type_def:get_method("get_PlayerData");
local player_data_type_def = get_player_data_method:get_return_type();
local get_vital_method = player_data_type_def:get_method("get_vital");
local attack_field = player_data_type_def:get_field("_Attack");
local defence_field = player_data_type_def:get_field("_Defence");
local critical_rate_field = player_data_type_def:get_field("_CriticalRate");
local vital_max_field = player_data_type_def:get_field("_vitalMax");
local stamina_field = player_data_type_def:get_field("_stamina");
local stamina_max_field = player_data_type_def:get_field("_staminaMax");
local element_type_field = player_data_type_def:get_field("_ElementType");
local element_attack_field = player_data_type_def:get_field("_ElementAttack");
local element_type_2nd_field = player_data_type_def:get_field("_ElementType2nd");
local element_attack_2nd_field = player_data_type_def:get_field("_ElementAttack2nd");
local resistance_element_field = player_data_type_def:get_field("_ResistanceElement");
local system_array_type_def = sdk.find_type_definition("System.Array");
local get_length_method = system_array_type_def:get_method("get_Length");
local get_value_method = system_array_type_def:get_method("GetValue(System.Int32)");
local player_quest_base_type_def = sdk.find_type_definition("snow.player.PlayerQuestBase");
local player_quest_base_update_method = player_quest_base_type_def:get_method("update");
local is_master_player_method = player_quest_base_type_def:get_method("isMasterPlayer");
local player_base_type_def = sdk.find_type_definition("snow.player.PlayerBase");
-- Heroics
local is_predicament_power_up_method = player_base_type_def:get_method("isPredicamentPowerUp");
-- Dango Adrenaline
local is_kitchen_skill_predicament_powerup_method = player_base_type_def:get_method("isKitchenSkillPredicamentPowerUp");
local single_type_def = sdk.find_type_definition("System.Single");
local mvalue_field = single_type_def:get_field("mValue");
local master_player_ref = nil;
local master_player_data_ref = nil;
function this.update()
if quest_status.flow_state == quest_status.flow_states.NONE then
return;
end
local cached_config = config.current_config;
if not cached_config.buff_UI.enabled
and not cached_config.stats_UI.enabled then
return;
end
if singletons.player_manager == nil then
error_handler.report("player_info.update", "Failed to Access Data: player_manager");
return;
end
local master_player = find_master_player_method:call(singletons.player_manager);
if master_player == nil then
error_handler.report("player_info.update", "Failed to Access Data: master_player");
return;
end
local master_player_data = get_player_data_method:call(master_player);
if master_player_data == nil then
error_handler.report("player_info.update", "Failed to Access Data: master_player_data");
end
master_player_ref = master_player;
master_player_data_ref = master_player_data;
should_health_update = true;
this.update_generic("max_health", master_player_data, vital_max_field);
this.update_generic("stamina", master_player_data, stamina_field);
this.list.stamina = math.floor(this.list.stamina / 30);
this.update_generic("max_stamina", master_player_data, stamina_max_field);
this.list.max_stamina = math.floor(this.list.max_stamina / 30);
if not cached_config.stats_UI.enabled then
return;
end
this.update_generic("attack", master_player_data, attack_field);
this.update_generic("affinity", master_player_data, critical_rate_field);
this.update_generic("defense", master_player_data, defence_field);
this.update_generic("element_type", master_player_data, element_type_field);
this.update_generic("element_attack", master_player_data, element_attack_field);
this.update_generic("element_type_2", master_player_data, element_type_2nd_field);
this.update_generic("element_attack_2", master_player_data, element_attack_2nd_field);
this.update_resistances(master_player_data);
end
function this.update_generic(key, player_data, field)
local value = field:get_data(player_data);
if value == nil then
error_handler.report("player_info.update_generic", string.format("Failed to Access Data: %s_value", key));
return;
end
this.list[key] = math.floor(value);
end
function this.update_resistances(player_data)
local resistance_element_array = resistance_element_field:get_data(player_data);
if resistance_element_array == nil then
error_handler.report("player_info.update_resistances", "Failed to Access Data: resistance_element_array");
return;
end
-- Fire Resistance
local fire_resistance_single_valtype = get_value_method:call(resistance_element_array, 0);
if fire_resistance_single_valtype == nil then
error_handler.report("player_info.update_resistances", "Failed to Access Data: fire_resistance_single_valtype");
return;
end
local fire_resistance = mvalue_field:get_data(fire_resistance_single_valtype);
if fire_resistance ~= nil then
this.list.fire_resistance = math.floor(fire_resistance);
else
error_handler.report("player_info.update_resistances", "Failed to Access Data: fire_resistance");
return;
end
-- Water Resistance
local water_resistance_single_valtype = get_value_method:call(resistance_element_array, 1);
if water_resistance_single_valtype == nil then
error_handler.report("player_info.update_resistances", "Failed to Access Data: water_resistance_single_valtype");
return;
end
local water_resistance = mvalue_field:get_data(water_resistance_single_valtype);
if water_resistance ~= nil then
this.list.water_resistance = math.floor(water_resistance);
else
error_handler.report("player_info.update_resistances", "Failed to Access Data: water_resistance");
return;
end
-- Thunder Resistance
local thunder_resistance_single_valtype = get_value_method:call(resistance_element_array, 2);
if thunder_resistance_single_valtype == nil then
error_handler.report("player_info.update_resistances", "Failed to Access Data: thunder_resistance_single_valtype");
return;
end
local thunder_resistance = mvalue_field:get_data(thunder_resistance_single_valtype);
if thunder_resistance ~= nil then
this.list.thunder_resistance = math.floor(thunder_resistance);
else
error_handler.report("player_info.update_resistances", "Failed to Access Data: thunder_resistance");
return;
end
-- Ice Resistance
local ice_resistance_single_valtype = get_value_method:call(resistance_element_array, 3);
if ice_resistance_single_valtype == nil then
error_handler.report("player_info.update_resistances", "Failed to Access Data: ice_resistance_single_valtype");
return;
end
local ice_resistance = mvalue_field:get_data(ice_resistance_single_valtype);
if ice_resistance ~= nil then
this.list.ice_resistance = math.floor(ice_resistance);
else
error_handler.report("player_info.update_resistances", "Failed to Access Data: ice_resistance");
return;
end
-- Dragon Resistance
local dragon_resistance_single_valtype = get_value_method:call(resistance_element_array, 4);
if dragon_resistance_single_valtype == nil then
error_handler.report("player_info.update_resistances", "Failed to Access Data: dragon_resistance_single_valtype");
return;
end
local dragon_resistance = mvalue_field:get_data(dragon_resistance_single_valtype);
if dragon_resistance ~= nil then
this.list.dragon_resistance = math.floor(dragon_resistance);
else
error_handler.report("player_info.update_resistances", "Failed to Access Data: dragon_resistance");
return;
end
end
function this.on_pre_player_update(quest_player_base)
if not should_health_update then
return;
end
if quest_player_base ~= master_player_ref then
return;
end
this.update_health(quest_player_base);
this.update_heroics(quest_player_base);
this.update_dango_adrenaline(quest_player_base);
should_health_update = false;
end
function this.update_health(quest_player_base)
local vital = get_vital_method:call(master_player_data_ref);
if vital == nil then
error_handler.report("player_info.update_health", "Failed to Access Data: vital");
return;
end
this.list.health = vital;
end
function this.update_heroics(quest_player_base)
if not config.current_config.buff_UI.filter.skills.heroics then
return;
end
local is_predicament_power_up = is_predicament_power_up_method:call(master_player_ref);
if is_predicament_power_up == nil then
error_handler.report("player_info.update_heroics", "Failed to Access Data: is_predicament_power_up");
return;
end
skills.is_heroics_active = is_predicament_power_up;
end
function this.update_dango_adrenaline(quest_player_base)
if not config.current_config.buff_UI.filter.dango_skills.dango_adrenaline then
return;
end
local is_kitchen_skill_predicament_powerup = is_kitchen_skill_predicament_powerup_method:call(master_player_ref);
if is_kitchen_skill_predicament_powerup == nil then
error_handler.report("player_info.update_dango_adrenaline", "Failed to Access Data: is_kitchen_skill_predicament_powerup");
return;
end
dango_skills.is_dango_adrenaline_active = is_kitchen_skill_predicament_powerup;
end
function this.init_dependencies()
singletons = require("MHR_Overlay.Game_Handler.singletons");
customization_menu = require("MHR_Overlay.UI.customization_menu");
config = require("MHR_Overlay.Misc.config");
utils = require("MHR_Overlay.Misc.utils");
--health_UI_entity = require("MHR_Overlay.UI.UI_Entities.health_UI_entity");
--stamina_UI_entity = require("MHR_Overlay.UI.UI_Entities.stamina_UI_entity");
--screen = require("MHR_Overlay.Game_Handler.screen");
drawing = require("MHR_Overlay.UI.drawing");
--ailments = require("MHR_Overlay.Monsters.ailments");
--ailment_UI_entity = require("MHR_Overlay.UI.UI_Entities.ailment_UI_entity");
error_handler = require("MHR_Overlay.Misc.error_handler");
quest_status = require("MHR_Overlay.Game_Handler.quest_status");
time = require("MHR_Overlay.Game_Handler.time");
dango_skills = require("MHR_Overlay.Buffs.dango_skills");
skills = require("MHR_Overlay.Buffs.skills");
end
function this.init_module()
sdk.hook(player_quest_base_update_method, function(args)
local quest_player_base = sdk.to_managed_object(args[2]);
this.on_pre_player_update(quest_player_base);
end, function(retval)
return retval;
end);
end
return this;
@@ -1,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,18 +532,33 @@ 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
--if poison tick, apply damage
local is_damage = poison_get_is_damage_method:call(poison_param);
if is_damage then
local poison_damage = poison_damage_field:get_data(poison_param);
this.apply_ailment_damage(monster, this.poison_id, poison_damage);
end
if poison_param == nil then
error_handler.report("ailments.update_poison", "Missing Parameter: poison_param");
return;
end
--if poison tick, apply damage
local is_damage = poison_get_is_damage_method:call(poison_param);
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
function this.draw(monster, ailment_UI, cached_config, ailments_position_on_screen, opacity_scale)
@@ -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(player, otomo_damage_source_type, monster.is_large, damage_object);
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;
File diff suppressed because it is too large Load Diff
@@ -6,6 +6,7 @@ local config;
local ailments;
local players;
local quest_status;
local error_handler;
local sdk = sdk;
local tostring = tostring;
@@ -43,6 +44,7 @@ local enemy_character_base_type_def = sdk.find_type_definition("snow.enemy.Enemy
local enemy_character_base_update_method = enemy_character_base_type_def:get_method("update");
local is_boss_enemy_method = enemy_character_base_type_def:get_method("get_isBossEnemy");
local on_destroy_method = enemy_character_base_type_def:get_method("onDestroy");
local enemy_damage_check_type_def = sdk.find_type_definition("snow.enemy.EnemyDamageCheck");
local damage_check_update_param_update_method = enemy_damage_check_type_def:get_method("updateParam");
@@ -118,8 +120,8 @@ function this.update_large_monster(enemy)
local cached_config = config.current_config.large_monster_UI;
if not cached_config.dynamic.enabled and
not cached_config.static.enabled and
not cached_config.highlighted.enabled then
not cached_config.static.enabled and
not cached_config.highlighted.enabled then
return;
end
@@ -153,7 +155,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 +197,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 +206,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 +235,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 +262,31 @@ function this.update_rage_timer(anger_param, enemy)
large_monster.update_rage_timer(enemy, monster, anger_param);
end
function this.init_module()
function this.on_destroy(enemy)
local is_large = is_boss_enemy_method:call(enemy);
if is_large == nil then
error_handler.report("monster_hook.on_destroy", "Failed to Access Data: is_large");
return;
end
if is_large then
large_monster.list[enemy] = nil;
else
small_monster.list[enemy] = nil;
end
end
function this.init_dependencies()
small_monster = require("MHR_Overlay.Monsters.small_monster");
large_monster = require("MHR_Overlay.Monsters.large_monster");
config = require("MHR_Overlay.Misc.config");
ailments = require("MHR_Overlay.Monsters.ailments");
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)
@@ -287,6 +311,12 @@ function this.init_module()
end, function(retval)
return retval;
end);
sdk.hook(on_destroy_method, function(args)
pcall(this.on_destroy, sdk.to_managed_object(args[2]));
end, function(retval)
return retval;
end);
end
return this;
@@ -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;
@@ -47,17 +48,53 @@ local package = package;
this.list = {};
local enemy_character_base_type_def = sdk.find_type_definition("snow.enemy.EnemyCharacterBase");
local enemy_type_field = enemy_character_base_type_def:get_field("<EnemyType>k__BackingField");
local message_manager_type_def = sdk.find_type_definition("snow.gui.MessageManager");
local get_enemy_name_message_method = message_manager_type_def:get_method("getEnemyNameMessage");
local get_ref_mesh_method = enemy_character_base_type_def:get_method("get_RefMesh");
local mesh_type_def = get_ref_mesh_method:get_return_type();
local get_game_object_method = mesh_type_def:get_method("get_GameObject");
local game_object_type_def = get_game_object_method:get_return_type();
local get_transform_method = game_object_type_def:get_method("get_Transform");
local transform_type_def = get_transform_method:get_return_type();
local get_joint_by_name_method = transform_type_def:get_method("getJointByName");
local joint_type_def = get_joint_by_name_method:get_return_type();
local get_position_method = joint_type_def:get_method("get_Position");
local get_physical_param_method = enemy_character_base_type_def:get_method("get_PhysicalParam");
local check_die_method = enemy_character_base_type_def:get_method("checkDie");
local physical_param_type = get_physical_param_method:get_return_type();
local get_vital_method = physical_param_type:get_method("getVital");
local vital_param_type = get_vital_method:get_return_type();
local get_current_method = vital_param_type:get_method("get_Current");
local get_max_method = vital_param_type:get_method("get_Max");
local get_pos_method = enemy_character_base_type_def:get_method("get_Pos");
function this.new(enemy)
local monster = {};
monster.is_large = false;
monster.health = 0;
monster.max_health = 999999;
monster.max_health = 0;
monster.health_percentage = 0;
monster.missing_health = 0;
monster.capture_health = 0;
monster.head_joint = nil;
monster.position = Vector3f.new(0, 0, 0);
monster.head_position = Vector3f.new(0, 0, 0);
monster.distance = 0;
monster.name = "Small Monster";
@@ -70,7 +107,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
@@ -89,25 +125,23 @@ function this.get_monster(enemy)
return monster;
end
local enemy_character_base_type_def = sdk.find_type_definition("snow.enemy.EnemyCharacterBase");
local enemy_type_field = enemy_character_base_type_def:get_field("<EnemyType>k__BackingField");
local message_manager_type_def = sdk.find_type_definition("snow.gui.MessageManager");
local get_enemy_name_message_method = message_manager_type_def:get_method("getEnemyNameMessage");
function this.init(monster, enemy)
local enemy_type = enemy_type_field:get_data(enemy);
if enemy_type == nil then
customization_menu.status = "No enemy type";
error_handler.report("small_monster.init", "Failed to Access Data: enemy_type");
return;
end
monster.id = enemy_type;
local enemy_name = get_enemy_name_message_method:call(singletons.message_manager, enemy_type);
if enemy_name ~= nil then
monster.name = enemy_name;
if enemy_name == nil then
error_handler.report("small_monster.init", "Failed to Access Data: enemy_name");
end
monster.name = enemy_name;
this.update_head_joint(enemy, monster);
end
function this.init_UI(monster)
@@ -151,18 +185,6 @@ function this.init_UI(monster)
);
end
local get_physical_param_method = enemy_character_base_type_def:get_method("get_PhysicalParam");
local check_die_method = enemy_character_base_type_def:get_method("checkDie");
local physical_param_type = get_physical_param_method:get_return_type();
local get_vital_method = physical_param_type:get_method("getVital");
local vital_param_type = get_vital_method:get_return_type();
local get_current_method = vital_param_type:get_method("get_Current");
local get_max_method = vital_param_type:get_method("get_Max");
local get_pos_field = 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 +196,76 @@ 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;
this.update_head_position(enemy, monster);
end
function this.update_head_joint(enemy, monster)
local mesh = get_ref_mesh_method:call(enemy);
if mesh == nil then
error_handler.report("small_monster.update_head_joint", "Failed to Access Data: Mesh");
return;
end
local game_object = get_game_object_method:call(mesh);
if game_object == nil then
error_handler.report("small_monster.update_head_joint", "Failed to Access Data: GameObject");
return;
end
local transform = get_transform_method:call(game_object);
if transform == nil then
error_handler.report("small_monster.update_head_joint", "Failed to Access Data: Transform");
return;
end
local head_joint = get_joint_by_name_method:call(transform, "Head_00")
or get_joint_by_name_method:call(transform, "Head")
or get_joint_by_name_method:call(transform, "Head_01")
or get_joint_by_name_method:call(transform, "Spine_00")
or get_joint_by_name_method:call(transform, "Cog")
or get_joint_by_name_method:call(transform, "head")
or get_joint_by_name_method:call(transform, "root");
if head_joint == nil then
-- local out = "";
-- local joints = transform:get_Joints();
-- for i = 0, joints:get_Length() - 1 do
-- local joint = joints[i];
-- local joint_name = joint:get_Name();
-- out = out .. joint_name .. "\n";
-- end
-- error_handler.report(monster.name, out);
error_handler.report("small_monster.update_head_joint", "Failed to Access Data: HeadJoint");
return;
end
monster.head_joint = head_joint;
end
function this.update_head_position(enemy, monster)
if monster.head_joint == nil then
return;
end
local head_position = get_position_method:call(monster.head_joint);
if head_position == nil then
error_handler.report("small_monster.update_head_position", "Failed to Access Data: HeadPosition");
return;
end
monster.head_position = head_position;
end
function this.update(enemy, monster)
@@ -188,6 +276,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 +290,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 +353,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 +366,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;
@@ -55,7 +56,7 @@ local displayed_directions = {};
function this.init()
local default = language.default_language.customization_menu;
local current = language.current_language.customization_menu;
outline_styles = {
default.inside,
default.center,
@@ -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 item_buffs;
local melody_effects;
local endemic_life_buff;
local screen;
local utils;
local error_handler;
local skills;
local dango_skills;
local abnormal_statuses;
local otomo_moves;
local weapon_skills;
local misc_buffs;
local rampage_skills;
local sdk = sdk;
local tostring = tostring;
@@ -37,67 +49,297 @@ local os = os;
local ValueType = ValueType;
local package = package;
local displayed_buffs = {};
function this.update()
local cached_config = config.current_config.buff_UI;
local _displayed_buffs = {};
for key, abnormal_status in pairs(abnormal_statuses.list) do
if abnormal_status.is_visible then
table.insert(_displayed_buffs, abnormal_status);
end
end
for key, item_buff in pairs(item_buffs.list) do
if item_buff.is_visible then
table.insert(_displayed_buffs, item_buff);
end
end
for key, endemic_life_buff in pairs(endemic_life_buff.list) do
if endemic_life_buff.is_visible then
table.insert(_displayed_buffs, endemic_life_buff);
end
end
for _, melody_effect in pairs(melody_effects.list) do
if melody_effect.is_visible then
table.insert(_displayed_buffs, melody_effect);
end
end
for key, dango_skill in pairs(dango_skills.list) do
if dango_skill.is_visible then
table.insert(_displayed_buffs, dango_skill);
end
end
for key, rampage_skill in pairs(rampage_skills.list) do
if rampage_skill.is_visible then
table.insert(_displayed_buffs, rampage_skill);
end
end
for key, skill in pairs(skills.list) do
if skill.is_visible then
table.insert(_displayed_buffs, skill);
end
end
for key, weapon_skill in pairs(weapon_skills.list) do
if weapon_skill.is_visible then
table.insert(_displayed_buffs, weapon_skill);
end
end
for key, otomo_move in pairs(otomo_moves.list) do
if otomo_move.is_visible then
table.insert(_displayed_buffs, otomo_move);
end
end
for key, misc_buffs in pairs(misc_buffs.list) do
if misc_buffs.is_visible then
table.insert(_displayed_buffs, misc_buffs);
end
end
displayed_buffs = this.sort_buffs(_displayed_buffs, cached_config);
end
function this.sort_buffs(_displayed_buffs, cached_config)
local infinite_buffs_location = cached_config.settings.infinite_buffs_location;
cached_config = cached_config.sorting;
if cached_config.type == "Name" then
if cached_config.reversed_order then
table.sort(_displayed_buffs, function(left, right)
if infinite_buffs_location == "First" then
if left.is_infinite and right.is_infinite then
return left.name < right.name;
elseif left.is_infinite then
return true;
elseif right.is_infinite then
return false;
else
return left.name < right.name;
end
elseif infinite_buffs_location == "Last" then
if left.is_infinite and right.is_infinite then
return left.name < right.name;
elseif left.is_infinite then
return false;
elseif right.is_infinite then
return true;
else
return left.name < right.name;
end
else
return left.name < right.name;
end
end);
else
table.sort(_displayed_buffs, function(left, right)
if infinite_buffs_location == "First" then
if left.is_infinite and right.is_infinite then
return left.name > right.name;
elseif left.is_infinite then
return false;
elseif right.is_infinite then
return true;
else
return left.name > right.name;
end
elseif infinite_buffs_location == "Last" then
if left.is_infinite and right.is_infinite then
return left.name > right.name;
elseif left.is_infinite then
return true;
elseif right.is_infinite then
return false;
else
return left.name > right.name;
end
else
return left.name > right.name;
end
end);
end
elseif cached_config.type == "Timer" then
if cached_config.reversed_order then
table.sort(_displayed_buffs, function(left, right)
if infinite_buffs_location == "First" then
if left.is_infinite and right.is_infinite then
return left.name < right.name;
elseif left.is_infinite then
return true;
elseif right.is_infinite then
return false;
else
return left.timer < right.timer;
end
elseif infinite_buffs_location == "Last" then
if left.is_infinite and right.is_infinite then
return left.name < right.name;
elseif left.is_infinite then
return false;
elseif right.is_infinite then
return true;
else
return left.timer < right.timer;
end
else
return left.timer < right.timer;
end
end);
else
table.sort(_displayed_buffs, function(left, right)
if infinite_buffs_location == "First" then
if left.is_infinite and right.is_infinite then
return left.name > right.name;
elseif left.is_infinite then
return false;
elseif right.is_infinite then
return true;
else
return left.timer > right.timer;
end
elseif infinite_buffs_location == "Last" then
if left.is_infinite and right.is_infinite then
return left.name > right.name;
elseif left.is_infinite then
return true;
elseif right.is_infinite then
return false;
else
return left.timer > right.timer;
end
else
return left.timer > right.timer;
end
end);
end
else -- Duration
if cached_config.reversed_order then
table.sort(_displayed_buffs, function(left, right)
if infinite_buffs_location == "First" then
if left.is_infinite and right.is_infinite then
return left.name < right.name;
elseif left.is_infinite then
return true;
elseif right.is_infinite then
return false;
else
return left.duration < right.duration;
end
elseif infinite_buffs_location == "Last" then
if left.is_infinite and right.is_infinite then
return left.name < right.name;
elseif left.is_infinite then
return false;
elseif right.is_infinite then
return true;
else
return left.duration < right.duration;
end
else
return left.duration < right.duration;
end
end);
else
table.sort(_displayed_buffs, function(left, right)
if infinite_buffs_location == "First" then
if left.is_infinite and right.is_infinite then
return left.name > right.name;
elseif left.is_infinite then
return false;
elseif right.is_infinite then
return true;
else
return left.duration > right.duration;
end
elseif infinite_buffs_location == "Last" then
if left.is_infinite and right.is_infinite then
return left.name > right.name;
elseif left.is_infinite then
return true;
elseif right.is_infinite then
return false;
else
return left.duration > right.duration;
end
else
return left.duration > right.duration;
end
end);
end
end
return _displayed_buffs;
end
function this.draw()
local cached_config = config.current_config.buff_UI;
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
local displayed_buffs = {};
for _, buff in pairs(buffs.list) do
if not buff.is_active then
goto continue
end
table.insert(displayed_buffs, buff);
::continue::
end
-- sort
if cached_config.sorting.type == "Name" then
if cached_config.sorting.reversed_order then
table.sort(displayed_buffs, function(left, right)
return left.name > right.name;
end);
else
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)
return left.timer > right.timer;
end);
else
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)
return left.duration > right.duration;
end);
else
table.sort(displayed_buffs, function(left, right)
return left.duration < right.duration;
end);
end
end
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 +348,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");
item_buffs = require("MHR_Overlay.Buffs.item_buffs");
melody_effects = require("MHR_Overlay.Buffs.melody_effects");
buffs = require("MHR_Overlay.Buffs.buffs");
--singletons = require("MHR_Overlay.Game_Handler.singletons");
config = require("MHR_Overlay.Misc.config");
@@ -122,6 +366,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,46 +210,21 @@ function this.draw()
return;
end
local quest_players = {};
this.calculate_top_damage_and_dps();
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
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.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.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.orientation == "Horizontal" then
position_on_screen.x = position_on_screen.x + cached_config.spacing.x * global_scale_modifier;
else
position_on_screen.y = position_on_screen.y + cached_config.spacing.y * global_scale_modifier;
if cached_config.settings.orientation == "Horizontal" then
position_on_screen.x = position_on_screen.x + cached_config.spacing.x * global_scale_modifier;
else
position_on_screen.y = position_on_screen.y + cached_config.spacing.y * global_scale_modifier;
end
end
end
@@ -113,37 +233,7 @@ function this.draw()
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,28 +244,24 @@ 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);
end
if not cached_config.settings.total_damage_offset_is_relative then
position_on_screen = screen.calculate_absolute_coordinates(cached_config.position);
end
players.draw(players.total, position_on_screen, 1);
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,63 @@ 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 i, creature in ipairs(displayed_creatures) do
local world_offset = Vector3f.new(
cached_config.world_offset.x,
cached_config.world_offset.y,
cached_config.world_offset.z
);
for REcreature, creature in pairs(env_creature.list) do
if cached_config.settings.max_distance == 0 then
break
local position_on_screen;
if cached_config.settings.head_tracking then
position_on_screen = draw.world_to_screen(creature.head_position + world_offset);
else
position_on_screen = draw.world_to_screen(creature.position + world_offset);
end
if cached_config.settings.hide_inactive_creatures and creature.is_inactive then
goto continue
end
local position_on_screen = {};
local world_offset = Vector3f.new(cached_config.world_offset.x, cached_config.world_offset.y,
cached_config.world_offset.z);
position_on_screen = draw.world_to_screen(creature.position + world_offset);
if position_on_screen == nil then
goto continue
goto continue;
end
position_on_screen.x = position_on_screen.x + cached_config.viewport_offset.x * global_scale_modifier;
position_on_screen.y = position_on_screen.y + cached_config.viewport_offset.y * global_scale_modifier;
creature.distance = (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 +111,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 +123,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,325 @@ local get_tg_camera_method = gui_manager_type_def:get_method("get_refGuiHud_TgCa
local tg_camera_type_def = get_tg_camera_method:get_return_type();
local get_targeting_enemy_index_field = tg_camera_type_def:get_field("OldTargetingEmIndex");
function 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
monster.distance = (players.myself_position - monster.position):length();
if cached_config.highlighted.auto_highlight.enabled then
if highlighted_monster == nil then
highlighted_monster = monster;
table.insert(large_monster_list, monster);
elseif cached_config.highlighted.auto_highlight.mode == "Farthest" then
if monster.distance > highlighted_monster.distance then
highlighted_monster = monster;
end
elseif cached_config.highlighted.auto_highlight.mode == "Lowest Health" then
if monster.health < highlighted_monster.health then
highlighted_monster = monster;
end
elseif cached_config.highlighted.auto_highlight.mode == "Highest Health" then
if monster.health > highlighted_monster.health then
highlighted_monster = monster;
end
elseif cached_config.highlighted.auto_highlight.mode == "Lowest Health Percentage" then
if monster.health_percentage < highlighted_monster.health_percentage then
highlighted_monster = monster;
end
elseif cached_config.highlighted.auto_highlight.mode == "Highest Health Percentage" then
if monster.health_percentage > highlighted_monster.health_percentage then
highlighted_monster = monster;
end
else
if monster.distance < highlighted_monster.distance then
highlighted_monster = monster;
end
end
else
if monster.dead_or_captured or not monster.is_disp_icon_mini_map then
monster_id_shift = monster_id_shift + 1;
elseif i == highlighted_id + monster_id_shift then
highlighted_monster = monster;
end
end
table.insert(displayed_monsters, monster);
::continue::
end
if dynamic_enabled then
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;
if cached_config.settings.head_tracking then
position_on_screen = draw.world_to_screen(monster.head_position + world_offset);
else
position_on_screen = draw.world_to_screen(monster.position + world_offset);
end
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 +385,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;
end
large_monster.draw(monster, "highlighted", cached_config, position_on_screen, 1);
large_monster.draw(highlighted_monster, "highlighted_UI", cached_config, position_on_screen, 1);
end
function 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 +415,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,139 +48,125 @@ 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 displayed_monsters = {};
function this.update()
local cached_config = config.current_config.small_monster_UI;
local displayed_monsters = {};
local enemy_count = get_zako_enemy_count_method:call(singletons.enemy_manager);
if enemy_count == nil then
customization_menu.status = "No enemy count";
if cached_config.dynamic_positioning.enabled and utils.number.is_equal(cached_config.dynamic_positioning.max_distance, 0) then
displayed_monsters = {};
return;
end
for i = 0, enemy_count - 1 do
local enemy = get_zako_enemy_method:call(singletons.enemy_manager, i);
if enemy == nil then
customization_menu.status = "No enemy";
goto continue
end
local monster = small_monster.list[enemy];
if monster == nil then
customization_menu.status = "No small monster entry";
goto continue
end
local _displayed_monsters = {};
for enemy, monster in pairs(small_monster.list) do
if monster.dead_or_captured and cached_config.settings.hide_dead_or_captured then
goto continue
end
goto continue;
end;
table.insert(displayed_monsters, monster);
monster.distance = (players.myself_position - monster.position):length();
if monster.distance > cached_config.dynamic_positioning.max_distance then
goto continue;
end
table.insert(_displayed_monsters, monster);
::continue::
end
displayed_monsters = this.sort_monsters(_displayed_monsters, cached_config);
end
if cached_config.dynamic_positioning.enabled
or (not cached_config.dynamic_positioning.enabled and cached_config.static_sorting.type == "Distance") then
for _, monster in ipairs(displayed_monsters) do
monster.distance = (players.myself_position - monster.position):length();
end
end
function this.sort_monsters(_displayed_monsters, cached_config)
if not cached_config.dynamic_positioning.enabled then
-- sort here
if cached_config.static_sorting.type == "Normal" and cached_config.static_sorting.reversed_order then
local reversed_monsters = {};
for i = #displayed_monsters, 1, -1 do
table.insert(reversed_monsters, displayed_monsters[i]);
for i = #_displayed_monsters, 1, -1 do
table.insert(reversed_monsters, _displayed_monsters[i]);
end
displayed_monsters = reversed_monsters;
_displayed_monsters = reversed_monsters;
elseif cached_config.static_sorting.type == "Health" then
if cached_config.static_sorting.reversed_order then
table.sort(displayed_monsters, function(left, right)
table.sort(_displayed_monsters, function(left, right)
return left.health > right.health;
end);
else
table.sort(displayed_monsters, function(left, right)
table.sort(_displayed_monsters, function(left, right)
return left.health < right.health;
end);
end
elseif cached_config.static_sorting.type == "Health Percentage" then
if cached_config.static_sorting.reversed_order then
table.sort(displayed_monsters, function(left, right)
table.sort(_displayed_monsters, function(left, right)
return left.health_percentage > right.health_percentage;
end);
else
table.sort(displayed_monsters, function(left, right)
table.sort(_displayed_monsters, function(left, right)
return left.health_percentage < right.health_percentage;
end);
end
elseif cached_config.static_sorting.type == "Distance" then
if cached_config.static_sorting.reversed_order then
table.sort(displayed_monsters, function(left, right)
table.sort(_displayed_monsters, function(left, right)
return left.distance > right.distance;
end);
else
table.sort(displayed_monsters, function(left, right)
table.sort(_displayed_monsters, function(left, right)
return left.distance < right.distance;
end);
end
end
end
return _displayed_monsters;
end
function this.draw()
local cached_config = config.current_config.small_monster_UI;
local dynamic_positioning_config = cached_config.dynamic_positioning;
local is_dynamic_positioning_enabled = dynamic_positioning_config.enabled;
local i = 0;
for _, monster in ipairs(displayed_monsters) do
local position_on_screen;
if cached_config.dynamic_positioning.enabled then
local world_offset = Vector3f.new(cached_config.dynamic_positioning.world_offset.x,
cached_config.dynamic_positioning.world_offset.y,
cached_config.dynamic_positioning.world_offset.z);
if is_dynamic_positioning_enabled then
local world_offset = Vector3f.new(
dynamic_positioning_config.world_offset.x,
dynamic_positioning_config.world_offset.y,
dynamic_positioning_config.world_offset.z
);
position_on_screen = draw.world_to_screen(monster.position + world_offset);
if position_on_screen == nil then
goto continue
if dynamic_positioning_config.head_tracking then
position_on_screen = draw.world_to_screen(monster.head_position + world_offset);
else
position_on_screen = draw.world_to_screen(monster.position + world_offset);
end
position_on_screen.x = position_on_screen.x + cached_config.dynamic_positioning.viewport_offset.x;
position_on_screen.y = position_on_screen.y + cached_config.dynamic_positioning.viewport_offset.y;
if position_on_screen == nil then
goto continue;
end
position_on_screen.x = position_on_screen.x + dynamic_positioning_config.viewport_offset.x;
position_on_screen.y = position_on_screen.y + dynamic_positioning_config.viewport_offset.y;
else
position_on_screen = screen.calculate_absolute_coordinates(cached_config.static_position);
if cached_config.settings.orientation == "Horizontal" then
position_on_screen.x = position_on_screen.x + cached_config.static_spacing.x * i;
else
position_on_screen.y = position_on_screen.y + cached_config.static_spacing.y * i;
end
end
local opacity_scale = 1;
if cached_config.dynamic_positioning.enabled then
if cached_config.dynamic_positioning.max_distance == 0 then
return;
end
if monster.distance > cached_config.dynamic_positioning.max_distance then
goto continue
end
if cached_config.dynamic_positioning.opacity_falloff then
opacity_scale = 1 - (monster.distance / cached_config.dynamic_positioning.max_distance);
end
if is_dynamic_positioning_enabled and dynamic_positioning_config.opacity_falloff then
monster.distance = (players.myself_position - monster.position):length();
opacity_scale = 1 - (monster.distance / dynamic_positioning_config.max_distance);
end
small_monster.draw(monster, cached_config, position_on_screen, opacity_scale);
i = i + 1;
@@ -186,7 +174,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 +184,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;
@@ -0,0 +1,322 @@
local this = {};
local buff_UI_entity;
local config;
local buffs;
local item_buffs;
local melody_effects;
local endemic_life_buff;
local screen;
local utils;
local error_handler;
local skills;
local dango_skills;
local abnormal_statuses;
local drawing;
local player_info;
local language;
local sdk = sdk;
local tostring = tostring;
local pairs = pairs;
local ipairs = ipairs;
local tonumber = tonumber;
local require = require;
local pcall = pcall;
local table = table;
local string = string;
local Vector3f = Vector3f;
local d2d = d2d;
local math = math;
local json = json;
local log = log;
local fs = fs;
local next = next;
local type = type;
local setmetatable = setmetatable;
local getmetatable = getmetatable;
local assert = assert;
local select = select;
local coroutine = coroutine;
local utf8 = utf8;
local re = re;
local imgui = imgui;
local draw = draw;
local Vector2f = Vector2f;
local reframework = reframework;
local os = os;
local ValueType = ValueType;
local package = package;
this.label_list = {
attack = nil,
defense = nil,
fire_resistance = nil,
water_resistance = nil,
thunder_resistance = nil,
ice_resistance = nil,
dragon_resistance = nil
};
this.affinity_label = nil;
this.health_label = nil;
this.stamina_label = nil;
this.element_label = nil;
this.element_2_label = nil;
function this.draw()
local cached_config = config.current_config.stats_UI;
if not cached_config.enabled then
return;
end
local cached_names = language.current_language.stats;
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
local position_on_screen = screen.calculate_absolute_coordinates(cached_config.position);
-- draw
for label_key, label in pairs(this.label_list) do
local name_text = "";
if label.include.name then
if label.include.value then
name_text = string.format("%s: ", cached_names[label_key]);
else
name_text = string.format("%s", cached_names[label_key]);
end
end
if label.include.value then
name_text = string.format("%s%s", name_text, tostring(player_info.list[label_key]));
end
drawing.draw_label(label, position_on_screen, 1, name_text);
::continue::
end
-- Health Label
local health_name_text = "";
if this.health_label.include.name then
health_name_text = string.format("%s: ", language.current_language.customization_menu.health);
if this.health_label.include.value or this.health_label.include.max_value then
health_name_text = string.format("%s: ", language.current_language.customization_menu.health);
else
health_name_text = string.format("%s", language.current_language.customization_menu.health);
end
end
if this.health_label.include.value and not this.health_label.include.max_value then
health_name_text = string.format("%s%s", health_name_text, tostring(player_info.list.health));
elseif not this.health_label.include.value and this.health_label.include.max_value then
health_name_text = string.format("%s%s", health_name_text, tostring(player_info.list.max_health));
elseif this.health_label.include.value and this.health_label.include.max_value then
health_name_text = string.format("%s%s/%s", health_name_text, tostring(player_info.list.health), tostring(player_info.list.max_health));
end
drawing.draw_label(this.health_label, position_on_screen, 1, health_name_text);
-- Stamina Label
local stamina_name_text = "";
if this.stamina_label.include.name then
if this.stamina_label.include.value or this.stamina_label.include.max_value then
stamina_name_text = string.format("%s: ", cached_names.stamina);
else
stamina_name_text = string.format("%s", cached_names.stamina);
end
end
if this.stamina_label.include.value and not this.stamina_label.include.max_value then
stamina_name_text = string.format("%s%s", stamina_name_text, tostring(player_info.list.stamina));
elseif not this.stamina_label.include.value and this.stamina_label.include.max_value then
stamina_name_text = string.format("%s%s", stamina_name_text, tostring(player_info.list.max_stamina));
elseif this.stamina_label.include.value and this.stamina_label.include.max_value then
stamina_name_text = string.format("%s%s/%s", stamina_name_text, tostring(player_info.list.stamina), tostring(player_info.list.max_stamina));
end
drawing.draw_label(this.stamina_label, position_on_screen, 1, stamina_name_text);
-- Affinity Label
local affinity_name_text = "";
if this.affinity_label.include.name then
if this.affinity_label.include.value then
affinity_name_text = string.format("%s: ", cached_names.affinity);
else
affinity_name_text = string.format("%s", cached_names.affinity);
end
end
if this.affinity_label.include.value then
affinity_name_text = string.format("%s%s%%", affinity_name_text, tostring(player_info.list.affinity));
end
drawing.draw_label(this.affinity_label, position_on_screen, 1, affinity_name_text);
-- Element Label
if player_info.list.element_type ~= 0 then
local element_name_text = "";
if this.element_label.include.name then
local ailment_names = language.current_language.ailments;
local ailment_name = "";
if player_info.list.element_type == 1 then
ailment_name = cached_names.fire;
elseif player_info.list.element_type == 2 then
ailment_name = cached_names.water;
elseif player_info.list.element_type == 3 then
ailment_name = cached_names.thunder;
elseif player_info.list.element_type == 4 then
ailment_name = cached_names.ice;
elseif player_info.list.element_type == 5 then
ailment_name = cached_names.dragon;
elseif player_info.list.element_type == 6 then
ailment_name = ailment_names.poison;
elseif player_info.list.element_type == 7 then
ailment_name = ailment_names.sleep;
elseif player_info.list.element_type == 8 then
ailment_name = ailment_names.paralysis;
elseif player_info.list.element_type == 9 then
ailment_name = ailment_names.blast;
end
if this.element_label.include.value then
element_name_text = string.format("%s: ", ailment_name);
else
element_name_text = string.format("%s", ailment_name);
end
end
if this.element_label.include.value then
element_name_text = string.format("%s%s", element_name_text, tostring(player_info.list.element_attack));
end
drawing.draw_label(this.element_label, position_on_screen, 1, element_name_text);
end
-- Element 2 Label
if player_info.list.element_type_2 ~= 0 then
local element_2_name_text = "";
if this.element_2_label.include.name then
local ailment_names = language.current_language.ailments;
local ailment_name = "";
if player_info.list.element_type_2 == 1 then
ailment_name = cached_names.fire;
elseif player_info.list.element_type_2 == 2 then
ailment_name = cached_names.water;
elseif player_info.list.element_type_2 == 3 then
ailment_name = cached_names.thunder;
elseif player_info.list.element_type_2 == 4 then
ailment_name = cached_names.ice;
elseif player_info.list.element_type_2 == 5 then
ailment_name = cached_names.dragon;
elseif player_info.list.element_type_2 == 6 then
ailment_name = ailment_names.poison;
elseif player_info.list.element_type_2 == 7 then
ailment_name = ailment_names.sleep;
elseif player_info.list.element_type_2 == 8 then
ailment_name = ailment_names.paralysis;
elseif player_info.list.element_type_2 == 9 then
ailment_name = ailment_names.blast;
end
if this.element_2_label.include.value then
element_2_name_text = string.format("%s: ", ailment_name);
else
element_2_name_text = string.format("%s", ailment_name);
end
end
if this.element_2_label.include.value then
element_2_name_text = string.format("%s%s", element_2_name_text, tostring(player_info.list.element_attack_2));
end
drawing.draw_label(this.element_2_label, position_on_screen, 1, element_2_name_text);
end
end
function this.init_UI()
this.label_list.attack = utils.table.deep_copy(config.current_config.stats_UI.attack_label);
this.label_list.defense = utils.table.deep_copy(config.current_config.stats_UI.defense_label);
this.label_list.fire_resistance = utils.table.deep_copy(config.current_config.stats_UI.fire_resistance_label);
this.label_list.water_resistance = utils.table.deep_copy(config.current_config.stats_UI.water_resistance_label);
this.label_list.thunder_resistance = utils.table.deep_copy(config.current_config.stats_UI.thunder_resistance_label);
this.label_list.ice_resistance = utils.table.deep_copy(config.current_config.stats_UI.ice_resistance_label);
this.label_list.dragon_resistance = utils.table.deep_copy(config.current_config.stats_UI.dragon_resistance_label);
this.affinity_label = utils.table.deep_copy(config.current_config.stats_UI.affinity_label);
this.health_label = utils.table.deep_copy(config.current_config.stats_UI.health_label);
this.stamina_label = utils.table.deep_copy(config.current_config.stats_UI.stamina_label);
this.element_label = utils.table.deep_copy(config.current_config.stats_UI.element_label);
this.element_2_label = utils.table.deep_copy(config.current_config.stats_UI.element_2_label);
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
for label_key, label in pairs(this.label_list) do
label.offset.x = label.offset.x * global_scale_modifier;
label.offset.y = label.offset.y * global_scale_modifier;
end
this.affinity_label.offset.x = this.affinity_label.offset.x * global_scale_modifier;
this.affinity_label.offset.y = this.affinity_label.offset.y * global_scale_modifier;
this.health_label.offset.x = this.health_label.offset.x * global_scale_modifier;
this.health_label.offset.y = this.health_label.offset.y * global_scale_modifier;
this.stamina_label.offset.x = this.stamina_label.offset.x * global_scale_modifier;
this.stamina_label.offset.y = this.stamina_label.offset.y * global_scale_modifier;
this.element_label.offset.x = this.element_label.offset.x * global_scale_modifier;
this.element_label.offset.y = this.element_label.offset.y * global_scale_modifier;
this.element_2_label.offset.x = this.element_2_label.offset.x * global_scale_modifier;
this.element_2_label.offset.y = this.element_2_label.offset.y * global_scale_modifier;
end
function this.init_dependencies()
config = require("MHR_Overlay.Misc.config");
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
item_buffs = require("MHR_Overlay.Buffs.item_buffs");
melody_effects = require("MHR_Overlay.Buffs.melody_effects");
buffs = require("MHR_Overlay.Buffs.buffs");
--singletons = require("MHR_Overlay.Game_Handler.singletons");
config = require("MHR_Overlay.Misc.config");
--customization_menu = require("MHR_Overlay.UI.customization_menu");
--players = require("MHR_Overlay.Damage_Meter.players");
--non_players = require("MHR_Overlay.Damage_Meter.non_players");
--quest_status = require("MHR_Overlay.Game_Handler.quest_status");
screen = require("MHR_Overlay.Game_Handler.screen");
--drawing = require("MHR_Overlay.UI.drawing");
utils = require("MHR_Overlay.Misc.utils");
error_handler = require("MHR_Overlay.Misc.error_handler");
endemic_life_buff = require("MHR_Overlay.Buffs.endemic_life_buffs");
skills = require("MHR_Overlay.Buffs.skills");
dango_skills = require("MHR_Overlay.Buffs.dango_skills");
abnormal_statuses = require("MHR_Overlay.Buffs.abnormal_statuses");
drawing = require("MHR_Overlay.UI.drawing");
player_info = require("MHR_Overlay.Misc.player_info");
language = require("MHR_Overlay.Misc.language");
end
function this.init_module()
this.init_UI();
end
return this;
@@ -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,16 @@ 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 = "";
if buff_UI.name_label.include.name then
buff_name = string.format("%s ", buff.name);
end
if buff_UI.name_label.include.effect_level and buff.level > 1 then
buff_name = string.format("%s%s%d", buff_name, language.current_language.UI.lv, buff.level);
end
drawing.draw_label(buff_UI.name_label, position_on_screen, opacity_scale, buff_name);
if not buff.is_infinite then
drawing.draw_label(buff_UI.timer_label, position_on_screen, opacity_scale, buff.minutes_left, buff.seconds_left);
@@ -81,11 +91,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;
File diff suppressed because it is too large Load Diff
@@ -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;
@@ -0,0 +1,700 @@
{
"UI": {
"HP": "HP:",
"buildup": "Buildup:",
"gold": "Gold",
"lv": "",
"mini": "Mini",
"otomo": "Buddy",
"part_anomaly_core": "Anomaliekern",
"part_break": "Bruch",
"part_sever": "Schnitt",
"player": "Spieler",
"rage": "Wut:",
"servant": "Anhänger",
"silver": "Silber",
"stamina": "Ausdauer:",
"total_buildup": "Gesamt-Buildup",
"total_damage": "Gesamt-Schaden"
},
"ailments": {
"blast": "Explosion",
"blastblight": "Explosionspest",
"bleeding": "Blutung",
"bloodblight": "Blutpest",
"deadly_poison": "Tödliches Gift",
"defense_down": "Verteidigung -",
"dragonblight": "Drachenpest",
"dung_bomb": "Dungbombe",
"engulfed": "Verschlungen",
"exhaust": "Erschöpft",
"fall_otomo_trap": "Buddy Fallgrube",
"fall_trap": "Fallgrube",
"falling_asleep": "Am Einschlafen",
"fireblight": "Feuerpest",
"flash": "Blenden",
"frenzy": "Raserei",
"frenzy_infection": "Raserei Erlegen",
"frenzy_overcome": "Raserei Besiegt",
"frostblight": "Frostpest",
"hellfireblight": "Höllenfeuerpest",
"iceblight": "Eispest",
"leeched": "Blutegel",
"major_bubbleblight": "Blasenpest (L)",
"minor_bubbleblight": "Blasenpest (S)",
"muck": "Schlamm",
"paralysis": "Lähmung",
"poison": "Gift",
"quick_sand": "Treibsand",
"resistance_down": "Widerstand -",
"ride": "Wyvern-Reiten",
"roar": "Schrei",
"shock_otomo_trap": "Buddy Schockfalle",
"shock_trap": "Schockfalle",
"sleep": "Schlaf",
"steel_fang": "Stahl-Reißzahn",
"stench": "Gestank",
"stun": "Betäuben",
"thunderblight": "Donnerpest",
"tranq_bomb": "Beruhigungsbombe",
"tremor": "Erschütterung",
"waterblight": "Wasserpest",
"webbed": "Eingenetzt"
},
"customization_menu": {
"UI_font": "UI Schrift",
"UI_font_notice": "Schriftartänderungen erfordern einen Skiptneustart!",
"abnormal_statuses": "Status-Anomalien",
"activation_count": "Aktivierungsanzahl",
"affinity_label": "Affinität-Etikett",
"ailment_buildups": "Anomalie-Buildups",
"ailment_name": "Anomalie-Name",
"ailment_name_label": "Anomalie-Name-Etikett",
"ailment_spacing": "Anomalie-Abstand",
"ailments": "Anomalien",
"all_UI": "Ganze UI",
"anchor": "Anker",
"anomaly_cores": "Anomaliekerne",
"anomaly_filter": "Anomaliekern",
"anomaly_health": "Anomaliekern-Zustand",
"anomaly_health_percentage": "Anomaliekern-Zustand in %",
"apply": "Übernehmen",
"assign_new_key": "Neue Taste zuweisen",
"attack_label": "Angriff-Etikett",
"auto_highlight": "Auto-Erfassen",
"background": "Hintergrund",
"bar": "Leiste",
"blast": "Explosion",
"body_parts": "Körperteile",
"bold": "Fett",
"bombs": "Bomben",
"bottom_left": "Unten Links",
"bottom_right": "Unten Rechts",
"bottom_to_top": "Unten nach Oben",
"break_anomaly_filter": "Bruch + Anomaliekern",
"break_count": "Bruchanzahl",
"break_filter": "Bruch",
"break_health": "Bruch-HP",
"break_health_percentage": "Bruch-HP in %",
"break_max_count": "Max Bruchanzahl",
"break_sever_anomaly_filter": "Bruch + Schnitt + Anomaliekern",
"break_sever_filter": "Bruch + Schnitt",
"buff_UI": "Buff UI",
"buildup": "Buildup",
"buildup_bar": "Buildup-Leiste",
"buildup_bars_are_relative_to": "Buildup-Leisten relativ zu",
"buildup_percentage": "Buildup in %",
"buildup_percentage_label": "Buildup in %-Etikett",
"buildup_value_label": "Buildup-Wert-Etikett",
"capture_line": "Fanggrenze",
"cart_count": "Karrenanzahl",
"cart_count_label": "Karrenanzahl-Etikett",
"center": "Mitte",
"closest": "Nächster",
"color": "Farbe",
"colors": "Farben",
"config": "Voreinstellungen",
"creature_name_label": "Kreaturenname-Etikett",
"crown": "Krone",
"crown_thresholds": "Krone Grenzwerte",
"current_state": "Aktueller Zustand",
"current_time": "Aktuelle Zeit",
"current_value": "Aktueller Wert",
"cutscene": "Zwischensequenz",
"damage": "Schaden",
"damage_bar": "Schadensleiste",
"damage_bars_are_relative_to": "Schadensleiste relativ zu",
"damage_meter_UI": "Schadens-UI",
"damage_percentage_label": "Schaden in %-Etikett",
"damage_value_label": "Schadenswert-Etikett",
"dango_skills": "Dango-Fähigkeiten",
"debug": "Debug",
"default_state": "Voreinstellung",
"defense_label": "Verteidigung-Etikett",
"delete": "Löschen",
"distance": "Entfernung",
"dps": "DPS",
"dps_label": "DPS-Etikett",
"dps_mode": "DPS Modus",
"dragon_resistance_label": "Drachenwiderstand-Etikett",
"duplicate": "Klonen",
"duration": "Dauer",
"dynamic_positioning": "Dynamische Platzierung",
"dynamically_positioned": "Dynamisch Platziert",
"effect_level": "Effekt-Stufe",
"element_2_label": "Element 2-Etikett",
"element_label": "Element-Etikett",
"enable_for": "Aktiviere für",
"enabled": "Aktiviert",
"endemic_life": "Einheimische Wesen",
"endemic_life_UI": "Einheimische Wesen UI",
"endemic_life_buffs": "Einheimische Wesen Buffs",
"everything_seems_to_be_ok": "Alles scheint gut zu sein!",
"family": "Familie",
"farthest": "Weitester",
"fight_time": "Kampfdauer",
"fill_direction": "Füllrichtung",
"filter": "Filter",
"filter_mode": "Filter-Modus",
"fire_resistance_label": "Feuerwiderstand-Etikett",
"first": "Zuerst",
"first_hit": "Erster Treffer",
"flinch_count": "Stolper-Anzahl",
"foreground": "Vordergrund",
"freeze_dps_on_quest_end": "DPS bei Questabschluss einfrieren",
"global_position_modifier": "Allgemeiner Positions-Modifikator",
"global_scale_modifier": "Allgemeiner Größen-Modifikator",
"global_settings": "Allgemeine Einstellungen",
"head_tracking": "Auf Kopf fixieren",
"health": "HP",
"health_anomaly_filter": "HP + Anomaliekern",
"health_break_anomaly_filter": "HP + Bruch + Anomaliekern",
"health_break_filter": "HP + Bruch",
"health_break_sever_anomaly_filter": "HP + Bruch + Schnitt + Anomaliekern",
"health_break_sever_filter": "HP + Bruch + Schnitt",
"health_filter": "HP",
"health_label": "HP-Etikett",
"health_percentage": "HP in %",
"health_sever_anomaly_filter": "HP + Schnitt + Anomaliekern",
"health_sever_filter": "HP + Schnitt",
"height": "Höhe",
"hide_ailments_with_zero_buildup": "Anomalien mit 0 Buildup verbergen",
"hide_all_active_ailments": "Alle Aktiven Anomalien verbergen",
"hide_all_inactive_ailments": "Alle Inaktiven Anomalien verbergen",
"hide_bar_for_infinite_buffs": "Leiste für unbegrenzte Buffs verbergen",
"hide_dead_or_captured": "Tote oder Gefangene verbergen",
"hide_disabled_ailments": "Vom Spiel deaktivierte Anomalien verbergen",
"hide_inactive_ailments_with_no_buildup_support": "Inaktive Anomalien ohne Buildup-Möglichkeit verbergen",
"hide_inactive_creatures": "Inaktive Kreaturen verbergen",
"hide_module_if_total_damage_is_zero": "Modul bei 0 Schaden verbergen",
"hide_myself": "Selbst verbergen",
"hide_other_players": "Andere Spieler verbergen",
"hide_player_if_player_damage_is_zero": "Spieler mit 0 Schaden verbergen",
"hide_servants": "Anhänger verbergen",
"hide_timer_for_infinite_buffs": "Dauer für unbegrenzte Buffs verbergen",
"hide_total_damage": "Gesamtschaden verbergen",
"hide_total_if_total_damage_is_zero": "Bei 0 Gesamtschaden verbergen",
"hide_undamaged_parts": "Unbeschädigte Teile verbergen",
"highest_health": "Höchste HP",
"highest_health_percentage": "Höchste HP in %",
"highlighted": "Erfasst",
"highlighted_bar": "Erfasst-Leiste",
"highlighted_buildup_bar": "Erfasst Buildup-Leiste",
"highlighted_damage_bar": "Erfasst Schadensleiste",
"highlighted_targeted": "Erfasst (anvisiert)",
"history": "Verlauf",
"history_size": "Verlaufsgröße",
"horizontal": "Horizontal",
"hotkeys": "Hotkeys",
"hunter_rank": "Jägerrang",
"hunter_rank_label": "Jägerrang-Etikett",
"ice_resistance_label": "Eiswiderstand-Etikett",
"id": "ID",
"in_lobby": "Im Lager",
"in_training_area": "Im Trainingsbereich",
"include": "Beinhaltet",
"infinite_buffs_location": "Ort für Unbegrenzte Buffs",
"inside": "Innen",
"installations": "Anlagen",
"italic": "Kursiv",
"item_buffs": "Gegenstand-Buffs",
"join_time": "Beirittszeit",
"killcam": "Killcam",
"kunai": "Kunai",
"language": "Sprache",
"large_monster_UI": "Großmonster UI",
"large_monster_dynamic_UI": "Großmonster Dynamische UI",
"large_monster_highlighted_UI": "Großmonster Erfasst UI",
"large_monster_static_UI": "Großmonster Feste UI",
"large_monsters": "Große Monster",
"last": "Zuletzt",
"left_to_right": "Links nach Rechts",
"level": "Stufe",
"level_label": "Stufe-Etikett",
"loading_quest": "Lade Quest",
"loss_health": "Schnitt-HP",
"loss_health_percentage": "Schnitt-HP in %",
"lowest_health": "Niedrigste HP",
"lowest_health_percentage": "Niedrigste HP in %",
"master_rank": "Meisterrang",
"max_distance": "Max Entfernung",
"max_monster_updates_per_tick": "Max Monster-Updates pro Tick",
"max_value": "Max Wert",
"me": "Ich",
"melody_effects": "Melodie-Effekte",
"menu_font": "Menü-Schriftart",
"menu_font_change_disclaimer": "Mehrmals Sprache und Menüschriftart ändern führt zu einem Absturz!",
"misc_buffs": "Diverse Buffs",
"mod_name": "MHR Overlay",
"mode": "Modus",
"modifiers": "Modifikatoren",
"module_visibility_based_on_game_state": "Sichtbarkeit abhängig vom Spielzustand",
"modules": "Modul",
"monster_can_be_captured": "Monster ist fangbar",
"monster_id": "Monster-ID",
"monster_name": "Monster-Name",
"monster_name_label": "Monster-Name-Etikett",
"monsters": "Monster",
"my_damage_bar_location": "Ort für Meine Schadensleiste",
"my_otomos": "Meine Buddies",
"myself": "Selbst",
"name": "Name",
"name_label": "Namens-Label",
"new": "Neu",
"none": "Nichts",
"normal": "Normal",
"offset": "Offset",
"offset_is_relative_to_parts": "Offset ist relativ zu Teile",
"opacity_falloff": "Abfall der Deckkraft",
"orientation": "Orientierung",
"other": "Andere",
"other_player_otomos": "Buddies anderer Spieler",
"other_players": "Andere Spieler",
"otomo_moves": "Buddy Aktionen",
"otomos": "Buddies",
"outline": "Umrandung",
"outside": "Außen",
"part_health": "Teil-HP",
"part_name": "Teil-Name",
"part_name_label": "Teil-Name-Etikett",
"percentage_label": "Prozent-Etikett",
"performance": "Leistung",
"player_name_label": "Spielername-Etikett",
"player_name_size_limit": "Höchstbreite Spielername",
"player_spacing": "Spieler Abstand",
"players": "Spieler",
"playing_quest": "Während Quest",
"poison": "Gift",
"position": "Position",
"press_any_key": "Drücke eine Taste...",
"prioritize_large_monsters": "Große Monster priorisieren",
"quest_end_animation": "Questabschluss-Szene",
"quest_end_screen": "Questabschluss-Schirm",
"quest_end_timer": "Questabschluss-Zähler",
"quest_start_animation": "Questbeginn-Animation",
"quest_time": "Quest-Zeit",
"rage": "Wut",
"rampage_skills": "Randale-Fähigkeiten",
"reframework_outdated": "Die installierte REFramework Version ist veraltet. Bitte aktualisieren. Sonst wird MHR Overlay nicht richtig arbeiten.",
"relative_offset": "Relatives Offset",
"rename": "Umbenennen",
"render_highlighted_monster": "Rendere erfasstes Monster",
"render_inactive_anomaly_cores": "Rendere inaktive Anomaliekerne",
"render_not_highlighted_monsters": "Rendere nicht erfasste Monster",
"renderer": "Renderer",
"reset": "Zurücksetzen",
"reversed_order": "Umgekehrte Reihenfolge",
"reward_screen": "Belohnungsauswahl",
"right_alignment_shift": "Ausrichtungsverschiebung Rechts",
"right_to_left": "Rechts nach Links",
"servant_otomos": "Anhänger-Buddies",
"servants": "Anhänger",
"settings": "Einstellungen",
"sever_anomaly_filter": "Schnitt + Anomaliekern",
"sever_filter": "Schnitt",
"shadow": "Schatten",
"show_my_otomos_separately": "Zeige Meine Buddies getrennt",
"show_other_player_otomos_separately": "Zeige Buddies anderer Spieler getrennt",
"show_servant_otomos_separately": "Zeige Anhänger-Buddies getrennt",
"size": "Größe",
"skills": "Fähigkeiten",
"small_monster_UI": "Kleinmonster UI",
"small_monsters": "Kleine Monster",
"sorting": "Sortierung",
"spacing": "Abstand",
"stamina": "Ausdauer",
"stamina_label": "Ausdauer-Etikett",
"static_orientation": "Feste Orientierung",
"static_position": "Feste Platzierung",
"static_sorting": "Feste Sortierung",
"static_spacing": "Fester Abstand",
"statically_positioned": "Fest Platziert",
"stats_UI": "Status UI",
"status": "Status",
"style": "Stil",
"summary_screen": "Zusammenfassung",
"text_label": "Text-Etikett",
"thickness": "Dicke",
"thunder_resistance_label": "Donnerwiderstand-Etikett",
"time_UI": "Zeit UI",
"time_label": "Zeit-Etikett",
"time_limit": "Zeitlimit (Sekunden)",
"timer": "Dauer",
"timer_delays": "Zeitabstände",
"timer_label": "Dauer-Etikett",
"top_buildup": "Bester Buildup",
"top_damage": "Bester Schaden",
"top_dps": "Bester DPS",
"top_left": "Oben Links",
"top_right": "Oben Rechts",
"top_to_bottom": "Oben nach Unten",
"total": "Gesamt",
"total_buildup": "Gesamt Buildup",
"total_buildup_label": "Gesamt Buildup-Etikett",
"total_buildup_value_label": "Gesamt Buildup-Wert-Etikett",
"total_cart_count_label": "Gesamtanzahl Karren-Etikett",
"total_damage": "Gesamtschaden",
"total_damage_label": "Gesamtschaden-Etikett",
"total_damage_location": "Ort für Gesamtschadensleiste",
"total_damage_offset_is_relative": "Gesamtschaden Offset ist relativ",
"total_damage_value_label": "Gesamtschadenswert-Etikett",
"total_dps": "Gesamte DPS",
"total_dps_label": "Gesamte DPS-Etikett",
"tracked_damage_types": "Verfolgte Schadensarten",
"tracked_monster_types": "Verfolgte Monsterarten",
"type": "Typ",
"update_buffs_delay": "Buffs abfragen (in Sek.)",
"update_is_online_delay": "Onlinecheck abfragen (in Sek.)",
"update_myself_position_delay": "Eigene Position abfragen (in Sek.)",
"update_player_info_delay": "Spielerinfo abfragen (in Sek.)",
"update_players_delay": "Spieler abfragen (in Sek.)",
"update_quest_time_delay": "Questzeit abfragen (in Sek.)",
"update_singletons_delay": "Singletons abfragen (in Sek.)",
"update_window_size_delay": "Fenstergröße abfragen (in Sek.)",
"use_d2d_if_available": "Direct2D nutzen wenn vorhanden",
"value": "Wert",
"value_label": "Wert-Etikett",
"vertical": "Vertikal",
"viewport_offset": "Viewport Offset",
"visible": "Sichtbar",
"water_resistance_label": "Wasserwiderstand-Etikett",
"weapon_skills": "Waffen-Fähigkeiten",
"width": "Breite",
"world_offset": "Welt Offset",
"wyvern_riding": "Wyvern-Reiten",
"x": "X",
"y": "Y",
"z": "Z"
},
"dango_skills": {
"dango_adrenaline": "Dango-Adrenalin",
"dango_booster": "Dango-Verstärker",
"dango_bulker": "Dango-Kraftprotz",
"dango_connector": "Dango-Verbinder",
"dango_defender": "Dango-Verteidiger",
"dango_flyer": "Dango-Jongleur",
"dango_glutton": "Dango-Nimmersatt",
"dango_hunter": "Dango-Jäger",
"dango_insurance": "Dango-Sicherer",
"dango_insurance_defense_up": "Dango-Sicherer Verteidigung +",
"super_recovery_dango": "Super-Erholungs-Dango"
},
"endemic_life": {
"butterflame": "Flämmling",
"clothfly": "Tuchfalter",
"cutterfly": "Schnibelle",
"gold_wirebug": "Goldseilkäfer",
"peepersects": "Späherlinge",
"red_lampsquid": "Rotlichtkalmar",
"ruby_wirebug": "Rubinseilkäfer",
"stinkmink": "Miefnerz",
"yellow_lampsquid": "Gelblichtkalmar"
},
"font_name": "NotoSans-Bold.otf",
"item_buffs": {
"adamant_seed": "Diamantsamen",
"armor_ammo": "Rüstung (Munition)",
"armorskin": "Panzerhaut",
"dash_juice": "Sprintsaft",
"demon_ammo": "Dämon (Munition)",
"demon_powder": "Dämonenpulver",
"demondrug": "Dämonenmittel",
"gourmet_fish": "Gourmet-Fisch",
"hardshell_powder": "Harthülsenpulver",
"immunizer": "Immunisierer",
"mega_armorskin": "Mega-Panzerhaut",
"mega_demondrug": "Mega-Dämonenmittel",
"might_seed": "Machtsamen"
},
"melody_effects": {
"affinity_up": "Affinität +",
"attack_and_affinity_up": "Angriff & Affinität +",
"attack_and_defense_up": "Angriff & Verteidigung +",
"attack_up": "Angriff +",
"blight_negated": "Pest negiert",
"defense_up": "Verteidigung +",
"divine_protection": "Göttlicher Schutz",
"earplugs_l": "Ohrstöpsel II",
"earplugs_s": "Ohrstöpsel I",
"elemental_attack_boost": "Elementangriff-Boost",
"environment_damage_negated": "Umgebungsschaden negiert",
"health_recovery_l": "Gesundheitserholung (L)",
"health_recovery_s": "Gesundheitserholung (S)",
"health_recovery_s_antidote": "Gesundheitserholung (S) + Gegengift",
"health_regeneration": "Gesundheitsregeneration",
"infernal_melody": "Höllenmelodie",
"knockbacks_negated": "Rückschläge negiert",
"self_improvement": "Selbstverbesserung",
"sharpness_extension": "Schärfeverlängerung",
"sharpness_loss_reduced": "Schärfeverlust reduziert",
"sharpness_regeneration": "Schärferegeneration",
"sonic_barrier": "Schallbarriere",
"sonic_wave": "Schallwelle",
"stamina_recovery_up": "Ausdauer-Erholung +",
"stamina_use_reduced": "Ausdauernutzung -",
"stun_negated": "Betäuben negiert",
"tremors_negated": "Erschütterungen negiert",
"wind_pressure_negated": "Winddruck negiert"
},
"misc_buffs": {
"attack_up": "Angriff +",
"defense_up": "Verteidigung +",
"immunity": "Immunität",
"natural_healing_up": "Natürliche Heilung +",
"stamina_use_down": "Ausdauernutzung -"
},
"otomo_moves": {
"go_fight_win": "Jubeltanz",
"power_drum": "Krafttrommel",
"rousing_roar": "Stärkungsbrüllen",
"vase_of_vitality": "Vase der Vitalität"
},
"parts": {
"abdomen": "Abdomen",
"amatsu_unknown": "?",
"antenna": "Fühler",
"arms": "Arme",
"arms_mud": "Arme (Schlamm)",
"back": "Rücken",
"back_windsac": "Rücken (Windsack)",
"body": "Körper",
"body_mud": "Körper (Schlamm)",
"carapace": "Platte",
"chest": "Brust",
"chest_windsac": "Brust (Windsack)",
"claw": "Klaue",
"crest": "Kamm",
"dorsal_fin": "Rückenflosse",
"foreleg": "Vorderbein",
"forelegs": "Vorderbeine",
"head": "Kopf",
"head_mud": "Kopf (Schlamm)",
"hind_leg": "Hinterbein",
"hind_legs": "Hinterbeine",
"large_mudbulb": "Große Schlammknolle",
"left_arm": "Arm L",
"left_arm_ice": "Arm L (Eis)",
"left_claw": "Klaue L",
"left_cutwing": "Schnittflügel L",
"left_foreleg": "Vorderbein L",
"left_hind_leg": "Hinterbein L",
"left_leg": "Bein L",
"left_leg_mud": "Bein L (Schlamm)",
"left_legs": "Beine L",
"left_wing": "Flügel L",
"left_wingclaw": "Flügelklaue L",
"legs": "Beine",
"lower_back": "Unterer Rücken",
"lower_body": "Unterkörper",
"mane": "Mähne",
"mudbulb": "Schlammknolle",
"neck": "Hals",
"rear": "Hintern",
"right_arm": "Arm R",
"right_arm_ice": "Arm R (Eis)",
"right_claw": "Klaue R",
"right_cutwing": "Schnittflügel R",
"right_foreleg": "Vorderbein R",
"right_hind_leg": "Hinterbein R",
"right_leg": "Bein R",
"right_leg_mud": "Bein R (Schlamm)",
"right_legs": "Beine R",
"right_wing": "Flügel R",
"right_wingclaw": "Flügelklaue R",
"rock": "Fels",
"shell": "Panzer",
"spinning": "Spinning",
"tail": "Schwanz",
"tail_mud": "Schwanz (Schlamm)",
"tail_tip": "Schwanzspitze",
"tail_windsac": "Schwanz (Windsack)",
"thundersacs": "Funkensack",
"torso": "Torso",
"torso_mud": "Torso (Schlamm)",
"unknown": "?",
"upper_back": "Oberer Rücken",
"upper_body": "Oberkörper",
"wingclaw": "Flügelklaue",
"wingclaws": "Flügelklauen",
"wings": "Flügel"
},
"rampage_skills": {
"chameleos_soul": "Chameleos-Seele",
"kushala_daora_soul": "Kushala-Daora-Seele"
},
"skills": {
"adrenaline_rush": "Adrenalinschub",
"affinity_sliding": "Affinitätsschlittern",
"agitator": "Aufhetzer",
"berserk": "Berserker",
"bladescale_hone": "KlingenschVerbess",
"blood_awakening": "Bluterwachen",
"bloodlust": "Blutdurst",
"burst": "Salve",
"coalescence": "Verschmelzung",
"counterstrike": "Gegenschlag",
"dereliction": "Verwahrlosung",
"dragon_conversion_elemental_attack_up": "Drachenumwandlung: Elem. Ang +",
"dragon_conversion_elemental_res_up": "Drachenumwandlung: Elem. Wdr +",
"dragonheart": "Drachenherz",
"embolden": "Ermutigen",
"frenzied_bloodlust": "Raserei-Blutdurst",
"furious": "Zorniger",
"grinder_s": "Schleifer (S)",
"heaven_sent": "Wie gerufen",
"hellfire_cloak": "Höllenfeuer-Umhang",
"heroics": "Heldentat",
"inspiration": "Inspiration",
"intrepid_heart": "Furchtloses Herz",
"latent_power": "Latente Kraft",
"maximum_might": "Höchstmacht",
"offensive_guard": "Offensive Abwehr",
"partbreaker": "Teilezerstörer",
"peak_performance": "Höchstleistung",
"powder_mantle_blue": "Pulver-Mantel (Blau)",
"powder_mantle_red": "Pulver-Mantel (Rot)",
"protective_polish": "Schutzpolitur",
"resentment": "Groll",
"resuscitate": "Wiederbelebung",
"spiribirds_call": "Irrlitzruf",
"status_trigger": "Statusauslöser",
"strife": "Kampf",
"wall_runner": "Wandläufer",
"wind_mantle": "Wind-Mantel"
},
"stats": {
"affinity": "Affinität",
"attack": "Angriff",
"defense": "Verteidigung",
"dragon": "Drache",
"dragon_resistance": "Drachenwdrstd",
"fire": "Feuer",
"fire_resistance": "Feuerwdrstd",
"ice": "Eis",
"ice_resistance": "EIswdrstd",
"stamina": "Ausdauer",
"thunder": "Donner",
"thunder_resistance": "Donnerwdrstd",
"water": "Wasser",
"water_resistance": "Wasserwdrstd"
},
"unicode_glyph_ranges": [
32,
255,
256,
591,
1024,
1327,
7680,
7935,
8192,
8303,
65280,
65519,
0
],
"weapon_skills": {
"bow": {
"arc_shot_affinity": "Bogenschuss: Affinität",
"arc_shot_brace": "Bogenschuss: Festhalten",
"bolt_boost": "Bolzen-Booster",
"herculean_draw": "Herkulisches Ziehen"
},
"charge_blade": {
"element_boost": "Elementbonus",
"sword_boost_mode": "Schwertmodus Verstärkt"
},
"dual_blades": {
"archdemon_mode": "Erzdämonenmodus",
"ironshine_silk": "Eisenschimmer-Seide"
},
"great_sword": {
"power_sheathe": "Kraft-Wegstecken"
},
"gunlance": {
"erupting_cannon": "Eruptionskanone",
"ground_splitter": "Bodenteiler"
},
"hammer": {
"impact_burst": "Einschlagsexplosion"
},
"heavy_bowgun": {
"counter_charger": "Konter-Aufladen",
"overheat": "Überhitzt",
"rising_moon": "Aufgehender Mond",
"setting_sun": "Untergehende Sonne",
"wyvernsnipe_reload": "Wyvernauge-Nachladen"
},
"hunting_horn": {
"bead_of_resonance": "Perle der Resonanz",
"silkbind_shockwave": "Seidenbinder-Schockwelle",
"sonic_bloom": "Schallblüte"
},
"insect_glaive": {
"all_extracts_mix": "Alle Extrakte",
"orange_extract": "Orangenes Extrakt",
"red_extract": "Rotes Extrakt",
"white_extract": "Weißes Extrakt"
},
"lance": {
"anchor_rage": "Ankerwut",
"spiral_thrust": "Spiralstoß",
"twin_wine": "Zwillingsranke"
},
"light_bowgun": {
"fanning_maneuver": "Fächermanöver",
"wyvernblast_reload": "Wyvernexplosion-Nachladen"
},
"long_sword": {
"harvest_moon": "Erntemond",
"iai_slash": "Iai-Hieb",
"soaring_kick": "Himmelhoher Tritt",
"spirit_gauge": "Elanbalken",
"spirit_gauge_autofill": "Elanbalken-Autoladung"
},
"switch_axe": {
"amped_state": "Verstärkter Zustand",
"axe_heavy_slam": "Axt: Schwerer Niederschlag",
"switch_charger": "Morph-Lader"
},
"sword_and_shield": {
"destroyer_oil": "Zerstöreröl"
}
},
"weapons": {
"bow": "Bogen",
"charge_blade": "Energieklinge",
"dual_blades": "Doppelklingen",
"great_sword": "Großschwert",
"gunlance": "Gewehrlanze",
"hammer": "Hammer",
"heavy_bowgun": "Schw. Bogengewehr",
"hunting_horn": "Jagdhorn",
"insect_glaive": "Insektenglefe ",
"lance": "Lanze",
"light_bowgun": "Lcht. Bogengewehr",
"long_sword": "Langschwert",
"switch_axe": "Morph-Axt",
"sword_and_shield": "Schwert & Schild"
}
}
@@ -3,6 +3,7 @@
"HP": "HP:",
"buildup": "Buildup:",
"gold": "Gold",
"lv": "",
"mini": "Mini",
"otomo": "Buddy",
"part_anomaly_core": "Anomaly Core",
@@ -18,30 +19,54 @@
},
"ailments": {
"blast": "Blast",
"blastblight": "Blastblight",
"bleeding": "Bleeding",
"bloodblight": "Bloodblight",
"deadly_poison": "Deadly Poison",
"defense_down": "Defense Down",
"dragonblight": "Dragonblight",
"dung_bomb": "Dung Bomb",
"engulfed": "Engulfed",
"exhaust": "Exhaust",
"fall_otomo_trap": "Fall Buddy Trap",
"fall_trap": "Fall Trap",
"falling_asleep": "Falling Asleep",
"fireblight": "Fireblight",
"flash": "Flash",
"frenzy": "Frenzy",
"frenzy_infection": "Frenzy Infection",
"frenzy_overcome": "Frenzy Overcome",
"frostblight": "Frostblight",
"hellfireblight": "Hellfireblight",
"iceblight": "Iceblight",
"leeched": "Leeched",
"major_bubbleblight": "Major Bubbleblight",
"minor_bubbleblight": "Minor Bubbleblight",
"muck": "Muck",
"paralysis": "Paralysis",
"poison": "Poison",
"quick_sand": "Quick Sand",
"resistance_down": "Resistance Down",
"ride": "Wyvern Riding",
"roar": "Roar",
"shock_otomo_trap": "Shock Buddy Trap",
"shock_trap": "Shock Trap",
"sleep": "Sleep",
"steel_fang": "Steel Fang",
"stench": "Stench",
"stun": "Stun",
"thunderblight": "Thunderblight",
"tranq_bomb": "Tranq Bomb",
"waterblight": "Waterblight"
"tremor": "Tremor",
"waterblight": "Waterblight",
"webbed": "Webbed"
},
"customization_menu": {
"UI_font": "UI Font",
"UI_font_notice": "Any changes to the font require script reload!",
"abnormal_statuses": "Abnormal Statuses",
"activation_count": "Activation Count",
"affinity_label": "Affinity Label",
"ailment_buildups": "Ailment Buildups",
"ailment_name": "Ailment Name",
"ailment_name_label": "Ailment Name Label",
@@ -55,6 +80,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 +118,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 +127,36 @@
"damage_meter_UI": "Damage Meter UI",
"damage_percentage_label": "Damage Percentage Label",
"damage_value_label": "Damage Value Label",
"dango_skills": "Dango Skills",
"debug": "Debug",
"default_state": "Default State",
"defense_label": "Defense Label",
"delete": "Delete",
"distance": "Distance",
"dps": "DPS",
"dps_label": "DPS Label",
"dps_mode": "DPS Mode",
"dragon_resistance_label": "Dragon Resistance Label",
"duplicate": "Duplicate",
"duration": "Duration",
"dynamic_positioning": "Dynamic Positioning",
"dynamically_positioned": "Dynamically Positioned",
"effect_level": "Effect Level",
"element_2_label": "Element 2 Label",
"element_label": "Element Label",
"enable_for": "Enable for",
"enabled": "Enabled",
"endemic_life": "Endemic Life",
"endemic_life_UI": "Endemic Life UI",
"endemic_life_buffs": "Endemic Life Buffs",
"everything_seems_to_be_ok": "Everything seems to be OK!",
"family": "Family",
"farthest": "Farthest",
"fight_time": "Fight Time",
"fill_direction": "Fill Direction",
"filter": "Filter",
"filter_mode": "Filter Mode",
"fire_resistance_label": "Fire Resistance Label",
"first": "First",
"first_hit": "First Hit",
"flinch_count": "Flinch Count",
@@ -128,6 +165,7 @@
"global_position_modifier": "Global Position Modifier",
"global_scale_modifier": "Global Scale Modifier",
"global_settings": "Global Settings",
"head_tracking": "Head Tracking",
"health": "Health",
"health_anomaly_filter": "Health + Anomaly Core",
"health_break_anomaly_filter": "Health + Break + Anomaly Core",
@@ -135,6 +173,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,17 +202,22 @@
"highlighted_buildup_bar": "Highlighted Buildup Bar",
"highlighted_damage_bar": "Highlighted Damage Bar",
"highlighted_targeted": "Highlighted (targeted)",
"history": "History",
"history_size": "History Size",
"horizontal": "Horizontal",
"hotkeys": "Hotkeys",
"hunter_rank": "Hunter Rank",
"hunter_rank_label": "Hunter Rank Label",
"ice_resistance_label": "Ice Resistance Label",
"id": "ID",
"in_lobby": "In Lobby",
"in_training_area": "In Training Area",
"include": "Include",
"infinite_buffs_location": "Infinite Buffs Location",
"inside": "Inside",
"installations": "Installations",
"italic": "Italic",
"item_buffs": "Item Buffs",
"join_time": "Join Time",
"killcam": "Killcam",
"kunai": "Kunai",
@@ -197,8 +241,10 @@
"max_monster_updates_per_tick": "Max Monster Updates per Tick",
"max_value": "Max Value",
"me": "Me",
"melody_effects": "Melody Effects",
"menu_font": "Menu Font",
"menu_font_change_disclaimer": "Changing Language and Menu Font Size several times will cause a crash!",
"misc_buffs": "Misc Buffs",
"mod_name": "MHR Overlay",
"mode": "Mode",
"modifiers": "Modifiers",
@@ -224,6 +270,7 @@
"other": "Other",
"other_player_otomos": "Other Player Buddies",
"other_players": "Other Players",
"otomo_moves": "Buddy Moves",
"otomos": "Buddies",
"outline": "Outline",
"outside": "Outside",
@@ -247,6 +294,7 @@
"quest_start_animation": "Quest Start Animation",
"quest_time": "Quest Time",
"rage": "Rage",
"rampage_skills": "Rampage Skills",
"reframework_outdated": "Installed REFramework version is outdated. Please, update. Otherwise, MHR Overlay won't work correctly.",
"relative_offset": "Relative Offset",
"rename": "Rename",
@@ -269,25 +317,30 @@
"show_other_player_otomos_separately": "Show Other Player Buddies separately",
"show_servant_otomos_separately": "Show Follower Buddies separately",
"size": "Size",
"skills": "Skills",
"small_monster_UI": "Small Monster UI",
"small_monsters": "Small Monsters",
"sorting": "Sorting",
"spacing": "Spacing",
"stamina": "Stamina",
"stamina_label": "Stamina Label",
"static_orientation": "Static Orientation",
"static_position": "Static Position",
"static_sorting": "Static Sorting",
"static_spacing": "Static Spacing",
"statically_positioned": "Statically Positioned",
"stats_UI": "Stats UI",
"status": "Status",
"style": "Style",
"summary_screen": "Summary Screen",
"text_label": "Text Label",
"thickness": "Thickness",
"thunder_resistance_label": "Thunder Resistance Label",
"time_UI": "Time UI",
"time_label": "Time Label",
"time_limit": "Time Limit (seconds)",
"timer": "Timer",
"timer_delays": "Timer Delays",
"timer_label": "Timer Label",
"top_buildup": "Top Buildup",
"top_damage": "Top Damage",
@@ -310,11 +363,22 @@
"tracked_damage_types": "Tracked Damage Types",
"tracked_monster_types": "Tracked Monster Types",
"type": "Type",
"update_buffs_delay": "Update Buffs (seconds)",
"update_is_online_delay": "Update Is Online (seconds)",
"update_myself_position_delay": "Update Myself Position (seconds)",
"update_player_info_delay": "Update Player Info (seconds)",
"update_players_delay": "Update Players (seconds)",
"update_quest_time_delay": "Update Quest Time (seconds)",
"update_singletons_delay": "Update Singletons (seconds)",
"update_window_size_delay": "Update Window Size (seconds)",
"use_d2d_if_available": "Use Direct2D if available",
"value": "Value",
"value_label": "Value Label",
"vertical": "Vertical",
"viewport_offset": "Viewport Offset",
"visible": "Visible",
"water_resistance_label": "Water Resistance Label",
"weapon_skills": "Weapon Skills",
"width": "Width",
"world_offset": "World Offset",
"wyvern_riding": "Wyvern Riding",
@@ -322,7 +386,89 @@
"y": "Y",
"z": "Z"
},
"font_name": "",
"dango_skills": {
"dango_adrenaline": "Dango Adrenaline",
"dango_booster": "Dango Booster",
"dango_bulker": "Dango Bulker",
"dango_connector": "Dango Connector",
"dango_defender": "Dango Defender",
"dango_flyer": "Dango Flyer",
"dango_glutton": "Dango Glutton",
"dango_hunter": "Dango Hunter",
"dango_insurance": "Dango Insurance",
"dango_insurance_defense_up": "Dango Insurance Defense Up",
"super_recovery_dango": "Super Recovery Dango"
},
"endemic_life": {
"butterflame": "Butterflame",
"clothfly": "Clothfly",
"cutterfly": "Cutterfly",
"gold_wirebug": "Gold Wirebug",
"peepersects": "Peepersects",
"red_lampsquid": "Red Lampsquid",
"ruby_wirebug": "Ruby Wirebug",
"stinkmink": "Stinkmink",
"yellow_lampsquid": "Yellow Lampsquid"
},
"font_name": "NotoSans-Bold.otf",
"item_buffs": {
"adamant_seed": "Adamant Seed",
"armor_ammo": "Armor Ammo",
"armorskin": "Armorskin",
"dash_juice": "Dash Juice",
"demon_ammo": "Demon Ammo",
"demon_powder": "Demon Powder",
"demondrug": "Demondrug",
"gourmet_fish": "Gourmet Fish",
"hardshell_powder": "Hardshell Powder",
"immunizer": "Immunizer",
"mega_armorskin": "Mega Armorskin",
"mega_demondrug": "Mega Demondrug",
"might_seed": "Might Seed"
},
"melody_effects": {
"affinity_up": "Affinity Up",
"attack_and_affinity_up": "Attack and Affinity Up",
"attack_and_defense_up": "Attack and Defense Up",
"attack_up": "Attack Up",
"blight_negated": "Blight Negated",
"defense_up": "Defense Up",
"divine_protection": "Divine Protection",
"earplugs_l": "Earplugs (L)",
"earplugs_s": "Earplugs (S)",
"elemental_attack_boost": "Elemental Attack Boost",
"environment_damage_negated": "Environment Damage Negated",
"health_recovery_l": "Health Recovery (L)",
"health_recovery_s": "Health Recovery (S)",
"health_recovery_s_antidote": "Health Recovery (S) + Antidote",
"health_regeneration": "Health Regeneration",
"infernal_melody": "Infernal Melody",
"knockbacks_negated": "Knockbacks Negated",
"self_improvement": "Self-Improvement",
"sharpness_extension": "Sharpness Extension",
"sharpness_loss_reduced": "Sharpness Loss Reduced",
"sharpness_regeneration": "Sharpness Regeneration",
"sonic_barrier": "Sonic Barrier",
"sonic_wave": "Sonic Wave",
"stamina_recovery_up": "Stamina Recovery Up",
"stamina_use_reduced": "Stamina Use Reduced",
"stun_negated": "Stun Negated",
"tremors_negated": "Tremors Negated",
"wind_pressure_negated": "Wind Pressure Negated"
},
"misc_buffs": {
"attack_up": "Attack Up",
"defense_up": "Defense Up",
"immunity": "Immunity",
"natural_healing_up": "Natural Healing Up",
"stamina_use_down": "Stamina Use Down"
},
"otomo_moves": {
"go_fight_win": "Go, Fight, Win",
"power_drum": "Power Drum",
"rousing_roar": "Rousing Roar",
"vase_of_vitality": "Vase of Vitality"
},
"parts": {
"abdomen": "Abdomen",
"amatsu_unknown": "?",
@@ -392,7 +538,163 @@
"wingclaws": "Wingclaws",
"wings": "Wings"
},
"rampage_skills": {
"chameleos_soul": "Chameleos Soul",
"kushala_daora_soul": "Kushala Daora Soul"
},
"skills": {
"adrenaline_rush": "Adrenaline Rush",
"affinity_sliding": "Affinity Sliding",
"agitator": "Agitator",
"berserk": "Berserk",
"bladescale_hone": "Bladescale Hone",
"blood_awakening": "Blood Awakening",
"bloodlust": "Bloodlust",
"burst": "Burst",
"coalescence": "Coalescence",
"counterstrike": "Counterstrike",
"dereliction": "Dereliction",
"dragon_conversion_elemental_attack_up": "Dragon Conversion: Elem. Atk Up",
"dragon_conversion_elemental_res_up": "Dragon Conversion: Elem. Res Up",
"dragonheart": "Dragonheart",
"embolden": "Embolden",
"frenzied_bloodlust": "Frenzied Bloodlust",
"furious": "Furious",
"grinder_s": "Grinder (S)",
"heaven_sent": "Heaven-Sent",
"hellfire_cloak": "Hellfire Cloak",
"heroics": "Heroics",
"inspiration": "Inspiration",
"intrepid_heart": "Intrepid Heart",
"latent_power": "Latent Power",
"maximum_might": "Maximum Might",
"offensive_guard": "Offensive Guard",
"partbreaker": "Partbreaker",
"peak_performance": "Peak Performance",
"powder_mantle_blue": "Powder Mantle (Blue)",
"powder_mantle_red": "Powder Mantle (Red)",
"protective_polish": "Protective Polish",
"resentment": "Resentment",
"resuscitate": "Resuscitate",
"spiribirds_call": "Spiribird's Call",
"status_trigger": "Status Trigger",
"strife": "Strife",
"wall_runner": "Wall Runner",
"wind_mantle": "Wind Mantle"
},
"stats": {
"affinity": "Affinity",
"attack": "Attack",
"defense": "Defense",
"dragon": "Dragon",
"dragon_resistance": "Dragon Res",
"fire": "Fire",
"fire_resistance": "Fire Res",
"ice": "Ice",
"ice_resistance": "Ice Res",
"stamina": "Stamina",
"thunder": "Thunder",
"thunder_resistance": "Thunder Res",
"water": "Water",
"water_resistance": "Water Res"
},
"unicode_glyph_ranges": [
32,
255,
256,
591,
1024,
1327,
7680,
7935,
8192,
8303,
65280,
65519,
0
]
],
"weapon_skills": {
"bow": {
"arc_shot_affinity": "Arc Shot: Affinity",
"arc_shot_brace": "Arc Shot: Brace",
"bolt_boost": "Bolt Boost",
"herculean_draw": "Herculean Draw"
},
"charge_blade": {
"element_boost": "Element Boost",
"sword_boost_mode": "Sword Boost Mode"
},
"dual_blades": {
"archdemon_mode": "Archdemon Mode",
"ironshine_silk": "Ironshine Silk"
},
"great_sword": {
"power_sheathe": "Power Sheathe"
},
"gunlance": {
"erupting_cannon": "Erupting Cannon",
"ground_splitter": "Ground Splitter"
},
"hammer": {
"impact_burst": "Impact Burst"
},
"heavy_bowgun": {
"counter_charger": "Counter Charger",
"overheat": "Overheat",
"rising_moon": "Rising Moon",
"setting_sun": "Setting Sun",
"wyvernsnipe_reload": "Wyvernsnipe Reload"
},
"hunting_horn": {
"bead_of_resonance": "Bead of Resonance",
"silkbind_shockwave": "Silkbind Shockwave",
"sonic_bloom": "Sonic Bloom"
},
"insect_glaive": {
"all_extracts_mix": "All Extracts Mix",
"orange_extract": "Orange Extract",
"red_extract": "Red Extract",
"white_extract": "White Extract"
},
"lance": {
"anchor_rage": "Anchor Rage",
"spiral_thrust": "Spiral Thrust",
"twin_wine": "Twin Wine"
},
"light_bowgun": {
"fanning_maneuver": "Fanning Maneuver",
"wyvernblast_reload": "Wyvernblast Reload"
},
"long_sword": {
"harvest_moon": "Harvest Moon",
"iai_slash": "Iai Slash",
"soaring_kick": "Soaring Kick",
"spirit_gauge": "Spirit Gauge",
"spirit_gauge_autofill": "Spirit Gauge Autofill"
},
"switch_axe": {
"amped_state": "Amped State",
"axe_heavy_slam": "Axe: Heavy Slam",
"switch_charger": "Switch Charger"
},
"sword_and_shield": {
"destroyer_oil": "Destroyer Oil"
}
},
"weapons": {
"bow": "Bow",
"charge_blade": "Charge Blade",
"dual_blades": "Dual Blades",
"great_sword": "Great Sword",
"gunlance": "Gunlance",
"hammer": "Hammer",
"heavy_bowgun": "Heavy Bowgun",
"hunting_horn": "Hunting Horn",
"insect_glaive": "Insect Glaive",
"lance": "Lance",
"light_bowgun": "Light Bowgun",
"long_sword": "Long Sword",
"switch_axe": "Switch Axe",
"sword_and_shield": "Sword & Shield"
}
}
@@ -0,0 +1,700 @@
{
"UI": {
"HP": "PS:",
"buildup": "Incremento:",
"gold": "Dorado",
"lv": "",
"mini": "Mini",
"otomo": "Camarada",
"part_anomaly_core": "Núcleo de anomalías",
"part_break": "Ruptura",
"part_sever": "Corte",
"player": "Jugador",
"rage": "Rabia:",
"servant": "Seguidor",
"silver": "Plateado",
"stamina": "Resistencia:",
"total_buildup": "Incremento total",
"total_damage": "Daño total"
},
"ailments": {
"blast": "Explosión",
"blastblight": "Rocío explosivo",
"bleeding": "Sangrado",
"bloodblight": "Plaga sangrienta",
"deadly_poison": "Veneno mortal",
"defense_down": "Defensa baja",
"dragonblight": "Calamidad de dragón",
"dung_bomb": "Bomba de estiércol",
"engulfed": "Engullido",
"exhaust": "Desgaste",
"fall_otomo_trap": "Trampa de caída de camarada",
"fall_trap": "Trampa de caída",
"falling_asleep": "Quedarse dormido",
"fireblight": "Fuego bárbaro",
"flash": "Destello",
"frenzy": "Frenesí",
"frenzy_infection": "Infección frenética",
"frenzy_overcome": "Frenesí superado",
"frostblight": "Helada",
"hellfireblight": "Fuego infernal",
"iceblight": "Helada glacial",
"leeched": "Drenado",
"major_bubbleblight": "Gran plaga de burbujas",
"minor_bubbleblight": "Menor plaga de burbujas",
"muck": "Lodo",
"paralysis": "Parálisis",
"poison": "Veneno",
"quick_sand": "Arenas movedizas",
"resistance_down": "Resistencia baja",
"ride": "Montar Wyvern",
"roar": "Rugido",
"shock_otomo_trap": "Trampa de descarga de camarada",
"shock_trap": "Trampa de descarga",
"sleep": "Sueño",
"steel_fang": "Colmillo de acero",
"stench": "Hedor",
"stun": "Aturdimiento",
"thunderblight": "Trueno relámpago",
"tranq_bomb": "Bomba tranquilizante",
"tremor": "Temblor",
"waterblight": "Podredumbre por agua",
"webbed": "Atrapado en telaraña"
},
"customization_menu": {
"UI_font": "UI Font",
"UI_font_notice": "Any changes to the font require script reload!",
"abnormal_statuses": "Abnormal Statuses",
"activation_count": "Activation Count",
"affinity_label": "Affinity Label",
"ailment_buildups": "Ailment Buildups",
"ailment_name": "Ailment Name",
"ailment_name_label": "Ailment Name Label",
"ailment_spacing": "Ailment Spacing",
"ailments": "Ailments",
"all_UI": "All UI",
"anchor": "Anchor",
"anomaly_cores": "Anomaly Cores",
"anomaly_filter": "Anomaly Core",
"anomaly_health": "Anomaly Core Health",
"anomaly_health_percentage": "Anomaly Core Health Percentage",
"apply": "Apply",
"assign_new_key": "Assign new key",
"attack_label": "Attack Label",
"auto_highlight": "Auto-highlight",
"background": "Background",
"bar": "Bar",
"blast": "Blast",
"body_parts": "Body Parts",
"bold": "Bold",
"bombs": "Bombs",
"bottom_left": "Bottom-Left",
"bottom_right": "Bottom-Right",
"bottom_to_top": "Bottom to Top",
"break_anomaly_filter": "Break + Anomaly Core",
"break_count": "Break Count",
"break_filter": "Break",
"break_health": "Break Health",
"break_health_percentage": "Break Health Percentage",
"break_max_count": "Break Max Count",
"break_sever_anomaly_filter": "Break + Sever + Anomaly Core",
"break_sever_filter": "Break + Sever",
"buff_UI": "Buff UI",
"buildup": "Buildup",
"buildup_bar": "Buildup Bar",
"buildup_bars_are_relative_to": "Buildup Bars are relative to",
"buildup_percentage": "Buildup Percentage",
"buildup_percentage_label": "Buildup Percentage Label",
"buildup_value_label": "Buildup Value Label",
"capture_line": "Capture Line",
"cart_count": "Cart Count",
"cart_count_label": "Cart Count Label",
"center": "Center",
"closest": "Closest",
"color": "Color",
"colors": "Colors",
"config": "Config",
"creature_name_label": "Creature Name Label",
"crown": "Crown",
"crown_thresholds": "Crown Thresholds",
"current_state": "Current State",
"current_time": "Current Time",
"current_value": "Current Value",
"cutscene": "Cutscene",
"damage": "Damage",
"damage_bar": "Damage Bar",
"damage_bars_are_relative_to": "Damage Bars are relative to",
"damage_meter_UI": "Damage Meter UI",
"damage_percentage_label": "Damage Percentage Label",
"damage_value_label": "Damage Value Label",
"dango_skills": "Dango Skills",
"debug": "Debug",
"default_state": "Default State",
"defense_label": "Defense Label",
"delete": "Delete",
"distance": "Distance",
"dps": "DPS",
"dps_label": "DPS Label",
"dps_mode": "DPS Mode",
"dragon_resistance_label": "Dragon Resistance Label",
"duplicate": "Duplicate",
"duration": "Duration",
"dynamic_positioning": "Dynamic Positioning",
"dynamically_positioned": "Dynamically Positioned",
"effect_level": "Effect Level",
"element_2_label": "Element 2 Label",
"element_label": "Element Label",
"enable_for": "Enable for",
"enabled": "Enabled",
"endemic_life": "Endemic Life",
"endemic_life_UI": "Endemic Life UI",
"endemic_life_buffs": "Endemic Life Buffs",
"everything_seems_to_be_ok": "Everything seems to be OK!",
"family": "Family",
"farthest": "Farthest",
"fight_time": "Fight Time",
"fill_direction": "Fill Direction",
"filter": "Filter",
"filter_mode": "Filter Mode",
"fire_resistance_label": "Fire Resistance Label",
"first": "First",
"first_hit": "First Hit",
"flinch_count": "Flinch Count",
"foreground": "Foreground",
"freeze_dps_on_quest_end": "Freeze DPS on Quest End",
"global_position_modifier": "Global Position Modifier",
"global_scale_modifier": "Global Scale Modifier",
"global_settings": "Global Settings",
"head_tracking": "Head Tracking",
"health": "Health",
"health_anomaly_filter": "Health + Anomaly Core",
"health_break_anomaly_filter": "Health + Break + Anomaly Core",
"health_break_filter": "Health + Break",
"health_break_sever_anomaly_filter": "Health + Break + Sever + Anomaly Core",
"health_break_sever_filter": "Health + Break + Sever",
"health_filter": "Health",
"health_label": "Health Label",
"health_percentage": "Health Percentage",
"health_sever_anomaly_filter": "Health + Sever + Anomaly Core",
"health_sever_filter": "Health + Sever",
"height": "Height",
"hide_ailments_with_zero_buildup": "Hide Ailments when Buildup is 0",
"hide_all_active_ailments": "Hide All Active Ailments",
"hide_all_inactive_ailments": "Hide All Inactive Ailments",
"hide_bar_for_infinite_buffs": "Hide Bar for infinite Buffs",
"hide_dead_or_captured": "Hide Dead or Captured",
"hide_disabled_ailments": "Hide Disabled Ailments by Game",
"hide_inactive_ailments_with_no_buildup_support": "Hide Inactive Ailments with no Buildup Support",
"hide_inactive_creatures": "Hide Inactive Creatures",
"hide_module_if_total_damage_is_zero": "Hide Module if Total Damage is 0",
"hide_myself": "Hide Myself",
"hide_other_players": "Hide Other Players",
"hide_player_if_player_damage_is_zero": "Hide Player if Player Damage is 0",
"hide_servants": "Hide Followers",
"hide_timer_for_infinite_buffs": "Hide Timer for infinite Buffs",
"hide_total_damage": "Hide Total Damage",
"hide_total_if_total_damage_is_zero": "Hide Total if Total Damage is 0",
"hide_undamaged_parts": "Hide Undamaged Parts",
"highest_health": "Highest Health",
"highest_health_percentage": "Highest Health Percentage",
"highlighted": "Highlighted",
"highlighted_bar": "Highlighted Bar",
"highlighted_buildup_bar": "Highlighted Buildup Bar",
"highlighted_damage_bar": "Highlighted Damage Bar",
"highlighted_targeted": "Highlighted (targeted)",
"history": "History",
"history_size": "History Size",
"horizontal": "Horizontal",
"hotkeys": "Hotkeys",
"hunter_rank": "Hunter Rank",
"hunter_rank_label": "Hunter Rank Label",
"ice_resistance_label": "Ice Resistance Label",
"id": "ID",
"in_lobby": "In Lobby",
"in_training_area": "In Training Area",
"include": "Include",
"infinite_buffs_location": "Infinite Buffs Location",
"inside": "Inside",
"installations": "Installations",
"italic": "Italic",
"item_buffs": "Item Buffs",
"join_time": "Join Time",
"killcam": "Killcam",
"kunai": "Kunai",
"language": "Language",
"large_monster_UI": "Large Monster UI",
"large_monster_dynamic_UI": "Large Monster Dynamic UI",
"large_monster_highlighted_UI": "Large Monster Highlighted UI",
"large_monster_static_UI": "Large Monster Static UI",
"large_monsters": "Large Monsters",
"last": "Last",
"left_to_right": "Left to Right",
"level": "Level",
"level_label": "Level Label",
"loading_quest": "Loading Quest",
"loss_health": "Sever Health",
"loss_health_percentage": "Sever Health Percentage",
"lowest_health": "Lowest Health",
"lowest_health_percentage": "Lowest Health Percentage",
"master_rank": "Master Rank",
"max_distance": "Max Distance",
"max_monster_updates_per_tick": "Max Monster Updates per Tick",
"max_value": "Max Value",
"me": "Me",
"melody_effects": "Melody Effects",
"menu_font": "Menu Font",
"menu_font_change_disclaimer": "Changing Language and Menu Font Size several times will cause a crash!",
"misc_buffs": "Misc Buffs",
"mod_name": "MHR Overlay",
"mode": "Mode",
"modifiers": "Modifiers",
"module_visibility_based_on_game_state": "Module Visibility based on Game State",
"modules": "Modules",
"monster_can_be_captured": "Monster can be captured",
"monster_id": "Monster ID",
"monster_name": "Monster Name",
"monster_name_label": "Monster Name Label",
"monsters": "Monsters",
"my_damage_bar_location": "My Damage Bar Location",
"my_otomos": "My Buddies",
"myself": "Myself",
"name": "Name",
"name_label": "Name Label",
"new": "New",
"none": "None",
"normal": "Normal",
"offset": "Offset",
"offset_is_relative_to_parts": "Offset is Relative to Parts",
"opacity_falloff": "Opacity Falloff",
"orientation": "Orientation",
"other": "Other",
"other_player_otomos": "Other Player Buddies",
"other_players": "Other Players",
"otomo_moves": "Buddy Moves",
"otomos": "Buddies",
"outline": "Outline",
"outside": "Outside",
"part_health": "Part Health",
"part_name": "Part Name",
"part_name_label": "Part Name Label",
"percentage_label": "Percentage Label",
"performance": "Performance",
"player_name_label": "Player Name Label",
"player_name_size_limit": "Player Name Size Limit",
"player_spacing": "Player Spacing",
"players": "Players",
"playing_quest": "Playing Quest",
"poison": "Poison",
"position": "Position",
"press_any_key": "Press any key...",
"prioritize_large_monsters": "Large Monsters on High Priority",
"quest_end_animation": "Quest End Animation",
"quest_end_screen": "Quest End Screen",
"quest_end_timer": "Quest End Timer",
"quest_start_animation": "Quest Start Animation",
"quest_time": "Quest Time",
"rage": "Rage",
"rampage_skills": "Rampage Skills",
"reframework_outdated": "Installed REFramework version is outdated. Please, update. Otherwise, MHR Overlay won't work correctly.",
"relative_offset": "Relative Offset",
"rename": "Rename",
"render_highlighted_monster": "Render Highlighted Monster",
"render_inactive_anomaly_cores": "Render Inactive Anomaly Cores",
"render_not_highlighted_monsters": "Render Not Highlighted Monsters",
"renderer": "Renderer",
"reset": "Reset",
"reversed_order": "Reversed Order",
"reward_screen": "Reward Screen",
"right_alignment_shift": "Right Alignment Shift",
"right_to_left": "Right to Left",
"servant_otomos": "Servant Buddies",
"servants": "Followers",
"settings": "Settings",
"sever_anomaly_filter": "Sever + Anomaly Core",
"sever_filter": "Sever",
"shadow": "Shadow",
"show_my_otomos_separately": "Show My Buddies separately",
"show_other_player_otomos_separately": "Show Other Player Buddies separately",
"show_servant_otomos_separately": "Show Follower Buddies separately",
"size": "Size",
"skills": "Skills",
"small_monster_UI": "Small Monster UI",
"small_monsters": "Small Monsters",
"sorting": "Sorting",
"spacing": "Spacing",
"stamina": "Stamina",
"stamina_label": "Stamina Label",
"static_orientation": "Static Orientation",
"static_position": "Static Position",
"static_sorting": "Static Sorting",
"static_spacing": "Static Spacing",
"statically_positioned": "Statically Positioned",
"stats_UI": "Stats UI",
"status": "Status",
"style": "Style",
"summary_screen": "Summary Screen",
"text_label": "Text Label",
"thickness": "Thickness",
"thunder_resistance_label": "Thunder Resistance Label",
"time_UI": "Time UI",
"time_label": "Time Label",
"time_limit": "Time Limit (seconds)",
"timer": "Timer",
"timer_delays": "Timer Delays",
"timer_label": "Timer Label",
"top_buildup": "Top Buildup",
"top_damage": "Top Damage",
"top_dps": "Top DPS",
"top_left": "Top-Left",
"top_right": "Top-Right",
"top_to_bottom": "Top to Bottom",
"total": "Total",
"total_buildup": "Total Buildup",
"total_buildup_label": "Total Buildup Label",
"total_buildup_value_label": "Total Buildup Value Label",
"total_cart_count_label": "Total Cart Count Label",
"total_damage": "Total Damage",
"total_damage_label": "Total Damage Label",
"total_damage_location": "Total Damage Bar Location",
"total_damage_offset_is_relative": "Total Damage Offset is Relative",
"total_damage_value_label": "Total Damage Value Label",
"total_dps": "Total DPS",
"total_dps_label": "Total DPS Label",
"tracked_damage_types": "Tracked Damage Types",
"tracked_monster_types": "Tracked Monster Types",
"type": "Type",
"update_buffs_delay": "Update Buffs (seconds)",
"update_is_online_delay": "Update Is Online (seconds)",
"update_myself_position_delay": "Update Myself Position (seconds)",
"update_player_info_delay": "Update Player Info (seconds)",
"update_players_delay": "Update Players (seconds)",
"update_quest_time_delay": "Update Quest Time (seconds)",
"update_singletons_delay": "Update Singletons (seconds)",
"update_window_size_delay": "Update Window Size (seconds)",
"use_d2d_if_available": "Use Direct2D if available",
"value": "Value",
"value_label": "Value Label",
"vertical": "Vertical",
"viewport_offset": "Viewport Offset",
"visible": "Visible",
"water_resistance_label": "Water Resistance Label",
"weapon_skills": "Weapon Skills",
"width": "Width",
"world_offset": "World Offset",
"wyvern_riding": "Wyvern Riding",
"x": "X",
"y": "Y",
"z": "Z"
},
"dango_skills": {
"dango_adrenaline": "Dango adrenalina",
"dango_booster": "Dango potenciador",
"dango_bulker": "Dango reforzador",
"dango_connector": "Dango conector",
"dango_defender": "Dango defensor",
"dango_flyer": "Dango volador",
"dango_glutton": "Dango glotón",
"dango_hunter": "Dango cazador",
"dango_insurance": "Dango seguro",
"dango_insurance_defense_up": "Dango aumento de defensa",
"super_recovery_dango": "Dango de súper recuperación"
},
"endemic_life": {
"butterflame": "Butterflame",
"clothfly": "Clothfly",
"cutterfly": "Cutterfly",
"gold_wirebug": "Cordóptero dorado",
"peepersects": "Peepersects",
"red_lampsquid": "Lamprea roja",
"ruby_wirebug": "Cordóptero rubí",
"stinkmink": "Mink apestoso",
"yellow_lampsquid": "Lamprea amarilla"
},
"font_name": "NotoSans-Bold.otf",
"item_buffs": {
"adamant_seed": "Semilla adamantina",
"armor_ammo": "Munición de armadura",
"armorskin": "Piel de armadura",
"dash_juice": "Jugo de energía",
"demon_ammo": "Munición demoníaca",
"demon_powder": "Polvo demoníaco",
"demondrug": "Droga demoníaca",
"gourmet_fish": "Pez gourmet",
"hardshell_powder": "Carcasa rígida en polvo",
"immunizer": "Inmunizador",
"mega_armorskin": "Mega piel de armadura",
"mega_demondrug": "Mega droga demoníaca",
"might_seed": "Semilla de poder"
},
"melody_effects": {
"affinity_up": "Aumento de afinidad",
"attack_and_affinity_up": "Aumento de ataque y afinidad",
"attack_and_defense_up": "Aumento de ataque y defensa",
"attack_up": "Aumento de ataque",
"blight_negated": "Plaga neutralizada",
"defense_up": "Aumento de defensa",
"divine_protection": "Protección divina",
"earplugs_l": "Orejeras (L)",
"earplugs_s": "Orejeras (S)",
"elemental_attack_boost": "Aumento de ataque elemental",
"environment_damage_negated": "Daño ambiental neutralizado",
"health_recovery_l": "Recuperación de salud (L)",
"health_recovery_s": "Recuperación de salud (S)",
"health_recovery_s_antidote": "Recuperación de salud (S) + Antídoto",
"health_regeneration": "Regeneración de salud",
"infernal_melody": "Melodía infernal",
"knockbacks_negated": "Retroceso anulado",
"self_improvement": "Auto-mejora",
"sharpness_extension": "Extensión de afilado",
"sharpness_loss_reduced": "Reducción de pérdida de afilado",
"sharpness_regeneration": "Regeneración de afilado",
"sonic_barrier": "Barrera sónica",
"sonic_wave": "Onda sónica",
"stamina_recovery_up": "Recuperación de resistencia aumentada",
"stamina_use_reduced": "Reducción de uso de resistencia",
"stun_negated": "Aturdimiento anulado",
"tremors_negated": "Temblores anulados",
"wind_pressure_negated": "Presión del viento anulada"
},
"misc_buffs": {
"attack_up": "Aumento de ataque",
"defense_up": "Aumento de defensa",
"immunity": "Inmunidad",
"natural_healing_up": "Aumento de curación natural",
"stamina_use_down": "Reducción de uso de resistencia"
},
"otomo_moves": {
"go_fight_win": "Ve, lucha, gana",
"power_drum": "Tambor de potencia",
"rousing_roar": "Rugido entusiasta",
"vase_of_vitality": "Jarrón de vitalidad"
},
"parts": {
"abdomen": "Abdomen",
"amatsu_unknown": "?",
"antenna": "Antena",
"arms": "Brazos",
"arms_mud": "Brazos (Lodo)",
"back": "Espalda",
"back_windsac": "Espalda (Saco de viento)",
"body": "Cuerpo",
"body_mud": "Cuerpo (Lodo)",
"carapace": "Caparazón",
"chest": "Pecho",
"chest_windsac": "Pecho (Saco de viento)",
"claw": "Garra",
"crest": "Blasón",
"dorsal_fin": "Aleta dorsal",
"foreleg": "Pata delantera",
"forelegs": "Patas delanteras",
"head": "Cabeza",
"head_mud": "Cabeza (Lodo)",
"hind_leg": "Pata trasera",
"hind_legs": "Patas traseras",
"large_mudbulb": "Bulbo grande de barro",
"left_arm": "Brazo izquierdo",
"left_arm_ice": "Brazo izquierdo (Hielo)",
"left_claw": "Garra izquierda",
"left_cutwing": "Ala cortada izquierda",
"left_foreleg": "Pata delantera izquierda",
"left_hind_leg": "Pata trasera izquierda",
"left_leg": "Pierna izquierda",
"left_leg_mud": "Pierna izquierda (Lodo)",
"left_legs": "Piernas izquierdas",
"left_wing": "Ala izquierda",
"left_wingclaw": "Garra alada izquierda",
"legs": "Piernas",
"lower_back": "Parte baja de la espalda",
"lower_body": "Parte inferior del cuerpo",
"mane": "Melena",
"mudbulb": "Bulbo de barro",
"neck": "Cuello",
"rear": "Parte trasera",
"right_arm": "Brazo derecho",
"right_arm_ice": "Brazo derecho (Hielo)",
"right_claw": "Garra derecha",
"right_cutwing": "Ala cortada derecha",
"right_foreleg": "Pata delantera derecha",
"right_hind_leg": "Pata trasera derecha",
"right_leg": "Pierna derecha",
"right_leg_mud": "Pierna derecha (Lodo)",
"right_legs": "Piernas derechas",
"right_wing": "Ala derecha",
"right_wingclaw": "Garra alada derecha",
"rock": "Roca",
"shell": "Caparazón",
"spinning": "Barrido",
"tail": "Cola",
"tail_mud": "Cola (Lodo)",
"tail_tip": "Punta de la cola",
"tail_windsac": "Cola (Saco de viento)",
"thundersacs": "Saco de truenos",
"torso": "Torso",
"torso_mud": "Torso (Lodo)",
"unknown": "?",
"upper_back": "Parte superior de la espalda",
"upper_body": "Parte superior del cuerpo",
"wingclaw": "Garra alada",
"wingclaws": "Garras aladas",
"wings": "Alas"
},
"rampage_skills": {
"chameleos_soul": "Alma camaleónica",
"kushala_daora_soul": "Alma de Kushala Daora"
},
"skills": {
"adrenaline_rush": "Subidón de adrenalina",
"affinity_sliding": "Afinidad deslizante",
"agitator": "Agitador",
"berserk": "Desenfrenado",
"bladescale_hone": "Afilador de escamas",
"blood_awakening": "Despertar de sangre",
"bloodlust": "Sed de sangre",
"burst": "Ráfaga",
"coalescence": "Confluencia",
"counterstrike": "Contraataque",
"dereliction": "Desamparo",
"dragon_conversion_elemental_attack_up": "Conversión dracónica: Ataque elemental +",
"dragon_conversion_elemental_res_up": "Conversión dracónica: Res. elemental +",
"dragonheart": "Corazón de dragón",
"embolden": "Envalentonar",
"frenzied_bloodlust": "Sed de sangre frenética",
"furious": "Furia",
"grinder_s": "Afilador (S)",
"heaven_sent": "Enviado celestial",
"hellfire_cloak": "Manto de fuego infernal",
"heroics": " Heroísmo",
"inspiration": "Inspiración",
"intrepid_heart": "Corazón intrépido",
"latent_power": "Poder latente",
"maximum_might": "Poder máximo",
"offensive_guard": "Guardia ofensiva",
"partbreaker": "Rompepiezas",
"peak_performance": "Rendimiento máximo",
"powder_mantle_blue": "Manto de pólvora (azul)",
"powder_mantle_red": "Manto de pólvora (rojo)",
"protective_polish": "Pulido protector",
"resentment": "Resentimiento",
"resuscitate": "Reanimar",
"spiribirds_call": "Canto de pájaro espiritual",
"status_trigger": "Disparador de estado",
"strife": "Conflicto",
"wall_runner": "Corredor de muros",
"wind_mantle": "Manto de viento"
},
"stats": {
"affinity": "Afinidad",
"attack": "Ataque",
"defense": "Defensa",
"dragon": "Dragón",
"dragon_resistance": "Resist. de dragón",
"fire": "Fuego",
"fire_resistance": "Resist. de fuego",
"ice": "Hielo",
"ice_resistance": "Resist. de hielo",
"stamina": "Resistencia",
"thunder": "Trueno",
"thunder_resistance": "Resist. de trueno",
"water": "Agua",
"water_resistance": "Resist. de agua"
},
"unicode_glyph_ranges": [
32,
255,
256,
591,
1024,
1327,
7680,
7935,
8192,
8303,
65280,
65519,
0
],
"weapon_skills": {
"bow": {
"arc_shot_affinity": "Tiro con arco: Afinidad",
"arc_shot_brace": "Tiro con arco: Apoyo",
"bolt_boost": "Impulso de perno",
"herculean_draw": "Reparto hercúleo"
},
"charge_blade": {
"element_boost": "Potenciador de elementos",
"sword_boost_mode": "Modo potenciador de espada"
},
"dual_blades": {
"archdemon_mode": "Modo archidemonio",
"ironshine_silk": "Seda iridiscente"
},
"great_sword": {
"power_sheathe": "Funda protectora"
},
"gunlance": {
"erupting_cannon": "Cañón en erupción",
"ground_splitter": "Divisor de suelo"
},
"hammer": {
"impact_burst": "Explosión de impacto"
},
"heavy_bowgun": {
"counter_charger": "Contraataque",
"overheat": "Sobrecalentamiento",
"rising_moon": "Luna creciente",
"setting_sun": "Puesta de sol",
"wyvernsnipe_reload": "Recarga de Wyvernsnipe"
},
"hunting_horn": {
"bead_of_resonance": "Cuenta de resonancia",
"silkbind_shockwave": "Onda de choque Silkbind",
"sonic_bloom": "Florecimiento sónico"
},
"insect_glaive": {
"all_extracts_mix": "Mezcla de todos los extractos",
"orange_extract": "Extracto naranja",
"red_extract": "Extracto rojo",
"white_extract": "Extracto blanco"
},
"lance": {
"anchor_rage": "Rabia del ancla",
"spiral_thrust": "Empuje en espiral",
"twin_wine": "Vino doble"
},
"light_bowgun": {
"fanning_maneuver": "Maniobra de Fanning",
"wyvernblast_reload": "Recarga de Wyvernblast"
},
"long_sword": {
"harvest_moon": "Luna de cosecha",
"iai_slash": "Tajo Iai",
"soaring_kick": "Patada voladora",
"spirit_gauge": "Nivel de burbuja",
"spirit_gauge_autofill": "Medidor de espíritu autocompletado"
},
"switch_axe": {
"amped_state": "Estado amplificado",
"axe_heavy_slam": "Hacha: Golpe pesado",
"switch_charger": "Cargador conmutable"
},
"sword_and_shield": {
"destroyer_oil": "Aceite destructor"
}
},
"weapons": {
"bow": "Arco",
"charge_blade": "Hacha cargada",
"dual_blades": "Espadas dobles",
"great_sword": "Gran espada",
"gunlance": "Lanza pistola",
"hammer": "Martillo",
"heavy_bowgun": "Ballesta Pesada",
"hunting_horn": "Cornamusa",
"insect_glaive": "Glaive insecto",
"lance": "Lanza",
"light_bowgun": "Ballesta ligera",
"long_sword": "Espada larga",
"switch_axe": "Hacha espada",
"sword_and_shield": "Espada y escudo"
}
}
@@ -3,6 +3,7 @@
"HP": "HP:",
"buildup": "蓄積値:",
"gold": "金冠",
"lv": "",
"mini": "小型",
"otomo": "Buddy",
"part_anomaly_core": "Anomaly Core",
@@ -18,30 +19,54 @@
},
"ailments": {
"blast": "爆破",
"blastblight": "Blastblight",
"bleeding": "Bleeding",
"bloodblight": "Bloodblight",
"deadly_poison": "Deadly Poison",
"defense_down": "Defense Down",
"dragonblight": "Dragonblight",
"dung_bomb": "悪臭",
"engulfed": "Engulfed",
"exhaust": "疲労",
"fall_otomo_trap": "オトモ落とし穴",
"fall_trap": "落とし穴",
"falling_asleep": "Falling Asleep",
"fireblight": "火属性やられ",
"flash": "目くらまし",
"frenzy": "Frenzy",
"frenzy_infection": "Frenzy Infection",
"frenzy_overcome": "Frenzy Overcome",
"frostblight": "Frostblight",
"hellfireblight": "Hellfireblight",
"iceblight": "氷属性やられ",
"leeched": "Leeched",
"major_bubbleblight": "Major Bubbleblight",
"minor_bubbleblight": "Minor Bubbleblight",
"muck": "Muck",
"paralysis": "麻痺",
"poison": "毒",
"quick_sand": "流砂",
"resistance_down": "Resistance Down",
"ride": "操竜",
"roar": "Roar",
"shock_otomo_trap": "オトモしびれ罠",
"shock_trap": "しびれ罠",
"sleep": "睡眠",
"steel_fang": "ガルク噛み付き",
"stench": "Stench",
"stun": "スタン",
"thunderblight": "雷属性やられ",
"tranq_bomb": "捕獲用麻酔玉",
"waterblight": "水属性やられ"
"tremor": "Tremor",
"waterblight": "水属性やられ",
"webbed": "Webbed"
},
"customization_menu": {
"UI_font": "UI フォント",
"UI_font_notice": "フォントの変更後はスクリプトリセットを行ってください。",
"abnormal_statuses": "Abnormal Statuses",
"activation_count": "適用までのカウント",
"affinity_label": "Affinity Label",
"ailment_buildups": "状態異常の蓄積値",
"ailment_name": "状態異常表示",
"ailment_name_label": "状態異常表示ラベル",
@@ -55,6 +80,7 @@
"anomaly_health_percentage": "Anomaly Core Health Percentage",
"apply": "適用",
"assign_new_key": "新規に割り当てるキーを入力",
"attack_label": "Attack Label",
"auto_highlight": "Auto-highlight",
"background": "背景色",
"bar": "バー",
@@ -92,6 +118,7 @@
"crown": "王冠",
"crown_thresholds": "王冠の閾値",
"current_state": "Current State",
"current_time": "Current Time",
"current_value": "Current Value",
"cutscene": "Cutscene",
"damage": "ダメージ",
@@ -100,26 +127,36 @@
"damage_meter_UI": "ダメージメーターUI",
"damage_percentage_label": "ダメージ割合()ラベル",
"damage_value_label": "ダメージラベル",
"dango_skills": "Dango Skills",
"debug": "Debug",
"default_state": "Default State",
"defense_label": "Defense Label",
"delete": "Delete",
"distance": "距離",
"dps": "DPS",
"dps_label": "DPSラベル",
"dps_mode": "DPS モード",
"dragon_resistance_label": "Dragon Resistance Label",
"duplicate": "Duplicate",
"duration": "Duration",
"dynamic_positioning": "動的な場所",
"dynamically_positioned": "モンスターに追随して表示",
"effect_level": "Effect Level",
"element_2_label": "Element 2 Label",
"element_label": "Element Label",
"enable_for": "有効にする",
"enabled": "有効",
"endemic_life": "Endemic Life",
"endemic_life_UI": "環境生物UI",
"endemic_life_buffs": "Endemic Life Buffs",
"everything_seems_to_be_ok": "Everything seems to be OK!",
"family": "Family",
"farthest": "Farthest",
"fight_time": "戦闘時間",
"fill_direction": "Fill Direction",
"filter": "フィルター",
"filter_mode": "Filter Mode",
"fire_resistance_label": "Fire Resistance Label",
"first": "最初",
"first_hit": "初撃",
"flinch_count": "ひるみ回数",
@@ -128,6 +165,7 @@
"global_position_modifier": "全体的な位置の調整",
"global_scale_modifier": "全体的なスケールの調整",
"global_settings": "全体設定",
"head_tracking": "Head Tracking",
"health": "体力",
"health_anomaly_filter": "Health + Anomaly Core",
"health_break_anomaly_filter": "Health + Break + Anomaly Core",
@@ -135,6 +173,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,17 +202,22 @@
"highlighted_buildup_bar": "ハイライトされた蓄積値バー",
"highlighted_damage_bar": "ハイライトされたダメージバー",
"highlighted_targeted": "詳細表示 (ターゲット)",
"history": "History",
"history_size": "History Size",
"horizontal": "水平",
"hotkeys": "ホットキー",
"hunter_rank": "ハンターランク",
"hunter_rank_label": "ハンターランクのラベル",
"ice_resistance_label": "Ice Resistance Label",
"id": "ID",
"in_lobby": "In Lobby",
"in_training_area": "In Training Area",
"include": "含める情報",
"infinite_buffs_location": "Infinite Buffs Location",
"inside": "Inside",
"installations": "Installations",
"italic": "イタリック",
"item_buffs": "Item Buffs",
"join_time": "参加時間",
"killcam": "Killcam",
"kunai": "Kunai",
@@ -197,8 +241,10 @@
"max_monster_updates_per_tick": "モンスター情報をアップデートする間隔",
"max_value": "Max Value",
"me": "自分",
"melody_effects": "Melody Effects",
"menu_font": "メニューで使うフォント",
"menu_font_change_disclaimer": "言語とメニューのフォントサイズを何度も変更すると、クラッシュが発生します。",
"misc_buffs": "Misc Buffs",
"mod_name": "MHR Overlay",
"mode": "Mode",
"modifiers": "全体的な調整",
@@ -224,6 +270,7 @@
"other": "Other",
"other_player_otomos": "Other Player Buddies",
"other_players": "他のプレイヤー",
"otomo_moves": "Buddy Moves",
"otomos": "Buddies",
"outline": "Outline",
"outside": "Outside",
@@ -247,6 +294,7 @@
"quest_start_animation": "Quest Start Animation",
"quest_time": "クエスト時間",
"rage": "怒り値",
"rampage_skills": "Rampage Skills",
"reframework_outdated": "Installed REFramework version is outdated. Please, update. Otherwise, MHR Overlay won't work correctly.",
"relative_offset": "相対的な表示位置",
"rename": "Rename",
@@ -269,25 +317,30 @@
"show_other_player_otomos_separately": "Show Other Player Buddies separately",
"show_servant_otomos_separately": "Show Follower Buddies separately",
"size": "サイズ",
"skills": "Skills",
"small_monster_UI": "小型モンスターUI",
"small_monsters": "小型モンスター",
"sorting": "ソート",
"spacing": "間隔",
"stamina": "スタミナ",
"stamina_label": "Stamina Label",
"static_orientation": "モンスター情報の配置を修正",
"static_position": "モンスター情報の場所を修正",
"static_sorting": "モンスター情報の並べ替えを修正",
"static_spacing": "モンスター情報間の距離を修正",
"statically_positioned": "モンスター情報の一覧表示",
"stats_UI": "Stats UI",
"status": "ステータス",
"style": "Style",
"summary_screen": "Summary Screen",
"text_label": "テキストラベル",
"thickness": "Thickness",
"thunder_resistance_label": "Thunder Resistance Label",
"time_UI": "タイムUI",
"time_label": "タイムラベル",
"time_limit": "タイムリミット(s.)",
"timer": "Timer",
"timer_delays": "Timer Delays",
"timer_label": "タイマーラベル",
"top_buildup": "最高蓄積値",
"top_damage": "最高ダメージ",
@@ -310,11 +363,22 @@
"tracked_damage_types": "ダメージタイプでの追跡",
"tracked_monster_types": "モンスタータイプでの追跡",
"type": "タイプ",
"update_buffs_delay": "Update Buffs (seconds)",
"update_is_online_delay": "Update Is Online (seconds)",
"update_myself_position_delay": "Update Myself Position (seconds)",
"update_player_info_delay": "Update Player Info (seconds)",
"update_players_delay": "Update Players (seconds)",
"update_quest_time_delay": "Update Quest Time (seconds)",
"update_singletons_delay": "Update Singletons (seconds)",
"update_window_size_delay": "Update Window Size (seconds)",
"use_d2d_if_available": "Use Direct2D if available",
"value": "Value",
"value_label": "バリューラベル",
"vertical": "縦",
"viewport_offset": "表示領域からの位置",
"visible": "表示する",
"water_resistance_label": "Water Resistance Label",
"weapon_skills": "Weapon Skills",
"width": "幅",
"world_offset": "表示位置",
"wyvern_riding": "Wyvern Riding",
@@ -322,7 +386,89 @@
"y": "Y",
"z": "Z"
},
"dango_skills": {
"dango_adrenaline": "Dango Adrenaline",
"dango_booster": "Dango Booster",
"dango_bulker": "Dango Bulker",
"dango_connector": "Dango Connector",
"dango_defender": "Dango Defender",
"dango_flyer": "Dango Flyer",
"dango_glutton": "Dango Glutton",
"dango_hunter": "Dango Hunter",
"dango_insurance": "Dango Insurance",
"dango_insurance_defense_up": "Dango Insurance Defense Up",
"super_recovery_dango": "Super Recovery Dango"
},
"endemic_life": {
"butterflame": "Butterflame",
"clothfly": "Clothfly",
"cutterfly": "Cutterfly",
"gold_wirebug": "Gold Wirebug",
"peepersects": "Peepersects",
"red_lampsquid": "Red Lampsquid",
"ruby_wirebug": "Ruby Wirebug",
"stinkmink": "Stinkmink",
"yellow_lampsquid": "Yellow Lampsquid"
},
"font_name": "NotoSansJP-Bold.otf",
"item_buffs": {
"adamant_seed": "Adamant Seed",
"armor_ammo": "Armor Ammo",
"armorskin": "Armorskin",
"dash_juice": "Dash Juice",
"demon_ammo": "Demon Ammo",
"demon_powder": "Demon Powder",
"demondrug": "Demondrug",
"gourmet_fish": "Gourmet Fish",
"hardshell_powder": "Hardshell Powder",
"immunizer": "Immunizer",
"mega_armorskin": "Mega Armorskin",
"mega_demondrug": "Mega Demondrug",
"might_seed": "Might Seed"
},
"melody_effects": {
"affinity_up": "Affinity Up",
"attack_and_affinity_up": "Attack and Affinity Up",
"attack_and_defense_up": "Attack and Defense Up",
"attack_up": "Attack Up",
"blight_negated": "Blight Negated",
"defense_up": "Defense Up",
"divine_protection": "Divine Protection",
"earplugs_l": "Earplugs (L)",
"earplugs_s": "Earplugs (S)",
"elemental_attack_boost": "Elemental Attack Boost",
"environment_damage_negated": "Environment Damage Negated",
"health_recovery_l": "Health Recovery (L)",
"health_recovery_s": "Health Recovery (S)",
"health_recovery_s_antidote": "Health Recovery (S) + Antidote",
"health_regeneration": "Health Regeneration",
"infernal_melody": "Infernal Melody",
"knockbacks_negated": "Knockbacks Negated",
"self_improvement": "Self-Improvement",
"sharpness_extension": "Sharpness Extension",
"sharpness_loss_reduced": "Sharpness Loss Reduced",
"sharpness_regeneration": "Sharpness Regeneration",
"sonic_barrier": "Sonic Barrier",
"sonic_wave": "Sonic Wave",
"stamina_recovery_up": "Stamina Recovery Up",
"stamina_use_reduced": "Stamina Use Reduced",
"stun_negated": "Stun Negated",
"tremors_negated": "Tremors Negated",
"wind_pressure_negated": "Wind Pressure Negated"
},
"misc_buffs": {
"attack_up": "Attack Up",
"defense_up": "Defense Up",
"immunity": "Immunity",
"natural_healing_up": "Natural Healing Up",
"stamina_use_down": "Stamina Use Down"
},
"otomo_moves": {
"go_fight_win": "Go, Fight, Win",
"power_drum": "Power Drum",
"rousing_roar": "Rousing Roar",
"vase_of_vitality": "Vase of Vitality"
},
"parts": {
"abdomen": "腹部",
"amatsu_unknown": "?",
@@ -392,19 +538,169 @@
"wingclaws": "Wingclaws",
"wings": "翼"
},
"rampage_skills": {
"chameleos_soul": "Chameleos Soul",
"kushala_daora_soul": "Kushala Daora Soul"
},
"skills": {
"adrenaline_rush": "Adrenaline Rush",
"affinity_sliding": "Affinity Sliding",
"agitator": "Agitator",
"berserk": "Berserk",
"bladescale_hone": "Bladescale Hone",
"blood_awakening": "Blood Awakening",
"bloodlust": "Bloodlust",
"burst": "Burst",
"coalescence": "Coalescence",
"counterstrike": "Counterstrike",
"dereliction": "Dereliction",
"dragon_conversion_elemental_attack_up": "Dragon Conversion: Elem. Atk Up",
"dragon_conversion_elemental_res_up": "Dragon Conversion: Elem. Res Up",
"dragonheart": "Dragonheart",
"embolden": "Embolden",
"frenzied_bloodlust": "Frenzied Bloodlust",
"furious": "Furious",
"grinder_s": "Grinder (S)",
"heaven_sent": "Heaven-Sent",
"hellfire_cloak": "Hellfire Cloak",
"heroics": "Heroics",
"inspiration": "Inspiration",
"intrepid_heart": "Intrepid Heart",
"latent_power": "Latent Power",
"maximum_might": "Maximum Might",
"offensive_guard": "Offensive Guard",
"partbreaker": "Partbreaker",
"peak_performance": "Peak Performance",
"powder_mantle_blue": "Powder Mantle (Blue)",
"powder_mantle_red": "Powder Mantle (Red)",
"protective_polish": "Protective Polish",
"resentment": "Resentment",
"resuscitate": "Resuscitate",
"spiribirds_call": "Spiribird's Call",
"status_trigger": "Status Trigger",
"strife": "Strife",
"wall_runner": "Wall Runner",
"wind_mantle": "Wind Mantle"
},
"stats": {
"affinity": "Affinity",
"attack": "Attack",
"defense": "Defense",
"dragon": "Dragon",
"dragon_resistance": "Dragon Res",
"fire": "Fire",
"fire_resistance": "Fire Res",
"ice": "Ice",
"ice_resistance": "Ice Res",
"stamina": "Stamina",
"thunder": "Thunder",
"thunder_resistance": "Thunder Res",
"water": "Water",
"water_resistance": "Water Res"
},
"unicode_glyph_ranges": [
32,
255,
8192,
8303,
11904,
12031,
12288,
12543,
12784,
12799,
19903,
19968,
40879,
40959,
63744,
64255,
65072,
65103,
65280,
65519,
0
]
],
"weapon_skills": {
"bow": {
"arc_shot_affinity": "Arc Shot: Affinity",
"arc_shot_brace": "Arc Shot: Brace",
"bolt_boost": "Bolt Boost",
"herculean_draw": "Herculean Draw"
},
"charge_blade": {
"element_boost": "Element Boost",
"sword_boost_mode": "Sword Boost Mode"
},
"dual_blades": {
"archdemon_mode": "Archdemon Mode",
"ironshine_silk": "Ironshine Silk"
},
"great_sword": {
"power_sheathe": "Power Sheathe"
},
"gunlance": {
"erupting_cannon": "Erupting Cannon",
"ground_splitter": "Ground Splitter"
},
"hammer": {
"impact_burst": "Impact Burst"
},
"heavy_bowgun": {
"counter_charger": "Counter Charger",
"overheat": "Overheat",
"rising_moon": "Rising Moon",
"setting_sun": "Setting Sun",
"wyvernsnipe_reload": "Wyvernsnipe Reload"
},
"hunting_horn": {
"bead_of_resonance": "Bead of Resonance",
"silkbind_shockwave": "Silkbind Shockwave",
"sonic_bloom": "Sonic Bloom"
},
"insect_glaive": {
"all_extracts_mix": "All Extracts Mix",
"orange_extract": "Orange Extract",
"red_extract": "Red Extract",
"white_extract": "White Extract"
},
"lance": {
"anchor_rage": "Anchor Rage",
"spiral_thrust": "Spiral Thrust",
"twin_wine": "Twin Wine"
},
"light_bowgun": {
"fanning_maneuver": "Fanning Maneuver",
"wyvernblast_reload": "Wyvernblast Reload"
},
"long_sword": {
"harvest_moon": "Harvest Moon",
"iai_slash": "Iai Slash",
"soaring_kick": "Soaring Kick",
"spirit_gauge": "Spirit Gauge",
"spirit_gauge_autofill": "Spirit Gauge Autofill"
},
"switch_axe": {
"amped_state": "Amped State",
"axe_heavy_slam": "Axe: Heavy Slam",
"switch_charger": "Switch Charger"
},
"sword_and_shield": {
"destroyer_oil": "Destroyer Oil"
}
},
"weapons": {
"bow": "Bow",
"charge_blade": "Charge Blade",
"dual_blades": "Dual Blades",
"great_sword": "Great Sword",
"gunlance": "Gunlance",
"hammer": "Hammer",
"heavy_bowgun": "Heavy Bowgun",
"hunting_horn": "Hunting Horn",
"insect_glaive": "Insect Glaive",
"lance": "Lance",
"light_bowgun": "Light Bowgun",
"long_sword": "Long Sword",
"switch_axe": "Switch Axe",
"sword_and_shield": "Sword & Shield"
}
}
+343 -41
View File
@@ -3,9 +3,10 @@
"HP": "체력:",
"buildup": "누적치:",
"gold": "금관",
"lv": "",
"mini": "최소",
"otomo": "동반자",
"part_anomaly_core": "Anomaly Core",
"part_anomaly_core": "괴이핵",
"part_break": "파괴",
"part_sever": "절단",
"player": "헌터",
@@ -18,30 +19,54 @@
},
"ailments": {
"blast": "폭파",
"blastblight": "Blastblight",
"bleeding": "Bleeding",
"bloodblight": "Bloodblight",
"deadly_poison": "Deadly Poison",
"defense_down": "Defense Down",
"dragonblight": "Dragonblight",
"dung_bomb": "거름탄",
"engulfed": "Engulfed",
"exhaust": "탈진",
"fall_otomo_trap": "동반자 구멍 함정",
"fall_trap": "구멍 함정",
"falling_asleep": "Falling Asleep",
"fireblight": "불바위구리",
"flash": "섬광",
"frenzy": "Frenzy",
"frenzy_infection": "Frenzy Infection",
"frenzy_overcome": "Frenzy Overcome",
"frostblight": "Frostblight",
"hellfireblight": "Hellfireblight",
"iceblight": "진흙구리",
"leeched": "Leeched",
"major_bubbleblight": "Major Bubbleblight",
"minor_bubbleblight": "Minor Bubbleblight",
"muck": "Muck",
"paralysis": "마비",
"poison": "독",
"quick_sand": "유사(모래함정)",
"resistance_down": "Resistance Down",
"ride": "용조종",
"roar": "Roar",
"shock_otomo_trap": "동반자 마비덫",
"shock_trap": "마비덫",
"sleep": "수면",
"steel_fang": "강철아",
"stench": "Stench",
"stun": "기절",
"thunderblight": "번개털구리",
"tranq_bomb": "포획용마취옥",
"waterblight": "진흙구리"
"tremor": "Tremor",
"waterblight": "진흙구리",
"webbed": "Webbed"
},
"customization_menu": {
"UI_font": "UI 글꼴",
"UI_font_notice": "글꼴 변경시 스크립트를 리로드 해야합니다!",
"abnormal_statuses": "Abnormal Statuses",
"activation_count": "활성 횟수",
"affinity_label": "Affinity Label",
"ailment_buildups": "상태이상 누적치",
"ailment_name": "상태이상 이름",
"ailment_name_label": "상태이상 이름 정보",
@@ -49,29 +74,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 +117,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 +127,36 @@
"damage_meter_UI": "대미지 미터 UI",
"damage_percentage_label": "대미지 비율 정보",
"damage_value_label": "대미지 값 정보",
"default_state": "Default State",
"dango_skills": "Dango Skills",
"debug": "Debug",
"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",
"effect_level": "Effect Level",
"element_2_label": "Element 2 Label",
"element_label": "Element Label",
"enable_for": "표시 대상",
"enabled": "사용함",
"endemic_life": "Endemic Life",
"endemic_life": "환경생물",
"endemic_life_UI": "환경생물 UI",
"endemic_life_buffs": "Endemic Life Buffs",
"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": "경직 횟수",
@@ -128,15 +165,17 @@
"global_position_modifier": "전역 위치 배율",
"global_scale_modifier": "전역 크기 배율",
"global_settings": "전역 설정",
"head_tracking": "Head Tracking",
"health": "체력",
"health_anomaly_filter": "Health + Anomaly Core",
"health_break_anomaly_filter": "Health + Break + Anomaly Core",
"health_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 +202,25 @@
"highlighted_buildup_bar": "주시대상 몬스터 누적치 막대",
"highlighted_damage_bar": "주시대상 몬스터 대미지 막대",
"highlighted_targeted": "주시대상 몬스터 표시",
"history": "History",
"history_size": "History Size",
"horizontal": "가로",
"hotkeys": "단축키",
"hunter_rank": "헌터 랭크",
"hunter_rank_label": "헌터 랭크 정보",
"ice_resistance_label": "Ice Resistance Label",
"id": "ID",
"in_lobby": "로비 내",
"in_training_area": "훈련구역 내",
"include": "포함",
"infinite_buffs_location": "Infinite Buffs Location",
"inside": "내부",
"installations": "Installations",
"installations": "설치",
"italic": "기울임",
"item_buffs": "Item Buffs",
"join_time": "참가 시간",
"killcam": "처치 영상",
"kunai": "Kunai",
"kunai": "쿠나이",
"language": "언어",
"large_monster_UI": "대형 몬스터 UI",
"large_monster_dynamic_UI": "대형 몬스터 유동 UI",
@@ -184,7 +228,7 @@
"large_monster_static_UI": "대형 몬스터 고정 UI",
"large_monsters": "대형 몬스터",
"last": "맨 뒤",
"left_to_right": "Left to Right",
"left_to_right": "왼쪽에서 오른쪽",
"level": "레벨",
"level_label": "레벨 정보",
"loading_quest": "퀘스트 로딩 중",
@@ -195,36 +239,39 @@
"master_rank": "마스터 랭크",
"max_distance": "최대 거리",
"max_monster_updates_per_tick": "틱당 최대 몬스터 갱신 횟수",
"max_value": "Max Value",
"max_value": "최대값",
"me": "나",
"melody_effects": "Melody Effects",
"menu_font": "메뉴 글꼴",
"menu_font_change_disclaimer": "언어 및 메뉴 글꼴 크기를 여러 번 변경하면 비정상 종료가 될 수 있습니다!",
"misc_buffs": "Misc Buffs",
"mod_name": "MHR Overlay",
"mode": "모드",
"modifiers": "설정 배율",
"module_visibility_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",
"otomo_moves": "Buddy Moves",
"otomos": "동반자",
"outline": "외곽선",
"outside": "외부",
"part_health": "부위 수치",
@@ -235,7 +282,7 @@
"player_name_label": "헌터명 정보",
"player_name_size_limit": "헌터명 크기 제한",
"player_spacing": "플레이어 간격",
"players": "Players",
"players": "모든 플레이어",
"playing_quest": "퀘스트 중",
"poison": "독",
"position": "위치",
@@ -247,54 +294,60 @@
"quest_start_animation": "퀘스트 시작 영상",
"quest_time": "퀘스트 시간",
"rage": "분노",
"rampage_skills": "Rampage Skills",
"reframework_outdated": "설치된 REFramework가 구버전입니다. 업데이트 하지 않으면 MHR Overlay가 제대로 동작하지 않을 수 있습니다.",
"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": "내 동반자를 따로",
"show_other_player_otomos_separately": "다른 플레이어의 동반자를 따로",
"show_servant_otomos_separately": "맹우의 동반자를 따로",
"size": "크기",
"skills": "Skills",
"small_monster_UI": "소형 몬스터 UI",
"small_monsters": "소형 몬스터",
"sorting": "정렬방법",
"spacing": "간격",
"stamina": "스태미나",
"stamina_label": "Stamina Label",
"static_orientation": "고정 방향",
"static_position": "고정 위치",
"static_sorting": "고정 정렬방법",
"static_spacing": "고정 간격",
"statically_positioned": "고정 위치 UI",
"stats_UI": "Stats UI",
"status": "상태",
"style": "스타일",
"summary_screen": "결과 요약 화면",
"text_label": "텍스트 정보",
"thickness": "두께",
"thunder_resistance_label": "Thunder Resistance Label",
"time_UI": "시간 UI",
"time_label": "시간 정보",
"time_limit": "시간 제한 (단위: 초)",
"timer": "타이머",
"timer_delays": "Timer Delays",
"timer_label": "타이머 정보",
"top_buildup": "총 누적치",
"top_damage": "최고 대미지",
"top_dps": "최고 DPS",
"top_left": "좌상단",
"top_right": "우상단",
"top_to_bottom": "Top to Bottom",
"top_left": "왼쪽 위",
"top_right": "오른쪽 위",
"top_to_bottom": "위에서 아래",
"total": "전체",
"total_buildup": "총 누적치",
"total_buildup_label": "총 누적치 정보",
@@ -310,19 +363,112 @@
"tracked_damage_types": "추적할 대미지 종류",
"tracked_monster_types": "추적할 몬스터 타입",
"type": "종류",
"update_buffs_delay": "Update Buffs (seconds)",
"update_is_online_delay": "Update Is Online (seconds)",
"update_myself_position_delay": "Update Myself Position (seconds)",
"update_player_info_delay": "Update Player Info (seconds)",
"update_players_delay": "Update Players (seconds)",
"update_quest_time_delay": "Update Quest Time (seconds)",
"update_singletons_delay": "Update Singletons (seconds)",
"update_window_size_delay": "Update Window Size (seconds)",
"use_d2d_if_available": "가능한 Direct2D를 사용함",
"value": "Value",
"value_label": "값 정보",
"vertical": "세로",
"viewport_offset": "뷰포트 오프셋",
"visible": "표시함",
"water_resistance_label": "Water Resistance Label",
"weapon_skills": "Weapon Skills",
"width": "너비",
"world_offset": "전역 오프셋",
"wyvern_riding": "Wyvern Riding",
"wyvern_riding": "용조종",
"x": "X",
"y": "Y",
"z": "Z"
},
"dango_skills": {
"dango_adrenaline": "Dango Adrenaline",
"dango_booster": "Dango Booster",
"dango_bulker": "Dango Bulker",
"dango_connector": "Dango Connector",
"dango_defender": "Dango Defender",
"dango_flyer": "Dango Flyer",
"dango_glutton": "Dango Glutton",
"dango_hunter": "Dango Hunter",
"dango_insurance": "Dango Insurance",
"dango_insurance_defense_up": "Dango Insurance Defense Up",
"super_recovery_dango": "Super Recovery Dango"
},
"endemic_life": {
"butterflame": "Butterflame",
"clothfly": "Clothfly",
"cutterfly": "Cutterfly",
"gold_wirebug": "Gold Wirebug",
"peepersects": "Peepersects",
"red_lampsquid": "Red Lampsquid",
"ruby_wirebug": "Ruby Wirebug",
"stinkmink": "Stinkmink",
"yellow_lampsquid": "Yellow Lampsquid"
},
"font_name": "NotoSansKR-Bold.otf",
"item_buffs": {
"adamant_seed": "Adamant Seed",
"armor_ammo": "Armor Ammo",
"armorskin": "Armorskin",
"dash_juice": "Dash Juice",
"demon_ammo": "Demon Ammo",
"demon_powder": "Demon Powder",
"demondrug": "Demondrug",
"gourmet_fish": "Gourmet Fish",
"hardshell_powder": "Hardshell Powder",
"immunizer": "Immunizer",
"mega_armorskin": "Mega Armorskin",
"mega_demondrug": "Mega Demondrug",
"might_seed": "Might Seed"
},
"melody_effects": {
"affinity_up": "Affinity Up",
"attack_and_affinity_up": "Attack and Affinity Up",
"attack_and_defense_up": "Attack and Defense Up",
"attack_up": "Attack Up",
"blight_negated": "Blight Negated",
"defense_up": "Defense Up",
"divine_protection": "Divine Protection",
"earplugs_l": "Earplugs (L)",
"earplugs_s": "Earplugs (S)",
"elemental_attack_boost": "Elemental Attack Boost",
"environment_damage_negated": "Environment Damage Negated",
"health_recovery_l": "Health Recovery (L)",
"health_recovery_s": "Health Recovery (S)",
"health_recovery_s_antidote": "Health Recovery (S) + Antidote",
"health_regeneration": "Health Regeneration",
"infernal_melody": "Infernal Melody",
"knockbacks_negated": "Knockbacks Negated",
"self_improvement": "Self-Improvement",
"sharpness_extension": "Sharpness Extension",
"sharpness_loss_reduced": "Sharpness Loss Reduced",
"sharpness_regeneration": "Sharpness Regeneration",
"sonic_barrier": "Sonic Barrier",
"sonic_wave": "Sonic Wave",
"stamina_recovery_up": "Stamina Recovery Up",
"stamina_use_reduced": "Stamina Use Reduced",
"stun_negated": "Stun Negated",
"tremors_negated": "Tremors Negated",
"wind_pressure_negated": "Wind Pressure Negated"
},
"misc_buffs": {
"attack_up": "Attack Up",
"defense_up": "Defense Up",
"immunity": "Immunity",
"natural_healing_up": "Natural Healing Up",
"stamina_use_down": "Stamina Use Down"
},
"otomo_moves": {
"go_fight_win": "Go, Fight, Win",
"power_drum": "Power Drum",
"rousing_roar": "Rousing Roar",
"vase_of_vitality": "Vase of Vitality"
},
"parts": {
"abdomen": "배",
"amatsu_unknown": "?",
@@ -392,6 +538,66 @@
"wingclaws": "날개발톱",
"wings": "날개"
},
"rampage_skills": {
"chameleos_soul": "Chameleos Soul",
"kushala_daora_soul": "Kushala Daora Soul"
},
"skills": {
"adrenaline_rush": "Adrenaline Rush",
"affinity_sliding": "Affinity Sliding",
"agitator": "Agitator",
"berserk": "Berserk",
"bladescale_hone": "Bladescale Hone",
"blood_awakening": "Blood Awakening",
"bloodlust": "Bloodlust",
"burst": "Burst",
"coalescence": "Coalescence",
"counterstrike": "Counterstrike",
"dereliction": "Dereliction",
"dragon_conversion_elemental_attack_up": "Dragon Conversion: Elem. Atk Up",
"dragon_conversion_elemental_res_up": "Dragon Conversion: Elem. Res Up",
"dragonheart": "Dragonheart",
"embolden": "Embolden",
"frenzied_bloodlust": "Frenzied Bloodlust",
"furious": "Furious",
"grinder_s": "Grinder (S)",
"heaven_sent": "Heaven-Sent",
"hellfire_cloak": "Hellfire Cloak",
"heroics": "Heroics",
"inspiration": "Inspiration",
"intrepid_heart": "Intrepid Heart",
"latent_power": "Latent Power",
"maximum_might": "Maximum Might",
"offensive_guard": "Offensive Guard",
"partbreaker": "Partbreaker",
"peak_performance": "Peak Performance",
"powder_mantle_blue": "Powder Mantle (Blue)",
"powder_mantle_red": "Powder Mantle (Red)",
"protective_polish": "Protective Polish",
"resentment": "Resentment",
"resuscitate": "Resuscitate",
"spiribirds_call": "Spiribird's Call",
"status_trigger": "Status Trigger",
"strife": "Strife",
"wall_runner": "Wall Runner",
"wind_mantle": "Wind Mantle"
},
"stats": {
"affinity": "Affinity",
"attack": "Attack",
"defense": "Defense",
"dragon": "Dragon",
"dragon_resistance": "Dragon Res",
"fire": "Fire",
"fire_resistance": "Fire Res",
"ice": "Ice",
"ice_resistance": "Ice Res",
"stamina": "Stamina",
"thunder": "Thunder",
"thunder_resistance": "Thunder Res",
"water": "Water",
"water_resistance": "Water Res"
},
"unicode_glyph_ranges": [
32,
255,
@@ -399,12 +605,108 @@
4607,
8192,
8303,
11904,
12031,
12288,
12351,
12592,
12687,
12800,
19903,
19968,
40959,
44032,
55215,
63744,
64255,
65072,
65103,
65280,
65519,
0
]
],
"weapon_skills": {
"bow": {
"arc_shot_affinity": "Arc Shot: Affinity",
"arc_shot_brace": "Arc Shot: Brace",
"bolt_boost": "Bolt Boost",
"herculean_draw": "Herculean Draw"
},
"charge_blade": {
"element_boost": "Element Boost",
"sword_boost_mode": "Sword Boost Mode"
},
"dual_blades": {
"archdemon_mode": "Archdemon Mode",
"ironshine_silk": "Ironshine Silk"
},
"great_sword": {
"power_sheathe": "Power Sheathe"
},
"gunlance": {
"erupting_cannon": "Erupting Cannon",
"ground_splitter": "Ground Splitter"
},
"hammer": {
"impact_burst": "Impact Burst"
},
"heavy_bowgun": {
"counter_charger": "Counter Charger",
"overheat": "Overheat",
"rising_moon": "Rising Moon",
"setting_sun": "Setting Sun",
"wyvernsnipe_reload": "Wyvernsnipe Reload"
},
"hunting_horn": {
"bead_of_resonance": "Bead of Resonance",
"silkbind_shockwave": "Silkbind Shockwave",
"sonic_bloom": "Sonic Bloom"
},
"insect_glaive": {
"all_extracts_mix": "All Extracts Mix",
"orange_extract": "Orange Extract",
"red_extract": "Red Extract",
"white_extract": "White Extract"
},
"lance": {
"anchor_rage": "Anchor Rage",
"spiral_thrust": "Spiral Thrust",
"twin_wine": "Twin Wine"
},
"light_bowgun": {
"fanning_maneuver": "Fanning Maneuver",
"wyvernblast_reload": "Wyvernblast Reload"
},
"long_sword": {
"harvest_moon": "Harvest Moon",
"iai_slash": "Iai Slash",
"soaring_kick": "Soaring Kick",
"spirit_gauge": "Spirit Gauge",
"spirit_gauge_autofill": "Spirit Gauge Autofill"
},
"switch_axe": {
"amped_state": "Amped State",
"axe_heavy_slam": "Axe: Heavy Slam",
"switch_charger": "Switch Charger"
},
"sword_and_shield": {
"destroyer_oil": "Destroyer Oil"
}
},
"weapons": {
"bow": "Bow",
"charge_blade": "Charge Blade",
"dual_blades": "Dual Blades",
"great_sword": "Great Sword",
"gunlance": "Gunlance",
"hammer": "Hammer",
"heavy_bowgun": "Heavy Bowgun",
"hunting_horn": "Hunting Horn",
"insect_glaive": "Insect Glaive",
"lance": "Lance",
"light_bowgun": "Light Bowgun",
"long_sword": "Long Sword",
"switch_axe": "Switch Axe",
"sword_and_shield": "Sword & Shield"
}
}
@@ -3,6 +3,7 @@
"HP": "ОЗ:",
"buildup": "Накопление",
"gold": "Золото",
"lv": "",
"mini": "Мини",
"otomo": "Cпутник",
"part_anomaly_core": "Ядро аномалии",
@@ -18,30 +19,54 @@
},
"ailments": {
"blast": "Взрыв",
"blastblight": "Взрывная порча",
"bleeding": "Кровотечение",
"bloodblight": "Кровавая порча",
"deadly_poison": "Смертельный яд",
"defense_down": "Защита снижена",
"dragonblight": "Драконья Порча",
"dung_bomb": "Навозная бомба",
"engulfed": "Окутывание",
"exhaust": "Усталость",
"fall_otomo_trap": "Волчья яма спутника",
"fall_trap": "Волчья яма",
"falling_asleep": "Засыпание",
"fireblight": "Огненная порча",
"flash": "Оглушение",
"frenzy": "Бешенство",
"frenzy_infection": "Инфекция бешенства",
"frenzy_overcome": "Преодоление бешенства",
"frostblight": "Ледяная (морозная) порча",
"hellfireblight": "Порча адского пламени",
"iceblight": "Ледяная порча",
"leeched": "Истощение",
"major_bubbleblight": "Великая пузырьковая порча",
"minor_bubbleblight": "Малая пузырьковая порча",
"muck": "Грязь",
"paralysis": "Паралич",
"poison": "Отравление",
"quick_sand": "Зыбучий песок",
"resistance_down": "Сопротивление снижено",
"ride": "Езда на виверне",
"roar": "Рык",
"shock_otomo_trap": "Шоковая ловушка спутника",
"shock_trap": "Шоковая ловушка",
"sleep": "Сон",
"steel_fang": "Стальной клык",
"stench": "Зловоние",
"stun": "Оглушение",
"thunderblight": "Грозовая порча",
"tranq_bomb": "Снотворная порча",
"waterblight": "Водяная порча"
"tremor": "Тряска",
"waterblight": "Водяная порча",
"webbed": "В паутине"
},
"customization_menu": {
"UI_font": "Шрифт интерфейса",
"UI_font_notice": "Любые изменения шрифта требуют перезагрузку скрипта!",
"abnormal_statuses": "Аномальные статусы",
"activation_count": "Кол-во активаций",
"affinity_label": "Метка мастерства",
"ailment_buildups": "Накопление аномального статуса",
"ailment_name": "Название аномального статуса",
"ailment_name_label": "Метка названия аномального статуса",
@@ -55,6 +80,7 @@
"anomaly_health_percentage": "Здоровье ядра аномалии в процентах",
"apply": "Применить",
"assign_new_key": "Привязать клавишу",
"attack_label": "Метка Атаки",
"auto_highlight": "Автофокус",
"background": "Фон",
"bar": "Шкала",
@@ -73,7 +99,7 @@
"break_max_count": "Максимальное кол-во повреждений",
"break_sever_anomaly_filter": "Повреждение + Отсечение + Ядро аномалии",
"break_sever_filter": "Повреждение + Отсечение",
"buff_UI": "Интерфейс баффов",
"buff_UI": "Интерфейс эффектов",
"buildup": "Накопление",
"buildup_bar": "Шкала накопления",
"buildup_bars_are_relative_to": "Шкалы накопления расположены относительно к",
@@ -92,6 +118,7 @@
"crown": "Корона",
"crown_thresholds": "Лимиты корон",
"current_state": "Текущее состояние",
"current_time": "Текущее время",
"current_value": "Текущее значение",
"cutscene": "Катсцена",
"damage": "Урон",
@@ -100,26 +127,36 @@
"damage_meter_UI": "Интерфейс модуля урона",
"damage_percentage_label": "Метка урона в процентах",
"damage_value_label": "Метка значений урона",
"dango_skills": "Навыки данго",
"debug": "Отладка",
"default_state": "Состояние по умолчанию",
"defense_label": "Метка защиты",
"delete": "Удалить",
"distance": "Расстояние",
"dps": "Урон в секунду",
"dps_label": "Метка урона в секунду",
"dps_mode": "Режим урона в секунду",
"dragon_resistance_label": "Метка сопротивления дракону",
"duplicate": "Дублировать",
"duration": "Продолжительность",
"dynamic_positioning": "Динамическое позиционирование",
"dynamically_positioned": "Рассположенный динамично",
"effect_level": "Уровень эффекта",
"element_2_label": "Метка элемента 2",
"element_label": "Метка элемента",
"enable_for": "Показывать для",
"enabled": "Включить",
"endemic_life": "Местная живность",
"endemic_life_UI": "Интерфейс местной живности",
"endemic_life_buffs": "Эффекты местной живности",
"everything_seems_to_be_ok": "Кажется, всё в порядке!",
"family": "Семейство",
"farthest": "Самый дальний",
"fight_time": "Время в бою",
"fill_direction": "Направление заполнения",
"filter": "Фильтр",
"filter_mode": "Режим Фильтра",
"fire_resistance_label": "Метка сопротивления огню",
"first": "Первый",
"first_hit": "Первый удар",
"flinch_count": "Кол-во вздрагиваний",
@@ -128,6 +165,7 @@
"global_position_modifier": "Глобальный модификатор расположения",
"global_scale_modifier": "Глобальный модификатор размера",
"global_settings": "Общие настройки",
"head_tracking": "Отслеживание головы",
"health": "Здоровье",
"health_anomaly_filter": "Здоровье + Ядро аномалии",
"health_break_anomaly_filter": "Здоровье + Повреждение + Ядро аномалии",
@@ -135,6 +173,7 @@
"health_break_sever_anomaly_filter": "Здоровье + Повреждение + Отсечение + Ядро аномалии",
"health_break_sever_filter": "Здоровье + Повреждение + Отсечение",
"health_filter": "Здоровье",
"health_label": "Метка здоровья",
"health_percentage": "Здоровье в процентах",
"health_sever_anomaly_filter": "Здоровье + Отсечение + Ядро аномалии",
"health_sever_filter": "Здоровье + Отсечение",
@@ -142,7 +181,7 @@
"hide_ailments_with_zero_buildup": "Скрыть аномальный статус, если накопление равно 0",
"hide_all_active_ailments": "Скрыть все активные аномальные статусы",
"hide_all_inactive_ailments": "Скрыть все неактивные аномальные статусы",
"hide_bar_for_infinite_buffs": "Скрыть шкалу у бесконечных баффов",
"hide_bar_for_infinite_buffs": "Скрыть шкалу у бесконечных эффектов",
"hide_dead_or_captured": "Скрыть мёртвых и захваченных монстров",
"hide_disabled_ailments": "Скрыть отключенные аномальные статусы",
"hide_inactive_ailments_with_no_buildup_support": "Скрыть неактивные аномальные статусы без поддержки накопления",
@@ -152,7 +191,7 @@
"hide_other_players": "Скрыть остальных игроков",
"hide_player_if_player_damage_is_zero": "Скрыть игрока, если его урон равен 0",
"hide_servants": "Скрыть последователей",
"hide_timer_for_infinite_buffs": "Скрыть таймер у бесконечных баффов",
"hide_timer_for_infinite_buffs": "Скрыть таймер у бесконечных эффектов",
"hide_total_damage": "Скрыть общий урон",
"hide_total_if_total_damage_is_zero": "Скрыть общий урон, если он равен 0",
"hide_undamaged_parts": "Скрыть неповреждённые части тела",
@@ -163,17 +202,22 @@
"highlighted_buildup_bar": "Помеченная шкала накопления",
"highlighted_damage_bar": "Помеченная шкала урона",
"highlighted_targeted": "Помеченный",
"history": "История",
"history_size": "Размер истории",
"horizontal": "Горизонтально",
"hotkeys": "Горячие клавиши",
"hunter_rank": "Ранг охотника",
"hunter_rank_label": "Метка ранга охотника",
"ice_resistance_label": "Метка сопротивления льду",
"id": "ID",
"in_lobby": "В лобби",
"in_training_area": "В тренировочной зоне",
"include": "Элементы",
"infinite_buffs_location": "Позиция бесконечных эффектов",
"inside": "Внутри",
"installations": "Установки",
"italic": "Курсив",
"item_buffs": "Эффекты предметов",
"join_time": "Время присоединения",
"killcam": "Камера смерти",
"kunai": "Кунаи",
@@ -197,8 +241,10 @@
"max_monster_updates_per_tick": "Макс. кол-во обновлений за тик",
"max_value": "Максимальное значение",
"me": "Я",
"melody_effects": "Эффекты мелодии",
"menu_font": "Шрифт меню",
"menu_font_change_disclaimer": "Изменение языка и размера шрифта меню несколько раз приведёт к вылету!",
"misc_buffs": "Разные эффекты",
"mod_name": "MHR Overlay",
"mode": "Режим",
"modifiers": "Модификаторы",
@@ -224,6 +270,7 @@
"other": "Другое",
"other_player_otomos": "Спутники других игроков",
"other_players": "Другие игроки",
"otomo_moves": "Навыки спутника",
"otomos": "Спутники",
"outline": "Обводка",
"outside": "Снаружи",
@@ -247,6 +294,7 @@
"quest_start_animation": "Анимация начала квеста",
"quest_time": "Время квеста",
"rage": "Ярость",
"rampage_skills": "Навыки буйства",
"reframework_outdated": "Установленная версия REFramework устарела. Пожалуйста, обновитесь, иначе MHR Overlay будет работать некорректно.",
"relative_offset": "Относительный сдвиг",
"rename": "Переименовать",
@@ -269,25 +317,30 @@
"show_other_player_otomos_separately": "Показывать спутников других игроков отдельно",
"show_servant_otomos_separately": "Показывать спутников последователей отдельно",
"size": "Размер",
"skills": "Навыки",
"small_monster_UI": "Интерфейс малых монстров",
"small_monsters": "Малые монстры",
"sorting": "Сортировка",
"spacing": "Расстояние между элементами",
"stamina": "Выносливость",
"stamina_label": "Метка выносливости",
"static_orientation": "Статичная ориентация",
"static_position": "Статичное расположение",
"static_sorting": "Статичная сортировка",
"static_spacing": "Статичное расстояние между элементами",
"statically_positioned": "Рассположенный статично",
"stats_UI": "Интерфейс статуса",
"status": "Статус",
"style": "Стиль",
"summary_screen": "Экран Результатов",
"summary_screen": "Экран результатов",
"text_label": "Текстовая метка",
"thickness": "Толщина",
"thunder_resistance_label": "Метка сопротивления грозе",
"time_UI": "Интерфейс времени",
"time_label": "Метка времени",
"time_limit": "Ограничение по времени (cек.)",
"timer": "Таймер",
"timer_delays": "Задержка таймеров",
"timer_label": "Метка таймера",
"top_buildup": "Наибольшее накопление",
"top_damage": "Наибольший урон",
@@ -310,11 +363,22 @@
"tracked_damage_types": "Отслеживаемые типы урона",
"tracked_monster_types": "Отслеживаемые типы монстров",
"type": "Тип",
"update_buffs_delay": "Обновление эффектов (cек.)",
"update_is_online_delay": "Обновление онлайн статуса (cек.)",
"update_myself_position_delay": "Обновление собственных координат (cек.)",
"update_player_info_delay": "Обновление информации об игроке (cек.)",
"update_players_delay": "Обновление списка игроков (cек.)",
"update_quest_time_delay": "Обновление продолжительности задания (cек.)",
"update_singletons_delay": "Обновление синглтонов (cек.)",
"update_window_size_delay": "Обновление размеров окна (cек.)",
"use_d2d_if_available": "Использовать Direct2D, если доступен",
"value": "Значение",
"value_label": "Метка значений",
"vertical": "Вертикально",
"viewport_offset": "Сдвиг в экранном пространстве",
"visible": "Включить",
"water_resistance_label": "Метка сопротивления воде",
"weapon_skills": "Навыки оружия",
"width": "Ширина",
"world_offset": "Сдвиг в игровом пространстве",
"wyvern_riding": "Езда на виверне",
@@ -322,7 +386,89 @@
"y": "Y",
"z": "Z"
},
"font_name": "NotoSansKR-Bold.otf",
"dango_skills": {
"dango_adrenaline": "Данго-адреналин",
"dango_booster": "Данго-усилитель",
"dango_bulker": "Данго-пижон",
"dango_connector": "Данго-сцепщик",
"dango_defender": "Данго-защитник",
"dango_flyer": "Данго-пилот",
"dango_glutton": "Данго-обжора",
"dango_hunter": "Данго-охотник",
"dango_insurance": "Данго-страховщик",
"dango_insurance_defense_up": "Данго-страховщик: усил. защиты",
"super_recovery_dango": "Супервосстан. данго"
},
"endemic_life": {
"butterflame": "Огнебабочка",
"clothfly": "Тканебабочка",
"cutterfly": "Стрекоза-нож",
"gold_wirebug": "Золотой Протожук",
"peepersects": "Глазобабочки",
"red_lampsquid": "Крс. Лампокальм.",
"ruby_wirebug": "Рубиновый Протожук",
"stinkmink": "Пахучка",
"yellow_lampsquid": "Жлт. Лампокальм."
},
"font_name": "NotoSans-Bold.otf",
"item_buffs": {
"adamant_seed": "Адамант. зерно",
"armor_ammo": "Защитные снаряды",
"armorskin": "Бронир. кожа",
"dash_juice": "Сок бодрости",
"demon_ammo": "Демон. снаряды",
"demon_powder": "Демон. порошок",
"demondrug": "Демон. снадобье",
"gourmet_fish": "Вкусная рыба",
"hardshell_powder": "Пор. из скорлупы",
"immunizer": "Иммунатор",
"mega_armorskin": "Мегабронир. кожа",
"mega_demondrug": "Мегадемон. снад.",
"might_seed": "Зер. могущества"
},
"melody_effects": {
"affinity_up": "Усиление мастерства",
"attack_and_affinity_up": "Усиление атаки и мастерства",
"attack_and_defense_up": "Усиление атаки и защиты",
"attack_up": "Усиление атаки",
"blight_negated": "Снятие порчи",
"defense_up": "Усиление защиты",
"divine_protection": "Божественная защита",
"earplugs_l": "Наушники (L)",
"earplugs_s": "Наушники (S)",
"elemental_attack_boost": "Усиление атаки стихией",
"environment_damage_negated": "Отмена урона окружением",
"health_recovery_l": "Восст. здоровья (L)",
"health_recovery_s": "Восст. здоровья (S)",
"health_recovery_s_antidote": "Восст. здоровья (S) + по-ядие",
"health_regeneration": "Регенерация ",
"infernal_melody": "Песня яростного пламени",
"knockbacks_negated": "Нейтрализация сбив. с ног",
"self_improvement": "Самосовершенствование",
"sharpness_extension": "Увеличение остроты",
"sharpness_loss_reduced": "Замедление затупления",
"sharpness_regeneration": "Регенерация остроты",
"sonic_barrier": "Звуковой барьер",
"sonic_wave": "Звуковая волна",
"stamina_recovery_up": "Улучш. восст. выносливости",
"stamina_use_reduced": "Усиление выносливости",
"stun_negated": "Нейтрализация оглушения",
"tremors_negated": "Нейтрализация тряски",
"wind_pressure_negated": "Отмена давления ветра"
},
"misc_buffs": {
"attack_up": "Усиление атаки",
"defense_up": "Усиление защиты",
"immunity": "Устойчивость",
"natural_healing_up": "Естественное лечение",
"stamina_use_down": "Уменьшение расхода выносливости"
},
"otomo_moves": {
"go_fight_win": "Сражайся, побеждай",
"power_drum": "Барабан силы",
"rousing_roar": "Воодушевляющий рев",
"vase_of_vitality": "Ваза живучести"
},
"parts": {
"abdomen": "Брюхо",
"amatsu_unknown": "?",
@@ -392,15 +538,169 @@
"wingclaws": "Крыло-коготь",
"wings": "Крылья"
},
"rampage_skills": {
"chameleos_soul": "Душа Хамелеоса",
"kushala_daora_soul": "Душа Кушалы Даоры"
},
"skills": {
"adrenaline_rush": "Прилив адреналина",
"affinity_sliding": "Мастерский подкат",
"agitator": "Подстрекатель",
"berserk": "Безумец",
"bladescale_hone": "Острая чешуя",
"blood_awakening": "Пробуждение крови",
"bloodlust": "Кровожадность",
"burst": "Выброс",
"coalescence": "Сращивание",
"counterstrike": "Контрудар",
"dereliction": "Упущение",
"dragon_conversion_elemental_attack_up": "Преобраз-е дракона: усил. эл. атаки",
"dragon_conversion_elemental_res_up": "Преобраз-е дракона: усил. сопротивл.",
"dragonheart": "Драконье сердце",
"embolden": "Воодушевление",
"frenzied_bloodlust": "Буйная кровожадность",
"furious": "Гнев",
"grinder_s": "Дробилка (S)",
"heaven_sent": "Божий посланник",
"hellfire_cloak": "Завеса ад. пламени",
"heroics": "Героизм",
"inspiration": "Вдохновение",
"intrepid_heart": "бесстрашное сердце",
"latent_power": "Скрытая энергия",
"maximum_might": "Макс. могущество",
"offensive_guard": "Агрессивная защита",
"partbreaker": "Рассекатель",
"peak_performance": "На высоте",
"powder_mantle_blue": "Порошковый покров (синий)",
"powder_mantle_red": "Порошковый покров (красный)",
"protective_polish": "Защитная полировка",
"resentment": "Презрение",
"resuscitate": "Оживление",
"spiribirds_call": "Зов Духоптицы",
"status_trigger": "Смена статуса",
"strife": "Борьба",
"wall_runner": "Бегун по стенам",
"wind_mantle": "Мантия ветра"
},
"stats": {
"affinity": "Мастерство",
"attack": "Атака",
"defense": "Защита",
"dragon": "Дракон",
"dragon_resistance": "Сопрот. дракону",
"fire": "Огонь",
"fire_resistance": "Сопрот. огню",
"ice": "Лед",
"ice_resistance": "Сопрот. льду",
"stamina": "Выносливость",
"thunder": "Гроза",
"thunder_resistance": "Сопрот. грозе",
"water": "Вода",
"water_resistance": "Сопрот. воде"
},
"unicode_glyph_ranges": [
32,
255,
256,
383,
1024,
1241,
1327,
7680,
7935,
8192,
8303,
65280,
65519,
0,
64255,
65072,
65103,
65280,
65519,
0
]
],
"weapon_skills": {
"bow": {
"arc_shot_affinity": "Выстрел дугой: мастерство",
"arc_shot_brace": "Выстрел дугой: сгруппир.",
"bolt_boost": "Усиление снарядов",
"herculean_draw": "Натяжение Геркулеса"
},
"charge_blade": {
"element_boost": "Усиление стихии",
"sword_boost_mode": "Режим усиления меча"
},
"dual_blades": {
"archdemon_mode": "Режим архидемона",
"ironshine_silk": "Блестящий шелк"
},
"great_sword": {
"power_sheathe": "Мощное убирание оружия"
},
"gunlance": {
"erupting_cannon": "Вулканическая пушка",
"ground_splitter": "Раскол земли"
},
"hammer": {
"impact_burst": "Взрыв от удара"
},
"heavy_bowgun": {
"counter_charger": "Заряженная контратака",
"overheat": "Перегрев",
"rising_moon": "Восходящая луна",
"setting_sun": "Заходящее солнце",
"wyvernsnipe_reload": "Перезарядка меткости виверны"
},
"hunting_horn": {
"bead_of_resonance": "Бусина резонанса",
"silkbind_shockwave": "Волна паутины",
"sonic_bloom": "Звуковой цветов"
},
"insect_glaive": {
"all_extracts_mix": "Смесь всех экстрактов",
"orange_extract": "Оранжевый экстракт",
"red_extract": "Красный экстракт",
"white_extract": "Белый экстракт"
},
"lance": {
"anchor_rage": "Опорный гнев",
"spiral_thrust": "Спиральный выпад",
"twin_wine": "Побеги-близнецы"
},
"light_bowgun": {
"fanning_maneuver": "Веерный маневр",
"wyvernblast_reload": "Перезарядка взрыва виверны"
},
"long_sword": {
"harvest_moon": "Луна урожая",
"iai_slash": "Удар на выхвате",
"soaring_kick": "Парящий удар ногой",
"spirit_gauge": "Шкала духа",
"spirit_gauge_autofill": "Самозаполнение шкалы духа"
},
"switch_axe": {
"amped_state": "Усил. состояние",
"axe_heavy_slam": "Топор: Неистовый удар",
"switch_charger": "Выкидной заряд"
},
"sword_and_shield": {
"destroyer_oil": "Масло уничтожения"
}
},
"weapons": {
"bow": "Лук",
"charge_blade": "Силовой клинок",
"dual_blades": "Два клинка",
"great_sword": "Двуручный меч",
"gunlance": "Копьепушка",
"hammer": "Молот",
"heavy_bowgun": "Тяжелое лукорудие",
"hunting_horn": "Охотничий рог",
"insect_glaive": "Глефа насекомых",
"lance": "Копье",
"light_bowgun": "Легкое лукорудие",
"long_sword": "Бастард",
"switch_axe": "Выкидной топор",
"sword_and_shield": "Меч и щит"
}
}
@@ -3,6 +3,7 @@
"HP": "生命:",
"buildup": "积累值:",
"gold": "金冠",
"lv": "",
"mini": "小型",
"otomo": "随从",
"part_anomaly_core": "Anomaly Core",
@@ -18,30 +19,54 @@
},
"ailments": {
"blast": "爆破",
"blastblight": "Blastblight",
"bleeding": "Bleeding",
"bloodblight": "Bloodblight",
"deadly_poison": "Deadly Poison",
"defense_down": "Defense Down",
"dragonblight": "Dragonblight",
"dung_bomb": "异臭球",
"engulfed": "Engulfed",
"exhaust": "减气",
"fall_otomo_trap": "随从落穴陷阱",
"fall_trap": "落穴陷阱",
"falling_asleep": "Falling Asleep",
"fireblight": "火异常状态",
"flash": "闪光",
"frenzy": "Frenzy",
"frenzy_infection": "Frenzy Infection",
"frenzy_overcome": "Frenzy Overcome",
"frostblight": "Frostblight",
"hellfireblight": "Hellfireblight",
"iceblight": "冰异常状态",
"leeched": "Leeched",
"major_bubbleblight": "Major Bubbleblight",
"minor_bubbleblight": "Minor Bubbleblight",
"muck": "Muck",
"paralysis": "麻痹",
"poison": "中毒",
"quick_sand": "流沙",
"resistance_down": "Resistance Down",
"ride": "御龙",
"roar": "Roar",
"shock_otomo_trap": "随从麻痹陷阱",
"shock_trap": "麻痹陷阱",
"sleep": "睡眠",
"steel_fang": "双刃锁镰",
"stench": "Stench",
"stun": "昏厥",
"thunderblight": "雷异常状态",
"tranq_bomb": "捕获用麻醉球",
"waterblight": "水异常状态"
"tremor": "Tremor",
"waterblight": "水异常状态",
"webbed": "Webbed"
},
"customization_menu": {
"UI_font": "UI字体",
"UI_font_notice": "当更改字体时,请重新加载脚本!",
"abnormal_statuses": "Abnormal Statuses",
"activation_count": "激活次数",
"affinity_label": "Affinity Label",
"ailment_buildups": "状态异常积累值",
"ailment_name": "状态异常名",
"ailment_name_label": "状态异常标签",
@@ -55,6 +80,7 @@
"anomaly_health_percentage": "Anomaly Core Health Percentage",
"apply": "应用",
"assign_new_key": "指定新按键",
"attack_label": "Attack Label",
"auto_highlight": "自动高亮",
"background": "背景",
"bar": "状态条",
@@ -92,6 +118,7 @@
"crown": "皇冠",
"crown_thresholds": "皇冠阈值",
"current_state": "当前阶段",
"current_time": "Current Time",
"current_value": "当前值",
"cutscene": "过场动画",
"damage": "伤害",
@@ -100,26 +127,36 @@
"damage_meter_UI": "伤害统计UI",
"damage_percentage_label": "伤害百分比标签",
"damage_value_label": "伤害量标签",
"dango_skills": "Dango Skills",
"debug": "Debug",
"default_state": "默认阶段",
"defense_label": "Defense Label",
"delete": "删除",
"distance": "距离",
"dps": "DPS",
"dps_label": "DPS标签",
"dps_mode": "DPS模式",
"dragon_resistance_label": "Dragon Resistance Label",
"duplicate": "复制",
"duration": "持续时间",
"dynamic_positioning": "动态位置",
"dynamically_positioned": "动态位置",
"effect_level": "Effect Level",
"element_2_label": "Element 2 Label",
"element_label": "Element Label",
"enable_for": "开启",
"enabled": "开启",
"endemic_life": "Endemic Life",
"endemic_life_UI": "环境生物UI",
"endemic_life_buffs": "Endemic Life Buffs",
"everything_seems_to_be_ok": "Everything seems to be OK!",
"family": "字体",
"farthest": "最远",
"fight_time": "战斗时间",
"fill_direction": "Fill Direction",
"filter": "筛选器",
"filter_mode": "筛选方式",
"fire_resistance_label": "Fire Resistance Label",
"first": "第一",
"first_hit": "第一击",
"flinch_count": "胆怯次数",
@@ -128,6 +165,7 @@
"global_position_modifier": "全局位置更改",
"global_scale_modifier": "全局比例更改",
"global_settings": "全局设定",
"head_tracking": "Head Tracking",
"health": "生命",
"health_anomaly_filter": "Health + Anomaly Core",
"health_break_anomaly_filter": "Health + Break + Anomaly Core",
@@ -135,6 +173,7 @@
"health_break_sever_anomaly_filter": "Health + Break + Sever + Anomaly Core",
"health_break_sever_filter": "生命+破坏+切断",
"health_filter": "生命",
"health_label": "Health Label",
"health_percentage": "生命百分比",
"health_sever_anomaly_filter": "Health + Sever + Anomaly Core",
"health_sever_filter": "生命+切断",
@@ -163,17 +202,22 @@
"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": "包含",
"infinite_buffs_location": "Infinite Buffs Location",
"inside": "里面",
"installations": "Installations",
"italic": "斜体",
"item_buffs": "Item Buffs",
"join_time": "加入时间",
"killcam": "击杀镜头",
"kunai": "Kunai",
@@ -197,8 +241,10 @@
"max_monster_updates_per_tick": "每次更新的最大怪物数量",
"max_value": "最大值",
"me": "我",
"melody_effects": "Melody Effects",
"menu_font": "菜单字体",
"menu_font_change_disclaimer": "多次改变字体或语言会导致崩溃!",
"misc_buffs": "Misc Buffs",
"mod_name": "MHR Overlay",
"mode": "模式",
"modifiers": "更改项",
@@ -224,6 +270,7 @@
"other": "Other",
"other_player_otomos": "其他玩家的随从",
"other_players": "其他玩家",
"otomo_moves": "Buddy Moves",
"otomos": "Buddies",
"outline": "轮廓",
"outside": "外面",
@@ -247,6 +294,7 @@
"quest_start_animation": "任务开始动画",
"quest_time": "任务时间",
"rage": "愤怒",
"rampage_skills": "Rampage Skills",
"reframework_outdated": "已安装的REFramework版本过低,请更新。否则MHR Overlay不能正常工作。",
"relative_offset": "相对偏移",
"rename": "重命名",
@@ -269,25 +317,30 @@
"show_other_player_otomos_separately": "分开显示其他玩家的随从",
"show_servant_otomos_separately": "分开显示盟友的随从",
"size": "大小",
"skills": "Skills",
"small_monster_UI": "小型怪物UI",
"small_monsters": "小型怪物群",
"sorting": "排序方式",
"spacing": "间距",
"stamina": "耐力",
"stamina_label": "Stamina Label",
"static_orientation": "固定方向",
"static_position": "固定位置",
"static_sorting": "固定排序",
"static_spacing": "固定间距",
"statically_positioned": "固定位置",
"stats_UI": "Stats UI",
"status": "状态",
"style": "样式",
"summary_screen": "总结界面",
"text_label": "文字标签",
"thickness": "粗细度",
"thunder_resistance_label": "Thunder Resistance Label",
"time_UI": "时间UI",
"time_label": "时间标签",
"time_limit": "时间限制(秒)",
"timer": "计时器",
"timer_delays": "Timer Delays",
"timer_label": "计时器标签",
"top_buildup": "最高积累值",
"top_damage": "Top Damage",
@@ -310,11 +363,22 @@
"tracked_damage_types": "跟踪的伤害类型",
"tracked_monster_types": "跟踪的怪物类型",
"type": "类型",
"update_buffs_delay": "Update Buffs (seconds)",
"update_is_online_delay": "Update Is Online (seconds)",
"update_myself_position_delay": "Update Myself Position (seconds)",
"update_player_info_delay": "Update Player Info (seconds)",
"update_players_delay": "Update Players (seconds)",
"update_quest_time_delay": "Update Quest Time (seconds)",
"update_singletons_delay": "Update Singletons (seconds)",
"update_window_size_delay": "Update Window Size (seconds)",
"use_d2d_if_available": "可用时使用Direct2D",
"value": "Value",
"value_label": "数字",
"vertical": "垂直",
"viewport_offset": "窗口偏移",
"visible": "可见",
"water_resistance_label": "Water Resistance Label",
"weapon_skills": "Weapon Skills",
"width": "宽度",
"world_offset": "整体偏移",
"wyvern_riding": "Wyvern Riding",
@@ -322,7 +386,89 @@
"y": "Y轴",
"z": "Z轴"
},
"dango_skills": {
"dango_adrenaline": "Dango Adrenaline",
"dango_booster": "Dango Booster",
"dango_bulker": "Dango Bulker",
"dango_connector": "Dango Connector",
"dango_defender": "Dango Defender",
"dango_flyer": "Dango Flyer",
"dango_glutton": "Dango Glutton",
"dango_hunter": "Dango Hunter",
"dango_insurance": "Dango Insurance",
"dango_insurance_defense_up": "Dango Insurance Defense Up",
"super_recovery_dango": "Super Recovery Dango"
},
"endemic_life": {
"butterflame": "Butterflame",
"clothfly": "Clothfly",
"cutterfly": "Cutterfly",
"gold_wirebug": "Gold Wirebug",
"peepersects": "Peepersects",
"red_lampsquid": "Red Lampsquid",
"ruby_wirebug": "Ruby Wirebug",
"stinkmink": "Stinkmink",
"yellow_lampsquid": "Yellow Lampsquid"
},
"font_name": "NotoSansSC-Bold.otf",
"item_buffs": {
"adamant_seed": "Adamant Seed",
"armor_ammo": "Armor Ammo",
"armorskin": "Armorskin",
"dash_juice": "Dash Juice",
"demon_ammo": "Demon Ammo",
"demon_powder": "Demon Powder",
"demondrug": "Demondrug",
"gourmet_fish": "Gourmet Fish",
"hardshell_powder": "Hardshell Powder",
"immunizer": "Immunizer",
"mega_armorskin": "Mega Armorskin",
"mega_demondrug": "Mega Demondrug",
"might_seed": "Might Seed"
},
"melody_effects": {
"affinity_up": "Affinity Up",
"attack_and_affinity_up": "Attack and Affinity Up",
"attack_and_defense_up": "Attack and Defense Up",
"attack_up": "Attack Up",
"blight_negated": "Blight Negated",
"defense_up": "Defense Up",
"divine_protection": "Divine Protection",
"earplugs_l": "Earplugs (L)",
"earplugs_s": "Earplugs (S)",
"elemental_attack_boost": "Elemental Attack Boost",
"environment_damage_negated": "Environment Damage Negated",
"health_recovery_l": "Health Recovery (L)",
"health_recovery_s": "Health Recovery (S)",
"health_recovery_s_antidote": "Health Recovery (S) + Antidote",
"health_regeneration": "Health Regeneration",
"infernal_melody": "Infernal Melody",
"knockbacks_negated": "Knockbacks Negated",
"self_improvement": "Self-Improvement",
"sharpness_extension": "Sharpness Extension",
"sharpness_loss_reduced": "Sharpness Loss Reduced",
"sharpness_regeneration": "Sharpness Regeneration",
"sonic_barrier": "Sonic Barrier",
"sonic_wave": "Sonic Wave",
"stamina_recovery_up": "Stamina Recovery Up",
"stamina_use_reduced": "Stamina Use Reduced",
"stun_negated": "Stun Negated",
"tremors_negated": "Tremors Negated",
"wind_pressure_negated": "Wind Pressure Negated"
},
"misc_buffs": {
"attack_up": "Attack Up",
"defense_up": "Defense Up",
"immunity": "Immunity",
"natural_healing_up": "Natural Healing Up",
"stamina_use_down": "Stamina Use Down"
},
"otomo_moves": {
"go_fight_win": "Go, Fight, Win",
"power_drum": "Power Drum",
"rousing_roar": "Rousing Roar",
"vase_of_vitality": "Vase of Vitality"
},
"parts": {
"abdomen": "腹部",
"amatsu_unknown": "?",
@@ -392,19 +538,169 @@
"wingclaws": "翼爪",
"wings": "翼"
},
"rampage_skills": {
"chameleos_soul": "Chameleos Soul",
"kushala_daora_soul": "Kushala Daora Soul"
},
"skills": {
"adrenaline_rush": "Adrenaline Rush",
"affinity_sliding": "Affinity Sliding",
"agitator": "Agitator",
"berserk": "Berserk",
"bladescale_hone": "Bladescale Hone",
"blood_awakening": "Blood Awakening",
"bloodlust": "Bloodlust",
"burst": "Burst",
"coalescence": "Coalescence",
"counterstrike": "Counterstrike",
"dereliction": "Dereliction",
"dragon_conversion_elemental_attack_up": "Dragon Conversion: Elem. Atk Up",
"dragon_conversion_elemental_res_up": "Dragon Conversion: Elem. Res Up",
"dragonheart": "Dragonheart",
"embolden": "Embolden",
"frenzied_bloodlust": "Frenzied Bloodlust",
"furious": "Furious",
"grinder_s": "Grinder (S)",
"heaven_sent": "Heaven-Sent",
"hellfire_cloak": "Hellfire Cloak",
"heroics": "Heroics",
"inspiration": "Inspiration",
"intrepid_heart": "Intrepid Heart",
"latent_power": "Latent Power",
"maximum_might": "Maximum Might",
"offensive_guard": "Offensive Guard",
"partbreaker": "Partbreaker",
"peak_performance": "Peak Performance",
"powder_mantle_blue": "Powder Mantle (Blue)",
"powder_mantle_red": "Powder Mantle (Red)",
"protective_polish": "Protective Polish",
"resentment": "Resentment",
"resuscitate": "Resuscitate",
"spiribirds_call": "Spiribird's Call",
"status_trigger": "Status Trigger",
"strife": "Strife",
"wall_runner": "Wall Runner",
"wind_mantle": "Wind Mantle"
},
"stats": {
"affinity": "Affinity",
"attack": "Attack",
"defense": "Defense",
"dragon": "Dragon",
"dragon_resistance": "Dragon Res",
"fire": "Fire",
"fire_resistance": "Fire Res",
"ice": "Ice",
"ice_resistance": "Ice Res",
"stamina": "Stamina",
"thunder": "Thunder",
"thunder_resistance": "Thunder Res",
"water": "Water",
"water_resistance": "Water Res"
},
"unicode_glyph_ranges": [
32,
255,
8192,
8303,
11904,
12031,
12288,
12543,
12784,
12799,
12351,
12800,
19903,
19968,
40879,
40959,
63744,
64255,
65072,
65103,
65280,
65519,
0
]
],
"weapon_skills": {
"bow": {
"arc_shot_affinity": "Arc Shot: Affinity",
"arc_shot_brace": "Arc Shot: Brace",
"bolt_boost": "Bolt Boost",
"herculean_draw": "Herculean Draw"
},
"charge_blade": {
"element_boost": "Element Boost",
"sword_boost_mode": "Sword Boost Mode"
},
"dual_blades": {
"archdemon_mode": "Archdemon Mode",
"ironshine_silk": "Ironshine Silk"
},
"great_sword": {
"power_sheathe": "Power Sheathe"
},
"gunlance": {
"erupting_cannon": "Erupting Cannon",
"ground_splitter": "Ground Splitter"
},
"hammer": {
"impact_burst": "Impact Burst"
},
"heavy_bowgun": {
"counter_charger": "Counter Charger",
"overheat": "Overheat",
"rising_moon": "Rising Moon",
"setting_sun": "Setting Sun",
"wyvernsnipe_reload": "Wyvernsnipe Reload"
},
"hunting_horn": {
"bead_of_resonance": "Bead of Resonance",
"silkbind_shockwave": "Silkbind Shockwave",
"sonic_bloom": "Sonic Bloom"
},
"insect_glaive": {
"all_extracts_mix": "All Extracts Mix",
"orange_extract": "Orange Extract",
"red_extract": "Red Extract",
"white_extract": "White Extract"
},
"lance": {
"anchor_rage": "Anchor Rage",
"spiral_thrust": "Spiral Thrust",
"twin_wine": "Twin Wine"
},
"light_bowgun": {
"fanning_maneuver": "Fanning Maneuver",
"wyvernblast_reload": "Wyvernblast Reload"
},
"long_sword": {
"harvest_moon": "Harvest Moon",
"iai_slash": "Iai Slash",
"soaring_kick": "Soaring Kick",
"spirit_gauge": "Spirit Gauge",
"spirit_gauge_autofill": "Spirit Gauge Autofill"
},
"switch_axe": {
"amped_state": "Amped State",
"axe_heavy_slam": "Axe: Heavy Slam",
"switch_charger": "Switch Charger"
},
"sword_and_shield": {
"destroyer_oil": "Destroyer Oil"
}
},
"weapons": {
"bow": "Bow",
"charge_blade": "Charge Blade",
"dual_blades": "Dual Blades",
"great_sword": "Great Sword",
"gunlance": "Gunlance",
"hammer": "Hammer",
"heavy_bowgun": "Heavy Bowgun",
"hunting_horn": "Hunting Horn",
"insect_glaive": "Insect Glaive",
"lance": "Lance",
"light_bowgun": "Light Bowgun",
"long_sword": "Long Sword",
"switch_axe": "Switch Axe",
"sword_and_shield": "Sword & Shield"
}
}
@@ -3,6 +3,7 @@
"HP": "生命:",
"buildup": "累積值:",
"gold": "金冠",
"lv": "",
"mini": "小型",
"otomo": "Buddy",
"part_anomaly_core": "Anomaly Core",
@@ -18,30 +19,54 @@
},
"ailments": {
"blast": "爆破",
"blastblight": "Blastblight",
"bleeding": "Bleeding",
"bloodblight": "Bloodblight",
"deadly_poison": "Deadly Poison",
"defense_down": "Defense Down",
"dragonblight": "Dragonblight",
"dung_bomb": "異臭",
"engulfed": "Engulfed",
"exhaust": "疲勞",
"fall_otomo_trap": "隨從地洞陷阱",
"fall_trap": "地洞陷阱",
"falling_asleep": "Falling Asleep",
"fireblight": "火屬性異常",
"flash": "失明",
"frenzy": "Frenzy",
"frenzy_infection": "Frenzy Infection",
"frenzy_overcome": "Frenzy Overcome",
"frostblight": "Frostblight",
"hellfireblight": "Hellfireblight",
"iceblight": "冰屬性異常",
"leeched": "Leeched",
"major_bubbleblight": "Major Bubbleblight",
"minor_bubbleblight": "Minor Bubbleblight",
"muck": "Muck",
"paralysis": "麻痺",
"poison": "毒",
"quick_sand": "流沙",
"resistance_down": "Resistance Down",
"ride": "操龍",
"roar": "Roar",
"shock_otomo_trap": "隨從麻痺陷阱",
"shock_trap": "麻痺陷阱",
"sleep": "睡眠",
"steel_fang": "獵犬鋼牙",
"stench": "Stench",
"stun": "暈眩",
"thunderblight": "雷屬性異常",
"tranq_bomb": "麻醉",
"waterblight": "水屬性異常"
"tremor": "Tremor",
"waterblight": "水屬性異常",
"webbed": "Webbed"
},
"customization_menu": {
"UI_font": "UI 字型",
"UI_font_notice": "當更改文字時,請重新載入",
"abnormal_statuses": "Abnormal Statuses",
"activation_count": "觸發次數",
"affinity_label": "Affinity Label",
"ailment_buildups": "異常狀態累積值",
"ailment_name": "異常狀態",
"ailment_name_label": "異常狀態名稱",
@@ -55,6 +80,7 @@
"anomaly_health_percentage": "Anomaly Core Health Percentage",
"apply": "套用",
"assign_new_key": "指定新按鍵",
"attack_label": "Attack Label",
"auto_highlight": "自動高亮",
"background": "圖形化顯示條的背景底色",
"bar": "圖形化顯示條",
@@ -92,6 +118,7 @@
"crown": "皇冠",
"crown_thresholds": "皇冠的大小判定範圍",
"current_state": "Current State",
"current_time": "Current Time",
"current_value": "Current Value",
"cutscene": "Cutscene",
"damage": "傷害",
@@ -100,26 +127,36 @@
"damage_meter_UI": "傷害量計算 UI",
"damage_percentage_label": "傷害量百分比",
"damage_value_label": "傷害量",
"dango_skills": "Dango Skills",
"debug": "Debug",
"default_state": "Default State",
"defense_label": "Defense Label",
"delete": "Delete",
"distance": "距離",
"dps": "DPS",
"dps_label": "DPS文字",
"dps_mode": "DPS模式",
"dragon_resistance_label": "Dragon Resistance Label",
"duplicate": "Duplicate",
"duration": "Duration",
"dynamic_positioning": "浮動的資訊位置",
"dynamically_positioned": "浮動的魔物資訊",
"effect_level": "Effect Level",
"element_2_label": "Element 2 Label",
"element_label": "Element Label",
"enable_for": "啟用對象",
"enabled": "啟用",
"endemic_life": "Endemic Life",
"endemic_life_UI": "環境生物 UI",
"endemic_life_buffs": "Endemic Life Buffs",
"everything_seems_to_be_ok": "Everything seems to be OK!",
"family": "字體",
"farthest": "最遠的",
"fight_time": "戰鬥時間",
"fill_direction": "Fill Direction",
"filter": "篩選器",
"filter_mode": "Filter Mode",
"fire_resistance_label": "Fire Resistance Label",
"first": "第一",
"first_hit": "第一擊",
"flinch_count": "膽怯次數",
@@ -128,6 +165,7 @@
"global_position_modifier": "全域位置更改",
"global_scale_modifier": "全域比例更改",
"global_settings": "全域設定",
"head_tracking": "Head Tracking",
"health": "血量",
"health_anomaly_filter": "Health + Anomaly Core",
"health_break_anomaly_filter": "Health + Break + Anomaly Core",
@@ -135,6 +173,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,17 +202,22 @@
"highlighted_buildup_bar": "重點累積條",
"highlighted_damage_bar": "重點傷害條",
"highlighted_targeted": "鎖定的魔物資訊(目標)",
"history": "History",
"history_size": "History Size",
"horizontal": "水平",
"hotkeys": "快捷鍵",
"hunter_rank": "獵人等級",
"hunter_rank_label": "獵人等級",
"ice_resistance_label": "Ice Resistance Label",
"id": "ID",
"in_lobby": "In Lobby",
"in_training_area": "In Training Area",
"include": "細部資訊調整",
"infinite_buffs_location": "Infinite Buffs Location",
"inside": "內部",
"installations": "Installations",
"italic": "斜體",
"item_buffs": "Item Buffs",
"join_time": "加入時間",
"killcam": "Killcam",
"kunai": "Kunai",
@@ -197,8 +241,10 @@
"max_monster_updates_per_tick": "每次更新的最大魔物數量",
"max_value": "Max Value",
"me": "我",
"melody_effects": "Melody Effects",
"menu_font": "選單字體大小",
"menu_font_change_disclaimer": "重複變更語言和選單字型大小有可能會當機!",
"misc_buffs": "Misc Buffs",
"mod_name": "MHR Overlay",
"mode": "Mode",
"modifiers": "更改項",
@@ -224,6 +270,7 @@
"other": "Other",
"other_player_otomos": "Other Player Buddies",
"other_players": "其他玩家",
"otomo_moves": "Buddy Moves",
"otomos": "Buddies",
"outline": "描邊",
"outside": "外部",
@@ -247,6 +294,7 @@
"quest_start_animation": "Quest Start Animation",
"quest_time": "任務時間",
"rage": "憤怒度",
"rampage_skills": "Rampage Skills",
"reframework_outdated": "已安裝的 REFramework 版本已過期. 麻煩請更新版本, 否則 MHR Overlay 無法正確作用.",
"relative_offset": "相對偏移",
"rename": "Rename",
@@ -269,25 +317,30 @@
"show_other_player_otomos_separately": "Show Other Player Buddies separately",
"show_servant_otomos_separately": "Show Follower Buddies separately",
"size": "大小",
"skills": "Skills",
"small_monster_UI": "小型魔物 UI",
"small_monsters": "小型魔物群",
"sorting": "排序方式",
"spacing": "間距",
"stamina": "耐力",
"stamina_label": "Stamina Label",
"static_orientation": "固定魔物資訊的對齊方式",
"static_position": "固定魔物資訊的位置",
"static_sorting": "固定魔物資訊的排序",
"static_spacing": "固定魔物資訊的間距",
"statically_positioned": "固定的魔物資訊",
"stats_UI": "Stats UI",
"status": "狀態",
"style": "樣式",
"summary_screen": "Summary Screen",
"text_label": "文字",
"thickness": "粗細",
"thunder_resistance_label": "Thunder Resistance Label",
"time_UI": "時間 UI",
"time_label": "時間",
"time_limit": "時限 (秒)",
"timer": "Timer",
"timer_delays": "Timer Delays",
"timer_label": "計時器",
"top_buildup": "最高累積值",
"top_damage": "最高傷害",
@@ -310,11 +363,22 @@
"tracked_damage_types": "追蹤的傷害類型",
"tracked_monster_types": "追蹤的魔物類型",
"type": "類型",
"update_buffs_delay": "Update Buffs (seconds)",
"update_is_online_delay": "Update Is Online (seconds)",
"update_myself_position_delay": "Update Myself Position (seconds)",
"update_player_info_delay": "Update Player Info (seconds)",
"update_players_delay": "Update Players (seconds)",
"update_quest_time_delay": "Update Quest Time (seconds)",
"update_singletons_delay": "Update Singletons (seconds)",
"update_window_size_delay": "Update Window Size (seconds)",
"use_d2d_if_available": "Use Direct2D if available",
"value": "Value",
"value_label": "數字",
"vertical": "垂直",
"viewport_offset": "視窗的位置",
"visible": "可見",
"water_resistance_label": "Water Resistance Label",
"weapon_skills": "Weapon Skills",
"width": "寬度",
"world_offset": "地圖中的位置",
"wyvern_riding": "Wyvern Riding",
@@ -322,7 +386,89 @@
"y": "Y軸",
"z": "Z軸"
},
"dango_skills": {
"dango_adrenaline": "Dango Adrenaline",
"dango_booster": "Dango Booster",
"dango_bulker": "Dango Bulker",
"dango_connector": "Dango Connector",
"dango_defender": "Dango Defender",
"dango_flyer": "Dango Flyer",
"dango_glutton": "Dango Glutton",
"dango_hunter": "Dango Hunter",
"dango_insurance": "Dango Insurance",
"dango_insurance_defense_up": "Dango Insurance Defense Up",
"super_recovery_dango": "Super Recovery Dango"
},
"endemic_life": {
"butterflame": "Butterflame",
"clothfly": "Clothfly",
"cutterfly": "Cutterfly",
"gold_wirebug": "Gold Wirebug",
"peepersects": "Peepersects",
"red_lampsquid": "Red Lampsquid",
"ruby_wirebug": "Ruby Wirebug",
"stinkmink": "Stinkmink",
"yellow_lampsquid": "Yellow Lampsquid"
},
"font_name": "NotoSansTC-Bold.otf",
"item_buffs": {
"adamant_seed": "Adamant Seed",
"armor_ammo": "Armor Ammo",
"armorskin": "Armorskin",
"dash_juice": "Dash Juice",
"demon_ammo": "Demon Ammo",
"demon_powder": "Demon Powder",
"demondrug": "Demondrug",
"gourmet_fish": "Gourmet Fish",
"hardshell_powder": "Hardshell Powder",
"immunizer": "Immunizer",
"mega_armorskin": "Mega Armorskin",
"mega_demondrug": "Mega Demondrug",
"might_seed": "Might Seed"
},
"melody_effects": {
"affinity_up": "Affinity Up",
"attack_and_affinity_up": "Attack and Affinity Up",
"attack_and_defense_up": "Attack and Defense Up",
"attack_up": "Attack Up",
"blight_negated": "Blight Negated",
"defense_up": "Defense Up",
"divine_protection": "Divine Protection",
"earplugs_l": "Earplugs (L)",
"earplugs_s": "Earplugs (S)",
"elemental_attack_boost": "Elemental Attack Boost",
"environment_damage_negated": "Environment Damage Negated",
"health_recovery_l": "Health Recovery (L)",
"health_recovery_s": "Health Recovery (S)",
"health_recovery_s_antidote": "Health Recovery (S) + Antidote",
"health_regeneration": "Health Regeneration",
"infernal_melody": "Infernal Melody",
"knockbacks_negated": "Knockbacks Negated",
"self_improvement": "Self-Improvement",
"sharpness_extension": "Sharpness Extension",
"sharpness_loss_reduced": "Sharpness Loss Reduced",
"sharpness_regeneration": "Sharpness Regeneration",
"sonic_barrier": "Sonic Barrier",
"sonic_wave": "Sonic Wave",
"stamina_recovery_up": "Stamina Recovery Up",
"stamina_use_reduced": "Stamina Use Reduced",
"stun_negated": "Stun Negated",
"tremors_negated": "Tremors Negated",
"wind_pressure_negated": "Wind Pressure Negated"
},
"misc_buffs": {
"attack_up": "Attack Up",
"defense_up": "Defense Up",
"immunity": "Immunity",
"natural_healing_up": "Natural Healing Up",
"stamina_use_down": "Stamina Use Down"
},
"otomo_moves": {
"go_fight_win": "Go, Fight, Win",
"power_drum": "Power Drum",
"rousing_roar": "Rousing Roar",
"vase_of_vitality": "Vase of Vitality"
},
"parts": {
"abdomen": "腹部",
"amatsu_unknown": "?",
@@ -392,19 +538,169 @@
"wingclaws": "翼爪",
"wings": "翅膀"
},
"rampage_skills": {
"chameleos_soul": "Chameleos Soul",
"kushala_daora_soul": "Kushala Daora Soul"
},
"skills": {
"adrenaline_rush": "Adrenaline Rush",
"affinity_sliding": "Affinity Sliding",
"agitator": "Agitator",
"berserk": "Berserk",
"bladescale_hone": "Bladescale Hone",
"blood_awakening": "Blood Awakening",
"bloodlust": "Bloodlust",
"burst": "Burst",
"coalescence": "Coalescence",
"counterstrike": "Counterstrike",
"dereliction": "Dereliction",
"dragon_conversion_elemental_attack_up": "Dragon Conversion: Elem. Atk Up",
"dragon_conversion_elemental_res_up": "Dragon Conversion: Elem. Res Up",
"dragonheart": "Dragonheart",
"embolden": "Embolden",
"frenzied_bloodlust": "Frenzied Bloodlust",
"furious": "Furious",
"grinder_s": "Grinder (S)",
"heaven_sent": "Heaven-Sent",
"hellfire_cloak": "Hellfire Cloak",
"heroics": "Heroics",
"inspiration": "Inspiration",
"intrepid_heart": "Intrepid Heart",
"latent_power": "Latent Power",
"maximum_might": "Maximum Might",
"offensive_guard": "Offensive Guard",
"partbreaker": "Partbreaker",
"peak_performance": "Peak Performance",
"powder_mantle_blue": "Powder Mantle (Blue)",
"powder_mantle_red": "Powder Mantle (Red)",
"protective_polish": "Protective Polish",
"resentment": "Resentment",
"resuscitate": "Resuscitate",
"spiribirds_call": "Spiribird's Call",
"status_trigger": "Status Trigger",
"strife": "Strife",
"wall_runner": "Wall Runner",
"wind_mantle": "Wind Mantle"
},
"stats": {
"affinity": "Affinity",
"attack": "Attack",
"defense": "Defense",
"dragon": "Dragon",
"dragon_resistance": "Dragon Res",
"fire": "Fire",
"fire_resistance": "Fire Res",
"ice": "Ice",
"ice_resistance": "Ice Res",
"stamina": "Stamina",
"thunder": "Thunder",
"thunder_resistance": "Thunder Res",
"water": "Water",
"water_resistance": "Water Res"
},
"unicode_glyph_ranges": [
32,
255,
8192,
8303,
11904,
12031,
12288,
12543,
12784,
12799,
12351,
12800,
19903,
19968,
40879,
40959,
63744,
64255,
65072,
65103,
65280,
65519,
0
]
],
"weapon_skills": {
"bow": {
"arc_shot_affinity": "Arc Shot: Affinity",
"arc_shot_brace": "Arc Shot: Brace",
"bolt_boost": "Bolt Boost",
"herculean_draw": "Herculean Draw"
},
"charge_blade": {
"element_boost": "Element Boost",
"sword_boost_mode": "Sword Boost Mode"
},
"dual_blades": {
"archdemon_mode": "Archdemon Mode",
"ironshine_silk": "Ironshine Silk"
},
"great_sword": {
"power_sheathe": "Power Sheathe"
},
"gunlance": {
"erupting_cannon": "Erupting Cannon",
"ground_splitter": "Ground Splitter"
},
"hammer": {
"impact_burst": "Impact Burst"
},
"heavy_bowgun": {
"counter_charger": "Counter Charger",
"overheat": "Overheat",
"rising_moon": "Rising Moon",
"setting_sun": "Setting Sun",
"wyvernsnipe_reload": "Wyvernsnipe Reload"
},
"hunting_horn": {
"bead_of_resonance": "Bead of Resonance",
"silkbind_shockwave": "Silkbind Shockwave",
"sonic_bloom": "Sonic Bloom"
},
"insect_glaive": {
"all_extracts_mix": "All Extracts Mix",
"orange_extract": "Orange Extract",
"red_extract": "Red Extract",
"white_extract": "White Extract"
},
"lance": {
"anchor_rage": "Anchor Rage",
"spiral_thrust": "Spiral Thrust",
"twin_wine": "Twin Wine"
},
"light_bowgun": {
"fanning_maneuver": "Fanning Maneuver",
"wyvernblast_reload": "Wyvernblast Reload"
},
"long_sword": {
"harvest_moon": "Harvest Moon",
"iai_slash": "Iai Slash",
"soaring_kick": "Soaring Kick",
"spirit_gauge": "Spirit Gauge",
"spirit_gauge_autofill": "Spirit Gauge Autofill"
},
"switch_axe": {
"amped_state": "Amped State",
"axe_heavy_slam": "Axe: Heavy Slam",
"switch_charger": "Switch Charger"
},
"sword_and_shield": {
"destroyer_oil": "Destroyer Oil"
}
},
"weapons": {
"bow": "Bow",
"charge_blade": "Charge Blade",
"dual_blades": "Dual Blades",
"great_sword": "Great Sword",
"gunlance": "Gunlance",
"hammer": "Hammer",
"heavy_bowgun": "Heavy Bowgun",
"hunting_horn": "Hunting Horn",
"insect_glaive": "Insect Glaive",
"lance": "Lance",
"light_bowgun": "Light Bowgun",
"long_sword": "Long Sword",
"switch_axe": "Switch Axe",
"sword_and_shield": "Sword & Shield"
}
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.