View difference between Paste ID: uN1bXUFJ and EPPkbZgN
SHOW: | | - or go back to the newest paste.
1
local Players = game:GetService("Players")
2
local TweenService = game:GetService("TweenService")
3
local UserInputService = game:GetService("UserInputService")
4
local MarketplaceService = game:GetService("MarketplaceService")
5
6
local player = Players.LocalPlayer
7
local playerGui = player:WaitForChild("PlayerGui")
8
9
if playerGui:FindFirstChild("SeluwiaUI") then
10
    playerGui.SeluwiaUI:Destroy()
11
end
12
13
local screenGui = Instance.new("ScreenGui")
14
screenGui.Name = "SeluwiaUI"
15
screenGui.ResetOnSpawn = false
16
screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
17
screenGui.IgnoreGuiInset = true
18
screenGui.Parent = playerGui
19
20
local isMobile = UserInputService.TouchEnabled
21
local autoSpeed = 100  -- signals per second
22
23
-- Helper functions
24
local function stroke(parent, color, thickness)
25
    local s = Instance.new("UIStroke", parent)
26
    s.Color = color or Color3.fromRGB(40, 40, 56)
27
    s.Thickness = thickness or 1
28
    return s
29
end
30
31
local function corner(parent, radius)
32
    local c = Instance.new("UICorner", parent)
33
    c.CornerRadius = UDim.new(0, radius or 10)
34
    return c
35
end
36
37
local function getTime()
38
    return os.date("%H:%M:%S")
39
end
40
41
-- Scale UI for mobile
42
local panelSize
43
local fontSizeScale = isMobile and 0.8 or 1
44
local buttonHeight = isMobile and 36 or 28
45
local titleBarHeight = isMobile and 44 or 52
46
local footerHeight = isMobile and 44 or 50
47
48
if isMobile then
49
    panelSize = UDim2.new(0.9, 0, 0.7, 0)
50
else
51
    panelSize = UDim2.new(0, 760, 0, 520)
52
end
53
54
local panel = Instance.new("Frame")
55
panel.Name = "Panel"
56
panel.Size = panelSize
57
panel.Position = UDim2.new(0.5, -panelSize.X.Offset/2, 0.5, -panelSize.Y.Offset/2)
58
if isMobile then
59
    panel.Position = UDim2.new(0.05, 0, 0.15, 0)
60
end
61
panel.BackgroundColor3 = Color3.fromRGB(10, 10, 12)
62
panel.BorderSizePixel = 0
63
panel.Parent = screenGui
64
corner(panel, 16)
65
stroke(panel, Color3.fromRGB(30, 30, 42), 1)
66
67
-- Resize handle (PC only)
68
if not isMobile then
69
    local resizeHandle = Instance.new("Frame")
70
    resizeHandle.Name = "ResizeHandle"
71
    resizeHandle.Size = UDim2.new(0, 20, 0, 20)
72
    resizeHandle.Position = UDim2.new(1, -20, 1, -20)
73
    resizeHandle.AnchorPoint = Vector2.new(1, 1)
74
    resizeHandle.BackgroundColor3 = Color3.fromRGB(30, 30, 45)
75
    resizeHandle.BorderSizePixel = 0
76
    resizeHandle.Parent = panel
77
    corner(resizeHandle, 4)
78
    stroke(resizeHandle, Color3.fromRGB(80, 80, 110), 1)
79
80
    local resizing = false
81
    local resizeStartPos, startSize
82
    resizeHandle.InputBegan:Connect(function(input)
83
        if input.UserInputType == Enum.UserInputType.MouseButton1 then
84
            resizing = true
85
            resizeStartPos = input.Position
86
            startSize = panel.AbsoluteSize
87
        end
88
    end)
89
    UserInputService.InputChanged:Connect(function(input)
90
        if resizing and input.UserInputType == Enum.UserInputType.MouseMovement then
91
            local delta = input.Position - resizeStartPos
92
            local newWidth = math.clamp(startSize.X + delta.X, 400, 1200)
93
            local newHeight = math.clamp(startSize.Y + delta.Y, 300, 800)
94
            panel.Size = UDim2.new(0, newWidth, 0, newHeight)
95
        end
96
    end)
97
    UserInputService.InputEnded:Connect(function(input)
98
        if input.UserInputType == Enum.UserInputType.MouseButton1 then
99
            resizing = false
100
        end
101
    end)
102
end
103
104
-- Dragging
105
local dragging = false
106
local dragStart, startPos
107
108
local function onInputBegan(input)
109
    if (input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch) and not resizing then
110
        dragging = true
111
        dragStart = input.Position
112
        startPos = panel.Position
113
    end
114
end
115
116
local function onInputChanged(input)
117
    if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
118
        local delta = input.Position - dragStart
119
        panel.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
120
    end
121
end
122
123
local function onInputEnded(input)
124
    if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
125
        dragging = false
126
    end
127
end
128
129
-- Title bar
130
local titleBar = Instance.new("Frame")
131
titleBar.Name = "TitleBar"
132
titleBar.Size = UDim2.new(1, 0, 0, titleBarHeight)
133
titleBar.BackgroundColor3 = Color3.fromRGB(13, 13, 17)
134
titleBar.BorderSizePixel = 0
135
titleBar.Parent = panel
136
corner(titleBar, 16)
137
stroke(titleBar, Color3.fromRGB(22, 22, 31), 1)
138
139
local titleFill = Instance.new("Frame")
140
titleFill.Size = UDim2.new(1, 0, 0, 18)
141
titleFill.Position = UDim2.new(0, 0, 1, -18)
142
titleFill.BackgroundColor3 = Color3.fromRGB(13, 13, 17)
143
titleFill.BorderSizePixel = 0
144
titleFill.ZIndex = titleBar.ZIndex + 1
145
titleFill.Parent = titleBar
146
147
titleBar.InputBegan:Connect(onInputBegan)
148
UserInputService.InputChanged:Connect(onInputChanged)
149
UserInputService.InputEnded:Connect(onInputEnded)
150
151
-- Live dot
152
local liveDot = Instance.new("Frame")
153
liveDot.Size = UDim2.new(0, 9, 0, 9)
154
liveDot.Position = UDim2.new(0, 20, 0.5, -4)
155
liveDot.BackgroundColor3 = Color3.fromRGB(61, 255, 160)
156
liveDot.BorderSizePixel = 0
157
liveDot.ZIndex = titleBar.ZIndex + 2
158
liveDot.Parent = titleBar
159
corner(liveDot, 999)
160
161
local liveLabel = Instance.new("TextLabel")
162
liveLabel.Size = UDim2.new(0, 50, 0, 20)
163
liveLabel.Position = UDim2.new(0, 34, 0.5, -10)
164
liveLabel.BackgroundTransparency = 1
165
liveLabel.Text = "LIVE"
166
liveLabel.TextColor3 = Color3.fromRGB(61, 255, 160)
167
liveLabel.TextSize = 11 * fontSizeScale
168
liveLabel.Font = Enum.Font.GothamBold
169
liveLabel.TextXAlignment = Enum.TextXAlignment.Left
170
liveLabel.ZIndex = titleBar.ZIndex + 2
171
liveLabel.Parent = titleBar
172
173
task.spawn(function()
174
    while screenGui.Parent do
175
        TweenService:Create(liveDot, TweenInfo.new(1), {Size = UDim2.new(0,11,0,11), Position = UDim2.new(0,19,0.5,-5)}):Play()
176
        task.wait(1)
177
        TweenService:Create(liveDot, TweenInfo.new(1), {Size = UDim2.new(0,9,0,9), Position = UDim2.new(0,20,0.5,-4)}):Play()
178
        task.wait(1)
179
    end
180
end)
181
182
local titleText = Instance.new("TextLabel")
183
titleText.Size = UDim2.new(0, 200, 1, 0)
184
titleText.Position = UDim2.new(0.5, -100, 0, 0)
185
titleText.BackgroundTransparency = 1
186
titleText.Text = "SELUWIA"
187
titleText.TextColor3 = Color3.fromRGB(210, 210, 228)
188
titleText.TextSize = 14 * fontSizeScale
189
titleText.Font = Enum.Font.GothamBold
190
titleText.ZIndex = titleBar.ZIndex + 2
191
titleText.Parent = titleBar
192
193
local clearBtn = Instance.new("TextButton")
194
clearBtn.Size = UDim2.new(0, 76, 0, 30)
195
clearBtn.Position = UDim2.new(1, -92, 0.5, -15)
196
clearBtn.BackgroundColor3 = Color3.fromRGB(10, 10, 12)
197
clearBtn.Text = "X Clear"
198
clearBtn.TextColor3 = Color3.fromRGB(255, 80, 80)
199
clearBtn.TextSize = 11 * fontSizeScale
200
clearBtn.Font = Enum.Font.GothamBold
201
clearBtn.BorderSizePixel = 0
202
clearBtn.ZIndex = titleBar.ZIndex + 3
203
clearBtn.Parent = titleBar
204
corner(clearBtn, 8)
205
stroke(clearBtn, Color3.fromRGB(80, 28, 28), 1)
206
207
clearBtn.MouseEnter:Connect(function()
208
    clearBtn.BackgroundColor3 = Color3.fromRGB(28, 10, 10)
209
end)
210
clearBtn.MouseLeave:Connect(function()
211
    clearBtn.BackgroundColor3 = Color3.fromRGB(10, 10, 12)
212
end)
213
214
-- Log area
215
local logArea = Instance.new("ScrollingFrame")
216
logArea.Name = "LogArea"
217
logArea.Size = UDim2.new(1, -12, 1, -(titleBarHeight + footerHeight + 10))
218
logArea.Position = UDim2.new(0, 6, 0, titleBarHeight + 6)
219
logArea.BackgroundTransparency = 1
220
logArea.BorderSizePixel = 0
221
logArea.ScrollBarThickness = isMobile and 6 or 3
222
logArea.ScrollBarImageColor3 = Color3.fromRGB(60, 60, 90)
223
logArea.CanvasSize = UDim2.new(0, 0, 0, 0)
224
logArea.AutomaticCanvasSize = Enum.AutomaticSize.Y
225
logArea.Parent = panel
226
227
local listLayout = Instance.new("UIListLayout", logArea)
228
listLayout.SortOrder = Enum.SortOrder.LayoutOrder
229
listLayout.Padding = UDim.new(0, isMobile and 10 or 7)
230
listLayout.VerticalAlignment = Enum.VerticalAlignment.Top
231
232
local logPad = Instance.new("UIPadding", logArea)
233
logPad.PaddingTop = UDim.new(0, 8)
234
logPad.PaddingBottom = UDim.new(0, 6)
235
logPad.PaddingLeft = UDim.new(0, 4)
236
logPad.PaddingRight = UDim.new(0, 4)
237
238
-- Footer
239
local footer = Instance.new("Frame")
240
footer.Size = UDim2.new(1, 0, 0, footerHeight)
241
footer.Position = UDim2.new(0, 0, 1, -footerHeight)
242
footer.BackgroundColor3 = Color3.fromRGB(13, 13, 17)
243
footer.BorderSizePixel = 0
244
footer.Parent = panel
245
corner(footer, 16)
246
247
local footerFill = Instance.new("Frame")
248
footerFill.Size = UDim2.new(1, 0, 0, 18)
249
footerFill.BackgroundColor3 = Color3.fromRGB(13, 13, 17)
250
footerFill.BorderSizePixel = 0
251
footerFill.Parent = footer
252
253
local countLabel = Instance.new("TextLabel")
254
countLabel.Size = UDim2.new(0, 160, 1, 0)
255
countLabel.Position = UDim2.new(0, 20, 0, 0)
256
countLabel.BackgroundTransparency = 1
257
countLabel.Text = "0 events captured"
258
countLabel.TextColor3 = Color3.fromRGB(160, 155, 200)
259
countLabel.TextSize = 12 * fontSizeScale
260
countLabel.Font = Enum.Font.Gotham
261
countLabel.TextXAlignment = Enum.TextXAlignment.Left
262
countLabel.ZIndex = footer.ZIndex + 1
263
countLabel.Parent = footer
264
265
local settingsBtn = Instance.new("TextButton")
266
settingsBtn.Size = UDim2.new(0, 50, 0, buttonHeight)
267
settingsBtn.Position = UDim2.new(1, -90, 0.5, -buttonHeight/2)
268
settingsBtn.BackgroundColor3 = Color3.fromRGB(20, 20, 30)
269
settingsBtn.Text = "SET"
270
settingsBtn.TextColor3 = Color3.fromRGB(170, 165, 220)
271
settingsBtn.TextSize = 11 * fontSizeScale
272
settingsBtn.Font = Enum.Font.GothamBold
273
settingsBtn.BorderSizePixel = 0
274
settingsBtn.ZIndex = footer.ZIndex + 1
275
settingsBtn.Parent = footer
276
corner(settingsBtn, 7)
277
stroke(settingsBtn, Color3.fromRGB(55, 50, 85), 1)
278
279
local stopAllBtn = Instance.new("TextButton")
280
stopAllBtn.Size = UDim2.new(0, 80, 0, buttonHeight)
281
stopAllBtn.Position = UDim2.new(1, -170, 0.5, -buttonHeight/2)
282
stopAllBtn.BackgroundColor3 = Color3.fromRGB(35, 15, 15)
283
stopAllBtn.Text = "Stop All"
284
stopAllBtn.TextColor3 = Color3.fromRGB(255, 120, 120)
285
stopAllBtn.TextSize = 11 * fontSizeScale
286
stopAllBtn.Font = Enum.Font.GothamBold
287
stopAllBtn.BorderSizePixel = 0
288
stopAllBtn.ZIndex = footer.ZIndex + 1
289
stopAllBtn.Parent = footer
290
corner(stopAllBtn, 7)
291
stroke(stopAllBtn, Color3.fromRGB(80, 30, 30), 1)
292
293
local closeBtn = Instance.new("TextButton")
294
closeBtn.Size = UDim2.new(0, 26, 0, 26)
295
closeBtn.Position = UDim2.new(1, -6, 0, -6)
296
closeBtn.AnchorPoint = Vector2.new(1, 0)
297
closeBtn.BackgroundColor3 = Color3.fromRGB(35, 12, 12)
298
closeBtn.Text = "X"
299
closeBtn.TextColor3 = Color3.fromRGB(255, 90, 90)
300
closeBtn.TextSize = 17 * fontSizeScale
301
closeBtn.Font = Enum.Font.GothamBold
302
closeBtn.BorderSizePixel = 0
303
closeBtn.ZIndex = 10
304
closeBtn.Parent = panel
305
corner(closeBtn, 999)
306
307
-- Settings window (toggle)
308
local settingsWindow = nil
309
local function toggleSettings()
310
    if settingsWindow then
311
        settingsWindow:Destroy()
312
        settingsWindow = nil
313
    else
314
        settingsWindow = Instance.new("Frame")
315
        settingsWindow.Name = "SettingsWindow"
316
        settingsWindow.Size = UDim2.new(0, 300, 0, 200)
317
        settingsWindow.Position = UDim2.new(0.5, -150, 0.5, -100)
318
        settingsWindow.BackgroundColor3 = Color3.fromRGB(13, 13, 17)
319
        settingsWindow.BorderSizePixel = 0
320
        settingsWindow.ZIndex = 50
321
        settingsWindow.Parent = screenGui
322
        corner(settingsWindow, 12)
323
        stroke(settingsWindow, Color3.fromRGB(30, 30, 45), 1)
324
325
        local settingsTitleBar = Instance.new("Frame")
326
        settingsTitleBar.Size = UDim2.new(1, 0, 0, 40)
327
        settingsTitleBar.BackgroundColor3 = Color3.fromRGB(10, 10, 14)
328
        settingsTitleBar.BorderSizePixel = 0
329
        settingsTitleBar.ZIndex = 51
330
        settingsTitleBar.Parent = settingsWindow
331
        corner(settingsTitleBar, 12)
332
333
        local settingsTitle = Instance.new("TextLabel")
334
        settingsTitle.Size = UDim2.new(1, -40, 1, 0)
335
        settingsTitle.Position = UDim2.new(0, 10, 0, 0)
336
        settingsTitle.BackgroundTransparency = 1
337
        settingsTitle.Text = "Settings"
338
        settingsTitle.TextColor3 = Color3.fromRGB(210, 210, 228)
339
        settingsTitle.TextSize = 14
340
        settingsTitle.Font = Enum.Font.GothamBold
341
        settingsTitle.TextXAlignment = Enum.TextXAlignment.Left
342
        settingsTitle.ZIndex = 52
343
        settingsTitle.Parent = settingsTitleBar
344
345
        local closeSettingsBtn = Instance.new("TextButton")
346
        closeSettingsBtn.Size = UDim2.new(0, 24, 0, 24)
347
        closeSettingsBtn.Position = UDim2.new(1, -30, 0, 8)
348
        closeSettingsBtn.BackgroundColor3 = Color3.fromRGB(35, 12, 12)
349
        closeSettingsBtn.Text = "X"
350
        closeSettingsBtn.TextColor3 = Color3.fromRGB(255, 90, 90)
351
        closeSettingsBtn.TextSize = 14
352
        closeSettingsBtn.Font = Enum.Font.GothamBold
353
        closeSettingsBtn.BorderSizePixel = 0
354
        closeSettingsBtn.ZIndex = 52
355
        closeSettingsBtn.Parent = settingsTitleBar
356
        corner(closeSettingsBtn, 12)
357
        closeSettingsBtn.MouseButton1Click:Connect(function()
358
            if settingsWindow then
359
                settingsWindow:Destroy()
360
                settingsWindow = nil
361
            end
362
        end)
363
364
        -- Drag settings window
365
        local dragStartPos, dragStartMouse
366
        local draggingSettings = false
367
        settingsTitleBar.InputBegan:Connect(function(input)
368
            if input.UserInputType == Enum.UserInputType.MouseButton1 then
369
                draggingSettings = true
370
                dragStartPos = settingsWindow.Position
371
                dragStartMouse = input.Position
372
            end
373
        end)
374
        UserInputService.InputChanged:Connect(function(input)
375
            if draggingSettings and input.UserInputType == Enum.UserInputType.MouseMovement then
376
                local delta = input.Position - dragStartMouse
377
                settingsWindow.Position = UDim2.new(dragStartPos.X.Scale, dragStartPos.X.Offset + delta.X, dragStartPos.Y.Scale, dragStartPos.Y.Offset + delta.Y)
378
            end
379
        end)
380
        UserInputService.InputEnded:Connect(function(input)
381
            if input.UserInputType == Enum.UserInputType.MouseButton1 then
382
                draggingSettings = false
383
            end
384
        end)
385
386
        local speedLabel = Instance.new("TextLabel")
387
        speedLabel.Size = UDim2.new(0, 140, 0, 30)
388
        speedLabel.Position = UDim2.new(0, 20, 0, 60)
389
        speedLabel.BackgroundTransparency = 1
390
        speedLabel.Text = "Signals per second:"
391
        speedLabel.TextColor3 = Color3.fromRGB(170, 165, 220)
392
        speedLabel.TextSize = 12
393
        speedLabel.Font = Enum.Font.Gotham
394
        speedLabel.TextXAlignment = Enum.TextXAlignment.Left
395
        speedLabel.ZIndex = 51
396
        speedLabel.Parent = settingsWindow
397
398
        local speedBox = Instance.new("TextBox")
399
        speedBox.Size = UDim2.new(0, 100, 0, 30)
400
        speedBox.Position = UDim2.new(0, 170, 0, 60)
401
        speedBox.BackgroundColor3 = Color3.fromRGB(20, 20, 30)
402
        speedBox.Text = tostring(autoSpeed)
403
        speedBox.TextColor3 = Color3.fromRGB(210, 210, 228)
404
        speedBox.TextSize = 12
405
        speedBox.Font = Enum.Font.Gotham
406
        speedBox.BorderSizePixel = 0
407
        speedBox.ZIndex = 51
408
        speedBox.Parent = settingsWindow
409
        corner(speedBox, 6)
410
        stroke(speedBox, Color3.fromRGB(55, 50, 85), 1)
411
412
        local speedHint = Instance.new("TextLabel")
413
        speedHint.Size = UDim2.new(0, 260, 0, 20)
414
        speedHint.Position = UDim2.new(0, 20, 0, 95)
415
        speedHint.BackgroundTransparency = 1
416
        speedHint.Text = "1 = slowest  |  10000 = fastest  |  Default: 100"
417
        speedHint.TextColor3 = Color3.fromRGB(120, 120, 158)
418
        speedHint.TextSize = 10
419
        speedHint.Font = Enum.Font.Gotham
420
        speedHint.TextXAlignment = Enum.TextXAlignment.Left
421
        speedHint.ZIndex = 51
422
        speedHint.Parent = settingsWindow
423
424
        local saveBtn = Instance.new("TextButton")
425
        saveBtn.Size = UDim2.new(0, 100, 0, 32)
426
        saveBtn.Position = UDim2.new(0.5, -50, 1, -45)
427
        saveBtn.BackgroundColor3 = Color3.fromRGB(40, 40, 55)
428
        saveBtn.Text = "Save"
429
        saveBtn.TextColor3 = Color3.fromRGB(61, 255, 160)
430
        saveBtn.TextSize = 12
431
        saveBtn.Font = Enum.Font.GothamBold
432
        saveBtn.BorderSizePixel = 0
433
        saveBtn.ZIndex = 51
434
        saveBtn.Parent = settingsWindow
435
        corner(saveBtn, 7)
436
        stroke(saveBtn, Color3.fromRGB(45, 80, 60), 1)
437
438
        local savedMsg = nil
439
        saveBtn.MouseButton1Click:Connect(function()
440
            local newSpeed = tonumber(speedBox.Text)
441
            if newSpeed then
442
                newSpeed = math.floor(newSpeed)
443
                if newSpeed >= 1 and newSpeed <= 10000 then
444
                    autoSpeed = newSpeed
445
                    speedBox.Text = tostring(autoSpeed)
446
                    speedBox.BackgroundColor3 = Color3.fromRGB(20, 20, 30)
447
                    if savedMsg then savedMsg:Destroy() end
448
                    savedMsg = Instance.new("TextLabel")
449
                    savedMsg.Size = UDim2.new(0, 100, 0, 20)
450
                    savedMsg.Position = UDim2.new(0.5, -50, 1, -20)
451
                    savedMsg.BackgroundTransparency = 1
452
                    savedMsg.Text = "Saved!"
453
                    savedMsg.TextColor3 = Color3.fromRGB(61, 255, 160)
454
                    savedMsg.TextSize = 10
455
                    savedMsg.Font = Enum.Font.GothamBold
456
                    savedMsg.ZIndex = 52
457
                    savedMsg.Parent = settingsWindow
458
                    task.wait(1.5)
459
                    if savedMsg then savedMsg:Destroy() end
460
                else
461
                    speedBox.BackgroundColor3 = Color3.fromRGB(80, 30, 30)
462
                    task.wait(0.5)
463
                    speedBox.BackgroundColor3 = Color3.fromRGB(20, 20, 30)
464
                end
465
            else
466
                speedBox.BackgroundColor3 = Color3.fromRGB(80, 30, 30)
467
                task.wait(0.5)
468
                speedBox.BackgroundColor3 = Color3.fromRGB(20, 20, 30)
469
            end
470
        end)
471
    end
472
end
473
474
settingsBtn.MouseButton1Click:Connect(toggleSettings)
475
476
-- Visibility toggles
477
local uiVisible = true
478
local reopenButton = nil
479
480
local function showGui()
481
    if not screenGui.Enabled then
482
        screenGui.Enabled = true
483
        uiVisible = true
484
        if reopenButton then reopenButton.Visible = false end
485
    end
486
end
487
488
local function hideGui()
489
    if screenGui.Enabled then
490
        screenGui.Enabled = false
491
        uiVisible = false
492
        if isMobile then
493
            if not reopenButton or not reopenButton.Parent then
494
                reopenButton = Instance.new("TextButton")
495
                reopenButton.Size = UDim2.new(0, 56, 0, 56)
496
                reopenButton.Position = UDim2.new(1, -70, 1, -70)
497
                reopenButton.AnchorPoint = Vector2.new(1, 1)
498
                reopenButton.BackgroundColor3 = Color3.fromRGB(20, 20, 30)
499
                reopenButton.Text = "S"
500
                reopenButton.TextColor3 = Color3.fromRGB(210, 210, 228)
501
                reopenButton.TextSize = 24
502
                reopenButton.Font = Enum.Font.GothamBold
503
                reopenButton.BorderSizePixel = 0
504
                reopenButton.ZIndex = 100
505
                reopenButton.Parent = playerGui
506
                corner(reopenButton, 28)
507
                stroke(reopenButton, Color3.fromRGB(80, 70, 120), 1.5)
508
509
                local dragStartPos, dragStartMouse
510
                reopenButton.InputBegan:Connect(function(input)
511
                    if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1 then
512
                        dragStartPos = reopenButton.Position
513
                        dragStartMouse = input.Position
514
                        local moveConn, endConn
515
                        moveConn = UserInputService.InputChanged:Connect(function(input2)
516
                            if input2.UserInputType == input.UserInputType then
517
                                local delta = input2.Position - dragStartMouse
518
                                reopenButton.Position = UDim2.new(dragStartPos.X.Scale, dragStartPos.X.Offset + delta.X, dragStartPos.Y.Scale, dragStartPos.Y.Offset + delta.Y)
519
                            end
520
                        end)
521
                        endConn = UserInputService.InputEnded:Connect(function(input2)
522
                            if input2.UserInputType == input.UserInputType then
523
                                moveConn:Disconnect()
524
                                endConn:Disconnect()
525
                            end
526
                        end)
527
                    end
528
                end)
529
530
                reopenButton.MouseButton1Click:Connect(showGui)
531
            else
532
                reopenButton.Visible = true
533
            end
534
        end
535
    end
536
end
537
538
closeBtn.MouseButton1Click:Connect(hideGui)
539
540
if not isMobile then
541
    UserInputService.InputBegan:Connect(function(input)
542
        if input.KeyCode == Enum.KeyCode.RightShift then
543
            if uiVisible then hideGui() else showGui() end
544
        end
545
    end)
546
end
547
548
-- Log management
549
local eventCount = 0
550
local entries = {}
551
local suppressCounter = 0
552
553
local function fireFakeSignal(signalType, id)
554
    suppressCounter = suppressCounter + 1
555
    pcall(function()
556
        if signalType == "Product" then
557
            MarketplaceService:SignalPromptProductPurchaseFinished(player.UserId, id, true)
558
        elseif signalType == "Gamepass" then
559
            MarketplaceService:SignalPromptGamePassPurchaseFinished(player, id, true)
560
        elseif signalType == "Bulk" then
561
            MarketplaceService:SignalPromptBulkPurchaseFinished(player.UserId, id, true)
562
        elseif signalType == "Purchase" then
563
            MarketplaceService:SignalPromptPurchaseFinished(player.UserId, id, true)
564
        end
565
    end)
566
    suppressCounter = suppressCounter - 1
567
end
568
569
local function makeEmptyLabel()
570
    local el = Instance.new("TextLabel")
571
    el.Name = "EmptyState"
572
    el.Size = UDim2.new(1, 0, 0, 260)
573
    el.BackgroundTransparency = 1
574
    el.Text = "Waiting for events…\nAll marketplace events will appear here."
575
    el.TextColor3 = Color3.fromRGB(120, 120, 158)
576
    el.TextSize = 13 * fontSizeScale
577
    el.Font = Enum.Font.Gotham
578
    el.TextWrapped = true
579
    el.LayoutOrder = 99999
580
    el.Parent = logArea
581
    return el
582
end
583
584
local function setEmpty(show)
585
    local e = logArea:FindFirstChild("EmptyState")
586
    if show and not e then
587
        makeEmptyLabel()
588
    elseif not show and e then
589
        e:Destroy()
590
    end
591
end
592
593
local activeAutoButtons = {}
594
local activeSpamButtons = {}
595
596
local function stopAllAutoAndSpam()
597
    for btn, data in pairs(activeAutoButtons) do
598
        data.active = false
599
        if data.loop then task.cancel(data.loop) end
600
        if btn and btn.Parent then
601
            btn.Text = "Auto"
602
            btn.TextColor3 = Color3.fromRGB(170, 165, 220)
603
            btn.BackgroundColor3 = Color3.fromRGB(20, 20, 30)
604
        end
605
    end
606
    table.clear(activeAutoButtons)
607
    for btn, data in pairs(activeSpamButtons) do
608
        data.active = false
609
        if data.loop then task.cancel(data.loop) end
610
        if btn and btn.Parent then
611
            btn.Text = "Run"
612
            btn.TextColor3 = Color3.fromRGB(170, 165, 220)
613
            btn.BackgroundColor3 = Color3.fromRGB(20, 20, 30)
614
        end
615
    end
616
    table.clear(activeSpamButtons)
617
end
618
619
stopAllBtn.MouseButton1Click:Connect(stopAllAutoAndSpam)
620
621
local function addLog(label, id, signalType)
622
    if suppressCounter > 0 then return end
623
    setEmpty(false)
624
    local entryHeight = isMobile and 56 or 46
625
    local entry = Instance.new("Frame")
626
    entry.Size = UDim2.new(1, -2, 0, entryHeight)
627
    entry.BackgroundColor3 = Color3.fromRGB(17, 17, 24)
628
    entry.BorderSizePixel = 0
629
    entry.LayoutOrder = -(eventCount)
630
    entry.Parent = logArea
631
    corner(entry, 10)
632
    stroke(entry, Color3.fromRGB(48, 46, 70), 1)
633
    entry.BackgroundTransparency = 1
634
    TweenService:Create(entry, TweenInfo.new(0.18), {BackgroundTransparency = 0}):Play()
635
636
    local dot = Instance.new("Frame")
637
    dot.Size = UDim2.new(0, 8, 0, 8)
638
    dot.Position = UDim2.new(0, 14, 0.5, -4)
639
    dot.BackgroundColor3 = Color3.fromRGB(61, 255, 160)
640
    dot.BorderSizePixel = 0
641
    dot.Parent = entry
642
    corner(dot, 999)
643
644
    local lbl = Instance.new("TextLabel")
645
    lbl.Size = UDim2.new(0, 76, 1, 0)
646
    lbl.Position = UDim2.new(0, 28, 0, 0)
647
    lbl.BackgroundTransparency = 1
648
    lbl.Text = string.upper(label)
649
    lbl.TextColor3 = Color3.fromRGB(160, 150, 210)
650
    lbl.TextSize = 10 * fontSizeScale
651
    lbl.Font = Enum.Font.GothamBold
652
    lbl.TextXAlignment = Enum.TextXAlignment.Left
653
    lbl.Parent = entry
654
655
    local idEl = Instance.new("TextLabel")
656
    idEl.Size = UDim2.new(0, 200, 1, 0)
657
    idEl.Position = UDim2.new(0, 108, 0, 0)
658
    idEl.BackgroundTransparency = 1
659
    idEl.Text = tostring(id)
660
    idEl.TextColor3 = Color3.fromRGB(220, 220, 240)
661
    idEl.TextSize = 14 * fontSizeScale
662
    idEl.Font = Enum.Font.GothamBold
663
    idEl.TextXAlignment = Enum.TextXAlignment.Left
664
    idEl.TextTruncate = Enum.TextTruncate.AtEnd
665
    idEl.Parent = entry
666
667
    local timeEl = Instance.new("TextLabel")
668
    timeEl.Size = UDim2.new(0, 70, 1, 0)
669
    timeEl.Position = UDim2.new(0, 320, 0, 0)
670
    timeEl.BackgroundTransparency = 1
671
    timeEl.Text = getTime()
672
    timeEl.TextColor3 = Color3.fromRGB(140, 135, 180)
673
    timeEl.TextSize = 11 * fontSizeScale
674
    timeEl.Font = Enum.Font.Gotham
675
    timeEl.Parent = entry
676
677
    local buttonFrame = Instance.new("Frame")
678
    buttonFrame.Size = UDim2.new(0, 200, 1, 0)
679
    buttonFrame.Position = UDim2.new(1, -200, 0, 0)
680
    buttonFrame.BackgroundTransparency = 1
681
    buttonFrame.Parent = entry
682
683
    local autoBtn = Instance.new("TextButton")
684
    autoBtn.Size = UDim2.new(0, 56, 0, buttonHeight)
685
    autoBtn.Position = UDim2.new(0, 0, 0.5, -buttonHeight/2)
686
    autoBtn.BackgroundColor3 = Color3.fromRGB(20, 20, 30)
687
    autoBtn.Text = "Auto"
688
    autoBtn.TextColor3 = Color3.fromRGB(170, 165, 220)
689
    autoBtn.TextSize = 11 * fontSizeScale
690
    autoBtn.Font = Enum.Font.GothamBold
691
    autoBtn.BorderSizePixel = 0
692
    autoBtn.Parent = buttonFrame
693
    corner(autoBtn, 7)
694
    stroke(autoBtn, Color3.fromRGB(55, 50, 85), 1)
695
696
    local copyBtn = Instance.new("TextButton")
697
    copyBtn.Size = UDim2.new(0, 56, 0, buttonHeight)
698
    copyBtn.Position = UDim2.new(0, 62, 0.5, -buttonHeight/2)
699
    copyBtn.BackgroundColor3 = Color3.fromRGB(20, 20, 30)
700
    copyBtn.Text = "Copy"
701
    copyBtn.TextColor3 = Color3.fromRGB(170, 165, 220)
702
    copyBtn.TextSize = 11 * fontSizeScale
703
    copyBtn.Font = Enum.Font.GothamBold
704
    copyBtn.BorderSizePixel = 0
705
    copyBtn.Parent = buttonFrame
706
    corner(copyBtn, 7)
707
    stroke(copyBtn, Color3.fromRGB(55, 50, 85), 1)
708
709
    local runBtn = Instance.new("TextButton")
710
    runBtn.Size = UDim2.new(0, 52, 0, buttonHeight)
711
    runBtn.Position = UDim2.new(0, 124, 0.5, -buttonHeight/2)
712
    runBtn.BackgroundColor3 = Color3.fromRGB(20, 20, 30)
713
    runBtn.Text = "Run"
714
    runBtn.TextColor3 = Color3.fromRGB(170, 165, 220)
715
    runBtn.TextSize = 11 * fontSizeScale
716
    runBtn.Font = Enum.Font.GothamBold
717
    runBtn.BorderSizePixel = 0
718
    runBtn.Parent = buttonFrame
719
    corner(runBtn, 7)
720
    stroke(runBtn, Color3.fromRGB(55, 50, 85), 1)
721
722
    copyBtn.MouseEnter:Connect(function()
723
        copyBtn.TextColor3 = Color3.fromRGB(190, 180, 255)
724
        copyBtn.BackgroundColor3 = Color3.fromRGB(22, 18, 40)
725
    end)
726
    copyBtn.MouseLeave:Connect(function()
727
        if copyBtn.Text ~= "Copied!" then
728
            copyBtn.TextColor3 = Color3.fromRGB(170, 165, 220)
729
            copyBtn.BackgroundColor3 = Color3.fromRGB(20, 20, 30)
730
        end
731
    end)
732
    copyBtn.MouseButton1Click:Connect(function()
733
        pcall(setclipboard, tostring(id))
734
        copyBtn.Text = "Copied!"
735
        copyBtn.TextColor3 = Color3.fromRGB(200, 190, 255)
736
        task.wait(1.5)
737
        copyBtn.Text = "Copy"
738
        copyBtn.TextColor3 = Color3.fromRGB(170, 165, 220)
739
        copyBtn.BackgroundColor3 = Color3.fromRGB(20, 20, 30)
740
    end)
741
742
    local autoActive = false
743
    local autoLoop = nil
744
    local function startAuto()
745
        if autoActive then return end
746
        autoActive = true
747
        autoBtn.Text = "Auto ON"
748
        autoBtn.TextColor3 = Color3.fromRGB(255, 100, 100)
749
        autoBtn.BackgroundColor3 = Color3.fromRGB(40, 15, 15)
750
        autoLoop = task.spawn(function()
751
            local delay = autoSpeed > 0 and (1 / autoSpeed) or 0.01
752
            while autoActive and autoBtn.Parent do
753
                fireFakeSignal(signalType, id)
754
                task.wait(delay)
755
            end
756
        end)
757
        activeAutoButtons[autoBtn] = {active = true, loop = autoLoop}
758
    end
759
    local function stopAuto()
760
        autoActive = false
761
        if autoLoop then task.cancel(autoLoop) end
762
        activeAutoButtons[autoBtn] = nil
763
        if autoBtn.Parent then
764
            autoBtn.Text = "Auto"
765
            autoBtn.TextColor3 = Color3.fromRGB(170, 165, 220)
766
            autoBtn.BackgroundColor3 = Color3.fromRGB(20, 20, 30)
767
        end
768
    end
769
    autoBtn.MouseButton1Click:Connect(function()
770
        if autoActive then stopAuto() else startAuto() end
771
    end)
772
773
    local holdStart = nil
774
    local holdConnection = nil
775
    local spamLoop = nil
776
    local isSpamming = false
777
    local function startSpam()
778
        if isSpamming then return end
779
        isSpamming = true
780
        runBtn.Text = "Spamming..."
781
        runBtn.TextColor3 = Color3.fromRGB(255, 200, 0)
782
        spamLoop = task.spawn(function()
783
            while isSpamming and runBtn.Parent do
784
                fireFakeSignal(signalType, id)
785
                task.wait(0.1)
786
            end
787
        end)
788
        activeSpamButtons[runBtn] = {active = true, loop = spamLoop}
789
    end
790
    local function stopSpam()
791
        isSpamming = false
792
        if spamLoop then task.cancel(spamLoop) end
793
        activeSpamButtons[runBtn] = nil
794
        if runBtn.Parent then
795
            runBtn.Text = "Run"
796
            runBtn.TextColor3 = Color3.fromRGB(170, 165, 220)
797
            runBtn.BackgroundColor3 = Color3.fromRGB(20, 20, 30)
798
        end
799
    end
800
801
    -- Use InputBegan/InputEnded for both mouse and touch
802
    local function onRunPress()
803
        if isSpamming then return end
804
        holdStart = tick()
805
        holdConnection = task.spawn(function()
806
            while holdStart and (tick() - holdStart) < 3 do
807
                task.wait(0.1)
808
            end
809
            if holdStart and not isSpamming then
810
                startSpam()
811
            end
812
        end)
813
    end
814
815
    local function onRunRelease()
816
        local heldDuration = holdStart and (tick() - holdStart) or 0
817
        holdStart = nil
818
        if holdConnection then task.cancel(holdConnection) end
819
        if isSpamming then
820
            stopSpam()
821
        elseif heldDuration < 3 then
822
            fireFakeSignal(signalType, id)
823
            runBtn.Text = "Sent!"
824
            runBtn.TextColor3 = Color3.fromRGB(61, 255, 160)
825
            task.wait(1.5)
826
            if runBtn.Parent then
827
                runBtn.Text = "Run"
828
                runBtn.TextColor3 = Color3.fromRGB(170, 165, 220)
829
            end
830
        end
831
    end
832
833
    runBtn.InputBegan:Connect(function(input)
834
        if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
835
            onRunPress()
836
        end
837
    end)
838
    runBtn.InputEnded:Connect(function(input)
839
        if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
840
            onRunRelease()
841
        end
842
    end)
843
844
    runBtn.MouseEnter:Connect(function()
845
        if not isSpamming then
846
            runBtn.TextColor3 = Color3.fromRGB(61, 255, 160)
847
            runBtn.BackgroundColor3 = Color3.fromRGB(10, 22, 18)
848
        end
849
    end)
850
    runBtn.MouseLeave:Connect(function()
851
        if not isSpamming and runBtn.Text == "Run" then
852
            runBtn.TextColor3 = Color3.fromRGB(170, 165, 220)
853
            runBtn.BackgroundColor3 = Color3.fromRGB(20, 20, 30)
854
        end
855
    end)
856
857
    entry.AncestryChanged:Connect(function()
858
        if not entry.Parent then
859
            if autoActive then stopAuto() end
860
            if isSpamming then stopSpam() end
861
            for i, e in ipairs(entries) do
862
                if e == entry then
863
                    table.remove(entries, i)
864
                    break
865
                end
866
            end
867
        end
868
    end)
869
870
    eventCount = eventCount + 1
871
    countLabel.Text = eventCount .. (eventCount == 1 and " event captured" or " events captured")
872
    table.insert(entries, entry)
873
end
874
875
clearBtn.MouseButton1Click:Connect(function()
876
    stopAllAutoAndSpam()
877
    for _, e in ipairs(entries) do
878
        e:Destroy()
879
    end
880
    entries = {}
881
    eventCount = 0
882
    countLabel.Text = "0 events captured"
883
    setEmpty(true)
884
end)
885
886
MarketplaceService.PromptProductPurchaseFinished:Connect(function(plr, id, bought)
887
    if suppressCounter == 0 then addLog("Product", id, "Product") end
888
end)
889
MarketplaceService.PromptGamePassPurchaseFinished:Connect(function(plr, id, bought)
890
    if suppressCounter == 0 then addLog("Gamepass", id, "Gamepass") end
891
end)
892
MarketplaceService.PromptBulkPurchaseFinished:Connect(function(userId, id, bought)
893
    if suppressCounter == 0 then addLog("Bulk", id, "Bulk") end
894
end)
895
MarketplaceService.PromptPurchaseFinished:Connect(function(userId, id, bought)
896
    if suppressCounter == 0 then addLog("Purchase", id, "Purchase") end
897
end)
898
899
setEmpty(true)