157 lines
5.8 KiB
Java
157 lines
5.8 KiB
Java
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);
|
|
}
|
|
}
|
|
}
|