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
        }
    }
}

ตัวอย่างการตั้งค่าระดับสูง (Advanced Examples)

อ้างอิงรูปแบบการตั้งค่าจากไฟล์ config_limit_examples.lua:

1. รถหายากจำกัดจำนวนและเวลาขาย (Limited Supercar)

config_limit.lua
["jester_limited"] = {
    name = "Jester Supercar (Limited)",
    currentStock = 3,
    maxStock = 3,
    resetToMax = false, -- ขายแล้วหมดเลย ไม่เติมสต็อกอัตโนมัติ
    category = "car",

    purchaseLimit = {
        enabled = true,
        maxPerPlayer = 1, -- ซื้อได้คนละ 1 คันเท่านั้น
        resetType = "never",
        expireAfterSeconds = 0
    },

    saleSchedule = {
        enabled = true,
        startTime = "20:00", -- เริ่มเปิดขาย 20:00 น.
        endTime = "23:59",   -- ปิดขาย 23:59 น.
        restockDay = "never",
        saleEndDate = {
            enabled = true,
            date = "2026-12-31", -- วันสุดท้ายที่วางขาย
            showCountdown = true -- แสดงนาฬิกานับถอยหลังบน NUI UI
        }
    }
}

2. อาวุธโควต้ารายวัน (Daily Weapon Quota)

config_limit.lua
["pistol_daily"] = {
    name = "Pistol Ammo Box",
    currentStock = 50,
    maxStock = 50,
    resetToMax = true,
    category = "weapon",

    purchaseLimit = {
        enabled = true,
        maxPerPlayer = 2,
        resetType = "daily", -- รีเซ็ตโควต้าผู้เล่นทุกวัน
        expireAfterSeconds = 86400 -- ลิมิตการซื้อจะหมดอายุหลังผ่านไป 24 ชั่วโมง
    }
}

3. สินค้าเพิ่มสต็อกตามช่วงเวลาโบนัส (Dynamic Bonus Stock)

config_limit.lua
["airdrop_crate"] = {
    name = "Special Supply Box",
    currentStock = 10,
    maxStock = 10,
    category = "event",

    dynamic = {
        enabled = true,
        conditions = {
            {
                type = "time_based",
                start_time = "19:00",
                end_time = "21:00", -- เพิ่มโบนัสสต็อกช่วง 19:00 - 21:00 น.
                bonus_stock = 20
            },
            {
                type = "player_count",
                min_players = 30, -- ถ้าผู้เล่นออนไลน์เกิน 30 คน
                bonus_stock = 10  -- เพิ่มสต็อกอีก 10 ชิ้น
            }
        }
    }
}

เคล็ดลับการใช้งาน

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

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

On this page