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 ) ;
}
}
}