From 118d412623329ec362aa0cf88090609b499df5cc Mon Sep 17 00:00:00 2001 From: Hide_D Date: Wed, 13 Apr 2022 02:33:58 +0900 Subject: [PATCH] =?UTF-8?q?game:=20=EB=B2=A0=ED=8C=85=20=ED=8F=AC=EC=9D=B8?= =?UTF-8?q?=ED=8A=B8=20=EC=88=98=EB=A0=B9=20=EA=B8=B0=EC=A4=80=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20-=20=EA=B0=81=20=EB=8B=A8=EA=B3=84=EB=A7=88?= =?UTF-8?q?=EB=8B=A4=20=EC=B4=9D=20=EC=88=98=EB=A0=B9=EC=95=A1=EC=9D=98=20?= =?UTF-8?q?1/2=EC=94=A9,=20=EC=9E=94=EC=97=AC=EA=B8=88=EC=9D=80=201?= =?UTF-8?q?=EB=93=B1=EC=83=81=EC=97=90=EA=B2=8C=EB=A1=9C=20-=201=EB=93=B1?= =?UTF-8?q?=EC=9D=B4=20=EC=97=86=EB=8A=94=20=EA=B2=BD=EC=9A=B0=202?= =?UTF-8?q?=EB=93=B1=EC=9D=B4=201=EB=93=B1=EC=83=81+2=EB=93=B1=EC=83=81=20?= =?UTF-8?q?=EB=B0=B0=EB=B6=84=ED=95=98=EC=97=AC=20=EC=88=98=EB=A0=B9=20-?= =?UTF-8?q?=204=EA=B0=9C=20=EC=84=A0=ED=83=9D=EC=8B=9C=20=EA=B0=81?= =?UTF-8?q?=EA=B0=81,=2056.25%,=2025%,=2012.5%,=206.25%=EB=A5=BC=20?= =?UTF-8?q?=EB=82=98=EB=88=A0=EA=B0=80=EC=A7=90=20-=20=EC=A0=95=EB=8B=B5?= =?UTF-8?q?=EC=9E=90=EA=B0=80=20=EC=A0=84=ED=98=80=20=EC=97=86=EC=9C=BC?= =?UTF-8?q?=EB=A9=B4=20=ED=8F=AC=EC=9D=B8=ED=8A=B8=20=ED=99=98=EB=B6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/sammo/Betting.php | 37 ++++++++++++++++++++++------- hwe/ts/components/BettingDetail.vue | 15 ++++++++---- 2 files changed, 39 insertions(+), 13 deletions(-) diff --git a/hwe/sammo/Betting.php b/hwe/sammo/Betting.php index 83305a7e..0537194d 100644 --- a/hwe/sammo/Betting.php +++ b/hwe/sammo/Betting.php @@ -155,6 +155,19 @@ class Betting } if ($subAmount == 0) { + $refundList = []; + //당첨자가 아무도 없다면 무효로 하자. + foreach ($db->queryAllLists( + 'SELECT general_id, user_id, amount, betting_type FROM ng_betting WHERE betting_id = %i', + $this->bettingID + ) as [$generalID, $userID, $amount, $bettingTypeKey]) { + $refundList[] = [ + 'generalID' => $generalID, + 'userID' => $userID, + 'amount' => $amount, + 'matchPoint' => 0, + ]; + } return []; } @@ -233,8 +246,12 @@ class Betting } $remainRewardAmount = $totalAmount; + $accumulatedRewardAmount = 0; + $givenRewardAmount = $totalAmount; $rewardAmount = []; foreach (Util::range($selectCnt, 0, -1) as $matchPoint) { + $givenRewardAmount /= 2; + $accumulatedRewardAmount += $givenRewardAmount; if (count($subWinners[$matchPoint]) == 0) { continue; } @@ -242,17 +259,21 @@ class Betting continue; } - $givenRewardAmount = $remainRewardAmount / 2; - $rewardAmount[$matchPoint] = $givenRewardAmount; - $remainRewardAmount -= $givenRewardAmount; // /2가 아니라 다른 값이 될 경우를 대비.. + $rewardAmount[$matchPoint] = $accumulatedRewardAmount; + $remainRewardAmount -= $accumulatedRewardAmount; + $accumulatedRewardAmount = 0; } - foreach (Util::range(1, $selectCnt + 1) as $matchPoint) { - if (!key_exists($matchPoint, $rewardAmount)) { - continue; + //남은 상금은 '당첨자'에게 몰아준다. + //당첨자가 아무도 없다면, 0개 맞춘 그룹에게 돌아간다. + if($rewardAmount){ + foreach(Util::range($selectCnt, -1, -1) as $matchPoint){ + if (!key_exists($matchPoint, $rewardAmount)) { + continue; + } + $rewardAmount[$matchPoint] += $rewardAmount; + break; } - $rewardAmount[$matchPoint] += $remainRewardAmount; - break; } $result = []; diff --git a/hwe/ts/components/BettingDetail.vue b/hwe/ts/components/BettingDetail.vue index 56c765f5..90e98726 100644 --- a/hwe/ts/components/BettingDetail.vue +++ b/hwe/ts/components/BettingDetail.vue @@ -256,18 +256,23 @@ function calcReward() { } let remainRewardAmount = bettingAmount.value; + let accumulatedRewardAmount = 0; + let givenRewardAmount = bettingAmount.value; for (const matchPoint of range(selectCnt, 0, -1)) { + givenRewardAmount /= 2; + accumulatedRewardAmount += givenRewardAmount; if (!subAmount.has(matchPoint)) { continue; } - - const givenRewardAmount = remainRewardAmount / 2; - rewardAmount[matchPoint] = givenRewardAmount; - remainRewardAmount -= givenRewardAmount; // /2가 아니라 다른 값이 될 경우를 대비.. + rewardAmount[matchPoint] = accumulatedRewardAmount; + remainRewardAmount -= accumulatedRewardAmount; + accumulatedRewardAmount = 0; } - for (const matchPoint of range(1, selectCnt + 1)) { + //남은 상금은 '당첨자'에게 몰아준다. + //당첨자가 아무도 없다면, 0개 맞춘 그룹에게 돌아간다. + for (const matchPoint of range(selectCnt, -1, -1)) { if (!subAmount.has(matchPoint)) { continue; }