mirror of
https://github.com/GreenComfyTea/MHR-Overlay.git
synced 2026-01-25 04:48:22 -08:00
Fix bug with monster check
This commit is contained in:
@@ -21,10 +21,10 @@ local monster_UI = {
|
|||||||
health_values = true, --current_health and max_health
|
health_values = true, --current_health and max_health
|
||||||
health_percentage = true
|
health_percentage = true
|
||||||
},
|
},
|
||||||
|
|
||||||
position = {
|
position = {
|
||||||
x = 525,
|
x = 525,
|
||||||
y = 27,
|
y = 27,
|
||||||
--Possible values: "top-left", "top-right", "bottom-left", "bottom-right"
|
--Possible values: "top-left", "top-right", "bottom-left", "bottom-right"
|
||||||
anchor = "bottom-left"
|
anchor = "bottom-left"
|
||||||
},
|
},
|
||||||
@@ -34,7 +34,7 @@ local monster_UI = {
|
|||||||
x = 0,
|
x = 0,
|
||||||
y = 0
|
y = 0
|
||||||
},
|
},
|
||||||
|
|
||||||
monster_name = {
|
monster_name = {
|
||||||
x = 5,
|
x = 5,
|
||||||
y = -17
|
y = -17
|
||||||
@@ -50,7 +50,7 @@ local monster_UI = {
|
|||||||
y = 2
|
y = 2
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
health_bar = {
|
health_bar = {
|
||||||
width = 200,
|
width = 200,
|
||||||
height = 20
|
height = 20
|
||||||
@@ -78,7 +78,7 @@ local monster_UI = {
|
|||||||
remaining_health = 0xB952A674,
|
remaining_health = 0xB952A674,
|
||||||
missing_health = 0xB9000000
|
missing_health = 0xB9000000
|
||||||
},
|
},
|
||||||
|
|
||||||
monster_name = {
|
monster_name = {
|
||||||
text = 0xFFE1F4CC,
|
text = 0xFFE1F4CC,
|
||||||
shadow = 0xFF000000
|
shadow = 0xFF000000
|
||||||
@@ -160,7 +160,7 @@ local damage_meter_UI = {
|
|||||||
|
|
||||||
position = {
|
position = {
|
||||||
x = 525,
|
x = 525,
|
||||||
y = 225,
|
y = 225,
|
||||||
--Possible values: "top-left", "top-right", "bottom-left", "bottom-right"
|
--Possible values: "top-left", "top-right", "bottom-left", "bottom-right"
|
||||||
anchor = "bottom-left"
|
anchor = "bottom-left"
|
||||||
},
|
},
|
||||||
@@ -175,7 +175,7 @@ local damage_meter_UI = {
|
|||||||
x = 0,
|
x = 0,
|
||||||
y = 17
|
y = 17
|
||||||
},
|
},
|
||||||
|
|
||||||
player_damage = {
|
player_damage = {
|
||||||
x = 120,
|
x = 120,
|
||||||
y = 0
|
y = 0
|
||||||
@@ -191,7 +191,7 @@ local damage_meter_UI = {
|
|||||||
y = 0
|
y = 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
damage_bar = {
|
damage_bar = {
|
||||||
width = 225,
|
width = 225,
|
||||||
height = 5
|
height = 5
|
||||||
@@ -234,7 +234,7 @@ local damage_meter_UI = {
|
|||||||
player_damage = 0xA7A3D5F4,
|
player_damage = 0xA7A3D5F4,
|
||||||
others_damage = 0xA7000000
|
others_damage = 0xA7000000
|
||||||
},
|
},
|
||||||
|
|
||||||
player_damage = {
|
player_damage = {
|
||||||
text = 0xFFE1F4CC,
|
text = 0xFFE1F4CC,
|
||||||
shadow = 0xFF000000
|
shadow = 0xFF000000
|
||||||
@@ -265,7 +265,7 @@ screen_width = 0;
|
|||||||
screen_height = 0;
|
screen_height = 0;
|
||||||
|
|
||||||
local scene_manager = sdk.get_native_singleton("via.SceneManager");
|
local scene_manager = sdk.get_native_singleton("via.SceneManager");
|
||||||
if not scene_manager then
|
if not scene_manager then
|
||||||
log.error("[MHR_Overlay.lua] No scene manager");
|
log.error("[MHR_Overlay.lua] No scene manager");
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
@@ -277,7 +277,7 @@ if not scene_view then
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
re.on_draw_ui(function()
|
re.on_draw_ui(function()
|
||||||
if string.len(status) > 0 then
|
if string.len(status) > 0 then
|
||||||
imgui.text("[MHR_Overlay.lua] Status: " .. status);
|
imgui.text("[MHR_Overlay.lua] Status: " .. status);
|
||||||
end
|
end
|
||||||
@@ -360,7 +360,7 @@ local memorized_missing_monster_health = 0;
|
|||||||
local enemy_character_base_type_def = sdk.find_type_definition("snow.enemy.EnemyCharacterBase");
|
local enemy_character_base_type_def = sdk.find_type_definition("snow.enemy.EnemyCharacterBase");
|
||||||
local enemy_character_base_type_def_update_method = enemy_character_base_type_def:get_method("update");
|
local enemy_character_base_type_def_update_method = enemy_character_base_type_def:get_method("update");
|
||||||
|
|
||||||
sdk.hook(enemy_character_base_type_def_update_method, function(args)
|
sdk.hook(enemy_character_base_type_def_update_method, function(args)
|
||||||
record_health(sdk.to_managed_object(args[2]));
|
record_health(sdk.to_managed_object(args[2]));
|
||||||
end, function(retval) return retval; end);
|
end, function(retval) return retval; end);
|
||||||
|
|
||||||
@@ -370,7 +370,7 @@ function record_health(enemy)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local physical_param = enemy:get_field("<PhysicalParam>k__BackingField");
|
local physical_param = enemy:get_field("<PhysicalParam>k__BackingField");
|
||||||
if not physical_param then
|
if not physical_param then
|
||||||
status = "No physical param";
|
status = "No physical param";
|
||||||
return;
|
return;
|
||||||
end
|
end
|
||||||
@@ -392,7 +392,7 @@ function record_health(enemy)
|
|||||||
|
|
||||||
local monster = monster_table[enemy];
|
local monster = monster_table[enemy];
|
||||||
|
|
||||||
if not hp_entry then
|
if not monster then
|
||||||
monster = {};
|
monster = {};
|
||||||
monster_table[enemy] = monster;
|
monster_table[enemy] = monster;
|
||||||
|
|
||||||
@@ -440,9 +440,9 @@ function monster_health()
|
|||||||
status = "No enemy";
|
status = "No enemy";
|
||||||
break;
|
break;
|
||||||
end
|
end
|
||||||
|
|
||||||
local monster = monster_table[enemy];
|
local monster = monster_table[enemy];
|
||||||
if monster == nil then
|
if monster == nil then
|
||||||
status = "No monster hp entry";
|
status = "No monster hp entry";
|
||||||
break;
|
break;
|
||||||
end
|
end
|
||||||
@@ -473,7 +473,7 @@ function monster_health()
|
|||||||
elseif monster_UI.sort_type == "health percentage" then
|
elseif monster_UI.sort_type == "health percentage" then
|
||||||
table.sort(monsters, function(left, right)
|
table.sort(monsters, function(left, right)
|
||||||
local result = left.health_percentage < right.health_percentage;
|
local result = left.health_percentage < right.health_percentage;
|
||||||
|
|
||||||
if monster_UI.reverse_order then
|
if monster_UI.reverse_order then
|
||||||
result = not result;
|
result = not result;
|
||||||
end
|
end
|
||||||
@@ -517,7 +517,7 @@ function monster_health()
|
|||||||
if monster_UI.visibility.current_health then
|
if monster_UI.visibility.current_health then
|
||||||
health_values = string.format("%d", monster.health);
|
health_values = string.format("%d", monster.health);
|
||||||
end
|
end
|
||||||
|
|
||||||
if monster_UI.visibility.max_health then
|
if monster_UI.visibility.max_health then
|
||||||
if monster_UI.visibility.current_health then
|
if monster_UI.visibility.current_health then
|
||||||
health_values = health_values .. "/";
|
health_values = health_values .. "/";
|
||||||
@@ -618,7 +618,7 @@ sdk.hook(enemy_character_base_after_calc_damage_damage_side, function(args)
|
|||||||
|
|
||||||
if is_quest_online and attacker_id == 4 then
|
if is_quest_online and attacker_id == 4 then
|
||||||
attacker_id = myself_id;
|
attacker_id = myself_id;
|
||||||
end
|
end
|
||||||
|
|
||||||
local damage_object = {}
|
local damage_object = {}
|
||||||
damage_object.total_damage = enemy_calc_damage_info:call("get_TotalDamage");;
|
damage_object.total_damage = enemy_calc_damage_info:call("get_TotalDamage");;
|
||||||
@@ -760,7 +760,7 @@ function update_player(player, damage_source_type, damage_object)
|
|||||||
|
|
||||||
if damage_meter_UI.include_bomb_damage then
|
if damage_meter_UI.include_bomb_damage then
|
||||||
merge_damage(player.display, player.bombs);
|
merge_damage(player.display, player.bombs);
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if damage_meter_UI.include_kunai_damage then
|
if damage_meter_UI.include_kunai_damage then
|
||||||
@@ -798,12 +798,12 @@ function damage_meter()
|
|||||||
total = init_player(0, "Total");
|
total = init_player(0, "Total");
|
||||||
return;
|
return;
|
||||||
end
|
end
|
||||||
|
|
||||||
if total.display.total_damage == 0 and not damage_meter_UI.show_module_if_total_damage_is_zero then
|
if total.display.total_damage == 0 and not damage_meter_UI.show_module_if_total_damage_is_zero then
|
||||||
return;
|
return;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- players in lobby
|
-- players in lobby
|
||||||
local lobby_manager = sdk.get_managed_singleton("snow.LobbyManager");
|
local lobby_manager = sdk.get_managed_singleton("snow.LobbyManager");
|
||||||
if lobby_manager == nil then
|
if lobby_manager == nil then
|
||||||
@@ -855,7 +855,7 @@ function damage_meter()
|
|||||||
if player_info_list == nil then
|
if player_info_list == nil then
|
||||||
status = "No player info list";
|
status = "No player info list";
|
||||||
end
|
end
|
||||||
|
|
||||||
local count = player_info_list:call("get_Count");
|
local count = player_info_list:call("get_Count");
|
||||||
if count == nil then
|
if count == nil then
|
||||||
status = "No player info list count";
|
status = "No player info list count";
|
||||||
@@ -919,7 +919,7 @@ function damage_meter()
|
|||||||
if damage_meter_UI.myself_bar_place_in_order == "last" then
|
if damage_meter_UI.myself_bar_place_in_order == "last" then
|
||||||
table.insert(quest_players, #quest_players + 1, players[myself_player_id]);
|
table.insert(quest_players, #quest_players + 1, players[myself_player_id]);
|
||||||
end
|
end
|
||||||
|
|
||||||
local top_damage = 0;
|
local top_damage = 0;
|
||||||
for _, player in ipairs(quest_players) do
|
for _, player in ipairs(quest_players) do
|
||||||
if player.display.total_damage > top_damage then
|
if player.display.total_damage > top_damage then
|
||||||
@@ -954,9 +954,9 @@ function damage_meter()
|
|||||||
if damage_meter_UI.damage_bar_relative_to == "total_damage" then
|
if damage_meter_UI.damage_bar_relative_to == "total_damage" then
|
||||||
damage_bar_player_damage_width = damage_meter_UI.damage_bar.width * player_total_damage_percentage;
|
damage_bar_player_damage_width = damage_meter_UI.damage_bar.width * player_total_damage_percentage;
|
||||||
elseif top_damage ~= 0 then
|
elseif top_damage ~= 0 then
|
||||||
damage_bar_player_damage_width = damage_meter_UI.damage_bar.width * (player.display.total_damage / top_damage);
|
damage_bar_player_damage_width = damage_meter_UI.damage_bar.width * (player.display.total_damage / top_damage);
|
||||||
end
|
end
|
||||||
|
|
||||||
local damage_bar_others_damage_width = damage_meter_UI.damage_bar.width - damage_bar_player_damage_width;
|
local damage_bar_others_damage_width = damage_meter_UI.damage_bar.width - damage_bar_player_damage_width;
|
||||||
|
|
||||||
local damage_bar_color = damage_meter_UI.colors.damage_bar;
|
local damage_bar_color = damage_meter_UI.colors.damage_bar;
|
||||||
@@ -966,14 +966,14 @@ function damage_meter()
|
|||||||
|
|
||||||
--player damage
|
--player damage
|
||||||
draw.filled_rect(screen_position.x + damage_meter_UI.offsets.damage_bar.x, screen_position.y + damage_meter_UI.offsets.damage_bar.y, damage_bar_player_damage_width, damage_meter_UI.damage_bar.height, damage_bar_color.player_damage);
|
draw.filled_rect(screen_position.x + damage_meter_UI.offsets.damage_bar.x, screen_position.y + damage_meter_UI.offsets.damage_bar.y, damage_bar_player_damage_width, damage_meter_UI.damage_bar.height, damage_bar_color.player_damage);
|
||||||
|
|
||||||
--other damage
|
--other damage
|
||||||
draw.filled_rect(screen_position.x + damage_meter_UI.offsets.damage_bar.x + damage_bar_player_damage_width, screen_position.y + damage_meter_UI.offsets.damage_bar.y, damage_bar_others_damage_width, damage_meter_UI.damage_bar.height, damage_bar_color.others_damage);
|
draw.filled_rect(screen_position.x + damage_meter_UI.offsets.damage_bar.x + damage_bar_player_damage_width, screen_position.y + damage_meter_UI.offsets.damage_bar.y, damage_bar_others_damage_width, damage_meter_UI.damage_bar.height, damage_bar_color.others_damage);
|
||||||
end
|
end
|
||||||
|
|
||||||
if damage_meter_UI.visibility.id or damage_meter_UI.visibility.name then
|
if damage_meter_UI.visibility.id or damage_meter_UI.visibility.name then
|
||||||
local id_name_text = "";
|
local id_name_text = "";
|
||||||
|
|
||||||
if damage_meter_UI.visibility.id then
|
if damage_meter_UI.visibility.id then
|
||||||
id_name_text = player.id;
|
id_name_text = player.id;
|
||||||
end
|
end
|
||||||
@@ -985,7 +985,7 @@ function damage_meter()
|
|||||||
|
|
||||||
id_name_text = id_name_text .. player.name;
|
id_name_text = id_name_text .. player.name;
|
||||||
end
|
end
|
||||||
|
|
||||||
if damage_meter_UI.shadows.name then
|
if damage_meter_UI.shadows.name then
|
||||||
--name shadow
|
--name shadow
|
||||||
draw.text(id_name_text, screen_position.x + damage_meter_UI.offsets.name.x + damage_meter_UI.shadow_offsets.name.x, screen_position.y + damage_meter_UI.offsets.name.y + damage_meter_UI.shadow_offsets.name.y, damage_meter_UI.colors.name.shadow);
|
draw.text(id_name_text, screen_position.x + damage_meter_UI.offsets.name.x + damage_meter_UI.shadow_offsets.name.x, screen_position.y + damage_meter_UI.offsets.name.y + damage_meter_UI.shadow_offsets.name.y, damage_meter_UI.colors.name.shadow);
|
||||||
@@ -996,7 +996,7 @@ function damage_meter()
|
|||||||
|
|
||||||
if damage_meter_UI.visibility.player_damage then
|
if damage_meter_UI.visibility.player_damage then
|
||||||
local player_damage = string.format("%d", player.display.total_damage);
|
local player_damage = string.format("%d", player.display.total_damage);
|
||||||
|
|
||||||
if damage_meter_UI.shadows.player_damage then
|
if damage_meter_UI.shadows.player_damage then
|
||||||
--player_damage shadow
|
--player_damage shadow
|
||||||
draw.text(player_damage, screen_position.x + damage_meter_UI.offsets.player_damage.x + damage_meter_UI.shadow_offsets.player_damage.x, screen_position.y + damage_meter_UI.offsets.player_damage.y + damage_meter_UI.shadow_offsets.player_damage.y, damage_meter_UI.colors.player_damage.shadow);
|
draw.text(player_damage, screen_position.x + damage_meter_UI.offsets.player_damage.x + damage_meter_UI.shadow_offsets.player_damage.x, screen_position.y + damage_meter_UI.offsets.player_damage.y + damage_meter_UI.shadow_offsets.player_damage.y, damage_meter_UI.colors.player_damage.shadow);
|
||||||
@@ -1008,7 +1008,7 @@ function damage_meter()
|
|||||||
|
|
||||||
if damage_meter_UI.visibility.player_damage_percentage then
|
if damage_meter_UI.visibility.player_damage_percentage then
|
||||||
local player_damage_percentage_text = string.format("%5.1f%%", 100 * player_total_damage_percentage);
|
local player_damage_percentage_text = string.format("%5.1f%%", 100 * player_total_damage_percentage);
|
||||||
|
|
||||||
if damage_meter_UI.shadows.player_damage_percentage then
|
if damage_meter_UI.shadows.player_damage_percentage then
|
||||||
--player damage percentage shadow
|
--player damage percentage shadow
|
||||||
draw.text(player_damage_percentage_text, screen_position.x + damage_meter_UI.offsets.player_damage_percentage.x + damage_meter_UI.shadow_offsets.player_damage_percentage.x, screen_position.y + damage_meter_UI.offsets.player_damage_percentage.y + damage_meter_UI.shadow_offsets.player_damage_percentage.y, damage_meter_UI.colors.player_damage_percentage.shadow);
|
draw.text(player_damage_percentage_text, screen_position.x + damage_meter_UI.offsets.player_damage_percentage.x + damage_meter_UI.shadow_offsets.player_damage_percentage.x, screen_position.y + damage_meter_UI.offsets.player_damage_percentage.y + damage_meter_UI.shadow_offsets.player_damage_percentage.y, damage_meter_UI.colors.player_damage_percentage.shadow);
|
||||||
|
|||||||
Reference in New Issue
Block a user