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