Browse Source

special hellgate mob AI distance

lakebane
FatBoy-DOTC 3 weeks ago
parent
commit
49ce99fd58
  1. 158
      src/engine/gameManager/HellgateManager.java
  2. 2
      src/engine/objects/PlayerCharacter.java

158
src/engine/gameManager/HellgateManager.java

@ -3,12 +3,12 @@ package engine.gameManager; @@ -3,12 +3,12 @@ package engine.gameManager;
import engine.mobileAI.MobAI;
import engine.mobileAI.utilities.CombatUtilities;
import engine.mobileAI.utilities.MovementUtilities;
import engine.objects.Mob;
import engine.objects.Resists;
import engine.objects.Zone;
import engine.objects.*;
import engine.server.MBServerStatics;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.concurrent.ThreadLocalRandom;
public class HellgateManager {
public static ArrayList<Mob> hellgate_mobs;
@ -23,6 +23,29 @@ public class HellgateManager { @@ -23,6 +23,29 @@ public class HellgateManager {
public static final int hell_portal_4_zone_id = 998;
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(){
compile_mob_list();
}
@ -67,7 +90,7 @@ public class HellgateManager { @@ -67,7 +90,7 @@ public class HellgateManager {
switch(mob.getMobBaseID()){
case 14163: // basic saetor warrior
mob.getCharItemManager().clearInventory();
LootManager.GenerateStrongholdLoot(mob,false,false);
SpecialLootHandler(mob,false,false);
mob.setResists(new Resists("Elite"));
mob.healthMax = 8500;
mob.setHealth(mob.healthMax);
@ -75,7 +98,7 @@ public class HellgateManager { @@ -75,7 +98,7 @@ public class HellgateManager {
break;
case 12770: // minotaur mini boss
mob.getCharItemManager().clearInventory();
LootManager.GenerateStrongholdLoot(mob,true,false);
SpecialLootHandler(mob,true,false);
mob.setResists(new Resists("Elite"));
mob.healthMax = 12500;
mob.setHealth(mob.healthMax);
@ -83,7 +106,7 @@ public class HellgateManager { @@ -83,7 +106,7 @@ public class HellgateManager {
break;
case 14180: // mordoth, son of morlock
mob.getCharItemManager().clearInventory();
LootManager.GenerateStrongholdLoot(mob,false,true);
SpecialLootHandler(mob,false,true);
mob.setResists(new Resists("Elite"));
mob.healthMax = mob.mobBase.getHealthMax();
mob.setHealth(mob.healthMax);
@ -103,6 +126,7 @@ public class HellgateManager { @@ -103,6 +126,7 @@ public class HellgateManager {
mob.respawn();
}
mob.setHealth(mob.healthMax);
SpecialLootHandler(mob,false,false);
}
for(Mob mob : hellgate_mini_bosses){
if(!mob.isAlive()){
@ -112,6 +136,7 @@ public class HellgateManager { @@ -112,6 +136,7 @@ public class HellgateManager {
mob.respawn();
}
mob.setHealth(mob.healthMax);
SpecialLootHandler(mob,true,false);
}
if(!hellgate_boss.isAlive()){
if(!hellgate_boss.despawned){
@ -120,6 +145,7 @@ public class HellgateManager { @@ -120,6 +145,7 @@ public class HellgateManager {
hellgate_boss.respawn();
}
hellgate_boss.setHealth(hellgate_boss.healthMax);
SpecialLootHandler(hellgate_boss,false,true);
}
public static void SpecialMobAIHandler(Mob mob){
@ -139,9 +165,125 @@ public class HellgateManager { @@ -139,9 +165,125 @@ public class HellgateManager {
if(mob.combatTarget != null)
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.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);
}
}
}

2
src/engine/objects/PlayerCharacter.java

@ -5159,7 +5159,7 @@ public class PlayerCharacter extends AbstractCharacter { @@ -5159,7 +5159,7 @@ public class PlayerCharacter extends AbstractCharacter {
this.timestamps.put("SetDirty", System.currentTimeMillis());
}else if (this.timestamps.get("SetDirty") + 5000L < System.currentTimeMillis()){
InterestManager.setObjectDirty(this);
this.setDirtyLoad(true);
InterestManager.reloadCharacter(this,false);
this.timestamps.put("SetDirty", System.currentTimeMillis());
}

Loading…
Cancel
Save