forked from MagicBane/Server
Zerg Mechanic Completed
This commit is contained in:
@@ -18,6 +18,7 @@ import engine.gameManager.ZoneManager;
|
||||
import engine.net.ByteBufferWriter;
|
||||
import engine.net.client.msg.ErrorPopupMsg;
|
||||
import engine.server.MBServerStatics;
|
||||
import org.joda.time.DateTime;
|
||||
import org.pmw.tinylog.Logger;
|
||||
|
||||
import java.net.UnknownHostException;
|
||||
@@ -55,6 +56,7 @@ public class Mine extends AbstractGameObject {
|
||||
public int capSize;
|
||||
|
||||
public final HashSet<Integer> _playerMemory = new HashSet<>();
|
||||
public final HashMap<Integer,Long> _recentMemory = new HashMap<>();
|
||||
HashMap<Guild,ArrayList<Integer>> dividedPlayers;
|
||||
public Integer totalPlayers;
|
||||
|
||||
@@ -609,6 +611,8 @@ public class Mine extends AbstractGameObject {
|
||||
player = (PlayerCharacter) playerObject;
|
||||
|
||||
// Player is already in our memory
|
||||
if (_recentMemory.containsKey(player.getObjectUUID()))
|
||||
_recentMemory.remove(player.getObjectUUID());
|
||||
|
||||
if (_playerMemory.contains(player.getObjectUUID()))
|
||||
continue;
|
||||
@@ -644,10 +648,21 @@ public class Mine extends AbstractGameObject {
|
||||
if(updated == true){
|
||||
for(Integer playerID : this._playerMemory){
|
||||
player = PlayerCharacter.getFromCache(playerID);
|
||||
for(Guild present : this.dividedPlayers.keySet()) {
|
||||
int count = this.dividedPlayers.get(present).size();
|
||||
float multiplier = (float)(count / this.totalPlayers);
|
||||
ChatManager.chatSystemInfo(player,present.getName() + " COUNT: " + count + " / " + this.totalPlayers);
|
||||
if(this.dividedPlayers.containsKey(player.getGuild().getNation())){
|
||||
int count = this.dividedPlayers.get(player.getGuild().getNation()).size();
|
||||
switch(this.capSize){
|
||||
case 5:
|
||||
player.ZergMultiplier = getMultiplier5Man(count);
|
||||
break;
|
||||
case 10:
|
||||
player.ZergMultiplier = getMultiplier10Man(count);
|
||||
break;
|
||||
case 20:
|
||||
player.ZergMultiplier = getMultiplier20Man(count);
|
||||
break;
|
||||
}
|
||||
} else{
|
||||
player.ZergMultiplier = 1.0f; //something went wrong reset to default until next cycle
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -670,15 +685,186 @@ public class Mine extends AbstractGameObject {
|
||||
continue;
|
||||
|
||||
toRemove.add(playerUUID);
|
||||
if(_recentMemory.containsKey(playerUUID) == false) {
|
||||
_recentMemory.put(playerUUID, System.currentTimeMillis());
|
||||
}
|
||||
player.ZergMultiplier = 1.0f; // reset damage modifier to 1.0
|
||||
}
|
||||
|
||||
// Remove players from mine memory
|
||||
|
||||
_playerMemory.removeAll(toRemove);
|
||||
//_playerMemory.removeAll(toRemove);
|
||||
HashSet<Integer> purge = new HashSet<>();
|
||||
for(Integer id : _recentMemory.keySet()){
|
||||
if(System.currentTimeMillis() > _recentMemory.get(playerUUID) + 60000){
|
||||
purge.add(id);
|
||||
}
|
||||
}
|
||||
for(Integer id : purge){
|
||||
_recentMemory.remove(id);
|
||||
}
|
||||
if(toRemove.isEmpty()){
|
||||
return false;
|
||||
}else{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public static float getMultiplier5Man(int count){
|
||||
float multiplier = 1.0f;
|
||||
switch(count){
|
||||
case 1:
|
||||
multiplier += 0.5f;
|
||||
break;
|
||||
case 2:
|
||||
multiplier += 0.5f;
|
||||
break;
|
||||
case 3:
|
||||
multiplier += 0.5f;
|
||||
break;
|
||||
case 4:
|
||||
multiplier += 0.2f;
|
||||
break;
|
||||
case 5:
|
||||
multiplier += 0.0f;
|
||||
break;
|
||||
case 6:
|
||||
multiplier -= 0.2f;
|
||||
break;
|
||||
case 7:
|
||||
multiplier -= 0.45f;
|
||||
break;
|
||||
case 8:
|
||||
multiplier -= 0.6f;
|
||||
break;
|
||||
default:
|
||||
multiplier -= 0.75f;
|
||||
break;
|
||||
}
|
||||
return multiplier;
|
||||
}
|
||||
public static float getMultiplier10Man(int count){
|
||||
float multiplier = 1.0f;
|
||||
switch(count){
|
||||
case 1:
|
||||
multiplier += 1.0f;
|
||||
break;
|
||||
case 2:
|
||||
multiplier += 1.0f;
|
||||
break;
|
||||
case 3:
|
||||
multiplier += 1.0f;
|
||||
break;
|
||||
case 4:
|
||||
multiplier += 1.0f;
|
||||
break;
|
||||
case 5:
|
||||
multiplier += 0.8f;
|
||||
break;
|
||||
case 6:
|
||||
multiplier += 0.55f;
|
||||
break;
|
||||
case 7:
|
||||
multiplier += 0.35f;
|
||||
break;
|
||||
case 8:
|
||||
multiplier += 0.2f;
|
||||
break;
|
||||
case 9:
|
||||
multiplier += 0.1f;
|
||||
break;
|
||||
case 10:
|
||||
multiplier += 0.0f;
|
||||
break;
|
||||
case 11:
|
||||
multiplier -= 0.1f;
|
||||
break;
|
||||
case 12:
|
||||
multiplier -= 0.2f;
|
||||
break;
|
||||
case 13:
|
||||
multiplier -= 0.35f;
|
||||
break;
|
||||
case 14:
|
||||
multiplier -= 0.55f;
|
||||
break;
|
||||
default:
|
||||
multiplier -= 0.75f;
|
||||
break;
|
||||
}
|
||||
return multiplier;
|
||||
}
|
||||
public static float getMultiplier20Man(int count){
|
||||
float multiplier = 1.0f;
|
||||
if(count < 10){
|
||||
multiplier += 1.25f;
|
||||
}else {
|
||||
switch (count) {
|
||||
case 10:
|
||||
multiplier += 0.8f;
|
||||
break;
|
||||
case 11:
|
||||
multiplier += 0.65f;
|
||||
break;
|
||||
case 12:
|
||||
multiplier += 0.54f;
|
||||
break;
|
||||
case 13:
|
||||
multiplier += 0.46f;
|
||||
break;
|
||||
case 14:
|
||||
multiplier += 0.36f;
|
||||
break;
|
||||
case 15:
|
||||
multiplier += 0.28f;
|
||||
break;
|
||||
case 16:
|
||||
multiplier += 0.21f;
|
||||
break;
|
||||
case 17:
|
||||
multiplier += 0.15f;
|
||||
break;
|
||||
case 18:
|
||||
multiplier += 0.09f;
|
||||
break;
|
||||
case 19:
|
||||
multiplier += 0.04f;
|
||||
break;
|
||||
case 20:
|
||||
multiplier += 0.00f;
|
||||
break;
|
||||
case 21:
|
||||
multiplier -= 0.04f;
|
||||
break;
|
||||
case 22:
|
||||
multiplier -= 0.09f;
|
||||
break;
|
||||
case 23:
|
||||
multiplier -= 0.15f;
|
||||
break;
|
||||
case 24:
|
||||
multiplier -= 0.21f;
|
||||
break;
|
||||
case 25:
|
||||
multiplier -= 0.28f;
|
||||
break;
|
||||
case 26:
|
||||
multiplier -= 0.36f;
|
||||
break;
|
||||
case 27:
|
||||
multiplier -= 0.46f;
|
||||
break;
|
||||
case 28:
|
||||
multiplier -= 0.54f;
|
||||
break;
|
||||
case 29:
|
||||
multiplier -= 0.65f;
|
||||
break;
|
||||
default:
|
||||
multiplier -= 0.75f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return multiplier;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user