2025-03-16 13:48:39 -05:00
package engine.gameManager ;
import engine.Enum ;
import engine.InterestManagement.WorldGrid ;
2025-03-16 14:21:13 -05:00
import engine.net.Dispatch ;
2025-03-16 13:48:39 -05:00
import engine.net.DispatchMessage ;
2025-03-16 14:21:13 -05:00
import engine.net.client.msg.HotzoneChangeMsg ;
2025-03-16 13:48:39 -05:00
import engine.net.client.msg.chat.ChatSystemMsg ;
2025-03-16 14:21:13 -05:00
import engine.objects.* ;
2025-03-16 13:48:39 -05:00
import org.pmw.tinylog.Logger ;
import java.util.Random ;
2025-03-16 14:21:13 -05:00
import java.util.concurrent.ThreadLocalRandom ;
2025-03-16 13:48:39 -05:00
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 );
2025-03-16 14:21:13 -05:00
created . BehaviourType = Enum . MobBehaviourType . Aggro ;
2025-03-16 13:48:39 -05:00
hotzoneMob = created ;
HellgateManager . SpecialLootHandler ( created , true , true );
2025-03-16 14:21:13 -05:00
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 );
}
2025-03-16 13:48:39 -05:00
}
}