Lua Script Vault

Store. Inspect. Ship.

A cleaner interface for managing personal Lua scripts, editing code from mobile, and downloading ready-to-run files.

Match Freezer

Этот скрипт останавливает матч когда вам захочется, это даёт преимущества

Author: Max_dev
-- Match Freezer (без V1)
local w = display.contentWidth
local h = display.contentHeight

local gg = display.newGroup()
local men = display.newGroup()

local frozen = false

-- КНОПКА open
local btn = display.newRoundedRect(gg, w - 90, 30, 100, 45, 12)
btn:setFillColor(0.2,0.2,0.25)
btn:setStrokeColor(1,0.5,0,1)
btn.strokeWidth = 2
local btnText = display.newText("open", btn.x, btn.y, native.systemFontBold, 18)
btnText:setFillColor(1,1,1)
gg:insert(btnText)

-- МЕНЮ (чёрный фон, оранжевая обводка)
local panelW = 420
local panelH = 280
local panel = display.newRoundedRect(men, display.contentCenterX, display.contentCenterY, panelW, panelH, 18)
panel:setFillColor(0,0,0,0.96)
panel:setStrokeColor(1,0.5,0,1)
panel.strokeWidth = 2

local title = display.newText("Match Freezer", panel.x, panel.y - panelH/2 + 35, native.systemFontBold, 22)
title:setFillColor(1,0.5,0)
men:insert(title)

local close = display.newText("×", panel.x + panelW/2 - 35, panel.y - panelH/2 + 35, native.systemFontBold, 32)
close:setFillColor(1,0.4,0.4)
men:insert(close)

local lineTop = display.newLine(panel.x - panelW/2 + 20, panel.y - panelH/2 + 55, panel.x + panelW/2 - 20, panel.y - panelH/2 + 55)
lineTop:setStrokeColor(1,0.5,0,0.5)
lineTop.strokeWidth = 1
men:insert(lineTop)

men.isVisible = false

-- ПЕРЕТАСКИВАНИЕ КНОПКИ
local btnDrag = false
local btnStartX, btnStartY
local function onBtnDrag(e)
    if e.phase == "began" then
        btnDrag = true
        btnStartX = e.x - gg.x
        btnStartY = e.y - gg.y
    elseif e.phase == "moved" and btnDrag then
        gg.x = e.x - btnStartX
        gg.y = e.y - btnStartY
    elseif e.phase == "ended" then
        btnDrag = false
    end
    return true
end
btn:addEventListener("touch", onBtnDrag)
btnText:addEventListener("touch", onBtnDrag)

-- ПЕРЕТАСКИВАНИЕ МЕНЮ
local menuDrag = false
local menuStartX, menuStartY
local function onMenuDrag(e)
    if e.phase == "began" then
        menuDrag = true
        menuStartX = e.x - men.x
        menuStartY = e.y - men.y
    elseif e.phase == "moved" and menuDrag then
        men.x = e.x - menuStartX
        men.y = e.y - menuStartY
    elseif e.phase == "ended" then
        menuDrag = false
    end
    return true
end
panel:addEventListener("touch", onMenuDrag)
title:addEventListener("touch", onMenuDrag)

local function toggleMenu()
    men.isVisible = not men.isVisible
    btnText.text = men.isVisible and "close" or "open"
end
btn:addEventListener("tap", toggleMenu)
btnText:addEventListener("tap", toggleMenu)
close:addEventListener("tap", toggleMenu)

-- ============ ФУНКЦИИ ЗАМОРОЗКИ ============
local function findEnemyAndPuck()
    local stage = display.getCurrentStage()
    if not stage then return nil, nil end
    local enemy, puck = nil, nil
    local function search(obj)
        if not obj then return end
        if obj.name == "paddle" and obj.x > display.contentCenterX then
            enemy = obj
        end
        if obj.name == "puck" then
            puck = obj
        end
        if obj.numChildren then
            for i = 1, obj.numChildren do
                search(obj[i])
            end
        end
    end
    search(stage)
    return enemy, puck
end

local function freezeMatch()
    if frozen then return end
    frozen = true
    local enemy, puck = findEnemyAndPuck()
    if enemy then
        enemy._savedBodyType = enemy.bodyType
        enemy.bodyType = "static"
        if enemy.setLinearVelocity then enemy:setLinearVelocity(0,0) end
    end
    if puck then
        puck._savedBodyType = puck.bodyType
        puck.bodyType = "static"
        if puck.setLinearVelocity then puck:setLinearVelocity(0,0) end
    end
    print("[FREEZER] Матч заморожен")
end

local function unfreezeMatch()
    if not frozen then return end
    frozen = false
    local enemy, puck = findEnemyAndPuck()
    if enemy then
        enemy.bodyType = enemy._savedBodyType or "dynamic"
        enemy._savedBodyType = nil
    end
    if puck then
        puck.bodyType = puck._savedBodyType or "dynamic"
        puck._savedBodyType = nil
    end
    print("[FREEZER] Матч разморожен")
end

-- ============ КНОПКИ ПО ЦЕНТРУ ============
local btnW = 130
local btnH = 50
local spacing = 40
local startX = panel.x - (btnW + spacing) / 2

local freezeBtn = display.newRoundedRect(men, startX, panel.y + panelH/2 - 60, btnW, btnH, 10)
freezeBtn:setFillColor(0.8,0.2,0.2)
freezeBtn:setStrokeColor(1,0.5,0,1)
freezeBtn.strokeWidth = 2
local freezeText = display.newText("FREEZE", freezeBtn.x, freezeBtn.y, native.systemFontBold, 18)
freezeText:setFillColor(1,1,1)
men:insert(freezeBtn)
men:insert(freezeText)

local unfreezeBtn = display.newRoundedRect(men, startX + btnW + spacing, panel.y + panelH/2 - 60, btnW, btnH, 10)
unfreezeBtn:setFillColor(0.2,0.6,0.2)
unfreezeBtn:setStrokeColor(1,0.5,0,1)
unfreezeBtn.strokeWidth = 2
local unfreezeText = display.newText("UNFREEZE", unfreezeBtn.x, unfreezeBtn.y, native.systemFontBold, 18)
unfreezeText:setFillColor(1,1,1)
men:insert(unfreezeBtn)
men:insert(unfreezeText)

freezeBtn:addEventListener("tap", freezeMatch)
unfreezeBtn:addEventListener("tap", unfreezeMatch)

-- ============ ПОДДЕРЖАНИЕ ПОСЛЕ ПЕРЕЗАГРУЗКИ ============
local originalPlacePuck = _G.placePuck
if originalPlacePuck then
    _G.placePuck = function(side)
        local res = originalPlacePuck(side)
        if frozen then
            timer.performWithDelay(50, function()
                local e, p = findEnemyAndPuck()
                if e then
                    e.bodyType = "static"
                    if e.setLinearVelocity then e:setLinearVelocity(0,0) end
                end
                if p then
                    p.bodyType = "static"
                    if p.setLinearVelocity then p:setLinearVelocity(0,0) end
                end
            end)
        end
        return res
    end
end

print("=================================")
print("Match Freezer - ЗАГРУЖЕН")
print("FREEZE - остановить противника и шайбу")
print("UNFREEZE - возобновить")
print("Кнопки по центру, меню перетаскивается")
print("=================================")

Info

ID: 5
Created: 2026-04-04 20:00:35
Updated: 2026-04-04 20:00:35