Can you try editing this script? The issue is that the requirement is dynamic, because the player increases his TPM every 4 hours, and the reset is basically a week, meaning the requirement increases before the quest reset, so if a player claims it before that - it keeps increasing, a quest being marked as done while really being half done is weird, so please make the requirement AND reward only update upon quest reset.
The tpm increase has nothing to do with this. Summary is, I need the GetPlayerMultiplier function to stay static until a reset happens, updating the multiplayers.
It looks weird when the quest is done, but the progress is 100K/500M if you get me...
local QuestData = {
	["MaxFrame1"] = { BaseRequirement = 100000, BaseReward = 200, Stat = "FS" },
	["MaxFrame2"] = { BaseRequirement = 50000, BaseReward = 200, Stat = "BT" },
	["MaxFrame3"] = { BaseRequirement = 10000, BaseReward = 200, Stat = "PP" },
	["MaxFrame4"] = { BaseRequirement = 10000000, BaseReward = 1000, Stat = "FS" },
	["MaxFrame5"] = { BaseRequirement = 5000000, BaseReward = 1000, Stat = "BT" },
	["MaxFrame6"] = { BaseRequirement = 1000000, BaseReward = 1000, Stat = "PP" },
	["MaxFrame7"] = { BaseRequirement = 1000000000, BaseReward = 2500, Stat = "FS" },
	["MaxFrame8"] = { BaseRequirement = 500000000, BaseReward = 2500, Stat = "BT" },
	["MaxFrame9"] = { BaseRequirement = 100000000, BaseReward = 2500, Stat = "PP" },
}

local function GetPlayerMultiplier(player)
	local playerValue = player.PlayerFolder.DataFolder.ExtraTPM.Value
	local multiplier = math.max(1, math.ceil(playerValue / 5))
	return multiplier
end

local function CalculateQuestRequirement(player, maxFrame)
	local quest = QuestData[maxFrame]
	local multiplier = GetPlayerMultiplier(player)
	return quest.BaseRequirement * (multiplier ^ 1.5)
end

local function CalculateQuestReward(player, maxFrame)
	local quest = QuestData[maxFrame]
	local multiplier = GetPlayerMultiplier(player)
	return quest.BaseReward * multiplier
end

local function InitializeWeeklyQuestData(player)
	local weeklyQuestData = player.PlayerFolder.QuestData.WeeklyQuest
	for maxFrame, _ in pairs(QuestData) do
		if not weeklyQuestData:FindFirstChild(maxFrame) then
		warn('script launched before init')
		end
	end

	if not weeklyQuestData:FindFirstChild("LastReset") then
		warn('no last reset in pd')
	end
end

local function ResetWeeklyQuests(player)
	local weeklyQuestData = player.PlayerFolder.QuestData.WeeklyQuest
	for maxFrame, _ in pairs(QuestData) do
		local questFolder = weeklyQuestData:FindFirstChild(maxFrame)
		if questFolder then
			questFolder.Progress.Value = 0
			questFolder.Claimed.Value = false
			questFolder.Requirement.Value = CalculateQuestRequirement(player, maxFrame)
			questFolder.Reward.Value = CalculateQuestReward(player, maxFrame)
		end
	end
	weeklyQuestData.LastReset.Value = os.time()
end

local function GetLastWednesday()
	local currentTime = os.time()
	local currentDate = os.date("!*t", currentTime)

	local daysSinceWednesday = (currentDate.wday - 4 + 7) % 7
	local lastWednesdayTime = currentTime - daysSinceWednesday * 86400

	local lastWednesdayDate = os.date("!*t", lastWednesdayTime)
	lastWednesdayDate.hour = 0
	lastWednesdayDate.min = 0
	lastWednesdayDate.sec = 0
	lastWednesdayTime = os.time(lastWednesdayDate)

	return lastWednesdayTime
end

local function CheckWeeklyQuestReset(player)
	local weeklyQuestData = player.PlayerFolder.QuestData.WeeklyQuest
	local lastReset = weeklyQuestData.LastReset.Value
	local lastWednesdayTime = GetLastWednesday()

	if lastReset < lastWednesdayTime then
		ResetWeeklyQuests(player)
	end
end

local function OnWeeklyQuestClaim(player, maxFrame)
	local weeklyQuestData = player.PlayerFolder.QuestData.WeeklyQuest
	local questData = weeklyQuestData[maxFrame]
	if questData then
		if questData.Claimed.Value then
			return
		end
		local requirement = questData.Requirement.Value
		if questData.Progress.Value >= requirement then
			local reward = questData.Reward.Value
			player.PlayerFolder.DataFolder.Tokens.Value = player.PlayerFolder.DataFolder.Tokens.Value + reward
			questData.Claimed.Value = true

			local progress = questData.Progress.Value
			local claimed = questData.Claimed.Value
			game.ReplicatedStorage.WeeklyQuestUpdate:FireClient(player, maxFrame, progress, requirement, claimed, reward)
		end
	end
end

game.ReplicatedStorage.WeeklyQuestClaim.OnServerEvent:Connect(OnWeeklyQuestClaim)

game.Players.PlayerAdded:Connect(function(player)
	player:WaitForChild('PlayerFolder'):WaitForChild('QuestData'):WaitForChild('WeeklyQuest')
	InitializeWeeklyQuestData(player)
	CheckWeeklyQuestReset(player)
end)

game.ReplicatedStorage.GetWeeklyQuestData.OnServerInvoke = function(player)
	local weeklyQuestData = player.PlayerFolder.QuestData.WeeklyQuest
	local questDataToSend = {}
	for maxFrameName, _ in pairs(QuestData) do
		local questFolder = weeklyQuestData[maxFrameName]
		questDataToSend[maxFrameName] = {
			Progress = questFolder.Progress.Value,
			Requirement = questFolder.Requirement.Value,
			Claimed = questFolder.Claimed.Value,
			Reward = questFolder.Reward.Value
		}
	end
	return questDataToSend
end