Browse Source

cannot sub after placing bane, zerg multiplier reset when bane ends

lakebane-recovery
FatBoy-DOTC 5 days ago
parent
commit
b11a8ea986
  1. 7
      src/engine/net/client/handlers/InviteToSubHandler.java
  2. 23
      src/engine/objects/Bane.java

7
src/engine/net/client/handlers/InviteToSubHandler.java

@ -21,6 +21,7 @@ import engine.net.client.ClientConnection;
import engine.net.client.msg.ClientNetMsg; import engine.net.client.msg.ClientNetMsg;
import engine.net.client.msg.ErrorPopupMsg; import engine.net.client.msg.ErrorPopupMsg;
import engine.net.client.msg.guild.InviteToSubMsg; import engine.net.client.msg.guild.InviteToSubMsg;
import engine.objects.Bane;
import engine.objects.Guild; import engine.objects.Guild;
import engine.objects.GuildStatusController; import engine.objects.GuildStatusController;
import engine.objects.PlayerCharacter; import engine.objects.PlayerCharacter;
@ -112,6 +113,12 @@ public class InviteToSubHandler extends AbstractClientMsgHandler {
return true; return true;
} }
//ensure bane to be subbed does not have a bane dropped
for(Bane bane : Bane.banes.values()){
if(bane.getOwner().guild.getNation().equals(targetGuild))
return true;
}
//all tests passed, let's send invite. //all tests passed, let's send invite.
if (target.getClientConnection() != null) { if (target.getClientConnection() != null) {

23
src/engine/objects/Bane.java

@ -57,6 +57,8 @@ public final class Bane {
// Internal cache for banes // Internal cache for banes
private ActivateBaneJob activateBaneJob; private ActivateBaneJob activateBaneJob;
public ArrayList<PlayerCharacter> affected_players;
/** /**
* ResultSet Constructor * ResultSet Constructor
*/ */
@ -694,6 +696,9 @@ public final class Bane {
toUnprotect.setProtectionState(ProtectionState.NONE); toUnprotect.setProtectionState(ProtectionState.NONE);
} }
for(PlayerCharacter affected : this.affected_players)
affected.ZergMultiplier = 1.0f;
} }
public boolean isErrant() { public boolean isErrant() {
@ -736,6 +741,8 @@ public final class Bane {
if(city == null) if(city == null)
return; return;
if(this.affected_players == null)
this.affected_players = new ArrayList<>();
city.onEnter(); city.onEnter();
ArrayList<Integer> attackers = new ArrayList<>(); ArrayList<Integer> attackers = new ArrayList<>();
@ -779,18 +786,24 @@ public final class Bane {
float defenderMultiplier = ZergManager.getCurrentMultiplier(defenderSize,this.capSize); float defenderMultiplier = ZergManager.getCurrentMultiplier(defenderSize,this.capSize);
for(int uuid : attackers){ for(int uuid : attackers){
PlayerCharacter player = PlayerCharacter.getPlayerCharacter(uuid); PlayerCharacter player = PlayerCharacter.getPlayerCharacter(uuid);
if(inSiegeRange.contains(player)) //player is still physically here, needs updated multiplier if(inSiegeRange.contains(player)) { //player is still physically here, needs updated multiplier
player.ZergMultiplier = attackerMultiplier; player.ZergMultiplier = attackerMultiplier;
else this.affected_players.add(player);
}else {
player.ZergMultiplier = 1.0f; player.ZergMultiplier = 1.0f;
this.affected_players.add(player);
}
} }
for(int uuid : defenders){ for(int uuid : defenders){
PlayerCharacter player = PlayerCharacter.getPlayerCharacter(uuid); PlayerCharacter player = PlayerCharacter.getPlayerCharacter(uuid);
if(inSiegeRange.contains(player)) //player is still physically here, needs updated multiplier if(inSiegeRange.contains(player)) { //player is still physically here, needs updated multiplier
player.ZergMultiplier = defenderMultiplier; player.ZergMultiplier = attackerMultiplier;
else this.affected_players.add(player);
}else {
player.ZergMultiplier = 1.0f; player.ZergMultiplier = 1.0f;
this.affected_players.add(player);
}
} }
} }

Loading…
Cancel
Save