From 5761d96ea06be2d83edfb8de0dc44cb18063cc75 Mon Sep 17 00:00:00 2001 From: mischiefcs Date: Thu, 19 Mar 2026 20:35:42 +0000 Subject: [PATCH 01/19] 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/19] 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/19] 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/19] 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/19] 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/19] 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/19] 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/19] 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/19] 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/19] 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/19] 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/19] 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/19] 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/19] 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/19] 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/19] 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/19] 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/19] 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/19] 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