TimberWoods / src /StarterGui /MarketGUI.client.lua
algorembrant's picture
Upload 88 files
0712d5f verified
-- src/StarterGui/MarketGUI.client.lua
-- Live market prices display with trend indicators
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local player = Players.LocalPlayer
local EconomyConfig = require(ReplicatedStorage:WaitForChild("Shared"):WaitForChild("EconomyConfig"))
local Utility = require(ReplicatedStorage:WaitForChild("Shared"):WaitForChild("Utility"))
local MarketUpdateEvent = ReplicatedStorage:WaitForChild("Events"):WaitForChild("MarketUpdateEvent")
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "MarketGUI"
screenGui.ResetOnSpawn = false
screenGui.Parent = player:WaitForChild("PlayerGui")
local mainFrame = Instance.new("Frame")
mainFrame.Name = "MarketFrame"
mainFrame.Size = UDim2.new(0, 300, 0, 380)
mainFrame.Position = UDim2.new(0, 10, 0.5, -190)
mainFrame.BackgroundColor3 = Color3.fromRGB(20, 25, 30)
mainFrame.BackgroundTransparency = 0.1
mainFrame.BorderSizePixel = 0
mainFrame.Visible = false
mainFrame.Parent = screenGui
local frameCorner = Instance.new("UICorner")
frameCorner.CornerRadius = UDim.new(0, 12)
frameCorner.Parent = mainFrame
local frameStroke = Instance.new("UIStroke")
frameStroke.Color = Color3.fromRGB(200, 160, 60)
frameStroke.Thickness = 2
frameStroke.Parent = mainFrame
local titleBar = Instance.new("Frame")
titleBar.Size = UDim2.new(1, 0, 0, 35)
titleBar.BackgroundColor3 = Color3.fromRGB(150, 120, 30)
titleBar.BorderSizePixel = 0
titleBar.Parent = mainFrame
local titleCorner = Instance.new("UICorner")
titleCorner.CornerRadius = UDim.new(0, 12)
titleCorner.Parent = titleBar
local titleLabel = Instance.new("TextLabel")
titleLabel.Size = UDim2.new(1, -50, 1, 0)
titleLabel.Position = UDim2.new(0, 10, 0, 0)
titleLabel.BackgroundTransparency = 1
titleLabel.Text = "Market Prices"
titleLabel.TextColor3 = Color3.new(1, 1, 1)
titleLabel.TextScaled = true
titleLabel.Font = Enum.Font.GothamBold
titleLabel.TextXAlignment = Enum.TextXAlignment.Left
titleLabel.Parent = titleBar
local closeBtn = Instance.new("TextButton")
closeBtn.Size = UDim2.new(0, 28, 0, 28)
closeBtn.Position = UDim2.new(1, -32, 0, 3)
closeBtn.BackgroundColor3 = Color3.fromRGB(180, 50, 50)
closeBtn.Text = "X"
closeBtn.TextColor3 = Color3.new(1, 1, 1)
closeBtn.TextScaled = true
closeBtn.Font = Enum.Font.GothamBold
closeBtn.Parent = titleBar
local closeCorner = Instance.new("UICorner")
closeCorner.CornerRadius = UDim.new(0, 6)
closeCorner.Parent = closeBtn
closeBtn.MouseButton1Click:Connect(function()
mainFrame.Visible = false
end)
local scrollFrame = Instance.new("ScrollingFrame")
scrollFrame.Size = UDim2.new(1, -16, 1, -45)
scrollFrame.Position = UDim2.new(0, 8, 0, 38)
scrollFrame.BackgroundTransparency = 1
scrollFrame.BorderSizePixel = 0
scrollFrame.ScrollBarThickness = 5
scrollFrame.CanvasSize = UDim2.new(0, 0, 0, 0)
scrollFrame.Parent = mainFrame
local listLayout = Instance.new("UIListLayout")
listLayout.SortOrder = Enum.SortOrder.LayoutOrder
listLayout.Padding = UDim.new(0, 3)
listLayout.Parent = scrollFrame
-- Previous rates for trend arrows
local previousRates = {}
local function updateMarketDisplay(rates)
-- Clear old entries
for _, child in pairs(scrollFrame:GetChildren()) do
if child:IsA("Frame") then child:Destroy() end
end
local idx = 0
for woodType, rate in pairs(rates) do
idx = idx + 1
local baseValue = EconomyConfig.WoodBaseValues[woodType] or 0
local currentPrice = math.floor(baseValue * rate)
local prevRate = previousRates[woodType] or 1.0
local trend = ""
local trendColor = Color3.new(1, 1, 1)
if rate > prevRate + 0.01 then
trend = " ^"
trendColor = Color3.fromRGB(100, 255, 100)
elseif rate < prevRate - 0.01 then
trend = " v"
trendColor = Color3.fromRGB(255, 100, 100)
else
trend = " ="
trendColor = Color3.fromRGB(200, 200, 200)
end
local row = Instance.new("Frame")
row.Size = UDim2.new(1, 0, 0, 22)
row.LayoutOrder = idx
row.BackgroundColor3 = idx % 2 == 0 and Color3.fromRGB(30, 33, 40) or Color3.fromRGB(25, 28, 35)
row.BorderSizePixel = 0
row.Parent = scrollFrame
local rowCorner = Instance.new("UICorner")
rowCorner.CornerRadius = UDim.new(0, 4)
rowCorner.Parent = row
local nameLabel = Instance.new("TextLabel")
nameLabel.Size = UDim2.new(0.45, 0, 1, 0)
nameLabel.Position = UDim2.new(0, 5, 0, 0)
nameLabel.BackgroundTransparency = 1
nameLabel.Text = woodType
nameLabel.TextColor3 = Color3.new(1, 1, 1)
nameLabel.TextScaled = true
nameLabel.Font = Enum.Font.GothamMedium
nameLabel.TextXAlignment = Enum.TextXAlignment.Left
nameLabel.Parent = row
local priceLabel = Instance.new("TextLabel")
priceLabel.Size = UDim2.new(0.3, 0, 1, 0)
priceLabel.Position = UDim2.new(0.45, 0, 0, 0)
priceLabel.BackgroundTransparency = 1
priceLabel.Text = "$" .. tostring(currentPrice) .. "/vol"
priceLabel.TextColor3 = Color3.fromRGB(255, 215, 0)
priceLabel.TextScaled = true
priceLabel.Font = Enum.Font.GothamMedium
priceLabel.Parent = row
local trendLabel = Instance.new("TextLabel")
trendLabel.Size = UDim2.new(0.2, 0, 1, 0)
trendLabel.Position = UDim2.new(0.78, 0, 0, 0)
trendLabel.BackgroundTransparency = 1
trendLabel.Text = string.format("%.0f%%", rate * 100) .. trend
trendLabel.TextColor3 = trendColor
trendLabel.TextScaled = true
trendLabel.Font = Enum.Font.GothamBold
trendLabel.Parent = row
end
previousRates = rates
task.wait()
scrollFrame.CanvasSize = UDim2.new(0, 0, 0, listLayout.AbsoluteContentSize.Y + 10)
end
-- Listen for market updates
MarketUpdateEvent.OnClientEvent:Connect(function(rates)
updateMarketDisplay(rates)
end)
-- Toggle with M key
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if gameProcessed then return end
if input.KeyCode == Enum.KeyCode.M then
mainFrame.Visible = not mainFrame.Visible
end
end)