optimized
This commit is contained in:
@@ -8,196 +8,132 @@
|
||||
|
||||
|
||||
package engine.workthreads;
|
||||
|
||||
import engine.Enum;
|
||||
import engine.InterestManagement.WorldGrid;
|
||||
import engine.db.archive.DataWarehouse;
|
||||
import engine.db.archive.MineRecord;
|
||||
import engine.gameManager.*;
|
||||
import engine.mobileAI.Threads.MobAIThread;
|
||||
import engine.net.DispatchMessage;
|
||||
import engine.net.MessageDispatcher;
|
||||
import engine.net.client.msg.chat.ChatSystemMsg;
|
||||
import engine.objects.*;
|
||||
import engine.server.MBServerStatics;
|
||||
import engine.server.world.WorldServer;
|
||||
import org.pmw.tinylog.Logger;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import static engine.server.MBServerStatics.MINE_LATE_WINDOW;
|
||||
public class ZergMechanicThread implements Runnable {
|
||||
private final Mine mine;
|
||||
private final Bane bane;
|
||||
private final HashSet<PlayerCharacter> affectedPlayers = new HashSet<>();
|
||||
|
||||
public class ZergMechanicThread implements Runnable {
|
||||
public Bane bane = null;
|
||||
public Mine mine = null;
|
||||
public ArrayList<PlayerCharacter> affectedPlayers = new ArrayList<>();
|
||||
|
||||
public ZergMechanicThread(Bane b, Mine m) {
|
||||
this.mine = m;
|
||||
this.bane = b;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
public ZergMechanicThread(Bane b, Mine m) {
|
||||
this.mine = m;
|
||||
this.bane = b;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (mine != null)
|
||||
RunMineMechanic();
|
||||
if (bane != null)
|
||||
RunBaneMechanic();
|
||||
}
|
||||
}
|
||||
|
||||
public void RunMineMechanic(){
|
||||
while(mine.isActive) {
|
||||
HashSet<AbstractWorldObject> currentPlayers;
|
||||
PlayerCharacter player;
|
||||
|
||||
// Gather current list of players within the zone bounds
|
||||
private void RunMineMechanic() {
|
||||
Building tower = BuildingManager.getBuildingFromCache(mine.getBuildingID());
|
||||
currentPlayers = WorldGrid.getObjectsInRangePartial(tower.loc, Enum.CityBoundsType.GRID.extents * 0.5f, MBServerStatics.MASK_PLAYER);
|
||||
float zoneBounds = Enum.CityBoundsType.GRID.extents * 0.5f;
|
||||
|
||||
for (AbstractWorldObject playerObject : currentPlayers) {
|
||||
while (mine.isActive) {
|
||||
HashSet<AbstractWorldObject> currentPlayers = WorldGrid.getObjectsInRangePartial(tower.loc, zoneBounds, MBServerStatics.MASK_PLAYER);
|
||||
|
||||
if (playerObject == null)
|
||||
continue;
|
||||
for (AbstractWorldObject playerObject : currentPlayers) {
|
||||
PlayerCharacter player = (PlayerCharacter) playerObject;
|
||||
|
||||
player = (PlayerCharacter) playerObject;
|
||||
affectedPlayers.add(player);
|
||||
|
||||
if(!this.affectedPlayers.contains(player))
|
||||
this.affectedPlayers.add(player);
|
||||
|
||||
//ChatManager.chatSystemInfo(player, "TESTING ZERG MECHANIC");
|
||||
if (mine._recentMemory.containsKey(player.getObjectUUID()))
|
||||
mine._recentMemory.remove(player.getObjectUUID());
|
||||
|
||||
if (mine._playerMemory.contains(player.getObjectUUID()))
|
||||
continue;
|
||||
|
||||
mine._playerMemory.add(player.getObjectUUID());
|
||||
|
||||
}
|
||||
boolean updated = false;
|
||||
try {
|
||||
mine.onExit(currentPlayers);
|
||||
} catch (Exception e) {
|
||||
Logger.error(e.getMessage());
|
||||
}
|
||||
mine.dividedPlayers = new HashMap<>();
|
||||
for (Integer playerID : mine._playerMemory) {
|
||||
player = PlayerCharacter.getFromCache(playerID);
|
||||
Guild nation = player.getGuild().getNation();
|
||||
Guild entry;
|
||||
if (mine.dividedPlayers.containsKey(nation)) {
|
||||
mine.dividedPlayers.get(nation).add(playerID);
|
||||
} else {
|
||||
ArrayList<Integer> newEntry = new ArrayList<>();
|
||||
newEntry.add(playerID);
|
||||
mine.dividedPlayers.put(nation, newEntry);
|
||||
mine._playerMemory.add(player.getObjectUUID());
|
||||
}
|
||||
}
|
||||
for (Integer playerID : mine._playerMemory) {
|
||||
player = PlayerCharacter.getFromCache(playerID);
|
||||
if (mine.dividedPlayers.containsKey(player.getGuild().getNation())) {
|
||||
int count = mine.dividedPlayers.get(player.getGuild().getNation()).size();
|
||||
switch (mine.capSize) {
|
||||
case 3:
|
||||
player.ZergMultiplier = ZergManager.getMultiplier3Man(count);
|
||||
break;
|
||||
case 5:
|
||||
player.ZergMultiplier = ZergManager.getMultiplier5Man(count);
|
||||
break;
|
||||
case 10:
|
||||
player.ZergMultiplier = ZergManager.getMultiplier10Man(count);
|
||||
break;
|
||||
case 20:
|
||||
player.ZergMultiplier = ZergManager.getMultiplier20Man(count);
|
||||
break;
|
||||
|
||||
try {
|
||||
mine.onExit(currentPlayers);
|
||||
} catch (Exception e) {
|
||||
Logger.error(e.getMessage());
|
||||
}
|
||||
|
||||
mine.dividedPlayers = new HashMap<>();
|
||||
for (Integer playerID : mine._playerMemory) {
|
||||
PlayerCharacter player = PlayerCharacter.getFromCache(playerID);
|
||||
Guild nation = player.getGuild().getNation();
|
||||
mine.dividedPlayers.computeIfAbsent(nation, k -> new ArrayList<>()).add(playerID);
|
||||
}
|
||||
|
||||
for (Integer playerID : mine._playerMemory) {
|
||||
PlayerCharacter player = PlayerCharacter.getFromCache(playerID);
|
||||
Guild nation = player.getGuild().getNation();
|
||||
|
||||
if (mine.dividedPlayers.containsKey(nation)) {
|
||||
int count = mine.dividedPlayers.get(nation).size();
|
||||
player.ZergMultiplier = ZergManager.getCurrentMultiplier(count, mine.capSize);
|
||||
player.mineAppliedID = mine.getObjectUUID();
|
||||
} else {
|
||||
player.ZergMultiplier = 1.0f;
|
||||
player.mineAppliedID = 0;
|
||||
}
|
||||
player.mineAppliedID = mine.getObjectUUID();
|
||||
} else {
|
||||
player.ZergMultiplier = 1.0f;
|
||||
player.mineAppliedID = 0;
|
||||
}
|
||||
}
|
||||
|
||||
resetZergMultiplier();
|
||||
}
|
||||
|
||||
for(PlayerCharacter player : this.affectedPlayers)
|
||||
player.ZergMultiplier = 1.0f;
|
||||
}
|
||||
private void RunBaneMechanic() {
|
||||
while (bane.getSiegePhase().equals(Enum.SiegePhase.WAR)) {
|
||||
HashSet<AbstractWorldObject> currentPlayers = WorldGrid.getObjectsInRangePartial(bane.getCity().loc, Enum.CityBoundsType.GRID.extents * 2.0f, MBServerStatics.MASK_PLAYER);
|
||||
Guild attacker = bane.getStone().getGuild().getNation();
|
||||
Guild defender = bane.getCity().getGuild().getNation();
|
||||
ArrayList<PlayerCharacter> attackers = new ArrayList<>();
|
||||
ArrayList<PlayerCharacter> defenders = new ArrayList<>();
|
||||
|
||||
public void RunBaneMechanic(){
|
||||
while(bane.getSiegePhase().equals(Enum.SiegePhase.WAR)) {
|
||||
HashSet<AbstractWorldObject> currentPlayers;
|
||||
for (AbstractWorldObject awo : currentPlayers) {
|
||||
PlayerCharacter pc = (PlayerCharacter) awo;
|
||||
affectedPlayers.add(pc);
|
||||
|
||||
currentPlayers = WorldGrid.getObjectsInRangePartial(bane.getCity().loc, Enum.CityBoundsType.GRID.extents * 2.0f, MBServerStatics.MASK_PLAYER);
|
||||
if (!pc.getGuild().getNation().equals(attacker) && !pc.getGuild().getNation().equals(defender)) {
|
||||
pc.teleport(pc.bindLoc);
|
||||
pc.ZergMultiplier = 1.0f;
|
||||
}
|
||||
|
||||
Guild attacker = bane.getStone().getGuild().getNation();
|
||||
Guild defender = bane.getCity().getGuild().getNation();
|
||||
if (pc.getGuild().getNation().equals(attacker))
|
||||
attackers.add(pc);
|
||||
|
||||
ArrayList<PlayerCharacter> attackers = new ArrayList<>();
|
||||
ArrayList<PlayerCharacter> defenders = new ArrayList<>();
|
||||
|
||||
for (AbstractWorldObject awo : currentPlayers) {
|
||||
|
||||
if(!this.affectedPlayers.contains((PlayerCharacter)awo))
|
||||
this.affectedPlayers.add((PlayerCharacter)awo);
|
||||
|
||||
PlayerCharacter pc = (PlayerCharacter) awo;
|
||||
if (!pc.getGuild().getNation().equals(attacker) && !pc.getGuild().getNation().equals(defender)) {
|
||||
pc.teleport(pc.bindLoc);
|
||||
pc.ZergMultiplier = 1.0f;
|
||||
if (pc.getGuild().getNation().equals(defender))
|
||||
defenders.add(pc);
|
||||
}
|
||||
|
||||
if (pc.getGuild().getNation().equals(attacker))
|
||||
attackers.add(pc);
|
||||
for (PlayerCharacter pc : attackers) {
|
||||
pc.ZergMultiplier = ZergManager.getCurrentMultiplier(attackers.size(), bane.capSize);
|
||||
}
|
||||
|
||||
if (pc.getGuild().getNation().equals(defender))
|
||||
defenders.add(pc);
|
||||
}
|
||||
|
||||
//int treeRank = bane.getCity().getTOL().getRank();
|
||||
|
||||
for (PlayerCharacter pc : attackers) {
|
||||
switch(bane.capSize){
|
||||
case 10:
|
||||
pc.ZergMultiplier = ZergManager.getMultiplier10Man(attackers.size());
|
||||
break;
|
||||
case 20:
|
||||
pc.ZergMultiplier = ZergManager.getMultiplier20Man(attackers.size());
|
||||
break;
|
||||
for (PlayerCharacter pc : defenders) {
|
||||
pc.ZergMultiplier = ZergManager.getCurrentMultiplier(defenders.size(), bane.capSize);
|
||||
}
|
||||
}
|
||||
|
||||
for (PlayerCharacter pc : defenders) {
|
||||
switch(bane.capSize){
|
||||
case 10:
|
||||
pc.ZergMultiplier = ZergManager.getMultiplier10Man(defenders.size());
|
||||
break;
|
||||
case 20:
|
||||
pc.ZergMultiplier = ZergManager.getMultiplier20Man(defenders.size());
|
||||
break;
|
||||
}
|
||||
}
|
||||
resetZergMultiplier();
|
||||
}
|
||||
|
||||
for(PlayerCharacter player : this.affectedPlayers)
|
||||
player.ZergMultiplier = 1.0f;
|
||||
}
|
||||
private void resetZergMultiplier() {
|
||||
for (PlayerCharacter player : affectedPlayers)
|
||||
player.ZergMultiplier = 1.0f;
|
||||
}
|
||||
|
||||
public static void startZergThreadMine(Mine mine) {
|
||||
Thread zergMechanicThread;
|
||||
zergMechanicThread = new Thread(new ZergMechanicThread(null, mine));
|
||||
zergMechanicThread.setName(mine.getParentZone().getName() + "Mine");
|
||||
zergMechanicThread.start();
|
||||
}
|
||||
public static void startZergThreadMine(Mine mine) {
|
||||
Thread zergMechanicThread = new Thread(new ZergMechanicThread(null, mine));
|
||||
zergMechanicThread.setName(mine.getParentZone().getName() + "Mine");
|
||||
zergMechanicThread.start();
|
||||
}
|
||||
|
||||
public static void startZergThreadBane(Bane bane) {
|
||||
Thread zergMechanicThread;
|
||||
zergMechanicThread = new Thread(new ZergMechanicThread(bane, null));
|
||||
zergMechanicThread.setName(bane.getCity().getGuild().getName() + "Bane");
|
||||
zergMechanicThread.start();
|
||||
public static void startZergThreadBane(Bane bane) {
|
||||
Thread zergMechanicThread = new Thread(new ZergMechanicThread(bane, null));
|
||||
zergMechanicThread.setName(bane.getCity().getGuild().getName() + "Bane");
|
||||
zergMechanicThread.start();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user