213 lines
8.3 KiB
C#
213 lines
8.3 KiB
C#
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
|
|
using DiIiS_NA.GameServer.Core.Types.TagMap;
|
|
using DiIiS_NA.GameServer.GSSystem.AISystem.Brains;
|
|
using DiIiS_NA.GameServer.MessageSystem;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using DiIiS_NA.Core.Logging;
|
|
using DiIiS_NA.Core.MPQ.FileFormats;
|
|
|
|
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
|
|
{
|
|
[HandledSNO(
|
|
ActorSno._skeletonking, //Leoric King
|
|
ActorSno._spiderqueen, //Aranea
|
|
ActorSno._butcher, //Butcher
|
|
ActorSno._maghda, //Maghda
|
|
ActorSno._zoltunkulle, //Zoltun Kulle
|
|
ActorSno._belial_trueform, //Belial (small)
|
|
ActorSno._belial, //Belial (big)
|
|
ActorSno._gluttony, //Gluttony
|
|
ActorSno._siegebreakerdemon, //Siegebreaker
|
|
ActorSno._mistressofpain, //Cydaea
|
|
ActorSno._azmodan, //Azmodan
|
|
ActorSno._bigred_izual, //Izual
|
|
ActorSno._terrordemon_a_unique_1000monster, //Iskatu
|
|
ActorSno._despair, //Despair (Rakanoth)
|
|
ActorSno._diablo, //Diablo
|
|
ActorSno._terrordiablo, //Diablo's shadow
|
|
ActorSno._x1_urzael_boss, //Urzael
|
|
ActorSno._x1_adria_boss, //Adria
|
|
ActorSno._x1_malthael_boss, //Malthael
|
|
//Nephalem Bosses
|
|
ActorSno._x1_lr_boss_mistressofpain, //X1_LR_Boss_MistressofPain
|
|
ActorSno._x1_lr_boss_angel_corrupt_a, //X1_LR_Boss_Angel_Corrupt_A
|
|
ActorSno._x1_lr_boss_creepmob_a, //X1_LR_Boss_creepMob_A
|
|
ActorSno._x1_lr_boss_skeletonsummoner_c, //X1_LR_Boss_SkeletonSummoner_C
|
|
ActorSno._x1_lr_boss_succubus_a, //X1_LR_Boss_Succubus_A
|
|
ActorSno._x1_lr_boss_snakeman_melee_belial, //X1_LR_Boss_Snakeman_Melee_Belial
|
|
ActorSno._x1_lr_boss_terrordemon_a, //X1_LR_Boss_TerrorDemon_A
|
|
ActorSno._p4_lr_boss_sandmonster_turret, //P4_LR_Boss_Sandmonster_Turret
|
|
ActorSno._x1_lr_boss_skeletonking, //x1_LR_Boss_SkeletonKing
|
|
ActorSno._x1_lr_boss_gluttony, //x1_LR_Boss_Gluttony
|
|
ActorSno._x1_lr_boss_despair, //x1_LR_Boss_Despair
|
|
ActorSno._x1_lr_boss_malletdemon, //x1_LR_Boss_MalletDemon
|
|
ActorSno._x1_lr_boss_morluspellcaster_ice, //X1_LR_Boss_morluSpellcaster_Ice
|
|
ActorSno._x1_lr_boss_sandmonster, //X1_LR_Boss_SandMonster
|
|
ActorSno._x1_lr_boss_morluspellcaster_fire, //X1_LR_Boss_morluSpellcaster_Fire
|
|
ActorSno._x1_lr_boss_deathmaiden, //X1_LR_Boss_DeathMaiden
|
|
ActorSno._x1_lr_boss_secret_cow, //X1_LR_Boss_Secret_Cow
|
|
ActorSno._x1_lr_boss_squigglet, //X1_LR_Boss_Squigglet
|
|
ActorSno._x1_lr_boss_sniperangel, //X1_LR_Boss_sniperAngel
|
|
ActorSno._x1_lr_boss_westmarchbrute, //X1_LR_Boss_westmarchBrute
|
|
ActorSno._x1_lr_boss_dark_angel, //X1_LR_Boss_Dark_Angel
|
|
ActorSno._x1_lr_boss_bigred_izual, //X1_LR_Boss_BigRed_Izual
|
|
ActorSno._x1_lr_boss_demonflyermega, //X1_LR_Boss_demonFlyerMega
|
|
ActorSno._x1_lr_boss_ratking_a, //X1_LR_Boss_RatKing_A
|
|
ActorSno._x1_lr_boss_ratking_a_ui, //X1_LR_Boss_RatKing_A_UI
|
|
ActorSno._x1_lr_boss_terrordemon_a_breathminion, //X1_LR_Boss_TerrorDemon_A_BreathMinion
|
|
ActorSno._x1_lr_boss_butcher, //x1_LR_Boss_Butcher
|
|
ActorSno._x1_lr_boss_zoltunkulle, //X1_LR_Boss_ZoltunKulle
|
|
ActorSno._x1_lr_boss_minion_shadowvermin_a, //X1_LR_Boss_Minion_shadowVermin_A
|
|
ActorSno._x1_lr_boss_minion_terrordemon_clone_c, //X1_LR_Boss_Minion_TerrorDemon_Clone_C
|
|
ActorSno._x1_lr_boss_minion_swarm_a, //X1_LR_Boss_Minion_Swarm_A
|
|
ActorSno._x1_lr_boss_minion_electriceel_b //X1_LR_Boss_Minion_electricEel_B
|
|
)/*Act Bosses*/]
|
|
public sealed class Boss : Monster
|
|
{
|
|
private static readonly Logger Logger = LogManager.CreateLogger(nameof(Boss));
|
|
|
|
public Boss(MapSystem.World world, ActorSno sno, TagMap tags)
|
|
: base(world, sno, tags)
|
|
{
|
|
if (sno == ActorSno._zoltunkulle && world.SNO == WorldSno.a2dun_zolt_lobby) SetVisible(false);
|
|
Attributes[GameAttribute.MinimapActive] = true;
|
|
//this.Attributes[GameAttribute.Immune_To_Charm] = true;
|
|
Attributes[GameAttribute.using_Bossbar] = true;
|
|
Attributes[GameAttribute.InBossEncounter] = true;
|
|
Attributes[GameAttribute.Hitpoints_Max] *= GameServerConfig.Instance.BossHealthMultiplier;
|
|
Attributes[GameAttribute.Damage_Weapon_Min, 0] *= GameServerConfig.Instance.BossDamageMultiplier;
|
|
Attributes[GameAttribute.Damage_Weapon_Delta, 0] *= GameServerConfig.Instance.BossDamageMultiplier;
|
|
Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max_Total];
|
|
Attributes[GameAttribute.TeamID] = 10;
|
|
|
|
WalkSpeed *= 0.5f;
|
|
if (Brain is MonsterBrain monsterBrain)
|
|
{
|
|
switch (sno)
|
|
{
|
|
case ActorSno._diablo: //Diablo
|
|
//(Brain as MonsterBrain).RemovePresetPower(30592);
|
|
//(Brain as MonsterBrain).AddPresetPower(136189); //[136189] Diablo_ClawRip
|
|
monsterBrain.AddPresetPower(136223); //Diablo_RingOfFire
|
|
monsterBrain.AddPresetPower(136226); //Diablo_HellSpikes
|
|
;
|
|
|
|
/*
|
|
[199476] Diablo_StompAndStun
|
|
[219598] Diablo_Teleport
|
|
[167560] Diablo_LightningBreath_v2
|
|
[185997] Diablo_ExpandingFireRing
|
|
[169212] Diablo_Smash_Puny_Destructible
|
|
[136828] Diablo_CurseOfAnguish
|
|
[136829] Diablo_CurseOfPain
|
|
[136830] Diablo_CurseOfHate
|
|
[136831] Diablo_CurseOfDestruction
|
|
|
|
[439719] Diablo_LightningBreath_LR_TerrorDemon_Clone
|
|
[214831] Diablo_FireMeteor
|
|
[161174] Diablo_CorruptionShield
|
|
[136219] Diablo_LightningBreath
|
|
[136223] Diablo_RingOfFire
|
|
[136226] Diablo_HellSpikes
|
|
|
|
[214668] Diablo_GetHit
|
|
|
|
[136237] Diablo_ShadowVanish
|
|
[136281] Diablo_ShadowClones
|
|
[142582] Diablo_ShadowVanish_Charge
|
|
[136849] Diablo_ShadowVanish_Grab
|
|
|
|
[141865] Diablo_Phase1Buff
|
|
[136850] Diablo_Phase2Buff
|
|
[136852] Diablo_Phase3Buff
|
|
[478072] Diablo_StompAndStunMB313
|
|
|
|
[478410] Diablo_LightningBreath_Turret_MB313
|
|
[195816] Diablo_Charge
|
|
[428985] Diablo_LightningBreath_LR_TerrorDemon
|
|
[376396] Uber_Gluttony_Gas_Cloud_Diablo
|
|
[375473] Uber_SkeletonKing_Summon_Skeleton_Diablo
|
|
[375493] Uber_Maghda_Summon_Beserker_Diablo
|
|
[365978] Uber_Diablo_StompAndStun
|
|
[375537] Uber_Despair_SummonMinion_Diablo
|
|
[375929] UberDiablo_MirrorImage
|
|
[376039] Uber_Despair_TeleportEnrage_Diablo
|
|
[376043] Uber_ZoltunKulle_SlowTime_Diablo
|
|
[376056] Uber_Despair_Volley_Diablo
|
|
[375439] x1_Uber_Diablo_HellSpikes
|
|
[375904] Diablo_LightningBreath_Uber
|
|
[375905] Diablo_ClawRip_Uber
|
|
[375907] Diablo_RingOfFire_Uber
|
|
[375908] Diablo_ExpandingFireRing_Uber
|
|
|
|
[453765] p43_d1_Diablo_ClawRip
|
|
|
|
[328715] x1_Malthael_Diablo_AIState
|
|
[334760] x1_Malthael_Diablo_TeleportFireNovaLightning
|
|
|
|
|
|
*/
|
|
break;
|
|
case ActorSno._skeletonking: //Leoric King
|
|
monsterBrain.RemovePresetPower(30592);
|
|
monsterBrain.AddPresetPower(30496);
|
|
monsterBrain.AddPresetPower(30504);
|
|
monsterBrain.AddPresetPower(73824);
|
|
monsterBrain.AddPresetPower(79334);
|
|
break;
|
|
case ActorSno._butcher: //Butcher
|
|
monsterBrain.AddPresetPower(83008);
|
|
break;
|
|
case ActorSno._belial_trueform: //Belial (small)
|
|
HasLoot = false;
|
|
break;
|
|
case ActorSno._belial: //Belial (big)
|
|
monsterBrain.AddPresetPower(152540);
|
|
break;
|
|
case ActorSno._maghda: //Maghda
|
|
monsterBrain.AddPresetPower(131744); //summon berserker
|
|
//(Brain as MonsterBrain).AddPresetPower(131745); //mothDust
|
|
monsterBrain.AddPresetPower(131749); //teleport
|
|
break;
|
|
case ActorSno._gluttony: //Gluttony
|
|
monsterBrain.AddPresetPower(93676); //gas cloud
|
|
monsterBrain.AddPresetPower(211292); //slime spawn
|
|
break;
|
|
default:
|
|
Logger.Warn($"Unhandled boss type {sno}");
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Logger.Error($"Boss $[underline red]${GetType().Name}$[/]$ ({sno}) has no monster brain!");
|
|
}
|
|
}
|
|
|
|
public int AntiCCTriggerCount = 0;
|
|
|
|
public override int Quality
|
|
{
|
|
get => (int) SpawnType.Boss;
|
|
set => Logger.Warn("Boss MonsterQuality setter not implemented.");
|
|
// TODO MonsterQuality setter not implemented. Throwing a NotImplementedError is catched as message not beeing implemented and nothing works anymore...
|
|
}
|
|
|
|
|
|
public override bool Reveal(PlayerSystem.Player player)
|
|
{
|
|
if (SNO == ActorSno._terrordemon_a_unique_1000monster)
|
|
{
|
|
Destroy();
|
|
return false;
|
|
}
|
|
|
|
return base.Reveal(player);
|
|
}
|
|
}
|
|
}
|