Devil HunterDevil Docs
Payment In Game

สต็อกสินค้าและลิมิตการซื้อ

จัดการสต็อกสินค้า ลิมิตการซื้อต่อคน เวลาเปิด-ปิดขาย และ Dynamic Stock (config_limit.lua)

ไฟล์ config_limit.lua ใช้กำหนดจำนวนสินค้าคงเหลือ ขีดจำกัดการซื้อต่อผู้เล่น ช่วงเวลาเปิดขาย และระบบเพิ่มสต็อกอัตโนมัติตามเงื่อนไข

การตั้งค่าทั่วไป

รีเซ็ตอัตโนมัติ (AutoReset)

config_limit.lua
AutoReset = {
    enabled = true,
    resetTime = "00:00",
    resetDay = "daily" -- daily | weekly | monthly
}
  • enabled - เปิดระบบรีเซ็ตสต็อกอัตโนมัติ
  • resetTime - เวลารีเซ็ต (รูปแบบ HH:MM)
  • resetDay - ความถี่: รายวัน / รายสัปดาห์ / รายเดือน

การแจ้งเตือน (Notifications)

config_limit.lua
Notifications = {
    lowStock = true,           -- แจ้งเตือนเมื่อสินค้าใกล้หมด
    lowStockThreshold = 5,     -- จุดที่ถือว่าใกล้หมด
    outOfStock = true          -- แจ้งเตือนเมื่อสินค้าหมด
}

ฐานข้อมูล (Database)

config_limit.lua
Database = {
    saveToDatabase = true,     -- บันทึกสต็อกลงฐานข้อมูล
    saveInterval = 30000       -- บันทึกทุก 30 วินาที (milliseconds)
}

โครงสร้างรายการสินค้า

แต่ละสินค้าใช้ limitId เป็น key อ้างอิงจาก config_main.lua:

config_limit.lua
["my_item_id"] = {
    name = "ชื่อสินค้า",
    currentStock = 100,           -- จำนวนคงเหลือปัจจุบัน
    maxStock = 100,               -- จำนวนสูงสุด
    resetToMax = true,            -- รีเซ็ตเป็น maxStock อัตโนมัติ
    category = "item",            -- item | weapon | car | vehicle | event | legacy

    purchaseLimit = {
        enabled = false,
        maxPerPlayer = 5,
        resetType = "daily",      -- daily | weekly | monthly | never
        expireAfterSeconds = 86400  -- อายุ limit (วินาที) | 0 = ไม่หมดอายุ
    },

    saleSchedule = {
        enabled = false,
        startTime = "00:00",
        endTime = "23:59",
        restockTime = "00:00",
        restockDay = "daily",
        saleEndDate = {
            enabled = false,
            date = "2026-12-31",
            showCountdown = true
        }
    },

    dynamic = {
        enabled = false,
        conditions = {}
    }
}

คำอธิบายแต่ละส่วน

สต็อกพื้นฐาน

ค่าคำอธิบาย
nameชื่อสินค้า (ใช้แสดงใน log)
currentStockจำนวนคงเหลือปัจจุบัน
maxStockจำนวนสูงสุด (ใช้เป็นเพดานเวลารีเซ็ต)
resetToMaxรีเซ็ตเป็น maxStock เมื่อถึงรอบ (false = สินค้าหายาก ไม่เติมกลับ)
categoryหมวดหมู่สำหรับอ่านง่ายและทำ log

จำกัดการซื้อต่อคน (purchaseLimit)

config_limit.lua
purchaseLimit = {
    enabled = true,              -- เปิดระบบจำกัดซื้อ
    maxPerPlayer = 1,            -- ซื้อได้สูงสุดต่อคน
    resetType = "never",         -- daily | weekly | monthly | never
    expireAfterSeconds = 0        -- 0 = ไม่หมดอายุ
}

ตัวอย่างการใช้งาน:

  • รถหายาก - enabled = true, maxPerPlayer = 1, resetType = "never"
  • อาวุธประจำวัน - enabled = true, maxPerPlayer = 5, resetType = "daily", expireAfterSeconds = 86400

ตารางเวลาขาย (saleSchedule)

config_limit.lua
saleSchedule = {
    enabled = true,
    startTime = "18:00",         -- เวลาเริ่มขาย
    endTime = "23:59",           -- เวลาหยุดขาย
    restockTime = "18:00",       -- เวลารีสต็อก
    restockDay = "weekly",       -- daily | weekly | monthly | never
    saleEndDate = {
        enabled = false,         -- ปิดขายถาวรเมื่อถึงวันที่กำหนด
        date = "2026-12-31",     -- รูปแบบ YYYY-MM-DD
        showCountdown = true     -- แสดงนับถอยหลังใน UI
    }
}

ระบบ Dynamic Stock

เพิ่มสต็อกอัตโนมัติตามเงื่อนไข เช่น จำนวนผู้เล่นหรือช่วงเวลา:

config_limit.lua
dynamic = {
    enabled = true,
    conditions = {
        {
            type = "player_count",    -- เพิ่มตามจำนวนผู้เล่น
            min_players = 20,          -- ผู้เล่นขั้นต่ำ
            bonus_stock = 10           -- เพิ่มสต็อกเท่าไหร่
        },
        {
            type = "time_based",       -- เพิ่มตามเวลา
            start_time = "18:00",
            end_time = "22:00",
            bonus_stock = 15
        }
    }
}

ตัวอย่างสินค้าแบบต่าง ๆ

สินค้าทั่วไป (รีเซ็ตทุกวัน)

config_limit.lua
["water"] = {
    name = "น้ำเปล่า",
    currentStock = 500,
    maxStock = 500,
    resetToMax = true,
    category = "item",
}

รถหายาก (ไม่รีเซ็ต, จำกัดคนละ 1 คัน)

config_limit.lua
["rare_jester"] = {
    name = "Rare Jester",
    currentStock = 2,
    maxStock = 2,
    resetToMax = false,
    category = "car",
    purchaseLimit = {
        enabled = true,
        maxPerPlayer = 1,
        resetType = "never",
        expireAfterSeconds = 0
    },
    saleSchedule = {
        enabled = true,
        startTime = "22:55",
        endTime = "23:59",
        restockDay = "weekly",
        saleEndDate = {
            enabled = true,
            date = "2026-01-31",
            showCountdown = true
        }
    },
}

สินค้าตามเทศกาล (เพิ่มตามช่วงเวลา)

config_limit.lua
["event_item"] = {
    name = "Event Items",
    currentStock = 100,
    maxStock = 100,
    category = "event",
    dynamic = {
        enabled = true,
        conditions = {
            {
                type = "time_based",
                start_time = "18:00",
                end_time = "23:59",
                bonus_stock = 50
            }
        }
    }
}

สินค้าข้ามวัน (22:00 - 02:00)

config_limit.lua
dynamic = {
    enabled = true,
    conditions = {
        {
            type = "time_based",
            start_time = "22:00",
            end_time = "02:00",        -- รองรับข้ามเที่ยงคืน
            bonus_stock = 25
        }
    }
}

เคล็ดลับ

เคล็ดลับการตั้งค่า

  • ใช้ purchaseLimit.resetType = "never" กับ expireAfterSeconds = 0 สำหรับสินค้าที่ซื้อได้ครั้งเดียวตลอดชีวิต
  • ตั้ง resetToMax = false สำหรับสินค้าหายากหรือ Limited Edition
  • ระบบ dynamic สามารถใส่หลาย conditions ได้ โดย bonus_stock จะรวมกันทั้งหมด
  • รูปแบบเวลาทั้งหมดใช้ 24 ชั่วโมง (HH:MM)

ดูตัวอย่างเพิ่มเติมได้ในไฟล์ config_limit_examples.lua ที่มากับสคริปต์

On this page