From b11a8ea98617a20628a2f4bfd6c32cd1129bf222 Mon Sep 17 00:00:00 2001 From: FatBoy-DOTC Date: Fri, 28 Mar 2025 06:12:11 -0500 Subject: [PATCH] cannot sub after placing bane, zerg multiplier reset when bane ends --- .../client/handlers/InviteToSubHandler.java | 7 ++++++ src/engine/objects/Bane.java | 23 +++++++++++++++---- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/engine/net/client/handlers/InviteToSubHandler.java b/src/engine/net/client/handlers/InviteToSubHandler.java index bab06111..01f845e5 100644 --- a/src/engine/net/client/handlers/InviteToSubHandler.java +++ b/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.ErrorPopupMsg; import engine.net.client.msg.guild.InviteToSubMsg; +import engine.objects.Bane; import engine.objects.Guild; import engine.objects.GuildStatusController; import engine.objects.PlayerCharacter; @@ -112,6 +113,12 @@ public class InviteToSubHandler extends AbstractClientMsgHandler { 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. if (target.getClientConnection() != null) { diff --git a/src/engine/objects/Bane.java b/src/engine/objects/Bane.java index ee101976..df1f0bb8 100644 --- a/src/engine/objects/Bane.java +++ b/src/engine/objects/Bane.java @@ -57,6 +57,8 @@ public final class Bane { // Internal cache for banes private ActivateBaneJob activateBaneJob; + public ArrayList affected_players; + /** * ResultSet Constructor */ @@ -694,6 +696,9 @@ public final class Bane { toUnprotect.setProtectionState(ProtectionState.NONE); } + for(PlayerCharacter affected : this.affected_players) + affected.ZergMultiplier = 1.0f; + } public boolean isErrant() { @@ -736,6 +741,8 @@ public final class Bane { if(city == null) return; + if(this.affected_players == null) + this.affected_players = new ArrayList<>(); city.onEnter(); ArrayList attackers = new ArrayList<>(); @@ -779,18 +786,24 @@ public final class Bane { float defenderMultiplier = ZergManager.getCurrentMultiplier(defenderSize,this.capSize); for(int uuid : attackers){ 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; - else + this.affected_players.add(player); + }else { player.ZergMultiplier = 1.0f; + this.affected_players.add(player); + } } for(int uuid : defenders){ PlayerCharacter player = PlayerCharacter.getPlayerCharacter(uuid); - if(inSiegeRange.contains(player)) //player is still physically here, needs updated multiplier - player.ZergMultiplier = defenderMultiplier; - else + if(inSiegeRange.contains(player)) { //player is still physically here, needs updated multiplier + player.ZergMultiplier = attackerMultiplier; + this.affected_players.add(player); + }else { player.ZergMultiplier = 1.0f; + this.affected_players.add(player); + } } }