mirror of
https://github.com/GreenComfyTea/MHR-Overlay.git
synced 2026-01-25 21:08:07 -08:00
Compare commits
8 Commits
9a3cb399e2
...
a0a4df7b91
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a0a4df7b91 | ||
|
|
667be5793e | ||
|
|
b321896eeb | ||
|
|
3b94c67071 | ||
|
|
7b9e376db1 | ||
|
|
fdab487b7e | ||
|
|
b9d44a9b67 | ||
|
|
3513d77714 |
@@ -159,41 +159,40 @@ function damage_hook.update_damage(enemy, enemy_calc_damage_info)
|
|||||||
monster = small_monster.get_monster(enemy);
|
monster = small_monster.get_monster(enemy);
|
||||||
end
|
end
|
||||||
|
|
||||||
local attacking_player = nil;
|
local player = nil;
|
||||||
local attacking_otomo = nil;
|
local otomo = nil;
|
||||||
|
|
||||||
if not is_otomo_attack then
|
if not is_otomo_attack then
|
||||||
attacking_player = players.get_player(attacker_id);
|
player = players.get_player(attacker_id);
|
||||||
|
|
||||||
if attacking_player == nil then
|
if player == nil then
|
||||||
attacking_player = non_players.get_servant(attacker_id);
|
player = non_players.get_servant(attacker_id);
|
||||||
end
|
|
||||||
|
|
||||||
local stun_damage = stun_damage_field:get_data(enemy_calc_damage_info);
|
|
||||||
if attacking_player ~= nil then
|
|
||||||
ailments.apply_ailment_buildup(monster, attacker_id, ailments.stun_id, stun_damage);
|
|
||||||
|
|
||||||
ailments.apply_ailment_buildup(monster, attacker_id, condition_type, condition_damage);
|
|
||||||
ailments.apply_ailment_buildup(monster, attacker_id, condition_type2, condition_damage2);
|
|
||||||
ailments.apply_ailment_buildup(monster, attacker_id, condition_type3, condition_damage3);
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if attacker_id < 4 then
|
if attacker_id < 4 then
|
||||||
attacking_player = players.get_player(attacker_id);
|
player = players.get_player(attacker_id);
|
||||||
attacking_otomo = non_players.get_otomo(attacker_id);
|
otomo = non_players.get_otomo(attacker_id);
|
||||||
elseif attacker_id == 4 then
|
elseif attacker_id == 4 then
|
||||||
attacking_player = players.myself
|
player = players.myself
|
||||||
attacking_otomo = non_players.get_otomo(non_players.my_second_otomo_id);
|
otomo = non_players.get_otomo(non_players.my_second_otomo_id);
|
||||||
else
|
else
|
||||||
attacking_player = non_players.get_servant(attacker_id - 1);
|
player = non_players.get_servant(attacker_id - 1);
|
||||||
attacking_otomo = non_players.get_otomo(attacker_id - 1);
|
otomo = non_players.get_otomo(attacker_id - 1);
|
||||||
end
|
end
|
||||||
|
|
||||||
players.update_damage(attacking_otomo, damage_source_type, is_large_monster, damage_object);
|
players.update_damage(otomo, damage_source_type, is_large_monster, damage_object);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local stun_damage = stun_damage_field:get_data(enemy_calc_damage_info);
|
||||||
|
ailments.apply_ailment_buildup(monster, player, otomo, ailments.stun_id, stun_damage);
|
||||||
|
|
||||||
|
ailments.apply_ailment_buildup(monster, player, otomo, condition_type, condition_damage);
|
||||||
|
ailments.apply_ailment_buildup(monster, player, otomo, condition_type2, condition_damage2);
|
||||||
|
ailments.apply_ailment_buildup(monster, player, otomo, condition_type3, condition_damage3);
|
||||||
|
|
||||||
players.update_damage(players.total, damage_source_type, is_large_monster, damage_object);
|
players.update_damage(players.total, damage_source_type, is_large_monster, damage_object);
|
||||||
players.update_damage(attacking_player, damage_source_type, is_large_monster, damage_object);
|
players.update_damage(player, damage_source_type, is_large_monster, damage_object);
|
||||||
|
|
||||||
|
|
||||||
--xy = xy .. "\nPlayer: " .. tostring(attacker_id) ..
|
--xy = xy .. "\nPlayer: " .. tostring(attacker_id) ..
|
||||||
--" " .. tostring(attacking_player.name) ..
|
--" " .. tostring(attacking_player.name) ..
|
||||||
@@ -204,15 +203,15 @@ function damage_hook.update_damage(enemy, enemy_calc_damage_info)
|
|||||||
--" Condition Type: (" .. tostring(attacker_type) ..
|
--" Condition Type: (" .. tostring(attacker_type) ..
|
||||||
--") " .. tostring(condition_type);
|
--") " .. tostring(condition_type);
|
||||||
|
|
||||||
--if is_otomo_attack then
|
--[[if is_otomo_attack then
|
||||||
--xy = xy .. "\nOtomo Master: " .. tostring(attacking_player.id) ..
|
xy = xy .. "\nOtomo Master: " .. tostring(player.id) ..
|
||||||
--" " .. tostring(attacking_player.name) ..
|
" " .. tostring(player.name) ..
|
||||||
--" Damage: " .. tostring(damage_object.total_damage);
|
" Damage: " .. tostring(damage_object.total_damage);
|
||||||
|
|
||||||
--xy = xy .. "\nOtomo: " .. tostring(attacking_otomo.id) ..
|
xy = xy .. "\nOtomo: " .. tostring(otomo.id) ..
|
||||||
--" " .. tostring(attacking_otomo.name) ..
|
" " .. tostring(otomo.name) ..
|
||||||
--" Damage: " .. tostring(damage_object.total_damage);
|
" Damage: " .. tostring(damage_object.total_damage);
|
||||||
--end
|
end]]
|
||||||
|
|
||||||
--if string.len(xy) > 2700 then
|
--if string.len(xy) > 2700 then
|
||||||
-- xy = "";
|
-- xy = "";
|
||||||
|
|||||||
@@ -187,12 +187,13 @@ function non_players.update_my_otomos()
|
|||||||
if name ~= nil and name ~= "" then
|
if name ~= nil and name ~= "" then
|
||||||
local level = otomo_create_data_level_field:get_data(first_otomo) or 0;
|
local level = otomo_create_data_level_field:get_data(first_otomo) or 0;
|
||||||
|
|
||||||
if non_players.otomo_list[0] == nil then
|
local myself_id = players.myself.id;
|
||||||
non_players.otomo_list[0] = non_players.new(0, name, level, players.types.my_otomo);
|
if non_players.otomo_list[myself_id] == nil then
|
||||||
|
non_players.otomo_list[myself_id] = non_players.new(0, name, level, players.types.my_otomo);
|
||||||
end
|
end
|
||||||
|
|
||||||
if cached_config.settings.show_my_otomos_separately then
|
if cached_config.settings.show_my_otomos_separately then
|
||||||
table.insert(players.display_list, non_players.otomo_list[0]);
|
table.insert(players.display_list, non_players.otomo_list[myself_id]);
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -139,6 +139,10 @@ function players.init_damage_sources()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function players.get_player(player_id)
|
function players.get_player(player_id)
|
||||||
|
if player_id == non_players.my_second_otomo_id then
|
||||||
|
return players.myself;
|
||||||
|
end
|
||||||
|
|
||||||
return players.list[player_id];
|
return players.list[player_id];
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -172,6 +176,10 @@ function players.update_damage(player, damage_source_type, is_large_monster, dam
|
|||||||
players.merge_damage(player_monster_type.poison, damage_object);
|
players.merge_damage(player_monster_type.poison, damage_object);
|
||||||
elseif damage_source_type == "blast" then
|
elseif damage_source_type == "blast" then
|
||||||
players.merge_damage(player_monster_type.blast, damage_object);
|
players.merge_damage(player_monster_type.blast, damage_object);
|
||||||
|
elseif damage_source_type == "otomo poison" then
|
||||||
|
players.merge_damage(player_monster_type.otomo_poison, damage_object);
|
||||||
|
elseif damage_source_type == "otomo blast" then
|
||||||
|
players.merge_damage(player_monster_type.otomo_blast, damage_object);
|
||||||
elseif damage_source_type == "endemic life" then
|
elseif damage_source_type == "endemic life" then
|
||||||
players.merge_damage(player_monster_type.endemic_life, damage_object);
|
players.merge_damage(player_monster_type.endemic_life, damage_object);
|
||||||
elseif damage_source_type == "other" then
|
elseif damage_source_type == "other" then
|
||||||
@@ -188,154 +196,166 @@ function players.update_display(player)
|
|||||||
return;
|
return;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local cached_config = config.current_config.damage_meter_UI;
|
||||||
|
|
||||||
player.display.total_damage = 0;
|
player.display.total_damage = 0;
|
||||||
player.display.physical_damage = 0;
|
player.display.physical_damage = 0;
|
||||||
player.display.elemental_damage = 0;
|
player.display.elemental_damage = 0;
|
||||||
player.display.ailment_damage = 0;
|
player.display.ailment_damage = 0;
|
||||||
|
|
||||||
local cached_config = config.current_config.damage_meter_UI;
|
local monster_types = {};
|
||||||
|
|
||||||
if cached_config.tracked_monster_types.small_monsters then
|
if cached_config.tracked_monster_types.small_monsters then
|
||||||
if cached_config.tracked_damage_types.player_damage then
|
table.insert(monster_types, player.small_monsters);
|
||||||
players.merge_damage(player.display, player.small_monsters);
|
|
||||||
end
|
|
||||||
|
|
||||||
if cached_config.tracked_damage_types.bomb_damage then
|
|
||||||
players.merge_damage(player.display, player.small_monsters.bombs);
|
|
||||||
end
|
|
||||||
|
|
||||||
if cached_config.tracked_damage_types.kunai_damage then
|
|
||||||
players.merge_damage(player.display, player.small_monsters.kunai);
|
|
||||||
end
|
|
||||||
|
|
||||||
if cached_config.tracked_damage_types.installation_damage then
|
|
||||||
players.merge_damage(player.display, player.small_monsters.installations);
|
|
||||||
end
|
|
||||||
|
|
||||||
if cached_config.tracked_damage_types.otomo_damage then
|
|
||||||
if player.type == players.types.myself then
|
|
||||||
|
|
||||||
if not cached_config.settings.show_my_otomos_separately then
|
|
||||||
players.merge_damage(player.display, player.small_monsters.otomo);
|
|
||||||
end
|
|
||||||
elseif player.type == players.types.other_players then
|
|
||||||
|
|
||||||
if not cached_config.settings.show_other_player_otomos_separately then
|
|
||||||
players.merge_damage(player.display, player.small_monsters.otomo);
|
|
||||||
end
|
|
||||||
elseif player.type == players.types.servants then
|
|
||||||
|
|
||||||
if not cached_config.settings.show_servant_otomos_separately then
|
|
||||||
players.merge_damage(player.display, player.small_monsters.otomo);
|
|
||||||
end
|
|
||||||
elseif player.type == players.types.my_otomo then
|
|
||||||
|
|
||||||
if cached_config.settings.show_my_otomos_separately then
|
|
||||||
players.merge_damage(player.display, player.small_monsters.otomo);
|
|
||||||
end
|
|
||||||
elseif player.type == players.types.other_player_otomo then
|
|
||||||
|
|
||||||
if cached_config.settings.show_other_player_otomos_separately then
|
|
||||||
players.merge_damage(player.display, player.small_monsters.otomo);
|
|
||||||
end
|
|
||||||
elseif player.type == players.types.servant_otomo then
|
|
||||||
|
|
||||||
if cached_config.settings.show_servant_otomos_separately then
|
|
||||||
players.merge_damage(player.display, player.small_monsters.otomo);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if cached_config.tracked_damage_types.wyvern_riding_damage then
|
|
||||||
players.merge_damage(player.display, player.small_monsters.wyvern_riding);
|
|
||||||
end
|
|
||||||
|
|
||||||
if cached_config.tracked_damage_types.poison_damage then
|
|
||||||
players.merge_damage(player.display, player.small_monsters.poison);
|
|
||||||
end
|
|
||||||
|
|
||||||
if cached_config.tracked_damage_types.blast_damage then
|
|
||||||
players.merge_damage(player.display, player.small_monsters.blast);
|
|
||||||
end
|
|
||||||
|
|
||||||
if cached_config.tracked_damage_types.endemic_life_damage then
|
|
||||||
players.merge_damage(player.display, player.small_monsters.endemic_life);
|
|
||||||
end
|
|
||||||
|
|
||||||
if cached_config.tracked_damage_types.other_damage then
|
|
||||||
players.merge_damage(player.display, player.small_monsters.other);
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if cached_config.tracked_monster_types.large_monsters then
|
if cached_config.tracked_monster_types.large_monsters then
|
||||||
|
table.insert(monster_types, player.large_monsters);
|
||||||
|
end
|
||||||
|
|
||||||
|
for _, monster_type in ipairs(monster_types) do
|
||||||
if cached_config.tracked_damage_types.player_damage then
|
if cached_config.tracked_damage_types.player_damage then
|
||||||
players.merge_damage(player.display, player.large_monsters);
|
players.merge_damage(player.display, monster_type);
|
||||||
end
|
end
|
||||||
|
|
||||||
if cached_config.tracked_damage_types.bomb_damage then
|
if cached_config.tracked_damage_types.bomb_damage then
|
||||||
players.merge_damage(player.display, player.large_monsters.bombs);
|
players.merge_damage(player.display, monster_type.bombs);
|
||||||
end
|
end
|
||||||
|
|
||||||
if cached_config.tracked_damage_types.kunai_damage then
|
if cached_config.tracked_damage_types.kunai_damage then
|
||||||
players.merge_damage(player.display, player.large_monsters.kunai);
|
players.merge_damage(player.display, monster_type.kunai);
|
||||||
end
|
end
|
||||||
|
|
||||||
if cached_config.tracked_damage_types.installation_damage then
|
if cached_config.tracked_damage_types.installation_damage then
|
||||||
players.merge_damage(player.display, player.large_monsters.installations);
|
players.merge_damage(player.display, monster_type.installations);
|
||||||
end
|
end
|
||||||
|
|
||||||
if cached_config.tracked_damage_types.otomo_damage then
|
if cached_config.tracked_damage_types.otomo_damage then
|
||||||
if player.type == players.types.myself then
|
if player.type == players.types.myself then
|
||||||
|
|
||||||
if not cached_config.settings.show_my_otomos_separately then
|
if not cached_config.settings.show_my_otomos_separately then
|
||||||
players.merge_damage(player.display, player.large_monsters.otomo);
|
players.merge_damage(player.display, monster_type.otomo);
|
||||||
end
|
end
|
||||||
elseif player.type == players.types.other_players then
|
elseif player.type == players.types.other_player then
|
||||||
|
|
||||||
if not cached_config.settings.show_other_player_otomos_separately then
|
if not cached_config.settings.show_other_player_otomos_separately then
|
||||||
players.merge_damage(player.display, player.large_monsters.otomo);
|
players.merge_damage(player.display, monster_type.otomo);
|
||||||
end
|
end
|
||||||
elseif player.type == players.types.servants then
|
elseif player.type == players.types.servant then
|
||||||
|
|
||||||
if not cached_config.settings.show_servant_otomos_separately then
|
if not cached_config.settings.show_servant_otomos_separately then
|
||||||
players.merge_damage(player.display, player.large_monsters.otomo);
|
players.merge_damage(player.display, monster_type.otomo);
|
||||||
end
|
end
|
||||||
elseif player.type == players.types.my_otomo then
|
elseif player.type == players.types.my_otomo then
|
||||||
|
|
||||||
if cached_config.settings.show_my_otomos_separately then
|
if cached_config.settings.show_my_otomos_separately then
|
||||||
players.merge_damage(player.display, player.large_monsters.otomo);
|
players.merge_damage(player.display, monster_type.otomo);
|
||||||
end
|
end
|
||||||
elseif player.type == players.types.other_player_otomo then
|
elseif player.type == players.types.other_player_otomo then
|
||||||
|
|
||||||
if cached_config.settings.show_other_player_otomos_separately then
|
if cached_config.settings.show_other_player_otomos_separately then
|
||||||
players.merge_damage(player.display, player.large_monsters.otomo);
|
players.merge_damage(player.display, monster_type.otomo);
|
||||||
end
|
end
|
||||||
elseif player.type == players.types.servant_otomo then
|
elseif player.type == players.types.servant_otomo then
|
||||||
|
|
||||||
if cached_config.settings.show_servant_otomos_separately then
|
if cached_config.settings.show_servant_otomos_separately then
|
||||||
players.merge_damage(player.display, player.large_monsters.otomo);
|
players.merge_damage(player.display, monster_type.otomo);
|
||||||
end
|
end
|
||||||
|
elseif player.type == players.types.total then
|
||||||
|
|
||||||
|
players.merge_damage(player.display, monster_type.otomo);
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if cached_config.tracked_damage_types.wyvern_riding_damage then
|
if cached_config.tracked_damage_types.wyvern_riding_damage then
|
||||||
players.merge_damage(player.display, player.large_monsters.wyvern_riding);
|
players.merge_damage(player.display, monster_type.wyvern_riding);
|
||||||
end
|
end
|
||||||
|
|
||||||
if cached_config.tracked_damage_types.poison_damage then
|
if cached_config.tracked_damage_types.poison_damage then
|
||||||
players.merge_damage(player.display, player.large_monsters.poison);
|
players.merge_damage(player.display, monster_type.poison);
|
||||||
|
|
||||||
|
if player.type == players.types.myself then
|
||||||
|
|
||||||
|
if not cached_config.settings.show_my_otomos_separately then
|
||||||
|
players.merge_damage(player.display, monster_type.otomo_poison);
|
||||||
|
end
|
||||||
|
elseif player.type == players.types.other_player then
|
||||||
|
|
||||||
|
if not cached_config.settings.show_other_player_otomos_separately then
|
||||||
|
players.merge_damage(player.display, monster_type.otomo_poison);
|
||||||
|
end
|
||||||
|
elseif player.type == players.types.servant then
|
||||||
|
|
||||||
|
if not cached_config.settings.show_servant_otomos_separately then
|
||||||
|
players.merge_damage(player.display, monster_type.otomo_poison);
|
||||||
|
end
|
||||||
|
elseif player.type == players.types.my_otomo then
|
||||||
|
|
||||||
|
if cached_config.settings.show_my_otomos_separately then
|
||||||
|
players.merge_damage(player.display, monster_type.otomo_poison);
|
||||||
|
end
|
||||||
|
elseif player.type == players.types.other_player_otomo then
|
||||||
|
|
||||||
|
if cached_config.settings.show_other_player_otomos_separately then
|
||||||
|
players.merge_damage(player.display, monster_type.otomo_poison);
|
||||||
|
end
|
||||||
|
elseif player.type == players.types.servant_otomo then
|
||||||
|
|
||||||
|
if cached_config.settings.show_servant_otomos_separately then
|
||||||
|
players.merge_damage(player.display, monster_type.otomo_poison);
|
||||||
|
end
|
||||||
|
|
||||||
|
elseif player.type == players.types.total then
|
||||||
|
|
||||||
|
players.merge_damage(player.display, monster_type.otomo_poison);
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if cached_config.tracked_damage_types.blast_damage then
|
if cached_config.tracked_damage_types.blast_damage then
|
||||||
players.merge_damage(player.display, player.large_monsters.blast);
|
players.merge_damage(player.display, monster_type.blast);
|
||||||
|
|
||||||
|
if player.type == players.types.myself then
|
||||||
|
|
||||||
|
if not cached_config.settings.show_my_otomos_separately then
|
||||||
|
players.merge_damage(player.display, monster_type.otomo_blast);
|
||||||
|
end
|
||||||
|
elseif player.type == players.types.other_player then
|
||||||
|
|
||||||
|
if not cached_config.settings.show_other_player_otomos_separately then
|
||||||
|
players.merge_damage(player.display, monster_type.otomo_blast);
|
||||||
|
end
|
||||||
|
elseif player.type == players.types.servant then
|
||||||
|
|
||||||
|
if not cached_config.settings.show_servant_otomos_separately then
|
||||||
|
players.merge_damage(player.display, monster_type.otomo_blast);
|
||||||
|
end
|
||||||
|
elseif player.type == players.types.my_otomo then
|
||||||
|
|
||||||
|
if cached_config.settings.show_my_otomos_separately then
|
||||||
|
players.merge_damage(player.display, monster_type.otomo_blast);
|
||||||
|
end
|
||||||
|
elseif player.type == players.types.other_player_otomo then
|
||||||
|
|
||||||
|
if cached_config.settings.show_other_player_otomos_separately then
|
||||||
|
players.merge_damage(player.display, monster_type.otomo_blast);
|
||||||
|
end
|
||||||
|
elseif player.type == players.types.servant_otomo then
|
||||||
|
|
||||||
|
if cached_config.settings.show_servant_otomos_separately then
|
||||||
|
players.merge_damage(player.display, monster_type.otomo_blast);
|
||||||
|
end
|
||||||
|
elseif player.type == players.types.total then
|
||||||
|
|
||||||
|
players.merge_damage(player.display, monster_type.otomo_blast);
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if cached_config.tracked_damage_types.endemic_life_damage then
|
if cached_config.tracked_damage_types.endemic_life_damage then
|
||||||
players.merge_damage(player.display, player.large_monsters.endemic_life);
|
players.merge_damage(player.display, monster_type.endemic_life);
|
||||||
end
|
end
|
||||||
|
|
||||||
if cached_config.tracked_damage_types.other_damage then
|
if cached_config.tracked_damage_types.other_damage then
|
||||||
players.merge_damage(player.display, player.large_monsters.other);
|
players.merge_damage(player.display, monster_type.other);
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -562,8 +582,6 @@ function players.update_player_list_(hunter_info_field_)
|
|||||||
end
|
end
|
||||||
|
|
||||||
for i = 0, count - 1 do
|
for i = 0, count - 1 do
|
||||||
|
|
||||||
|
|
||||||
local player_info = get_item_method:call(player_info_list, i);
|
local player_info = get_item_method:call(player_info_list, i);
|
||||||
if player_info == nil then
|
if player_info == nil then
|
||||||
goto continue
|
goto continue
|
||||||
|
|||||||
@@ -2,13 +2,25 @@ local config = {};
|
|||||||
local table_helpers;
|
local table_helpers;
|
||||||
local language;
|
local language;
|
||||||
|
|
||||||
|
config.version = "2.4";
|
||||||
|
|
||||||
|
config.config_folder = "MHR Overlay\\configs\\";
|
||||||
|
config.current_config_value_file_name = "MHR Overlay\\config.json";
|
||||||
|
|
||||||
|
config.current_config_name = nil;
|
||||||
config.current_config = nil;
|
config.current_config = nil;
|
||||||
config.config_file_name = "MHR Overlay/config.json";
|
|
||||||
|
|
||||||
config.default_config = {};
|
config.config_names = {};
|
||||||
|
config.configs = {};
|
||||||
|
|
||||||
function config.init()
|
config.default_config = nil;
|
||||||
|
|
||||||
|
local is_old_config_transferred = false;
|
||||||
|
|
||||||
|
function config.init_default()
|
||||||
config.default_config = {
|
config.default_config = {
|
||||||
|
version = config.version,
|
||||||
|
|
||||||
global_settings = {
|
global_settings = {
|
||||||
language = "default",
|
language = "default",
|
||||||
|
|
||||||
@@ -1749,7 +1761,7 @@ function config.init()
|
|||||||
x = 5,
|
x = 5,
|
||||||
y = 0
|
y = 0
|
||||||
},
|
},
|
||||||
color = 0xFFb5dded,
|
color = 0xFFB5DDED,
|
||||||
|
|
||||||
shadow = {
|
shadow = {
|
||||||
visibility = true,
|
visibility = true,
|
||||||
@@ -1768,7 +1780,7 @@ function config.init()
|
|||||||
x = 115,
|
x = 115,
|
||||||
y = 0
|
y = 0
|
||||||
},
|
},
|
||||||
color = 0xFFb5dded,
|
color = 0xFFB5DDED,
|
||||||
|
|
||||||
shadow = {
|
shadow = {
|
||||||
visibility = true,
|
visibility = true,
|
||||||
@@ -1787,7 +1799,7 @@ function config.init()
|
|||||||
x = 152,
|
x = 152,
|
||||||
y = 0
|
y = 0
|
||||||
},
|
},
|
||||||
color = 0xFFb5dded,
|
color = 0xFFB5DDED,
|
||||||
|
|
||||||
shadow = {
|
shadow = {
|
||||||
visibility = true,
|
visibility = true,
|
||||||
@@ -1806,7 +1818,7 @@ function config.init()
|
|||||||
x = 5,
|
x = 5,
|
||||||
y = 0
|
y = 0
|
||||||
},
|
},
|
||||||
color = 0xFFFF9393,
|
color = 0xFFF27979,
|
||||||
|
|
||||||
shadow = {
|
shadow = {
|
||||||
visibility = true,
|
visibility = true,
|
||||||
@@ -1825,7 +1837,7 @@ function config.init()
|
|||||||
x = 115,
|
x = 115,
|
||||||
y = 0
|
y = 0
|
||||||
},
|
},
|
||||||
color = 0xFFFF9393,
|
color = 0xFFF27979,
|
||||||
|
|
||||||
shadow = {
|
shadow = {
|
||||||
visibility = true,
|
visibility = true,
|
||||||
@@ -1883,7 +1895,7 @@ function config.init()
|
|||||||
},
|
},
|
||||||
|
|
||||||
colors = {
|
colors = {
|
||||||
foreground = 0xA7F4D5A3,
|
foreground = 0xA7FDC689,
|
||||||
background = 0xA7000000,
|
background = 0xA7000000,
|
||||||
outline = 0xC0000000
|
outline = 0xC0000000
|
||||||
}
|
}
|
||||||
@@ -5348,38 +5360,163 @@ function config.init()
|
|||||||
};
|
};
|
||||||
end
|
end
|
||||||
|
|
||||||
function config.load()
|
function config.load_current_config_value()
|
||||||
local loaded_config = json.load_file(config.config_file_name);
|
local loaded_config = json.load_file(config.current_config_value_file_name);
|
||||||
if loaded_config ~= nil then
|
if loaded_config ~= nil then
|
||||||
log.info("[MHR Overlay] config.json loaded successfully");
|
if loaded_config.config == nil then
|
||||||
|
log.info("[MHR Overlay] old config.json loaded successfully");
|
||||||
|
|
||||||
|
local config_save = {
|
||||||
|
config = config.current_config_name
|
||||||
|
};
|
||||||
|
|
||||||
|
config.current_config_name = "old_config";
|
||||||
config.current_config = table_helpers.merge(config.default_config, loaded_config);
|
config.current_config = table_helpers.merge(config.default_config, loaded_config);
|
||||||
|
config.current_config.version = config.version;
|
||||||
|
|
||||||
|
config.save(config.config_folder .. "old_config.json", config.current_config);
|
||||||
|
config.save_current_config_name();
|
||||||
|
|
||||||
|
table.insert(config.config_names, "old_config");
|
||||||
|
table.insert(config.configs, config.current_config);
|
||||||
|
|
||||||
|
is_old_config_transferred = true;
|
||||||
|
else
|
||||||
|
log.info("[MHR Overlay] config.json loaded successfully");
|
||||||
|
config.current_config_name = loaded_config.config;
|
||||||
|
end
|
||||||
else
|
else
|
||||||
log.error("[MHR Overlay] Failed to load config.json");
|
log.error("[MHR Overlay] Failed to load config.json");
|
||||||
config.current_config = table_helpers.deep_copy(config.default_config);
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function config.save()
|
function config.load_configs()
|
||||||
-- save current config to disk, replacing any existing file
|
local config_files = fs.glob([[MHR Overlay\\configs\\.*json]]);
|
||||||
local success = json.dump_file(config.config_file_name, config.current_config);
|
|
||||||
if success then
|
if config_files == nil then
|
||||||
log.info("[MHR Overlay] config.json saved successfully");
|
return;
|
||||||
else
|
|
||||||
log.error("[MHR Overlay] Failed to save config.json");
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
for i, config_file_name in ipairs(config_files) do
|
||||||
|
|
||||||
|
local config_name = config_file_name:gsub(config.config_folder, ""):gsub(".json","");
|
||||||
|
|
||||||
|
if config_name == "old_config" and is_old_config_transferred then
|
||||||
|
goto continue;
|
||||||
|
end
|
||||||
|
|
||||||
|
local loaded_config = json.load_file(config_file_name);
|
||||||
|
if loaded_config ~= nil then
|
||||||
|
log.info("[MHR Overlay] " .. config_name .. ".json loaded successfully");
|
||||||
|
|
||||||
|
|
||||||
|
local merged_config = table_helpers.merge(config.default_config, loaded_config);
|
||||||
|
merged_config.version = config.version;
|
||||||
|
|
||||||
|
table.insert(config.config_names, config_name);
|
||||||
|
table.insert(config.configs, merged_config);
|
||||||
|
|
||||||
|
config.save(config_file_name, merged_config);
|
||||||
|
|
||||||
|
if config_name == config.current_config_name then
|
||||||
|
config.current_config = merged_config;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
log.error("[MHR Overlay] Failed to load " .. config_name .. ".json");
|
||||||
|
end
|
||||||
|
|
||||||
|
::continue::
|
||||||
|
end
|
||||||
|
|
||||||
|
if config.current_config == nil then
|
||||||
|
if #config.configs > 0 then
|
||||||
|
config.current_config_name = config.config_names[1];
|
||||||
|
config.current_config = config.configs[1];
|
||||||
|
else
|
||||||
|
config.current_config_name = "default";
|
||||||
|
config.current_config = table_helpers.deep_copy(config.default_config);
|
||||||
|
|
||||||
|
table.insert(config.config_names, config.current_config_name);
|
||||||
|
table.insert(config.configs, config.current_config);
|
||||||
|
|
||||||
|
config.save(config.current_config_name, config.current_config);
|
||||||
|
end
|
||||||
|
|
||||||
|
config.save_current_config_name();
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function config.save_current_config_name()
|
||||||
|
config.save(config.current_config_value_file_name, { config = config.current_config_name });
|
||||||
|
end
|
||||||
|
|
||||||
|
function config.save(file_name, config_table)
|
||||||
|
-- save current config to disk, replacing any existing file
|
||||||
|
local success = json.dump_file(file_name, config_table);
|
||||||
|
if success then
|
||||||
|
log.info("[MHR Overlay] " .. file_name .. " saved successfully");
|
||||||
|
else
|
||||||
|
log.error("[MHR Overlay] Failed to save " .. file_name);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function config.save_current()
|
||||||
|
config.save(config.config_folder .. config.current_config_name .. ".json", config.current_config);
|
||||||
|
end
|
||||||
|
|
||||||
|
function config.create_new(config_file_name, config_table)
|
||||||
|
table.insert(config.config_names, config_file_name);
|
||||||
|
table.insert(config.configs, config_table);
|
||||||
|
|
||||||
|
config.save(config.config_folder .. config_file_name .. ".json", config_table);
|
||||||
|
|
||||||
|
config.current_config_name = config_file_name;
|
||||||
|
config.current_config = config_table;
|
||||||
|
|
||||||
|
config.save_current_config_name();
|
||||||
|
end
|
||||||
|
|
||||||
|
function config.new(config_name)
|
||||||
|
if config_name == "" then
|
||||||
|
return;
|
||||||
|
end
|
||||||
|
|
||||||
|
local new_config = table_helpers.deep_copy(config.default_config);
|
||||||
|
|
||||||
|
config.create_new(config_name, new_config);
|
||||||
|
end
|
||||||
|
|
||||||
|
function config.duplicate(config_name)
|
||||||
|
if config_name == "" then
|
||||||
|
return;
|
||||||
|
end
|
||||||
|
|
||||||
|
local new_config = table_helpers.deep_copy(config.current_config);
|
||||||
|
|
||||||
|
config.create_new(config_name, new_config);
|
||||||
|
end
|
||||||
|
|
||||||
|
function config.reset()
|
||||||
|
config.current_config = table_helpers.deep_copy(config.default_config);
|
||||||
|
|
||||||
|
local index = table_helpers.find_index(config.config_names, config.current_config_name);
|
||||||
|
config.configs[index] = config.current_config;
|
||||||
|
end
|
||||||
|
|
||||||
|
function config.update(index)
|
||||||
|
config.current_config = config.configs[index];
|
||||||
|
config.save_current_config_name();
|
||||||
end
|
end
|
||||||
|
|
||||||
function config.init_module()
|
function config.init_module()
|
||||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||||
language = require("MHR_Overlay.Misc.language");
|
language = require("MHR_Overlay.Misc.language");
|
||||||
|
|
||||||
config.init();
|
config.init_default();
|
||||||
config.load();
|
config.load_current_config_value();
|
||||||
config.current_config.version = "2.3.2";
|
config.load_configs();
|
||||||
|
|
||||||
language.update(
|
|
||||||
table_helpers.find_index(language.language_names, config.current_config.global_settings.language, false));
|
|
||||||
|
|
||||||
|
language.update(table_helpers.find_index(language.language_names, config.current_config.global_settings.language, false));
|
||||||
end
|
end
|
||||||
|
|
||||||
return config;
|
return config;
|
||||||
@@ -3,6 +3,9 @@ local table_helpers;
|
|||||||
|
|
||||||
language.language_folder = "MHR Overlay\\languages\\";
|
language.language_folder = "MHR Overlay\\languages\\";
|
||||||
|
|
||||||
|
language.current_language = {};
|
||||||
|
|
||||||
|
|
||||||
language.default_language = {
|
language.default_language = {
|
||||||
font_name = "NotoSansKR-Bold.otf",
|
font_name = "NotoSansKR-Bold.otf",
|
||||||
parts = {
|
parts = {
|
||||||
@@ -445,12 +448,17 @@ language.default_language = {
|
|||||||
myself = "Myself",
|
myself = "Myself",
|
||||||
total = "Total",
|
total = "Total",
|
||||||
|
|
||||||
level_label = "Level Label"
|
level_label = "Level Label",
|
||||||
|
|
||||||
|
config = "Config",
|
||||||
|
rename = "Rename",
|
||||||
|
duplicate = "Duplicate",
|
||||||
|
delete = "Delete",
|
||||||
|
new = "New",
|
||||||
|
reset = "Reset"
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
language.current_language = {};
|
|
||||||
|
|
||||||
language.language_names = { "default"};
|
language.language_names = { "default"};
|
||||||
language.languages = { language.default_language };
|
language.languages = { language.default_language };
|
||||||
|
|
||||||
@@ -466,7 +474,8 @@ function language.load()
|
|||||||
|
|
||||||
local loaded_language = json.load_file(language_file_name);
|
local loaded_language = json.load_file(language_file_name);
|
||||||
if loaded_language ~= nil then
|
if loaded_language ~= nil then
|
||||||
log.info("[MHR Overlay] " .. language_name .. ".json loaded successfully");
|
|
||||||
|
log.info("[MHR Overlay] " .. language_file_name .. ".json loaded successfully");
|
||||||
table.insert(language.language_names, language_name);
|
table.insert(language.language_names, language_name);
|
||||||
|
|
||||||
local merged_language = table_helpers.merge(language.default_language, loaded_language);
|
local merged_language = table_helpers.merge(language.default_language, loaded_language);
|
||||||
@@ -474,8 +483,9 @@ function language.load()
|
|||||||
|
|
||||||
language.save(language_file_name, merged_language);
|
language.save(language_file_name, merged_language);
|
||||||
|
|
||||||
|
|
||||||
else
|
else
|
||||||
log.error("[MHR Overlay] Failed to load " .. language_name .. ".json");
|
log.error("[MHR Overlay] Failed to load " .. language_file_name .. ".json");
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -483,25 +493,26 @@ end
|
|||||||
function language.save(file_name, language_table)
|
function language.save(file_name, language_table)
|
||||||
local success = json.dump_file(file_name, language_table);
|
local success = json.dump_file(file_name, language_table);
|
||||||
if success then
|
if success then
|
||||||
log.info("[MHR Overlay] en-us.json saved successfully");
|
log.info("[MHR Overlay] " .. file_name .. " saved successfully");
|
||||||
else
|
else
|
||||||
log.error("[MHR Overlay] Failed to save en-us.json");
|
log.error("[MHR Overlay] Failed to save " .. file_name);
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function language.save_default()
|
function language.save_default()
|
||||||
language.save(language.language_folder .. "en-us.json", language.default_language)
|
language.save(language.language_folder .. "en-us.json", language.default_language);
|
||||||
end
|
end
|
||||||
|
|
||||||
function language.update(index)
|
function language.update(index)
|
||||||
language.current_language = table_helpers.deep_copy(language.languages[index]);
|
language.current_language = language.languages[index];
|
||||||
end
|
end
|
||||||
|
|
||||||
function language.init_module()
|
function language.init_module()
|
||||||
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
table_helpers = require("MHR_Overlay.Misc.table_helpers");
|
||||||
|
|
||||||
language.save_default();
|
language.save_default();
|
||||||
language.load();
|
language.load();
|
||||||
language.current_language = table_helpers.deep_copy(language.default_language);
|
language.current_language = language.default_language;
|
||||||
end
|
end
|
||||||
|
|
||||||
return language;
|
return language;
|
||||||
|
|||||||
@@ -68,18 +68,96 @@ function table_helpers.merge(...)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function table_helpers.tostring(table_)
|
function table_helpers.tostring(table_)
|
||||||
if type(table_) == "table" then
|
if type(table_) == "number" or type(table_) == "boolean" or type(table_) == "string" then
|
||||||
local s = "{ \n";
|
|
||||||
for k, v in pairs(table_) do
|
|
||||||
if type(k) ~= "number" then
|
|
||||||
k = "\"" .. k .. "\"";
|
|
||||||
end
|
|
||||||
s = s .. "\t[" .. k .. "] = " .. table_helpers.tostring(v) .. ",\n";
|
|
||||||
end
|
|
||||||
return s .. "} \n";
|
|
||||||
else
|
|
||||||
return tostring(table_);
|
return tostring(table_);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if table_helpers.is_empty(table_) then
|
||||||
|
return "{}";
|
||||||
|
end
|
||||||
|
|
||||||
|
local cache = {};
|
||||||
|
local stack = {};
|
||||||
|
local output = {};
|
||||||
|
local depth = 1;
|
||||||
|
local output_str = "{\n";
|
||||||
|
|
||||||
|
while true do
|
||||||
|
local size = 0;
|
||||||
|
for k,v in pairs(table_) do
|
||||||
|
size = size + 1;
|
||||||
|
end
|
||||||
|
|
||||||
|
local cur_index = 1;
|
||||||
|
for k,v in pairs(table_) do
|
||||||
|
if cache[table_] == nil or cur_index >= cache[table_] then
|
||||||
|
|
||||||
|
if string.find(output_str, "}", output_str:len()) then
|
||||||
|
output_str = output_str .. ",\n";
|
||||||
|
elseif not string.find(output_str, "\n", output_str:len()) then
|
||||||
|
output_str = output_str .. "\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_str);
|
||||||
|
output_str = "";
|
||||||
|
|
||||||
|
local key;
|
||||||
|
if type(k) == "number" or type(k) == "boolean" then
|
||||||
|
key = "[" .. tostring(k) .. "]";
|
||||||
|
else
|
||||||
|
key = "['" .. tostring(k) .. "']";
|
||||||
|
end
|
||||||
|
|
||||||
|
if type(v) == "number" or type(v) == "boolean" then
|
||||||
|
output_str = output_str .. string.rep('\t', depth) .. key .. " = "..tostring(v);
|
||||||
|
elseif type(v) == "table" then
|
||||||
|
output_str = output_str .. string.rep('\t', depth) .. key .. " = {\n";
|
||||||
|
table.insert(stack, table_);
|
||||||
|
table.insert(stack, v);
|
||||||
|
cache[table_] = cur_index + 1;
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
output_str = output_str .. string.rep('\t', depth) .. key .. " = '" .. tostring(v) .. "'";
|
||||||
|
end
|
||||||
|
|
||||||
|
if cur_index == size then
|
||||||
|
output_str = output_str .. "\n" .. string.rep('\t', depth - 1) .. "}";
|
||||||
|
else
|
||||||
|
output_str = output_str .. ",";
|
||||||
|
end
|
||||||
|
else
|
||||||
|
-- close the table
|
||||||
|
if cur_index == size then
|
||||||
|
output_str = output_str .. "\n" .. string.rep('\t', depth - 1) .. "}";
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
cur_index = cur_index + 1;
|
||||||
|
end
|
||||||
|
|
||||||
|
if size == 0 then
|
||||||
|
output_str = output_str .. "\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
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- This is necessary for working with HUGE tables otherwise we run out of memory using concat on huge strings
|
||||||
|
table.insert(output, output_str);
|
||||||
|
output_str = table.concat(output);
|
||||||
|
|
||||||
|
return output_str;
|
||||||
|
end
|
||||||
|
|
||||||
|
function table_helpers.tostringln(table_)
|
||||||
|
return "\n" .. table_helpers.tostring(table_);
|
||||||
end
|
end
|
||||||
|
|
||||||
function table_helpers.is_empty(table_)
|
function table_helpers.is_empty(table_)
|
||||||
|
|||||||
@@ -13,22 +13,24 @@ local drawing;
|
|||||||
function ailment_buildup.draw(monster, ailment_buildup_UI, cached_config, ailment_buildups_position_on_screen, opacity_scale)
|
function ailment_buildup.draw(monster, ailment_buildup_UI, cached_config, ailment_buildups_position_on_screen, opacity_scale)
|
||||||
|
|
||||||
local cached_config = cached_config.ailment_buildups;
|
local cached_config = cached_config.ailment_buildups;
|
||||||
|
local cached_damage_meter_UI_config = config.current_config.damage_meter_UI;
|
||||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||||
|
|
||||||
if not cached_config.visibility then
|
if not cached_config.visibility then
|
||||||
return;
|
return;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
for id, ailment in pairs(monster.ailments) do
|
for id, ailment in pairs(monster.ailments) do
|
||||||
if id == ailments.stun_id then
|
if id == ailments.stun_id then
|
||||||
if not cached_config.filter.stun then
|
--if not cached_config.filter.stun then
|
||||||
goto continue
|
goto continue
|
||||||
end
|
--end
|
||||||
|
|
||||||
elseif id == ailments.poison_id then
|
elseif id == ailments.poison_id then
|
||||||
if not cached_config.filter.poison then
|
--if not cached_config.filter.poison then
|
||||||
goto continue
|
goto continue
|
||||||
end
|
--end
|
||||||
elseif id == ailments.blast_id then
|
elseif id == ailments.blast_id then
|
||||||
if not cached_config.filter.blast then
|
if not cached_config.filter.blast then
|
||||||
goto continue
|
goto continue
|
||||||
@@ -42,24 +44,81 @@ function ailment_buildup.draw(monster, ailment_buildup_UI, cached_config, ailmen
|
|||||||
goto continue
|
goto continue
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
local total_buildup = 0;
|
local total_buildup = 0;
|
||||||
local top_buildup = 0;
|
local top_buildup = 0;
|
||||||
|
|
||||||
local displayed_players = {};
|
local displayed_players = {};
|
||||||
for player_id, player_buildup in pairs(ailment.buildup) do
|
for player, player_buildup in pairs(ailment.buildup) do
|
||||||
total_buildup = total_buildup + player_buildup;
|
total_buildup = total_buildup + player_buildup;
|
||||||
|
|
||||||
if player_buildup > top_buildup then
|
if player_buildup > top_buildup then
|
||||||
top_buildup = player_buildup;
|
top_buildup = player_buildup;
|
||||||
end
|
end
|
||||||
|
|
||||||
table.insert(displayed_players,
|
displayed_players[player] = {
|
||||||
{
|
|
||||||
["buildup"] = player_buildup,
|
["buildup"] = player_buildup,
|
||||||
["buildup_share"] = ailment.buildup_share[player_id],
|
["buildup_share"] = ailment.buildup_share[player],
|
||||||
["id"] = player_id
|
["id"] = player.id
|
||||||
}
|
};
|
||||||
);
|
end
|
||||||
|
|
||||||
|
|
||||||
|
for otomo, otomo_buildup in pairs(ailment.otomo_buildup) do
|
||||||
|
total_buildup = total_buildup + otomo_buildup;
|
||||||
|
|
||||||
|
if otomo_buildup > top_buildup then
|
||||||
|
top_buildup = otomo_buildup;
|
||||||
|
end
|
||||||
|
|
||||||
|
local player = players.get_player(otomo.id);
|
||||||
|
local displayed_player = displayed_players[player];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if otomo.type == players.types.my_otomo then
|
||||||
|
|
||||||
|
if cached_damage_meter_UI_config.settings.show_my_otomos_separately then
|
||||||
|
displayed_players[otomo] = {
|
||||||
|
["buildup"] = otomo_buildup,
|
||||||
|
["buildup_share"] = ailment.otomo_buildup_share[otomo],
|
||||||
|
["id"] = otomo.id
|
||||||
|
};
|
||||||
|
|
||||||
|
elseif player ~= nil then
|
||||||
|
displayed_players[player].buildup = displayed_players[player].buildup + otomo_buildup;
|
||||||
|
displayed_players[player].buildup_share = displayed_players[player].buildup_share + ailment.otomo_buildup_share[otomo];
|
||||||
|
end
|
||||||
|
|
||||||
|
elseif otomo.type == players.types.other_player_otomo then
|
||||||
|
|
||||||
|
if cached_damage_meter_UI_config.settings.show_other_player_otomos_separately then
|
||||||
|
displayed_players[otomo] = {
|
||||||
|
["buildup"] = otomo_buildup,
|
||||||
|
["buildup_share"] = ailment.otomo_buildup_share[otomo],
|
||||||
|
["id"] = otomo.id
|
||||||
|
};
|
||||||
|
|
||||||
|
elseif player ~= nil then
|
||||||
|
displayed_players[player].buildup = displayed_players[player].buildup + otomo_buildup;
|
||||||
|
displayed_players[player].buildup_share = displayed_players[player].buildup_share + ailment.otomo_buildup_share[otomo];
|
||||||
|
end
|
||||||
|
|
||||||
|
elseif otomo.type == players.types.servant_otomo then
|
||||||
|
|
||||||
|
if cached_damage_meter_UI_config.settings.show_servant_otomos_separately then
|
||||||
|
|
||||||
|
displayed_players[otomo] = {
|
||||||
|
["buildup"] = otomo_buildup,
|
||||||
|
["buildup_share"] = ailment.otomo_buildup_share[otomo],
|
||||||
|
["id"] = otomo.id
|
||||||
|
};
|
||||||
|
|
||||||
|
elseif player ~= nil then
|
||||||
|
displayed_players[player].buildup = displayed_players[player].buildup + otomo_buildup;
|
||||||
|
displayed_players[player].buildup_share = displayed_players[player].buildup_share + ailment.otomo_buildup_share[otomo];
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if total_buildup == 0 then
|
if total_buildup == 0 then
|
||||||
@@ -98,6 +157,7 @@ function ailment_buildup.draw(monster, ailment_buildup_UI, cached_config, ailmen
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
local ailment_name = "";
|
local ailment_name = "";
|
||||||
if cached_config.ailment_name_label.include.ailment_name then
|
if cached_config.ailment_name_label.include.ailment_name then
|
||||||
ailment_name = ailment.name .. " ";
|
ailment_name = ailment.name .. " ";
|
||||||
@@ -108,20 +168,20 @@ function ailment_buildup.draw(monster, ailment_buildup_UI, cached_config, ailmen
|
|||||||
|
|
||||||
drawing.draw_label(ailment_buildup_UI.ailment_name_label, ailment_buildups_position_on_screen, opacity_scale, ailment_name);
|
drawing.draw_label(ailment_buildup_UI.ailment_name_label, ailment_buildups_position_on_screen, opacity_scale, ailment_name);
|
||||||
|
|
||||||
local last_j = 0;
|
local j = 0;
|
||||||
for j, player in ipairs(displayed_players) do
|
for player, displayed_player in pairs(displayed_players) do
|
||||||
local ailment_buildup_position_on_screen = {
|
local ailment_buildup_position_on_screen = {
|
||||||
x = ailment_buildups_position_on_screen.x + cached_config.player_spacing.x * (j - 1) * global_scale_modifier,
|
x = ailment_buildups_position_on_screen.x + cached_config.player_spacing.x * j * global_scale_modifier,
|
||||||
y = ailment_buildups_position_on_screen.y + cached_config.player_spacing.y * (j - 1) * global_scale_modifier;
|
y = ailment_buildups_position_on_screen.y + cached_config.player_spacing.y * j * global_scale_modifier;
|
||||||
};
|
};
|
||||||
|
|
||||||
ailment_buildup_UI_entity.draw(player, ailment_buildup_UI, cached_config, ailment_buildup_position_on_screen, opacity_scale, top_buildup);
|
ailment_buildup_UI_entity.draw(player, displayed_player, ailment_buildup_UI, cached_config, ailment_buildup_position_on_screen, opacity_scale, top_buildup);
|
||||||
last_j = j;
|
j = j + 1;
|
||||||
end
|
end
|
||||||
|
|
||||||
local total_buildup_position_on_screen = {
|
local total_buildup_position_on_screen = {
|
||||||
x = ailment_buildups_position_on_screen.x + cached_config.player_spacing.x * last_j * global_scale_modifier,
|
x = ailment_buildups_position_on_screen.x + cached_config.player_spacing.x * j * global_scale_modifier,
|
||||||
y = ailment_buildups_position_on_screen.y + cached_config.player_spacing.y * last_j * global_scale_modifier;
|
y = ailment_buildups_position_on_screen.y + cached_config.player_spacing.y * j * global_scale_modifier;
|
||||||
};
|
};
|
||||||
|
|
||||||
drawing.draw_label(ailment_buildup_UI.total_buildup_label, total_buildup_position_on_screen, opacity_scale, language.current_language.UI.total_buildup);
|
drawing.draw_label(ailment_buildup_UI.total_buildup_label, total_buildup_position_on_screen, opacity_scale, language.current_language.UI.total_buildup);
|
||||||
@@ -132,6 +192,7 @@ function ailment_buildup.draw(monster, ailment_buildup_UI, cached_config, ailmen
|
|||||||
y = total_buildup_position_on_screen.y + 17 + cached_config.ailment_spacing.y * global_scale_modifier
|
y = total_buildup_position_on_screen.y + 17 + cached_config.ailment_spacing.y * global_scale_modifier
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
::continue::
|
::continue::
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -50,8 +50,8 @@ function ailment_hook.poison_proc(poison_param)
|
|||||||
monster = small_monster.get_monster(enemy);
|
monster = small_monster.get_monster(enemy);
|
||||||
end
|
end
|
||||||
|
|
||||||
monster.ailments[ailments.poison_id].cached_buildup_share = table_helpers.deep_copy(monster.ailments[ailments
|
monster.ailments[ailments.poison_id].cached_buildup_share = table_helpers.deep_copy(monster.ailments[ailments.poison_id].buildup_share);
|
||||||
.poison_id].buildup_share);
|
monster.ailments[ailments.poison_id].cached_otomo_buildup_share = table_helpers.deep_copy(monster.ailments[ailments.poison_id].otomo_buildup_share);
|
||||||
ailments.clear_ailment_contribution(monster, ailments.poison_id);
|
ailments.clear_ailment_contribution(monster, ailments.poison_id);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ local time;
|
|||||||
local small_monster;
|
local small_monster;
|
||||||
local large_monster;
|
local large_monster;
|
||||||
local table_helpers;
|
local table_helpers;
|
||||||
|
local non_players;
|
||||||
|
|
||||||
--0 Paralyze
|
--0 Paralyze
|
||||||
--1 Sleep
|
--1 Sleep
|
||||||
@@ -50,68 +51,71 @@ ailments.fall_otomo_trap_id = 18;
|
|||||||
ailments.shock_otomo_trap_id = 19;
|
ailments.shock_otomo_trap_id = 19;
|
||||||
|
|
||||||
function ailments.new(_ailments, ailment_id)
|
function ailments.new(_ailments, ailment_id)
|
||||||
_ailments[ailment_id] = {};
|
local new_ailment = {}
|
||||||
|
new_ailment = {};
|
||||||
|
|
||||||
_ailments[ailment_id].is_enable = true;
|
new_ailment.is_enable = true;
|
||||||
_ailments[ailment_id].id = ailment_id;
|
new_ailment.id = ailment_id;
|
||||||
|
|
||||||
_ailments[ailment_id].total_buildup = 0;
|
new_ailment.total_buildup = 0;
|
||||||
_ailments[ailment_id].buildup_limit = 0;
|
new_ailment.buildup_limit = 0;
|
||||||
_ailments[ailment_id].buildup_percentage = 0;
|
new_ailment.buildup_percentage = 0;
|
||||||
|
|
||||||
_ailments[ailment_id].timer = 0;
|
new_ailment.timer = 0;
|
||||||
_ailments[ailment_id].duration = 100000;
|
new_ailment.duration = 100000;
|
||||||
_ailments[ailment_id].timer_percentage = 0;
|
new_ailment.timer_percentage = 0;
|
||||||
|
|
||||||
_ailments[ailment_id].minutes_left = 0;
|
new_ailment.minutes_left = 0;
|
||||||
_ailments[ailment_id].seconds_left = 0;
|
new_ailment.seconds_left = 0;
|
||||||
|
|
||||||
_ailments[ailment_id].is_active = false;
|
new_ailment.is_active = false;
|
||||||
_ailments[ailment_id].activate_count = 0;
|
new_ailment.activate_count = 0;
|
||||||
|
|
||||||
_ailments[ailment_id].last_change_time = time.total_elapsed_script_seconds;
|
new_ailment.last_change_time = time.total_elapsed_script_seconds;
|
||||||
|
|
||||||
if ailment_id == ailments.paralyze_id then
|
if ailment_id == ailments.paralyze_id then
|
||||||
_ailments[ailment_id].name = language.current_language.ailments.paralysis;
|
new_ailment.name = language.current_language.ailments.paralysis;
|
||||||
elseif ailment_id == ailments.sleep_id then
|
elseif ailment_id == ailments.sleep_id then
|
||||||
_ailments[ailment_id].name = language.current_language.ailments.sleep;
|
new_ailment.name = language.current_language.ailments.sleep;
|
||||||
elseif ailment_id == ailments.stun_id then
|
elseif ailment_id == ailments.stun_id then
|
||||||
_ailments[ailment_id].name = language.current_language.ailments.stun;
|
new_ailment.name = language.current_language.ailments.stun;
|
||||||
elseif ailment_id == ailments.flash_id then
|
elseif ailment_id == ailments.flash_id then
|
||||||
_ailments[ailment_id].name = language.current_language.ailments.flash;
|
new_ailment.name = language.current_language.ailments.flash;
|
||||||
elseif ailment_id == ailments.poison_id then
|
elseif ailment_id == ailments.poison_id then
|
||||||
_ailments[ailment_id].name = language.current_language.ailments.poison;
|
new_ailment.name = language.current_language.ailments.poison;
|
||||||
elseif ailment_id == ailments.blast_id then
|
elseif ailment_id == ailments.blast_id then
|
||||||
_ailments[ailment_id].name = language.current_language.ailments.blast;
|
new_ailment.name = language.current_language.ailments.blast;
|
||||||
elseif ailment_id == ailments.exhaust_id then
|
elseif ailment_id == ailments.exhaust_id then
|
||||||
_ailments[ailment_id].name = language.current_language.ailments.exhaust;
|
new_ailment.name = language.current_language.ailments.exhaust;
|
||||||
elseif ailment_id == ailments.ride_id then
|
elseif ailment_id == ailments.ride_id then
|
||||||
_ailments[ailment_id].name = language.current_language.ailments.ride;
|
new_ailment.name = language.current_language.ailments.ride;
|
||||||
elseif ailment_id == ailments.water_id then
|
elseif ailment_id == ailments.water_id then
|
||||||
_ailments[ailment_id].name = language.current_language.ailments.waterblight;
|
new_ailment.name = language.current_language.ailments.waterblight;
|
||||||
elseif ailment_id == ailments.fire_id then
|
elseif ailment_id == ailments.fire_id then
|
||||||
_ailments[ailment_id].name = language.current_language.ailments.fireblight;
|
new_ailment.name = language.current_language.ailments.fireblight;
|
||||||
elseif ailment_id == ailments.ice_id then
|
elseif ailment_id == ailments.ice_id then
|
||||||
_ailments[ailment_id].name = language.current_language.ailments.iceblight;
|
new_ailment.name = language.current_language.ailments.iceblight;
|
||||||
elseif ailment_id == ailments.thunder_id then
|
elseif ailment_id == ailments.thunder_id then
|
||||||
_ailments[ailment_id].name = language.current_language.ailments.thunderblight;
|
new_ailment.name = language.current_language.ailments.thunderblight;
|
||||||
elseif ailment_id == ailments.fall_trap_id then
|
elseif ailment_id == ailments.fall_trap_id then
|
||||||
_ailments[ailment_id].name = language.current_language.ailments.fall_trap;
|
new_ailment.name = language.current_language.ailments.fall_trap;
|
||||||
elseif ailment_id == ailments.shock_trap_id then
|
elseif ailment_id == ailments.shock_trap_id then
|
||||||
_ailments[ailment_id].name = language.current_language.ailments.shock_trap;
|
new_ailment.name = language.current_language.ailments.shock_trap;
|
||||||
elseif ailment_id == ailments.capture_id then
|
elseif ailment_id == ailments.capture_id then
|
||||||
_ailments[ailment_id].name = language.current_language.ailments.tranq_bomb;
|
new_ailment.name = language.current_language.ailments.tranq_bomb;
|
||||||
elseif ailment_id == ailments.koyashi_id then
|
elseif ailment_id == ailments.koyashi_id then
|
||||||
_ailments[ailment_id].name = language.current_language.ailments.dung_bomb;
|
new_ailment.name = language.current_language.ailments.dung_bomb;
|
||||||
elseif ailment_id == ailments.steel_fang_id then
|
elseif ailment_id == ailments.steel_fang_id then
|
||||||
_ailments[ailment_id].name = language.current_language.ailments.steel_fang;
|
new_ailment.name = language.current_language.ailments.steel_fang;
|
||||||
elseif ailment_id == ailments.fall_quick_sand_id then
|
elseif ailment_id == ailments.fall_quick_sand_id then
|
||||||
_ailments[ailment_id].name = language.current_language.ailments.quick_sand;
|
new_ailment.name = language.current_language.ailments.quick_sand;
|
||||||
elseif ailment_id == ailments.fall_otomo_trap_id then
|
elseif ailment_id == ailments.fall_otomo_trap_id then
|
||||||
_ailments[ailment_id].name = language.current_language.ailments.fall_otomo_trap;
|
new_ailment.name = language.current_language.ailments.fall_otomo_trap;
|
||||||
elseif ailment_id == ailments.shock_otomo_trap_id then
|
elseif ailment_id == ailments.shock_otomo_trap_id then
|
||||||
_ailments[ailment_id].name = language.current_language.ailments.shock_otomo_trap;
|
new_ailment.name = language.current_language.ailments.shock_otomo_trap;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
_ailments[ailment_id] = new_ailment;
|
||||||
end
|
end
|
||||||
|
|
||||||
function ailments.init_ailments()
|
function ailments.init_ailments()
|
||||||
@@ -149,9 +153,65 @@ function ailments.init_ailments()
|
|||||||
_ailments[ailments.stun_id].buildup = {};
|
_ailments[ailments.stun_id].buildup = {};
|
||||||
_ailments[ailments.stun_id].buildup_share = {};
|
_ailments[ailments.stun_id].buildup_share = {};
|
||||||
|
|
||||||
|
_ailments[ailments.poison_id].otomo_buildup = {};
|
||||||
|
_ailments[ailments.poison_id].otomo_buildup_share = {};
|
||||||
|
_ailments[ailments.poison_id].cached_otomo_buildup_share = {};
|
||||||
|
|
||||||
|
_ailments[ailments.blast_id].otomo_buildup = {};
|
||||||
|
_ailments[ailments.blast_id].otomo_buildup_share = {};
|
||||||
|
|
||||||
|
_ailments[ailments.stun_id].otomo_buildup = {};
|
||||||
|
_ailments[ailments.stun_id].otomo_buildup_share = {};
|
||||||
|
|
||||||
return _ailments;
|
return _ailments;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function ailments.init_ailment_names(_ailments)
|
||||||
|
for ailment_id, ailment in pairs(_ailments) do
|
||||||
|
if ailment_id == ailments.paralyze_id then
|
||||||
|
ailment.name = language.current_language.ailments.paralysis;
|
||||||
|
elseif ailment_id == ailments.sleep_id then
|
||||||
|
ailment.name = language.current_language.ailments.sleep;
|
||||||
|
elseif ailment_id == ailments.stun_id then
|
||||||
|
ailment.name = language.current_language.ailments.stun;
|
||||||
|
elseif ailment_id == ailments.flash_id then
|
||||||
|
ailment.name = language.current_language.ailments.flash;
|
||||||
|
elseif ailment_id == ailments.poison_id then
|
||||||
|
ailment.name = language.current_language.ailments.poison;
|
||||||
|
elseif ailment_id == ailments.blast_id then
|
||||||
|
ailment.name = language.current_language.ailments.blast;
|
||||||
|
elseif ailment_id == ailments.exhaust_id then
|
||||||
|
ailment.name = language.current_language.ailments.exhaust;
|
||||||
|
elseif ailment_id == ailments.ride_id then
|
||||||
|
ailment.name = language.current_language.ailments.ride;
|
||||||
|
elseif ailment_id == ailments.water_id then
|
||||||
|
ailment.name = language.current_language.ailments.waterblight;
|
||||||
|
elseif ailment_id == ailments.fire_id then
|
||||||
|
ailment.name = language.current_language.ailments.fireblight;
|
||||||
|
elseif ailment_id == ailments.ice_id then
|
||||||
|
ailment.name = language.current_language.ailments.iceblight;
|
||||||
|
elseif ailment_id == ailments.thunder_id then
|
||||||
|
ailment.name = language.current_language.ailments.thunderblight;
|
||||||
|
elseif ailment_id == ailments.fall_trap_id then
|
||||||
|
ailment.name = language.current_language.ailments.fall_trap;
|
||||||
|
elseif ailment_id == ailments.shock_trap_id then
|
||||||
|
ailment.name = language.current_language.ailments.shock_trap;
|
||||||
|
elseif ailment_id == ailments.capture_id then
|
||||||
|
ailment.name = language.current_language.ailments.tranq_bomb;
|
||||||
|
elseif ailment_id == ailments.koyashi_id then
|
||||||
|
ailment.name = language.current_language.ailments.dung_bomb;
|
||||||
|
elseif ailment_id == ailments.steel_fang_id then
|
||||||
|
ailment.name = language.current_language.ailments.steel_fang;
|
||||||
|
elseif ailment_id == ailments.fall_quick_sand_id then
|
||||||
|
ailment.name = language.current_language.ailments.quick_sand;
|
||||||
|
elseif ailment_id == ailments.fall_otomo_trap_id then
|
||||||
|
ailment.name = language.current_language.ailments.fall_otomo_trap;
|
||||||
|
elseif ailment_id == ailments.shock_otomo_trap_id then
|
||||||
|
ailment.name = language.current_language.ailments.shock_otomo_trap;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
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_condition_damage_param_base_type_def = sdk.find_type_definition("snow.enemy.EnemyConditionDamageParamBase");
|
local enemy_condition_damage_param_base_type_def = sdk.find_type_definition("snow.enemy.EnemyConditionDamageParamBase");
|
||||||
|
|
||||||
@@ -593,14 +653,11 @@ function ailments.draw(monster, ailment_UI, cached_config, ailments_position_on_
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function ailments.apply_ailment_buildup(monster, attacker_id, ailment_type, ailment_buildup)
|
function ailments.apply_ailment_buildup(monster, player, otomo, ailment_type, ailment_buildup)
|
||||||
|
|
||||||
if monster == nil or
|
if monster == nil or
|
||||||
(ailment_type ~= ailments.poison_id and ailment_type ~= ailments.blast_id and ailment_type ~= ailments.stun_id) then
|
(ailment_type ~= ailments.poison_id and ailment_type ~= ailments.blast_id and ailment_type ~= ailments.stun_id)
|
||||||
return;
|
or (ailment_buildup == 0 or ailment_buildup == nil) then
|
||||||
end
|
|
||||||
|
|
||||||
if ailment_buildup == 0 or ailment_buildup == nil then
|
|
||||||
return;
|
return;
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -609,8 +666,17 @@ function ailments.apply_ailment_buildup(monster, attacker_id, ailment_type, ailm
|
|||||||
monster.ailments[ailment_type].buildup = {};
|
monster.ailments[ailment_type].buildup = {};
|
||||||
end
|
end
|
||||||
|
|
||||||
-- accumulate this buildup for this attacker
|
-- get the otomo buildup accumulator for this type
|
||||||
monster.ailments[ailment_type].buildup[attacker_id] = (monster.ailments[ailment_type].buildup[attacker_id] or 0) + ailment_buildup;
|
if monster.ailments[ailment_type].otomo_buildup == nil then
|
||||||
|
monster.ailments[ailment_type].otomo_buildup = {};
|
||||||
|
end
|
||||||
|
|
||||||
|
if otomo == nil then
|
||||||
|
monster.ailments[ailment_type].buildup[player] = (monster.ailments[ailment_type].buildup[player] or 0) + ailment_buildup;
|
||||||
|
else
|
||||||
|
monster.ailments[ailment_type].otomo_buildup[otomo] = (monster.ailments[ailment_type].otomo_buildup[otomo] or 0) + ailment_buildup;
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
ailments.calculate_ailment_contribution(monster, ailment_type);
|
ailments.calculate_ailment_contribution(monster, ailment_type);
|
||||||
end
|
end
|
||||||
@@ -619,20 +685,34 @@ end
|
|||||||
function ailments.calculate_ailment_contribution(monster, ailment_type)
|
function ailments.calculate_ailment_contribution(monster, ailment_type)
|
||||||
-- get total
|
-- get total
|
||||||
local total = 0;
|
local total = 0;
|
||||||
for attacker_id, player_buildup in pairs(monster.ailments[ailment_type].buildup) do
|
for player, player_buildup in pairs(monster.ailments[ailment_type].buildup) do
|
||||||
total = total + player_buildup;
|
total = total + player_buildup;
|
||||||
end
|
end
|
||||||
|
|
||||||
for attacker_id, player_buildup in pairs(monster.ailments[ailment_type].buildup) do
|
for otomo, otomo_buildup in pairs(monster.ailments[ailment_type].otomo_buildup) do
|
||||||
-- update ratio for this attacker
|
total = total + otomo_buildup;
|
||||||
monster.ailments[ailment_type].buildup_share[attacker_id] = player_buildup / total;
|
end
|
||||||
|
|
||||||
|
for player, player_buildup in pairs(monster.ailments[ailment_type].buildup) do
|
||||||
|
-- update ratio for this player
|
||||||
|
monster.ailments[ailment_type].buildup_share[player] = player_buildup / total;
|
||||||
|
end
|
||||||
|
|
||||||
|
for otomo, otomo_buildup in pairs(monster.ailments[ailment_type].otomo_buildup) do
|
||||||
|
-- update ratio for this otomo
|
||||||
|
monster.ailments[ailment_type].otomo_buildup_share[otomo] = otomo_buildup / total;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function ailments.clear_ailment_contribution(monster, ailment_type)
|
function ailments.clear_ailment_contribution(monster, ailment_type)
|
||||||
for attacker_id, player_buildup in pairs(monster.ailments[ailment_type].buildup) do
|
for player, player_buildup in pairs(monster.ailments[ailment_type].buildup) do
|
||||||
monster.ailments[ailment_type].buildup_share[attacker_id] = 0;
|
monster.ailments[ailment_type].buildup_share[player] = 0;
|
||||||
monster.ailments[ailment_type].buildup[attacker_id] = 0;
|
monster.ailments[ailment_type].buildup[player] = 0;
|
||||||
|
end
|
||||||
|
|
||||||
|
for aotomo, otomo_buildup in pairs(monster.ailments[ailment_type].otomo_buildup) do
|
||||||
|
monster.ailments[ailment_type].otomo_buildup_share[aotomo] = 0;
|
||||||
|
monster.ailments[ailment_type].otomo_buildup[aotomo] = 0;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -644,18 +724,25 @@ function ailments.apply_ailment_damage(monster, ailment_type, ailment_damage)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local damage_source_type = "";
|
local damage_source_type = "";
|
||||||
|
local otomo_damage_source_type = "";
|
||||||
local buildup_share = monster.ailments[ailment_type].buildup_share;
|
local buildup_share = monster.ailments[ailment_type].buildup_share;
|
||||||
|
local otomo_buildup_share = monster.ailments[ailment_type].otomo_buildup_share;
|
||||||
|
|
||||||
if ailment_type == ailments.poison_id then
|
if ailment_type == ailments.poison_id then
|
||||||
damage_source_type = "poison";
|
damage_source_type = "poison";
|
||||||
|
otomo_damage_source_type = "otomo poison";
|
||||||
buildup_share = monster.ailments[ailment_type].cached_buildup_share;
|
buildup_share = monster.ailments[ailment_type].cached_buildup_share;
|
||||||
|
otomo_buildup_share = monster.ailments[ailment_type].cached_otomo_buildup_share;
|
||||||
|
|
||||||
elseif ailment_type == ailments.blast_id then
|
elseif ailment_type == ailments.blast_id then
|
||||||
damage_source_type = "blast";
|
damage_source_type = "blast";
|
||||||
|
otomo_damage_source_type = "otomo blast";
|
||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
end
|
end
|
||||||
|
|
||||||
-- split up damage according to ratio of buildup on boss for this type
|
-- split up damage according to ratio of buildup on boss for this type
|
||||||
for attacker_id, percentage in pairs(buildup_share) do
|
for player, percentage in pairs(buildup_share) do
|
||||||
local damage_portion = ailment_damage * percentage;
|
local damage_portion = ailment_damage * percentage;
|
||||||
|
|
||||||
local damage_object = {};
|
local damage_object = {};
|
||||||
@@ -664,11 +751,26 @@ function ailments.apply_ailment_damage(monster, ailment_type, ailment_damage)
|
|||||||
damage_object.elemental_damage = 0;
|
damage_object.elemental_damage = 0;
|
||||||
damage_object.ailment_damage = damage_portion;
|
damage_object.ailment_damage = damage_portion;
|
||||||
|
|
||||||
local attacking_player = players.get_player(attacker_id);
|
players.update_damage(player, damage_source_type, true, damage_object);
|
||||||
|
|
||||||
if attacking_player ~= nil then
|
|
||||||
players.update_damage(attacking_player, damage_source_type, true, damage_object);
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- split up damage according to ratio of buildup on boss for this type
|
||||||
|
for otomo, percentage in pairs(otomo_buildup_share) do
|
||||||
|
local damage_portion = ailment_damage * percentage;
|
||||||
|
|
||||||
|
local damage_object = {};
|
||||||
|
damage_object.total_damage = damage_portion;
|
||||||
|
damage_object.physical_damage = 0;
|
||||||
|
damage_object.elemental_damage = 0;
|
||||||
|
damage_object.ailment_damage = damage_portion;
|
||||||
|
|
||||||
|
local player = players.get_player(otomo.id);
|
||||||
|
|
||||||
|
if player ~= nil then
|
||||||
|
players.update_damage(player, otomo_damage_source_type, true, damage_object);
|
||||||
|
end
|
||||||
|
|
||||||
|
players.update_damage(otomo, otomo_damage_source_type, true, damage_object);
|
||||||
end
|
end
|
||||||
|
|
||||||
local damage_object = {};
|
local damage_object = {};
|
||||||
@@ -682,6 +784,7 @@ end
|
|||||||
|
|
||||||
function ailments.init_module()
|
function ailments.init_module()
|
||||||
players = require("MHR_Overlay.Damage_Meter.players");
|
players = require("MHR_Overlay.Damage_Meter.players");
|
||||||
|
non_players = require("MHR_Overlay.Damage_Meter.non_players");
|
||||||
language = require("MHR_Overlay.Misc.language");
|
language = require("MHR_Overlay.Misc.language");
|
||||||
config = require("MHR_Overlay.Misc.config");
|
config = require("MHR_Overlay.Misc.config");
|
||||||
ailment_UI_entity = require("MHR_Overlay.UI.UI_Entities.ailment_UI_entity");
|
ailment_UI_entity = require("MHR_Overlay.UI.UI_Entities.ailment_UI_entity");
|
||||||
|
|||||||
@@ -303,6 +303,8 @@ function large_monster.init_UI(monster, monster_UI, cached_config)
|
|||||||
cached_config.ailment_buildups.total_buildup_label,
|
cached_config.ailment_buildups.total_buildup_label,
|
||||||
cached_config.ailment_buildups.total_buildup_value_label
|
cached_config.ailment_buildups.total_buildup_value_label
|
||||||
);
|
);
|
||||||
|
|
||||||
|
ailments.init_ailment_names(monster.ailments);
|
||||||
end
|
end
|
||||||
|
|
||||||
local physical_param_field = enemy_character_base_type_def:get_field("<PhysicalParam>k__BackingField");
|
local physical_param_field = enemy_character_base_type_def:get_field("<PhysicalParam>k__BackingField");
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ local bar_customization;
|
|||||||
function ailment_buildups_customization.draw(cached_config)
|
function ailment_buildups_customization.draw(cached_config)
|
||||||
local changed = false;
|
local changed = false;
|
||||||
local config_changed = false;
|
local config_changed = false;
|
||||||
|
local index = 1;
|
||||||
|
|
||||||
if imgui.tree_node(language.current_language.customization_menu.ailment_buildups) then
|
if imgui.tree_node(language.current_language.customization_menu.ailment_buildups) then
|
||||||
changed, cached_config.visibility = imgui.checkbox(
|
changed, cached_config.visibility = imgui.checkbox(
|
||||||
@@ -137,91 +138,9 @@ function ailment_buildups_customization.draw(cached_config)
|
|||||||
imgui.tree_pop();
|
imgui.tree_pop();
|
||||||
end
|
end
|
||||||
|
|
||||||
if imgui.tree_node(language.current_language.customization_menu.ailment_name_label) then
|
changed = label_customization.draw(language.current_language.customization_menu.ailment_name_label, cached_config.ailment_name_label);
|
||||||
changed, cached_config.ailment_name_label.visibility =
|
|
||||||
imgui.checkbox(language.current_language.customization_menu.visible,
|
|
||||||
cached_config.ailment_name_label.visibility);
|
|
||||||
|
|
||||||
config_changed = config_changed or changed;
|
config_changed = config_changed or changed;
|
||||||
|
|
||||||
if imgui.tree_node(language.current_language.customization_menu.include) then
|
|
||||||
changed, cached_config.ailment_name_label.include.ailment_name = imgui.checkbox(
|
|
||||||
language.current_language.customization_menu.ailment_name,
|
|
||||||
cached_config.ailment_name_label.include.ailment_name);
|
|
||||||
|
|
||||||
config_changed = config_changed or changed;
|
|
||||||
|
|
||||||
changed, cached_config.ailment_name_label.include.activation_count = imgui.checkbox(
|
|
||||||
language.current_language.customization_menu.activation_count,
|
|
||||||
cached_config.ailment_name_label.include.activation_count);
|
|
||||||
|
|
||||||
config_changed = config_changed or changed;
|
|
||||||
|
|
||||||
imgui.tree_pop();
|
|
||||||
end
|
|
||||||
|
|
||||||
if imgui.tree_node(language.current_language.customization_menu.offset) then
|
|
||||||
changed, cached_config.ailment_name_label.offset.x = imgui.drag_float(
|
|
||||||
language.current_language.customization_menu.x, cached_config.ailment_name_label.offset.x,
|
|
||||||
0.1, -screen.width, screen.width, "%.1f");
|
|
||||||
|
|
||||||
config_changed = config_changed or changed;
|
|
||||||
|
|
||||||
changed, cached_config.ailment_name_label.offset.y = imgui.drag_float(
|
|
||||||
language.current_language.customization_menu.y, cached_config.ailment_name_label.offset.y,
|
|
||||||
0.1, -screen.height, screen.height, "%.1f");
|
|
||||||
|
|
||||||
config_changed = config_changed or changed;
|
|
||||||
|
|
||||||
imgui.tree_pop();
|
|
||||||
end
|
|
||||||
|
|
||||||
if imgui.tree_node(language.current_language.customization_menu.color) then
|
|
||||||
changed, cached_config.ailment_name_label.color = imgui.color_picker_argb(
|
|
||||||
"", cached_config.ailment_name_label.color, customization_menu.color_picker_flags);
|
|
||||||
|
|
||||||
config_changed = config_changed or changed;
|
|
||||||
|
|
||||||
imgui.tree_pop();
|
|
||||||
end
|
|
||||||
|
|
||||||
if imgui.tree_node(language.current_language.customization_menu.shadow) then
|
|
||||||
changed, cached_config.ailment_name_label.shadow.visibility = imgui.checkbox(
|
|
||||||
language.current_language.customization_menu.visible, cached_config.ailment_name_label.shadow.visibility);
|
|
||||||
|
|
||||||
config_changed = config_changed or changed;
|
|
||||||
|
|
||||||
if imgui.tree_node(language.current_language.customization_menu.offset) then
|
|
||||||
changed, cached_config.ailment_name_label.shadow.offset.x = imgui.drag_float(
|
|
||||||
language.current_language.customization_menu.x, cached_config.ailment_name_label.shadow.offset.x,
|
|
||||||
0.1, -screen.width, screen.width, "%.1f");
|
|
||||||
|
|
||||||
config_changed = config_changed or changed;
|
|
||||||
|
|
||||||
changed, cached_config.ailment_name_label.shadow.offset.y = imgui.drag_float(
|
|
||||||
language.current_language.customization_menu.y, cached_config.ailment_name_label.shadow.offset.y,
|
|
||||||
0.1, -screen.height, screen.height, "%.1f");
|
|
||||||
|
|
||||||
config_changed = config_changed or changed;
|
|
||||||
|
|
||||||
imgui.tree_pop();
|
|
||||||
end
|
|
||||||
|
|
||||||
if imgui.tree_node(language.current_language.customization_menu.color) then
|
|
||||||
changed, cached_config.ailment_name_label.shadow.color = imgui.color_picker_argb(
|
|
||||||
"", cached_config.ailment_name_label.shadow.color, customization_menu.color_picker_flags);
|
|
||||||
|
|
||||||
config_changed = config_changed or changed;
|
|
||||||
|
|
||||||
imgui.tree_pop();
|
|
||||||
end
|
|
||||||
|
|
||||||
imgui.tree_pop();
|
|
||||||
end
|
|
||||||
|
|
||||||
imgui.tree_pop();
|
|
||||||
end
|
|
||||||
|
|
||||||
changed = label_customization.draw(language.current_language.customization_menu.player_name_label, cached_config.player_name_label);
|
changed = label_customization.draw(language.current_language.customization_menu.player_name_label, cached_config.player_name_label);
|
||||||
config_changed = config_changed or changed;
|
config_changed = config_changed or changed;
|
||||||
|
|
||||||
|
|||||||
@@ -99,6 +99,18 @@ function damage_meter_UI.draw()
|
|||||||
if cached_config.settings.hide_other_players then
|
if cached_config.settings.hide_other_players then
|
||||||
goto continue
|
goto continue
|
||||||
end
|
end
|
||||||
|
elseif player.type == players.types.my_otomo then
|
||||||
|
if not cached_config.settings.show_my_otomos_separately then
|
||||||
|
goto continue
|
||||||
|
end
|
||||||
|
elseif player.type == players.types.other_player_otomo then
|
||||||
|
if not cached_config.settings.show_other_player_otomos_separately then
|
||||||
|
goto continue
|
||||||
|
end
|
||||||
|
elseif player.type == players.types.servant_otomo then
|
||||||
|
if not cached_config.settings.show_servant_otomos_separately then
|
||||||
|
goto continue
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
players.draw(player, position_on_screen, 1, top_damage, top_dps);
|
players.draw(player, position_on_screen, 1, top_damage, top_dps);
|
||||||
|
|||||||
@@ -55,34 +55,33 @@ function ailment_buildup_UI_entity.new(buildup_bar, highlighted_buildup_bar, ail
|
|||||||
return entity;
|
return entity;
|
||||||
end
|
end
|
||||||
|
|
||||||
function ailment_buildup_UI_entity.draw(_player_buildup, ailment_buildup_UI, cached_config, position_on_screen, opacity_scale, top_buildup)
|
function ailment_buildup_UI_entity.draw(player, player_buildup, ailment_buildup_UI, cached_config, position_on_screen, opacity_scale, top_buildup)
|
||||||
local player_buildup_bar_percentage = 0;
|
local player_buildup_bar_percentage = 0;
|
||||||
|
|
||||||
if cached_config.settings.buildup_bar_relative_to == "Total Buildup" then
|
if cached_config.settings.buildup_bar_relative_to == "Total Buildup" then
|
||||||
player_buildup_bar_percentage = _player_buildup.buildup_share;
|
player_buildup_bar_percentage = player_buildup.buildup_share;
|
||||||
else
|
else
|
||||||
if top_buildup ~= 0 then
|
if top_buildup ~= 0 then
|
||||||
player_buildup_bar_percentage = _player_buildup.buildup / top_buildup;
|
player_buildup_bar_percentage = player_buildup.buildup / top_buildup;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if _player_buildup.id == players.myself.id and cached_config.settings.highlighted_bar == "Me" then
|
if player.type == players.types.myself and cached_config.settings.highlighted_bar == "Me" then
|
||||||
drawing.draw_bar(ailment_buildup_UI.highlighted_buildup_bar, position_on_screen, opacity_scale, player_buildup_bar_percentage);
|
drawing.draw_bar(ailment_buildup_UI.highlighted_buildup_bar, position_on_screen, opacity_scale, player_buildup_bar_percentage);
|
||||||
elseif cached_config.settings.highlighted_bar == "Top Buildup" and _player_buildup.buildup == top_buildup then
|
elseif cached_config.settings.highlighted_bar == "Top Buildup" and player_buildup.buildup == top_buildup then
|
||||||
drawing.draw_bar(ailment_buildup_UI.highlighted_buildup_bar, position_on_screen, opacity_scale, player_buildup_bar_percentage);
|
drawing.draw_bar(ailment_buildup_UI.highlighted_buildup_bar, position_on_screen, opacity_scale, player_buildup_bar_percentage);
|
||||||
else
|
else
|
||||||
drawing.draw_bar(ailment_buildup_UI.buildup_bar, position_on_screen, opacity_scale, player_buildup_bar_percentage);
|
drawing.draw_bar(ailment_buildup_UI.buildup_bar, position_on_screen, opacity_scale, player_buildup_bar_percentage);
|
||||||
end
|
end
|
||||||
|
|
||||||
local player = players.get_player(_player_buildup.id);
|
local player_name = tostring(player_buildup.id);
|
||||||
local player_name = "Player " .. tostring(_player_buildup.id);
|
|
||||||
if player ~= nil then
|
if player ~= nil then
|
||||||
player_name = player.name;
|
player_name = player.name;
|
||||||
end
|
end
|
||||||
|
|
||||||
drawing.draw_label(ailment_buildup_UI.player_name_label, position_on_screen, opacity_scale, player_name);
|
drawing.draw_label(ailment_buildup_UI.player_name_label, position_on_screen, opacity_scale, player_name);
|
||||||
drawing.draw_label(ailment_buildup_UI.buildup_value_label, position_on_screen, opacity_scale, _player_buildup.buildup);
|
drawing.draw_label(ailment_buildup_UI.buildup_value_label, position_on_screen, opacity_scale, player_buildup.buildup);
|
||||||
drawing.draw_label(ailment_buildup_UI.buildup_percentage_label, position_on_screen, opacity_scale, 100 * _player_buildup.buildup_share);
|
drawing.draw_label(ailment_buildup_UI.buildup_percentage_label, position_on_screen, opacity_scale, 100 * player_buildup.buildup_share);
|
||||||
end
|
end
|
||||||
|
|
||||||
function ailment_buildup_UI_entity.init_module()
|
function ailment_buildup_UI_entity.init_module()
|
||||||
|
|||||||
@@ -10,8 +10,6 @@ local non_players;
|
|||||||
function damage_UI_entity.new(damage_meter_UI_elements, type)
|
function damage_UI_entity.new(damage_meter_UI_elements, type)
|
||||||
local entity = {};
|
local entity = {};
|
||||||
|
|
||||||
local cached_config = config.current_config.damage_meter_UI;
|
|
||||||
|
|
||||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||||
|
|
||||||
entity.bar = table_helpers.deep_copy(damage_meter_UI_elements.damage_bar);
|
entity.bar = table_helpers.deep_copy(damage_meter_UI_elements.damage_bar);
|
||||||
@@ -182,7 +180,6 @@ function damage_UI_entity.draw(player, position_on_screen, opacity_scale, top_da
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
drawing.draw_bar(bar, position_on_screen, opacity_scale, player_damage_bar_percentage);
|
drawing.draw_bar(bar, position_on_screen, opacity_scale, player_damage_bar_percentage);
|
||||||
|
|
||||||
name_text = drawing.limit_text_size(name_text, player.damage_UI.player_name_size_limit);
|
name_text = drawing.limit_text_size(name_text, player.damage_UI.player_name_size_limit);
|
||||||
@@ -194,8 +191,13 @@ function damage_UI_entity.draw(player, position_on_screen, opacity_scale, top_da
|
|||||||
drawing.draw_label(dps_label, position_on_screen, opacity_scale, player.dps);
|
drawing.draw_label(dps_label, position_on_screen, opacity_scale, player.dps);
|
||||||
|
|
||||||
if is_on_quest then
|
if is_on_quest then
|
||||||
|
if player.type == players.types.total then
|
||||||
|
drawing.draw_label(player.damage_UI.cart_count_label, position_on_screen, opacity_scale, quest_status.cart_count, quest_status.max_cart_count);
|
||||||
|
else
|
||||||
drawing.draw_label(player.damage_UI.cart_count_label, position_on_screen, opacity_scale, player.cart_count);
|
drawing.draw_label(player.damage_UI.cart_count_label, position_on_screen, opacity_scale, player.cart_count);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function damage_UI_entity.init_module()
|
function damage_UI_entity.init_module()
|
||||||
|
|||||||
@@ -103,6 +103,8 @@ customization_menu.damage_meter_UI_waiting_for_key = false;
|
|||||||
customization_menu.endemic_life_UI_waiting_for_key = false;
|
customization_menu.endemic_life_UI_waiting_for_key = false;
|
||||||
customization_menu.menu_font_changed = false;
|
customization_menu.menu_font_changed = false;
|
||||||
|
|
||||||
|
customization_menu.config_name_input = "";
|
||||||
|
|
||||||
function customization_menu.reload_font(pop_push)
|
function customization_menu.reload_font(pop_push)
|
||||||
customization_menu.font = imgui.load_font(language.current_language.font_name,
|
customization_menu.font = imgui.load_font(language.current_language.font_name,
|
||||||
config.current_config.global_settings.menu_font.size, customization_menu.font_range);
|
config.current_config.global_settings.menu_font.size, customization_menu.font_range);
|
||||||
@@ -261,6 +263,8 @@ function customization_menu.draw()
|
|||||||
|
|
||||||
imgui.push_font(customization_menu.font);
|
imgui.push_font(customization_menu.font);
|
||||||
|
|
||||||
|
local config_changed = false;
|
||||||
|
local language_changed = false;
|
||||||
local modifiers_changed = false;
|
local modifiers_changed = false;
|
||||||
local modules_changed = false;
|
local modules_changed = false;
|
||||||
local global_settings_changed = false;
|
local global_settings_changed = false;
|
||||||
@@ -277,8 +281,215 @@ function customization_menu.draw()
|
|||||||
|
|
||||||
imgui.text(language.current_language.customization_menu.status .. ": " .. status_string);
|
imgui.text(language.current_language.customization_menu.status .. ": " .. status_string);
|
||||||
|
|
||||||
|
config_changed, apply_font_requested = customization_menu.draw_config();
|
||||||
modules_changed = customization_menu.draw_modules();
|
modules_changed = customization_menu.draw_modules();
|
||||||
|
customization_menu.draw_hotkeys();
|
||||||
|
global_settings_changed, modifiers_changed, apply_font_requested, language_changed = customization_menu.draw_global_settings(apply_font_requested, config_changed);
|
||||||
|
small_monster_UI_changed = customization_menu.draw_small_monster_UI();
|
||||||
|
|
||||||
|
if imgui.tree_node(language.current_language.customization_menu.large_monster_UI) then
|
||||||
|
large_monster_dynamic_UI_changed = customization_menu.draw_large_monster_dynamic_UI()
|
||||||
|
large_monster_static_UI_changed = customization_menu.draw_large_monster_static_UI()
|
||||||
|
large_monster_highlighted_UI_changed = customization_menu.draw_large_monster_highlighted_UI()
|
||||||
|
imgui.tree_pop();
|
||||||
|
end
|
||||||
|
|
||||||
|
time_UI_changed = customization_menu.draw_time_UI();
|
||||||
|
damage_meter_UI_changed = customization_menu.draw_damage_meter_UI();
|
||||||
|
endemic_life_UI_changed = customization_menu.draw_endemic_life_UI()
|
||||||
|
|
||||||
|
imgui.pop_font();
|
||||||
|
imgui.end_window();
|
||||||
|
|
||||||
|
if small_monster_UI_changed or modifiers_changed or config_changed then
|
||||||
|
for _, monster in pairs(small_monster.list) do
|
||||||
|
small_monster.init_UI(monster);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if large_monster_dynamic_UI_changed or modifiers_changed or config_changed then
|
||||||
|
for _, monster in pairs(large_monster.list) do
|
||||||
|
large_monster.init_UI(monster, monster.dynamic_UI, config.current_config.large_monster_UI.dynamic);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if large_monster_static_UI_changed or modifiers_changed or config_changed then
|
||||||
|
for _, monster in pairs(large_monster.list) do
|
||||||
|
large_monster.init_UI(monster, monster.static_UI, config.current_config.large_monster_UI.static);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if large_monster_highlighted_UI_changed or modifiers_changed or config_changed then
|
||||||
|
for _, monster in pairs(large_monster.list) do
|
||||||
|
large_monster.init_UI(monster, monster.highlighted_UI, config.current_config.large_monster_UI.highlighted);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if time_UI_changed or modifiers_changed or config_changed then
|
||||||
|
time_UI.init_UI();
|
||||||
|
end
|
||||||
|
|
||||||
|
if damage_meter_UI_changed or modifiers_changed or config_changed then
|
||||||
|
|
||||||
|
for _, player in pairs(players.list) do
|
||||||
|
players.init_UI(player);
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
for _, servant in pairs(non_players.servant_list) do
|
||||||
|
non_players.init_UI(servant);
|
||||||
|
end
|
||||||
|
|
||||||
|
for _, otomo in pairs(non_players.otomo_list) do
|
||||||
|
non_players.init_UI(otomo);
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
players.init_UI(players.total);
|
||||||
|
players.init_highlighted_UI();
|
||||||
|
end
|
||||||
|
|
||||||
|
if endemic_life_UI_changed or modifiers_changed or config_changed then
|
||||||
|
for _, creature in pairs(env_creature.list) do
|
||||||
|
env_creature.init_UI(creature);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if customization_menu.menu_font_changed and (apply_font_requested or config_changed) then
|
||||||
|
customization_menu.menu_font_changed = false;
|
||||||
|
customization_menu.reload_font(false);
|
||||||
|
end
|
||||||
|
|
||||||
|
if modules_changed or global_settings_changed or small_monster_UI_changed or large_monster_dynamic_UI_changed or
|
||||||
|
large_monster_static_UI_changed or large_monster_highlighted_UI_changed or time_UI_changed or damage_meter_UI_changed or
|
||||||
|
endemic_life_UI_changed or modifiers_changed or config_changed then
|
||||||
|
config.save_current();
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function customization_menu.draw_config()
|
||||||
|
local index = 1;
|
||||||
|
local changed = false;
|
||||||
|
local config_changed = false;
|
||||||
|
local apply_font_requested = false;
|
||||||
|
|
||||||
|
if imgui.tree_node(language.current_language.customization_menu.config) then
|
||||||
|
|
||||||
|
changed, index = imgui.combo(language.current_language.customization_menu.config,
|
||||||
|
table_helpers.find_index(config.config_names, config.current_config_name), config.config_names);
|
||||||
|
config_changed = config_changed or changed;
|
||||||
|
|
||||||
|
if changed then
|
||||||
|
config.current_config_name = config.config_names[index];
|
||||||
|
config.update(index);
|
||||||
|
|
||||||
|
language.update(table_helpers.find_index(language.language_names, config.current_config.global_settings.language, false));
|
||||||
|
|
||||||
|
customization_menu.init();
|
||||||
|
|
||||||
|
customization_menu.menu_font_changed = true;
|
||||||
|
apply_font_requested = true;
|
||||||
|
end
|
||||||
|
|
||||||
|
changed, customization_menu.config_name_input = imgui.input_text(language.current_language.customization_menu.config_name, customization_menu.config_name_input);
|
||||||
|
|
||||||
|
changed = imgui.button(language.current_language.customization_menu.new);
|
||||||
|
if changed then
|
||||||
|
if customization_menu.config_name_input ~= "" then
|
||||||
|
config.new(customization_menu.config_name_input);
|
||||||
|
config_changed = config_changed or changed;
|
||||||
|
|
||||||
|
language.update(table_helpers.find_index(language.language_names, config.current_config.global_settings.language, false));
|
||||||
|
|
||||||
|
customization_menu.init();
|
||||||
|
|
||||||
|
customization_menu.menu_font_changed = true;
|
||||||
|
apply_font_requested = true;
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
imgui.same_line();
|
||||||
|
|
||||||
|
changed = imgui.button(language.current_language.customization_menu.duplicate);
|
||||||
|
if changed then
|
||||||
|
if customization_menu.config_name_input ~= "" then
|
||||||
|
config.duplicate(customization_menu.config_name_input);
|
||||||
|
config_changed = config_changed or changed;
|
||||||
|
|
||||||
|
language.update(table_helpers.find_index(language.language_names, config.current_config.global_settings.language, false));
|
||||||
|
|
||||||
|
customization_menu.init();
|
||||||
|
|
||||||
|
customization_menu.menu_font_changed = true;
|
||||||
|
apply_font_requested = true;
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
imgui.same_line();
|
||||||
|
|
||||||
|
changed = imgui.button(language.current_language.customization_menu.reset);
|
||||||
|
config_changed = config_changed or changed;
|
||||||
|
if changed then
|
||||||
|
config.reset();
|
||||||
|
|
||||||
|
language.update(table_helpers.find_index(language.language_names, config.current_config.global_settings.language, false));
|
||||||
|
|
||||||
|
customization_menu.init();
|
||||||
|
|
||||||
|
customization_menu.menu_font_changed = true;
|
||||||
|
apply_font_requested = true;
|
||||||
|
end
|
||||||
|
|
||||||
|
imgui.tree_pop();
|
||||||
|
end
|
||||||
|
|
||||||
|
return config_changed, apply_font_requested;
|
||||||
|
end
|
||||||
|
|
||||||
|
function customization_menu.draw_modules()
|
||||||
|
local changed = false;
|
||||||
|
local config_changed = false;
|
||||||
|
|
||||||
|
if imgui.tree_node(language.current_language.customization_menu.modules) then
|
||||||
|
changed, config.current_config.small_monster_UI.enabled = imgui.checkbox(
|
||||||
|
language.current_language.customization_menu.small_monster_UI, config.current_config.small_monster_UI.enabled);
|
||||||
|
config_changed = config_changed or changed;
|
||||||
|
|
||||||
|
changed, config.current_config.large_monster_UI.dynamic.enabled =
|
||||||
|
imgui.checkbox(language.current_language.customization_menu.large_monster_dynamic_UI,
|
||||||
|
config.current_config.large_monster_UI.dynamic.enabled);
|
||||||
|
config_changed = config_changed or changed;
|
||||||
|
|
||||||
|
changed, config.current_config.large_monster_UI.static.enabled =
|
||||||
|
imgui.checkbox(language.current_language.customization_menu.large_monster_static_UI,
|
||||||
|
config.current_config.large_monster_UI.static.enabled);
|
||||||
|
config_changed = config_changed or changed;
|
||||||
|
|
||||||
|
changed, config.current_config.large_monster_UI.highlighted.enabled =
|
||||||
|
imgui.checkbox(language.current_language.customization_menu.large_monster_highlighted_UI,
|
||||||
|
config.current_config.large_monster_UI.highlighted.enabled);
|
||||||
|
config_changed = config_changed or changed;
|
||||||
|
|
||||||
|
changed, config.current_config.time_UI.enabled = imgui.checkbox(language.current_language.customization_menu.time_UI,
|
||||||
|
config.current_config.time_UI.enabled);
|
||||||
|
config_changed = config_changed or changed;
|
||||||
|
|
||||||
|
changed, config.current_config.damage_meter_UI.enabled = imgui.checkbox(
|
||||||
|
language.current_language.customization_menu.damage_meter_UI, config.current_config.damage_meter_UI.enabled);
|
||||||
|
config_changed = config_changed or changed;
|
||||||
|
|
||||||
|
changed, config.current_config.endemic_life_UI.enabled = imgui.checkbox(
|
||||||
|
language.current_language.customization_menu.endemic_life_UI, config.current_config.endemic_life_UI.enabled);
|
||||||
|
config_changed = config_changed or changed;
|
||||||
|
imgui.tree_pop();
|
||||||
|
end
|
||||||
|
|
||||||
|
return config_changed;
|
||||||
|
end
|
||||||
|
|
||||||
|
function customization_menu.draw_hotkeys()
|
||||||
if imgui.tree_node(language.current_language.customization_menu.hotkeys) then
|
if imgui.tree_node(language.current_language.customization_menu.hotkeys) then
|
||||||
if customization_menu.all_UI_waiting_for_key then
|
if customization_menu.all_UI_waiting_for_key then
|
||||||
if imgui.button(language.current_language.customization_menu.press_any_key) then
|
if imgui.button(language.current_language.customization_menu.press_any_key) then
|
||||||
@@ -509,140 +720,20 @@ function customization_menu.draw()
|
|||||||
imgui.text(keyboard.get_hotkey_name(config.current_config.global_settings.hotkeys_with_modifiers.endemic_life_UI));
|
imgui.text(keyboard.get_hotkey_name(config.current_config.global_settings.hotkeys_with_modifiers.endemic_life_UI));
|
||||||
imgui.tree_pop();
|
imgui.tree_pop();
|
||||||
end
|
end
|
||||||
|
|
||||||
global_settings_changed, modifiers_changed, apply_font_requested = customization_menu.draw_global_settings();
|
|
||||||
small_monster_UI_changed = customization_menu.draw_small_monster_UI();
|
|
||||||
|
|
||||||
if imgui.tree_node(language.current_language.customization_menu.large_monster_UI) then
|
|
||||||
large_monster_dynamic_UI_changed = customization_menu.draw_large_monster_dynamic_UI()
|
|
||||||
large_monster_static_UI_changed = customization_menu.draw_large_monster_static_UI()
|
|
||||||
large_monster_highlighted_UI_changed = customization_menu.draw_large_monster_highlighted_UI()
|
|
||||||
imgui.tree_pop();
|
|
||||||
end
|
end
|
||||||
|
|
||||||
time_UI_changed = customization_menu.draw_time_UI();
|
function customization_menu.draw_global_settings(apply_font_requested, language_changed)
|
||||||
damage_meter_UI_changed = customization_menu.draw_damage_meter_UI();
|
|
||||||
endemic_life_UI_changed = customization_menu.draw_endemic_life_UI()
|
|
||||||
|
|
||||||
imgui.pop_font();
|
|
||||||
imgui.end_window();
|
|
||||||
|
|
||||||
if small_monster_UI_changed or modifiers_changed then
|
|
||||||
for _, monster in pairs(small_monster.list) do
|
|
||||||
small_monster.init_UI(monster);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if large_monster_dynamic_UI_changed or modifiers_changed then
|
|
||||||
for _, monster in pairs(large_monster.list) do
|
|
||||||
large_monster.init_UI(monster, monster.dynamic_UI, config.current_config.large_monster_UI.dynamic);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if large_monster_static_UI_changed or modifiers_changed then
|
|
||||||
for _, monster in pairs(large_monster.list) do
|
|
||||||
large_monster.init_UI(monster, monster.static_UI, config.current_config.large_monster_UI.static);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if large_monster_highlighted_UI_changed or modifiers_changed then
|
|
||||||
for _, monster in pairs(large_monster.list) do
|
|
||||||
large_monster.init_UI(monster, monster.highlighted_UI, config.current_config.large_monster_UI.highlighted);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if time_UI_changed or modifiers_changed then
|
|
||||||
time_UI.init_UI();
|
|
||||||
end
|
|
||||||
|
|
||||||
if damage_meter_UI_changed or modifiers_changed then
|
|
||||||
for _, player in pairs(players.list) do
|
|
||||||
players.init_UI(player);
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
for _, servant in pairs(non_players.servant_list) do
|
|
||||||
non_players.init_UI(servant);
|
|
||||||
end
|
|
||||||
|
|
||||||
for _, otomo in pairs(non_players.otomo_list) do
|
|
||||||
non_players.init_UI(otomo);
|
|
||||||
end
|
|
||||||
|
|
||||||
players.init_UI(players.total);
|
|
||||||
players.init_highlighted_UI();
|
|
||||||
end
|
|
||||||
|
|
||||||
if endemic_life_UI_changed or modifiers_changed then
|
|
||||||
for _, creature in pairs(env_creature.list) do
|
|
||||||
env_creature.init_UI(creature);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if customization_menu.menu_font_changed and apply_font_requested then
|
|
||||||
customization_menu.menu_font_changed = false;
|
|
||||||
customization_menu.reload_font(false);
|
|
||||||
end
|
|
||||||
|
|
||||||
if modules_changed or global_settings_changed or small_monster_UI_changed or large_monster_dynamic_UI_changed or
|
|
||||||
large_monster_static_UI_changed or large_monster_highlighted_UI_changed or time_UI_changed or damage_meter_UI_changed or
|
|
||||||
endemic_life_UI_changed then
|
|
||||||
config.save();
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function customization_menu.draw_modules()
|
|
||||||
local changed = false;
|
|
||||||
local config_changed = false;
|
|
||||||
|
|
||||||
if imgui.tree_node(language.current_language.customization_menu.modules) then
|
|
||||||
changed, config.current_config.small_monster_UI.enabled = imgui.checkbox(
|
|
||||||
language.current_language.customization_menu.small_monster_UI, config.current_config.small_monster_UI.enabled);
|
|
||||||
config_changed = config_changed or changed;
|
|
||||||
|
|
||||||
changed, config.current_config.large_monster_UI.dynamic.enabled =
|
|
||||||
imgui.checkbox(language.current_language.customization_menu.large_monster_dynamic_UI,
|
|
||||||
config.current_config.large_monster_UI.dynamic.enabled);
|
|
||||||
config_changed = config_changed or changed;
|
|
||||||
|
|
||||||
changed, config.current_config.large_monster_UI.static.enabled =
|
|
||||||
imgui.checkbox(language.current_language.customization_menu.large_monster_static_UI,
|
|
||||||
config.current_config.large_monster_UI.static.enabled);
|
|
||||||
config_changed = config_changed or changed;
|
|
||||||
|
|
||||||
changed, config.current_config.large_monster_UI.highlighted.enabled =
|
|
||||||
imgui.checkbox(language.current_language.customization_menu.large_monster_highlighted_UI,
|
|
||||||
config.current_config.large_monster_UI.highlighted.enabled);
|
|
||||||
config_changed = config_changed or changed;
|
|
||||||
|
|
||||||
changed, config.current_config.time_UI.enabled = imgui.checkbox(language.current_language.customization_menu.time_UI,
|
|
||||||
config.current_config.time_UI.enabled);
|
|
||||||
config_changed = config_changed or changed;
|
|
||||||
|
|
||||||
changed, config.current_config.damage_meter_UI.enabled = imgui.checkbox(
|
|
||||||
language.current_language.customization_menu.damage_meter_UI, config.current_config.damage_meter_UI.enabled);
|
|
||||||
config_changed = config_changed or changed;
|
|
||||||
|
|
||||||
changed, config.current_config.endemic_life_UI.enabled = imgui.checkbox(
|
|
||||||
language.current_language.customization_menu.endemic_life_UI, config.current_config.endemic_life_UI.enabled);
|
|
||||||
config_changed = config_changed or changed;
|
|
||||||
imgui.tree_pop();
|
|
||||||
end
|
|
||||||
|
|
||||||
return config_changed;
|
|
||||||
end
|
|
||||||
|
|
||||||
function customization_menu.draw_global_settings()
|
|
||||||
local changed = false;
|
local changed = false;
|
||||||
local config_changed = false;
|
local config_changed = false;
|
||||||
local modifiers_changed = false;
|
local modifiers_changed = false;
|
||||||
local apply_font_requested = false;
|
|
||||||
|
|
||||||
local index = 1;
|
local index = 1;
|
||||||
|
|
||||||
if imgui.tree_node(language.current_language.customization_menu.global_settings) then
|
if imgui.tree_node(language.current_language.customization_menu.global_settings) then
|
||||||
local cached_config = config.current_config.global_settings;
|
local cached_config = config.current_config.global_settings;
|
||||||
|
|
||||||
imgui.text(language.current_language.customization_menu.menu_font_change_disclaimer);
|
imgui.text(language.current_language.customization_menu.menu_font_change_disclaimer);
|
||||||
|
|
||||||
changed, index = imgui.combo(language.current_language.customization_menu.language .. "*",
|
changed, index = imgui.combo(language.current_language.customization_menu.language .. "*",
|
||||||
table_helpers.find_index(language.language_names, cached_config.language), language.language_names);
|
table_helpers.find_index(language.language_names, cached_config.language), language.language_names);
|
||||||
config_changed = config_changed or changed;
|
config_changed = config_changed or changed;
|
||||||
@@ -652,28 +743,10 @@ function customization_menu.draw_global_settings()
|
|||||||
language.update(index);
|
language.update(index);
|
||||||
customization_menu.init();
|
customization_menu.init();
|
||||||
|
|
||||||
apply_font_requested = true;
|
language_changed = true;
|
||||||
customization_menu.menu_font_changed = true;
|
customization_menu.menu_font_changed = true;
|
||||||
|
modifiers_changed = true;
|
||||||
part_names.init();
|
apply_font_requested = true;
|
||||||
small_monster.init_list();
|
|
||||||
large_monster.init_list();
|
|
||||||
env_creature.init_list();
|
|
||||||
|
|
||||||
for _, player in pairs(players.list) do
|
|
||||||
players.init_UI(player);
|
|
||||||
end
|
|
||||||
|
|
||||||
for _, servant in pairs(non_players.servant_list) do
|
|
||||||
non_players.init_UI(servant);
|
|
||||||
end
|
|
||||||
|
|
||||||
for _, otomo in pairs(non_players.otomo_list) do
|
|
||||||
non_players.init_UI(otomo);
|
|
||||||
end
|
|
||||||
|
|
||||||
players.init_UI(players.total);
|
|
||||||
players.init_highlighted_UI();
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if imgui.tree_node(language.current_language.customization_menu.menu_font) then
|
if imgui.tree_node(language.current_language.customization_menu.menu_font) then
|
||||||
@@ -906,7 +979,7 @@ function customization_menu.draw_global_settings()
|
|||||||
imgui.tree_pop();
|
imgui.tree_pop();
|
||||||
end
|
end
|
||||||
|
|
||||||
return config_changed, modifiers_changed, apply_font_requested;
|
return config_changed, modifiers_changed, apply_font_requested, language_changed;
|
||||||
end
|
end
|
||||||
|
|
||||||
function customization_menu.draw_small_monster_UI()
|
function customization_menu.draw_small_monster_UI()
|
||||||
|
|||||||
@@ -78,6 +78,7 @@
|
|||||||
"closest": "Closest",
|
"closest": "Closest",
|
||||||
"color": "Color",
|
"color": "Color",
|
||||||
"colors": "Colors",
|
"colors": "Colors",
|
||||||
|
"config": "Config",
|
||||||
"creature_name_label": "Creature Name Label",
|
"creature_name_label": "Creature Name Label",
|
||||||
"crown": "Crown",
|
"crown": "Crown",
|
||||||
"crown_thresholds": "Crown Thresholds",
|
"crown_thresholds": "Crown Thresholds",
|
||||||
@@ -88,10 +89,12 @@
|
|||||||
"damage_meter_UI": "Damage Meter UI",
|
"damage_meter_UI": "Damage Meter UI",
|
||||||
"damage_percentage_label": "Damage Percentage Label",
|
"damage_percentage_label": "Damage Percentage Label",
|
||||||
"damage_value_label": "Damage Value Label",
|
"damage_value_label": "Damage Value Label",
|
||||||
|
"delete": "Delete",
|
||||||
"distance": "Distance",
|
"distance": "Distance",
|
||||||
"dps": "DPS",
|
"dps": "DPS",
|
||||||
"dps_label": "DPS Label",
|
"dps_label": "DPS Label",
|
||||||
"dps_mode": "DPS Mode",
|
"dps_mode": "DPS Mode",
|
||||||
|
"duplicate": "Duplicate",
|
||||||
"dynamic_positioning": "Dynamic Positioning",
|
"dynamic_positioning": "Dynamic Positioning",
|
||||||
"dynamically_positioned": "Dynamically Positioned",
|
"dynamically_positioned": "Dynamically Positioned",
|
||||||
"enable_for": "Enable for",
|
"enable_for": "Enable for",
|
||||||
@@ -187,6 +190,7 @@
|
|||||||
"myself": "Myself",
|
"myself": "Myself",
|
||||||
"name": "Name",
|
"name": "Name",
|
||||||
"name_label": "Name Label",
|
"name_label": "Name Label",
|
||||||
|
"new": "New",
|
||||||
"none": "None",
|
"none": "None",
|
||||||
"normal": "Normal",
|
"normal": "Normal",
|
||||||
"offset": "Offset",
|
"offset": "Offset",
|
||||||
@@ -221,9 +225,11 @@
|
|||||||
"rage": "Rage",
|
"rage": "Rage",
|
||||||
"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.",
|
||||||
"relative_offset": "Relative Offset",
|
"relative_offset": "Relative Offset",
|
||||||
|
"rename": "Rename",
|
||||||
"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",
|
"renderer": "Renderer",
|
||||||
|
"reset": "Reset",
|
||||||
"reversed_order": "Reversed Order",
|
"reversed_order": "Reversed Order",
|
||||||
"reward_screen": "Reward Screen",
|
"reward_screen": "Reward Screen",
|
||||||
"servant_otomos": "Servant Buddies",
|
"servant_otomos": "Servant Buddies",
|
||||||
|
|||||||
@@ -78,6 +78,7 @@
|
|||||||
"closest": "Closest",
|
"closest": "Closest",
|
||||||
"color": "カラー",
|
"color": "カラー",
|
||||||
"colors": "カラー",
|
"colors": "カラー",
|
||||||
|
"config": "Config",
|
||||||
"creature_name_label": "モンスターの名前ラベル",
|
"creature_name_label": "モンスターの名前ラベル",
|
||||||
"crown": "王冠",
|
"crown": "王冠",
|
||||||
"crown_thresholds": "王冠の閾値",
|
"crown_thresholds": "王冠の閾値",
|
||||||
@@ -88,10 +89,12 @@
|
|||||||
"damage_meter_UI": "ダメージメーターUI",
|
"damage_meter_UI": "ダメージメーターUI",
|
||||||
"damage_percentage_label": "ダメージ割合(%)ラベル",
|
"damage_percentage_label": "ダメージ割合(%)ラベル",
|
||||||
"damage_value_label": "ダメージラベル",
|
"damage_value_label": "ダメージラベル",
|
||||||
|
"delete": "Delete",
|
||||||
"distance": "距離",
|
"distance": "距離",
|
||||||
"dps": "DPS",
|
"dps": "DPS",
|
||||||
"dps_label": "DPSラベル",
|
"dps_label": "DPSラベル",
|
||||||
"dps_mode": "DPS モード",
|
"dps_mode": "DPS モード",
|
||||||
|
"duplicate": "Duplicate",
|
||||||
"dynamic_positioning": "動的な場所",
|
"dynamic_positioning": "動的な場所",
|
||||||
"dynamically_positioned": "モンスターに追随して表示",
|
"dynamically_positioned": "モンスターに追随して表示",
|
||||||
"enable_for": "有効にする",
|
"enable_for": "有効にする",
|
||||||
@@ -187,6 +190,7 @@
|
|||||||
"myself": "Myself",
|
"myself": "Myself",
|
||||||
"name": "Name",
|
"name": "Name",
|
||||||
"name_label": "Name Label",
|
"name_label": "Name Label",
|
||||||
|
"new": "New",
|
||||||
"none": "設定なし",
|
"none": "設定なし",
|
||||||
"normal": "標準",
|
"normal": "標準",
|
||||||
"offset": "基準点からの位置",
|
"offset": "基準点からの位置",
|
||||||
@@ -194,7 +198,6 @@
|
|||||||
"opacity_falloff": "透明度を上げる",
|
"opacity_falloff": "透明度を上げる",
|
||||||
"orientation": "並べ方",
|
"orientation": "並べ方",
|
||||||
"other_damage": "その他のダメージ",
|
"other_damage": "その他のダメージ",
|
||||||
"other_otomos": "Other Buddies",
|
|
||||||
"other_player_otomos": "Other Player Buddies",
|
"other_player_otomos": "Other Player Buddies",
|
||||||
"other_players": "他のプレイヤー",
|
"other_players": "他のプレイヤー",
|
||||||
"otomo_damage": "オトモのダメージ",
|
"otomo_damage": "オトモのダメージ",
|
||||||
@@ -222,9 +225,11 @@
|
|||||||
"rage": "怒り値",
|
"rage": "怒り値",
|
||||||
"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.",
|
||||||
"relative_offset": "相対的な表示位置",
|
"relative_offset": "相対的な表示位置",
|
||||||
|
"rename": "Rename",
|
||||||
"render_highlighted_monster": "ハイライトされたモンスターをレンダリング(表示)する",
|
"render_highlighted_monster": "ハイライトされたモンスターをレンダリング(表示)する",
|
||||||
"render_not_highlighted_monsters": "ハイライトされていないモンスターをレンダリング(表示)する",
|
"render_not_highlighted_monsters": "ハイライトされていないモンスターをレンダリング(表示)する",
|
||||||
"renderer": "Renderer",
|
"renderer": "Renderer",
|
||||||
|
"reset": "Reset",
|
||||||
"reversed_order": "逆順",
|
"reversed_order": "逆順",
|
||||||
"reward_screen": "Reward Screen",
|
"reward_screen": "Reward Screen",
|
||||||
"servant_otomos": "Servant Buddies",
|
"servant_otomos": "Servant Buddies",
|
||||||
@@ -232,13 +237,9 @@
|
|||||||
"settings": "設定",
|
"settings": "設定",
|
||||||
"severe_filter": "Severe",
|
"severe_filter": "Severe",
|
||||||
"shadow": "影",
|
"shadow": "影",
|
||||||
"show_followers_separately": "Show Followers separately",
|
|
||||||
"show_my_otomos_separately": "Show my Buddies separately",
|
"show_my_otomos_separately": "Show my Buddies separately",
|
||||||
"show_other_otomos_separately": "Show other Buddies separately",
|
|
||||||
"show_other_player_otomos_separately": "Show Other Player Buddies separately",
|
"show_other_player_otomos_separately": "Show Other Player Buddies separately",
|
||||||
"show_servant_otomos_separately": "Show Follower Buddies separately",
|
"show_servant_otomos_separately": "Show Follower Buddies separately",
|
||||||
"show_servant_separately": "Show Followers separately",
|
|
||||||
"show_servants_separately": "Show Followers separately",
|
|
||||||
"size": "サイズ",
|
"size": "サイズ",
|
||||||
"small_monster_UI": "小型モンスターUI",
|
"small_monster_UI": "小型モンスターUI",
|
||||||
"small_monsters": "小型モンスター",
|
"small_monsters": "小型モンスター",
|
||||||
|
|||||||
@@ -78,6 +78,7 @@
|
|||||||
"closest": "가장 가까운",
|
"closest": "가장 가까운",
|
||||||
"color": "색상",
|
"color": "색상",
|
||||||
"colors": "색상",
|
"colors": "색상",
|
||||||
|
"config": "Config",
|
||||||
"creature_name_label": "환경생물 이름 정보",
|
"creature_name_label": "환경생물 이름 정보",
|
||||||
"crown": "금관",
|
"crown": "금관",
|
||||||
"crown_thresholds": "금관 판정값",
|
"crown_thresholds": "금관 판정값",
|
||||||
@@ -88,10 +89,12 @@
|
|||||||
"damage_meter_UI": "대미지 미터 UI",
|
"damage_meter_UI": "대미지 미터 UI",
|
||||||
"damage_percentage_label": "대미지 비율 정보",
|
"damage_percentage_label": "대미지 비율 정보",
|
||||||
"damage_value_label": "대미지 값 정보",
|
"damage_value_label": "대미지 값 정보",
|
||||||
|
"delete": "Delete",
|
||||||
"distance": "거리",
|
"distance": "거리",
|
||||||
"dps": "DPS",
|
"dps": "DPS",
|
||||||
"dps_label": "DPS 정보",
|
"dps_label": "DPS 정보",
|
||||||
"dps_mode": "DPS 모드",
|
"dps_mode": "DPS 모드",
|
||||||
|
"duplicate": "Duplicate",
|
||||||
"dynamic_positioning": "유동 위치",
|
"dynamic_positioning": "유동 위치",
|
||||||
"dynamically_positioned": "유동 위치 UI",
|
"dynamically_positioned": "유동 위치 UI",
|
||||||
"enable_for": "표시 대상",
|
"enable_for": "표시 대상",
|
||||||
@@ -187,6 +190,7 @@
|
|||||||
"myself": "Myself",
|
"myself": "Myself",
|
||||||
"name": "Name",
|
"name": "Name",
|
||||||
"name_label": "Name Label",
|
"name_label": "Name Label",
|
||||||
|
"new": "New",
|
||||||
"none": "없음",
|
"none": "없음",
|
||||||
"normal": "보통",
|
"normal": "보통",
|
||||||
"offset": "거리",
|
"offset": "거리",
|
||||||
@@ -194,7 +198,6 @@
|
|||||||
"opacity_falloff": "투명도 감소",
|
"opacity_falloff": "투명도 감소",
|
||||||
"orientation": "방향",
|
"orientation": "방향",
|
||||||
"other_damage": "기타 대미지",
|
"other_damage": "기타 대미지",
|
||||||
"other_otomos": "Other Buddies",
|
|
||||||
"other_player_otomos": "Other Player Buddies",
|
"other_player_otomos": "Other Player Buddies",
|
||||||
"other_players": "다른 헌터",
|
"other_players": "다른 헌터",
|
||||||
"otomo_damage": "동반자 대미지",
|
"otomo_damage": "동반자 대미지",
|
||||||
@@ -222,9 +225,11 @@
|
|||||||
"rage": "분노",
|
"rage": "분노",
|
||||||
"reframework_outdated": "설치된 REFramework가 구버전입니다. 업데이트 하지 않으면 MHR Overlay가 제대로 동작하지 않을 수 있습니다.",
|
"reframework_outdated": "설치된 REFramework가 구버전입니다. 업데이트 하지 않으면 MHR Overlay가 제대로 동작하지 않을 수 있습니다.",
|
||||||
"relative_offset": "상대적 위치 거리",
|
"relative_offset": "상대적 위치 거리",
|
||||||
|
"rename": "Rename",
|
||||||
"render_highlighted_monster": "타겟이 된 몬스터 표시",
|
"render_highlighted_monster": "타겟이 된 몬스터 표시",
|
||||||
"render_not_highlighted_monsters": "타겟이 아닌 몬스터 표시",
|
"render_not_highlighted_monsters": "타겟이 아닌 몬스터 표시",
|
||||||
"renderer": "Renderer",
|
"renderer": "Renderer",
|
||||||
|
"reset": "Reset",
|
||||||
"reversed_order": "역순",
|
"reversed_order": "역순",
|
||||||
"reward_screen": "Reward Screen",
|
"reward_screen": "Reward Screen",
|
||||||
"servant_otomos": "Servant Buddies",
|
"servant_otomos": "Servant Buddies",
|
||||||
@@ -232,13 +237,9 @@
|
|||||||
"settings": "설정",
|
"settings": "설정",
|
||||||
"severe_filter": "절단",
|
"severe_filter": "절단",
|
||||||
"shadow": "그림자",
|
"shadow": "그림자",
|
||||||
"show_followers_separately": "Show Followers separately",
|
|
||||||
"show_my_otomos_separately": "Show my Buddies separately",
|
"show_my_otomos_separately": "Show my Buddies separately",
|
||||||
"show_other_otomos_separately": "Show other Buddies separately",
|
|
||||||
"show_other_player_otomos_separately": "Show Other Player Buddies separately",
|
"show_other_player_otomos_separately": "Show Other Player Buddies separately",
|
||||||
"show_servant_otomos_separately": "Show Follower Buddies separately",
|
"show_servant_otomos_separately": "Show Follower Buddies separately",
|
||||||
"show_servant_separately": "Show Followers separately",
|
|
||||||
"show_servants_separately": "Show Followers separately",
|
|
||||||
"size": "크기",
|
"size": "크기",
|
||||||
"small_monster_UI": "소형 몬스터 UI",
|
"small_monster_UI": "소형 몬스터 UI",
|
||||||
"small_monsters": "소형 몬스터",
|
"small_monsters": "소형 몬스터",
|
||||||
|
|||||||
@@ -78,6 +78,7 @@
|
|||||||
"closest": "Ближайший",
|
"closest": "Ближайший",
|
||||||
"color": "Цвет",
|
"color": "Цвет",
|
||||||
"colors": "Цвета",
|
"colors": "Цвета",
|
||||||
|
"config": "Файл конфигурации",
|
||||||
"creature_name_label": "Метка имени существа",
|
"creature_name_label": "Метка имени существа",
|
||||||
"crown": "Корона",
|
"crown": "Корона",
|
||||||
"crown_thresholds": "Лимиты корон",
|
"crown_thresholds": "Лимиты корон",
|
||||||
@@ -88,10 +89,12 @@
|
|||||||
"damage_meter_UI": "Интерфейс модуля урона",
|
"damage_meter_UI": "Интерфейс модуля урона",
|
||||||
"damage_percentage_label": "Метка урона в процентах",
|
"damage_percentage_label": "Метка урона в процентах",
|
||||||
"damage_value_label": "Метка значений урона",
|
"damage_value_label": "Метка значений урона",
|
||||||
|
"delete": "Удалить",
|
||||||
"distance": "Расстояние",
|
"distance": "Расстояние",
|
||||||
"dps": "Урон в секунду",
|
"dps": "Урон в секунду",
|
||||||
"dps_label": "Метка урона в секунду",
|
"dps_label": "Метка урона в секунду",
|
||||||
"dps_mode": "Режим урона в секунду",
|
"dps_mode": "Режим урона в секунду",
|
||||||
|
"duplicate": "Дублировать",
|
||||||
"dynamic_positioning": "Динамическое позиционирование",
|
"dynamic_positioning": "Динамическое позиционирование",
|
||||||
"dynamically_positioned": "Рассположенный динамично",
|
"dynamically_positioned": "Рассположенный динамично",
|
||||||
"enable_for": "Показывать для",
|
"enable_for": "Показывать для",
|
||||||
@@ -159,8 +162,8 @@
|
|||||||
"large_monster_static_UI": "Статический интерфейс больших монстров",
|
"large_monster_static_UI": "Статический интерфейс больших монстров",
|
||||||
"large_monsters": "Большие монстры",
|
"large_monsters": "Большие монстры",
|
||||||
"last": "Последний",
|
"last": "Последний",
|
||||||
"level": "Level",
|
"level": "Уровень",
|
||||||
"level_label": "Level Label",
|
"level_label": "Метка уровня",
|
||||||
"loading_quest": "Загрузка квеста",
|
"loading_quest": "Загрузка квеста",
|
||||||
"loss_health": "Отсечение части",
|
"loss_health": "Отсечение части",
|
||||||
"loss_health_percentage": "Отсечение части в процентах",
|
"loss_health_percentage": "Отсечение части в процентах",
|
||||||
@@ -183,10 +186,11 @@
|
|||||||
"monster_name": "Имя монстра",
|
"monster_name": "Имя монстра",
|
||||||
"monster_name_label": "Метка имени монстра",
|
"monster_name_label": "Метка имени монстра",
|
||||||
"my_damage_bar_location": "Позиция моей шкалы урона",
|
"my_damage_bar_location": "Позиция моей шкалы урона",
|
||||||
"my_otomos": "My Buddies",
|
"my_otomos": "Мои спутники",
|
||||||
"myself": "Myself",
|
"myself": "Я",
|
||||||
"name": "Name",
|
"name": "Имя",
|
||||||
"name_label": "Name Label",
|
"name_label": "Метка имени",
|
||||||
|
"new": "Создать",
|
||||||
"none": "Нет",
|
"none": "Нет",
|
||||||
"normal": "Обычный",
|
"normal": "Обычный",
|
||||||
"offset": "Сдвиг",
|
"offset": "Сдвиг",
|
||||||
@@ -194,8 +198,7 @@
|
|||||||
"opacity_falloff": "Увеличение прозрачности от расстояния",
|
"opacity_falloff": "Увеличение прозрачности от расстояния",
|
||||||
"orientation": "Ориентация",
|
"orientation": "Ориентация",
|
||||||
"other_damage": "Другой урон",
|
"other_damage": "Другой урон",
|
||||||
"other_otomos": "Other Buddies",
|
"other_player_otomos": "Спутники других игроков",
|
||||||
"other_player_otomos": "Other Player Buddies",
|
|
||||||
"other_players": "Другие игроки",
|
"other_players": "Другие игроки",
|
||||||
"otomo_damage": "Урон от спутников",
|
"otomo_damage": "Урон от спутников",
|
||||||
"outline": "Обводка",
|
"outline": "Обводка",
|
||||||
@@ -222,23 +225,21 @@
|
|||||||
"rage": "Ярость",
|
"rage": "Ярость",
|
||||||
"reframework_outdated": "Установленная версия REFramework устарела. Пожалуйста, обновитесь, иначе MHR Overlay будет работать некорректно.",
|
"reframework_outdated": "Установленная версия REFramework устарела. Пожалуйста, обновитесь, иначе MHR Overlay будет работать некорректно.",
|
||||||
"relative_offset": "Относительный сдвиг",
|
"relative_offset": "Относительный сдвиг",
|
||||||
|
"rename": "Переименовать",
|
||||||
"render_highlighted_monster": "Показывать помеченного монстра",
|
"render_highlighted_monster": "Показывать помеченного монстра",
|
||||||
"render_not_highlighted_monsters": "Показывать непомеченных монстров",
|
"render_not_highlighted_monsters": "Показывать непомеченных монстров",
|
||||||
"renderer": "Renderer",
|
"renderer": "Рендерер",
|
||||||
|
"reset": "Сбросить",
|
||||||
"reversed_order": "Обратный порядок",
|
"reversed_order": "Обратный порядок",
|
||||||
"reward_screen": "Экран наград",
|
"reward_screen": "Экран наград",
|
||||||
"servant_otomos": "Servant Buddies",
|
"servant_otomos": "Спутники последователей",
|
||||||
"servants": "Followers",
|
"servants": "Последователи",
|
||||||
"settings": "Настройки",
|
"settings": "Настройки",
|
||||||
"severe_filter": "Отсечение",
|
"severe_filter": "Отсечение",
|
||||||
"shadow": "Тень",
|
"shadow": "Тень",
|
||||||
"show_followers_separately": "Показывать последователей отдельно",
|
|
||||||
"show_my_otomos_separately": "Показывать моих спутников отдельно",
|
"show_my_otomos_separately": "Показывать моих спутников отдельно",
|
||||||
"show_other_otomos_separately": "Показывать спутников других игроков отдельно",
|
"show_other_player_otomos_separately": "Показывать спутников других игроков отдельно",
|
||||||
"show_other_player_otomos_separately": "Show Other Player Buddies separately",
|
"show_servant_otomos_separately": "Показывать спутников последователей отдельно",
|
||||||
"show_servant_otomos_separately": "Show Follower Buddies separately",
|
|
||||||
"show_servant_separately": "Show Followers separately",
|
|
||||||
"show_servants_separately": "Show Followers separately",
|
|
||||||
"size": "Размер",
|
"size": "Размер",
|
||||||
"small_monster_UI": "Интерфейс малых монстров",
|
"small_monster_UI": "Интерфейс малых монстров",
|
||||||
"small_monsters": "Малые монстры",
|
"small_monsters": "Малые монстры",
|
||||||
@@ -264,7 +265,7 @@
|
|||||||
"top_dps": "Наибольший урон в секунду",
|
"top_dps": "Наибольший урон в секунду",
|
||||||
"top_left": "Левый верхний угол",
|
"top_left": "Левый верхний угол",
|
||||||
"top_right": "Правый верхний угол",
|
"top_right": "Правый верхний угол",
|
||||||
"total": "Total",
|
"total": "Всего",
|
||||||
"total_buildup": "Общее накопление",
|
"total_buildup": "Общее накопление",
|
||||||
"total_buildup_label": "Метка общего накопления",
|
"total_buildup_label": "Метка общего накопления",
|
||||||
"total_buildup_value_label": "Метка значения общего накопления",
|
"total_buildup_value_label": "Метка значения общего накопления",
|
||||||
|
|||||||
@@ -78,6 +78,7 @@
|
|||||||
"closest": "Closest",
|
"closest": "Closest",
|
||||||
"color": "颜色",
|
"color": "颜色",
|
||||||
"colors": "颜色",
|
"colors": "颜色",
|
||||||
|
"config": "Config",
|
||||||
"creature_name_label": "生物名标签",
|
"creature_name_label": "生物名标签",
|
||||||
"crown": "皇冠",
|
"crown": "皇冠",
|
||||||
"crown_thresholds": "皇冠阈值",
|
"crown_thresholds": "皇冠阈值",
|
||||||
@@ -88,10 +89,12 @@
|
|||||||
"damage_meter_UI": "伤害统计UI",
|
"damage_meter_UI": "伤害统计UI",
|
||||||
"damage_percentage_label": "伤害百分比标签",
|
"damage_percentage_label": "伤害百分比标签",
|
||||||
"damage_value_label": "伤害量标签",
|
"damage_value_label": "伤害量标签",
|
||||||
|
"delete": "Delete",
|
||||||
"distance": "距离",
|
"distance": "距离",
|
||||||
"dps": "DPS",
|
"dps": "DPS",
|
||||||
"dps_label": "DPS标签",
|
"dps_label": "DPS标签",
|
||||||
"dps_mode": "DPS模式",
|
"dps_mode": "DPS模式",
|
||||||
|
"duplicate": "Duplicate",
|
||||||
"dynamic_positioning": "动态位置",
|
"dynamic_positioning": "动态位置",
|
||||||
"dynamically_positioned": "动态位置",
|
"dynamically_positioned": "动态位置",
|
||||||
"enable_for": "开启",
|
"enable_for": "开启",
|
||||||
@@ -187,6 +190,7 @@
|
|||||||
"myself": "Myself",
|
"myself": "Myself",
|
||||||
"name": "Name",
|
"name": "Name",
|
||||||
"name_label": "Name Label",
|
"name_label": "Name Label",
|
||||||
|
"new": "New",
|
||||||
"none": "空",
|
"none": "空",
|
||||||
"normal": "正常",
|
"normal": "正常",
|
||||||
"offset": "偏移",
|
"offset": "偏移",
|
||||||
@@ -194,7 +198,6 @@
|
|||||||
"opacity_falloff": "透明度增加",
|
"opacity_falloff": "透明度增加",
|
||||||
"orientation": "方向",
|
"orientation": "方向",
|
||||||
"other_damage": "Other Damage",
|
"other_damage": "Other Damage",
|
||||||
"other_otomos": "Other Buddies",
|
|
||||||
"other_player_otomos": "Other Player Buddies",
|
"other_player_otomos": "Other Player Buddies",
|
||||||
"other_players": "其他玩家",
|
"other_players": "其他玩家",
|
||||||
"otomo_damage": "随从伤害",
|
"otomo_damage": "随从伤害",
|
||||||
@@ -222,9 +225,11 @@
|
|||||||
"rage": "愤怒",
|
"rage": "愤怒",
|
||||||
"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.",
|
||||||
"relative_offset": "相对偏移",
|
"relative_offset": "相对偏移",
|
||||||
|
"rename": "Rename",
|
||||||
"render_highlighted_monster": "渲染高亮怪物",
|
"render_highlighted_monster": "渲染高亮怪物",
|
||||||
"render_not_highlighted_monsters": "渲染非高亮怪物",
|
"render_not_highlighted_monsters": "渲染非高亮怪物",
|
||||||
"renderer": "Renderer",
|
"renderer": "Renderer",
|
||||||
|
"reset": "Reset",
|
||||||
"reversed_order": "逆向排序",
|
"reversed_order": "逆向排序",
|
||||||
"reward_screen": "Reward Screen",
|
"reward_screen": "Reward Screen",
|
||||||
"servant_otomos": "Servant Buddies",
|
"servant_otomos": "Servant Buddies",
|
||||||
@@ -232,13 +237,9 @@
|
|||||||
"settings": "设定",
|
"settings": "设定",
|
||||||
"severe_filter": "Severe",
|
"severe_filter": "Severe",
|
||||||
"shadow": "阴影",
|
"shadow": "阴影",
|
||||||
"show_followers_separately": "Show Followers separately",
|
|
||||||
"show_my_otomos_separately": "Show my Buddies separately",
|
"show_my_otomos_separately": "Show my Buddies separately",
|
||||||
"show_other_otomos_separately": "Show other Buddies separately",
|
|
||||||
"show_other_player_otomos_separately": "Show Other Player Buddies separately",
|
"show_other_player_otomos_separately": "Show Other Player Buddies separately",
|
||||||
"show_servant_otomos_separately": "Show Follower Buddies separately",
|
"show_servant_otomos_separately": "Show Follower Buddies separately",
|
||||||
"show_servant_separately": "Show Followers separately",
|
|
||||||
"show_servants_separately": "Show Followers separately",
|
|
||||||
"size": "大小",
|
"size": "大小",
|
||||||
"small_monster_UI": "小型怪物UI",
|
"small_monster_UI": "小型怪物UI",
|
||||||
"small_monsters": "小型怪物群",
|
"small_monsters": "小型怪物群",
|
||||||
|
|||||||
@@ -78,6 +78,7 @@
|
|||||||
"closest": "最近的",
|
"closest": "最近的",
|
||||||
"color": "調色盤",
|
"color": "調色盤",
|
||||||
"colors": "調色盤",
|
"colors": "調色盤",
|
||||||
|
"config": "Config",
|
||||||
"creature_name_label": "環境生物名稱",
|
"creature_name_label": "環境生物名稱",
|
||||||
"crown": "皇冠",
|
"crown": "皇冠",
|
||||||
"crown_thresholds": "皇冠的大小判定範圍",
|
"crown_thresholds": "皇冠的大小判定範圍",
|
||||||
@@ -88,10 +89,12 @@
|
|||||||
"damage_meter_UI": "傷害量計算 UI",
|
"damage_meter_UI": "傷害量計算 UI",
|
||||||
"damage_percentage_label": "傷害量百分比",
|
"damage_percentage_label": "傷害量百分比",
|
||||||
"damage_value_label": "傷害量",
|
"damage_value_label": "傷害量",
|
||||||
|
"delete": "Delete",
|
||||||
"distance": "距離",
|
"distance": "距離",
|
||||||
"dps": "DPS",
|
"dps": "DPS",
|
||||||
"dps_label": "DPS文字",
|
"dps_label": "DPS文字",
|
||||||
"dps_mode": "DPS模式",
|
"dps_mode": "DPS模式",
|
||||||
|
"duplicate": "Duplicate",
|
||||||
"dynamic_positioning": "浮動的資訊位置",
|
"dynamic_positioning": "浮動的資訊位置",
|
||||||
"dynamically_positioned": "浮動的魔物資訊",
|
"dynamically_positioned": "浮動的魔物資訊",
|
||||||
"enable_for": "啟用對象",
|
"enable_for": "啟用對象",
|
||||||
@@ -187,6 +190,7 @@
|
|||||||
"myself": "Myself",
|
"myself": "Myself",
|
||||||
"name": "Name",
|
"name": "Name",
|
||||||
"name_label": "Name Label",
|
"name_label": "Name Label",
|
||||||
|
"new": "New",
|
||||||
"none": "空",
|
"none": "空",
|
||||||
"normal": "正常",
|
"normal": "正常",
|
||||||
"offset": "位置",
|
"offset": "位置",
|
||||||
@@ -194,7 +198,6 @@
|
|||||||
"opacity_falloff": "透明度提高",
|
"opacity_falloff": "透明度提高",
|
||||||
"orientation": "對齊方式",
|
"orientation": "對齊方式",
|
||||||
"other_damage": "其他傷害",
|
"other_damage": "其他傷害",
|
||||||
"other_otomos": "Other Buddies",
|
|
||||||
"other_player_otomos": "Other Player Buddies",
|
"other_player_otomos": "Other Player Buddies",
|
||||||
"other_players": "其他玩家",
|
"other_players": "其他玩家",
|
||||||
"otomo_damage": "隨從傷害",
|
"otomo_damage": "隨從傷害",
|
||||||
@@ -222,9 +225,11 @@
|
|||||||
"rage": "憤怒度",
|
"rage": "憤怒度",
|
||||||
"reframework_outdated": "已安裝的 REFramework 版本已過期. 麻煩請更新版本, 否則 MHR Overlay 無法正確作用.",
|
"reframework_outdated": "已安裝的 REFramework 版本已過期. 麻煩請更新版本, 否則 MHR Overlay 無法正確作用.",
|
||||||
"relative_offset": "相對偏移",
|
"relative_offset": "相對偏移",
|
||||||
|
"rename": "Rename",
|
||||||
"render_highlighted_monster": "渲染目標魔物",
|
"render_highlighted_monster": "渲染目標魔物",
|
||||||
"render_not_highlighted_monsters": "渲染非目標魔物",
|
"render_not_highlighted_monsters": "渲染非目標魔物",
|
||||||
"renderer": "Renderer",
|
"renderer": "Renderer",
|
||||||
|
"reset": "Reset",
|
||||||
"reversed_order": "反向排序",
|
"reversed_order": "反向排序",
|
||||||
"reward_screen": "Reward Screen",
|
"reward_screen": "Reward Screen",
|
||||||
"servant_otomos": "Servant Buddies",
|
"servant_otomos": "Servant Buddies",
|
||||||
@@ -232,13 +237,9 @@
|
|||||||
"settings": "設定",
|
"settings": "設定",
|
||||||
"severe_filter": "Severe",
|
"severe_filter": "Severe",
|
||||||
"shadow": "陰影",
|
"shadow": "陰影",
|
||||||
"show_followers_separately": "Show Followers separately",
|
|
||||||
"show_my_otomos_separately": "Show my Buddies separately",
|
"show_my_otomos_separately": "Show my Buddies separately",
|
||||||
"show_other_otomos_separately": "Show other Buddies separately",
|
|
||||||
"show_other_player_otomos_separately": "Show Other Player Buddies separately",
|
"show_other_player_otomos_separately": "Show Other Player Buddies separately",
|
||||||
"show_servant_otomos_separately": "Show Follower Buddies separately",
|
"show_servant_otomos_separately": "Show Follower Buddies separately",
|
||||||
"show_servant_separately": "Show Followers separately",
|
|
||||||
"show_servants_separately": "Show Followers separately",
|
|
||||||
"size": "大小",
|
"size": "大小",
|
||||||
"small_monster_UI": "小型魔物 UI",
|
"small_monster_UI": "小型魔物 UI",
|
||||||
"small_monsters": "小型魔物群",
|
"small_monsters": "小型魔物群",
|
||||||
|
|||||||
Reference in New Issue
Block a user