mirror of
https://github.com/GreenComfyTea/MHR-Overlay.git
synced 2026-01-24 04:18:11 -08:00
Functions and fields are cached, part names added, part name language support added.
This commit is contained in:
@@ -5,7 +5,9 @@ local screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
local singletons = require("MHR_Overlay.Game_Handler.singletons");
|
||||
|
||||
local config = require("MHR_Overlay.Misc.config");
|
||||
local language = require("MHR_Overlay.Misc.language");
|
||||
local table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
local part_names = require("MHR_Overlay.Misc.part_names");
|
||||
|
||||
local player = require("MHR_Overlay.Damage_Meter.player");
|
||||
local damage_hook = require("MHR_Overlay.Damage_Meter.damage_hook");
|
||||
@@ -35,8 +37,10 @@ screen.init_module();
|
||||
singletons.init_module();
|
||||
table_helpers.init_module();
|
||||
|
||||
language.init_module();
|
||||
config.init_module();
|
||||
quest_status.init_module();
|
||||
part_names.init_module();
|
||||
|
||||
damage_UI_entity.init_module();
|
||||
health_UI_entity.init_module();
|
||||
@@ -85,7 +89,7 @@ re.on_frame(function()
|
||||
end);
|
||||
|
||||
re.on_frame(function()
|
||||
draw.text("x: " .. tostring(x), 450, 50, 0xFFFFFFFF);
|
||||
--draw.text("x: " .. tostring(x), 450, 50, 0xFFFFFFFF);
|
||||
end);
|
||||
-- #endregion
|
||||
--------------------------RE_IMGUI---------------------------
|
||||
|
||||
@@ -2,11 +2,21 @@ local damage_hook = {};
|
||||
local quest_status;
|
||||
local player;
|
||||
|
||||
|
||||
|
||||
local enemy_character_base_type_def = sdk.find_type_definition("snow.enemy.EnemyCharacterBase");
|
||||
local enemy_character_base_after_calc_damage_damage_side = enemy_character_base_type_def:get_method("afterCalcDamage_DamageSide");
|
||||
|
||||
local is_boss_enemy_method = enemy_character_base_type_def:get_method("get_isBossEnemy");
|
||||
local check_die_method = enemy_character_base_type_def:get_method("checkDie");
|
||||
|
||||
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");
|
||||
local get_damage_attacker_type_method = enemy_calc_damage_info_type_def:get_method("get_DamageAttackerType");
|
||||
|
||||
local get_total_damage_method = enemy_calc_damage_info_type_def:get_method("get_TotalDamage");
|
||||
local get_physical_damage_method = enemy_calc_damage_info_type_def:get_method("get_PhysicalDamage");
|
||||
local get_elemental_damage_method = enemy_calc_damage_info_type_def:get_method("get_ElementDamage");
|
||||
local get_condition_damage_method = enemy_calc_damage_info_type_def:get_method("get_ConditionDamage");
|
||||
|
||||
sdk.hook(enemy_character_base_after_calc_damage_damage_side, function(args)
|
||||
damage_hook.update_damage(args);
|
||||
end, function(retval)
|
||||
@@ -19,12 +29,13 @@ function damage_hook.update_damage(args)
|
||||
return;
|
||||
end
|
||||
|
||||
local is_large_monster = enemy:call("get_isBossEnemy");
|
||||
local is_large_monster = is_boss_enemy_method:call(enemy);
|
||||
|
||||
if is_large_monster == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
local dead_or_captured = enemy:call("checkDie");
|
||||
local dead_or_captured = check_die_method:call(enemy);
|
||||
if dead_or_captured == nil then
|
||||
return;
|
||||
end
|
||||
@@ -34,8 +45,8 @@ function damage_hook.update_damage(args)
|
||||
end
|
||||
|
||||
local enemy_calc_damage_info = sdk.to_managed_object(args[3]); -- snow.hit.EnemyCalcDamageInfo.AfterCalcInfo_DamageSide
|
||||
local attacker_id = enemy_calc_damage_info:call("get_AttackerID");
|
||||
local attacker_type = enemy_calc_damage_info:call("get_DamageAttackerType");
|
||||
local attacker_id = get_attacker_id_method:call(enemy_calc_damage_info);
|
||||
local attacker_type = get_damage_attacker_type_method:call(enemy_calc_damage_info);
|
||||
|
||||
if attacker_id >= 100 then
|
||||
return;
|
||||
@@ -47,10 +58,10 @@ function damage_hook.update_damage(args)
|
||||
end
|
||||
|
||||
local damage_object = {}
|
||||
damage_object.total_damage = enemy_calc_damage_info:call("get_TotalDamage");
|
||||
damage_object.physical_damage = enemy_calc_damage_info:call("get_PhysicalDamage");
|
||||
damage_object.elemental_damage = enemy_calc_damage_info:call("get_ElementDamage");
|
||||
damage_object.ailment_damage = enemy_calc_damage_info:call("get_ConditionDamage");
|
||||
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);
|
||||
damage_object.elemental_damage = get_elemental_damage_method:call(enemy_calc_damage_info);
|
||||
damage_object.ailment_damage = get_condition_damage_method:call(enemy_calc_damage_info);
|
||||
|
||||
-- -1 - bombs
|
||||
-- 0 - player
|
||||
|
||||
@@ -177,8 +177,6 @@ function player.update_display(_player)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
if config.current_config.damage_meter_UI.tracked_monster_types.large_monsters then
|
||||
if config.current_config.damage_meter_UI.tracked_damage_types.player_damage then
|
||||
player.merge_damage(_player.display, _player.large_monsters);
|
||||
@@ -215,31 +213,38 @@ function player.merge_damage(first, second)
|
||||
return first;
|
||||
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");
|
||||
|
||||
local get_game_object_method = sdk.find_type_definition("via.Component"):get_method("get_GameObject")
|
||||
local get_transform_method = sdk.find_type_definition("via.GameObject"):get_method("get_Transform")
|
||||
local get_position_method = sdk.find_type_definition("via.Transform"):get_method("get_Position")
|
||||
|
||||
function player.update_myself_position()
|
||||
if singletons.player_manager == nil then
|
||||
customization_menu.status = "No player manager";
|
||||
return;
|
||||
end
|
||||
|
||||
local master_player = singletons.player_manager:call("findMasterPlayer")
|
||||
local master_player = find_master_player_method:call(singletons.player_manager);
|
||||
if master_player == nil then
|
||||
customization_menu.status = "No master player";
|
||||
return;
|
||||
end
|
||||
|
||||
local master_player_game_object = master_player:call("get_GameObject")
|
||||
local master_player_game_object = get_game_object_method:call(master_player);
|
||||
if master_player_game_object == nil then
|
||||
customization_menu.status = "No master player game object";
|
||||
return;
|
||||
end
|
||||
|
||||
local master_player_transform = master_player_game_object:call("get_Transform")
|
||||
|
||||
local master_player_transform = get_transform_method:call(master_player_game_object);
|
||||
if not master_player_transform then
|
||||
customization_menu.status = "No master player transform";
|
||||
return;
|
||||
end
|
||||
|
||||
local master_player_position = master_player_transform:call("get_Position")
|
||||
local master_player_position = get_position_method:call(master_player_transform);
|
||||
if master_player_position == nil then
|
||||
customization_menu.status = "No masterplayer position";
|
||||
return;
|
||||
|
||||
@@ -12,6 +12,9 @@ quest_status.is_training_area = false;
|
||||
local quest_manager_type_definition = sdk.find_type_definition("snow.QuestManager");
|
||||
local on_changed_game_status = quest_manager_type_definition:get_method("onChangedGameStatus");
|
||||
|
||||
local village_area_manager_type_def = sdk.find_type_definition("snow.VillageAreaManager");
|
||||
local check_current_area_training_area_method = village_area_manager_type_def:get_method("checkCurrentArea_TrainingArea");
|
||||
|
||||
sdk.hook(on_changed_game_status, function(args)
|
||||
local new_quest_status = sdk.to_int64(args[3]);
|
||||
if new_quest_status ~= nil then
|
||||
@@ -66,7 +69,7 @@ function quest_status.update_is_training_area()
|
||||
return;
|
||||
end
|
||||
|
||||
local _is_training_area = singletons.village_area_manager:call("checkCurrentArea_TrainingArea");
|
||||
local _is_training_area = check_current_area_training_area_method:call(singletons.village_area_manager);
|
||||
if _is_training_area == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
local config = {};
|
||||
local table_helpers;
|
||||
local language;
|
||||
|
||||
config.current_config = nil;
|
||||
config.config_file_name = "MHR Overlay/config.json";
|
||||
|
||||
config.default_config = {
|
||||
global_settings = {
|
||||
language = "en-us",
|
||||
|
||||
module_visibility = {
|
||||
during_quest = {
|
||||
small_monster_UI = true,
|
||||
@@ -29,7 +32,7 @@ config.default_config = {
|
||||
damage_meter_UI = true
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
font = {
|
||||
family = "Consolas",
|
||||
size = 13,
|
||||
@@ -552,7 +555,7 @@ config.default_config = {
|
||||
},
|
||||
|
||||
parts = {
|
||||
visibility = false,
|
||||
visibility = true,
|
||||
|
||||
offset = {
|
||||
x = 0,
|
||||
@@ -565,7 +568,7 @@ config.default_config = {
|
||||
},
|
||||
|
||||
settings = {
|
||||
hide_undamaged_parts = true,
|
||||
hide_undamaged_parts = false,
|
||||
},
|
||||
|
||||
sorting = {
|
||||
@@ -578,7 +581,7 @@ config.default_config = {
|
||||
text = "%s",
|
||||
|
||||
include = {
|
||||
part_name = false,
|
||||
part_name = true,
|
||||
break_count = true
|
||||
},
|
||||
|
||||
@@ -586,7 +589,7 @@ config.default_config = {
|
||||
x = 15,
|
||||
y = 61
|
||||
},
|
||||
color = 0xF1F4A3CC,
|
||||
color = 0xFFf9d9ff,
|
||||
|
||||
shadow = {
|
||||
visibility = true,
|
||||
@@ -603,7 +606,7 @@ config.default_config = {
|
||||
text = "HP:",
|
||||
offset = {
|
||||
x = -15,
|
||||
y = 71
|
||||
y = 69
|
||||
},
|
||||
color = 0xF1F4A3CC,
|
||||
|
||||
@@ -622,7 +625,7 @@ config.default_config = {
|
||||
text = "%.0f/%.0f", -- current_health/max_health
|
||||
offset = {
|
||||
x = 55,
|
||||
y = 78
|
||||
y = 74
|
||||
},
|
||||
color = 0xFFFFFFFF,
|
||||
|
||||
@@ -637,12 +640,12 @@ config.default_config = {
|
||||
},
|
||||
|
||||
percentage_label = {
|
||||
visibility = false,
|
||||
visibility = true,
|
||||
text = "%5.1f%%",
|
||||
|
||||
offset = {
|
||||
x = 145,
|
||||
y = 78
|
||||
y = 74
|
||||
},
|
||||
color = 0xFFFFFFFF,
|
||||
|
||||
@@ -660,7 +663,7 @@ config.default_config = {
|
||||
visibility = true,
|
||||
offset = {
|
||||
x = 10,
|
||||
y = 78
|
||||
y = 75
|
||||
},
|
||||
|
||||
size = {
|
||||
@@ -669,7 +672,7 @@ config.default_config = {
|
||||
},
|
||||
|
||||
colors = {
|
||||
foreground = 0xF4D0A3CC,
|
||||
foreground = 0xB9ca85cc,
|
||||
background = 0x88000000
|
||||
}
|
||||
}
|
||||
@@ -971,9 +974,7 @@ config.default_config = {
|
||||
},
|
||||
|
||||
parts = {
|
||||
visibility = true,
|
||||
|
||||
|
||||
visibility = false,
|
||||
|
||||
offset = {
|
||||
x = 0,
|
||||
@@ -999,7 +1000,7 @@ config.default_config = {
|
||||
text = "%s",
|
||||
|
||||
include = {
|
||||
part_name = false,
|
||||
part_name = true,
|
||||
break_count = true
|
||||
},
|
||||
|
||||
@@ -1007,7 +1008,7 @@ config.default_config = {
|
||||
x = 15,
|
||||
y = 61
|
||||
},
|
||||
color = 0xF1F4A3CC,
|
||||
color = 0xFFf9d9ff,
|
||||
|
||||
shadow = {
|
||||
visibility = true,
|
||||
@@ -1024,7 +1025,7 @@ config.default_config = {
|
||||
text = "HP:",
|
||||
offset = {
|
||||
x = -15,
|
||||
y = 71
|
||||
y = 69
|
||||
},
|
||||
color = 0xF1F4A3CC,
|
||||
|
||||
@@ -1043,7 +1044,7 @@ config.default_config = {
|
||||
text = "%.0f/%.0f", -- current_health/max_health
|
||||
offset = {
|
||||
x = 55,
|
||||
y = 78
|
||||
y = 74
|
||||
},
|
||||
color = 0xFFFFFFFF,
|
||||
|
||||
@@ -1063,7 +1064,7 @@ config.default_config = {
|
||||
|
||||
offset = {
|
||||
x = 145,
|
||||
y = 78
|
||||
y = 74
|
||||
},
|
||||
color = 0xFFFFFFFF,
|
||||
|
||||
@@ -1081,7 +1082,7 @@ config.default_config = {
|
||||
visibility = true,
|
||||
offset = {
|
||||
x = 10,
|
||||
y = 78
|
||||
y = 75
|
||||
},
|
||||
|
||||
size = {
|
||||
@@ -1090,7 +1091,7 @@ config.default_config = {
|
||||
},
|
||||
|
||||
colors = {
|
||||
foreground = 0xF4D0A3CC,
|
||||
foreground = 0xB9ca85cc,
|
||||
background = 0x88000000
|
||||
}
|
||||
}
|
||||
@@ -1347,7 +1348,10 @@ end
|
||||
|
||||
function config.init_module()
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
|
||||
config.load();
|
||||
language.update(table_helpers.find_index(language.language_names, config.current_config.global_settings.language, false));
|
||||
config.current_config.version = "v1.7";
|
||||
end
|
||||
|
||||
|
||||
110
MHR_Overlay/Misc/language.lua
Normal file
110
MHR_Overlay/Misc/language.lua
Normal file
@@ -0,0 +1,110 @@
|
||||
local language = {};
|
||||
local table_helpers;
|
||||
|
||||
language.current_language = {};
|
||||
|
||||
language.language_names = {};
|
||||
language.languages = {};
|
||||
|
||||
language.language_folder = "MHR Overlay\\languages\\";
|
||||
|
||||
language.default_language = {
|
||||
parts = {
|
||||
head = "Head",
|
||||
neck = "Neck",
|
||||
body = "Body",
|
||||
torso = "Torso",
|
||||
abdomen = "Abdomen",
|
||||
back = "Back",
|
||||
tail = "Tail",
|
||||
|
||||
upper_body = "Upper Body",
|
||||
lower_body = "Lower Body",
|
||||
|
||||
upper_back = "Upper Back",
|
||||
lower_back = "Lower Back",
|
||||
|
||||
left_wing = "Wing L",
|
||||
right_wing = "Wing R",
|
||||
wings = "Wings",
|
||||
|
||||
left_leg = "Leg L",
|
||||
right_leg = "Leg R",
|
||||
legs = "Legs",
|
||||
left_legs = "Legs L",
|
||||
right_legs = "Legs R",
|
||||
|
||||
left_arm = "Arm L",
|
||||
right_arm = "Arm R",
|
||||
arms = "Arms",
|
||||
|
||||
left_arm_ice = "Arm L (Ice)",
|
||||
right_arm_ice = "Arm R (Ice)",
|
||||
|
||||
left_cutwing = "Cutwing L",
|
||||
right_cutwing = "Cutwing R",
|
||||
|
||||
head_mud = "Head (Mud)",
|
||||
tail_mud = "Tail (Mud)",
|
||||
|
||||
tail_windsac = "Tail (Windsac)",
|
||||
chest_windsac = "Chest (Windsac)",
|
||||
back_windsac = "Back (Windsac)",
|
||||
|
||||
large_mudbulb = "Large Mudbulb",
|
||||
mane = "Mane",
|
||||
rear = "Rear",
|
||||
claw = "Claw",
|
||||
dorsal_fin = "Dorsal Fin",
|
||||
carapace = "Carapace",
|
||||
spinning = "Spinning",
|
||||
rock = "Rock"
|
||||
}
|
||||
};
|
||||
|
||||
function language.load()
|
||||
local language_files = fs.glob([[MHR Overlay\\languages\\.*json]]);
|
||||
|
||||
if language_files == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
for i, language_file in ipairs(language_files) do
|
||||
local language_name = language_file:gsub(language.language_folder, ""):gsub(".json", "");
|
||||
|
||||
-- v will be something like `my-cool-mod\config-file-1.json`;
|
||||
local loaded_language = json.load_file(language.language_folder .. "en-us.json");
|
||||
if loaded_language ~= nil then
|
||||
log.info("[MHR Overlay] " .. language_name .. ".json loaded successfully");
|
||||
table.insert(language.language_names, language_name);
|
||||
table.insert(language.languages, loaded_language);
|
||||
else
|
||||
log.error("[MHR Overlay] Failed to load " .. language_name .. ".json");
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
function language.save_default()
|
||||
-- save current config to disk, replacing any existing file
|
||||
local success = json.dump_file(language.language_folder .. "en-us.json", language.default_language);
|
||||
if success then
|
||||
log.info('[MHR Overlay] en-us.json saved successfully');
|
||||
else
|
||||
log.error('[MHR Overlay] Failed to save en-us.json');
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function language.update(index)
|
||||
language.current_language = table_helpers.deep_copy(language.languages[index]);
|
||||
end
|
||||
|
||||
function language.init_module()
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
language.save_default();
|
||||
language.load();
|
||||
end
|
||||
|
||||
return language;
|
||||
476
MHR_Overlay/Misc/part_names.lua
Normal file
476
MHR_Overlay/Misc/part_names.lua
Normal file
@@ -0,0 +1,476 @@
|
||||
local part_names = {};
|
||||
local language;
|
||||
local table_helpers;
|
||||
|
||||
part_names.list = {};
|
||||
|
||||
function part_names.init()
|
||||
part_names.list = {
|
||||
[98] = -- Great Izuchi+ 98
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.arms,
|
||||
language.current_language.parts.tail,
|
||||
},
|
||||
[54] = -- Great Baggi+ 54
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.torso,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[107] = -- Kulu-Ya-Ku+ 107 boulders are cut out
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.arms,
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.tail,
|
||||
language.current_language.parts.rock,
|
||||
language.current_language.parts.rock
|
||||
},
|
||||
[59] = -- Great Wroggi+ 59
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.torso,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[60] = -- Arzuros+ 60 Unknown parts
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.upper_body,
|
||||
language.current_language.parts.arms,
|
||||
language.current_language.parts.rear,
|
||||
language.current_language.parts.lower_body
|
||||
},
|
||||
[61] = -- Lagombi+ 61
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.upper_body,
|
||||
language.current_language.parts.arms,
|
||||
language.current_language.parts.rear,
|
||||
language.current_language.parts.lower_body
|
||||
},
|
||||
[62] = -- Volvidon+ 62
|
||||
{
|
||||
language.current_language.parts.upper_back,
|
||||
language.current_language.parts.upper_body,
|
||||
language.current_language.parts.arms,
|
||||
language.current_language.parts.lower_back,
|
||||
language.current_language.parts.lower_body,
|
||||
language.current_language.parts.spinning
|
||||
},
|
||||
[91] = -- Aknosom+ 91
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.neck,
|
||||
language.current_language.parts.left_wing,
|
||||
language.current_language.parts.right_wing,
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.tail,
|
||||
language.current_language.parts.legs
|
||||
},
|
||||
[47] = -- Royal Ludroth+ 47
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.mane,
|
||||
language.current_language.parts.torso,
|
||||
language.current_language.parts.left_legs,
|
||||
language.current_language.parts.right_legs,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[44] = -- Barroth+ 44
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.arms,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[3] = -- Khezu+ 3
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.neck,
|
||||
language.current_language.parts.torso,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.left_wing,
|
||||
language.current_language.parts.right_wing,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[92] = -- Tetranadon+ 92
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.right_arm,
|
||||
language.current_language.parts.left_arm,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.carapace,
|
||||
language.current_language.parts.torso,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[90] = -- Bishaten+ 90
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.torso,
|
||||
language.current_language.parts.right_arm,
|
||||
language.current_language.parts.left_arm,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[102] = -- Pukei-Pukei+ 102
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.torso,
|
||||
language.current_language.parts.left_wing,
|
||||
language.current_language.parts.right_wing,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[108] = -- Jyuratodus+ 108 missing mud parts
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.torso,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.tail,
|
||||
language.current_language.parts.head_mud,
|
||||
language.current_language.parts.tail_mud
|
||||
},
|
||||
[4] = -- Basarios+ 4
|
||||
{
|
||||
language.current_language.parts.torso,
|
||||
language.current_language.parts.left_wing,
|
||||
language.current_language.parts.right_wing,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.abdomen,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[93] = -- Somnacanth+ 93
|
||||
{
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.neck,
|
||||
language.current_language.parts.left_arm,
|
||||
language.current_language.parts.right_arm,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[1] = -- Rathian+ 1
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.left_wing,
|
||||
language.current_language.parts.right_wing,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[42] = -- Barioth+ 42
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.left_wing,
|
||||
language.current_language.parts.right_wing,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[109] = -- Tobi-Kadachi+ 109
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.torso,
|
||||
language.current_language.parts.back,
|
||||
language.current_language.parts.arms,
|
||||
language.current_language.parts.legs,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[89] = -- Magnamalo+ 89
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.torso,
|
||||
language.current_language.parts.right_arm,
|
||||
language.current_language.parts.left_arm,
|
||||
language.current_language.parts.back,
|
||||
language.current_language.parts.tail,
|
||||
language.current_language.parts.legs
|
||||
},
|
||||
[100] = -- Anjanath+ 100 (missing parts)
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.tail,
|
||||
language.current_language.parts.left_wing,
|
||||
language.current_language.parts.right_wing
|
||||
},
|
||||
[37] = -- Nargacuga+ 37
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.left_cutwing,
|
||||
language.current_language.parts.tail,
|
||||
language.current_language.parts.arms,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_cutwing,
|
||||
language.current_language.parts.right_leg
|
||||
},
|
||||
[82] = -- Mizutsune+ 82
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.left_arm,
|
||||
language.current_language.parts.right_arm,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.tail,
|
||||
language.current_language.parts.dorsal_fin
|
||||
},
|
||||
[97] = -- Goss Harag+ 97
|
||||
{
|
||||
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.back,
|
||||
language.current_language.parts.left_arm,
|
||||
language.current_language.parts.left_arm_ice,
|
||||
language.current_language.parts.right_arm,
|
||||
language.current_language.parts.right_arm_ice,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.body
|
||||
},
|
||||
[2] = -- Rathalos+ 2
|
||||
{
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.left_wing,
|
||||
language.current_language.parts.right_wing,
|
||||
language.current_language.parts.left_wing,
|
||||
language.current_language.parts.right_wing,
|
||||
language.current_language.parts.neck,
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[95] = -- Almudron+ 95
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.left_arm,
|
||||
language.current_language.parts.right_arm,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.tail,
|
||||
language.current_language.parts.large_mudbulb,
|
||||
language.current_language.parts.large_mudbulb,
|
||||
},
|
||||
[57] = -- Zinogre+ 57
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.back,
|
||||
language.current_language.parts.left_arm,
|
||||
language.current_language.parts.right_arm,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[32] = -- Tigrex+ 32
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.left_arm,
|
||||
language.current_language.parts.right_arm,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[7] = -- Diablos+ 7
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.left_wing,
|
||||
language.current_language.parts.right_wing,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[94] = -- Rakna-Kadaki+ 94 (?)
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.claw,
|
||||
language.current_language.parts.left_arm,
|
||||
language.current_language.parts.right_arm,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.abdomen,
|
||||
language.current_language.parts.left_arm,
|
||||
language.current_language.parts.right_arm -- mb abdomen_cocooned)
|
||||
},
|
||||
[24] = -- Kushala Daora+ 24
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.back,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.wings,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[25] = -- Chameleos+ 25
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.abdomen,
|
||||
language.current_language.parts.left_arm,
|
||||
language.current_language.parts.right_arm,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.tail,
|
||||
language.current_language.parts.wings
|
||||
},
|
||||
[27] = -- Teostra+ 27
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.arms,
|
||||
language.current_language.parts.legs,
|
||||
language.current_language.parts.wings,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[23] = -- Rajang+ 23
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.left_arm,
|
||||
language.current_language.parts.right_arm,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[118] = -- Bazelgeuse+ 118
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.legs,
|
||||
language.current_language.parts.left_wing,
|
||||
language.current_language.parts.right_wing,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[96] = -- Wind Serpent Ibushi+ 96 (missing parts)
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.right_arm,
|
||||
language.current_language.parts.left_arm,
|
||||
language.current_language.parts.torso,
|
||||
language.current_language.parts.back,
|
||||
language.current_language.parts.tail,
|
||||
language.current_language.parts.tail_windsac,
|
||||
language.current_language.parts.chest_windsac,
|
||||
language.current_language.parts.back_windsac
|
||||
},
|
||||
[99] = -- Thunder Serpent Narwa+ 99 (no parts?)
|
||||
{},
|
||||
[1379] = -- Narwa the Allmother+ 1379 (no parts?)
|
||||
{},
|
||||
[1366] = -- Crimson Glow Valstrax+ 1366
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.left_wing,
|
||||
language.current_language.parts.right_wing,
|
||||
language.current_language.parts.left_arm,
|
||||
language.current_language.parts.right_arm,
|
||||
language.current_language.parts.tail,
|
||||
language.current_language.parts.legs,
|
||||
language.current_language.parts.chest_windsac
|
||||
},
|
||||
[1852] = -- Apex Arzuros+ 1852
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.upper_body,
|
||||
language.current_language.parts.arms,
|
||||
language.current_language.parts.rear,
|
||||
language.current_language.parts.lower_body
|
||||
},
|
||||
[1793] = -- Apex Rathian+ 1793
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.left_wing,
|
||||
language.current_language.parts.right_wing,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[1874] = -- Apex Mizutsune+ 1874
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.left_arm,
|
||||
language.current_language.parts.right_arm,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.tail,
|
||||
language.current_language.parts.dorsal_fin
|
||||
},
|
||||
[1794] = -- Apex Rathalos+ 1794
|
||||
{
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.left_wing,
|
||||
language.current_language.parts.right_wing,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.neck,
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[1799] = -- Apex Diablos+ 1799
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.left_wing,
|
||||
language.current_language.parts.right_wing,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[1849] = -- Apex Zinogre+ 1849
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.body,
|
||||
language.current_language.parts.back,
|
||||
language.current_language.parts.left_arm,
|
||||
language.current_language.parts.right_arm,
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg,
|
||||
language.current_language.parts.tail
|
||||
}
|
||||
};
|
||||
end
|
||||
|
||||
function part_names.get_part_name(monster_id, part_id)
|
||||
|
||||
local monster_parts = part_names.list[monster_id];
|
||||
if monster_parts == nil then
|
||||
return "";
|
||||
end
|
||||
|
||||
local part_name = monster_parts[part_id];
|
||||
if part_name == nil then
|
||||
return "";
|
||||
end
|
||||
|
||||
return part_name;
|
||||
end
|
||||
|
||||
function part_names.init_module()
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||
|
||||
part_names.init();
|
||||
end
|
||||
|
||||
return part_names;
|
||||
@@ -62,82 +62,18 @@ function table_helpers.merge(...)
|
||||
end
|
||||
|
||||
function table_helpers.tostring(table)
|
||||
local cache, stack, output = {}, {}, {};
|
||||
local depth = 1;
|
||||
local output_string = "{\n";
|
||||
|
||||
while true do
|
||||
local size = 0;
|
||||
for key, value in pairs(table) do
|
||||
size = size + 1;
|
||||
end
|
||||
|
||||
local current_index = 1;
|
||||
for key, value in pairs(table) do
|
||||
if (cache[table] == nil) or (current_index >= cache[table]) then
|
||||
|
||||
if (string.find(output_string, "}", output_string:len())) then
|
||||
output_string = output_string .. ",\n";
|
||||
elseif not (string.find(output_string, "\n",output_string:len())) then
|
||||
output_string = output_string .. "\n";
|
||||
end
|
||||
|
||||
-- This is necessary for working with HUGE tables otherwise we run out of memory using concat on huge strings
|
||||
table.insert(output, output_string);
|
||||
output_string = "";
|
||||
|
||||
local key;
|
||||
if (type(key) == "number" or type(key) == "boolean") then
|
||||
key = "[" .. tostring(key) .. "]";
|
||||
else
|
||||
key = "['" .. tostring(key) .. "']";
|
||||
end
|
||||
|
||||
if (type(value) == "number" or type(value) == "boolean") then
|
||||
output_string = output_string .. string.rep('\t', depth) .. key .. " = " .. tostring(value);
|
||||
elseif (type(value) == "table") then
|
||||
output_string = output_string .. string.rep('\t', depth) .. key .. " = {\n";
|
||||
table.insert(stack, table);
|
||||
table.insert(stack, value);
|
||||
cache[table] = current_index + 1;
|
||||
break
|
||||
else
|
||||
output_string = output_string .. string.rep('\t', depth) .. key .. " = '" .. tostring(value) .. "'";
|
||||
end
|
||||
|
||||
if (current_index == size) then
|
||||
output_string = output_string .. "\n" .. string.rep('\t', depth - 1) .. "}";
|
||||
else
|
||||
output_string = output_string .. ",";
|
||||
end
|
||||
else
|
||||
-- close the table
|
||||
if (current_index == size) then
|
||||
output_string = output_string .. "\n" .. string.rep('\t', depth - 1) .. "}";
|
||||
end
|
||||
if type(table) == 'table' then
|
||||
local s = '{ \n';
|
||||
for k,v in pairs(table) do
|
||||
if type(k) ~= 'number' then
|
||||
k = '"' .. k .. '"';
|
||||
end
|
||||
|
||||
current_index = current_index + 1;
|
||||
end
|
||||
|
||||
if (size == 0) then
|
||||
output_string = output_string .. "\n" .. string.rep('\t', depth - 1) .. "}";
|
||||
end
|
||||
|
||||
if (#stack > 0) then
|
||||
table = stack[#stack];
|
||||
stack[#stack] = nil;
|
||||
depth = cache[table] == nil and depth + 1 or depth - 1;
|
||||
else
|
||||
break;
|
||||
s = s .. '\t['..k..'] = ' .. table_helpers.tostring(v) .. ',\n';
|
||||
end
|
||||
return s .. '} \n';
|
||||
else
|
||||
return tostring(table);
|
||||
end
|
||||
|
||||
-- This is necessary for working with HUGE tables otherwise we run out of memory using concat on huge strings
|
||||
table.insert(output, output_string);
|
||||
output_string = table.concat(output);
|
||||
|
||||
return output_string;
|
||||
end
|
||||
|
||||
function table_helpers.init_module()
|
||||
|
||||
@@ -9,10 +9,11 @@ local rage_UI_entity;
|
||||
local body_part_UI_entity;
|
||||
local screen;
|
||||
local drawing;
|
||||
local part_names;
|
||||
|
||||
body_part.list = {};
|
||||
|
||||
function body_part.new(REpart, id)
|
||||
function body_part.new(REpart, name, id)
|
||||
local part = {};
|
||||
|
||||
part.REpart = REpart;
|
||||
@@ -22,7 +23,7 @@ function body_part.new(REpart, id)
|
||||
part.max_health = 99999;
|
||||
part.health_percentage = 0;
|
||||
|
||||
part.name = "??";
|
||||
part.name = name;
|
||||
part.break_count = 0;
|
||||
|
||||
body_part.init_dynamic_UI(part);
|
||||
@@ -90,6 +91,7 @@ function body_part.init_module()
|
||||
body_part_UI_entity = require("MHR_Overlay.UI.UI_Entities.body_part_UI_entity");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
part_names = require("MHR_Overlay.Misc.part_names");
|
||||
end
|
||||
|
||||
return body_part;
|
||||
@@ -9,6 +9,7 @@ local rage_UI_entity;
|
||||
local screen;
|
||||
local drawing;
|
||||
local body_part;
|
||||
local part_names;
|
||||
|
||||
large_monster.list = {};
|
||||
|
||||
@@ -213,7 +214,7 @@ local anger_param_get_timer_method = anger_param_type:get_method("get_Timer")
|
||||
local get_timer_anger_method = anger_param_type:get_method("get_TimerAnger")
|
||||
local get_count_anger_method = anger_param_type:get_method("get_CountAnger")
|
||||
|
||||
local get_gameobject_method = sdk.find_type_definition("via.Component"):get_method("get_GameObject")
|
||||
local get_game_object_method = sdk.find_type_definition("via.Component"):get_method("get_GameObject")
|
||||
local get_transform_method = sdk.find_type_definition("via.GameObject"):get_method("get_Transform")
|
||||
local get_position_method = sdk.find_type_definition("via.Transform"):get_method("get_Position")
|
||||
|
||||
@@ -230,7 +231,7 @@ function large_monster.update_position(enemy)
|
||||
-- as these are pretty much guaranteed to stay constant
|
||||
-- as long as the enemy is alive
|
||||
if monster.game_object == nil then
|
||||
monster.game_object = get_gameobject_method:call(enemy)
|
||||
monster.game_object = get_game_object_method:call(enemy)
|
||||
if monster.game_object == nil then
|
||||
customization_menu.status = "No enemy game object";
|
||||
return;
|
||||
@@ -354,10 +355,6 @@ function large_monster.update(enemy)
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if part_health == last_REpart_health then
|
||||
break;
|
||||
end
|
||||
|
||||
local part_max_health = REpart:call("get_Max");
|
||||
if part_max_health == nil or part_max_health <= 0 then
|
||||
goto continue;
|
||||
@@ -365,8 +362,12 @@ function large_monster.update(enemy)
|
||||
|
||||
local part = monster.parts[REpart];
|
||||
if part == nil then
|
||||
part = body_part.new(REpart, part_id);
|
||||
monster.parts[REpart] = part;
|
||||
local part_name = part_names.get_part_name(monster.id, part_id);
|
||||
|
||||
if part_name ~= "" then
|
||||
part = body_part.new(REpart, part_name, part_id);
|
||||
monster.parts[REpart] = part;
|
||||
end
|
||||
end
|
||||
|
||||
body_part.update(part, part_health, part_max_health);
|
||||
@@ -473,7 +474,7 @@ function large_monster.draw_dynamic(monster, position_on_screen, opacity_scale)
|
||||
100 * monster.big_border, 100 * monster.king_border);
|
||||
end
|
||||
|
||||
drawing.draw_label(monster.dynamic_name_label, position_on_screen, opacity_scale, monster_name_text .. " " .. tostring(monster.id));
|
||||
drawing.draw_label(monster.dynamic_name_label, position_on_screen, opacity_scale, monster_name_text);
|
||||
|
||||
health_UI_entity.draw(monster, monster.health_dynamic_UI, position_on_screen, opacity_scale);
|
||||
stamina_UI_entity.draw(monster, monster.stamina_dynamic_UI, position_on_screen, opacity_scale);
|
||||
@@ -550,7 +551,7 @@ function large_monster.draw_static(monster, position_on_screen, opacity_scale)
|
||||
100 * monster.big_border, 100 * monster.king_border);
|
||||
end
|
||||
|
||||
drawing.draw_label(monster.static_name_label, position_on_screen, opacity_scale, monster_name_text .. " " .. tostring(monster.id));
|
||||
drawing.draw_label(monster.static_name_label, position_on_screen, opacity_scale, monster_name_text);
|
||||
|
||||
health_UI_entity.draw(monster, monster.health_static_UI, position_on_screen, opacity_scale);
|
||||
stamina_UI_entity.draw(monster, monster.stamina_static_UI, position_on_screen, opacity_scale);
|
||||
@@ -624,6 +625,7 @@ function large_monster.init_module()
|
||||
rage_UI_entity = require("MHR_Overlay.UI.UI_Entities.rage_UI_entity");
|
||||
screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
part_names = require("MHR_Overlay.Misc.part_names");
|
||||
end
|
||||
|
||||
return large_monster;
|
||||
@@ -5,13 +5,14 @@ local large_monster;
|
||||
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 is_boss_enemy_method = sdk.find_type_definition("snow.enemy.EnemyCharacterBase"):get_method("get_isBossEnemy");
|
||||
|
||||
sdk.hook(enemy_character_base_type_def_update_method, function(args)
|
||||
monster.update_monster(sdk.to_managed_object(args[2]));
|
||||
end, function(retval)
|
||||
return retval;
|
||||
end);
|
||||
|
||||
local is_boss_enemy_method = sdk.find_type_definition("snow.enemy.EnemyCharacterBase"):get_method("get_isBossEnemy");
|
||||
local tick_count = 0
|
||||
local last_update_tick = 0
|
||||
local recorded_monsters = {}
|
||||
@@ -30,21 +31,18 @@ local MAX_UPDATES_PER_TICK = 2
|
||||
-- the reason for this is that the hooks on all the monsters' update functions
|
||||
-- causes a HUGE performance hit (adds ~3+ ms to UpdateBehavior and frame time)
|
||||
re.on_pre_application_entry("UpdateBehavior", function()
|
||||
tick_count = tick_count + 1
|
||||
updates_this_tick = 0
|
||||
tick_count = tick_count + 1;
|
||||
updates_this_tick = 0;
|
||||
|
||||
if num_known_monsters ~= 0 and
|
||||
num_updated_monsters >= num_known_monsters or
|
||||
tick_count >= num_known_monsters * 2
|
||||
then
|
||||
recorded_monsters = {}
|
||||
updated_monsters = {}
|
||||
known_big_monsters = {}
|
||||
last_update_tick = 0
|
||||
tick_count = 0
|
||||
num_known_monsters = 0
|
||||
num_updated_monsters = 0
|
||||
updates_this_tick = 0
|
||||
if num_known_monsters ~= 0 and num_updated_monsters >= num_known_monsters or tick_count >= num_known_monsters * 2 then
|
||||
recorded_monsters = {};
|
||||
updated_monsters = {};
|
||||
known_big_monsters = {};
|
||||
last_update_tick = 0;
|
||||
tick_count = 0;
|
||||
num_known_monsters = 0;
|
||||
num_updated_monsters = 0;
|
||||
updates_this_tick = 0;
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
@@ -9,6 +9,28 @@ local drawing;
|
||||
|
||||
damage_meter_UI.last_displayed_players = {};
|
||||
|
||||
local lobby_manager_type_def = sdk.find_type_definition("snow.LobbyManager");
|
||||
local my_hunter_info_field = lobby_manager_type_def:get_field("_myHunterInfo");
|
||||
local myself_index_field = lobby_manager_type_def:get_field("_myselfIndex");
|
||||
local myself_quest_index_field = lobby_manager_type_def:get_field("_myselfQuestIndex");
|
||||
|
||||
local quest_hunter_info_field = lobby_manager_type_def:get_field("_questHunterInfo");
|
||||
|
||||
local my_hunter_info_type_def = my_hunter_info_field:get_type();
|
||||
local name_field = my_hunter_info_type_def:get_field("_name");
|
||||
|
||||
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");
|
||||
|
||||
local hunter_info_type_def = sdk.find_type_definition("snow.LobbyManager.HunterInfo");
|
||||
local member_index_field = hunter_info_type_def:get_field("_memberIndex");
|
||||
local hunter_rank_field = hunter_info_type_def:get_field("_hunterRank");
|
||||
--local name_field = hunter_info_type_def:get_field("_name");
|
||||
|
||||
local progress_manager_type_def = sdk.find_type_definition("snow.progress.ProgressManager");
|
||||
local get_hunter_rank_method = progress_manager_type_def:get_method("get_HunterRank");
|
||||
|
||||
function damage_meter_UI.draw()
|
||||
|
||||
if player.total.display.total_damage == 0 and config.current_config.damage_meter_UI.settings.hide_module_if_total_damage_is_zero then
|
||||
@@ -24,40 +46,38 @@ function damage_meter_UI.draw()
|
||||
end
|
||||
|
||||
-- myself player
|
||||
local myself_player_info = singletons.lobby_manager:get_field("_myHunterInfo");
|
||||
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";
|
||||
return;
|
||||
end
|
||||
|
||||
local myself_player_name = myself_player_info:get_field("_name");
|
||||
local myself_player_name = name_field:get_data(myself_player_info);
|
||||
if myself_player_name == nil then
|
||||
customization_menu.status = "No myself player name";
|
||||
return;
|
||||
end
|
||||
|
||||
if quest_status.is_online then
|
||||
player.myself_id = singletons.lobby_manager:get_field("_myselfQuestIndex");
|
||||
player.myself_id = myself_quest_index_field:get_data(singletons.lobby_manager);
|
||||
if player.myself_id == nil then
|
||||
customization_menu.status = "No myself player id";
|
||||
return;
|
||||
end
|
||||
else
|
||||
player.myself_id = singletons.lobby_manager:get_field("_myselfIndex");
|
||||
player.myself_id = myself_index_field:get_data(singletons.lobby_manager);
|
||||
if player.myself_id == nil then
|
||||
customization_menu.status = "No myself player id";
|
||||
return;
|
||||
end
|
||||
end
|
||||
|
||||
local myself_hunter_rank = singletons.progress_manager:call("get_HunterRank");
|
||||
local myself_hunter_rank = get_hunter_rank_method:call(singletons.progress_manager);
|
||||
if myself_hunter_rank == nil then
|
||||
customization_menu.status = "No myself hunter rank";
|
||||
myself_hunter_rank = 0;
|
||||
end
|
||||
|
||||
x = singletons.lobby_manager:get_field("_myselfIndex");
|
||||
|
||||
if player.list[player.myself_id] == nil then
|
||||
player.list[player.myself_id] = player.new(player.myself_id, myself_player_name, myself_hunter_rank);
|
||||
player.myself = player.list[player.myself_id];
|
||||
@@ -71,12 +91,12 @@ function damage_meter_UI.draw()
|
||||
quest_players = damage_meter_UI.last_displayed_players;
|
||||
else
|
||||
-- other players
|
||||
local player_info_list = singletons.lobby_manager:get_field("_questHunterInfo");
|
||||
local player_info_list = quest_hunter_info_field:get_data(singletons.lobby_manager);
|
||||
if player_info_list == nil then
|
||||
customization_menu.status = "No player info list";
|
||||
end
|
||||
|
||||
local count = player_info_list:call("get_Count");
|
||||
local count = get_count_method:call(player_info_list);
|
||||
if count == nil then
|
||||
customization_menu.status = "No player info list count";
|
||||
return;
|
||||
@@ -84,17 +104,17 @@ function damage_meter_UI.draw()
|
||||
|
||||
for i = 0, count - 1 do
|
||||
|
||||
local player_info = player_info_list:call("get_Item", i);
|
||||
local player_info = get_item_method:call(player_info_list, i);
|
||||
if player_info == nil then
|
||||
goto continue
|
||||
end
|
||||
|
||||
local player_id = player_info:get_field("_memberIndex");
|
||||
local player_id = member_index_field:get_data(player_info)
|
||||
if player_id == nil then
|
||||
goto continue
|
||||
end
|
||||
|
||||
local player_hunter_rank = player_info:get_field("_hunterRank");
|
||||
local player_hunter_rank = hunter_rank_field:get_data(player_info);
|
||||
if player_hunter_rank == nil then
|
||||
goto continue
|
||||
end
|
||||
@@ -104,7 +124,7 @@ function damage_meter_UI.draw()
|
||||
goto continue
|
||||
end
|
||||
|
||||
local player_name = player_info:get_field("_name");
|
||||
local player_name = name_field:get_data(player_info);
|
||||
if player_name == nil then
|
||||
goto continue
|
||||
end
|
||||
|
||||
@@ -11,6 +11,10 @@ local health_UI_entity;
|
||||
local stamina_UI_entity;
|
||||
local rage_UI_entity;
|
||||
|
||||
local enemy_manager_type_def = sdk.find_type_definition("snow.enemy.EnemyManager");
|
||||
local get_boss_enemy_count_method = enemy_manager_type_def:get_method("getBossEnemyCount");
|
||||
local get_boss_enemy_method = enemy_manager_type_def:get_method("getBossEnemy");
|
||||
|
||||
function large_monster_UI.draw(dynamic_enabled, static_enabled)
|
||||
if singletons.enemy_manager == nil then
|
||||
return;
|
||||
@@ -18,13 +22,13 @@ function large_monster_UI.draw(dynamic_enabled, static_enabled)
|
||||
|
||||
local displayed_monsters = {};
|
||||
|
||||
local enemy_count = singletons.enemy_manager:call("getBossEnemyCount");
|
||||
local enemy_count = get_boss_enemy_count_method:call(singletons.enemy_manager);
|
||||
if enemy_count == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
for i = 0, enemy_count - 1 do
|
||||
local enemy = singletons.enemy_manager:call("getBossEnemy", i);
|
||||
local enemy = get_boss_enemy_method:call(singletons.enemy_manager, i);
|
||||
if enemy == nil then
|
||||
customization_menu.status = "No enemy";
|
||||
break
|
||||
|
||||
@@ -10,6 +10,10 @@ local table_helpers;
|
||||
local health_UI_entity;
|
||||
local stamina_UI_entity;
|
||||
|
||||
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 small_monster_UI.draw()
|
||||
if singletons.enemy_manager == nil then
|
||||
return;
|
||||
@@ -17,14 +21,14 @@ function small_monster_UI.draw()
|
||||
|
||||
local displayed_monsters = {};
|
||||
|
||||
local enemy_count = singletons.enemy_manager:call("getZakoEnemyCount");
|
||||
local enemy_count = get_zako_enemy_count_method:call(singletons.enemy_manager);
|
||||
if enemy_count == nil then
|
||||
customization_menu.status = "No enemy count";
|
||||
return;
|
||||
end
|
||||
|
||||
for i = 0, enemy_count - 1 do
|
||||
local enemy = singletons.enemy_manager:call("getZakoEnemy", i);
|
||||
local enemy = get_zako_enemy_method:call(singletons.enemy_manager, i);
|
||||
if enemy == nil then
|
||||
customization_menu.status = "No enemy";
|
||||
break
|
||||
|
||||
@@ -5,20 +5,22 @@ local screen;
|
||||
local config;
|
||||
local drawing;
|
||||
|
||||
local quest_manager_type_def = sdk.find_type_definition("snow.QuestManager");
|
||||
local get_quest_elapsed_time_min_method = quest_manager_type_def:get_method("getQuestElapsedTimeMin");
|
||||
local get_quest_elapseD_time_sec_method = quest_manager_type_def:get_method("getQuestElapsedTimeSec");
|
||||
|
||||
function time_UI.draw()
|
||||
if singletons.quest_manager == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
|
||||
|
||||
local quest_time_elapsed_minutes = singletons.quest_manager:call("getQuestElapsedTimeMin");
|
||||
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";
|
||||
return;
|
||||
end
|
||||
|
||||
local quest_time_total_elapsed_seconds = singletons.quest_manager:call("getQuestElapsedTimeSec");
|
||||
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";
|
||||
return;
|
||||
|
||||
@@ -16,7 +16,6 @@ end
|
||||
|
||||
function health_UI_entity.draw(monster, health_UI, position_on_screen, opacity_scale)
|
||||
if not health_UI.visibility then
|
||||
x = health_UI.visibility
|
||||
return;
|
||||
end
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user