package engine.gameManager; import engine.Enum; import engine.InterestManagement.WorldGrid; import engine.net.Dispatch; import engine.net.DispatchMessage; import engine.net.client.msg.HotzoneChangeMsg; import engine.net.client.msg.chat.ChatSystemMsg; import engine.objects.*; import org.pmw.tinylog.Logger; import java.util.Random; import java.util.concurrent.ThreadLocalRandom; public class HotzoneManager { public static Mob hotzoneMob = null; public static void SelectRandomHotzone(){ if(hotzoneMob != null){ hotzoneMob.killCharacter("Hotzone Over"); } Random random = new Random(); Zone newHotzone = null; while (newHotzone == null || newHotzone.getObjectUUID() == 931 || newHotzone.getObjectUUID() == 913) newHotzone = (Zone) ZoneManager.macroZones.toArray()[random.nextInt(ZoneManager.macroZones.size())]; ZoneManager.setHotZone(newHotzone); int R8UUId = 0; switch(random.nextInt(5)) { case 1: R8UUId = 14152; break; case 2: R8UUId = 14179; break; case 3: R8UUId = 14180; break; case 4: R8UUId = 14220; break; default: R8UUId = 14319; break; } Mob created = Mob.createMob(R8UUId,newHotzone.getLoc(), Guild.getErrantGuild(),true,newHotzone,null,0,"",85); if(created == null){ Logger.error("Failed To Generate Hotzone R8 Mob"); return; } ChatSystemMsg chatMsg = new ChatSystemMsg(null, created.getFirstName() + " has spawned in " + newHotzone.getName() + ". Glory and riches await adventurers who dare defeat it!"); chatMsg.setMessageType(10); chatMsg.setChannel(Enum.ChatChannelType.SYSTEM.getChannelID()); DispatchMessage.dispatchMsgToAll(chatMsg); created.bindLoc = newHotzone.getLoc(); created.runAfterLoad(); WorldGrid.addObject(created,created.bindLoc.x,created.bindLoc.z); created.teleport(created.bindLoc); created.BehaviourType = Enum.MobBehaviourType.Aggro; hotzoneMob = created; HellgateManager.SpecialLootHandler(created,true,true); for(PlayerCharacter player : SessionManager.getAllActivePlayerCharacters()) { HotzoneChangeMsg hcm = new HotzoneChangeMsg(Enum.GameObjectType.Zone.ordinal(), ZoneManager.hotZone.getObjectUUID()); Dispatch dispatch = Dispatch.borrow(player, hcm); DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY); } } public static void GenerateHotzoneEpicLoot(Mob mob){ mob.getCharItemManager().clearInventory(); Random random = new Random(); int roll = random.nextInt(100); int itemId; ItemBase runeBase; if(roll >= 90){ //35 or 40 roll = ThreadLocalRandom.current().nextInt(HellgateManager.static_rune_ids_high.size() + 1); itemId = HellgateManager.static_rune_ids_high.get(0); try { itemId = HellgateManager.static_rune_ids_high.get(roll); } catch (Exception e) { } runeBase = ItemBase.getItemBase(itemId); if (runeBase != null) { MobLoot rune = new MobLoot(mob, runeBase, true); if (rune != null) mob.getCharItemManager().addItemToInventory(rune); } }else if (roll >= 76 && roll <= 89){ //30,35 or 40 roll = ThreadLocalRandom.current().nextInt(HellgateManager.static_rune_ids_mid.size() + 1); itemId = HellgateManager.static_rune_ids_mid.get(0); try { itemId = HellgateManager.static_rune_ids_mid.get(roll); } catch (Exception e) { } runeBase = ItemBase.getItemBase(itemId); if (runeBase != null) { MobLoot rune = new MobLoot(mob, runeBase, true); if (rune != null) mob.getCharItemManager().addItemToInventory(rune); } }else{ //5-30 roll = ThreadLocalRandom.current().nextInt(HellgateManager.static_rune_ids_low.size() + 1); itemId = HellgateManager.static_rune_ids_low.get(0); try { itemId = HellgateManager.static_rune_ids_low.get(roll); } catch (Exception e) { } runeBase = ItemBase.getItemBase(itemId); if (runeBase != null) { MobLoot rune = new MobLoot(mob, runeBase, true); if (rune != null) mob.getCharItemManager().addItemToInventory(rune); } } if(roll >= 95){ //glass int glassRoll = ThreadLocalRandom.current().nextInt(1,101); if(glassRoll < 5){ int glassID = LootManager.rollRandomItem(126); ItemBase glassItem = ItemBase.getItemBase(glassID); if (glassItem != null) { MobLoot glass = new MobLoot(mob, glassItem, true); if (glass != null) mob.getCharItemManager().addItemToInventory(glass); } } } //guard captain roll = ThreadLocalRandom.current().nextInt(LootManager.racial_guard_uuids.size() + 1); itemId = LootManager.racial_guard_uuids.get(0); try { itemId = LootManager.racial_guard_uuids.get(roll); } catch (Exception e) { } runeBase = ItemBase.getItemBase(itemId); if (runeBase != null) { MobLoot rune = new MobLoot(mob, runeBase, true); if (rune != null) mob.getCharItemManager().addItemToInventory(rune); } } }