diff --git a/reframework/autorun/MHR_Overlay/Damage_Meter/damage_hook.lua b/reframework/autorun/MHR_Overlay/Damage_Meter/damage_hook.lua index 3eed8a7..67dbe0a 100644 --- a/reframework/autorun/MHR_Overlay/Damage_Meter/damage_hook.lua +++ b/reframework/autorun/MHR_Overlay/Damage_Meter/damage_hook.lua @@ -22,12 +22,72 @@ local get_elemental_damage_method = enemy_calc_damage_info_type_def:get_method(" local get_condition_damage_method = enemy_calc_damage_info_type_def:get_method("get_ConditionDamage"); local get_condition_type_method = enemy_calc_damage_info_type_def:get_method("get_ConditionDamageType"); +local types = { + [0] = "PlayerWeapon", + [1] = "BarrelBombLarge", + [2] = "Makimushi", + [3] = "Nitro", + [4] = "OnibiMine", + [5] = "BallistaHate", + [6] = "CaptureSmokeBomb", + [7] = "CaptureBullet", + [8] = "BarrelBombSmall", + [9] = "Kunai", + [10] = "WaterBeetle", + [11] = "DetonationGrenade", + [12] = "Kabutowari", + [13] = "FlashBoll", -- Flash Bomb + [14] = "HmBallista", + [15] = "HmCannon", + [16] = "HmGatling", + [17] = "HmTrap", + [18] = "HmNpc", + [19] = "HmFlameThrower", + [20] = "HmDragnator", + [21] = "Otomo", + [22] = "OtAirouShell014", + [23] = "OtAirouShell102", + [24] = "Fg005", + [25] = "EcBatExplode", + [26] = "EcWallTrapBugExplode", + [27] = "EcPiranha", + [28] = "EcFlash", + [29] = "EcSandWallShooter", + [30] = "EcForestWallShooter", + [31] = "EcSwampLeech", + [32] = "EcPenetrateFish", + [33] = "Max", + [34] = "Invalid" +} + +function damage_hook.get_damage_source_type(damage_source_type_id, is_marionette_attack) + if is_marionette_attack then + return "wyvern riding"; + elseif damage_source_type_id == 0 or damage_source_type_id == 7 or damage_source_type_id == 11 or damage_source_type_id == 13 then + return "player"; + elseif damage_source_type_id == 1 or damage_source_type_id == 8 then + return "bomb"; + elseif damage_source_type_id == 9 then + return "kunai"; + elseif damage_source_type_id >= 14 and damage_source_type_id <= 20 then + return "installation"; + elseif damage_source_type_id >= 21 and damage_source_type_id <= 23 then + return "otomo"; + elseif damage_source_type_id >= 25 and damage_source_type_id <= 32 then + return "endemic life"; + elseif damage_source_type_id == 34 then + return "other"; + end + + return tostring(damage_source_type_id); +end + function damage_hook.update_damage(args) local enemy = sdk.to_managed_object(args[2]); if enemy == nil then return; end - + local is_large_monster = is_boss_enemy_method:call(enemy); if is_large_monster == nil then @@ -63,6 +123,8 @@ function damage_hook.update_damage(args) end end + -- get_Em2EmDamageType() + local damage_object = {} damage_object.total_damage = get_total_damage_method:call(enemy_calc_damage_info); damage_object.physical_damage = get_physical_damage_method:call(enemy_calc_damage_info); @@ -72,35 +134,47 @@ function damage_hook.update_damage(args) local condition_damage = get_condition_damage_method:call(enemy_calc_damage_info); local condition_type = tonumber(get_condition_type_method:call(enemy_calc_damage_info)); - -- -1 - bombs - -- 0 - player - -- 9 - kunai - -- 11 - wyverblast - -- 12 - ballista - -- 13 - cannon - -- 14 - machine cannon - -- 16 - defender ballista/cannon - -- 17 - wyvernfire artillery - -- 18 - dragonator - -- 19 - otomo - -- 23 - monster + -- 0 - PlayerWeapon + -- 1 - BarrelBombLarge + -- 2 - Makimushi + -- 3 - Nitro + -- 4 - OnibiMine + -- 5 - BallistaHate + -- 6 - CaptureSmokeBomb + -- 7 - CaptureBullet + -- 8 - BarrelBombSmall + -- 9 - Kunai + -- 10 - WaterBeetle + -- 11 - DetonationGrenade + -- 12 - Kabutowari + -- 13 - FlashBoll + -- 14 - HmBallista + -- 15 - HmCannon + -- 16 - HmGatling + -- 17 - HmTrap + -- 18 - HmNpc + -- 19 - HmFlameThrower + -- 20 - HmDragnator + -- 21 - Otomo + -- 22 - OtAirouShell014 + -- 23 - OtAirouShell102 + -- 24 - Fg005 + -- 25 - EcBatExplode + -- 26 - EcWallTrapBugExplode + -- 27 - EcPiranha + -- 28 - EcFlash + -- 29 - EcSandWallShooter + -- 30 - EcForestWallShooter + -- 31 - EcSwampLeech + -- 32 - EcPenetrateFish - local damage_source_type = tostring(attacker_type); - if attacker_type == 0 then - damage_source_type = "player"; - elseif attacker_type == 1 then - damage_source_type = "bomb"; - elseif attacker_type == 9 then - damage_source_type = "kunai"; - elseif attacker_type == 11 then - damage_source_type = "wyvernblast"; - elseif attacker_type == 12 or attacker_type == 13 or attacker_type == 14 or attacker_type == 18 then - damage_source_type = "installation"; - elseif attacker_type == 19 then - damage_source_type = "otomo"; - elseif attacker_type == 23 then - damage_source_type = "monster"; - end + + xy = "\nPlayer: " .. tostring(attacker_id) .. + "\nDamage: " .. tostring(damage_object.total_damage) .. + "\nType: (" .. tostring(attacker_type) .. + ") " .. tostring(types[attacker_type]); + + local damage_source_type = damage_hook.get_damage_source_type(attacker_type, is_marionette_attack); local attacking_player = player.get_player(attacker_id); @@ -116,7 +190,6 @@ function damage_hook.update_damage(args) ailments.apply_ailment_buildup(monster, attacker_id, ailments.stun_id, stun_damage); end - ailments.apply_ailment_buildup(monster, attacker_id, condition_type, condition_damage); player.update_damage(player.total, damage_source_type, is_large_monster, damage_object); diff --git a/reframework/autorun/MHR_Overlay/Damage_Meter/player.lua b/reframework/autorun/MHR_Overlay/Damage_Meter/player.lua index b0d4271..af45fd8 100644 --- a/reframework/autorun/MHR_Overlay/Damage_Meter/player.lua +++ b/reframework/autorun/MHR_Overlay/Damage_Meter/player.lua @@ -56,11 +56,11 @@ function player.new(player_id, player_name, player_master_rank, player_hunter_ra new_player.small_monsters.otomo.elemental_damage = 0; new_player.small_monsters.otomo.ailment_damage = 0; - new_player.small_monsters.monster = {}; - new_player.small_monsters.monster.total_damage = 0; - new_player.small_monsters.monster.physical_damage = 0; - new_player.small_monsters.monster.elemental_damage = 0; - new_player.small_monsters.monster.ailment_damage = 0; + new_player.small_monsters.wyvern_riding = {}; + new_player.small_monsters.wyvern_riding.total_damage = 0; + new_player.small_monsters.wyvern_riding.physical_damage = 0; + new_player.small_monsters.wyvern_riding.elemental_damage = 0; + new_player.small_monsters.wyvern_riding.ailment_damage = 0; new_player.small_monsters.poison = {}; new_player.small_monsters.poison.total_damage = 0; @@ -74,6 +74,18 @@ function player.new(player_id, player_name, player_master_rank, player_hunter_ra new_player.small_monsters.blast.elemental_damage = 0; new_player.small_monsters.blast.ailment_damage = 0; + new_player.small_monsters.endemic_life = {}; + new_player.small_monsters.endemic_life.total_damage = 0; + new_player.small_monsters.endemic_life.physical_damage = 0; + new_player.small_monsters.endemic_life.elemental_damage = 0; + new_player.small_monsters.endemic_life.ailment_damage = 0; + + new_player.small_monsters.other = {}; + new_player.small_monsters.other.total_damage = 0; + new_player.small_monsters.other.physical_damage = 0; + new_player.small_monsters.other.elemental_damage = 0; + new_player.small_monsters.other.ailment_damage = 0; + new_player.large_monsters = {}; new_player.large_monsters.total_damage = 0; @@ -105,11 +117,11 @@ function player.new(player_id, player_name, player_master_rank, player_hunter_ra new_player.large_monsters.otomo.elemental_damage = 0; new_player.large_monsters.otomo.ailment_damage = 0; - new_player.large_monsters.monster = {}; - new_player.large_monsters.monster.total_damage = 0; - new_player.large_monsters.monster.physical_damage = 0; - new_player.large_monsters.monster.elemental_damage = 0; - new_player.large_monsters.monster.ailment_damage = 0; + new_player.large_monsters.wyvern_riding = {}; + new_player.large_monsters.wyvern_riding.total_damage = 0; + new_player.large_monsters.wyvern_riding.physical_damage = 0; + new_player.large_monsters.wyvern_riding.elemental_damage = 0; + new_player.large_monsters.wyvern_riding.ailment_damage = 0; new_player.large_monsters.poison = {}; new_player.large_monsters.poison.total_damage = 0; @@ -123,6 +135,18 @@ function player.new(player_id, player_name, player_master_rank, player_hunter_ra new_player.large_monsters.blast.elemental_damage = 0; new_player.large_monsters.blast.ailment_damage = 0; + new_player.large_monsters.endemic_life = {}; + new_player.large_monsters.endemic_life.total_damage = 0; + new_player.large_monsters.endemic_life.physical_damage = 0; + new_player.large_monsters.endemic_life.elemental_damage = 0; + new_player.large_monsters.endemic_life.ailment_damage = 0; + + new_player.large_monsters.other = {}; + new_player.large_monsters.other.total_damage = 0; + new_player.large_monsters.other.physical_damage = 0; + new_player.large_monsters.other.elemental_damage = 0; + new_player.large_monsters.other.ailment_damage = 0; + new_player.display = {}; new_player.display.total_damage = 0; new_player.display.physical_damage = 0; @@ -156,25 +180,27 @@ function player.update_damage(_player, damage_source_type, is_large_monster, dam if is_large_monster then player_monster_type = _player.large_monsters; end - + if damage_source_type == "player" then player.merge_damage(player_monster_type, damage_object); elseif damage_source_type == "bomb" then player.merge_damage(player_monster_type.bombs, damage_object); elseif damage_source_type == "kunai" then player.merge_damage(player_monster_type.kunai, damage_object); - elseif damage_source_type == "wyvernblast" then - player.merge_damage(player_monster_type, damage_object); elseif damage_source_type == "installation" then player.merge_damage(player_monster_type.installations, damage_object); elseif damage_source_type == "otomo" then player.merge_damage(player_monster_type.otomo, damage_object); - elseif damage_source_type == "monster" then - player.merge_damage(player_monster_type.monster, damage_object); + elseif damage_source_type == "wyvern riding" then + player.merge_damage(player_monster_type.wyvern_riding, damage_object); elseif damage_source_type == "poison" then player.merge_damage(player_monster_type.poison, damage_object); elseif damage_source_type == "blast" then player.merge_damage(player_monster_type.blast, damage_object); + elseif damage_source_type == "endemic life" then + player.merge_damage(player_monster_type.endemic_life, damage_object); + elseif damage_source_type == "other" then + player.merge_damage(player_monster_type.other, damage_object); else player.merge_damage(player_monster_type, damage_object); end @@ -214,9 +240,9 @@ function player.update_display(_player) if cached_config.tracked_damage_types.otomo_damage then player.merge_damage(_player.display, _player.small_monsters.otomo); end - - if cached_config.tracked_damage_types.monster_damage then - player.merge_damage(_player.display, _player.small_monsters.monster); + + if cached_config.tracked_damage_types.wyvern_riding_damage then + player.merge_damage(_player.display, _player.small_monsters.wyvern_riding); end if cached_config.tracked_damage_types.poison_damage then @@ -226,6 +252,14 @@ function player.update_display(_player) if cached_config.tracked_damage_types.blast_damage then player.merge_damage(_player.display, _player.small_monsters.blast); end + + if cached_config.tracked_damage_types.endemic_life_damage then + player.merge_damage(_player.display, _player.small_monsters.endemic_life); + end + + if cached_config.tracked_damage_types.other_damage then + player.merge_damage(_player.display, _player.small_monsters.other); + end end if cached_config.tracked_monster_types.large_monsters then @@ -248,9 +282,9 @@ function player.update_display(_player) if cached_config.tracked_damage_types.otomo_damage then player.merge_damage(_player.display, _player.large_monsters.otomo); end - - if cached_config.tracked_damage_types.monster_damage then - player.merge_damage(_player.display, _player.large_monsters.monster); + + if cached_config.tracked_damage_types.wyvern_riding_damage then + player.merge_damage(_player.display, _player.large_monsters.wyvern_riding); end if cached_config.tracked_damage_types.poison_damage then @@ -260,6 +294,14 @@ function player.update_display(_player) if cached_config.tracked_damage_types.blast_damage then player.merge_damage(_player.display, _player.large_monsters.blast); end + + if cached_config.tracked_damage_types.endemic_life_damage then + player.merge_damage(_player.display, _player.large_monsters.endemic_life); + end + + if cached_config.tracked_damage_types.other_damage then + player.merge_damage(_player.display, _player.large_monsters.other); + end end end diff --git a/reframework/autorun/MHR_Overlay/Misc/config.lua b/reframework/autorun/MHR_Overlay/Misc/config.lua index fd03ffb..e4ae4c1 100644 --- a/reframework/autorun/MHR_Overlay/Misc/config.lua +++ b/reframework/autorun/MHR_Overlay/Misc/config.lua @@ -3752,9 +3752,11 @@ function config.init() kunai_damage = true, installation_damage = true, -- hunting_installations like ballista, cannon, etc. otomo_damage = true, - monster_damage = true, -- note that installations during narwa fight are counted as monster damage + wyvern_riding_damage = true, poison_damage = true, blast_damage = true, + endemic_life_damage = true, + other_damage = true -- note that installations during narwa fight are counted as other damage }, spacing = { diff --git a/reframework/autorun/MHR_Overlay/Misc/language.lua b/reframework/autorun/MHR_Overlay/Misc/language.lua index 2bf61bd..fbe2c12 100644 --- a/reframework/autorun/MHR_Overlay/Misc/language.lua +++ b/reframework/autorun/MHR_Overlay/Misc/language.lua @@ -366,7 +366,11 @@ language.default_language = { menu_font_change_disclaimer = "Changing Language and Menu Font Size several times will cause a crash!", - master_rank = "Master Rank" + master_rank = "Master Rank", + + other_damage = "Other Damage", + wyvern_riding_damage = "Wyvern Riding Damage", + endemic_life_damage = "Endemic Life Damage" } }; diff --git a/reframework/autorun/MHR_Overlay/Monsters/ailments.lua b/reframework/autorun/MHR_Overlay/Monsters/ailments.lua index dd6b9d1..8f528e6 100644 --- a/reframework/autorun/MHR_Overlay/Monsters/ailments.lua +++ b/reframework/autorun/MHR_Overlay/Monsters/ailments.lua @@ -807,7 +807,6 @@ function ailments.apply_ailment_damage(monster, ailment_type, ailment_damage) local damage = ailment_damage; -- split up damage according to ratio of buildup on boss for this type - xy = "." .. tostring(buildup_share); for attacker_id, percentage in pairs(buildup_share) do local damage_portion = damage * percentage; diff --git a/reframework/autorun/MHR_Overlay/UI/customization_menu.lua b/reframework/autorun/MHR_Overlay/UI/customization_menu.lua index b08cf7d..dfcf856 100644 --- a/reframework/autorun/MHR_Overlay/UI/customization_menu.lua +++ b/reframework/autorun/MHR_Overlay/UI/customization_menu.lua @@ -15177,8 +15177,8 @@ function customization_menu.draw() damage_meter_UI_changed = damage_meter_UI_changed or changed; tracked_damage_types_changed = tracked_damage_types_changed or changed; - changed, config.current_config.damage_meter_UI.tracked_damage_types.monster_damage = imgui.checkbox(language.current_language - .customization_menu.monster_damage, config.current_config.damage_meter_UI.tracked_damage_types.monster_damage); + changed, config.current_config.damage_meter_UI.tracked_damage_types.wyvern_riding_damage = imgui.checkbox(language.current_language + .customization_menu.wyvern_riding_damage, config.current_config.damage_meter_UI.tracked_damage_types.wyvern_riding_damage); config_changed = config_changed or changed; damage_meter_UI_changed = damage_meter_UI_changed or changed; tracked_damage_types_changed = tracked_damage_types_changed or changed; @@ -15195,6 +15195,18 @@ function customization_menu.draw() damage_meter_UI_changed = damage_meter_UI_changed or changed; tracked_damage_types_changed = tracked_damage_types_changed or changed; + changed, config.current_config.damage_meter_UI.tracked_damage_types.endemic_life_damage = imgui.checkbox(language.current_language + .customization_menu.endemic_life_damage, config.current_config.damage_meter_UI.tracked_damage_types.endemic_life_damage); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + tracked_damage_types_changed = tracked_damage_types_changed or changed; + + changed, config.current_config.damage_meter_UI.tracked_damage_types.other_damage = imgui.checkbox(language.current_language + .customization_menu.other_damage, config.current_config.damage_meter_UI.tracked_damage_types.other_damage); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + tracked_damage_types_changed = tracked_damage_types_changed or changed; + if tracked_damage_types_changed then for player_id, _player in pairs(player.list) do player.update_display(_player); diff --git a/reframework/data/MHR Overlay/languages/en-us.json b/reframework/data/MHR Overlay/languages/en-us.json index 5c14480..535a0ce 100644 --- a/reframework/data/MHR Overlay/languages/en-us.json +++ b/reframework/data/MHR Overlay/languages/en-us.json @@ -88,6 +88,7 @@ "enable_for": "Enable for", "enabled": "Enabled", "endemic_life_UI": "Endemic Life UI", + "endemic_life_damage": "Endemic Life Damage", "family": "Family", "fight_time": "Fight Time", "filter": "Filter", @@ -156,6 +157,7 @@ "offset_is_relative_to_parts": "Offset is Relative to Parts", "opacity_falloff": "Opacity Falloff", "orientation": "Orientation", + "other_damage": "Other Damage", "other_players": "Other Players", "otomo_damage": "Otomo Damage", "part_health": "Part Health", @@ -223,6 +225,7 @@ "width": "Width", "word_player": "Word \"Player\"", "world_offset": "World Offset", + "wyvern_riding_damage": "Wyvern Riding Damage", "x": "X", "y": "Y", "z": "Z" diff --git a/reframework/data/MHR Overlay/languages/ko-kr.json b/reframework/data/MHR Overlay/languages/ko-kr.json index 6ba073f..1a46431 100644 --- a/reframework/data/MHR Overlay/languages/ko-kr.json +++ b/reframework/data/MHR Overlay/languages/ko-kr.json @@ -88,6 +88,7 @@ "enable_for": "표시 대상", "enabled": "사용함", "endemic_life_UI": "환경생물 UI", + "endemic_life_damage": "Endemic Life Damage", "family": "글꼴", "fight_time": "전투 시간", "filter": "필터", @@ -156,6 +157,7 @@ "offset_is_relative_to_parts": "옵셋을 부위 기준으로", "opacity_falloff": "투명도 감소", "orientation": "방향", + "other_damage": "Other Damage", "other_players": "다른 헌터", "otomo_damage": "동반자 대미지", "part_health": "Part Health", @@ -223,6 +225,7 @@ "width": "너비", "word_player": "\"헌터\" 명칭", "world_offset": "전역 옵셋", + "wyvern_riding_damage": "Wyvern Riding Damage", "x": "X", "y": "Y", "z": "Z" diff --git a/reframework/data/MHR Overlay/languages/ru-ru.json b/reframework/data/MHR Overlay/languages/ru-ru.json index 17832e5..67bf3b2 100644 --- a/reframework/data/MHR Overlay/languages/ru-ru.json +++ b/reframework/data/MHR Overlay/languages/ru-ru.json @@ -88,6 +88,7 @@ "enable_for": "Показывать для", "enabled": "Включить", "endemic_life_UI": "Интерфейс местной живности", + "endemic_life_damage": "Endemic Life Damage", "family": "Семейство", "fight_time": "Время в бою", "filter": "Фильтр", @@ -156,6 +157,7 @@ "offset_is_relative_to_parts": "Сдвиг относителен к частям тела", "opacity_falloff": "Увеличение прозрачности от расстояния", "orientation": "Ориентация", + "other_damage": "Other Damage", "other_players": "Другие игроки", "otomo_damage": "Урон от отомо", "part_health": "Здоровье части", @@ -223,6 +225,7 @@ "width": "Ширина", "word_player": "Слово \"Игрок\"", "world_offset": "Сдвиг в игровом пространстве", + "wyvern_riding_damage": "Wyvern Riding Damage", "x": "X", "y": "Y", "z": "Z" diff --git a/reframework/data/MHR Overlay/languages/zh-cn.json b/reframework/data/MHR Overlay/languages/zh-cn.json index 76ba2bf..ebbdca8 100644 --- a/reframework/data/MHR Overlay/languages/zh-cn.json +++ b/reframework/data/MHR Overlay/languages/zh-cn.json @@ -88,6 +88,7 @@ "enable_for": "开启", "enabled": "开启", "endemic_life_UI": "环境生物UI", + "endemic_life_damage": "Endemic Life Damage", "family": "字体", "fight_time": "战斗时间", "filter": "筛选器", @@ -156,6 +157,7 @@ "offset_is_relative_to_parts": "根据部位偏移", "opacity_falloff": "透明度增加", "orientation": "方向", + "other_damage": "Other Damage", "other_players": "其他玩家", "otomo_damage": "随从伤害", "part_health": "Part Health", @@ -223,6 +225,7 @@ "width": "宽度", "word_player": "名称 \"玩家\"", "world_offset": "整体偏移", + "wyvern_riding_damage": "Wyvern Riding Damage", "x": "X轴", "y": "Y轴", "z": "Z轴" diff --git a/reframework/data/MHR Overlay/languages/zh-tw.json b/reframework/data/MHR Overlay/languages/zh-tw.json index 46d603f..3900ab5 100644 --- a/reframework/data/MHR Overlay/languages/zh-tw.json +++ b/reframework/data/MHR Overlay/languages/zh-tw.json @@ -88,6 +88,7 @@ "enable_for": "啟用對象", "enabled": "啟用", "endemic_life_UI": "環境生物 UI", + "endemic_life_damage": "Endemic Life Damage", "family": "字體", "fight_time": "戰鬥時間", "filter": "篩選器", @@ -156,6 +157,7 @@ "offset_is_relative_to_parts": "與部位顯示相對偏移", "opacity_falloff": "透明度提高", "orientation": "對齊方式", + "other_damage": "Other Damage", "other_players": "其他玩家", "otomo_damage": "隨從傷害", "part_health": "Part Health", @@ -223,6 +225,7 @@ "width": "寬度", "word_player": "名稱 \"玩家\"", "world_offset": "地圖中的位置", + "wyvern_riding_damage": "Wyvern Riding Damage", "x": "X軸", "y": "Y軸", "z": "Z軸"