special hellgate mob AI distance
This commit is contained in:
@@ -3,12 +3,12 @@ package engine.gameManager;
|
|||||||
import engine.mobileAI.MobAI;
|
import engine.mobileAI.MobAI;
|
||||||
import engine.mobileAI.utilities.CombatUtilities;
|
import engine.mobileAI.utilities.CombatUtilities;
|
||||||
import engine.mobileAI.utilities.MovementUtilities;
|
import engine.mobileAI.utilities.MovementUtilities;
|
||||||
import engine.objects.Mob;
|
import engine.objects.*;
|
||||||
import engine.objects.Resists;
|
|
||||||
import engine.objects.Zone;
|
|
||||||
import engine.server.MBServerStatics;
|
import engine.server.MBServerStatics;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
|
|
||||||
public class HellgateManager {
|
public class HellgateManager {
|
||||||
public static ArrayList<Mob> hellgate_mobs;
|
public static ArrayList<Mob> hellgate_mobs;
|
||||||
@@ -23,6 +23,29 @@ public class HellgateManager {
|
|||||||
public static final int hell_portal_4_zone_id = 998;
|
public static final int hell_portal_4_zone_id = 998;
|
||||||
|
|
||||||
public static boolean initialized = false;
|
public static boolean initialized = false;
|
||||||
|
|
||||||
|
public static final ArrayList<Integer> static_rune_ids_low = new ArrayList<>(Arrays.asList(
|
||||||
|
250001, 250002, 250003, 250004, 250005, 250006, 250010, 250011,
|
||||||
|
250012, 250013, 250014, 250015, 250019, 250020, 250021, 250022,
|
||||||
|
250023, 250024, 250028, 250029, 250030, 250031, 250032, 250033,
|
||||||
|
250037, 250038, 250039, 250040, 250041, 250042
|
||||||
|
));
|
||||||
|
|
||||||
|
public static final ArrayList<Integer> static_rune_ids_mid = new ArrayList<>(Arrays.asList(
|
||||||
|
250006, 250007, 250008,
|
||||||
|
250015, 250016, 250017,
|
||||||
|
250024, 250025, 250026,
|
||||||
|
250033, 250034, 250035,
|
||||||
|
250042, 250043, 250044
|
||||||
|
));
|
||||||
|
|
||||||
|
public static final ArrayList<Integer> static_rune_ids_high = new ArrayList<>(Arrays.asList(
|
||||||
|
250007, 250008,
|
||||||
|
250016, 250017,
|
||||||
|
250025, 250026,
|
||||||
|
250034, 250035,
|
||||||
|
250043, 250044
|
||||||
|
));
|
||||||
public static void confiureHellgate(){
|
public static void confiureHellgate(){
|
||||||
compile_mob_list();
|
compile_mob_list();
|
||||||
}
|
}
|
||||||
@@ -67,7 +90,7 @@ public class HellgateManager {
|
|||||||
switch(mob.getMobBaseID()){
|
switch(mob.getMobBaseID()){
|
||||||
case 14163: // basic saetor warrior
|
case 14163: // basic saetor warrior
|
||||||
mob.getCharItemManager().clearInventory();
|
mob.getCharItemManager().clearInventory();
|
||||||
LootManager.GenerateStrongholdLoot(mob,false,false);
|
SpecialLootHandler(mob,false,false);
|
||||||
mob.setResists(new Resists("Elite"));
|
mob.setResists(new Resists("Elite"));
|
||||||
mob.healthMax = 8500;
|
mob.healthMax = 8500;
|
||||||
mob.setHealth(mob.healthMax);
|
mob.setHealth(mob.healthMax);
|
||||||
@@ -75,7 +98,7 @@ public class HellgateManager {
|
|||||||
break;
|
break;
|
||||||
case 12770: // minotaur mini boss
|
case 12770: // minotaur mini boss
|
||||||
mob.getCharItemManager().clearInventory();
|
mob.getCharItemManager().clearInventory();
|
||||||
LootManager.GenerateStrongholdLoot(mob,true,false);
|
SpecialLootHandler(mob,true,false);
|
||||||
mob.setResists(new Resists("Elite"));
|
mob.setResists(new Resists("Elite"));
|
||||||
mob.healthMax = 12500;
|
mob.healthMax = 12500;
|
||||||
mob.setHealth(mob.healthMax);
|
mob.setHealth(mob.healthMax);
|
||||||
@@ -83,7 +106,7 @@ public class HellgateManager {
|
|||||||
break;
|
break;
|
||||||
case 14180: // mordoth, son of morlock
|
case 14180: // mordoth, son of morlock
|
||||||
mob.getCharItemManager().clearInventory();
|
mob.getCharItemManager().clearInventory();
|
||||||
LootManager.GenerateStrongholdLoot(mob,false,true);
|
SpecialLootHandler(mob,false,true);
|
||||||
mob.setResists(new Resists("Elite"));
|
mob.setResists(new Resists("Elite"));
|
||||||
mob.healthMax = mob.mobBase.getHealthMax();
|
mob.healthMax = mob.mobBase.getHealthMax();
|
||||||
mob.setHealth(mob.healthMax);
|
mob.setHealth(mob.healthMax);
|
||||||
@@ -103,6 +126,7 @@ public class HellgateManager {
|
|||||||
mob.respawn();
|
mob.respawn();
|
||||||
}
|
}
|
||||||
mob.setHealth(mob.healthMax);
|
mob.setHealth(mob.healthMax);
|
||||||
|
SpecialLootHandler(mob,false,false);
|
||||||
}
|
}
|
||||||
for(Mob mob : hellgate_mini_bosses){
|
for(Mob mob : hellgate_mini_bosses){
|
||||||
if(!mob.isAlive()){
|
if(!mob.isAlive()){
|
||||||
@@ -112,6 +136,7 @@ public class HellgateManager {
|
|||||||
mob.respawn();
|
mob.respawn();
|
||||||
}
|
}
|
||||||
mob.setHealth(mob.healthMax);
|
mob.setHealth(mob.healthMax);
|
||||||
|
SpecialLootHandler(mob,true,false);
|
||||||
}
|
}
|
||||||
if(!hellgate_boss.isAlive()){
|
if(!hellgate_boss.isAlive()){
|
||||||
if(!hellgate_boss.despawned){
|
if(!hellgate_boss.despawned){
|
||||||
@@ -120,6 +145,7 @@ public class HellgateManager {
|
|||||||
hellgate_boss.respawn();
|
hellgate_boss.respawn();
|
||||||
}
|
}
|
||||||
hellgate_boss.setHealth(hellgate_boss.healthMax);
|
hellgate_boss.setHealth(hellgate_boss.healthMax);
|
||||||
|
SpecialLootHandler(hellgate_boss,false,true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void SpecialMobAIHandler(Mob mob){
|
public static void SpecialMobAIHandler(Mob mob){
|
||||||
@@ -139,9 +165,125 @@ public class HellgateManager {
|
|||||||
if(mob.combatTarget != null)
|
if(mob.combatTarget != null)
|
||||||
MobAI.CheckForAttack(mob);
|
MobAI.CheckForAttack(mob);
|
||||||
|
|
||||||
if(mob.combatTarget == null && mob.loc.distanceSquared(mob.bindLoc) > 100)
|
if(mob.combatTarget == null && mob.loc.distanceSquared(mob.bindLoc) > 1024) {//32 units
|
||||||
mob.teleport(mob.bindLoc);
|
mob.teleport(mob.bindLoc);
|
||||||
|
mob.setCombatTarget(null);
|
||||||
|
MovementUtilities.aiMove(mob,mob.bindLoc,true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void SpecialLootHandler(Mob mob, Boolean commander, Boolean epic){
|
||||||
|
mob.getCharItemManager().clearInventory();
|
||||||
|
int contractRoll = ThreadLocalRandom.current().nextInt(1,101);
|
||||||
|
if(contractRoll <= 25){
|
||||||
|
//generate random contract
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int runeRoll = ThreadLocalRandom.current().nextInt(1,101);
|
||||||
|
ItemBase runeBase = null;
|
||||||
|
int roll;
|
||||||
|
int itemId;
|
||||||
|
if(runeRoll <= 60 && !commander && !epic) {
|
||||||
|
//generate random rune (standard 5-30)
|
||||||
|
roll = ThreadLocalRandom.current().nextInt(static_rune_ids_low.size() + 1);
|
||||||
|
itemId = static_rune_ids_low.get(0);
|
||||||
|
try {
|
||||||
|
itemId = 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(runeRoll <= 50 && commander) {
|
||||||
|
//generate random rune (30-40)
|
||||||
|
roll = ThreadLocalRandom.current().nextInt(static_rune_ids_mid.size() + 1);
|
||||||
|
itemId = static_rune_ids_mid.get(0);
|
||||||
|
try {
|
||||||
|
itemId = 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(runeRoll <= 80 && epic) {
|
||||||
|
//generate random rune (35-40)
|
||||||
|
roll = ThreadLocalRandom.current().nextInt(static_rune_ids_high.size() + 1);
|
||||||
|
itemId = static_rune_ids_high.get(0);
|
||||||
|
try {
|
||||||
|
itemId = 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(commander || epic) {
|
||||||
|
//handle special case for racial guards
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(epic){
|
||||||
|
//handle glass chance for epic
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//handle gold drops
|
||||||
|
int goldDrop;
|
||||||
|
if(!commander && !epic){
|
||||||
|
goldDrop = ThreadLocalRandom.current().nextInt(25000);
|
||||||
|
mob.getCharItemManager().addGoldToInventory(goldDrop,false);
|
||||||
|
}
|
||||||
|
if(commander){
|
||||||
|
goldDrop = ThreadLocalRandom.current().nextInt(100000,250000);
|
||||||
|
mob.getCharItemManager().addGoldToInventory(goldDrop,false);
|
||||||
|
}
|
||||||
|
if(epic){
|
||||||
|
goldDrop = ThreadLocalRandom.current().nextInt(2500000,5000000);
|
||||||
|
mob.getCharItemManager().addGoldToInventory(goldDrop,false);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5159,7 +5159,7 @@ public class PlayerCharacter extends AbstractCharacter {
|
|||||||
this.timestamps.put("SetDirty", System.currentTimeMillis());
|
this.timestamps.put("SetDirty", System.currentTimeMillis());
|
||||||
}else if (this.timestamps.get("SetDirty") + 5000L < System.currentTimeMillis()){
|
}else if (this.timestamps.get("SetDirty") + 5000L < System.currentTimeMillis()){
|
||||||
InterestManager.setObjectDirty(this);
|
InterestManager.setObjectDirty(this);
|
||||||
this.setDirtyLoad(true);
|
InterestManager.reloadCharacter(this,false);
|
||||||
this.timestamps.put("SetDirty", System.currentTimeMillis());
|
this.timestamps.put("SetDirty", System.currentTimeMillis());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user