1 changed files with 116 additions and 0 deletions
@ -0,0 +1,116 @@
@@ -0,0 +1,116 @@
|
||||
package engine.ZergMehcanics; |
||||
|
||||
import engine.InterestManagement.WorldGrid; |
||||
import engine.gameManager.BuildingManager; |
||||
import engine.gameManager.ZergManager; |
||||
import engine.objects.*; |
||||
import engine.server.MBServerStatics; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.HashMap; |
||||
import java.util.HashSet; |
||||
|
||||
public class MineAntiZerg { |
||||
|
||||
public static HashMap<Mine,HashMap<PlayerCharacter,Long>> leaveTimers = new HashMap<>(); |
||||
public static HashMap<Mine,ArrayList<PlayerCharacter>> currentPlayers = new HashMap<>(); |
||||
|
||||
public static void runMines(){ |
||||
for(Mine mine : Mine.getMines()){ |
||||
|
||||
Building tower = BuildingManager.getBuildingFromCache(mine.getBuildingID()); |
||||
|
||||
if(tower == null) |
||||
continue; |
||||
|
||||
if(!mine.isActive) |
||||
continue; |
||||
|
||||
logPlayersPresent(tower,mine); |
||||
|
||||
auditPlayersPresent(tower,mine); |
||||
|
||||
auditPlayers(mine); |
||||
} |
||||
} |
||||
|
||||
public static void logPlayersPresent(Building tower, Mine mine){ |
||||
HashSet<AbstractWorldObject> loadedPlayers = WorldGrid.getObjectsInRangePartial(tower.loc, MBServerStatics.CHARACTER_LOAD_RANGE * 3,MBServerStatics.MASK_PLAYER); |
||||
|
||||
ArrayList<PlayerCharacter> playersPresent = new ArrayList<>(); |
||||
for(AbstractWorldObject player : loadedPlayers){ |
||||
playersPresent.add((PlayerCharacter)player); |
||||
} |
||||
|
||||
currentPlayers.put(mine,playersPresent); |
||||
} |
||||
|
||||
public static void auditPlayersPresent(Building tower, Mine mine){ |
||||
HashSet<AbstractWorldObject> loadedPlayers = WorldGrid.getObjectsInRangePartial(tower.loc, MBServerStatics.CHARACTER_LOAD_RANGE * 3,MBServerStatics.MASK_PLAYER); |
||||
|
||||
ArrayList<PlayerCharacter> toRemove = new ArrayList<>(); |
||||
|
||||
for(PlayerCharacter player : currentPlayers.get(mine)){ |
||||
if(!loadedPlayers.contains(player)){ |
||||
toRemove.add(player); |
||||
} |
||||
} |
||||
|
||||
currentPlayers.get(mine).removeAll(toRemove); |
||||
|
||||
for(PlayerCharacter player : toRemove){ |
||||
if(leaveTimers.containsKey(mine)){ |
||||
leaveTimers.get(mine).put(player,System.currentTimeMillis()); |
||||
}else{ |
||||
HashMap<PlayerCharacter,Long> leaveTime = new HashMap<>(); |
||||
leaveTime.put(player,System.currentTimeMillis()); |
||||
leaveTimers.put(mine,leaveTime); |
||||
} |
||||
} |
||||
|
||||
toRemove.clear(); |
||||
|
||||
for(PlayerCharacter player : leaveTimers.get(mine).keySet()){ |
||||
long timeGone = System.currentTimeMillis() - leaveTimers.get(mine).get(player); |
||||
if(timeGone > 180000L) {//3 minutes
|
||||
toRemove.add(player); |
||||
player.ZergMultiplier = 1.0f; |
||||
} |
||||
} |
||||
|
||||
for(PlayerCharacter player : toRemove) { |
||||
leaveTimers.get(mine).remove(player); |
||||
} |
||||
} |
||||
|
||||
public static void auditPlayers(Mine mine){ |
||||
|
||||
HashMap<Guild,ArrayList<PlayerCharacter>> playersByNation = new HashMap<>(); |
||||
|
||||
for(PlayerCharacter player : currentPlayers.get(mine)){ |
||||
if(playersByNation.containsKey(player.guild.getNation())){ |
||||
playersByNation.get(player.guild.getNation()).add(player); |
||||
}else{ |
||||
ArrayList<PlayerCharacter> players = new ArrayList<>(); |
||||
players.add(player); |
||||
playersByNation.put(player.guild.getNation(),players); |
||||
} |
||||
} |
||||
|
||||
for(PlayerCharacter player : leaveTimers.get(mine).keySet()){ |
||||
if(playersByNation.containsKey(player.guild.getNation())){ |
||||
playersByNation.get(player.guild.getNation()).add(player); |
||||
}else{ |
||||
ArrayList<PlayerCharacter> players = new ArrayList<>(); |
||||
players.add(player); |
||||
playersByNation.put(player.guild.getNation(),players); |
||||
} |
||||
} |
||||
|
||||
for(Guild nation : playersByNation.keySet()){ |
||||
for(PlayerCharacter player : playersByNation.get(nation)){ |
||||
player.ZergMultiplier = ZergManager.getCurrentMultiplier(playersByNation.get(nation).size(), mine.capSize); |
||||
} |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue