FatBoy-DOTC
4 months ago
7 changed files with 290 additions and 148 deletions
@ -0,0 +1,256 @@ |
|||||||
|
package engine.gameManager; |
||||||
|
|
||||||
|
import engine.Enum; |
||||||
|
import engine.InterestManagement.InterestManager; |
||||||
|
import engine.InterestManagement.WorldGrid; |
||||||
|
import engine.math.Vector3f; |
||||||
|
import engine.math.Vector3fImmutable; |
||||||
|
import engine.objects.*; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.concurrent.ThreadLocalRandom; |
||||||
|
|
||||||
|
public class StrongholdManager { |
||||||
|
|
||||||
|
public static void processStrongholds() { |
||||||
|
//end all current stronghold activities
|
||||||
|
ArrayList<Mine> mines = Mine.getMines(); |
||||||
|
for(Mine mine : mines){ |
||||||
|
if (mine.isStronghold) |
||||||
|
StrongholdManager.EndStronghold(mine); |
||||||
|
} |
||||||
|
|
||||||
|
//process strongholds selecting 2 randomly to become active
|
||||||
|
int count = 0; |
||||||
|
while (count < 2) { |
||||||
|
int random = ThreadLocalRandom.current().nextInt(1, mines.size()) - 1; |
||||||
|
Mine mine = mines.get(random); |
||||||
|
if (mine != null) { |
||||||
|
if (!mine.isActive && !mine.isStronghold) { |
||||||
|
StartStronghold(mine); |
||||||
|
count++; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static void StartStronghold(Mine mine){ |
||||||
|
|
||||||
|
//remove buildings
|
||||||
|
Building tower = BuildingManager.getBuilding(mine.getBuildingID()); |
||||||
|
if(tower == null) |
||||||
|
return; |
||||||
|
|
||||||
|
mine.isStronghold = true; |
||||||
|
mine.strongholdMobs = new ArrayList<>(); |
||||||
|
mine.oldBuildings = new HashMap<>(); |
||||||
|
|
||||||
|
Zone mineZone = ZoneManager.findSmallestZone(tower.loc); |
||||||
|
for(Building building : mineZone.zoneBuildingSet){ |
||||||
|
mine.oldBuildings.put(building.getObjectUUID(),building.meshUUID); |
||||||
|
building.setMeshUUID(407650); |
||||||
|
building.setMeshScale(new Vector3f(0,0,0)); |
||||||
|
InterestManager.setObjectDirty(building); |
||||||
|
WorldGrid.updateObject(building); |
||||||
|
} |
||||||
|
|
||||||
|
//update tower to become stronghold mesh
|
||||||
|
tower.setMeshUUID(getStrongholdMeshID(mine.getParentZone())); |
||||||
|
tower.setMeshScale(new Vector3f(1,1,1)); |
||||||
|
InterestManager.setObjectDirty(tower); |
||||||
|
WorldGrid.updateObject(tower); |
||||||
|
|
||||||
|
//create elite mobs
|
||||||
|
for(int i = 0; i < 10; i++){ |
||||||
|
Mob guard = Mob.createMob(getStrongholdGuardianID(mine.getParentZone()), Vector3fImmutable.getRandomPointOnCircle(tower.loc,30), Guild.getErrantGuild(),true,mineZone,null,0, "Elite Guardian",65); |
||||||
|
if(guard != null){ |
||||||
|
guard.equipmentSetID = getStrongholdMobEquipSetID(guard.getMobBaseID()); |
||||||
|
guard.runAfterLoad(); |
||||||
|
guard.setLevel((short)65); |
||||||
|
guard.setResists(new Resists("Elite")); |
||||||
|
guard.healthMax = 12500; |
||||||
|
guard.setHealth(guard.healthMax); |
||||||
|
guard.spawnTime = 1000000000; |
||||||
|
guard.BehaviourType = Enum.MobBehaviourType.Aggro; |
||||||
|
guard.maxDamageHandOne = 1550; |
||||||
|
guard.minDamageHandOne = 750; |
||||||
|
guard.atrHandOne = 1800; |
||||||
|
guard.defenseRating = 2200; |
||||||
|
InterestManager.setObjectDirty(guard); |
||||||
|
mine.strongholdMobs.add(guard); |
||||||
|
LootManager.GenerateStrongholdLoot(guard,false); |
||||||
|
} |
||||||
|
if(guard!= null && guard.level < 60) |
||||||
|
guard.despawn(); |
||||||
|
} |
||||||
|
//create stronghold commander
|
||||||
|
Mob commander = Mob.createMob(getStrongholdCommanderID(mine.getParentZone()), tower.loc,Guild.getErrantGuild(),true,mineZone,null,0, "Guardian Commander",75); |
||||||
|
if(commander != null){ |
||||||
|
commander.equipmentSetID = getStrongholdMobEquipSetID(commander.getMobBaseID()); |
||||||
|
commander.runAfterLoad(); |
||||||
|
commander.setLevel((short)75); |
||||||
|
commander.setResists(new Resists("Elite")); |
||||||
|
commander.healthMax = 50000; |
||||||
|
commander.setHealth(commander.healthMax); |
||||||
|
commander.spawnTime = 1000000000; |
||||||
|
commander.BehaviourType = Enum.MobBehaviourType.Aggro; |
||||||
|
commander.maxDamageHandOne = 3500; |
||||||
|
commander.minDamageHandOne = 1500; |
||||||
|
commander.atrHandOne = 3500; |
||||||
|
commander.defenseRating = 3500; |
||||||
|
commander.mobPowers.clear(); |
||||||
|
commander.mobPowers.put(563107033,40); //grounding shot
|
||||||
|
commander.mobPowers.put(429032838,40); // gravechill
|
||||||
|
commander.mobPowers.put(429413547,40); // grasp of thurin
|
||||||
|
commander.StrongholdCommander = true; |
||||||
|
InterestManager.setObjectDirty(commander); |
||||||
|
mine.strongholdMobs.add(commander); |
||||||
|
LootManager.GenerateStrongholdLoot(commander,true); |
||||||
|
} |
||||||
|
|
||||||
|
mine.setActive(true); |
||||||
|
tower.setProtectionState(Enum.ProtectionState.PROTECTED); |
||||||
|
} |
||||||
|
|
||||||
|
public static void EndStronghold(Mine mine){ |
||||||
|
|
||||||
|
//restore the buildings
|
||||||
|
Building tower = BuildingManager.getBuilding(mine.getBuildingID()); |
||||||
|
if(tower == null) |
||||||
|
return; |
||||||
|
|
||||||
|
mine.isStronghold = false; |
||||||
|
|
||||||
|
//get rid of the mobs
|
||||||
|
for(Mob mob : mine.strongholdMobs) { |
||||||
|
mob.despawn(); |
||||||
|
mob.removeFromCache(); |
||||||
|
} |
||||||
|
|
||||||
|
//restore the buildings
|
||||||
|
Zone mineZone = ZoneManager.findSmallestZone(tower.loc); |
||||||
|
for(Building building : mineZone.zoneBuildingSet){ |
||||||
|
if(mine.oldBuildings.containsKey(building.getObjectUUID())) { |
||||||
|
building.setMeshUUID(mine.oldBuildings.get(building.getObjectUUID())); |
||||||
|
building.setMeshScale(new Vector3f(1, 1, 1)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
//update tower to become Mine Tower again
|
||||||
|
tower.setMeshUUID(1500100); |
||||||
|
|
||||||
|
mine.setActive(false); |
||||||
|
tower.setProtectionState(Enum.ProtectionState.NPC); |
||||||
|
} |
||||||
|
|
||||||
|
public static int getStrongholdMeshID(Zone parent){ |
||||||
|
while(!parent.isMacroZone()){ |
||||||
|
parent = parent.getParent(); |
||||||
|
if(parent.getName().toLowerCase().equals("seafloor")){ |
||||||
|
return 0; |
||||||
|
} |
||||||
|
} |
||||||
|
switch(parent.getObjectUUID()){ |
||||||
|
case 197: |
||||||
|
case 234: |
||||||
|
case 178: |
||||||
|
case 122: |
||||||
|
return 814000; //Frost Giant Hall (ICE)
|
||||||
|
case 968: |
||||||
|
case 951: |
||||||
|
case 313: |
||||||
|
case 331: |
||||||
|
return 5001500; // Lich Queens Keep (UNDEAD)
|
||||||
|
case 785: |
||||||
|
case 761: |
||||||
|
case 717: |
||||||
|
case 737: |
||||||
|
return 1306600; // Temple of the Dragon (DESERT)
|
||||||
|
case 353: |
||||||
|
case 371: |
||||||
|
case 388: |
||||||
|
case 532: |
||||||
|
return 564600; // Undead Lord's Keep (SWAMP)
|
||||||
|
} |
||||||
|
return 456100; // small stockade
|
||||||
|
} |
||||||
|
|
||||||
|
public static int getStrongholdGuardianID(Zone parent){ |
||||||
|
switch(parent.getObjectUUID()){ |
||||||
|
case 197: |
||||||
|
case 234: |
||||||
|
case 178: |
||||||
|
case 122: |
||||||
|
return 13528; // Mountain Giant Raider Axe
|
||||||
|
case 968: |
||||||
|
case 951: |
||||||
|
case 313: |
||||||
|
case 331: |
||||||
|
return 13643; // Vampire Spear Warrior
|
||||||
|
case 785: |
||||||
|
case 761: |
||||||
|
case 717: |
||||||
|
case 737: |
||||||
|
return 13802; // Desert Orc Warrior
|
||||||
|
case 353: |
||||||
|
case 371: |
||||||
|
case 388: |
||||||
|
case 532: |
||||||
|
return 12728; // Kolthoss Warrior
|
||||||
|
} |
||||||
|
return 13434; // human sword and board warrior
|
||||||
|
} |
||||||
|
|
||||||
|
public static int getStrongholdCommanderID(Zone parent){ |
||||||
|
switch(parent.getObjectUUID()){ |
||||||
|
case 197: // Storm Giant Crossbow
|
||||||
|
case 234: // Storm Giant Crossbow
|
||||||
|
case 178: // Storm Giant Crossbow
|
||||||
|
case 122: // Storm Giant Crossbow
|
||||||
|
return 13515; |
||||||
|
case 968: // Skeleton Bird Archer
|
||||||
|
case 951: // Skeleton Bird Archer
|
||||||
|
case 313: // Skeleton Bird Archer
|
||||||
|
case 331: // Skeleton Bird Archer
|
||||||
|
return 14280; |
||||||
|
case 785: |
||||||
|
case 761: |
||||||
|
case 717: |
||||||
|
case 737: |
||||||
|
return 13789; // Desert Orc Xbow
|
||||||
|
case 353: |
||||||
|
case 371: |
||||||
|
case 388: |
||||||
|
case 532: |
||||||
|
return 12724; // xbow kolthoss
|
||||||
|
} |
||||||
|
return 13433; |
||||||
|
} |
||||||
|
|
||||||
|
public static int getStrongholdMobEquipSetID(int mobbaseUUID){ |
||||||
|
switch(mobbaseUUID){ |
||||||
|
case 14280: |
||||||
|
return 10790; |
||||||
|
case 13643: |
||||||
|
return 6317; |
||||||
|
case 13515: |
||||||
|
return 7820; |
||||||
|
case 13528: |
||||||
|
return 5966; |
||||||
|
case 13802: |
||||||
|
return 9043; |
||||||
|
case 13789: |
||||||
|
return 9035; |
||||||
|
case 12728: |
||||||
|
return 6826; |
||||||
|
case 12724: |
||||||
|
return 9471; |
||||||
|
case 13434: |
||||||
|
return 6327; |
||||||
|
case 13433: |
||||||
|
return 6900; |
||||||
|
} |
||||||
|
return 0; |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue