mirror of
https://github.com/GreenComfyTea/MHR-Overlay.git
synced 2026-01-24 04:18:11 -08:00
Stats UI: Add Health and Max Health
This commit is contained in:
@@ -7603,6 +7603,74 @@ function this.init_default()
|
||||
anchor = "Bottom-Right"
|
||||
},
|
||||
|
||||
health_label = {
|
||||
visibility = false,
|
||||
|
||||
settings = {
|
||||
right_alignment_shift = 16
|
||||
},
|
||||
|
||||
text_formatting = "%s",
|
||||
|
||||
include = {
|
||||
name = true,
|
||||
value = true,
|
||||
max_value = true
|
||||
},
|
||||
|
||||
offset = {
|
||||
x = -514,
|
||||
y = -35
|
||||
},
|
||||
|
||||
color = 0xFFFEFF88,
|
||||
|
||||
shadow = {
|
||||
visibility = true,
|
||||
|
||||
offset = {
|
||||
x = 1,
|
||||
y = 1
|
||||
},
|
||||
|
||||
color = 0xFF000000
|
||||
}
|
||||
},
|
||||
|
||||
stamina_label = {
|
||||
visibility = false,
|
||||
|
||||
settings = {
|
||||
right_alignment_shift = 16
|
||||
},
|
||||
|
||||
text_formatting = "%s",
|
||||
|
||||
include = {
|
||||
name = true,
|
||||
value = true,
|
||||
max_value = true
|
||||
},
|
||||
|
||||
offset = {
|
||||
x = -382,
|
||||
y = -35
|
||||
},
|
||||
|
||||
color = 0xFFFEFF88,
|
||||
|
||||
shadow = {
|
||||
visibility = true,
|
||||
|
||||
offset = {
|
||||
x = 1,
|
||||
y = 1
|
||||
},
|
||||
|
||||
color = 0xFF000000
|
||||
}
|
||||
},
|
||||
|
||||
attack_label = {
|
||||
visibility = true,
|
||||
|
||||
@@ -7867,40 +7935,6 @@ function this.init_default()
|
||||
}
|
||||
},
|
||||
|
||||
stamina_label = {
|
||||
visibility = false,
|
||||
|
||||
settings = {
|
||||
right_alignment_shift = 16
|
||||
},
|
||||
|
||||
text_formatting = "%s",
|
||||
|
||||
include = {
|
||||
name = true,
|
||||
value = true,
|
||||
max_value = true
|
||||
},
|
||||
|
||||
offset = {
|
||||
x = -382,
|
||||
y = -35
|
||||
},
|
||||
|
||||
color = 0xFFFEFF88,
|
||||
|
||||
shadow = {
|
||||
visibility = true,
|
||||
|
||||
offset = {
|
||||
x = 1,
|
||||
y = 1
|
||||
},
|
||||
|
||||
color = 0xFF000000
|
||||
}
|
||||
},
|
||||
|
||||
element_label = {
|
||||
visibility = false,
|
||||
|
||||
|
||||
@@ -677,6 +677,8 @@ this.default_language = {
|
||||
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",
|
||||
@@ -685,7 +687,6 @@ this.default_language = {
|
||||
thunder_resistance_label = "Thunder Resistance Label",
|
||||
ice_resistance_label = "Ice Resistance Label",
|
||||
dragon_resistance_label = "Dragon Resistance Label",
|
||||
stamina_label = "Stamina Label",
|
||||
element_label = "Element Label",
|
||||
element_2_label = "Element 2 Label"
|
||||
},
|
||||
|
||||
@@ -42,6 +42,9 @@ local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
this.list = {
|
||||
health = 0;
|
||||
max_health = 0;
|
||||
|
||||
attack = 0;
|
||||
defense = 0;
|
||||
affinity = 0;
|
||||
@@ -62,6 +65,8 @@ this.list = {
|
||||
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");
|
||||
@@ -71,10 +76,12 @@ 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");
|
||||
@@ -91,6 +98,13 @@ 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 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;
|
||||
@@ -118,6 +132,12 @@ function this.update()
|
||||
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);
|
||||
@@ -138,7 +158,7 @@ function this.update()
|
||||
|
||||
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
|
||||
|
||||
@@ -235,6 +255,26 @@ function this.update_resistances(player_data)
|
||||
end
|
||||
end
|
||||
|
||||
function this.update_health(quest_player_base)
|
||||
if quest_player_base ~= master_player_ref then
|
||||
return;
|
||||
end
|
||||
|
||||
if not should_health_update then
|
||||
return;
|
||||
end
|
||||
|
||||
should_health_update = false;
|
||||
|
||||
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.init_dependencies()
|
||||
singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
customization_menu = require("MHR_Overlay.UI.customization_menu");
|
||||
@@ -252,6 +292,12 @@ function this.init_dependencies()
|
||||
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.update_health(quest_player_base);
|
||||
end, function(retval)
|
||||
return retval;
|
||||
end);
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
Reference in New Issue
Block a user