From 7b9f3098a1e9dae641bbf0055ef93cee70ffb025 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A2=85=EB=AF=B8=28=EB=AF=B8=EC=95=84=29?= <101439796+jongmee@users.noreply.github.com> Date: Fri, 23 Aug 2024 10:33:11 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EB=B0=B0=ED=8B=80=20=EA=B2=B0=EA=B3=BC?= =?UTF-8?q?=20=EA=B3=84=EC=82=B0=EC=97=90=EC=84=9C=20=EB=82=A0=EC=94=A8?= =?UTF-8?q?=EC=97=90=20=EC=9D=98=ED=95=9C=20=EA=B8=B0=EC=88=A0=20=EB=AC=B4?= =?UTF-8?q?=ED=9A=A8=20=EC=A1=B0=EA=B1=B4=20=EC=B6=94=EA=B0=80=20(#294)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pokerogue/helper/battle/BattleMove.java | 4 ++ .../helper/battle/BattleService.java | 59 ++++++++++++------- 2 files changed, 42 insertions(+), 21 deletions(-) diff --git a/backend/pokerogue/src/main/java/com/pokerogue/helper/battle/BattleMove.java b/backend/pokerogue/src/main/java/com/pokerogue/helper/battle/BattleMove.java index da3d7fc63..979e846f0 100644 --- a/backend/pokerogue/src/main/java/com/pokerogue/helper/battle/BattleMove.java +++ b/backend/pokerogue/src/main/java/com/pokerogue/helper/battle/BattleMove.java @@ -17,4 +17,8 @@ public record BattleMove( Integer generation, String flags ) { + + public boolean isAttackMove() { + return this.category != MoveCategory.STATUS; + } } diff --git a/backend/pokerogue/src/main/java/com/pokerogue/helper/battle/BattleService.java b/backend/pokerogue/src/main/java/com/pokerogue/helper/battle/BattleService.java index 153539a56..93f645220 100644 --- a/backend/pokerogue/src/main/java/com/pokerogue/helper/battle/BattleService.java +++ b/backend/pokerogue/src/main/java/com/pokerogue/helper/battle/BattleService.java @@ -66,14 +66,8 @@ public BattleResultResponse calculateBattleResult( .orElseThrow(() -> new GlobalCustomException(ErrorMessage.MOVE_CATEGORY_NOT_FOUND)); Type moveType = move.type(); - double weatherMultiplier = getWeatherMultiplier(moveType, weather); - double typeMatchingMultiplier = getTypeMatchingMultiplier(moveType, rivalPokemon.pokemonTypes()); - double sameTypeBonusMultiplier = getSameTypeAttackBonusMultiplier(moveType, myPokemon); - double stringWindMultiplier = getStringWindMultiplier(moveType, rivalPokemon.pokemonTypes(), weather); - - double totalMultiplier = - weatherMultiplier * typeMatchingMultiplier * sameTypeBonusMultiplier * stringWindMultiplier; double finalAccuracy = calculateAccuracy(move, weather); + double totalMultiplier = getTotalMultiplier(move, weather, rivalPokemon, myPokemon); return new BattleResultResponse( move.power(), @@ -86,20 +80,51 @@ public BattleResultResponse calculateBattleResult( ); } + private double calculateAccuracy(BattleMove move, Weather weather) { + if (weather == Weather.FOG) { + return (double) move.accuracy() * 0.9; + } + + return (double) move.accuracy(); + } + + private double getTotalMultiplier( + BattleMove move, + Weather weather, + BattlePokemon rivalPokemon, + BattlePokemon myPokemon) { + if (!move.isAttackMove()) { + return 1; + } + Type moveType = move.type(); + double weatherMultiplier = getWeatherMultiplier(moveType, weather); + double typeMatchingMultiplier = getTypeMatchingMultiplier(moveType, rivalPokemon.pokemonTypes()); + double sameTypeBonusMultiplier = getSameTypeAttackBonusMultiplier(moveType, myPokemon); + double stringWindMultiplier = getStringWindMultiplier(moveType, rivalPokemon.pokemonTypes(), weather); + + return weatherMultiplier * typeMatchingMultiplier * sameTypeBonusMultiplier * stringWindMultiplier; + } + private double getWeatherMultiplier(Type moveType, Weather weather) { - if (weather == Weather.SUNNY || weather == Weather.HARSH_SUN) { - if (moveType == Type.FIRE) { + if (moveType == Type.FIRE) { + if (weather == Weather.SUNNY || weather == Weather.HARSH_SUN) { return 1.5; } - if (moveType == Type.WATER) { + if (weather == Weather.RAIN) { return 0.5; } + if (weather == Weather.HEAVY_RAIN) { + return 0; + } } - if (weather == Weather.RAIN || weather == Weather.HEAVY_RAIN) { - if (moveType == Type.FIRE) { + if (moveType == Type.WATER) { + if (weather == Weather.SUNNY) { return 0.5; } - if (moveType == Type.WATER) { + if (weather == Weather.HARSH_SUN) { + return 0; + } + if (weather == Weather.RAIN || weather == Weather.HEAVY_RAIN) { return 1.5; } } @@ -133,12 +158,4 @@ private double getStringWindMultiplier(Type moveType, List rivalPokemonTyp return 1; } - - private double calculateAccuracy(BattleMove move, Weather weather) { - if (weather == Weather.FOG) { - return (double) move.accuracy() * 0.9; - } - - return (double) move.accuracy(); - } }