2 Commits

Author SHA1 Message Date
GreenComfyTea
a0e6974ad7 Add use_d2d_if_available option 2022-11-25 12:38:34 +02:00
GreenComfyTea
b36b1080df Fix DPS freezing on quest end + total cart count 2022-11-25 12:04:58 +02:00
18 changed files with 202 additions and 163 deletions

View File

@@ -69,7 +69,6 @@ time.init_module();
language.init_module(); language.init_module();
config.init_module(); config.init_module();
quest_status.init_module();
part_names.init_module(); part_names.init_module();
damage_UI_entity.init_module(); damage_UI_entity.init_module();
@@ -82,6 +81,7 @@ body_part_UI_entity.init_module();
damage_hook.init_module(); damage_hook.init_module();
player.init_module(); player.init_module();
quest_status.init_module();
env_creature_hook.init_module(); env_creature_hook.init_module();
env_creature.init_module(); env_creature.init_module();
@@ -179,24 +179,12 @@ local function main_loop()
screen.update_window_size(); screen.update_window_size();
player.update_myself_position(); player.update_myself_position();
quest_status.update_is_online(); quest_status.update_is_online();
quest_status.update_is_quest_host(); --quest_status.update_is_quest_host();
time.tick(); time.tick();
--xy = xy .. quest_status.get_flow_state(quest_status.flow_state, true);
player.update_player_list(quest_status.index >= 2); player.update_player_list(quest_status.index >= 2);
if quest_status.flow_state == quest_status.flow_states.IN_LOBBY then if quest_status.flow_state == quest_status.flow_states.IN_TRAINING_AREA then
if config.current_config.endemic_life_UI.enabled and
config.current_config.global_settings.module_visibility.in_lobby.endemic_life_UI then
local success = pcall(env_creature_UI.draw);
if not success then
customization_menu.status = "[In Lobby] Endemic life drawing function threw an exception";
end
end
elseif quest_status.flow_state == quest_status.flow_states.IN_TRAINING_AREA then
local large_monster_UI_config = config.current_config.large_monster_UI; local large_monster_UI_config = config.current_config.large_monster_UI;
local module_visibility_config = config.current_config.global_settings.module_visibility.in_training_area; local module_visibility_config = config.current_config.global_settings.module_visibility.in_training_area;
@@ -279,10 +267,18 @@ end);
if d2d ~= nil then if d2d ~= nil then
d2d.register(function() d2d.register(function()
drawing.init_font(); drawing.init_font();
end, main_loop); end, function()
else if config.current_config.global_settings.renderer.use_d2d_if_available then
re.on_frame(main_loop); main_loop();
end
end);
end end
re.on_frame(function()
if not config.current_config.global_settings.renderer.use_d2d_if_available then
main_loop();
end
end);
-- #endregion -- #endregion
----------------------------D2D------------------------------ ----------------------------D2D------------------------------
@@ -290,48 +286,27 @@ if debug.enabled then
if d2d ~= nil then if d2d ~= nil then
d2d.register(function() d2d.register(function()
end, function() end, function()
local is_ready_quest = singletons.quest_manager:call("isReadyQuest"); if not config.current_config.global_settings.renderer.use_d2d_if_available then
local is_ready_play_quest = singletons.quest_manager:call("isReadyPlayQuest"); return;
local is_play_quest = singletons.quest_manager:call("isPlayQuest"); end
local is_stay_quest = singletons.quest_manager:call("isStayQuest");
local is_end_wait = singletons.quest_manager:call("isEndWait");
local is_active_quest = singletons.quest_manager:call("isActiveQuest");
local quest_clear = singletons.quest_manager:call("checkQuestClear");
local is_result_demo_play_start = singletons.quest_manager:call("isResultDemoPlayStart");
local isResultGuestDrawOff = singletons.quest_manager:call("isResultGuestDrawOff");
local game_manager = sdk.get_managed_singleton("snow.SnowGameManager");
local current_status = game_manager:get_field("_CurrentStatus");
local demo_camera = sdk.get_managed_singleton("snow.camera.DemoCamera");
local is_play_demo = demo_camera:call("IsPlayDemo");
--[[xy = "\nquest_status.index: " .. tostring(quest_status.index);
xy = xy .. "\nis_ready_quest: " .. tostring(is_ready_quest);
xy = xy .. "\nis_ready_play_quest: " .. tostring(is_ready_play_quest);
xy = xy .. "\nis_play_quest: " .. tostring(is_play_quest);
xy = xy .. "\nis_stay_quest: " .. tostring(is_stay_quest);
xy = xy .. "\nis_end_wait: " .. tostring(is_end_wait);
xy = xy .. "\nis_active_quest: " .. tostring(is_active_quest);
xy = xy .. "\nquest_clear: " .. tostring(quest_clear);
xy = xy .. "\nis_result_demo_play_start: " .. tostring(is_result_demo_play_start);
xy = xy .. "\nisResultGuestDrawOff: " .. tostring(isResultGuestDrawOff);
xy = xy .. "\ncurrent_status: " .. tostring(current_status);
xy = xy .. "\nis_play_demo: " .. tostring(is_play_demo);--]]
if xy ~= "" then if xy ~= "" then
d2d.text(drawing.font, "xy:\n" .. tostring(xy), 551, 11, 0xFF000000); d2d.text(drawing.font, "xy:\n" .. tostring(xy), 551, 11, 0xFF000000);
d2d.text(drawing.font, "xy:\n" .. tostring(xy), 550, 10, 0xFFFFFFFF); d2d.text(drawing.font, "xy:\n" .. tostring(xy), 550, 10, 0xFFFFFFFF);
end end
end); end);
else
re.on_frame(function()
if xy ~= "" then
draw.text("xy:\n" .. tostring(xy), 550, 10, 0xFFFFFFFF);
draw.text("xy:\n" .. tostring(xy), 551, 11, 0xFF000000);
end
end);
end end
re.on_frame(function()
if config.current_config.global_settings.renderer.use_d2d_if_available and d2d ~= nil then
return;
end
if xy ~= "" then
draw.text("xy:\n" .. tostring(xy), 551, 11, 0xFF000000);
draw.text("xy:\n" .. tostring(xy), 550, 10, 0xFFFFFFFF);
end
end);
end end
if imgui.begin_table == nil then if imgui.begin_table == nil then

View File

@@ -5,6 +5,7 @@ local small_monster;
local large_monster; local large_monster;
local ailments; local ailments;
local table_helpers; local table_helpers;
local singletons;
local enemy_character_base_type_def = sdk.find_type_definition("snow.enemy.EnemyCharacterBase"); local enemy_character_base_type_def = sdk.find_type_definition("snow.enemy.EnemyCharacterBase");
local enemy_character_base_after_calc_damage_damage_side_method = enemy_character_base_type_def:get_method("afterCalcDamage_DamageSide"); local enemy_character_base_after_calc_damage_damage_side_method = enemy_character_base_type_def:get_method("afterCalcDamage_DamageSide");
@@ -201,6 +202,8 @@ function damage_hook.cart(dead_player_id, flag_cat_skill_insurance)
end end
player_.cart_count = player_.cart_count + 1; player_.cart_count = player_.cart_count + 1;
quest_status.get_cart_count();
end end
--function damage_hook.on_get_finish_shoot_wall_hit_damage_rate(enemy, rate, is_part_damage) --function damage_hook.on_get_finish_shoot_wall_hit_damage_rate(enemy, rate, is_part_damage)
@@ -218,6 +221,7 @@ function damage_hook.init_module()
large_monster = require("MHR_Overlay.Monsters.large_monster"); large_monster = require("MHR_Overlay.Monsters.large_monster");
ailments = require("MHR_Overlay.Monsters.ailments"); ailments = require("MHR_Overlay.Monsters.ailments");
table_helpers = require("MHR_Overlay.Misc.table_helpers"); table_helpers = require("MHR_Overlay.Misc.table_helpers");
singletons = require("MHR_Overlay.Game_Handler.singletons");
--sdk.hook(get_finish_shoot_wall_hit_damage_rate_method, function(args) --sdk.hook(get_finish_shoot_wall_hit_damage_rate_method, function(args)
-- pcall(damage_hook.on_get_finish_shoot_wall_hit_damage_rate, sdk.to_managed_object(args[2]), sdk.to_float(args[3]), sdk.to_int64(args--[4])); -- pcall(damage_hook.on_get_finish_shoot_wall_hit_damage_rate, sdk.to_managed_object(args[2]), sdk.to_float(args[3]), sdk.to_int64(args--[4]));

View File

@@ -511,7 +511,8 @@ function player.init_total_UI(_player)
_player.damage_UI = { _player.damage_UI = {
total_damage_label = table_helpers.deep_copy(cached_config.total_damage_label), total_damage_label = table_helpers.deep_copy(cached_config.total_damage_label),
total_damage_value_label = table_helpers.deep_copy(cached_config.total_damage_value_label), total_damage_value_label = table_helpers.deep_copy(cached_config.total_damage_value_label),
total_dps_label = table_helpers.deep_copy(cached_config.total_dps_label) total_dps_label = table_helpers.deep_copy(cached_config.total_dps_label),
total_cart_count_label = table_helpers.deep_copy(cached_config.total_cart_count_label),
}; };
_player.damage_UI.total_damage_label.offset.x = _player.damage_UI.total_damage_label.offset.x * global_scale_modifier; _player.damage_UI.total_damage_label.offset.x = _player.damage_UI.total_damage_label.offset.x * global_scale_modifier;
@@ -524,6 +525,9 @@ function player.init_total_UI(_player)
_player.damage_UI.total_dps_label.offset.x = _player.damage_UI.total_dps_label.offset.x * global_scale_modifier; _player.damage_UI.total_dps_label.offset.x = _player.damage_UI.total_dps_label.offset.x * global_scale_modifier;
_player.damage_UI.total_dps_label.offset.y = _player.damage_UI.total_dps_label.offset.y * global_scale_modifier; _player.damage_UI.total_dps_label.offset.y = _player.damage_UI.total_dps_label.offset.y * global_scale_modifier;
_player.damage_UI.total_cart_count_label.offset.x = _player.damage_UI.total_cart_count_label.offset.x * global_scale_modifier;
_player.damage_UI.total_cart_count_label.offset.y = _player.damage_UI.total_cart_count_label.offset.y * global_scale_modifier;
end end
function player.draw(_player, position_on_screen, opacity_scale, top_damage, top_dps) function player.draw(_player, position_on_screen, opacity_scale, top_damage, top_dps)
@@ -531,11 +535,10 @@ function player.draw(_player, position_on_screen, opacity_scale, top_damage, top
end end
function player.draw_total(position_on_screen, opacity_scale) function player.draw_total(position_on_screen, opacity_scale)
drawing.draw_label(player.total.damage_UI.total_damage_label, position_on_screen, opacity_scale, drawing.draw_label(player.total.damage_UI.total_damage_label, position_on_screen, opacity_scale, language.current_language.UI.total_damage);
language.current_language.UI.total_damage); drawing.draw_label(player.total.damage_UI.total_damage_value_label, position_on_screen, opacity_scale, player.total.display.total_damage);
drawing.draw_label(player.total.damage_UI.total_damage_value_label, position_on_screen, opacity_scale,
player.total.display.total_damage);
drawing.draw_label(player.total.damage_UI.total_dps_label, position_on_screen, opacity_scale, player.total.dps); drawing.draw_label(player.total.damage_UI.total_dps_label, position_on_screen, opacity_scale, player.total.dps);
drawing.draw_label(player.total.damage_UI.total_cart_count_label, position_on_screen, opacity_scale, quest_status.cart_count, quest_status.max_cart_count);
end end
function player.init_module() function player.init_module()

View File

@@ -98,7 +98,7 @@ function env_creature.update(REcreature, creature)
end end
function env_creature.draw(creature, position_on_screen, opacity_scale) function env_creature.draw(creature, position_on_screen, opacity_scale)
if d2d ~= nil then if d2d ~= nil and config.current_config.global_settings.renderer.use_d2d_if_available then
local text_width, text_height = drawing.font:measure(creature.name); local text_width, text_height = drawing.font:measure(creature.name);
position_on_screen.x = position_on_screen.x - text_width / 2; position_on_screen.x = position_on_screen.x - text_width / 2;
end end

View File

@@ -36,7 +36,10 @@ quest_status.flow_state = quest_status.flow_states.NONE;
quest_status.index = 0; quest_status.index = 0;
quest_status.is_online = false; quest_status.is_online = false;
quest_status.is_quest_host = false; --quest_status.is_quest_host = false;
quest_status.cart_count = 0;
quest_status.max_cart_count = 3;
local quest_manager_type_def = sdk.find_type_definition("snow.QuestManager"); local quest_manager_type_def = sdk.find_type_definition("snow.QuestManager");
local on_changed_game_status_method = quest_manager_type_def:get_method("onChangedGameStatus"); local on_changed_game_status_method = quest_manager_type_def:get_method("onChangedGameStatus");
@@ -46,6 +49,9 @@ local set_quest_clear_sub_method = quest_manager_type_def:get_method("setQuestCl
local set_quest_clear_sub_hyakurui_method = quest_manager_type_def:get_method("setQuestClearSubHyakuryu"); local set_quest_clear_sub_hyakurui_method = quest_manager_type_def:get_method("setQuestClearSubHyakuryu");
local set_quest_fail_method = quest_manager_type_def:get_method("setQuestFail"); local set_quest_fail_method = quest_manager_type_def:get_method("setQuestFail");
local get_death_num_method = quest_manager_type_def:get_method("getDeathNum");
local get_quest_life_method = quest_manager_type_def:get_method("getQuestLife");
local game_manager_type_def = sdk.find_type_definition("snow.SnowGameManager"); local game_manager_type_def = sdk.find_type_definition("snow.SnowGameManager");
local get_status_method = game_manager_type_def:get_method("getStatus"); local get_status_method = game_manager_type_def:get_method("getStatus");
@@ -77,7 +83,7 @@ local unique_event_manager_type_def = sdk.find_type_definition("snow.eventcut.Un
local play_event_common_method = unique_event_manager_type_def:get_method("playEventCommon"); local play_event_common_method = unique_event_manager_type_def:get_method("playEventCommon");
local event_manager_dispose_method = unique_event_manager_type_def:get_method("dispose"); local event_manager_dispose_method = unique_event_manager_type_def:get_method("dispose");
function quest_status.get_flow_state(flow_state, new_line) function quest_status.get_flow_state_name(flow_state, new_line)
for key, value in pairs(quest_status.flow_states) do for key, value in pairs(quest_status.flow_states) do
if value == flow_state then if value == flow_state then
if new_line then if new_line then
@@ -89,6 +95,43 @@ function quest_status.get_flow_state(flow_state, new_line)
end end
end end
function quest_status.set_flow_state(new_flow_state)
quest_status.previous_flow_state = quest_status.flow_state;
quest_status.flow_state = new_flow_state;
if quest_status.flow_state >= quest_status.flow_states.KILLCAM then
damage_meter_UI.freeze_displayed_players = true;
quest_status.is_quest_end = true;
else
damage_meter_UI.freeze_displayed_players = false;
quest_status.is_quest_end = false;
end
if quest_status.flow_state == quest_status.flow_states.IN_LOBBY or quest_status.flow_state == quest_status.flow_states.IN_TRAINING_AREA then
player.init();
small_monster.init_list();
large_monster.init_list();
env_creature.init_list();
elseif quest_status.flow_state >= quest_status.flow_states.LOADING_QUEST then
quest_status.get_cart_count();
quest_status.get_max_cart_count();
end
end
function quest_status.get_cart_count()
local death_num = get_death_num_method:call(singletons.quest_manager);
if death_num ~= nil then
quest_status.cart_count = death_num;
end
end
function quest_status.get_max_cart_count()
local quest_life = get_quest_life_method:call(singletons.quest_manager);
if quest_life ~= nil then
quest_status.max_cart_count = quest_life;
end
end
--type 2 = quest start --type 2 = quest start
--type 3 = monster killcam --type 3 = monster killcam
--type 5 = end screen --type 5 = end screen
@@ -108,38 +151,31 @@ function quest_status.on_demo_request_activation(request_data_base)
-- QUEST_START_ANIMATION -- QUEST_START_ANIMATION
if request_data_type == 2 then if request_data_type == 2 then
quest_status.previous_flow_state = quest_status.flow_state; quest_status.set_flow_state(quest_status.flow_states.QUEST_START_ANIMATION);
quest_status.flow_state = quest_status.flow_states.QUEST_START_ANIMATION;
-- KILLCAM -- KILLCAM
elseif request_data_type == 3 then elseif request_data_type == 3 then
quest_status.previous_flow_state = quest_status.flow_state; quest_status.set_flow_state(quest_status.flow_states.KILLCAM);
quest_status.flow_state = quest_status.flow_states.KILLCAM;
-- QUEST_END_ANIMATION -- QUEST_END_ANIMATION
elseif request_data_type == 5 or request_data_type == 6 or request_data_type == 7 then elseif request_data_type == 5 or request_data_type == 6 or request_data_type == 7 then
quest_status.previous_flow_state = quest_status.flow_state; quest_status.set_flow_state(quest_status.flow_states.QUEST_END_ANIMATION);
quest_status.flow_state = quest_status.flow_states.QUEST_END_ANIMATION;
-- PLAYER_DEATH_ANIMATION -- PLAYER_DEATH_ANIMATION
elseif request_data_type == 8 then elseif request_data_type == 8 then
quest_status.previous_flow_state = quest_status.flow_state; quest_status.set_flow_state(quest_status.flow_states.PLAYER_DEATH_ANIMATION);
quest_status.flow_state = quest_status.flow_states.PLAYER_DEATH_ANIMATION;
-- PLAYER_CART_ANIMATION -- PLAYER_CART_ANIMATION
elseif request_data_type == 9 then elseif request_data_type == 9 then
quest_status.previous_flow_state = quest_status.flow_state; quest_status.set_flow_state(quest_status.flow_states.PLAYER_CART_ANIMATION);
quest_status.flow_state = quest_status.flow_states.PLAYER_CART_ANIMATION;
-- FAST_TRAVEL_ANIMATION -- FAST_TRAVEL_ANIMATION
elseif request_data_type == 10 then elseif request_data_type == 10 then
quest_status.previous_flow_state = quest_status.flow_state; quest_status.set_flow_state(quest_status.flow_states.FAST_TRAVEL_ANIMATION);
quest_status.flow_state = quest_status.flow_states.FAST_TRAVEL_ANIMATION;
-- WYVERN_RIDING_START_ANIMATION -- WYVERN_RIDING_START_ANIMATION
elseif request_data_type == 11 then elseif request_data_type == 11 then
quest_status.previous_flow_state = quest_status.flow_state; quest_status.set_flow_state(quest_status.flow_states.WYVERN_RIDING_START_ANIMATION);
quest_status.flow_state = quest_status.flow_states.WYVERN_RIDING_START_ANIMATION;
end end
end end
@@ -150,62 +186,50 @@ function quest_status.on_demo_end()
or quest_status.flow_state == quest_status.flow_states.FAST_TRAVEL_ANIMATION or quest_status.flow_state == quest_status.flow_states.FAST_TRAVEL_ANIMATION
or quest_status.flow_state == quest_status.flow_states.WYVERN_RIDING_START_ANIMATION then or quest_status.flow_state == quest_status.flow_states.WYVERN_RIDING_START_ANIMATION then
local next_flow_state = quest_status.previous_flow_state; quest_status.set_flow_state(quest_status.previous_flow_state);
quest_status.previous_flow_state = quest_status.flow_state;
quest_status.flow_state = next_flow_state;
elseif quest_status.flow_state == quest_status.flow_states.QUEST_START_ANIMATION then elseif quest_status.flow_state == quest_status.flow_states.QUEST_START_ANIMATION then
quest_status.previous_flow_state = quest_status.flow_state; quest_status.set_flow_state(quest_status.flow_states.PLAYING_QUEST);
quest_status.flow_state = quest_status.flow_states.PLAYING_QUEST;
elseif quest_status.flow_state == quest_status.flow_states.KILLCAM then elseif quest_status.flow_state == quest_status.flow_states.KILLCAM then
quest_status.previous_flow_state = quest_status.flow_state; quest_status.set_flow_state(quest_status.flow_states.QUEST_END_TIMER);
quest_status.flow_state = quest_status.flow_states.QUEST_END_TIMER;
end end
end end
end end
function quest_status.on_set_quest_clear() function quest_status.on_set_quest_clear()
if quest_status.index == 2 and quest_status.flow_state ~= quest_status.flow_states.KILLCAM then if quest_status.index == 2 and quest_status.flow_state ~= quest_status.flow_states.KILLCAM then
quest_status.previous_flow_state = quest_status.flow_state; quest_status.set_flow_state(quest_status.flow_states.QUEST_END_TIMER);
quest_status.flow_state = quest_status.flow_states.QUEST_END_TIMER;
end end
end end
function quest_status.on_quest_end_set_state() function quest_status.on_quest_end_set_state()
if quest_status.index == 2 then if quest_status.index == 2 then
quest_status.previous_flow_state = quest_status.flow_state; quest_status.set_flow_state(quest_status.flow_states.QUEST_END_SCREEN);
quest_status.flow_state = quest_status.flow_states.QUEST_END_SCREEN;
end end
end end
function quest_status.on_gui_result_reward_do_open() function quest_status.on_gui_result_reward_do_open()
if quest_status.index == 3 then if quest_status.index == 3 then
quest_status.previous_flow_state = quest_status.flow_state; quest_status.set_flow_state(quest_status.flow_states.REWARD_SCREEN);
quest_status.flow_state = quest_status.flow_states.REWARD_SCREEN;
end end
end end
function quest_status.on_gui_result_pay_off_do_open() function quest_status.on_gui_result_pay_off_do_open()
if quest_status.index == 3 then if quest_status.index == 3 then
quest_status.previous_flow_state = quest_status.flow_state; quest_status.set_flow_state(quest_status.flow_states.SUMMARY_SCREEN);
quest_status.flow_state = quest_status.flow_states.SUMMARY_SCREEN;
end end
end end
function quest_status.on_play_event_common() function quest_status.on_play_event_common()
quest_status.previous_flow_state = quest_status.flow_state; quest_status.set_flow_state(quest_status.flow_states.CUTSCENE);
quest_status.flow_state = quest_status.flow_states.CUTSCENE;
end end
function quest_status.on_event_manager_dispose() function quest_status.on_event_manager_dispose()
if quest_status.flow_state == quest_status.flow_states.CUTSCENE then if quest_status.flow_state == quest_status.flow_states.CUTSCENE then
quest_status.set_flow_state(quest_status.previous_flow_state);
local next_flow_state = quest_status.previous_flow_state;
quest_status.previous_flow_state = quest_status.flow_state;
quest_status.flow_state = next_flow_state;
end end
end end
@@ -215,8 +239,7 @@ function quest_status.on_set_quest_fail()
quest_status.flow_state == quest_status.flow_states.FAST_TRAVEL_ANIMATION or quest_status.flow_state == quest_status.flow_states.FAST_TRAVEL_ANIMATION or
quest_status.flow_state == quest_status.flow_states.WYVERN_RIDING_START_ANIMATION then quest_status.flow_state == quest_status.flow_states.WYVERN_RIDING_START_ANIMATION then
quest_status.previous_flow_state = quest_status.flow_state; quest_status.set_flow_state(quest_status.flow_states.QUEST_END_ANIMATION);
quest_status.flow_state = quest_status.flow_states.QUEST_END_ANIMATION;
end end
end end
@@ -225,37 +248,24 @@ function quest_status.on_village_fast_travel(area)
return; return;
end end
quest_status.previous_flow_state = quest_status.flow_state;
if area == 7 then if area == 7 then
quest_status.flow_state = quest_status.flow_states.IN_TRAINING_AREA; quest_status.set_flow_state(quest_status.flow_states.IN_TRAINING_AREA);
else else
quest_status.flow_state = quest_status.flow_states.IN_LOBBY; quest_status.set_flow_state(quest_status.flow_states.IN_LOBBY);
end end
end end
function quest_status.on_changed_game_status(new_quest_status) function quest_status.on_changed_game_status(new_quest_status)
quest_status.index = new_quest_status; quest_status.index = new_quest_status;
if quest_status.index < 3 then
player.init();
small_monster.init_list();
large_monster.init_list();
env_creature.init_list();
quest_status.is_quest_clear = false;
damage_meter_UI.freeze_displayed_players = false;
damage_meter_UI.last_displayed_players = {};
end
if quest_status.index == 0 then if quest_status.index == 0 then
quest_status.flow_state = quest_status.flow_states.NONE; quest_status.set_flow_state(quest_status.flow_states.NONE);
elseif quest_status.index == 1 then elseif quest_status.index == 1 then
quest_status.flow_state = quest_status.flow_states.IN_LOBBY; quest_status.set_flow_state(quest_status.flow_states.IN_LOBBY);
elseif quest_status.index == 2 then elseif quest_status.index == 2 then
quest_status.flow_state = quest_status.flow_states.LOADING_QUEST; quest_status.set_flow_state(quest_status.flow_states.LOADING_QUEST);
elseif quest_status.index == 3 then elseif quest_status.index == 3 then
quest_status.flow_state = quest_status.flow_states.SUMMARY_SCREEN; quest_status.set_flow_state(quest_status.flow_states.SUMMARY_SCREEN);
end end
end end
@@ -273,16 +283,15 @@ function quest_status.init()
quest_status.index = new_quest_status; quest_status.index = new_quest_status;
if quest_status.index == 0 then if quest_status.index == 0 then
quest_status.flow_state = quest_status.flow_states.NONE; quest_status.set_flow_state(quest_status.flow_states.NONE);
elseif quest_status.index == 1 then elseif quest_status.index == 1 then
quest_status.flow_state = quest_status.flow_states.IN_LOBBY; quest_status.set_flow_state(quest_status.flow_states.IN_LOBBY);
elseif quest_status.index == 2 then elseif quest_status.index == 2 then
quest_status.flow_state = quest_status.flow_states.PLAYING_QUEST; quest_status.set_flow_state(quest_status.flow_states.PLAYING_QUEST);
elseif quest_status.index == 3 then elseif quest_status.index == 3 then
quest_status.flow_state = quest_status.flow_states.SUMMARY_SCREEN; quest_status.set_flow_state(quest_status.flow_states.SUMMARY_SCREEN);
end end
quest_status.update_is_online();
quest_status.update_is_training_area(); quest_status.update_is_training_area();
end end
@@ -296,14 +305,10 @@ function quest_status.update_is_online()
return; return;
end end
if quest_status.is_online and not is_quest_online then
damage_meter_UI.freeze_displayed_players = true;
end
quest_status.is_online = is_quest_online; quest_status.is_online = is_quest_online;
end end
function quest_status.update_is_quest_host() --[[function quest_status.update_is_quest_host()
if singletons.lobby_manager == nil then if singletons.lobby_manager == nil then
return; return;
end end
@@ -314,7 +319,7 @@ function quest_status.update_is_quest_host()
end end
quest_status.is_quest_host = is_quest_host; quest_status.is_quest_host = is_quest_host;
end 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
@@ -328,7 +333,7 @@ function quest_status.update_is_training_area()
end end
if _is_training_area then if _is_training_area then
quest_status.flow_state = quest_status.flow_states.IN_TRAINING_AREA; quest_status.set_flow_state(quest_status.flow_states.IN_TRAINING_AREA);
end end
end end

View File

@@ -10,7 +10,7 @@ function screen.update_window_size()
local width; local width;
local height; local height;
if d2d ~= nil then if d2d ~= nil and config.current_config.global_settings.renderer.use_d2d_if_available then
width, height = d2d.surface_size(); width, height = d2d.surface_size();
else else
width, height = screen.get_game_window_size(); width, height = screen.get_game_window_size();

View File

@@ -54,7 +54,7 @@ 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;
if cached_config.freeze_dps_on_quest_clear and quest_status.is_quest_clear then if cached_config.freeze_dps_on_quest_end and quest_status.is_quest_end then
return; return;
end end

View File

@@ -33,11 +33,11 @@ function config.init()
prioritize_large_monsters = false prioritize_large_monsters = false
}, },
module_visibility = { renderer = {
in_lobby = { use_d2d_if_available = true
endemic_life_UI = false },
},
module_visibility = {
in_training_area = { in_training_area = {
large_monster_dynamic_UI = true, large_monster_dynamic_UI = true,
large_monster_static_UI = true, large_monster_static_UI = true,
@@ -4215,7 +4215,7 @@ function config.init()
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, freeze_dps_on_quest_end = true,
orientation = "Vertical", -- "Vertical" or "Horizontal" orientation = "Vertical", -- "Vertical" or "Horizontal"
highlighted_bar = "Me", highlighted_bar = "Me",
@@ -4313,7 +4313,7 @@ function config.init()
cart_count_label = { cart_count_label = {
visibility = false, visibility = false,
text = "x%d", text = "%d",
offset = { offset = {
x = 315, x = 315,
y = 0 y = 0
@@ -4446,6 +4446,26 @@ function config.init()
} }
}, },
total_cart_count_label = {
visibility = true,
text = "%d/%d",
offset = {
x = 315,
y = 0
},
color = 0xFFFF7373,
shadow = {
visibility = true,
offset = {
x = 1,
y = 1
},
color = 0xFF000000
}
},
damage_bar = { damage_bar = {
visibility = true, visibility = true,
offset = { offset = {

View File

@@ -172,6 +172,9 @@ language.default_language = {
bold = "Bold", bold = "Bold",
italic = "Italic", italic = "Italic",
renderer = "Renderer",
use_d2d_if_available = "Use Direct2D if available",
enabled = "Enabled", enabled = "Enabled",
settings = "Settings", settings = "Settings",
dynamic_positioning = "Dynamic Positioning", dynamic_positioning = "Dynamic Positioning",
@@ -390,11 +393,12 @@ language.default_language = {
cart_count = "Cart Count", cart_count = "Cart Count",
cart_count_label = "Cart Count Label", cart_count_label = "Cart Count Label",
total_cart_count_label = "Total Cart Count Label",
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", freeze_dps_on_quest_end = "Freeze DPS on Quest End",
health_break_severe_filter = "Health + Break + Severe", health_break_severe_filter = "Health + Break + Severe",
@@ -421,7 +425,7 @@ language.default_language = {
lowest_health_percentage = "Lowest Health Percentage", lowest_health_percentage = "Lowest Health Percentage",
highest_health_percentage = "Highest Health Percentage", highest_health_percentage = "Highest Health Percentage",
reframework_outdated = "Installed REFramework version is outdated. Please, update. Otherwise, MHR Overlay won't work correctly." reframework_outdated = "Installed REFramework version is outdated. Please, update. Otherwise, MHR Overlay won't work correctly.",
} }
}; };

View File

@@ -126,6 +126,7 @@ function damage_meter_UI.draw()
elseif #player.list == 0 then elseif #player.list == 0 then
table.insert(quest_players, player.myself); table.insert(quest_players, player.myself);
end end
damage_meter_UI.last_displayed_players = quest_players; damage_meter_UI.last_displayed_players = quest_players;
end end

View File

@@ -760,16 +760,17 @@ function customization_menu.draw_global_settings()
imgui.tree_pop(); imgui.tree_pop();
end end
if imgui.tree_node(language.current_language.customization_menu.renderer) then
changed, cached_config.renderer.use_d2d_if_available =
imgui.checkbox(language.current_language.customization_menu.use_d2d_if_available,
cached_config.renderer.use_d2d_if_available);
config_changed = config_changed or changed;
imgui.tree_pop();
end
if imgui.tree_node(language.current_language.customization_menu.module_visibility_based_on_game_state) then if imgui.tree_node(language.current_language.customization_menu.module_visibility_based_on_game_state) then
if imgui.tree_node(language.current_language.customization_menu.in_lobby) then
changed, cached_config.module_visibility.in_lobby.endemic_life_UI = imgui.checkbox(
language.current_language.customization_menu.endemic_life_UI,
cached_config.module_visibility.in_lobby.endemic_life_UI);
config_changed = config_changed or changed;
imgui.tree_pop();
end
if imgui.tree_node(language.current_language.customization_menu.in_training_area) then if imgui.tree_node(language.current_language.customization_menu.in_training_area) then
@@ -1412,8 +1413,8 @@ function customization_menu.draw_damage_meter_UI()
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed, cached_config.settings.freeze_dps_on_quest_clear = imgui.checkbox( changed, cached_config.settings.freeze_dps_on_quest_end = imgui.checkbox(
language.current_language.customization_menu.freeze_dps_on_quest_clear, cached_config.settings.freeze_dps_on_quest_clear); language.current_language.customization_menu.freeze_dps_on_quest_end, cached_config.settings.freeze_dps_on_quest_end);
config_changed = config_changed or changed; config_changed = config_changed or changed;
@@ -1892,6 +1893,10 @@ function customization_menu.draw_damage_meter_UI()
changed = label_customization.draw(language.current_language.customization_menu.total_damage_value_label, cached_config.total_damage_value_label); changed = label_customization.draw(language.current_language.customization_menu.total_damage_value_label, cached_config.total_damage_value_label);
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed = label_customization.draw(language.current_language.customization_menu.total_cart_count_label, cached_config.total_cart_count_label);
config_changed = config_changed or changed;
changed = bar_customization.draw(language.current_language.customization_menu.damage_bar, cached_config.damage_bar); changed = bar_customization.draw(language.current_language.customization_menu.damage_bar, cached_config.damage_bar);
config_changed = config_changed or changed; config_changed = config_changed or changed;

View File

@@ -35,7 +35,7 @@ function drawing.argb_to_color(alpha, red, green, blue)
end end
function drawing.limit_text_size(text, size_limit) function drawing.limit_text_size(text, size_limit)
if d2d == nil or size_limit <= 0 then if d2d == nil or not config.current_config.global_settings.renderer.use_d2d_if_available or size_limit <= 0 then
return text; return text;
end end
@@ -98,6 +98,8 @@ function drawing.draw_label(label, position, opacity_scale, ...)
local position_x = position.x + label.offset.x; local position_x = position.x + label.offset.x;
local position_y = position.y + label.offset.y; local position_y = position.y + label.offset.y;
local use_d2d = d2d ~= nil and config.current_config.global_settings.renderer.use_d2d_if_available;
if label.shadow.visibility then if label.shadow.visibility then
local new_shadow_color = label.shadow.color; local new_shadow_color = label.shadow.color;
@@ -105,7 +107,7 @@ function drawing.draw_label(label, position, opacity_scale, ...)
new_shadow_color = drawing.scale_color_opacity(new_shadow_color, opacity_scale); new_shadow_color = drawing.scale_color_opacity(new_shadow_color, opacity_scale);
end end
if d2d ~= nil then if use_d2d then
d2d.text(drawing.font, text, position_x + label.shadow.offset.x, position_y + label.shadow.offset.y, new_shadow_color); d2d.text(drawing.font, text, position_x + label.shadow.offset.x, position_y + label.shadow.offset.y, new_shadow_color);
else else
new_shadow_color = drawing.argb_color_to_abgr_color(new_shadow_color); new_shadow_color = drawing.argb_color_to_abgr_color(new_shadow_color);
@@ -118,7 +120,7 @@ function drawing.draw_label(label, position, opacity_scale, ...)
new_color = drawing.scale_color_opacity(new_color, opacity_scale); new_color = drawing.scale_color_opacity(new_color, opacity_scale);
end end
if d2d ~= nil then if use_d2d then
d2d.text(drawing.font, text, position_x, position_y, new_color); d2d.text(drawing.font, text, position_x, position_y, new_color);
else else
new_color = drawing.argb_color_to_abgr_color(new_color); new_color = drawing.argb_color_to_abgr_color(new_color);
@@ -230,7 +232,7 @@ function drawing.draw_bar(bar, position, opacity_scale, percentage)
outline_color = drawing.scale_color_opacity(outline_color, opacity_scale); outline_color = drawing.scale_color_opacity(outline_color, opacity_scale);
end end
local use_d2d = d2d ~= nil; local use_d2d = d2d ~= nil and config.current_config.global_settings.renderer.use_d2d_if_available;
-- outline -- outline
if outline_thickness ~= 0 then if outline_thickness ~= 0 then
@@ -281,7 +283,9 @@ function drawing.draw_capture_line(health_UI, position, opacity_scale, percentag
color = drawing.scale_color_opacity(color, opacity_scale); color = drawing.scale_color_opacity(color, opacity_scale);
end end
if d2d ~= nil then local use_d2d = d2d ~= nil and config.current_config.global_settings.renderer.use_d2d_if_available;
if use_d2d then
d2d.fill_rect(position_x, position_y, health_UI.bar.capture_line.size.width, health_UI.bar.capture_line.size.height, d2d.fill_rect(position_x, position_y, health_UI.bar.capture_line.size.width, health_UI.bar.capture_line.size.height,
color); color);
else else

View File

@@ -104,7 +104,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", "freeze_dps_on_quest_end": "Freeze DPS on Quest End",
"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",
@@ -214,6 +214,7 @@
"relative_offset": "Relative Offset", "relative_offset": "Relative Offset",
"render_highlighted_monster": "Render Highlighted Monster", "render_highlighted_monster": "Render Highlighted Monster",
"render_not_highlighted_monsters": "Render Not Highlighted Monsters", "render_not_highlighted_monsters": "Render Not Highlighted Monsters",
"renderer": "Renderer",
"reversed_order": "Reversed Order", "reversed_order": "Reversed Order",
"reward_screen": "Reward Screen", "reward_screen": "Reward Screen",
"settings": "Settings", "settings": "Settings",
@@ -247,6 +248,7 @@
"total_buildup": "Total Buildup", "total_buildup": "Total Buildup",
"total_buildup_label": "Total Buildup Label", "total_buildup_label": "Total Buildup Label",
"total_buildup_value_label": "Total Buildup Value Label", "total_buildup_value_label": "Total Buildup Value Label",
"total_cart_count_label": "Total Cart Count Label",
"total_damage": "Total Damage", "total_damage": "Total Damage",
"total_damage_label": "Total Damage Label", "total_damage_label": "Total Damage Label",
"total_damage_offset_is_relative": "Total Damage Offset is Relative", "total_damage_offset_is_relative": "Total Damage Offset is Relative",
@@ -256,6 +258,7 @@
"tracked_damage_types": "Tracked Damage Types", "tracked_damage_types": "Tracked Damage Types",
"tracked_monster_types": "Tracked Monster Types", "tracked_monster_types": "Tracked Monster Types",
"type": "Type", "type": "Type",
"use_d2d_if_available": "Use Direct2D if available",
"value_label": "Value Label", "value_label": "Value Label",
"vertical": "Vertical", "vertical": "Vertical",
"viewport_offset": "Viewport Offset", "viewport_offset": "Viewport Offset",

View File

@@ -104,7 +104,7 @@
"first_hit": "初撃", "first_hit": "初撃",
"flinch_count": "ひるみ回数", "flinch_count": "ひるみ回数",
"foreground": "前面", "foreground": "前面",
"freeze_dps_on_quest_clear": "Freeze DPS when Quest is cleared", "freeze_dps_on_quest_end": "Freeze DPS on Quest End",
"global_position_modifier": "全体的な位置の調整", "global_position_modifier": "全体的な位置の調整",
"global_scale_modifier": "全体的なスケールの調整", "global_scale_modifier": "全体的なスケールの調整",
"global_settings": "全体設定", "global_settings": "全体設定",
@@ -214,6 +214,7 @@
"relative_offset": "相対的な表示位置", "relative_offset": "相対的な表示位置",
"render_highlighted_monster": "ハイライトされたモンスターをレンダリング(表示)する", "render_highlighted_monster": "ハイライトされたモンスターをレンダリング(表示)する",
"render_not_highlighted_monsters": "ハイライトされていないモンスターをレンダリング(表示)する", "render_not_highlighted_monsters": "ハイライトされていないモンスターをレンダリング(表示)する",
"renderer": "Renderer",
"reversed_order": "逆順", "reversed_order": "逆順",
"reward_screen": "Reward Screen", "reward_screen": "Reward Screen",
"settings": "設定", "settings": "設定",
@@ -247,6 +248,7 @@
"total_buildup": "蓄積合計", "total_buildup": "蓄積合計",
"total_buildup_label": "合計蓄積ラベル", "total_buildup_label": "合計蓄積ラベル",
"total_buildup_value_label": "合計蓄積値ラベル", "total_buildup_value_label": "合計蓄積値ラベル",
"total_cart_count_label": "Total Cart Count Label",
"total_damage": "合計ダメージ", "total_damage": "合計ダメージ",
"total_damage_label": "合計ダメージラベル", "total_damage_label": "合計ダメージラベル",
"total_damage_offset_is_relative": "トータルダメージの表示位置を調整", "total_damage_offset_is_relative": "トータルダメージの表示位置を調整",
@@ -256,6 +258,7 @@
"tracked_damage_types": "ダメージタイプでの追跡", "tracked_damage_types": "ダメージタイプでの追跡",
"tracked_monster_types": "モンスタータイプでの追跡", "tracked_monster_types": "モンスタータイプでの追跡",
"type": "タイプ", "type": "タイプ",
"use_d2d_if_available": "Use Direct2D if available",
"value_label": "バリューラベル", "value_label": "バリューラベル",
"vertical": "縦", "vertical": "縦",
"viewport_offset": "表示領域からの位置", "viewport_offset": "表示領域からの位置",

View File

@@ -104,7 +104,7 @@
"first_hit": "첫 공격", "first_hit": "첫 공격",
"flinch_count": "경직 횟수", "flinch_count": "경직 횟수",
"foreground": "전경색", "foreground": "전경색",
"freeze_dps_on_quest_clear": "퀘스트 종료시 DPS 집계 정지", "freeze_dps_on_quest_end": "Freeze DPS on Quest End",
"global_position_modifier": "전역 위치 배율", "global_position_modifier": "전역 위치 배율",
"global_scale_modifier": "전역 크기 배율", "global_scale_modifier": "전역 크기 배율",
"global_settings": "전역 설정", "global_settings": "전역 설정",
@@ -214,6 +214,7 @@
"relative_offset": "상대적 위치 거리", "relative_offset": "상대적 위치 거리",
"render_highlighted_monster": "타겟이 된 몬스터 표시", "render_highlighted_monster": "타겟이 된 몬스터 표시",
"render_not_highlighted_monsters": "타겟이 아닌 몬스터 표시", "render_not_highlighted_monsters": "타겟이 아닌 몬스터 표시",
"renderer": "Renderer",
"reversed_order": "역순", "reversed_order": "역순",
"reward_screen": "Reward Screen", "reward_screen": "Reward Screen",
"settings": "설정", "settings": "설정",
@@ -247,6 +248,7 @@
"total_buildup": "총 누적치", "total_buildup": "총 누적치",
"total_buildup_label": "총 누적치 정보", "total_buildup_label": "총 누적치 정보",
"total_buildup_value_label": "총 누적치 값 정보", "total_buildup_value_label": "총 누적치 값 정보",
"total_cart_count_label": "Total Cart Count Label",
"total_damage": "총 대미지", "total_damage": "총 대미지",
"total_damage_label": "총 대미지 정보", "total_damage_label": "총 대미지 정보",
"total_damage_offset_is_relative": "총 대미지 거리를 상대적 값으로", "total_damage_offset_is_relative": "총 대미지 거리를 상대적 값으로",
@@ -256,6 +258,7 @@
"tracked_damage_types": "추적할 대미지 종류", "tracked_damage_types": "추적할 대미지 종류",
"tracked_monster_types": "추적할 몬스터 타입", "tracked_monster_types": "추적할 몬스터 타입",
"type": "순으로", "type": "순으로",
"use_d2d_if_available": "Use Direct2D if available",
"value_label": "값 정보", "value_label": "값 정보",
"vertical": "세로", "vertical": "세로",
"viewport_offset": "뷰포트 거리", "viewport_offset": "뷰포트 거리",

View File

@@ -70,8 +70,8 @@
"buildup_percentage_label": "Метка накопления в процентах", "buildup_percentage_label": "Метка накопления в процентах",
"buildup_value_label": "Метка значения накопления", "buildup_value_label": "Метка значения накопления",
"capture_line": "Линия здоровья захвата", "capture_line": "Линия здоровья захвата",
"cart_count": "Кол-во потерь сознания", "cart_count": "Кол-во смертей",
"cart_count_label": "Метка кол-ва потерь сознания", "cart_count_label": "Метка кол-ва смертей",
"center": "Центр", "center": "Центр",
"closest": "Ближайший", "closest": "Ближайший",
"color": "Цвет", "color": "Цвет",
@@ -104,7 +104,7 @@
"first_hit": "Первый удар", "first_hit": "Первый удар",
"flinch_count": "Кол-во вздрагиваний", "flinch_count": "Кол-во вздрагиваний",
"foreground": "Передний план", "foreground": "Передний план",
"freeze_dps_on_quest_clear": "Заморозить УВС после завершения квеста", "freeze_dps_on_quest_end": "Заморозить УВС после завершения квеста",
"global_position_modifier": "Глобальный модификатор расположения", "global_position_modifier": "Глобальный модификатор расположения",
"global_scale_modifier": "Глобальный модификатор размера", "global_scale_modifier": "Глобальный модификатор размера",
"global_settings": "Общие настройки", "global_settings": "Общие настройки",
@@ -214,6 +214,7 @@
"relative_offset": "Относительный сдвиг", "relative_offset": "Относительный сдвиг",
"render_highlighted_monster": "Показывать помеченного монстра", "render_highlighted_monster": "Показывать помеченного монстра",
"render_not_highlighted_monsters": "Показывать непомеченных монстров", "render_not_highlighted_monsters": "Показывать непомеченных монстров",
"renderer": "Renderer",
"reversed_order": "Обратный порядок", "reversed_order": "Обратный порядок",
"reward_screen": "Экран наград", "reward_screen": "Экран наград",
"settings": "Настройки", "settings": "Настройки",
@@ -247,6 +248,7 @@
"total_buildup": "Общее накопление", "total_buildup": "Общее накопление",
"total_buildup_label": "Метка общего накопления", "total_buildup_label": "Метка общего накопления",
"total_buildup_value_label": "Метка значения общего накопления", "total_buildup_value_label": "Метка значения общего накопления",
"total_cart_count_label": "Метка общего кол-ва смертей",
"total_damage": "Общий урон", "total_damage": "Общий урон",
"total_damage_label": "Метка общего урона", "total_damage_label": "Метка общего урона",
"total_damage_offset_is_relative": "Относительный сдвиг общего урона", "total_damage_offset_is_relative": "Относительный сдвиг общего урона",
@@ -256,6 +258,7 @@
"tracked_damage_types": "Отслеживаемые типы урона", "tracked_damage_types": "Отслеживаемые типы урона",
"tracked_monster_types": "Отслеживаемые типы монстров", "tracked_monster_types": "Отслеживаемые типы монстров",
"type": "Тип", "type": "Тип",
"use_d2d_if_available": "Использовать Direct2D, если доступен",
"value_label": "Метка значений", "value_label": "Метка значений",
"vertical": "Вертикально", "vertical": "Вертикально",
"viewport_offset": "Сдвиг в экранном пространстве", "viewport_offset": "Сдвиг в экранном пространстве",

View File

@@ -104,7 +104,7 @@
"first_hit": "第一击", "first_hit": "第一击",
"flinch_count": "胆怯次数", "flinch_count": "胆怯次数",
"foreground": "前景", "foreground": "前景",
"freeze_dps_on_quest_clear": "Freeze DPS when Quest is cleared", "freeze_dps_on_quest_end": "Freeze DPS on Quest End",
"global_position_modifier": "全局位置更改", "global_position_modifier": "全局位置更改",
"global_scale_modifier": "全局比例更改", "global_scale_modifier": "全局比例更改",
"global_settings": "全局设定", "global_settings": "全局设定",
@@ -214,6 +214,7 @@
"relative_offset": "相对偏移", "relative_offset": "相对偏移",
"render_highlighted_monster": "渲染高亮怪物", "render_highlighted_monster": "渲染高亮怪物",
"render_not_highlighted_monsters": "渲染非高亮怪物", "render_not_highlighted_monsters": "渲染非高亮怪物",
"renderer": "Renderer",
"reversed_order": "逆向排序", "reversed_order": "逆向排序",
"reward_screen": "Reward Screen", "reward_screen": "Reward Screen",
"settings": "设定", "settings": "设定",
@@ -247,6 +248,7 @@
"total_buildup": "总积累值", "total_buildup": "总积累值",
"total_buildup_label": "总积累值标签", "total_buildup_label": "总积累值标签",
"total_buildup_value_label": "总积累值标签", "total_buildup_value_label": "总积累值标签",
"total_cart_count_label": "Total Cart Count Label",
"total_damage": "总伤害", "total_damage": "总伤害",
"total_damage_label": "总伤害标签", "total_damage_label": "总伤害标签",
"total_damage_offset_is_relative": "总伤害相对偏移", "total_damage_offset_is_relative": "总伤害相对偏移",
@@ -256,6 +258,7 @@
"tracked_damage_types": "跟踪的伤害类型", "tracked_damage_types": "跟踪的伤害类型",
"tracked_monster_types": "跟踪的怪物类型", "tracked_monster_types": "跟踪的怪物类型",
"type": "类型", "type": "类型",
"use_d2d_if_available": "Use Direct2D if available",
"value_label": "数字", "value_label": "数字",
"vertical": "垂直", "vertical": "垂直",
"viewport_offset": "窗口偏移", "viewport_offset": "窗口偏移",

View File

@@ -104,7 +104,7 @@
"first_hit": "第一擊", "first_hit": "第一擊",
"flinch_count": "膽怯次數", "flinch_count": "膽怯次數",
"foreground": "圖形化顯示條的底色", "foreground": "圖形化顯示條的底色",
"freeze_dps_on_quest_clear": "當任務結束時凍結DPS", "freeze_dps_on_quest_end": "Freeze DPS on Quest End",
"global_position_modifier": "全域位置更改", "global_position_modifier": "全域位置更改",
"global_scale_modifier": "全域比例更改", "global_scale_modifier": "全域比例更改",
"global_settings": "全域設定", "global_settings": "全域設定",
@@ -214,6 +214,7 @@
"relative_offset": "相對偏移", "relative_offset": "相對偏移",
"render_highlighted_monster": "渲染目標魔物", "render_highlighted_monster": "渲染目標魔物",
"render_not_highlighted_monsters": "渲染非目標魔物", "render_not_highlighted_monsters": "渲染非目標魔物",
"renderer": "Renderer",
"reversed_order": "反向排序", "reversed_order": "反向排序",
"reward_screen": "Reward Screen", "reward_screen": "Reward Screen",
"settings": "設定", "settings": "設定",
@@ -247,6 +248,7 @@
"total_buildup": "總累積值", "total_buildup": "總累積值",
"total_buildup_label": "總累積值文字", "total_buildup_label": "總累積值文字",
"total_buildup_value_label": "總累積值數值文字", "total_buildup_value_label": "總累積值數值文字",
"total_cart_count_label": "Total Cart Count Label",
"total_damage": "總傷害", "total_damage": "總傷害",
"total_damage_label": "總傷害文字", "total_damage_label": "總傷害文字",
"total_damage_offset_is_relative": "總傷害顯示位置調整", "total_damage_offset_is_relative": "總傷害顯示位置調整",
@@ -256,6 +258,7 @@
"tracked_damage_types": "追蹤的傷害類型", "tracked_damage_types": "追蹤的傷害類型",
"tracked_monster_types": "追蹤的魔物類型", "tracked_monster_types": "追蹤的魔物類型",
"type": "類型", "type": "類型",
"use_d2d_if_available": "Use Direct2D if available",
"value_label": "數字", "value_label": "數字",
"vertical": "垂直", "vertical": "垂直",
"viewport_offset": "視窗的位置", "viewport_offset": "視窗的位置",