Update and fix Damage Types;

This commit is contained in:
GreenComfyTea
2022-07-10 11:38:35 +03:00
parent ad0c1156d9
commit 798fe55b82
11 changed files with 203 additions and 56 deletions

View File

@@ -22,12 +22,72 @@ local get_elemental_damage_method = enemy_calc_damage_info_type_def:get_method("
local get_condition_damage_method = enemy_calc_damage_info_type_def:get_method("get_ConditionDamage");
local get_condition_type_method = enemy_calc_damage_info_type_def:get_method("get_ConditionDamageType");
local types = {
[0] = "PlayerWeapon",
[1] = "BarrelBombLarge",
[2] = "Makimushi",
[3] = "Nitro",
[4] = "OnibiMine",
[5] = "BallistaHate",
[6] = "CaptureSmokeBomb",
[7] = "CaptureBullet",
[8] = "BarrelBombSmall",
[9] = "Kunai",
[10] = "WaterBeetle",
[11] = "DetonationGrenade",
[12] = "Kabutowari",
[13] = "FlashBoll", -- Flash Bomb
[14] = "HmBallista",
[15] = "HmCannon",
[16] = "HmGatling",
[17] = "HmTrap",
[18] = "HmNpc",
[19] = "HmFlameThrower",
[20] = "HmDragnator",
[21] = "Otomo",
[22] = "OtAirouShell014",
[23] = "OtAirouShell102",
[24] = "Fg005",
[25] = "EcBatExplode",
[26] = "EcWallTrapBugExplode",
[27] = "EcPiranha",
[28] = "EcFlash",
[29] = "EcSandWallShooter",
[30] = "EcForestWallShooter",
[31] = "EcSwampLeech",
[32] = "EcPenetrateFish",
[33] = "Max",
[34] = "Invalid"
}
function damage_hook.get_damage_source_type(damage_source_type_id, is_marionette_attack)
if is_marionette_attack then
return "wyvern riding";
elseif damage_source_type_id == 0 or damage_source_type_id == 7 or damage_source_type_id == 11 or damage_source_type_id == 13 then
return "player";
elseif damage_source_type_id == 1 or damage_source_type_id == 8 then
return "bomb";
elseif damage_source_type_id == 9 then
return "kunai";
elseif damage_source_type_id >= 14 and damage_source_type_id <= 20 then
return "installation";
elseif damage_source_type_id >= 21 and damage_source_type_id <= 23 then
return "otomo";
elseif damage_source_type_id >= 25 and damage_source_type_id <= 32 then
return "endemic life";
elseif damage_source_type_id == 34 then
return "other";
end
return tostring(damage_source_type_id);
end
function damage_hook.update_damage(args)
local enemy = sdk.to_managed_object(args[2]);
if enemy == nil then
return;
end
local is_large_monster = is_boss_enemy_method:call(enemy);
if is_large_monster == nil then
@@ -63,6 +123,8 @@ function damage_hook.update_damage(args)
end
end
-- get_Em2EmDamageType()
local damage_object = {}
damage_object.total_damage = get_total_damage_method:call(enemy_calc_damage_info);
damage_object.physical_damage = get_physical_damage_method:call(enemy_calc_damage_info);
@@ -72,35 +134,47 @@ function damage_hook.update_damage(args)
local condition_damage = get_condition_damage_method:call(enemy_calc_damage_info);
local condition_type = tonumber(get_condition_type_method:call(enemy_calc_damage_info));
-- -1 - bombs
-- 0 - player
-- 9 - kunai
-- 11 - wyverblast
-- 12 - ballista
-- 13 - cannon
-- 14 - machine cannon
-- 16 - defender ballista/cannon
-- 17 - wyvernfire artillery
-- 18 - dragonator
-- 19 - otomo
-- 23 - monster
-- 0 - PlayerWeapon
-- 1 - BarrelBombLarge
-- 2 - Makimushi
-- 3 - Nitro
-- 4 - OnibiMine
-- 5 - BallistaHate
-- 6 - CaptureSmokeBomb
-- 7 - CaptureBullet
-- 8 - BarrelBombSmall
-- 9 - Kunai
-- 10 - WaterBeetle
-- 11 - DetonationGrenade
-- 12 - Kabutowari
-- 13 - FlashBoll
-- 14 - HmBallista
-- 15 - HmCannon
-- 16 - HmGatling
-- 17 - HmTrap
-- 18 - HmNpc
-- 19 - HmFlameThrower
-- 20 - HmDragnator
-- 21 - Otomo
-- 22 - OtAirouShell014
-- 23 - OtAirouShell102
-- 24 - Fg005
-- 25 - EcBatExplode
-- 26 - EcWallTrapBugExplode
-- 27 - EcPiranha
-- 28 - EcFlash
-- 29 - EcSandWallShooter
-- 30 - EcForestWallShooter
-- 31 - EcSwampLeech
-- 32 - EcPenetrateFish
local damage_source_type = tostring(attacker_type);
if attacker_type == 0 then
damage_source_type = "player";
elseif attacker_type == 1 then
damage_source_type = "bomb";
elseif attacker_type == 9 then
damage_source_type = "kunai";
elseif attacker_type == 11 then
damage_source_type = "wyvernblast";
elseif attacker_type == 12 or attacker_type == 13 or attacker_type == 14 or attacker_type == 18 then
damage_source_type = "installation";
elseif attacker_type == 19 then
damage_source_type = "otomo";
elseif attacker_type == 23 then
damage_source_type = "monster";
end
xy = "\nPlayer: " .. tostring(attacker_id) ..
"\nDamage: " .. tostring(damage_object.total_damage) ..
"\nType: (" .. tostring(attacker_type) ..
") " .. tostring(types[attacker_type]);
local damage_source_type = damage_hook.get_damage_source_type(attacker_type, is_marionette_attack);
local attacking_player = player.get_player(attacker_id);
@@ -116,7 +190,6 @@ function damage_hook.update_damage(args)
ailments.apply_ailment_buildup(monster, attacker_id, ailments.stun_id, stun_damage);
end
ailments.apply_ailment_buildup(monster, attacker_id, condition_type, condition_damage);
player.update_damage(player.total, damage_source_type, is_large_monster, damage_object);

View File

@@ -56,11 +56,11 @@ function player.new(player_id, player_name, player_master_rank, player_hunter_ra
new_player.small_monsters.otomo.elemental_damage = 0;
new_player.small_monsters.otomo.ailment_damage = 0;
new_player.small_monsters.monster = {};
new_player.small_monsters.monster.total_damage = 0;
new_player.small_monsters.monster.physical_damage = 0;
new_player.small_monsters.monster.elemental_damage = 0;
new_player.small_monsters.monster.ailment_damage = 0;
new_player.small_monsters.wyvern_riding = {};
new_player.small_monsters.wyvern_riding.total_damage = 0;
new_player.small_monsters.wyvern_riding.physical_damage = 0;
new_player.small_monsters.wyvern_riding.elemental_damage = 0;
new_player.small_monsters.wyvern_riding.ailment_damage = 0;
new_player.small_monsters.poison = {};
new_player.small_monsters.poison.total_damage = 0;
@@ -74,6 +74,18 @@ function player.new(player_id, player_name, player_master_rank, player_hunter_ra
new_player.small_monsters.blast.elemental_damage = 0;
new_player.small_monsters.blast.ailment_damage = 0;
new_player.small_monsters.endemic_life = {};
new_player.small_monsters.endemic_life.total_damage = 0;
new_player.small_monsters.endemic_life.physical_damage = 0;
new_player.small_monsters.endemic_life.elemental_damage = 0;
new_player.small_monsters.endemic_life.ailment_damage = 0;
new_player.small_monsters.other = {};
new_player.small_monsters.other.total_damage = 0;
new_player.small_monsters.other.physical_damage = 0;
new_player.small_monsters.other.elemental_damage = 0;
new_player.small_monsters.other.ailment_damage = 0;
new_player.large_monsters = {};
new_player.large_monsters.total_damage = 0;
@@ -105,11 +117,11 @@ function player.new(player_id, player_name, player_master_rank, player_hunter_ra
new_player.large_monsters.otomo.elemental_damage = 0;
new_player.large_monsters.otomo.ailment_damage = 0;
new_player.large_monsters.monster = {};
new_player.large_monsters.monster.total_damage = 0;
new_player.large_monsters.monster.physical_damage = 0;
new_player.large_monsters.monster.elemental_damage = 0;
new_player.large_monsters.monster.ailment_damage = 0;
new_player.large_monsters.wyvern_riding = {};
new_player.large_monsters.wyvern_riding.total_damage = 0;
new_player.large_monsters.wyvern_riding.physical_damage = 0;
new_player.large_monsters.wyvern_riding.elemental_damage = 0;
new_player.large_monsters.wyvern_riding.ailment_damage = 0;
new_player.large_monsters.poison = {};
new_player.large_monsters.poison.total_damage = 0;
@@ -123,6 +135,18 @@ function player.new(player_id, player_name, player_master_rank, player_hunter_ra
new_player.large_monsters.blast.elemental_damage = 0;
new_player.large_monsters.blast.ailment_damage = 0;
new_player.large_monsters.endemic_life = {};
new_player.large_monsters.endemic_life.total_damage = 0;
new_player.large_monsters.endemic_life.physical_damage = 0;
new_player.large_monsters.endemic_life.elemental_damage = 0;
new_player.large_monsters.endemic_life.ailment_damage = 0;
new_player.large_monsters.other = {};
new_player.large_monsters.other.total_damage = 0;
new_player.large_monsters.other.physical_damage = 0;
new_player.large_monsters.other.elemental_damage = 0;
new_player.large_monsters.other.ailment_damage = 0;
new_player.display = {};
new_player.display.total_damage = 0;
new_player.display.physical_damage = 0;
@@ -156,25 +180,27 @@ function player.update_damage(_player, damage_source_type, is_large_monster, dam
if is_large_monster then
player_monster_type = _player.large_monsters;
end
if damage_source_type == "player" then
player.merge_damage(player_monster_type, damage_object);
elseif damage_source_type == "bomb" then
player.merge_damage(player_monster_type.bombs, damage_object);
elseif damage_source_type == "kunai" then
player.merge_damage(player_monster_type.kunai, damage_object);
elseif damage_source_type == "wyvernblast" then
player.merge_damage(player_monster_type, damage_object);
elseif damage_source_type == "installation" then
player.merge_damage(player_monster_type.installations, damage_object);
elseif damage_source_type == "otomo" then
player.merge_damage(player_monster_type.otomo, damage_object);
elseif damage_source_type == "monster" then
player.merge_damage(player_monster_type.monster, damage_object);
elseif damage_source_type == "wyvern riding" then
player.merge_damage(player_monster_type.wyvern_riding, damage_object);
elseif damage_source_type == "poison" then
player.merge_damage(player_monster_type.poison, damage_object);
elseif damage_source_type == "blast" then
player.merge_damage(player_monster_type.blast, damage_object);
elseif damage_source_type == "endemic life" then
player.merge_damage(player_monster_type.endemic_life, damage_object);
elseif damage_source_type == "other" then
player.merge_damage(player_monster_type.other, damage_object);
else
player.merge_damage(player_monster_type, damage_object);
end
@@ -214,9 +240,9 @@ function player.update_display(_player)
if cached_config.tracked_damage_types.otomo_damage then
player.merge_damage(_player.display, _player.small_monsters.otomo);
end
if cached_config.tracked_damage_types.monster_damage then
player.merge_damage(_player.display, _player.small_monsters.monster);
if cached_config.tracked_damage_types.wyvern_riding_damage then
player.merge_damage(_player.display, _player.small_monsters.wyvern_riding);
end
if cached_config.tracked_damage_types.poison_damage then
@@ -226,6 +252,14 @@ function player.update_display(_player)
if cached_config.tracked_damage_types.blast_damage then
player.merge_damage(_player.display, _player.small_monsters.blast);
end
if cached_config.tracked_damage_types.endemic_life_damage then
player.merge_damage(_player.display, _player.small_monsters.endemic_life);
end
if cached_config.tracked_damage_types.other_damage then
player.merge_damage(_player.display, _player.small_monsters.other);
end
end
if cached_config.tracked_monster_types.large_monsters then
@@ -248,9 +282,9 @@ function player.update_display(_player)
if cached_config.tracked_damage_types.otomo_damage then
player.merge_damage(_player.display, _player.large_monsters.otomo);
end
if cached_config.tracked_damage_types.monster_damage then
player.merge_damage(_player.display, _player.large_monsters.monster);
if cached_config.tracked_damage_types.wyvern_riding_damage then
player.merge_damage(_player.display, _player.large_monsters.wyvern_riding);
end
if cached_config.tracked_damage_types.poison_damage then
@@ -260,6 +294,14 @@ function player.update_display(_player)
if cached_config.tracked_damage_types.blast_damage then
player.merge_damage(_player.display, _player.large_monsters.blast);
end
if cached_config.tracked_damage_types.endemic_life_damage then
player.merge_damage(_player.display, _player.large_monsters.endemic_life);
end
if cached_config.tracked_damage_types.other_damage then
player.merge_damage(_player.display, _player.large_monsters.other);
end
end
end

View File

@@ -3752,9 +3752,11 @@ function config.init()
kunai_damage = true,
installation_damage = true, -- hunting_installations like ballista, cannon, etc.
otomo_damage = true,
monster_damage = true, -- note that installations during narwa fight are counted as monster damage
wyvern_riding_damage = true,
poison_damage = true,
blast_damage = true,
endemic_life_damage = true,
other_damage = true -- note that installations during narwa fight are counted as other damage
},
spacing = {

View File

@@ -366,7 +366,11 @@ language.default_language = {
menu_font_change_disclaimer = "Changing Language and Menu Font Size several times will cause a crash!",
master_rank = "Master Rank"
master_rank = "Master Rank",
other_damage = "Other Damage",
wyvern_riding_damage = "Wyvern Riding Damage",
endemic_life_damage = "Endemic Life Damage"
}
};

View File

@@ -807,7 +807,6 @@ function ailments.apply_ailment_damage(monster, ailment_type, ailment_damage)
local damage = ailment_damage;
-- split up damage according to ratio of buildup on boss for this type
xy = "." .. tostring(buildup_share);
for attacker_id, percentage in pairs(buildup_share) do
local damage_portion = damage * percentage;

View File

@@ -15177,8 +15177,8 @@ function customization_menu.draw()
damage_meter_UI_changed = damage_meter_UI_changed or changed;
tracked_damage_types_changed = tracked_damage_types_changed or changed;
changed, config.current_config.damage_meter_UI.tracked_damage_types.monster_damage = imgui.checkbox(language.current_language
.customization_menu.monster_damage, config.current_config.damage_meter_UI.tracked_damage_types.monster_damage);
changed, config.current_config.damage_meter_UI.tracked_damage_types.wyvern_riding_damage = imgui.checkbox(language.current_language
.customization_menu.wyvern_riding_damage, config.current_config.damage_meter_UI.tracked_damage_types.wyvern_riding_damage);
config_changed = config_changed or changed;
damage_meter_UI_changed = damage_meter_UI_changed or changed;
tracked_damage_types_changed = tracked_damage_types_changed or changed;
@@ -15195,6 +15195,18 @@ function customization_menu.draw()
damage_meter_UI_changed = damage_meter_UI_changed or changed;
tracked_damage_types_changed = tracked_damage_types_changed or changed;
changed, config.current_config.damage_meter_UI.tracked_damage_types.endemic_life_damage = imgui.checkbox(language.current_language
.customization_menu.endemic_life_damage, config.current_config.damage_meter_UI.tracked_damage_types.endemic_life_damage);
config_changed = config_changed or changed;
damage_meter_UI_changed = damage_meter_UI_changed or changed;
tracked_damage_types_changed = tracked_damage_types_changed or changed;
changed, config.current_config.damage_meter_UI.tracked_damage_types.other_damage = imgui.checkbox(language.current_language
.customization_menu.other_damage, config.current_config.damage_meter_UI.tracked_damage_types.other_damage);
config_changed = config_changed or changed;
damage_meter_UI_changed = damage_meter_UI_changed or changed;
tracked_damage_types_changed = tracked_damage_types_changed or changed;
if tracked_damage_types_changed then
for player_id, _player in pairs(player.list) do
player.update_display(_player);

View File

@@ -88,6 +88,7 @@
"enable_for": "Enable for",
"enabled": "Enabled",
"endemic_life_UI": "Endemic Life UI",
"endemic_life_damage": "Endemic Life Damage",
"family": "Family",
"fight_time": "Fight Time",
"filter": "Filter",
@@ -156,6 +157,7 @@
"offset_is_relative_to_parts": "Offset is Relative to Parts",
"opacity_falloff": "Opacity Falloff",
"orientation": "Orientation",
"other_damage": "Other Damage",
"other_players": "Other Players",
"otomo_damage": "Otomo Damage",
"part_health": "Part Health",
@@ -223,6 +225,7 @@
"width": "Width",
"word_player": "Word \"Player\"",
"world_offset": "World Offset",
"wyvern_riding_damage": "Wyvern Riding Damage",
"x": "X",
"y": "Y",
"z": "Z"

View File

@@ -88,6 +88,7 @@
"enable_for": "표시 대상",
"enabled": "사용함",
"endemic_life_UI": "환경생물 UI",
"endemic_life_damage": "Endemic Life Damage",
"family": "글꼴",
"fight_time": "전투 시간",
"filter": "필터",
@@ -156,6 +157,7 @@
"offset_is_relative_to_parts": "옵셋을 부위 기준으로",
"opacity_falloff": "투명도 감소",
"orientation": "방향",
"other_damage": "Other Damage",
"other_players": "다른 헌터",
"otomo_damage": "동반자 대미지",
"part_health": "Part Health",
@@ -223,6 +225,7 @@
"width": "너비",
"word_player": "\"헌터\" 명칭",
"world_offset": "전역 옵셋",
"wyvern_riding_damage": "Wyvern Riding Damage",
"x": "X",
"y": "Y",
"z": "Z"

View File

@@ -88,6 +88,7 @@
"enable_for": "Показывать для",
"enabled": "Включить",
"endemic_life_UI": "Интерфейс местной живности",
"endemic_life_damage": "Endemic Life Damage",
"family": "Семейство",
"fight_time": "Время в бою",
"filter": "Фильтр",
@@ -156,6 +157,7 @@
"offset_is_relative_to_parts": "Сдвиг относителен к частям тела",
"opacity_falloff": "Увеличение прозрачности от расстояния",
"orientation": "Ориентация",
"other_damage": "Other Damage",
"other_players": "Другие игроки",
"otomo_damage": "Урон от отомо",
"part_health": "Здоровье части",
@@ -223,6 +225,7 @@
"width": "Ширина",
"word_player": "Слово \"Игрок\"",
"world_offset": "Сдвиг в игровом пространстве",
"wyvern_riding_damage": "Wyvern Riding Damage",
"x": "X",
"y": "Y",
"z": "Z"

View File

@@ -88,6 +88,7 @@
"enable_for": "开启",
"enabled": "开启",
"endemic_life_UI": "环境生物UI",
"endemic_life_damage": "Endemic Life Damage",
"family": "字体",
"fight_time": "战斗时间",
"filter": "筛选器",
@@ -156,6 +157,7 @@
"offset_is_relative_to_parts": "根据部位偏移",
"opacity_falloff": "透明度增加",
"orientation": "方向",
"other_damage": "Other Damage",
"other_players": "其他玩家",
"otomo_damage": "随从伤害",
"part_health": "Part Health",
@@ -223,6 +225,7 @@
"width": "宽度",
"word_player": "名称 \"玩家\"",
"world_offset": "整体偏移",
"wyvern_riding_damage": "Wyvern Riding Damage",
"x": "X轴",
"y": "Y轴",
"z": "Z轴"

View File

@@ -88,6 +88,7 @@
"enable_for": "啟用對象",
"enabled": "啟用",
"endemic_life_UI": "環境生物 UI",
"endemic_life_damage": "Endemic Life Damage",
"family": "字體",
"fight_time": "戰鬥時間",
"filter": "篩選器",
@@ -156,6 +157,7 @@
"offset_is_relative_to_parts": "與部位顯示相對偏移",
"opacity_falloff": "透明度提高",
"orientation": "對齊方式",
"other_damage": "Other Damage",
"other_players": "其他玩家",
"otomo_damage": "隨從傷害",
"part_health": "Part Health",
@@ -223,6 +225,7 @@
"width": "寬度",
"word_player": "名稱 \"玩家\"",
"world_offset": "地圖中的位置",
"wyvern_riding_damage": "Wyvern Riding Damage",
"x": "X軸",
"y": "Y軸",
"z": "Z軸"