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