From 5761d96ea06be2d83edfb8de0dc44cb18063cc75 Mon Sep 17 00:00:00 2001 From: mischiefcs Date: Thu, 19 Mar 2026 20:35:42 +0000 Subject: [PATCH 01/23] player & clubshare draft --- .../commons/PrizePool/Award/Placement.lua | 5 +- lua/wikis/commons/PrizePool/Base.lua | 92 +++++++++++++++++++ lua/wikis/commons/PrizePool/Placement.lua | 3 + 3 files changed, 99 insertions(+), 1 deletion(-) diff --git a/lua/wikis/commons/PrizePool/Award/Placement.lua b/lua/wikis/commons/PrizePool/Award/Placement.lua index b64c29a90e2..c1a685375bc 100644 --- a/lua/wikis/commons/PrizePool/Award/Placement.lua +++ b/lua/wikis/commons/PrizePool/Award/Placement.lua @@ -18,6 +18,7 @@ local _tbd_index = 0 local PRIZE_TYPE_BASE_CURRENCY = 'BASE_CURRENCY' local PRIZE_TYPE_POINTS = 'POINTS' +local PRIZE_TYPE_PLAYER_SHARE = 'PLAYER_SHARE' --- An AwardPlacement is a set of opponents who all share the same award in the tournament. --- Its input is generally a table created by `Template:Slot`. @@ -75,10 +76,11 @@ function AwardPlacement:_getLpdbData(...) local prizeMoney = tonumber(self:getPrizeRewardForOpponent(opponent, PRIZE_TYPE_BASE_CURRENCY .. 1)) or 0 local pointsReward = self:getPrizeRewardForOpponent(opponent, PRIZE_TYPE_POINTS .. 1) local pointsReward2 = self:getPrizeRewardForOpponent(opponent, PRIZE_TYPE_POINTS .. 2) + local playerShare = tonumber(self:getPrizeRewardForOpponent(opponent, PRIZE_TYPE_PLAYER_SHARE .. 1)) local lpdbData = { date = opponent.date, prizemoney = prizeMoney, - individualprizemoney = Opponent.typeIsParty(opponentType) and (prizeMoney / Opponent.partySize(opponentType)) or 0, + individualprizemoney = Opponent.typeIsParty(opponentType) and ((playerShare or prizeMoney) / Opponent.partySize(opponentType)) or 0, mode = 'award_individual', weight = 0, extradata = { @@ -89,6 +91,7 @@ function AwardPlacement:_getLpdbData(...) participantteam = (opponentType == Opponent.solo and players.p1team) and Opponent.toName{template = players.p1team, type = 'team'} or nil, + playerShare = not Opponent.typeIsParty(opponentType) and playerShare or nil, }, -- TODO: We need to create additional LPDB Field for Points struct (json?) diff --git a/lua/wikis/commons/PrizePool/Base.lua b/lua/wikis/commons/PrizePool/Base.lua index 680786f4314..e2a89b7e55f 100644 --- a/lua/wikis/commons/PrizePool/Base.lua +++ b/lua/wikis/commons/PrizePool/Base.lua @@ -63,6 +63,8 @@ local PRIZE_TYPE_QUALIFIES = 'QUALIFIES' local PRIZE_TYPE_POINTS = 'POINTS' local PRIZE_TYPE_PERCENTAGE = 'PERCENT' local PRIZE_TYPE_FREETEXT = 'FREETEXT' +local PRIZE_TYPE_PLAYER_SHARE = 'PLAYER_SHARE' +local PRIZE_TYPE_CLUB_SHARE = 'CLUB_SHARE' BasePrizePool.config = { showBaseCurrency = { @@ -357,6 +359,52 @@ BasePrizePool.prizeTypes = { end end, }, + [PRIZE_TYPE_PLAYER_SHARE] = { + sortOrder = 55, + + header = 'playershare', + headerParse = function (prizePool, input, context, index) + return {title = 'Player Share'} + end, + headerDisplay = function (data) + return TableCell{children = {data.title}} + end, + + row = 'playershare', + rowParse = function (placement, input, context, index) + return BasePrizePool._parseInteger(input) + end, + rowDisplay = function (headerData, data) + if data > 0 then + return TableCell{children = { + Currency.display(BASE_CURRENCY, data, + {formatValue = true, formatPrecision = headerData.roundPrecision, displayCurrencyCode = false}) + }} + end + end, + }, + [PRIZE_TYPE_CLUB_SHARE] = { + sortOrder = 56, + header = 'clubshare', + headerParse = function(prizePool, input, context, index) + return {title = 'Club Share'} + end, + headerDisplay = function(data) + return TableCell{children = {data.title}} + end, + row = 'clubshare', + rowParse = function(placement, input, context, index) + return input + end, + rowDisplay = function(headerData, data) + if data and tonumber(data) > 0 then + return TableCell{children = { + Currency.display(BASE_CURRENCY, data, + {formatValue = true, formatPrecision = headerData.roundPrecision, displayCurrencyCode = false}) + }} + end + end, + }, [PRIZE_TYPE_FREETEXT] = { sortOrder = 60, @@ -512,6 +560,17 @@ function BasePrizePool:_readPrizes(args) end end + -- club share addition if both playershare and base local prize is present + local hasBase = false + local hasPlayerShare = false + for _, prize in ipairs(self.prizes) do + if prize.type == PRIZE_TYPE_BASE_CURRENCY then hasBase = true end + if prize.type == PRIZE_TYPE_PLAYER_SHARE then hasPlayerShare = true end + end + if hasBase and hasPlayerShare then + self:addPrize(PRIZE_TYPE_CLUB_SHARE, 1, {title = 'Club Share', roundPrecision = self.options.currencyRoundPrecision}) + end + return self.prizes end @@ -642,6 +701,24 @@ function BasePrizePool:_buildRows() self:applyToggleExpand(previousPlacement, placement, rows) + -- Calculate club share for the placement + for _, opponent in ipairs(placement.opponents) do + local basePrize = nil + local playerShare = nil + for _, prize in ipairs(self.prizes) do + if prize.type == PRIZE_TYPE_BASE_CURRENCY then + basePrize = opponent.prizeRewards[prize.id] or placement.prizeRewards[prize.id] + elseif prize.type == PRIZE_TYPE_PLAYER_SHARE then + playerShare = opponent.prizeRewards[prize.id] or placement.prizeRewards[prize.id] + end + end + if basePrize and playerShare then + local clubShare = tonumber(basePrize) - tonumber(playerShare) + if not opponent.prizeRewards then opponent.prizeRewards = {} end + opponent.prizeRewards[PRIZE_TYPE_CLUB_SHARE .. '1'] = clubShare + end + end + local cells = {} table.insert(cells, self:placeOrAwardCell(placement)) @@ -671,6 +748,21 @@ function BasePrizePool:_buildRows() return cell end) + -- Add club share cell if both base and player share exist + local clubSharePrize = nil + for _, prize in ipairs(self.prizes) do + if prize.type == PRIZE_TYPE_CLUB_SHARE then + clubSharePrize = prize + break + end + end + if clubSharePrize then + local prizeTypeData = self.prizeTypes[PRIZE_TYPE_CLUB_SHARE] + local reward = opponent.prizeRewards[PRIZE_TYPE_CLUB_SHARE .. '1'] + local cell = reward and prizeTypeData.rowDisplay(clubSharePrize.data, reward) or TableCell{} + table.insert(prizeCells, cell) + end + Array.forEach(prizeCells, function (prizeCell, columnIndex) local lastInColumn = previousOpponent[columnIndex] diff --git a/lua/wikis/commons/PrizePool/Placement.lua b/lua/wikis/commons/PrizePool/Placement.lua index 3e11a0935b8..ee0d92256b8 100644 --- a/lua/wikis/commons/PrizePool/Placement.lua +++ b/lua/wikis/commons/PrizePool/Placement.lua @@ -26,6 +26,7 @@ local DASH = '-' local PRIZE_TYPE_BASE_CURRENCY = 'BASE_CURRENCY' local PRIZE_TYPE_POINTS = 'POINTS' local PRIZE_TYPE_QUALIFIES = 'QUALIFIES' +local PRIZE_TYPE_PLAYER_SHARE = 'PLAYER_SHARE' -- Allowed none-numeric score values. local SPECIAL_SCORES = {'W', 'FF' , 'L', 'DQ', 'D'} @@ -235,6 +236,7 @@ function Placement:_getLpdbData(...) local pointsReward = self:getPrizeRewardForOpponent(opponent, PRIZE_TYPE_POINTS .. 1) local pointsReward2 = self:getPrizeRewardForOpponent(opponent, PRIZE_TYPE_POINTS .. 2) local isQualified = self:getPrizeRewardForOpponent(opponent, PRIZE_TYPE_QUALIFIES .. '1') + local playerShare = tonumber(self:getPrizeRewardForOpponent(opponent, PRIZE_TYPE_PLAYER_SHARE .. 1)) or 0 local lpdbData = { image = image, @@ -262,6 +264,7 @@ function Placement:_getLpdbData(...) participantteam = (opponentType == Opponent.solo and players.p1team) and Opponent.toName{template = players.p1team, type = 'team', extradata = {}} or nil, + playershare = playerShare and tostring(playerShare) or nil, }, qualified = isQualified and 1 or 0 -- TODO: We need to create additional LPDB Fields From dd5da0fea8dbd165be0b36d1200243314b94a632 Mon Sep 17 00:00:00 2001 From: mischiefcs Date: Thu, 19 Mar 2026 20:36:44 +0000 Subject: [PATCH 02/23] init branch From c4861c67a3821ea82bf24b20968098b26a7d1b19 Mon Sep 17 00:00:00 2001 From: mischiefcs Date: Fri, 20 Mar 2026 14:09:45 +0000 Subject: [PATCH 03/23] updating Prizepoo/base --- lua/wikis/commons/PrizePool/Base.lua | 33 ++++++---------------------- 1 file changed, 7 insertions(+), 26 deletions(-) diff --git a/lua/wikis/commons/PrizePool/Base.lua b/lua/wikis/commons/PrizePool/Base.lua index e2a89b7e55f..f7645a11d8c 100644 --- a/lua/wikis/commons/PrizePool/Base.lua +++ b/lua/wikis/commons/PrizePool/Base.lua @@ -471,6 +471,13 @@ function BasePrizePool:create() self:setConfig('showBaseCurrency', true) self:addPrize(PRIZE_TYPE_BASE_CURRENCY, 1, {roundPrecision = self.options.currencyRoundPrecision}) + local hasPlayerShare = Array.any(self.prizes, function(prize) + return prize.type == PRIZE_TYPE_PLAYER_SHARE + end) + if hasPlayerShare then + self:addPrize(PRIZE_TYPE_CLUB_SHARE, 1, {title = 'Club Share', roundPrecision = self.options.currencyRoundPrecision}) + end + if self.options.autoExchange then local canConvertCurrency = function(prize) return prize.type == PRIZE_TYPE_LOCAL_CURRENCY @@ -560,17 +567,6 @@ function BasePrizePool:_readPrizes(args) end end - -- club share addition if both playershare and base local prize is present - local hasBase = false - local hasPlayerShare = false - for _, prize in ipairs(self.prizes) do - if prize.type == PRIZE_TYPE_BASE_CURRENCY then hasBase = true end - if prize.type == PRIZE_TYPE_PLAYER_SHARE then hasPlayerShare = true end - end - if hasBase and hasPlayerShare then - self:addPrize(PRIZE_TYPE_CLUB_SHARE, 1, {title = 'Club Share', roundPrecision = self.options.currencyRoundPrecision}) - end - return self.prizes end @@ -748,21 +744,6 @@ function BasePrizePool:_buildRows() return cell end) - -- Add club share cell if both base and player share exist - local clubSharePrize = nil - for _, prize in ipairs(self.prizes) do - if prize.type == PRIZE_TYPE_CLUB_SHARE then - clubSharePrize = prize - break - end - end - if clubSharePrize then - local prizeTypeData = self.prizeTypes[PRIZE_TYPE_CLUB_SHARE] - local reward = opponent.prizeRewards[PRIZE_TYPE_CLUB_SHARE .. '1'] - local cell = reward and prizeTypeData.rowDisplay(clubSharePrize.data, reward) or TableCell{} - table.insert(prizeCells, cell) - end - Array.forEach(prizeCells, function (prizeCell, columnIndex) local lastInColumn = previousOpponent[columnIndex] From 3537a310527c1593bfe4f7240a35485f751ac17a Mon Sep 17 00:00:00 2001 From: mischiefcs Date: Fri, 20 Mar 2026 14:23:03 +0000 Subject: [PATCH 04/23] fixing line too long check --- lua/wikis/commons/PrizePool/Award/Placement.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lua/wikis/commons/PrizePool/Award/Placement.lua b/lua/wikis/commons/PrizePool/Award/Placement.lua index c1a685375bc..69fa41b099f 100644 --- a/lua/wikis/commons/PrizePool/Award/Placement.lua +++ b/lua/wikis/commons/PrizePool/Award/Placement.lua @@ -80,7 +80,8 @@ function AwardPlacement:_getLpdbData(...) local lpdbData = { date = opponent.date, prizemoney = prizeMoney, - individualprizemoney = Opponent.typeIsParty(opponentType) and ((playerShare or prizeMoney) / Opponent.partySize(opponentType)) or 0, + individualprizemoney = Opponent.typeIsParty(opponentType) + and ((playerShare or prizeMoney) / Opponent.partySize(opponentType)) or 0, mode = 'award_individual', weight = 0, extradata = { From f6aca546a7548d10eb8a2a7d924d1591ca88452e Mon Sep 17 00:00:00 2001 From: mischiefcs Date: Fri, 20 Mar 2026 14:27:43 +0000 Subject: [PATCH 05/23] fixing tab check --- lua/wikis/commons/PrizePool/Award/Placement.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/wikis/commons/PrizePool/Award/Placement.lua b/lua/wikis/commons/PrizePool/Award/Placement.lua index 69fa41b099f..ced8c6b9aac 100644 --- a/lua/wikis/commons/PrizePool/Award/Placement.lua +++ b/lua/wikis/commons/PrizePool/Award/Placement.lua @@ -81,7 +81,7 @@ function AwardPlacement:_getLpdbData(...) date = opponent.date, prizemoney = prizeMoney, individualprizemoney = Opponent.typeIsParty(opponentType) - and ((playerShare or prizeMoney) / Opponent.partySize(opponentType)) or 0, + and ((playerShare or prizeMoney) / Opponent.partySize(opponentType)) or 0, mode = 'award_individual', weight = 0, extradata = { From e58b61c91214bb0fea304b70d9e2e6b0e6edfb3d Mon Sep 17 00:00:00 2001 From: mischiefcs Date: Fri, 20 Mar 2026 16:01:46 +0000 Subject: [PATCH 06/23] resolving comments --- lua/spec/prize_pool_spec.lua | 2 +- lua/wikis/commons/PrizePool/Base.lua | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/lua/spec/prize_pool_spec.lua b/lua/spec/prize_pool_spec.lua index a6b871fa86b..d1031c32b8a 100644 --- a/lua/spec/prize_pool_spec.lua +++ b/lua/spec/prize_pool_spec.lua @@ -103,7 +103,7 @@ describe('prize pool', function() PrizePool(prizePoolArgs):create():build() assert.stub(LpdbPlacementStub).was.called_with('ranking_abc1_Rathoz', { date = '2022-10-15', - extradata = '{"prizepoints":"","prizepoints2":""}', + extradata = '{"prizepoints":"","prizepoints2":"","playershare":""}', game = 'commons', icon = 'test.png', icondark = 'test dark.png', diff --git a/lua/wikis/commons/PrizePool/Base.lua b/lua/wikis/commons/PrizePool/Base.lua index f7645a11d8c..b48a6f112a4 100644 --- a/lua/wikis/commons/PrizePool/Base.lua +++ b/lua/wikis/commons/PrizePool/Base.lua @@ -698,22 +698,23 @@ function BasePrizePool:_buildRows() self:applyToggleExpand(previousPlacement, placement, rows) -- Calculate club share for the placement - for _, opponent in ipairs(placement.opponents) do - local basePrize = nil + Array.forEach(placement.opponents, function(opponent) local playerShare = nil - for _, prize in ipairs(self.prizes) do + Array.forEach(self.prizes, function(prize) if prize.type == PRIZE_TYPE_BASE_CURRENCY then basePrize = opponent.prizeRewards[prize.id] or placement.prizeRewards[prize.id] - elseif prize.type == PRIZE_TYPE_PLAYER_SHARE then + return + end + if prize.type == PRIZE_TYPE_PLAYER_SHARE then playerShare = opponent.prizeRewards[prize.id] or placement.prizeRewards[prize.id] end - end + end) if basePrize and playerShare then local clubShare = tonumber(basePrize) - tonumber(playerShare) if not opponent.prizeRewards then opponent.prizeRewards = {} end opponent.prizeRewards[PRIZE_TYPE_CLUB_SHARE .. '1'] = clubShare end - end + end) local cells = {} table.insert(cells, self:placeOrAwardCell(placement)) From 55896e39821ffa76ed40a7b07c7531ea32fb0d62 Mon Sep 17 00:00:00 2001 From: mischiefcs Date: Fri, 20 Mar 2026 16:04:10 +0000 Subject: [PATCH 07/23] fixing accidental line remove --- lua/wikis/commons/PrizePool/Base.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/wikis/commons/PrizePool/Base.lua b/lua/wikis/commons/PrizePool/Base.lua index b48a6f112a4..fdee696bde1 100644 --- a/lua/wikis/commons/PrizePool/Base.lua +++ b/lua/wikis/commons/PrizePool/Base.lua @@ -699,6 +699,7 @@ function BasePrizePool:_buildRows() -- Calculate club share for the placement Array.forEach(placement.opponents, function(opponent) + local basePrize local playerShare = nil Array.forEach(self.prizes, function(prize) if prize.type == PRIZE_TYPE_BASE_CURRENCY then From 8b480b38ce551929804a4f3e96f4dd08fc92460c Mon Sep 17 00:00:00 2001 From: mischiefcs Date: Fri, 20 Mar 2026 16:08:06 +0000 Subject: [PATCH 08/23] fixing spec --- lua/spec/prize_pool_spec.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/spec/prize_pool_spec.lua b/lua/spec/prize_pool_spec.lua index d1031c32b8a..5356b116c2e 100644 --- a/lua/spec/prize_pool_spec.lua +++ b/lua/spec/prize_pool_spec.lua @@ -103,7 +103,7 @@ describe('prize pool', function() PrizePool(prizePoolArgs):create():build() assert.stub(LpdbPlacementStub).was.called_with('ranking_abc1_Rathoz', { date = '2022-10-15', - extradata = '{"prizepoints":"","prizepoints2":"","playershare":""}', + extradata = '{"playershare":"0","prizepoints":"","prizepoints2":""}', game = 'commons', icon = 'test.png', icondark = 'test dark.png', From 69c0c0db349ba19325a7b2675e925cacb39db4d3 Mon Sep 17 00:00:00 2001 From: mischiefcs Date: Fri, 20 Mar 2026 16:09:22 +0000 Subject: [PATCH 09/23] fixing second storage spec --- lua/spec/prize_pool_spec.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/spec/prize_pool_spec.lua b/lua/spec/prize_pool_spec.lua index 5356b116c2e..be386d10d38 100644 --- a/lua/spec/prize_pool_spec.lua +++ b/lua/spec/prize_pool_spec.lua @@ -131,7 +131,7 @@ describe('prize pool', function() }) assert.stub(LpdbPlacementStub).was.called_with('ranking_abc1_Salt', { date = '2022-10-15', - extradata = '{"prizepoints":"","prizepoints2":""}', + extradata = '{"playershare":"0","prizepoints":"","prizepoints2":""}', game = 'commons', icon = 'test.png', icondark = 'test dark.png', From 312fe20201560f80c725f332db9d0a67bd0c66c6 Mon Sep 17 00:00:00 2001 From: mischiefcs Date: Fri, 20 Mar 2026 16:13:25 +0000 Subject: [PATCH 10/23] adding tests probably? --- lua/test_assets/lpdb_placement.lua | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lua/test_assets/lpdb_placement.lua b/lua/test_assets/lpdb_placement.lua index e10f7418e17..fa4ba974314 100644 --- a/lua/test_assets/lpdb_placement.lua +++ b/lua/test_assets/lpdb_placement.lua @@ -5,6 +5,7 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', + ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -102,6 +103,7 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', + ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -163,6 +165,7 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', + ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -256,6 +259,7 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', + ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -347,6 +351,7 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', + ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -450,6 +455,7 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', + ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -553,6 +559,7 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', + ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -644,6 +651,7 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', + ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -735,6 +743,7 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', + ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -832,6 +841,7 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', + ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -923,6 +933,7 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', + ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -1014,6 +1025,7 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', + ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -1123,6 +1135,7 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', + ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -1214,6 +1227,7 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', + ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -1311,6 +1325,7 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', + ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -1402,6 +1417,7 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', + ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', From a1f69c4a32bc20962f25d6e5446531977167cdf1 Mon Sep 17 00:00:00 2001 From: mischiefcs Date: Sun, 22 Mar 2026 12:05:50 +0000 Subject: [PATCH 11/23] resolving comments --- lua/wikis/commons/PrizePool/Base.lua | 8 ++++---- lua/wikis/commons/PrizePool/Placement.lua | 4 ++-- lua/wikis/commons/TeamParticipants/Repository.lua | 6 ++++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/lua/wikis/commons/PrizePool/Base.lua b/lua/wikis/commons/PrizePool/Base.lua index fdee696bde1..7341a8fcaaf 100644 --- a/lua/wikis/commons/PrizePool/Base.lua +++ b/lua/wikis/commons/PrizePool/Base.lua @@ -360,7 +360,7 @@ BasePrizePool.prizeTypes = { end, }, [PRIZE_TYPE_PLAYER_SHARE] = { - sortOrder = 55, + sortOrder = 60, header = 'playershare', headerParse = function (prizePool, input, context, index) @@ -384,7 +384,7 @@ BasePrizePool.prizeTypes = { end, }, [PRIZE_TYPE_CLUB_SHARE] = { - sortOrder = 56, + sortOrder = 70, header = 'clubshare', headerParse = function(prizePool, input, context, index) return {title = 'Club Share'} @@ -406,7 +406,7 @@ BasePrizePool.prizeTypes = { end, }, [PRIZE_TYPE_FREETEXT] = { - sortOrder = 60, + sortOrder = 80, header = 'freetext', headerParse = function (prizePool, input, context, index) @@ -700,7 +700,7 @@ function BasePrizePool:_buildRows() -- Calculate club share for the placement Array.forEach(placement.opponents, function(opponent) local basePrize - local playerShare = nil + local playerShare Array.forEach(self.prizes, function(prize) if prize.type == PRIZE_TYPE_BASE_CURRENCY then basePrize = opponent.prizeRewards[prize.id] or placement.prizeRewards[prize.id] diff --git a/lua/wikis/commons/PrizePool/Placement.lua b/lua/wikis/commons/PrizePool/Placement.lua index ee0d92256b8..3e85face6c1 100644 --- a/lua/wikis/commons/PrizePool/Placement.lua +++ b/lua/wikis/commons/PrizePool/Placement.lua @@ -236,7 +236,7 @@ function Placement:_getLpdbData(...) local pointsReward = self:getPrizeRewardForOpponent(opponent, PRIZE_TYPE_POINTS .. 1) local pointsReward2 = self:getPrizeRewardForOpponent(opponent, PRIZE_TYPE_POINTS .. 2) local isQualified = self:getPrizeRewardForOpponent(opponent, PRIZE_TYPE_QUALIFIES .. '1') - local playerShare = tonumber(self:getPrizeRewardForOpponent(opponent, PRIZE_TYPE_PLAYER_SHARE .. 1)) or 0 + local playerShare = tonumber(self:getPrizeRewardForOpponent(opponent, PRIZE_TYPE_PLAYER_SHARE .. 1)) local lpdbData = { image = image, @@ -264,7 +264,7 @@ function Placement:_getLpdbData(...) participantteam = (opponentType == Opponent.solo and players.p1team) and Opponent.toName{template = players.p1team, type = 'team', extradata = {}} or nil, - playershare = playerShare and tostring(playerShare) or nil, + playershare = playerShare and playerShare, }, qualified = isQualified and 1 or 0 -- TODO: We need to create additional LPDB Fields diff --git a/lua/wikis/commons/TeamParticipants/Repository.lua b/lua/wikis/commons/TeamParticipants/Repository.lua index 26a9629f4c6..1469e589300 100644 --- a/lua/wikis/commons/TeamParticipants/Repository.lua +++ b/lua/wikis/commons/TeamParticipants/Repository.lua @@ -93,12 +93,14 @@ function TeamParticipantsRepository.save(participant) lpdbData.players = lpdbData.opponentplayers -- Calculate individual prize money (prize money per player on team) - if lpdbData.prizemoney then + -- Opt to use playerShare over prizepool if available + local prizevalue = lpdbData.extradata and lpdbData.extradata.playershare or lpdbData.prizemoney + if prizevalue then local filteredPlayers = Array.filter(activeOpponent.players, function(player) return player.extradata.type ~= 'staff' end) local numberOfPlayersOnTeam = math.max(#(filteredPlayers), 1) - lpdbData.individualprizemoney = lpdbData.prizemoney / numberOfPlayersOnTeam + lpdbData.individualprizemoney = prizevalue / numberOfPlayersOnTeam end mw.ext.LiquipediaDB.lpdb_placement(lpdbData.objectName, Json.stringifySubTables(lpdbData)) From a5968747769bee342aa85442850691687a26aed1 Mon Sep 17 00:00:00 2001 From: mischiefcs Date: Sun, 22 Mar 2026 12:07:48 +0000 Subject: [PATCH 12/23] fixing spec --- lua/spec/prize_pool_spec.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/spec/prize_pool_spec.lua b/lua/spec/prize_pool_spec.lua index be386d10d38..26155645e20 100644 --- a/lua/spec/prize_pool_spec.lua +++ b/lua/spec/prize_pool_spec.lua @@ -103,7 +103,7 @@ describe('prize pool', function() PrizePool(prizePoolArgs):create():build() assert.stub(LpdbPlacementStub).was.called_with('ranking_abc1_Rathoz', { date = '2022-10-15', - extradata = '{"playershare":"0","prizepoints":"","prizepoints2":""}', + extradata = '{"playershare":"","prizepoints":"","prizepoints2":""}', game = 'commons', icon = 'test.png', icondark = 'test dark.png', @@ -131,7 +131,7 @@ describe('prize pool', function() }) assert.stub(LpdbPlacementStub).was.called_with('ranking_abc1_Salt', { date = '2022-10-15', - extradata = '{"playershare":"0","prizepoints":"","prizepoints2":""}', + extradata = '{"playershare":"","prizepoints":"","prizepoints2":""}', game = 'commons', icon = 'test.png', icondark = 'test dark.png', From 652a6b8e2ef41853d8be6a5693f21165778d79f7 Mon Sep 17 00:00:00 2001 From: mischiefcs Date: Sun, 22 Mar 2026 12:16:38 +0000 Subject: [PATCH 13/23] fixing defined spec for numbers --- lua/spec/prize_pool_spec.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/spec/prize_pool_spec.lua b/lua/spec/prize_pool_spec.lua index 26155645e20..4abf051644f 100644 --- a/lua/spec/prize_pool_spec.lua +++ b/lua/spec/prize_pool_spec.lua @@ -103,7 +103,7 @@ describe('prize pool', function() PrizePool(prizePoolArgs):create():build() assert.stub(LpdbPlacementStub).was.called_with('ranking_abc1_Rathoz', { date = '2022-10-15', - extradata = '{"playershare":"","prizepoints":"","prizepoints2":""}', + extradata = '{"playershare":970.97276906869001323,"prizepoints":"","prizepoints2":""}', game = 'commons', icon = 'test.png', icondark = 'test dark.png', @@ -131,7 +131,7 @@ describe('prize pool', function() }) assert.stub(LpdbPlacementStub).was.called_with('ranking_abc1_Salt', { date = '2022-10-15', - extradata = '{"playershare":"","prizepoints":"","prizepoints2":""}', + extradata = '{"playershare":0,"prizepoints":"","prizepoints2":""}', game = 'commons', icon = 'test.png', icondark = 'test dark.png', From 65fb79be6b3bea8c7d91ee72dd14b158520ac330 Mon Sep 17 00:00:00 2001 From: mischiefcs Date: Sun, 22 Mar 2026 15:16:46 +0000 Subject: [PATCH 14/23] resolving comments --- lua/spec/prize_pool_spec.lua | 4 ++-- lua/wikis/commons/PrizePool/Award/Placement.lua | 6 +----- lua/wikis/commons/PrizePool/Placement.lua | 2 +- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/lua/spec/prize_pool_spec.lua b/lua/spec/prize_pool_spec.lua index 4abf051644f..a6b871fa86b 100644 --- a/lua/spec/prize_pool_spec.lua +++ b/lua/spec/prize_pool_spec.lua @@ -103,7 +103,7 @@ describe('prize pool', function() PrizePool(prizePoolArgs):create():build() assert.stub(LpdbPlacementStub).was.called_with('ranking_abc1_Rathoz', { date = '2022-10-15', - extradata = '{"playershare":970.97276906869001323,"prizepoints":"","prizepoints2":""}', + extradata = '{"prizepoints":"","prizepoints2":""}', game = 'commons', icon = 'test.png', icondark = 'test dark.png', @@ -131,7 +131,7 @@ describe('prize pool', function() }) assert.stub(LpdbPlacementStub).was.called_with('ranking_abc1_Salt', { date = '2022-10-15', - extradata = '{"playershare":0,"prizepoints":"","prizepoints2":""}', + extradata = '{"prizepoints":"","prizepoints2":""}', game = 'commons', icon = 'test.png', icondark = 'test dark.png', diff --git a/lua/wikis/commons/PrizePool/Award/Placement.lua b/lua/wikis/commons/PrizePool/Award/Placement.lua index ced8c6b9aac..b64c29a90e2 100644 --- a/lua/wikis/commons/PrizePool/Award/Placement.lua +++ b/lua/wikis/commons/PrizePool/Award/Placement.lua @@ -18,7 +18,6 @@ local _tbd_index = 0 local PRIZE_TYPE_BASE_CURRENCY = 'BASE_CURRENCY' local PRIZE_TYPE_POINTS = 'POINTS' -local PRIZE_TYPE_PLAYER_SHARE = 'PLAYER_SHARE' --- An AwardPlacement is a set of opponents who all share the same award in the tournament. --- Its input is generally a table created by `Template:Slot`. @@ -76,12 +75,10 @@ function AwardPlacement:_getLpdbData(...) local prizeMoney = tonumber(self:getPrizeRewardForOpponent(opponent, PRIZE_TYPE_BASE_CURRENCY .. 1)) or 0 local pointsReward = self:getPrizeRewardForOpponent(opponent, PRIZE_TYPE_POINTS .. 1) local pointsReward2 = self:getPrizeRewardForOpponent(opponent, PRIZE_TYPE_POINTS .. 2) - local playerShare = tonumber(self:getPrizeRewardForOpponent(opponent, PRIZE_TYPE_PLAYER_SHARE .. 1)) local lpdbData = { date = opponent.date, prizemoney = prizeMoney, - individualprizemoney = Opponent.typeIsParty(opponentType) - and ((playerShare or prizeMoney) / Opponent.partySize(opponentType)) or 0, + individualprizemoney = Opponent.typeIsParty(opponentType) and (prizeMoney / Opponent.partySize(opponentType)) or 0, mode = 'award_individual', weight = 0, extradata = { @@ -92,7 +89,6 @@ function AwardPlacement:_getLpdbData(...) participantteam = (opponentType == Opponent.solo and players.p1team) and Opponent.toName{template = players.p1team, type = 'team'} or nil, - playerShare = not Opponent.typeIsParty(opponentType) and playerShare or nil, }, -- TODO: We need to create additional LPDB Field for Points struct (json?) diff --git a/lua/wikis/commons/PrizePool/Placement.lua b/lua/wikis/commons/PrizePool/Placement.lua index 3e85face6c1..662036ffc9f 100644 --- a/lua/wikis/commons/PrizePool/Placement.lua +++ b/lua/wikis/commons/PrizePool/Placement.lua @@ -264,7 +264,7 @@ function Placement:_getLpdbData(...) participantteam = (opponentType == Opponent.solo and players.p1team) and Opponent.toName{template = players.p1team, type = 'team', extradata = {}} or nil, - playershare = playerShare and playerShare, + playershare = playerShare, }, qualified = isQualified and 1 or 0 -- TODO: We need to create additional LPDB Fields From 317736ead49556f695d676842c8db9b7947ce84e Mon Sep 17 00:00:00 2001 From: hjpalpha <75081997+hjpalpha@users.noreply.github.com> Date: Mon, 23 Mar 2026 10:08:42 +0100 Subject: [PATCH 15/23] add test cases to #7284 (#7293) --- lua/spec/prize_pool_spec.lua | 107 ++++++++++++++++++++++++++--- lua/test_assets/lpdb_placement.lua | 16 ----- 2 files changed, 97 insertions(+), 26 deletions(-) diff --git a/lua/spec/prize_pool_spec.lua b/lua/spec/prize_pool_spec.lua index a6b871fa86b..cc404da9f9b 100644 --- a/lua/spec/prize_pool_spec.lua +++ b/lua/spec/prize_pool_spec.lua @@ -1,4 +1,5 @@ --- Triple Comment to Enable our LLS Plugin +local TeamTemplateMock = require('wikis.commons.Mock.TeamTemplate') describe('prize pool', function() local PrizePool = require('Module:PrizePool') local InfoboxLeague = require('Module:Infobox/League/Custom') @@ -13,6 +14,7 @@ describe('prize pool', function() stub(mw.ext.LiquipediaDB, "lpdb_tournament") LpdbPlacementStub = stub(mw.ext.LiquipediaDB, "lpdb_placement") InfoboxLeague.run(tournamentData) + TeamTemplateMock.setUp() end) after_each(function () @@ -20,9 +22,10 @@ describe('prize pool', function() ---@diagnostic disable-next-line: undefined-field mw.ext.LiquipediaDB.lpdb:revert() mw.ext.LiquipediaDB.lpdb_tournament:revert() + TeamTemplateMock.tearDown() end) - local prizePoolArgs = { + local prizePool1Args = { type = {type = 'solo'}, currencyroundprecision = 3, lpdb_prefix = 'abc', @@ -39,8 +42,19 @@ describe('prize pool', function() [2] = {qualified1 = true, [1] = {'Salt'}}, } + local prizePool2Args = { + type = {type = 'team'}, + currencyroundprecision = 2, + lpdb_prefix = 'abc', + import = false, + playershare = true, + [1] = {usdprize = '400000', playershare = '200000', [1] = {'mouz'}}, + [2] = {usdprize = '1,000', [1] = {'t1'}}, + } + it('parameters are correctly parsed', function() - local ppt = PrizePool(prizePoolArgs):create() + local ppt = PrizePool(prizePool1Args):create() + local ppt2 = PrizePool(prizePool2Args):create() assert.are_same( { @@ -73,6 +87,14 @@ describe('prize pool', function() }, ppt.prizes ) + assert.are_same( + { + {id = 'BASE_CURRENCY1', type = 'BASE_CURRENCY', index = 1, data = {roundPrecision = 2}}, + {id = 'PLAYER_SHARE1', type = 'PLAYER_SHARE', index = 1, data = {title = 'Player Share'}}, + {id = 'CLUB_SHARE1', type = 'CLUB_SHARE', index = 1, data = {title = 'Club Share', roundPrecision = 2}}, + }, + ppt2.prizes + ) assert.are_same( { @@ -96,11 +118,12 @@ describe('prize pool', function() describe('prize pool is correct', function() it('display', function() - GoldenTest('prize_pool', tostring(PrizePool(prizePoolArgs):create():build())) + GoldenTest('prize_pool', tostring(PrizePool(prizePool1Args):create():build())) + GoldenTest('prize_pool_player_share', tostring(PrizePool(prizePool2Args):create():build())) end) it('lpdb storage', function() - PrizePool(prizePoolArgs):create():build() + PrizePool(prizePool1Args):create():build() assert.stub(LpdbPlacementStub).was.called_with('ranking_abc1_Rathoz', { date = '2022-10-15', extradata = '{"prizepoints":"","prizepoints2":""}', @@ -157,42 +180,106 @@ describe('prize pool', function() type = 'Offline', qualified = 1, }) + + PrizePool(prizePool2Args):create():build() + assert.stub(LpdbPlacementStub).was.called_with('ranking_abc_mouz', { + date = '2022-10-15', + extradata = '{"playershare":200000,"prizepoints":"","prizepoints2":""}', + game = 'commons', + icon = 'test.png', + icondark = 'test dark.png', + image = 'MOUZ allmode.png', + imagedark = 'MOUZ allmode.png', + individualprizemoney = 0, + lastvsdata = '[]', + liquipediatier = '1', + liquipediatiertype = 'Qualifier', + opponentname = 'MOUZ', + opponentplayers = '[]', + opponenttype = 'team', + opponenttemplate = 'mouz 2021', + parent = 'FakePage', + participant = 'MOUZ', -- Legacy + participantlink = 'MOUZ', -- Legacy + participanttemplate = 'mouz 2021', + placement = 1, + players = '[]', -- Legacy + prizemoney = 400000, + prizepoolindex = 2, + series = 'Test Series', + shortname = 'Test Tourney', + startdate = '2022-10-13', + tournament = 'Test Tournament', + type = 'Offline', + qualified = 0, + }) + assert.stub(LpdbPlacementStub).was.called_with('ranking_abc_t1', { + date = '2022-10-15', + extradata = '{"prizepoints":"","prizepoints2":""}', + game = 'commons', + icon = 'test.png', + icondark = 'test dark.png', + image = 'T1 2019 allmode.png', + imagedark = 'T1 2019 allmode.png', + individualprizemoney = 0, + lastvsdata = '[]', + liquipediatier = '1', + liquipediatiertype = 'Qualifier', + opponentname = 'T1', + opponentplayers = '[]', + opponenttype = 'team', + opponenttemplate = 't1 2019', + parent = 'FakePage', + participant = 'T1', -- Legacy + participantlink = 'T1', -- Legacy + participanttemplate = 't1 2019', + placement = 2, + players = '[]', -- Legacy + prizemoney = 1000, + prizepoolindex = 2, + series = 'Test Series', + shortname = 'Test Tourney', + startdate = '2022-10-13', + tournament = 'Test Tournament', + type = 'Offline', + qualified = 0, + }) end) end) describe('enabling/disabling lpdb storage', function() it('normal behavior', function() - PrizePool(prizePoolArgs):create():build() + PrizePool(prizePool1Args):create():build() assert.stub(LpdbPlacementStub).called(2) end) it('disabled', function() - PrizePool(Table.merge(prizePoolArgs, {storelpdb = false})):create():build() + PrizePool(Table.merge(prizePool1Args, {storelpdb = false})):create():build() assert.stub(LpdbPlacementStub).called(0) end) it('wiki-var enabled', function() Variables.varDefine('disable_LPDB_storage', 'false') - PrizePool(prizePoolArgs):create():build() + PrizePool(prizePool1Args):create():build() assert.stub(LpdbPlacementStub).called(2) end) it('wiki-var enabled with override', function() Variables.varDefine('disable_LPDB_storage', 'false') - PrizePool(Table.merge(prizePoolArgs, {storelpdb = false})):create():build() + PrizePool(Table.merge(prizePool1Args, {storelpdb = false})):create():build() assert.stub(LpdbPlacementStub).called(0) end) it('wiki-var disable with override', function() Variables.varDefine('disable_LPDB_storage', 'true') - PrizePool(Table.merge(prizePoolArgs, {storelpdb = true})):create():build() + PrizePool(Table.merge(prizePool1Args, {storelpdb = true})):create():build() assert.stub(LpdbPlacementStub).called(2) end) it('wiki-var disable without override', function() Variables.varDefine('disable_LPDB_storage', 'true') - PrizePool(prizePoolArgs):create():build() + PrizePool(prizePool1Args):create():build() assert.stub(LpdbPlacementStub).called(0) end) end) diff --git a/lua/test_assets/lpdb_placement.lua b/lua/test_assets/lpdb_placement.lua index fa4ba974314..e10f7418e17 100644 --- a/lua/test_assets/lpdb_placement.lua +++ b/lua/test_assets/lpdb_placement.lua @@ -5,7 +5,6 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', - ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -103,7 +102,6 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', - ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -165,7 +163,6 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', - ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -259,7 +256,6 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', - ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -351,7 +347,6 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', - ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -455,7 +450,6 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', - ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -559,7 +553,6 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', - ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -651,7 +644,6 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', - ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -743,7 +735,6 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', - ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -841,7 +832,6 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', - ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -933,7 +923,6 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', - ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -1025,7 +1014,6 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', - ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -1135,7 +1123,6 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', - ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -1227,7 +1214,6 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', - ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -1325,7 +1311,6 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', - ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', @@ -1417,7 +1402,6 @@ return { ['extradata'] = { ['prizepoints'] = '', ['prizepoints2'] = '', - ['playershare'] = 0, }, ['game'] = 'siege', ['groupscore'] = '', From 5f94b426f2e60848a64846c396a7e3e3139086ae Mon Sep 17 00:00:00 2001 From: Finn Date: Mon, 23 Mar 2026 10:28:51 +0000 Subject: [PATCH 16/23] Apply suggestions from code review Co-authored-by: SyntacticSalt --- lua/wikis/commons/PrizePool/Base.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/wikis/commons/PrizePool/Base.lua b/lua/wikis/commons/PrizePool/Base.lua index 7341a8fcaaf..731f1e7718c 100644 --- a/lua/wikis/commons/PrizePool/Base.lua +++ b/lua/wikis/commons/PrizePool/Base.lua @@ -378,7 +378,7 @@ BasePrizePool.prizeTypes = { if data > 0 then return TableCell{children = { Currency.display(BASE_CURRENCY, data, - {formatValue = true, formatPrecision = headerData.roundPrecision, displayCurrencyCode = false}) + {formatValue = true, formatPrecision = headerData.roundPrecision, displayCurrencyCode = true}) }} end end, @@ -400,7 +400,7 @@ BasePrizePool.prizeTypes = { if data and tonumber(data) > 0 then return TableCell{children = { Currency.display(BASE_CURRENCY, data, - {formatValue = true, formatPrecision = headerData.roundPrecision, displayCurrencyCode = false}) + {formatValue = true, formatPrecision = headerData.roundPrecision, displayCurrencyCode = true}) }} end end, From 7009493d9b305778d869282c816875fd0b7f41e1 Mon Sep 17 00:00:00 2001 From: mischiefcs Date: Tue, 24 Mar 2026 10:55:22 +0000 Subject: [PATCH 17/23] allow setting of club share arg title also ensure that when set it does not duplicate club share columns --- lua/wikis/commons/PrizePool/Base.lua | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/lua/wikis/commons/PrizePool/Base.lua b/lua/wikis/commons/PrizePool/Base.lua index 731f1e7718c..2a9106efed1 100644 --- a/lua/wikis/commons/PrizePool/Base.lua +++ b/lua/wikis/commons/PrizePool/Base.lua @@ -387,7 +387,7 @@ BasePrizePool.prizeTypes = { sortOrder = 70, header = 'clubshare', headerParse = function(prizePool, input, context, index) - return {title = 'Club Share'} + return {title = String.isNotEmpty(input) and input or 'Club Share'} end, headerDisplay = function(data) return TableCell{children = {data.title}} @@ -475,7 +475,16 @@ function BasePrizePool:create() return prize.type == PRIZE_TYPE_PLAYER_SHARE end) if hasPlayerShare then - self:addPrize(PRIZE_TYPE_CLUB_SHARE, 1, {title = 'Club Share', roundPrecision = self.options.currencyRoundPrecision}) + local alreadyHasClubShare = Array.any(self.prizes, function(prize) + return prize.type == PRIZE_TYPE_CLUB_SHARE + end) + if not alreadyHasClubShare then + local clubShareTitle = self.args.clubshare + self:addPrize(PRIZE_TYPE_CLUB_SHARE, 1, { + title = String.isNotEmpty(clubShareTitle) and clubShareTitle or 'Club Share', + roundPrecision = self.options.currencyRoundPrecision + }) + end end if self.options.autoExchange then From 218d90a5d2f0c24a935966d6c0a945e40cb76670 Mon Sep 17 00:00:00 2001 From: mischiefcs Date: Thu, 26 Mar 2026 18:38:11 +0000 Subject: [PATCH 18/23] removing currency code for shares --- lua/wikis/commons/PrizePool/Base.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/wikis/commons/PrizePool/Base.lua b/lua/wikis/commons/PrizePool/Base.lua index 2a9106efed1..dfbd65563c6 100644 --- a/lua/wikis/commons/PrizePool/Base.lua +++ b/lua/wikis/commons/PrizePool/Base.lua @@ -378,7 +378,7 @@ BasePrizePool.prizeTypes = { if data > 0 then return TableCell{children = { Currency.display(BASE_CURRENCY, data, - {formatValue = true, formatPrecision = headerData.roundPrecision, displayCurrencyCode = true}) + {formatValue = true, formatPrecision = headerData.roundPrecision, displayCurrencyCode = false}) }} end end, @@ -400,7 +400,7 @@ BasePrizePool.prizeTypes = { if data and tonumber(data) > 0 then return TableCell{children = { Currency.display(BASE_CURRENCY, data, - {formatValue = true, formatPrecision = headerData.roundPrecision, displayCurrencyCode = true}) + {formatValue = true, formatPrecision = headerData.roundPrecision, displayCurrencyCode = false}) }} end end, From 8fa7212a55e5d4f4ea4f7f32e0dd659703edca78 Mon Sep 17 00:00:00 2001 From: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github.com> Date: Fri, 27 Mar 2026 01:05:10 +0000 Subject: [PATCH 19/23] chore: update visual snapshots --- lua/spec/snapshots/prize_pool_player_share.png | Bin 0 -> 26492 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 lua/spec/snapshots/prize_pool_player_share.png diff --git a/lua/spec/snapshots/prize_pool_player_share.png b/lua/spec/snapshots/prize_pool_player_share.png new file mode 100644 index 0000000000000000000000000000000000000000..d981e2062c655246225c582b4a74ae9095a0d9be GIT binary patch literal 26492 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 literal 0 HcmV?d00001 From 05615a3f7a6237a69578823bfebb8170670e4f89 Mon Sep 17 00:00:00 2001 From: hjpalpha <75081997+hjpalpha@users.noreply.github.com> Date: Mon, 4 May 2026 07:57:25 +0200 Subject: [PATCH 20/23] fix the merge conflict resolve --- lua/wikis/commons/TeamParticipants/Repository.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/wikis/commons/TeamParticipants/Repository.lua b/lua/wikis/commons/TeamParticipants/Repository.lua index fd46103d671..3eae53d795d 100644 --- a/lua/wikis/commons/TeamParticipants/Repository.lua +++ b/lua/wikis/commons/TeamParticipants/Repository.lua @@ -83,9 +83,9 @@ function TeamParticipantsRepository.save(participant) lpdbData = Table.mergeInto(lpdbData, Opponent.toLegacyParticipantData(activeOpponent)) lpdbData.players = lpdbData.opponentplayers + -- Calculate individual prize money (prize money per player on team) -- Opt to use playerShare over prizepool if available local prizevalue = lpdbData.extradata and lpdbData.extradata.playershare or lpdbData.prizemoney - -- Calculate individual prize money (prize money per player on team) if prizevalue then local filteredPlayers = Array.filter(activeOpponent.players, function(player) return player.extradata.type ~= 'staff' From 9cf2eb5781e16265f3e837ec9444ba42eaa21754 Mon Sep 17 00:00:00 2001 From: hjpalpha <75081997+hjpalpha@users.noreply.github.com> Date: Mon, 4 May 2026 06:00:29 +0000 Subject: [PATCH 21/23] chore: update visual snapshots --- .../snapshots/prize_pool_player_share.png | Bin 26492 -> 26508 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lua/spec/snapshots/prize_pool_player_share.png b/lua/spec/snapshots/prize_pool_player_share.png index d981e2062c655246225c582b4a74ae9095a0d9be..efc24b8d4fecbcb920f9bcbcc276ff2600afc06e 100644 GIT binary patch delta 20805 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 From d8a442c6bbb02bc5ad6b4b2113abc263ab7e5c3b Mon Sep 17 00:00:00 2001 From: hjpalpha <75081997+hjpalpha@users.noreply.github.com> Date: Thu, 7 May 2026 19:26:09 +0200 Subject: [PATCH 22/23] resolve comment (#7457) * try to resolve comment * nil catch * chore: update visual snapshots * lets try this * chore: update visual snapshots * extension ate a char again ... --- lua/wikis/commons/PrizePool/Base.lua | 28 ++++--------------- .../commons/PrizePool/Placement/Base.lua | 26 +++++++++++++++++ 2 files changed, 32 insertions(+), 22 deletions(-) diff --git a/lua/wikis/commons/PrizePool/Base.lua b/lua/wikis/commons/PrizePool/Base.lua index dfbd65563c6..297f5bf2c2f 100644 --- a/lua/wikis/commons/PrizePool/Base.lua +++ b/lua/wikis/commons/PrizePool/Base.lua @@ -498,11 +498,15 @@ function BasePrizePool:create() return prize.type == PRIZE_TYPE_PERCENTAGE and prize.index == 1 end) - for _, placement in ipairs(self.placements) do + Array.forEach(self.placements, function(placement) if hasPercentage1 then placement:_calculateFromPercentage(BasePrizePool.prizeTypes, hasLocalCurrency1) end placement:_setBaseFromRewards(Array.filter(self.prizes, canConvertCurrency), BasePrizePool.prizeTypes) - end + end) end + + Array.forEach(self.placements, function(placement) + placement:_setClubShareFromPlayerShare(self.prizes) + end) end table.sort(self.prizes, BasePrizePool._comparePrizes) @@ -706,26 +710,6 @@ function BasePrizePool:_buildRows() self:applyToggleExpand(previousPlacement, placement, rows) - -- Calculate club share for the placement - Array.forEach(placement.opponents, function(opponent) - local basePrize - local playerShare - Array.forEach(self.prizes, function(prize) - if prize.type == PRIZE_TYPE_BASE_CURRENCY then - basePrize = opponent.prizeRewards[prize.id] or placement.prizeRewards[prize.id] - return - end - if prize.type == PRIZE_TYPE_PLAYER_SHARE then - playerShare = opponent.prizeRewards[prize.id] or placement.prizeRewards[prize.id] - end - end) - if basePrize and playerShare then - local clubShare = tonumber(basePrize) - tonumber(playerShare) - if not opponent.prizeRewards then opponent.prizeRewards = {} end - opponent.prizeRewards[PRIZE_TYPE_CLUB_SHARE .. '1'] = clubShare - end - end) - local cells = {} table.insert(cells, self:placeOrAwardCell(placement)) diff --git a/lua/wikis/commons/PrizePool/Placement/Base.lua b/lua/wikis/commons/PrizePool/Placement/Base.lua index 0d15ed82051..907a8e9f57d 100644 --- a/lua/wikis/commons/PrizePool/Placement/Base.lua +++ b/lua/wikis/commons/PrizePool/Placement/Base.lua @@ -21,6 +21,8 @@ local LOCAL_CURRENCY_VARIABLE_POST_FIX = 'local' local PRIZE_TYPE_BASE_CURRENCY = 'BASE_CURRENCY' local PRIZE_TYPE_LOCAL_CURRENCY = 'LOCAL_CURRENCY' local PRIZE_TYPE_PERCENTAGE = 'PERCENT' +local PRIZE_TYPE_PLAYER_SHARE = 'PLAYER_SHARE' +local PRIZE_TYPE_CLUB_SHARE = 'CLUB_SHARE' --- A BasePlacement is a set of opponents who all share the same final place/award in the tournament. --- Its input is generally a table created by `Template:Slot`. @@ -210,6 +212,30 @@ function BasePlacement:_setBaseFromRewards(prizesToUse, prizeTypes) end) end +-- Calculate club share for the placement +---@param prizes BasePrizePoolPrize[] +function BasePlacement:_setClubShareFromPlayerShare(prizes) + Array.forEach(self.opponents, function(opponent) + local basePrize + local playerShare + Array.forEach(prizes, function(prize) + if prize.type == PRIZE_TYPE_BASE_CURRENCY then + basePrize = opponent.prizeRewards[prize.id] or self.prizeRewards[prize.id] + elseif prize.type == PRIZE_TYPE_PLAYER_SHARE then + playerShare = opponent.prizeRewards[prize.id] or self.prizeRewards[prize.id] + end + end) + basePrize = tonumber(basePrize) + playerShare = tonumber(playerShare) + + if not basePrize or not playerShare then + return + end + opponent.prizeRewards = opponent.prizeRewards or {} + opponent.prizeRewards[PRIZE_TYPE_CLUB_SHARE .. '1'] = basePrize - playerShare + end) +end + ---@param prizeTypes table ---@param hasLocalCurrency boolean function BasePlacement:_calculateFromPercentage(prizeTypes, hasLocalCurrency) From 74bc9dbe94a3941bfd13b3d02673f64f4002c873 Mon Sep 17 00:00:00 2001 From: mischiefcs Date: Fri, 8 May 2026 13:51:48 +0000 Subject: [PATCH 23/23] resolving comment for playerShare condition 4248833091 --- lua/wikis/commons/PrizePool/Base.lua | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lua/wikis/commons/PrizePool/Base.lua b/lua/wikis/commons/PrizePool/Base.lua index 297f5bf2c2f..9ab3d1ce75b 100644 --- a/lua/wikis/commons/PrizePool/Base.lua +++ b/lua/wikis/commons/PrizePool/Base.lua @@ -504,9 +504,11 @@ function BasePrizePool:create() end) end - Array.forEach(self.placements, function(placement) - placement:_setClubShareFromPlayerShare(self.prizes) - end) + if hasPlayerShare then + Array.forEach(self.placements, function(placement) + placement:_setClubShareFromPlayerShare(self.prizes) + end) + end end table.sort(self.prizes, BasePrizePool._comparePrizes)