diff --git a/src/engine/gameManager/HellgateManager.java b/src/engine/gameManager/HellgateManager.java index 3f97c726..844ad0d8 100644 --- a/src/engine/gameManager/HellgateManager.java +++ b/src/engine/gameManager/HellgateManager.java @@ -1,7 +1,121 @@ package engine.gameManager; +import engine.objects.Mob; +import engine.objects.Resists; +import engine.objects.Zone; +import engine.server.MBServerStatics; + +import java.util.ArrayList; + public class HellgateManager { + public static ArrayList hellgate_mobs; + public static ArrayList hellgate_mini_bosses; + public static Mob hellgate_boss; + + public static Long hellgate_time_completed = 0L; + public static final int citadel_ruins_zone_id = 993; + public static final int hell_portal_1_zone_id = 994; + public static final int hell_portal_2_zone_id = 996; + public static final int hell_portal_3_zone_id = 997; + public static final int hell_portal_4_zone_id = 998; + + public static boolean initialized = false; + public static void confiureHellgate(){ + compile_mob_list(); + } public static void pulseHellgates(){ + if(!initialized){ + confiureHellgate(); + initialized = true; + return; + } + + if(hellgate_mobs == null) { + return; + } + if(hellgate_mini_bosses == null) { + return; + } + if(hellgate_boss == null){ + return; + } + + if(!hellgate_boss.isAlive() && hellgate_time_completed == 0L) + hellgate_time_completed = System.currentTimeMillis(); + if(hellgate_time_completed != 0L && System.currentTimeMillis() > hellgate_time_completed + MBServerStatics.THIRTY_MINUTES){ + ResetHellgate(); + } } + + public static void compile_mob_list(){ + if(hellgate_mobs == null) { + hellgate_mobs =new ArrayList<>(); + } + if(hellgate_mini_bosses == null) { + hellgate_mini_bosses =new ArrayList<>(); + } + Zone hellgate_zone = ZoneManager.getZoneByZoneID(citadel_ruins_zone_id); + if(hellgate_zone == null) + return; + + for(Mob mob : hellgate_zone.zoneMobSet){ + switch(mob.getMobBaseID()){ + case 14163: // basic saetor warrior + mob.getCharItemManager().clearInventory(); + LootManager.GenerateStrongholdLoot(mob,false,false); + mob.setResists(new Resists("Elite")); + mob.healthMax = 8500; + mob.setHealth(mob.healthMax); + hellgate_mobs.add(mob); + break; + case 12770: // minotaur mini boss + mob.getCharItemManager().clearInventory(); + LootManager.GenerateStrongholdLoot(mob,true,false); + mob.setResists(new Resists("Elite")); + mob.healthMax = 12500; + mob.setHealth(mob.healthMax); + hellgate_mini_bosses.add(mob); + break; + case 14180: // mordoth, son of morlock + mob.getCharItemManager().clearInventory(); + LootManager.GenerateStrongholdLoot(mob,false,true); + mob.setResists(new Resists("Elite")); + mob.healthMax = mob.mobBase.getHealthMax(); + mob.setHealth(mob.healthMax); + hellgate_boss = mob; + break; + } + } + } + + public static void ResetHellgate(){ + hellgate_time_completed = 0L; + for(Mob mob : hellgate_mobs){ + if(!mob.isAlive()){ + if(!mob.despawned){ + mob.despawn(); + } + mob.respawn(); + } + mob.setHealth(mob.healthMax); + } + for(Mob mob : hellgate_mini_bosses){ + if(!mob.isAlive()){ + if(!mob.despawned){ + mob.despawn(); + } + mob.respawn(); + } + mob.setHealth(mob.healthMax); + } + if(!hellgate_boss.isAlive()){ + if(!hellgate_boss.despawned){ + hellgate_boss.despawn(); + } + hellgate_boss.respawn(); + } + hellgate_boss.setHealth(hellgate_boss.healthMax); + } + }