@ -17,6 +17,7 @@ import engine.objects.*;
import org.pmw.tinylog.Logger ;
import org.pmw.tinylog.Logger ;
import java.util.ArrayList ;
import java.util.ArrayList ;
import java.util.Arrays ;
import java.util.HashMap ;
import java.util.HashMap ;
import java.util.concurrent.ThreadLocalRandom ;
import java.util.concurrent.ThreadLocalRandom ;
@ -34,6 +35,13 @@ public enum LootManager {
public static HashMap < Integer , ArrayList < ModTableEntry > > _modTables = new HashMap < > ( ) ;
public static HashMap < Integer , ArrayList < ModTableEntry > > _modTables = new HashMap < > ( ) ;
public static HashMap < Integer , ArrayList < ModTypeTableEntry > > _modTypeTables = new HashMap < > ( ) ;
public static HashMap < Integer , ArrayList < ModTypeTableEntry > > _modTypeTables = new HashMap < > ( ) ;
public static ArrayList < Integer > vorg_ha_uuids = new ArrayList < > ( Arrays . asList ( new Integer [ ] { 27580 , 27590 , 188500 , 188510 , 188520 , 188530 , 188540 , 188550 , 189510 } ) ) ;
public static ArrayList < Integer > vorg_ma_uuids = new ArrayList < > ( Arrays . asList ( new Integer [ ] { 27570 , 188900 , 188910 , 188920 , 188930 , 188940 , 188950 , 189500 } ) ) ;
public static ArrayList < Integer > vorg_la_uuids = new ArrayList < > ( Arrays . asList ( new Integer [ ] { 27550 , 27560 , 189100 , 189110 , 189120 , 189130 , 189140 , 189150 } ) ) ;
public static ArrayList < Integer > vorg_cloth_uuids = new ArrayList < > ( Arrays . asList ( new Integer [ ] { 27600 , 188700 , 188720 , 189550 , 189560 } ) ) ;
public static ArrayList < Integer > racial_stewards = new ArrayList < > ( Arrays . asList ( new Integer [ ] { 974 , 1064 , 1172 , 1267 , 1368 , 1468 , 1520 , 1528 , 1553 , 1578 , 1617 , 1667 , 1712 } ) ) ;
public static ArrayList < Integer > undead_guards = new ArrayList < > ( Arrays . asList ( new Integer [ ] { 980100 , 980101 , 980102 , 980110 , 980111 } ) ) ;
// Drop Rates
// Drop Rates
public static float NORMAL_DROP_RATE ;
public static float NORMAL_DROP_RATE ;
@ -68,6 +76,30 @@ public enum LootManager {
public static void GenerateMobLoot ( Mob mob ) {
public static void GenerateMobLoot ( Mob mob ) {
if ( mob = = null )
return ;
if ( mob . level = = 85 ) {
MobLoot mithril = new MobLoot ( mob , ItemBase . getItemBase ( 1580021 ) , 1 , true ) ;
mob . getCharItemManager ( ) . addItemToInventory ( mithril ) ;
try {
int stewardRoll = ThreadLocalRandom . current ( ) . nextInt ( 1 , racial_stewards . size ( ) + 1 ) ;
MobLoot steward = new MobLoot ( mob , ItemBase . getItemBase ( ( Integer ) racial_stewards . toArray ( ) [ stewardRoll ] ) , true ) ;
mob . getCharItemManager ( ) . addItemToInventory ( steward ) ;
} catch ( Exception ex ) {
}
try {
int guardRoll = ThreadLocalRandom . current ( ) . nextInt ( 1 , undead_guards . size ( ) + 1 ) ;
MobLoot guard = new MobLoot ( mob , ItemBase . getItemBase ( ( Integer ) undead_guards . toArray ( ) [ guardRoll ] ) , true ) ;
mob . getCharItemManager ( ) . addItemToInventory ( guard ) ;
} catch ( Exception ex ) {
}
return ;
}
//determine if mob is in hotzone
//determine if mob is in hotzone
boolean inHotzone = ZoneManager . inHotZone ( mob . getLoc ( ) ) ;
boolean inHotzone = ZoneManager . inHotZone ( mob . getLoc ( ) ) ;
@ -85,7 +117,13 @@ public enum LootManager {
ItemBase ib = it . getItemBase ( ) ;
ItemBase ib = it . getItemBase ( ) ;
if ( ib = = null )
if ( ib = = null )
break ;
break ;
if ( ib . isDiscRune ( ) | | ib . getName ( ) . toLowerCase ( ) . contains ( "of the gods" ) ) {
if ( ib . getName ( ) . toLowerCase ( ) . contains ( "of the gods" ) ) {
ChatSystemMsg chatMsg = new ChatSystemMsg ( null , mob . getName ( ) + " in " + mob . getParentZone ( ) . getName ( ) + " has found the " + ib . getName ( ) + ". Are you tough enough to take it?" ) ;
chatMsg . setMessageType ( 10 ) ;
chatMsg . setChannel ( Enum . ChatChannelType . SYSTEM . getChannelID ( ) ) ;
DispatchMessage . dispatchMsgToAll ( chatMsg ) ;
}
if ( ib . isDiscRune ( ) ) {
ChatSystemMsg chatMsg = new ChatSystemMsg ( null , mob . getName ( ) + " in " + mob . getParentZone ( ) . getName ( ) + " has found the " + ib . getName ( ) + ". Are you tough enough to take it?" ) ;
ChatSystemMsg chatMsg = new ChatSystemMsg ( null , mob . getName ( ) + " in " + mob . getParentZone ( ) . getName ( ) + " has found the " + ib . getName ( ) + ". Are you tough enough to take it?" ) ;
chatMsg . setMessageType ( 10 ) ;
chatMsg . setMessageType ( 10 ) ;
chatMsg . setChannel ( Enum . ChatChannelType . SYSTEM . getChannelID ( ) ) ;
chatMsg . setChannel ( Enum . ChatChannelType . SYSTEM . getChannelID ( ) ) ;
@ -129,7 +167,7 @@ public enum LootManager {
break ;
break ;
case "ITEM" :
case "ITEM" :
GenerateInventoryDrop ( mob , bse ) ;
GenerateInventoryDrop ( mob , bse , inHotzone ) ;
break ;
break ;
}
}
}
}
@ -171,7 +209,7 @@ public enum LootManager {
if ( itemUUID = = 0 )
if ( itemUUID = = 0 )
return null ;
return null ;
if ( ItemBase . getItemBase ( itemUUID ) . getType ( ) . ordinal ( ) = = Enum . ItemType . RESOURCE . ordinal ( ) ) {
if ( ItemBase . getItemBase ( itemUUID ) . getType ( ) . ordinal ( ) = = Enum . ItemType . RESOURCE . ordinal ( ) & & itemUUID ! = 1580021 ) {
int amount = ThreadLocalRandom . current ( ) . nextInt ( tableRow . minSpawn , tableRow . maxSpawn + 1 ) ;
int amount = ThreadLocalRandom . current ( ) . nextInt ( tableRow . minSpawn , tableRow . maxSpawn + 1 ) ;
return new MobLoot ( mob , ItemBase . getItemBase ( itemUUID ) , amount , false ) ;
return new MobLoot ( mob , ItemBase . getItemBase ( itemUUID ) , amount , false ) ;
}
}
@ -196,6 +234,9 @@ public enum LootManager {
Logger . error ( "Failed to GenerateSuffix for item: " + outItem . getName ( ) ) ;
Logger . error ( "Failed to GenerateSuffix for item: " + outItem . getName ( ) ) ;
}
}
}
}
if ( outItem . getName ( ) . toLowerCase ( ) . contains ( "of the gods" ) & & inHotzone = = false )
return null ;
return outItem ;
return outItem ;
}
}
@ -343,8 +384,24 @@ public enum LootManager {
if ( equipmentRoll > dropChance )
if ( equipmentRoll > dropChance )
continue ;
continue ;
ItemBase genericIB = me . getItemBase ( ) ;
MobLoot ml = new MobLoot ( mob , me . getItemBase ( ) , false ) ;
//if(genericIB.isVorg()){
if ( vorg_cloth_uuids . contains ( genericIB . getUUID ( ) ) ) {
//get random cloth piece
genericIB = ItemBase . getItemBase ( vorg_cloth_uuids . get ( ThreadLocalRandom . current ( ) . nextInt ( 0 , vorg_cloth_uuids . size ( ) - 1 ) ) ) ;
} else if ( vorg_ha_uuids . contains ( genericIB . getUUID ( ) ) ) {
//get random heavy armor piece
genericIB = ItemBase . getItemBase ( vorg_ha_uuids . get ( ThreadLocalRandom . current ( ) . nextInt ( 0 , vorg_ha_uuids . size ( ) - 1 ) ) ) ;
} else if ( vorg_ma_uuids . contains ( genericIB . getUUID ( ) ) ) {
//get random medium armor piece
genericIB = ItemBase . getItemBase ( vorg_ma_uuids . get ( ThreadLocalRandom . current ( ) . nextInt ( 0 , vorg_ma_uuids . size ( ) - 1 ) ) ) ;
} else if ( vorg_la_uuids . contains ( genericIB . getUUID ( ) ) ) {
//get random light armor piece
genericIB = ItemBase . getItemBase ( vorg_la_uuids . get ( ThreadLocalRandom . current ( ) . nextInt ( 0 , vorg_la_uuids . size ( ) - 1 ) ) ) ;
}
mob . spawnTime = ThreadLocalRandom . current ( ) . nextInt ( 300 , 2700 ) ;
//}
MobLoot ml = new MobLoot ( mob , genericIB , false ) ;
if ( ml ! = null & & dropCount < 1 ) {
if ( ml ! = null & & dropCount < 1 ) {
ml . setIsID ( true ) ;
ml . setIsID ( true ) ;
@ -356,7 +413,7 @@ public enum LootManager {
}
}
}
}
public static void GenerateInventoryDrop ( Mob mob , BootySetEntry bse ) {
public static void GenerateInventoryDrop ( Mob mob , BootySetEntry bse , boolean inHotzone ) {
int chanceRoll = ThreadLocalRandom . current ( ) . nextInt ( 1 , 100 + 1 ) ;
int chanceRoll = ThreadLocalRandom . current ( ) . nextInt ( 1 , 100 + 1 ) ;
@ -365,12 +422,23 @@ public enum LootManager {
if ( chanceRoll > bse . dropChance )
if ( chanceRoll > bse . dropChance )
return ;
return ;
ItemBase ib = ItemBase . getItemBase ( bse . itemBase ) ;
if ( ib = = null )
return ;
if ( ib . isDiscRune ( ) ) {
ItemBase newDisc = ItemBase . getItemBase ( ThreadLocalRandom . current ( ) . nextInt ( 3001 , 3049 + 1 ) ) ;
if ( newDisc ! = null ) {
//mob.getInventory().add(new MobLoot(mob, newDisc, true));
mob . getCharItemManager ( ) . addItemToInventory ( new MobLoot ( mob , newDisc , true ) ) ;
return ;
}
}
MobLoot lootItem = new MobLoot ( mob , ItemBase . getItemBase ( bse . itemBase ) , true ) ;
MobLoot lootItem = new MobLoot ( mob , ItemBase . getItemBase ( bse . itemBase ) , true ) ;
if ( lootItem ! = null )
if ( lootItem ! = null )
mob . getCharItemManager ( ) . addItemToInventory ( lootItem ) ;
mob . getCharItemManager ( ) . addItemToInventory ( lootItem ) ;
}
}
public static void peddleFate ( PlayerCharacter playerCharacter , Item gift ) {
public static void peddleFate ( PlayerCharacter playerCharacter , Item gift ) {
//get table ID for the itembase ID
//get table ID for the itembase ID