mirror of
https://github.com/GreenComfyTea/MHR-Overlay.git
synced 2026-01-24 04:18:11 -08:00
Add Anomaly Core Break Damage to Total Damage
This commit is contained in:
@@ -50,6 +50,7 @@ local is_boss_enemy_method = enemy_character_base_type_def:get_method("get_isBos
|
||||
local check_die_method = enemy_character_base_type_def:get_method("checkDie");
|
||||
|
||||
local stock_direct_marionette_finish_shoot_hit_parts_damage_method = enemy_character_base_type_def:get_method("stockDirectMarionetteFinishShootHitPartsDamage");
|
||||
local get_mystery_core_break_damage_rate_method = enemy_character_base_type_def:get_method("getMysteryCoreBreakDamageRate");
|
||||
|
||||
local enemy_calc_damage_info_type_def = sdk.find_type_definition("snow.hit.EnemyCalcDamageInfo.AfterCalcInfo_DamageSide");
|
||||
local get_attacker_id_method = enemy_calc_damage_info_type_def:get_method("get_AttackerID");
|
||||
@@ -69,7 +70,7 @@ local get_condition_type2_method = enemy_calc_damage_info_type_def:get_method("g
|
||||
local get_condition_damage3_method = enemy_calc_damage_info_type_def:get_method("get_ConditionDamage3");
|
||||
local get_condition_type3_method = enemy_calc_damage_info_type_def:get_method("get_ConditionDamageType3");
|
||||
|
||||
local stock_mystery_core_break_damage_type_def = sdk.find_type_definition("snow.enemy.EnemyCharacterBase.stockMysteryCoreBreakDamage");
|
||||
local stock_mystery_core_break_damage_method = enemy_character_base_type_def:get_method("stockMysteryCoreBreakDamage");
|
||||
|
||||
local quest_manager_type_def = sdk.find_type_definition("snow.QuestManager");
|
||||
|
||||
@@ -81,22 +82,22 @@ local is_from_host_field = packet_quest_forfeit_type_def:get_field("_IsFromQuest
|
||||
|
||||
function this.get_damage_source_type(damage_source_type_id, is_marionette_attack)
|
||||
if is_marionette_attack then
|
||||
return "wyvern riding";
|
||||
return players.damage_types.wyvern_riding;
|
||||
elseif damage_source_type_id == 0 or damage_source_type_id == 7 or damage_source_type_id == 11 or damage_source_type_id == 13 then
|
||||
return "player";
|
||||
return players.damage_types.player;
|
||||
elseif damage_source_type_id == 1 or damage_source_type_id == 8 then
|
||||
return "bomb";
|
||||
return players.damage_types.bombs;
|
||||
elseif damage_source_type_id == 9 then
|
||||
return "kunai";
|
||||
return players.damage_types.kunai;
|
||||
elseif damage_source_type_id >= 14 and damage_source_type_id <= 20 then
|
||||
return "installation";
|
||||
return players.damage_types.installations;
|
||||
elseif damage_source_type_id >= 21 and damage_source_type_id <= 23 then
|
||||
return "otomo";
|
||||
return players.damage_types.otomo;
|
||||
elseif damage_source_type_id >= 25 and damage_source_type_id <= 32 then
|
||||
return "endemic life";
|
||||
return players.damage_types.endemic_life;
|
||||
end
|
||||
|
||||
return "other";
|
||||
return players.damage_types.other;
|
||||
end
|
||||
|
||||
-- snow.hit.EnemyCalcDamageInfo.AfterCalcInfo_DamageSide
|
||||
@@ -226,12 +227,35 @@ 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 damage_hook.on_mystery_core_break(enemy)
|
||||
|
||||
--end
|
||||
|
||||
function this.cart(dead_player_id, flag_cat_skill_insurance)
|
||||
-- flag_cat_skill_insurance = 0
|
||||
-- flag_cat_skill_insurance = 1
|
||||
@@ -309,6 +333,28 @@ function this.on_stock_direct_marionette_finish_shoot_hit_parts_damage(enemy, da
|
||||
players.update_damage(player, damage_source_type, true, large_monster_damage_object);
|
||||
end
|
||||
|
||||
function this.on_mystery_core_break(enemy, part_id)
|
||||
local monster = large_monster.get_monster(enemy);
|
||||
if monster == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
local mystery_core_break_damage_rate = get_mystery_core_break_damage_rate_method:call(enemy);
|
||||
if mystery_core_break_damage_rate == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
local mystery_core_break_damage = utils.math.round(mystery_core_break_damage_rate * monster.max_health);
|
||||
|
||||
local damage_object = {};
|
||||
damage_object.total_damage = mystery_core_break_damage;
|
||||
damage_object.physical_damage = 0;
|
||||
damage_object.elemental_damage = 0;
|
||||
damage_object.ailment_damage = mystery_core_break_damage;
|
||||
|
||||
players.update_damage(players.total, players.damage_types.mystery_core, true, damage_object);
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
quest_status = require("MHR_Overlay.Game_Handler.quest_status");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
@@ -344,6 +390,20 @@ function this.init_module()
|
||||
return retval;
|
||||
end);
|
||||
|
||||
sdk.hook(stock_mystery_core_break_damage_method, function(args)
|
||||
-- break core group is same as hit group?
|
||||
-- break core group is part id which exploded
|
||||
local enemy = sdk.to_managed_object(args[2]);
|
||||
local break_core_group = sdk.to_int64(args[3]);
|
||||
local hit_group = sdk.to_int64(args[4]);
|
||||
|
||||
this.on_mystery_core_break(enemy, hit_group);
|
||||
end, function(retval)
|
||||
return retval;
|
||||
end);
|
||||
|
||||
--snow.enemy.EnemyCharacterBase.procDamageMystery(snow.hit.EnemyCalcDamageInfo.AfterCalcInfo_DamageSide)
|
||||
|
||||
--sdk.hook(stock_mystery_core_break_damage_type_def, function(args)
|
||||
-- pcall(damage_hook.on_mystery_core_break, sdk.to_managed_object(args[2]));
|
||||
--end, function(retval)
|
||||
|
||||
@@ -9,6 +9,7 @@ local quest_status;
|
||||
local drawing;
|
||||
local language;
|
||||
local non_players;
|
||||
local utils;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -51,6 +52,22 @@ this.display_list = {};
|
||||
|
||||
this.highlighted_damage_UI = nil;
|
||||
|
||||
this.damage_types = {
|
||||
["player"] = "player",
|
||||
["bombs"] = "bombs",
|
||||
["kunai"] = "kunai",
|
||||
["installations"] = "installations",
|
||||
["otomo"] = "otomo",
|
||||
["wyvern_riding"] = "wyvern_riding",
|
||||
["poison"] = "poison",
|
||||
["otomo_poison"] = "otomo_poison",
|
||||
["blast"] = "blast",
|
||||
["otomo_blast"] = "otomo_blast",
|
||||
["endemic_life"] = "endemic_life",
|
||||
["mystery_core"] = "mystery_core",
|
||||
["other"] = "other"
|
||||
};
|
||||
|
||||
this.types = {
|
||||
["myself"] = 0,
|
||||
["other_player"] = 1,
|
||||
@@ -60,8 +77,7 @@ this.types = {
|
||||
["servant_otomo"] = 16,
|
||||
["total"] = 32,
|
||||
["highlight"] = 64
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
function this.new(id, name, master_rank, hunter_rank, type)
|
||||
local player = {};
|
||||
@@ -78,7 +94,7 @@ function this.new(id, name, master_rank, hunter_rank, type)
|
||||
player.first_hit_time = -1;
|
||||
player.dps = 0;
|
||||
|
||||
player.small_monsters = this.init_damage_sources()
|
||||
player.small_monsters = this.init_damage_sources();
|
||||
player.large_monsters = this.init_damage_sources();
|
||||
|
||||
player.display = {};
|
||||
@@ -99,77 +115,14 @@ end
|
||||
function this.init_damage_sources()
|
||||
local monster_type = {};
|
||||
|
||||
monster_type.total_damage = 0;
|
||||
monster_type.physical_damage = 0;
|
||||
monster_type.elemental_damage = 0;
|
||||
monster_type.ailment_damage = 0;
|
||||
|
||||
monster_type.bombs = {};
|
||||
monster_type.bombs.total_damage = 0;
|
||||
monster_type.bombs.physical_damage = 0;
|
||||
monster_type.bombs.elemental_damage = 0;
|
||||
monster_type.bombs.ailment_damage = 0;
|
||||
|
||||
monster_type.kunai = {};
|
||||
monster_type.kunai.total_damage = 0;
|
||||
monster_type.kunai.physical_damage = 0;
|
||||
monster_type.kunai.elemental_damage = 0;
|
||||
monster_type.kunai.ailment_damage = 0;
|
||||
|
||||
monster_type.installations = {};
|
||||
monster_type.installations.total_damage = 0;
|
||||
monster_type.installations.physical_damage = 0;
|
||||
monster_type.installations.elemental_damage = 0;
|
||||
monster_type.installations.ailment_damage = 0;
|
||||
|
||||
monster_type.otomo = {};
|
||||
monster_type.otomo.total_damage = 0;
|
||||
monster_type.otomo.physical_damage = 0;
|
||||
monster_type.otomo.elemental_damage = 0;
|
||||
monster_type.otomo.ailment_damage = 0;
|
||||
|
||||
monster_type.wyvern_riding = {};
|
||||
monster_type.wyvern_riding.total_damage = 0;
|
||||
monster_type.wyvern_riding.physical_damage = 0;
|
||||
monster_type.wyvern_riding.elemental_damage = 0;
|
||||
monster_type.wyvern_riding.ailment_damage = 0;
|
||||
|
||||
monster_type.poison = {};
|
||||
monster_type.poison.total_damage = 0;
|
||||
monster_type.poison.physical_damage = 0;
|
||||
monster_type.poison.elemental_damage = 0;
|
||||
monster_type.poison.ailment_damage = 0;
|
||||
|
||||
monster_type.otomo_poison = {};
|
||||
monster_type.otomo_poison.total_damage = 0;
|
||||
monster_type.otomo_poison.physical_damage = 0;
|
||||
monster_type.otomo_poison.elemental_damage = 0;
|
||||
monster_type.otomo_poison.ailment_damage = 0;
|
||||
|
||||
|
||||
monster_type.blast = {};
|
||||
monster_type.blast.total_damage = 0;
|
||||
monster_type.blast.physical_damage = 0;
|
||||
monster_type.blast.elemental_damage = 0;
|
||||
monster_type.blast.ailment_damage = 0;
|
||||
|
||||
monster_type.otomo_blast = {};
|
||||
monster_type.otomo_blast.total_damage = 0;
|
||||
monster_type.otomo_blast.physical_damage = 0;
|
||||
monster_type.otomo_blast.elemental_damage = 0;
|
||||
monster_type.otomo_blast.ailment_damage = 0;
|
||||
|
||||
monster_type.endemic_life = {};
|
||||
monster_type.endemic_life.total_damage = 0;
|
||||
monster_type.endemic_life.physical_damage = 0;
|
||||
monster_type.endemic_life.elemental_damage = 0;
|
||||
monster_type.endemic_life.ailment_damage = 0;
|
||||
|
||||
monster_type.other = {};
|
||||
monster_type.other.total_damage = 0;
|
||||
monster_type.other.physical_damage = 0;
|
||||
monster_type.other.elemental_damage = 0;
|
||||
monster_type.other.ailment_damage = 0;
|
||||
for damage_type_name, _ in pairs(this.damage_types) do
|
||||
monster_type[damage_type_name] = {
|
||||
total_damage = 0,
|
||||
physical_damage = 0,
|
||||
elemental_damage = 0,
|
||||
ailment_damage = 0
|
||||
};
|
||||
end
|
||||
|
||||
return monster_type;
|
||||
end
|
||||
@@ -191,37 +144,10 @@ function this.update_damage(player, damage_source_type, is_large_monster, damage
|
||||
player.first_hit_time = time.total_elapsed_script_seconds;
|
||||
end
|
||||
|
||||
local player_monster_type = player.small_monsters;
|
||||
if is_large_monster then
|
||||
player_monster_type = player.large_monsters;
|
||||
end
|
||||
|
||||
if damage_source_type == "player" then
|
||||
this.merge_damage(player_monster_type, damage_object);
|
||||
elseif damage_source_type == "bomb" then
|
||||
this.merge_damage(player_monster_type.bombs, damage_object);
|
||||
elseif damage_source_type == "kunai" then
|
||||
this.merge_damage(player_monster_type.kunai, damage_object);
|
||||
elseif damage_source_type == "installation" then
|
||||
this.merge_damage(player_monster_type.installations, damage_object);
|
||||
elseif damage_source_type == "otomo" then
|
||||
this.merge_damage(player_monster_type.otomo, damage_object);
|
||||
elseif damage_source_type == "wyvern riding" then
|
||||
this.merge_damage(player_monster_type.wyvern_riding, damage_object);
|
||||
elseif damage_source_type == "poison" then
|
||||
this.merge_damage(player_monster_type.poison, damage_object);
|
||||
elseif damage_source_type == "blast" then
|
||||
this.merge_damage(player_monster_type.blast, damage_object);
|
||||
elseif damage_source_type == "otomo poison" then
|
||||
this.merge_damage(player_monster_type.otomo_poison, damage_object);
|
||||
elseif damage_source_type == "otomo blast" then
|
||||
this.merge_damage(player_monster_type.otomo_blast, damage_object);
|
||||
elseif damage_source_type == "endemic life" then
|
||||
this.merge_damage(player_monster_type.endemic_life, damage_object);
|
||||
elseif damage_source_type == "other" then
|
||||
this.merge_damage(player_monster_type.other, damage_object);
|
||||
this.merge_damage(player.large_monsters[damage_source_type], damage_object);
|
||||
else
|
||||
this.merge_damage(player_monster_type, damage_object);
|
||||
this.merge_damage(player.small_monsters[damage_source_type], damage_object);
|
||||
end
|
||||
|
||||
this.update_display(player);
|
||||
@@ -251,7 +177,7 @@ function this.update_display(player)
|
||||
|
||||
for _, monster_type in ipairs(monster_types) do
|
||||
if cached_config.tracked_damage_types.player_damage then
|
||||
this.merge_damage(player.display, monster_type);
|
||||
this.merge_damage(player.display, monster_type.player);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.bomb_damage then
|
||||
@@ -390,6 +316,10 @@ function this.update_display(player)
|
||||
this.merge_damage(player.display, monster_type.endemic_life);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.mystery_core_damage then
|
||||
this.merge_damage(player.display, monster_type.mystery_core);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.other_damage then
|
||||
this.merge_damage(player.display, monster_type.other);
|
||||
end
|
||||
@@ -702,6 +632,7 @@ function this.init_module()
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
non_players = require("MHR_Overlay.Damage_Meter.non_players");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
|
||||
this.init();
|
||||
end
|
||||
|
||||
@@ -5927,6 +5927,7 @@ function this.init_default()
|
||||
poison_damage = true,
|
||||
blast_damage = true,
|
||||
endemic_life_damage = true,
|
||||
mystery_core_damage = true,
|
||||
other_damage = true -- note that installations during narwa fight are counted as other damage
|
||||
},
|
||||
|
||||
|
||||
@@ -383,8 +383,12 @@ this.default_language = {
|
||||
installation_damage = "Installation Damage",
|
||||
otomo_damage = "Buddy Damage",
|
||||
monster_damage = "Monster Damage",
|
||||
wyvern_riding_damage = "Wyvern Riding Damage",
|
||||
poison_damage = "Poison Damage",
|
||||
blast_damage = "Blast Damage",
|
||||
endemic_life_damage = "Endemic Life Damage",
|
||||
mystery_core_damage = "Anomaly Core Damage",
|
||||
other_damage = "Other Damage",
|
||||
|
||||
damage = "Damage",
|
||||
|
||||
@@ -466,10 +470,6 @@ this.default_language = {
|
||||
|
||||
master_rank = "Master Rank",
|
||||
|
||||
other_damage = "Other Damage",
|
||||
wyvern_riding_damage = "Wyvern Riding Damage",
|
||||
endemic_life_damage = "Endemic Life Damage",
|
||||
|
||||
hide_myself = "Hide Myself",
|
||||
hide_other_players = "Hide Other Players",
|
||||
hide_servants = "Hide Followers",
|
||||
|
||||
@@ -755,20 +755,20 @@ function this.apply_ailment_damage(monster, ailment_type, ailment_damage)
|
||||
return;
|
||||
end
|
||||
|
||||
local damage_source_type = "";
|
||||
local otomo_damage_source_type = "";
|
||||
local damage_source_type = players.damage_types.other;
|
||||
local otomo_damage_source_type = players.damage_types.other;
|
||||
local buildup_share = monster.ailments[ailment_type].buildup_share;
|
||||
local otomo_buildup_share = monster.ailments[ailment_type].otomo_buildup_share;
|
||||
|
||||
if ailment_type == this.poison_id then
|
||||
damage_source_type = "poison";
|
||||
otomo_damage_source_type = "otomo poison";
|
||||
damage_source_type = players.damage_types.poison;
|
||||
otomo_damage_source_type = players.damage_types.otomo_poison;
|
||||
buildup_share = monster.ailments[ailment_type].cached_buildup_share;
|
||||
otomo_buildup_share = monster.ailments[ailment_type].cached_otomo_buildup_share;
|
||||
|
||||
elseif ailment_type == this.blast_id then
|
||||
damage_source_type = "blast";
|
||||
otomo_damage_source_type = "otomo blast";
|
||||
damage_source_type = players.damage_types.blast;
|
||||
otomo_damage_source_type = players.damage_types.otomo_blast;
|
||||
else
|
||||
return;
|
||||
end
|
||||
|
||||
@@ -1794,6 +1794,12 @@ function this.draw_damage_meter_UI()
|
||||
config_changed = config_changed or changed;
|
||||
damage_display_changed = damage_display_changed or changed;
|
||||
|
||||
changed, cached_config.tracked_damage_types.mystery_core_damage = imgui.checkbox(
|
||||
language.current_language.customization_menu.mystery_core_damage, cached_config.tracked_damage_types.mystery_core_damage);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
damage_display_changed = damage_display_changed or changed;
|
||||
|
||||
changed, cached_config.tracked_damage_types.other_damage = imgui.checkbox(
|
||||
language.current_language.customization_menu.other_damage, cached_config.tracked_damage_types.other_damage);
|
||||
|
||||
|
||||
@@ -211,6 +211,7 @@
|
||||
"my_damage_bar_location": "My Damage Bar Location",
|
||||
"my_otomos": "My Buddies",
|
||||
"myself": "Myself",
|
||||
"mystery_core_damage": "Anomaly Core Damage",
|
||||
"name": "Name",
|
||||
"name_label": "Name Label",
|
||||
"new": "New",
|
||||
@@ -223,7 +224,7 @@
|
||||
"other_damage": "Other Damage",
|
||||
"other_player_otomos": "Other Player Buddies",
|
||||
"other_players": "Other Players",
|
||||
"otomo_damage": "Buddy Damage",
|
||||
"otomo_damage": "Buddies Damage",
|
||||
"outline": "Outline",
|
||||
"outside": "Outside",
|
||||
"part_health": "Part Health",
|
||||
|
||||
@@ -211,6 +211,7 @@
|
||||
"my_damage_bar_location": "自身のダメージバーの場所",
|
||||
"my_otomos": "My Buddies",
|
||||
"myself": "Myself",
|
||||
"mystery_core_damage": "Anomaly Core Damage",
|
||||
"name": "Name",
|
||||
"name_label": "Name Label",
|
||||
"new": "New",
|
||||
|
||||
@@ -211,6 +211,7 @@
|
||||
"my_damage_bar_location": "내 대미지 막대 위치",
|
||||
"my_otomos": "내 동반자",
|
||||
"myself": "나",
|
||||
"mystery_core_damage": "Anomaly Core Damage",
|
||||
"name": "이름",
|
||||
"name_label": "이름 정보",
|
||||
"new": "새",
|
||||
|
||||
@@ -211,6 +211,7 @@
|
||||
"my_damage_bar_location": "Позиция моей шкалы урона",
|
||||
"my_otomos": "Мои спутники",
|
||||
"myself": "Я",
|
||||
"mystery_core_damage": "Anomaly Core Damage",
|
||||
"name": "Имя",
|
||||
"name_label": "Метка имени",
|
||||
"new": "Создать",
|
||||
|
||||
@@ -211,6 +211,7 @@
|
||||
"my_damage_bar_location": "我的伤害条位置",
|
||||
"my_otomos": "我的随从",
|
||||
"myself": "我自己",
|
||||
"mystery_core_damage": "Anomaly Core Damage",
|
||||
"name": "名称",
|
||||
"name_label": "名字标签",
|
||||
"new": "新建",
|
||||
|
||||
@@ -211,6 +211,7 @@
|
||||
"my_damage_bar_location": "我的傷害條",
|
||||
"my_otomos": "My Buddies",
|
||||
"myself": "Myself",
|
||||
"mystery_core_damage": "Anomaly Core Damage",
|
||||
"name": "Name",
|
||||
"name_label": "Name Label",
|
||||
"new": "New",
|
||||
|
||||
Reference in New Issue
Block a user