Merge pull request #49 from GreenComfyTea/main

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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