Initial Stronghold Push
This commit is contained in:
@@ -663,4 +663,27 @@ public enum LootManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void GenerateStrongholdLoot(Mob mob, boolean commander){
|
||||||
|
|
||||||
|
mob.getCharItemManager().clearInventory();
|
||||||
|
|
||||||
|
int multiplier = 1;
|
||||||
|
if(commander)
|
||||||
|
multiplier = 2;
|
||||||
|
|
||||||
|
int high = 500000;
|
||||||
|
int low = 125000;
|
||||||
|
int gold = ThreadLocalRandom.current().nextInt(low, high + 1) * multiplier;
|
||||||
|
|
||||||
|
if (gold > 0) {
|
||||||
|
MobLoot goldAmount = new MobLoot(mob, gold);
|
||||||
|
mob.getCharItemManager().addItemToInventory(goldAmount);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < 3 * multiplier; i++){
|
||||||
|
DropPresent(mob);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -821,6 +821,10 @@ public class Building extends AbstractWorldObject {
|
|||||||
return this.meshScale;
|
return this.meshScale;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setMeshScale(Vector3f scale) {
|
||||||
|
this.meshScale = scale;
|
||||||
|
}
|
||||||
|
|
||||||
public final int getMeshUUID() {
|
public final int getMeshUUID() {
|
||||||
return this.meshUUID;
|
return this.meshUUID;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -220,16 +220,28 @@ public class ItemBase {
|
|||||||
AnniverseryGifts.add(971008);
|
AnniverseryGifts.add(971008);
|
||||||
AnniverseryGifts.add(971009);
|
AnniverseryGifts.add(971009);
|
||||||
AnniverseryGifts.add(971010);
|
AnniverseryGifts.add(971010);
|
||||||
//AnniverseryGifts.add(5101000);
|
AnniverseryGifts.add(5101000);
|
||||||
//AnniverseryGifts.add(5101020);
|
AnniverseryGifts.add(5101020);
|
||||||
//AnniverseryGifts.add(5101100);
|
AnniverseryGifts.add(5101100);
|
||||||
//AnniverseryGifts.add(5101120);
|
AnniverseryGifts.add(5101120);
|
||||||
//AnniverseryGifts.add(5101040);
|
AnniverseryGifts.add(5101040);
|
||||||
//AnniverseryGifts.add(5101140);
|
AnniverseryGifts.add(5101140);
|
||||||
//AnniverseryGifts.add(5101060);
|
AnniverseryGifts.add(5101060);
|
||||||
//AnniverseryGifts.add(5101080);
|
AnniverseryGifts.add(5101080);
|
||||||
|
|
||||||
|
|
||||||
|
//fate peddler presents
|
||||||
|
AnniverseryGifts.add(971012);
|
||||||
|
AnniverseryGifts.add(971013);
|
||||||
|
AnniverseryGifts.add(971014);
|
||||||
|
AnniverseryGifts.add(971015);
|
||||||
|
AnniverseryGifts.add(971016);
|
||||||
|
AnniverseryGifts.add(971017);
|
||||||
|
AnniverseryGifts.add(971018);
|
||||||
|
AnniverseryGifts.add(971019);
|
||||||
|
AnniverseryGifts.add(971020);
|
||||||
|
AnniverseryGifts.add(971021);
|
||||||
|
AnniverseryGifts.add(971022);
|
||||||
|
AnniverseryGifts.add(971023);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getDiscPrice(int uuid) {
|
public static int getDiscPrice(int uuid) {
|
||||||
|
|||||||
@@ -10,8 +10,11 @@
|
|||||||
package engine.objects;
|
package engine.objects;
|
||||||
|
|
||||||
import engine.Enum;
|
import engine.Enum;
|
||||||
|
import engine.InterestManagement.InterestManager;
|
||||||
import engine.InterestManagement.WorldGrid;
|
import engine.InterestManagement.WorldGrid;
|
||||||
import engine.gameManager.*;
|
import engine.gameManager.*;
|
||||||
|
import engine.math.Vector3f;
|
||||||
|
import engine.math.Vector3fImmutable;
|
||||||
import engine.net.ByteBufferWriter;
|
import engine.net.ByteBufferWriter;
|
||||||
import engine.net.client.msg.ErrorPopupMsg;
|
import engine.net.client.msg.ErrorPopupMsg;
|
||||||
import engine.server.MBServerStatics;
|
import engine.server.MBServerStatics;
|
||||||
@@ -58,6 +61,11 @@ public class Mine extends AbstractGameObject {
|
|||||||
public final HashSet<Integer> _playerMemory = new HashSet<>();
|
public final HashSet<Integer> _playerMemory = new HashSet<>();
|
||||||
public ArrayList<PlayerCharacter> affectedPlayers = new ArrayList<>();
|
public ArrayList<PlayerCharacter> affectedPlayers = new ArrayList<>();
|
||||||
|
|
||||||
|
//stronghold stuff
|
||||||
|
public boolean isStronghold = false;
|
||||||
|
public ArrayList<Mob> strongholdMobs;
|
||||||
|
public HashMap<Integer,Integer> oldBuildings;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ResultSet Constructor
|
* ResultSet Constructor
|
||||||
*/
|
*/
|
||||||
@@ -180,9 +188,15 @@ public class Mine extends AbstractGameObject {
|
|||||||
writer.putInt(mine.getObjectType().ordinal());
|
writer.putInt(mine.getObjectType().ordinal());
|
||||||
writer.putInt(mine.getObjectUUID());
|
writer.putInt(mine.getObjectUUID());
|
||||||
writer.putInt(mine.getObjectUUID()); //actually a hash of mine
|
writer.putInt(mine.getObjectUUID()); //actually a hash of mine
|
||||||
writer.putString(mine.mineType.name);
|
if(mine.isStronghold){
|
||||||
|
writer.putString("STRONGHOLD");
|
||||||
|
writer.putString("");
|
||||||
|
}else {
|
||||||
|
writer.putString(mine.mineType.name);
|
||||||
|
writer.putString(mine.capSize + " Man ");
|
||||||
|
}
|
||||||
//writer.putString(mine.zoneName + " " + mine.capSize + " Man ");
|
//writer.putString(mine.zoneName + " " + mine.capSize + " Man ");
|
||||||
writer.putString(mine.capSize + " Man ");
|
|
||||||
writer.putInt(mine.production.hash);
|
writer.putInt(mine.production.hash);
|
||||||
writer.putInt(mine.production.baseProduction);
|
writer.putInt(mine.production.baseProduction);
|
||||||
writer.putInt(mine.getModifiedProductionAmount()); //TODO calculate range penalty here
|
writer.putInt(mine.getModifiedProductionAmount()); //TODO calculate range penalty here
|
||||||
@@ -637,4 +651,88 @@ public class Mine extends AbstractGameObject {
|
|||||||
|
|
||||||
_playerMemory.removeAll(toRemove);
|
_playerMemory.removeAll(toRemove);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void StartStronghold(){
|
||||||
|
|
||||||
|
//remove buildings
|
||||||
|
Building tower = BuildingManager.getBuilding(this.buildingID);
|
||||||
|
if(tower == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this.isStronghold = true;
|
||||||
|
this.strongholdMobs = new ArrayList<>();
|
||||||
|
this.oldBuildings = new HashMap<>();
|
||||||
|
|
||||||
|
Zone mineZone = ZoneManager.findSmallestZone(tower.loc);
|
||||||
|
for(Building building : mineZone.zoneBuildingSet){
|
||||||
|
oldBuildings.put(building.getObjectUUID(),building.meshUUID);
|
||||||
|
building.setMeshUUID(407650);
|
||||||
|
building.setMeshScale(new Vector3f(0,0,0));
|
||||||
|
}
|
||||||
|
|
||||||
|
//update tower to become stronghold mesh
|
||||||
|
tower.setMeshScale(new Vector3f(2,2,2));
|
||||||
|
tower.setMeshUUID(5001500);
|
||||||
|
|
||||||
|
//create elite mobs
|
||||||
|
for(int i = 0; i < 15; i++){
|
||||||
|
Mob guard = Mob.createMob(14315, Vector3fImmutable.getRandomPointOnCircle(tower.loc,30),Guild.getErrantGuild(),true,mineZone,null,0, "Elite",65);
|
||||||
|
if(guard != null){
|
||||||
|
guard.setResists(new Resists("Elite"));
|
||||||
|
guard.healthMax *= 2;
|
||||||
|
guard.setHealth(guard.healthMax);
|
||||||
|
guard.spawnTime = 1000000000;
|
||||||
|
guard.runAfterLoad();
|
||||||
|
InterestManager.setObjectDirty(guard);
|
||||||
|
this.strongholdMobs.add(guard);
|
||||||
|
LootManager.GenerateStrongholdLoot(guard,false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//create stronghold commander
|
||||||
|
Mob commander = Mob.createMob(14315, Vector3fImmutable.getRandomPointOnCircle(tower.loc,30),Guild.getErrantGuild(),true,mineZone,null,0, "Commander",75);
|
||||||
|
if(commander != null){
|
||||||
|
commander.setResists(new Resists("Elite"));
|
||||||
|
commander.healthMax *= 2;
|
||||||
|
commander.setHealth(commander.healthMax);
|
||||||
|
commander.spawnTime = 1000000000;
|
||||||
|
commander.runAfterLoad();
|
||||||
|
InterestManager.setObjectDirty(commander);
|
||||||
|
this.strongholdMobs.add(commander);
|
||||||
|
LootManager.GenerateStrongholdLoot(commander,true);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setActive(true);
|
||||||
|
tower.setProtectionState(Enum.ProtectionState.PROTECTED);
|
||||||
|
}
|
||||||
|
public void EndStronghold(){
|
||||||
|
|
||||||
|
//restore the buildings
|
||||||
|
Building tower = BuildingManager.getBuilding(this.buildingID);
|
||||||
|
if(tower == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this.isStronghold = false;
|
||||||
|
|
||||||
|
//get rid of the mobs
|
||||||
|
for(Mob mob : this.strongholdMobs) {
|
||||||
|
mob.despawn();
|
||||||
|
mob.removeFromCache();
|
||||||
|
}
|
||||||
|
|
||||||
|
//restore the buildings
|
||||||
|
Zone mineZone = ZoneManager.findSmallestZone(tower.loc);
|
||||||
|
for(Building building : mineZone.zoneBuildingSet){
|
||||||
|
if(this.oldBuildings.containsKey(building.getObjectUUID())) {
|
||||||
|
building.setMeshUUID(this.oldBuildings.get(building.getObjectUUID()));
|
||||||
|
building.setMeshScale(new Vector3f(1, 1, 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//update tower to become Mine Tower again
|
||||||
|
tower.setMeshScale(new Vector3f(1,1,1));
|
||||||
|
tower.setMeshUUID(1500100);
|
||||||
|
|
||||||
|
this.setActive(false);
|
||||||
|
tower.setProtectionState(Enum.ProtectionState.NPC);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,6 +49,9 @@ public class Resists {
|
|||||||
case "Dropper":
|
case "Dropper":
|
||||||
setDropperResists();
|
setDropperResists();
|
||||||
break;
|
break;
|
||||||
|
case "Elite":
|
||||||
|
setEliteResists();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
setGenericResists();
|
setGenericResists();
|
||||||
break;
|
break;
|
||||||
@@ -252,6 +255,24 @@ public class Resists {
|
|||||||
this.immuneTo.put(DamageType.Siege, true);
|
this.immuneTo.put(DamageType.Siege, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final void setEliteResists() {
|
||||||
|
this.immuneToAll = false;
|
||||||
|
this.resists.put(DamageType.Slash, 75f);
|
||||||
|
this.resists.put(DamageType.Crush, 75f);
|
||||||
|
this.resists.put(DamageType.Pierce, 75f);
|
||||||
|
this.resists.put(DamageType.Magic, 75f);
|
||||||
|
this.resists.put(DamageType.Bleed, 75f);
|
||||||
|
this.resists.put(DamageType.Poison, 75f);
|
||||||
|
this.resists.put(DamageType.Mental, 75f);
|
||||||
|
this.resists.put(DamageType.Holy, 75f);
|
||||||
|
this.resists.put(DamageType.Unholy, 75f);
|
||||||
|
this.resists.put(DamageType.Lightning, 75f);
|
||||||
|
this.resists.put(DamageType.Fire, 75f);
|
||||||
|
this.resists.put(DamageType.Cold, 75f);
|
||||||
|
this.resists.put(DamageType.Healing, 0f);
|
||||||
|
this.immuneTo.put(DamageType.Siege, true);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create generic resists
|
* Create generic resists
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import org.pmw.tinylog.Logger;
|
|||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
|
|
||||||
import static engine.server.MBServerStatics.MINE_LATE_WINDOW;
|
import static engine.server.MBServerStatics.MINE_LATE_WINDOW;
|
||||||
|
|
||||||
@@ -43,6 +44,9 @@ public class HalfHourlyJobThread implements Runnable {
|
|||||||
for (Mine mine : mines) {
|
for (Mine mine : mines) {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
if(mine.isStronghold)
|
||||||
|
mine.EndStronghold();
|
||||||
|
|
||||||
//handle mines opening on server reboot weird time interval
|
//handle mines opening on server reboot weird time interval
|
||||||
if(LocalDateTime.now().isAfter(LocalDateTime.now().withHour(mine.openHour).withMinute(mine.openMinute))) {
|
if(LocalDateTime.now().isAfter(LocalDateTime.now().withHour(mine.openHour).withMinute(mine.openMinute))) {
|
||||||
if (LocalDateTime.now().isBefore(LocalDateTime.now().withHour(mine.openHour).withMinute(mine.openMinute).plusMinutes(30))) {
|
if (LocalDateTime.now().isBefore(LocalDateTime.now().withHour(mine.openHour).withMinute(mine.openMinute).plusMinutes(30))) {
|
||||||
@@ -67,9 +71,25 @@ public class HalfHourlyJobThread implements Runnable {
|
|||||||
Logger.error("mineID: " + mine.getObjectUUID(), e.toString());
|
Logger.error("mineID: " + mine.getObjectUUID(), e.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//process stronghold
|
||||||
|
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.StartStronghold();
|
||||||
|
count ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Logger.error(e.toString());
|
Logger.error(e.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void mineWindowOpen(Mine mine) {
|
public static void mineWindowOpen(Mine mine) {
|
||||||
|
|||||||
Reference in New Issue
Block a user