Merge pull request #49 from GreenComfyTea/main

This commit is contained in:
GreenComfyTea
2022-07-23 17:55:04 +03:00
committed by GitHub
16 changed files with 196 additions and 221 deletions

View File

@@ -1,6 +1,7 @@
local debug = false;
xy = ""; xy = "";
local debug = require("MHR_Overlay.Misc.debug");
local keyboard = require("MHR_Overlay.Game_Handler.keyboard"); local keyboard = require("MHR_Overlay.Game_Handler.keyboard");
local quest_status = require("MHR_Overlay.Game_Handler.quest_status"); local quest_status = require("MHR_Overlay.Game_Handler.quest_status");
local screen = require("MHR_Overlay.Game_Handler.screen"); local screen = require("MHR_Overlay.Game_Handler.screen");
@@ -104,13 +105,10 @@ local function main_loop()
player.update_myself_position(); player.update_myself_position();
quest_status.update_is_online(); quest_status.update_is_online();
quest_status.update_is_result_screen(); quest_status.update_is_result_screen();
quest_status.update_is_host();
time.tick(); time.tick();
if quest_status.index < 2 then player.update_player_list(quest_status.index >= 2);
player.update_player_list_in_village();
else
player.update_player_list_on_quest();
end
if quest_status.index < 2 then if quest_status.index < 2 then
quest_status.update_is_training_area(); quest_status.update_is_training_area();
@@ -478,17 +476,21 @@ end
if debug then if debug.enabled then
if d2d ~= nil then if d2d ~= nil then
d2d.register(function() d2d.register(function()
end, function() end, function()
d2d.text(drawing.font, "xy: " .. tostring(xy), 551, 11, 0xFF000000); if xy ~= "" then
d2d.text(drawing.font, "xy: " .. tostring(xy), 550, 10, 0xFFFFFFFF); d2d.text(drawing.font, "xy:\n" .. tostring(xy), 551, 11, 0xFF000000);
d2d.text(drawing.font, "xy:\n" .. tostring(xy), 550, 10, 0xFFFFFFFF);
end
end); end);
else else
re.on_frame(function() re.on_frame(function()
draw.text("xy: " .. tostring(xy), 551, 11, 0xFF000000); if xy ~= "" then
draw.text("xy: " .. tostring(xy), 550, 10, 0xFFFFFFFF); draw.text("xy:\n" .. tostring(xy), 551, 11, 0xFF000000);
draw.text("xy:\n" .. tostring(xy), 550, 10, 0xFFFFFFFF);
end
end); end);
end end
end end

View File

@@ -14,12 +14,12 @@ player.myself = nil;
player.myself_position = Vector3f.new(0, 0, 0); player.myself_position = Vector3f.new(0, 0, 0);
player.total = nil; player.total = nil;
function player.new(player_id, player_name, player_master_rank, player_hunter_rank) function player.new(id, name, master_rank, hunter_rank)
local new_player = {}; local new_player = {};
new_player.id = player_id; new_player.id = id;
new_player.name = player_name; new_player.name = name;
new_player.hunter_rank = player_hunter_rank; new_player.hunter_rank = hunter_rank;
new_player.master_rank = player_master_rank; new_player.master_rank = master_rank;
new_player.cart_count = 0; new_player.cart_count = 0;
@@ -155,13 +155,12 @@ function player.new(player_id, player_name, player_master_rank, player_hunter_ra
new_player.display.elemental_damage = 0; new_player.display.elemental_damage = 0;
new_player.display.ailment_damage = 0; new_player.display.ailment_damage = 0;
if player_name == "Total" then if name == "Total" then
player.init_total_UI(new_player); player.init_total_UI(new_player);
else else
player.init_UI(new_player); player.init_UI(new_player);
end end
return new_player; return new_player;
end end
@@ -364,12 +363,14 @@ end
local lobby_manager_type_def = sdk.find_type_definition("snow.LobbyManager"); local lobby_manager_type_def = sdk.find_type_definition("snow.LobbyManager");
local my_hunter_info_field = lobby_manager_type_def:get_field("_myHunterInfo"); local my_hunter_info_field = lobby_manager_type_def:get_field("_myHunterInfo");
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 quest_hunter_info_field = lobby_manager_type_def:get_field("_questHunterInfo");
local hunter_info_field = lobby_manager_type_def:get_field("_hunterInfo"); local hunter_info_field = lobby_manager_type_def:get_field("_hunterInfo");
local my_hunter_info_type_def = my_hunter_info_field:get_type(); local my_hunter_info_type_def = my_hunter_info_field:get_type();
local name_field = my_hunter_info_type_def:get_field("_name"); local name_field = my_hunter_info_type_def:get_field("_name");
local hunter_unique_id_field = my_hunter_info_type_def:get_field("_HunterUniqueId");
local member_index_field = my_hunter_info_type_def:get_field("_memberIndex"); local member_index_field = my_hunter_info_type_def:get_field("_memberIndex");
local hunter_rank_field = my_hunter_info_type_def:get_field("_hunterRank"); local hunter_rank_field = my_hunter_info_type_def:get_field("_hunterRank");
local master_rank_field = my_hunter_info_type_def:get_field("_masterRank"); local master_rank_field = my_hunter_info_type_def:get_field("_masterRank");
@@ -378,15 +379,25 @@ local hunter_info_type_def = hunter_info_field:get_type();
local get_count_method = hunter_info_type_def:get_method("get_Count"); local get_count_method = hunter_info_type_def:get_method("get_Count");
local get_item_method = hunter_info_type_def:get_method("get_Item"); local get_item_method = hunter_info_type_def:get_method("get_Item");
local guid_type = hunter_unique_id_field:get_type();
local guid_equals_method = guid_type:get_method("Equals(System.Guid)");
local progress_manager_type_def = sdk.find_type_definition("snow.progress.ProgressManager"); 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"); local get_hunter_rank_method = progress_manager_type_def:get_method("get_HunterRank");
local get_master_rank_method = progress_manager_type_def:get_method("get_MasterRank"); local get_master_rank_method = progress_manager_type_def:get_method("get_MasterRank");
local player_manager_type_def = sdk.find_type_definition("snow.player.PlayerManager");
local get_master_player_id_method = player_manager_type_def:get_method("getMasterPlayerID"); local get_master_player_id_method = player_manager_type_def:get_method("getMasterPlayerID");
function player.update_player_list_in_village() function player.update_player_list(is_on_quest)
if is_on_quest then
player.update_player_list_(quest_hunter_info_field);
else
player.update_player_list_(hunter_info_field);
end
end
function player.update_player_list_(hunter_info_field_)
if singletons.lobby_manager == nil then if singletons.lobby_manager == nil then
return; return;
end end
@@ -408,120 +419,41 @@ function player.update_player_list_in_village()
return; return;
end end
local myself_hunter_rank = get_hunter_rank_method:call(singletons.progress_manager); local myself_hunter_rank = get_hunter_rank_method:call(singletons.progress_manager) or 0;
if myself_hunter_rank == nil then local myself_master_rank = get_master_rank_method:call(singletons.progress_manager) or 0;
customization_menu.status = "No myself hunter rank";
myself_hunter_rank = 0;
end
local myself_id = get_master_player_id_method:call(singletons.player_manager) or -1;
--if quest_status.is_online then
--myself_id = get_master_player_id_method:call(singletons.player_manager) or -1;
--else
--myself_id = myself_quest_index_field:call(singletons.lobby_manager) or -1;
--end
local myself_master_rank = get_master_rank_method:call(singletons.progress_manager);
if myself_master_rank == nil then
customization_menu.status = "No myself master rank";
myself_master_rank = 0;
end
local myself_id = get_master_player_id_method:call(singletons.player_manager);
if myself_id == nil then if myself_id == nil then
customization_menu.status = "No myself player id"; customization_menu.status = "No myself player id";
elseif player.myself == nil or myself_id ~= player.myself.id then return;
player.myself = player.new(myself_id, myself_player_name, myself_master_rank, myself_hunter_rank); end
local myself_guid = hunter_unique_id_field:get_data(myself_player_info);
if myself_guid == nil then
customization_menu.status = "No myself guid";
return;
end
--local myself_guid_string = guid_tostring_method:call(myself_guid);
--if myself_guid_string == nil then
-- customization_menu.status = "No myself guid string";
-- return;
--end
if myself_id ~= player.myself.id then
player.list[player.myself.id] = nil;
player.myself = player.new(myself_id, myself_guid, myself_player_name, myself_master_rank, myself_hunter_rank);
player.list[myself_id] = player.myself; player.list[myself_id] = player.myself;
end end
-- other players -- other players
local player_info_list = hunter_info_field:get_data(singletons.lobby_manager); local player_info_list = hunter_info_field_:get_data(singletons.lobby_manager);
if player_info_list == nil then
customization_menu.status = "No player info list";
return;
end
local count = get_count_method:call(player_info_list);
if count == nil then
customization_menu.status = "No player info list count";
return;
end
for i = 0, count - 1 do
local player_info = get_item_method:call(player_info_list, i);
if player_info == nil then
goto continue;
end
local player_id = member_index_field:get_data(player_info);
if player_id == nil then
goto continue;
end
local player_hunter_rank = hunter_rank_field:get_data(player_info);
if player_hunter_rank == nil then
goto continue;
end
local player_master_rank = master_rank_field:get_data(player_info);
if player_hunter_rank == nil then
player_master_rank = 0;
end
local player_name = name_field:get_data(player_info);
if player_name == nil then
goto continue;
end
if player.myself.id == player_id then
player.list[player_id] = player.myself;
elseif player.list[player_id] == nil or player.list[player_id].name ~= player_name then
player.list[player_id] = player.new(player_id, player_name, player_master_rank, player_hunter_rank);
end
::continue::
end
end
function player.update_player_list_on_quest()
if singletons.lobby_manager == nil then
return;
end
if singletons.progress_manager == nil then
return;
end
-- myself player
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 = name_field:get_data(myself_player_info);
if myself_player_name == nil then
customization_menu.status = "No myself player name";
return;
end
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
local myself_master_rank = get_master_rank_method:call(singletons.progress_manager);
if myself_hunter_rank == nil then
customization_menu.status = "No myself master rank";
myself_hunter_rank = 0;
end
local myself_id = get_master_player_id_method:call(singletons.player_manager);
if myself_id == nil then
customization_menu.status = "No myself player id";
elseif player.myself == nil or myself_id ~= player.myself.id then
player.myself = player.new(myself_id, myself_player_name, myself_master_rank, myself_hunter_rank);
player.list[myself_id] = player.myself;
end
-- other players
local player_info_list = quest_hunter_info_field:get_data(singletons.lobby_manager);
if player_info_list == nil then if player_info_list == nil then
customization_menu.status = "No player info list"; customization_menu.status = "No player info list";
return; return;
@@ -545,25 +477,36 @@ function player.update_player_list_on_quest()
goto continue; goto continue;
end end
local player_hunter_rank = hunter_rank_field:get_data(player_info); local player_guid = hunter_unique_id_field:get_data(player_info);
if player_hunter_rank == nil then if player_guid == nil then
goto continue; customization_menu.status = "No player guid";
return;
end end
local player_master_rank = master_rank_field:get_data(player_info); --local player_guid_string = guid_tostring_method:call(player_guid);
if player_master_rank == nil then --if player_guid_string == nil then
player_master_rank = 0; -- customization_menu.status = "No player guid string";
end -- return;
--end
local player_hunter_rank = hunter_rank_field:get_data(player_info) or 0;
local player_master_rank = master_rank_field:get_data(player_info) or 0;
local player_name = name_field:get_data(player_info); local player_name = name_field:get_data(player_info);
if player_name == nil then if player_name == nil then
goto continue; goto continue;
end end
if player.myself.id == player_id then if player.list[player_id] == nil or
player.list[player_id] = player.myself; not guid_equals_method:call(player.list[player_id].guid, player_guid)
elseif player.list[player_id] == nil or player.list[player_id].name ~= player_name then --player.list[player_id].guid ~= player_guid
player.list[player_id] = player.new(player_id, player_name, player_master_rank, player_hunter_rank); then
local _player = player.new(player_id, player_guid, player_name, player_master_rank, player_hunter_rank);
player.list[player_id] = _player;
if player_name == player.myself.name and player_hunter_rank == player.myself.hunter_rank and player_master_rank == player.myself.master_rank then
player.myself = _player;
end
end end
::continue:: ::continue::

View File

@@ -11,23 +11,30 @@ local env_creature;
quest_status.index = 0; quest_status.index = 0;
quest_status.is_online = false; quest_status.is_online = false;
quest_status.is_host = false;
quest_status.is_training_area = false; quest_status.is_training_area = false;
quest_status.update_is_result_screen = false; quest_status.is_result_screen = false;
quest_status.is_quest_clear = false;
local quest_manager_type_definition = sdk.find_type_definition("snow.QuestManager"); local quest_manager_type_definition = sdk.find_type_definition("snow.QuestManager");
local on_changed_game_status = quest_manager_type_definition:get_method("onChangedGameStatus"); local on_changed_game_status = quest_manager_type_definition:get_method("onChangedGameStatus");
local get_status_method = quest_manager_type_definition:get_method("getStatus"); local get_status_method = quest_manager_type_definition:get_method("getStatus");
local is_result_demo_play_start_method = quest_manager_type_definition:get_method("isResultDemoPlayStart"); local is_result_demo_play_start_method = quest_manager_type_definition:get_method("isResultDemoPlayStart");
local set_quest_clear_method = quest_manager_type_definition:get_method("setQuestClear");
local set_quest_clear_sub_method = quest_manager_type_definition:get_method("setQuestClearSub");
local set_quest_clear_sub_hyakurui_method = quest_manager_type_definition:get_method("setQuestClearSubHyakuryu");
local village_area_manager_type_def = sdk.find_type_definition("snow.VillageAreaManager"); 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"); local check_current_area_training_area_method = village_area_manager_type_def:get_method("checkCurrentArea_TrainingArea");
local lobby_manager_type_definition = sdk.find_type_definition("snow.LobbyManager"); local lobby_manager_type_definition = sdk.find_type_definition("snow.LobbyManager");
local is_quest_online_method = lobby_manager_type_definition:get_method("IsQuestOnline"); local is_quest_online_method = lobby_manager_type_definition:get_method("IsQuestOnline");
local is_quest_host_method = lobby_manager_type_definition:get_method("isQuestHost");
function quest_status.update(args)
local new_quest_status = sdk.to_int64(args[3]);
if new_quest_status ~= nil then function quest_status.on_changed_game_status(new_quest_status)
if (quest_status.index < 2 and new_quest_status == 2) if (quest_status.index < 2 and new_quest_status == 2)
or new_quest_status < 2 then or new_quest_status < 2 then
@@ -35,12 +42,17 @@ function quest_status.update(args)
small_monster.init_list(); small_monster.init_list();
large_monster.init_list(); large_monster.init_list();
env_creature.init_list(); env_creature.init_list();
quest_status.is_quest_clear = false;
damage_meter_UI.freeze_displayed_players = false; damage_meter_UI.freeze_displayed_players = false;
damage_meter_UI.last_displayed_players = {}; damage_meter_UI.last_displayed_players = {};
end end
quest_status.index = new_quest_status; quest_status.index = new_quest_status;
end end
function quest_status.on_set_quest_clear()
quest_status.is_quest_clear = true;
end end
function quest_status.init() function quest_status.init()
@@ -77,6 +89,19 @@ function quest_status.update_is_online()
quest_status.is_online = is_quest_online; quest_status.is_online = is_quest_online;
end end
function quest_status.update_is_host()
if singletons.lobby_manager == nil then
return;
end
local is_host = is_quest_host_method:call(singletons.lobby_manager, true);
if is_host == nil then
return;
end
quest_status.is_host = is_host;
end
function quest_status.update_is_training_area() function quest_status.update_is_training_area()
if singletons.village_area_manager == nil then if singletons.village_area_manager == nil then
customization_menu.status = "No village area manager"; customization_menu.status = "No village area manager";
@@ -122,7 +147,19 @@ function quest_status.init_module()
quest_status.init(); quest_status.init();
sdk.hook(on_changed_game_status, function(args) sdk.hook(on_changed_game_status, function(args)
pcall(quest_status.update, args); quest_status.on_changed_game_status(sdk.to_int64(args[3]));
end, function(retval) return retval; end);
sdk.hook(set_quest_clear_method, function(args)
quest_status.on_set_quest_clear();
end, function(retval) return retval; end);
sdk.hook(set_quest_clear_sub_method, function(args)
quest_status.on_set_quest_clear();
end, function(retval) return retval; end);
sdk.hook(set_quest_clear_sub_hyakurui_method, function(args)
quest_status.on_set_quest_clear();
end, function(retval) return retval; end); end, function(retval) return retval; end);
end end

View File

@@ -1,6 +1,7 @@
local time = {}; local time = {};
local singletons; local singletons;
local customization_menu; local customization_menu;
local quest_status;
local player; local player;
local config; local config;
local small_monster; local small_monster;
@@ -47,28 +48,25 @@ function time.tick()
if time.total_elapsed_script_seconds - time.last_elapsed_script_seconds > 1 then if time.total_elapsed_script_seconds - time.last_elapsed_script_seconds > 1 then
time.last_elapsed_script_seconds = time.total_elapsed_script_seconds; time.last_elapsed_script_seconds = time.total_elapsed_script_seconds;
time.update_players_dps(); time.update_players_dps();
--time.update_small_monsters();
end end
end end
function time.update_players_dps() function time.update_players_dps()
local cached_config = config.current_config.damage_meter_UI.settings; local cached_config = config.current_config.damage_meter_UI.settings;
local myself_updated = false; if cached_config.freeze_dps_on_quest_clear and quest_status.is_quest_clear then
return;
end
local new_total_dps = 0; local new_total_dps = 0;
for _, _player in pairs(player.list) do for _, _player in pairs(player.list) do
if _player == player.myself then
myself_updated = true;
end
if _player.join_time == -1 then if _player.join_time == -1 then
_player.join_time = time.total_elapsed_script_seconds; _player.join_time = time.total_elapsed_script_seconds;
end end
if cached_config.dps_mode == "Quest Time" then if cached_config.dps_mode == "Quest Time" then
if time.total_elapsed_seconds > 0 then if time.total_elapsed_seconds > 0 then
player.myself.dps = player.myself.display.total_damage / time.total_elapsed_seconds; _player.dps = _player.display.total_damage / time.total_elapsed_seconds;
end end
elseif cached_config.dps_mode == "Join Time" then elseif cached_config.dps_mode == "Join Time" then
if time.total_elapsed_script_seconds - _player.join_time > 0 then if time.total_elapsed_script_seconds - _player.join_time > 0 then
@@ -83,44 +81,16 @@ function time.update_players_dps()
new_total_dps = new_total_dps + _player.dps; new_total_dps = new_total_dps + _player.dps;
end end
if not myself_updated then
if player.myself.join_time == -1 then
player.myself.join_time = time.total_elapsed_script_seconds;
end
if cached_config.dps_mode == "Quest Time" then
if time.total_elapsed_seconds > 0 then
player.myself.dps = player.myself.display.total_damage / time.total_elapsed_seconds;
end
elseif cached_config.dps_mode == "Join Time" then
if time.total_elapsed_script_seconds - player.myself.join_time > 0 then
player.myself.dps = player.myself.display.total_damage / (time.total_elapsed_script_seconds - player.myself.join_time);
end
elseif cached_config.dps_mode == "First Hit" then
if time.total_elapsed_script_seconds - player.myself.first_hit_time > 0 then
player.myself.dps = player.myself.display.total_damage / (time.total_elapsed_script_seconds - player.myself.first_hit_time);
end
end
new_total_dps = new_total_dps + player.myself.dps;
end
player.total.dps = new_total_dps; player.total.dps = new_total_dps;
end end
function time.update_small_monsters()
for enemy, monster in pairs(small_monster.list) do
small_monster.update(enemy, monster);
end
end
function time.init_module() function time.init_module()
player = require("MHR_Overlay.Damage_Meter.player"); player = require("MHR_Overlay.Damage_Meter.player");
singletons = require("MHR_Overlay.Game_Handler.singletons"); singletons = require("MHR_Overlay.Game_Handler.singletons");
customization_menu = require("MHR_Overlay.UI.customization_menu"); customization_menu = require("MHR_Overlay.UI.customization_menu");
time = require("MHR_Overlay.Game_Handler.time");
config = require("MHR_Overlay.Misc.config"); config = require("MHR_Overlay.Misc.config");
small_monster = require("MHR_Overlay.Monsters.small_monster"); small_monster = require("MHR_Overlay.Monsters.small_monster");
quest_status = require("MHR_Overlay.Game_Handler.quest_status");
end end
return time; return time;

View File

@@ -3740,21 +3740,26 @@ function config.init()
}, },
settings = { settings = {
orientation = "Vertical", -- "Vertical" or "Horizontal"
hide_myself = false,
hide_other_players = false,
hide_total_damage = false,
hide_module_if_total_damage_is_zero = false, hide_module_if_total_damage_is_zero = false,
hide_player_if_player_damage_is_zero = false, hide_player_if_player_damage_is_zero = false,
hide_total_if_total_damage_is_zero = false, hide_total_if_total_damage_is_zero = false,
total_damage_offset_is_relative = true, total_damage_offset_is_relative = true,
freeze_dps_on_quest_clear = true,
orientation = "Vertical", -- "Vertical" or "Horizontal"
highlighted_bar = "Me", highlighted_bar = "Me",
damage_bar_relative_to = "Top Damage", -- "total damage" or "top damage" damage_bar_relative_to = "Top Damage", -- "total damage" or "top damage"
my_damage_bar_location = "First", -- "normal" or "first" or "last" my_damage_bar_location = "First", -- "normal" or "first" or "last"
dps_mode = "First Hit", dps_mode = "First Hit",
hide_myself = false,
hide_other_players = false,
hide_total_damage = false,
player_name_size_limit = 150 player_name_size_limit = 150
}, },

View File

@@ -0,0 +1,5 @@
local debug = {};
debug.enabled = false;
return debug;

View File

@@ -109,8 +109,8 @@ language.default_language = {
dung_bomb = "Dung Bomb", dung_bomb = "Dung Bomb",
steel_fang = "Steel Fang", steel_fang = "Steel Fang",
quick_sand = "Quick Sand", quick_sand = "Quick Sand",
fall_otomo_trap = "Fall Otomo Trap", fall_otomo_trap = "Fall Buddy Trap",
shock_otomo_trap = "Shock Otomo Trap" shock_otomo_trap = "Shock Buddy Trap"
}, },
UI = { UI = {
@@ -287,7 +287,7 @@ language.default_language = {
bomb_damage = "Bomb Damage", bomb_damage = "Bomb Damage",
kunai_damage = "Kunai Damage", kunai_damage = "Kunai Damage",
installation_damage = "Installation Damage", installation_damage = "Installation Damage",
otomo_damage = "Otomo Damage", otomo_damage = "Buddy Damage",
monster_damage = "Monster Damage", monster_damage = "Monster Damage",
poison_damage = "Poison Damage", poison_damage = "Poison Damage",
blast_damage = "Blast Damage", blast_damage = "Blast Damage",
@@ -382,6 +382,8 @@ language.default_language = {
prioritize_large_monsters = "Large Monsters on High Priority", prioritize_large_monsters = "Large Monsters on High Priority",
max_monster_updates_per_tick = "Max Monster Updates per Tick", max_monster_updates_per_tick = "Max Monster Updates per Tick",
freeze_dps_on_quest_clear = "Freeze DPS when Quest is cleared"
} }
}; };

View File

@@ -54,7 +54,7 @@ function damage_meter_UI.get_players(player_info_list)
local _player = player.get_player(player_id); local _player = player.get_player(player_id);
if _player ~= nil then if _player ~= nil then
if player_id == player.myself.id and cached_config.settings.my_damage_bar_location ~= "Normal" then if _player == player.myself and cached_config.settings.my_damage_bar_location ~= "Normal" then
goto continue; goto continue;
end end
table.insert(quest_players, _player); table.insert(quest_players, _player);
@@ -74,8 +74,6 @@ function damage_meter_UI.draw()
return; return;
end end
local quest_players = {}; local quest_players = {};
if damage_meter_UI.freeze_displayed_players and damage_meter_UI.last_displayed_players ~= {} then if damage_meter_UI.freeze_displayed_players and damage_meter_UI.last_displayed_players ~= {} then
quest_players = damage_meter_UI.last_displayed_players; quest_players = damage_meter_UI.last_displayed_players;

View File

@@ -18,8 +18,8 @@ local get_boss_enemy_method = enemy_manager_type_def:get_method("getBossEnemy");
local gui_manager_type_def = sdk.find_type_definition("snow.gui.GuiManager"); local gui_manager_type_def = sdk.find_type_definition("snow.gui.GuiManager");
local get_tg_camera_method = gui_manager_type_def:get_method("get_refGuiHud_TgCamera"); local get_tg_camera_method = gui_manager_type_def:get_method("get_refGuiHud_TgCamera");
local tg_camera_type = get_tg_camera_method:get_return_type(); local tg_camera_type_def = get_tg_camera_method:get_return_type();
local get_targeting_enemy_index_field = tg_camera_type:get_field("OldTargetingEmIndex"); local get_targeting_enemy_index_field = tg_camera_type_def:get_field("OldTargetingEmIndex");
function large_monster_UI.draw(dynamic_enabled, static_enabled, highlighted_enabled) function large_monster_UI.draw(dynamic_enabled, static_enabled, highlighted_enabled)
if singletons.enemy_manager == nil then if singletons.enemy_manager == nil then

View File

@@ -15018,6 +15018,12 @@ function customization_menu.draw()
config_changed = config_changed or changed; config_changed = config_changed or changed;
damage_meter_UI_changed = damage_meter_UI_changed or changed; damage_meter_UI_changed = damage_meter_UI_changed or changed;
changed, config.current_config.damage_meter_UI.settings.freeze_dps_on_quest_clear = imgui.checkbox(
language.current_language.customization_menu.freeze_dps_on_quest_clear,
config.current_config.damage_meter_UI.settings.freeze_dps_on_quest_clear);
config_changed = config_changed or changed;
damage_meter_UI_changed = damage_meter_UI_changed or changed;
changed, customization_menu.damage_meter_UI_orientation_index = imgui.combo(language.current_language.customization_menu changed, customization_menu.damage_meter_UI_orientation_index = imgui.combo(language.current_language.customization_menu
.orientation, .orientation,
customization_menu.damage_meter_UI_orientation_index, customization_menu.displayed_orientation_types); customization_menu.damage_meter_UI_orientation_index, customization_menu.displayed_orientation_types);

View File

@@ -40,15 +40,17 @@ function drawing.limit_text_size(text, size_limit)
end end
local limited_text = text; local limited_text = text;
while true do while limited_text ~= "..." do
local text_width, text_height = drawing.font:measure(limited_text); local text_width, text_height = drawing.font:measure(limited_text);
if text_width < size_limit then if text_width < size_limit then
return limited_text; break;
else else
limited_text = unicode_helpers.sub(limited_text, 1, -5) .. "..."; limited_text = unicode_helpers.sub(limited_text, 1, -5) .. "...";
end end
end end
return limited_text;
end end
function drawing.scale_color_opacity(color, scale) function drawing.scale_color_opacity(color, scale)

View File

@@ -17,7 +17,7 @@
"blast": "Blast", "blast": "Blast",
"dung_bomb": "Dung Bomb", "dung_bomb": "Dung Bomb",
"exhaust": "Exhaust", "exhaust": "Exhaust",
"fall_otomo_trap": "Fall Otomo Trap", "fall_otomo_trap": "Fall Buddy Trap",
"fall_trap": "Fall Trap", "fall_trap": "Fall Trap",
"fireblight": "Fireblight", "fireblight": "Fireblight",
"flash": "Flash", "flash": "Flash",
@@ -26,7 +26,7 @@
"poison": "Poison", "poison": "Poison",
"quick_sand": "Quick Sand", "quick_sand": "Quick Sand",
"ride": "Wyvern Riding", "ride": "Wyvern Riding",
"shock_otomo_trap": "Shock Otomo Trap", "shock_otomo_trap": "Shock Buddy Trap",
"shock_trap": "Shock Trap", "shock_trap": "Shock Trap",
"sleep": "Sleep", "sleep": "Sleep",
"steel_fang": "Steel Fang", "steel_fang": "Steel Fang",
@@ -98,6 +98,7 @@
"first_hit": "First Hit", "first_hit": "First Hit",
"flinch_count": "Flinch Count", "flinch_count": "Flinch Count",
"foreground": "Foreground", "foreground": "Foreground",
"freeze_dps_on_quest_clear": "Freeze DPS when Quest is cleared",
"global_position_modifier": "Global Position Modifier", "global_position_modifier": "Global Position Modifier",
"global_scale_modifier": "Global Scale Modifier", "global_scale_modifier": "Global Scale Modifier",
"global_settings": "Global Settings", "global_settings": "Global Settings",
@@ -164,7 +165,7 @@
"orientation": "Orientation", "orientation": "Orientation",
"other_damage": "Other Damage", "other_damage": "Other Damage",
"other_players": "Other Players", "other_players": "Other Players",
"otomo_damage": "Otomo Damage", "otomo_damage": "Buddy Damage",
"part_health": "Part Health", "part_health": "Part Health",
"part_name": "Part Name", "part_name": "Part Name",
"part_name_label": "Part Name Label", "part_name_label": "Part Name Label",

View File

@@ -98,6 +98,7 @@
"first_hit": "첫 공격", "first_hit": "첫 공격",
"flinch_count": "경직 횟수", "flinch_count": "경직 횟수",
"foreground": "전경색", "foreground": "전경색",
"freeze_dps_on_quest_clear": "Freeze DPS when Quest is cleared",
"global_position_modifier": "전역 위치 배율", "global_position_modifier": "전역 위치 배율",
"global_scale_modifier": "전역 크기 배율", "global_scale_modifier": "전역 크기 배율",
"global_settings": "전역 설정", "global_settings": "전역 설정",

View File

@@ -98,6 +98,7 @@
"first_hit": "Первый удар", "first_hit": "Первый удар",
"flinch_count": "Кол-во вздрагиваний", "flinch_count": "Кол-во вздрагиваний",
"foreground": "Передний план", "foreground": "Передний план",
"freeze_dps_on_quest_clear": "Заморозить УВС после завершения квеста",
"global_position_modifier": "Глобальный модификатор расположения", "global_position_modifier": "Глобальный модификатор расположения",
"global_scale_modifier": "Глобальный модификатор размера", "global_scale_modifier": "Глобальный модификатор размера",
"global_settings": "Общие настройки", "global_settings": "Общие настройки",
@@ -239,7 +240,7 @@
"font_name": "NotoSansKR-Bold.otf", "font_name": "NotoSansKR-Bold.otf",
"parts": { "parts": {
"abdomen": "Брюхо", "abdomen": "Брюхо",
"antenna": "Antenna", "antenna": "Антернна",
"arms": "Передние лапы", "arms": "Передние лапы",
"arms_mud": "Передние лапы (в грязи)", "arms_mud": "Передние лапы (в грязи)",
"back": "Спина", "back": "Спина",
@@ -247,49 +248,49 @@
"body": "Тело", "body": "Тело",
"body_mud": "Тело (в грязи)", "body_mud": "Тело (в грязи)",
"carapace": "Панцирь", "carapace": "Панцирь",
"chest": "Chest", "chest": "Грудь",
"chest_windsac": "Грудь (мешочек)", "chest_windsac": "Грудь (мешочек)",
"claw": "Когти", "claw": "Когти",
"crest": "Crest", "crest": "Crest",
"dorsal_fin": "Спинной плавник", "dorsal_fin": "Спинной плавник",
"foreleg": "Foreleg", "foreleg": "Передняя лапа",
"forelegs": "Forelegs", "forelegs": "Передние лапы",
"head": "Голова", "head": "Голова",
"head_mud": "Голова (в грязи)", "head_mud": "Голова (в грязи)",
"hind_leg": "Hind Leg", "hind_leg": "Задняя лапа",
"hind_legs": "Hind Legs", "hind_legs": "Задние лапы",
"large_mudbulb": "Большой мешочек грязи", "large_mudbulb": "Большой мешочек грязи",
"left_arm": "Передняя лапа Л", "left_arm": "Передняя лапа Л",
"left_arm_ice": "Передняя лапа Л (во льду)", "left_arm_ice": "Передняя лапа Л (во льду)",
"left_claw": "Клешня Л", "left_claw": "Клешня Л",
"left_cutwing": "Крыло Л", "left_cutwing": "Крыло Л",
"left_foreleg": "Foreleg L", "left_foreleg": "Передняя лапа Л",
"left_hind_leg": "Hind Leg L", "left_hind_leg": "Задня лапа Л",
"left_leg": "Задняя лапа Л", "left_leg": "Задняя лапа Л",
"left_leg_mud": "Задняя лапа Л (в грязи)", "left_leg_mud": "Задняя лапа Л (в грязи)",
"left_legs": "Левые лапы", "left_legs": "Левые лапы",
"left_wing": "Крыло Л", "left_wing": "Крыло Л",
"left_wingclaw": "Wingclaw L", "left_wingclaw": "Крыло-коготь Л",
"legs": "Задние лапы", "legs": "Задние лапы",
"lower_back": "Нижняя часть спины", "lower_back": "Нижняя часть спины",
"lower_body": "Нижняя часть тела", "lower_body": "Нижняя часть тела",
"mane": "Грива", "mane": "Грива",
"mudbulb": "Mudbulb", "mudbulb": "Мешочек грязи",
"neck": "Шея", "neck": "Шея",
"rear": "Зад", "rear": "Зад",
"right_arm": "Передняя лапа П", "right_arm": "Передняя лапа П",
"right_arm_ice": "Передняя лапа П (во льду)", "right_arm_ice": "Передняя лапа П (во льду)",
"right_claw": "Клешня П", "right_claw": "Клешня П",
"right_cutwing": "Крыло П", "right_cutwing": "Крыло П",
"right_foreleg": "Foreleg R", "right_foreleg": "Передняя лапа П",
"right_hind_leg": "Hind Leg R", "right_hind_leg": "Задняя лапа П",
"right_leg": "Задняя лапа П", "right_leg": "Задняя лапа П",
"right_leg_mud": "Задняя лапа П (в грязи)", "right_leg_mud": "Задняя лапа П (в грязи)",
"right_legs": "Правые лапы", "right_legs": "Правые лапы",
"right_wing": "Крыло П", "right_wing": "Крыло П",
"right_wingclaw": "Wingclaw R", "right_wingclaw": "Крыло-коготь П",
"rock": "Камень", "rock": "Камень",
"shell": "Shell", "shell": "Панцирь",
"spinning": "Вращение", "spinning": "Вращение",
"tail": "Хвост", "tail": "Хвост",
"tail_mud": "Хвост (в грязи)", "tail_mud": "Хвост (в грязи)",
@@ -300,8 +301,8 @@
"unknown": "?", "unknown": "?",
"upper_back": "Верхняя часть спины", "upper_back": "Верхняя часть спины",
"upper_body": "Верхняя часть тела", "upper_body": "Верхняя часть тела",
"wingclaw": "Wingclaw", "wingclaw": "Крыло-коготь",
"wingclaws": "Wingclaws", "wingclaws": "Крыло-коготь",
"wings": "Крылья" "wings": "Крылья"
} }
} }

View File

@@ -98,6 +98,7 @@
"first_hit": "第一击", "first_hit": "第一击",
"flinch_count": "胆怯次数", "flinch_count": "胆怯次数",
"foreground": "前景", "foreground": "前景",
"freeze_dps_on_quest_clear": "Freeze DPS when Quest is cleared",
"global_position_modifier": "全局位置更改", "global_position_modifier": "全局位置更改",
"global_scale_modifier": "全局比例更改", "global_scale_modifier": "全局比例更改",
"global_settings": "全局设定", "global_settings": "全局设定",

View File

@@ -98,6 +98,7 @@
"first_hit": "第一擊", "first_hit": "第一擊",
"flinch_count": "膽怯次數", "flinch_count": "膽怯次數",
"foreground": "圖形化顯示條的底色", "foreground": "圖形化顯示條的底色",
"freeze_dps_on_quest_clear": "Freeze DPS when Quest is cleared",
"global_position_modifier": "全域位置更改", "global_position_modifier": "全域位置更改",
"global_scale_modifier": "全域比例更改", "global_scale_modifier": "全域比例更改",
"global_settings": "全域設定", "global_settings": "全域設定",