Payment In Game
สต็อกสินค้าและลิมิตการซื้อ
จัดการสต็อกสินค้า ลิมิตการซื้อต่อคน เวลาเปิด-ปิดขาย และ Dynamic Stock (config_limit.lua)
ไฟล์ config_limit.lua ใช้กำหนดจำนวนสินค้าคงเหลือ ขีดจำกัดการซื้อต่อผู้เล่น ช่วงเวลาเปิดขาย และระบบเพิ่มสต็อกอัตโนมัติตามเงื่อนไข
การตั้งค่าทั่วไป
รีเซ็ตอัตโนมัติ (AutoReset)
AutoReset = {
enabled = true,
resetTime = "00:00",
resetDay = "daily" -- daily | weekly | monthly
}enabled- เปิดระบบรีเซ็ตสต็อกอัตโนมัติresetTime- เวลารีเซ็ต (รูปแบบ HH:MM)resetDay- ความถี่: รายวัน / รายสัปดาห์ / รายเดือน
การแจ้งเตือน (Notifications)
Notifications = {
lowStock = true, -- แจ้งเตือนเมื่อสินค้าใกล้หมด
lowStockThreshold = 5, -- จุดที่ถือว่าใกล้หมด
outOfStock = true -- แจ้งเตือนเมื่อสินค้าหมด
}ฐานข้อมูล (Database)
Database = {
saveToDatabase = true, -- บันทึกสต็อกลงฐานข้อมูล
saveInterval = 30000 -- บันทึกทุก 30 วินาที (milliseconds)
}โครงสร้างรายการสินค้า
แต่ละสินค้าใช้ limitId เป็น key อ้างอิงจาก config_main.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)
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)
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
เพิ่มสต็อกอัตโนมัติตามเงื่อนไข เช่น จำนวนผู้เล่นหรือช่วงเวลา:
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
}
}
}ตัวอย่างสินค้าแบบต่าง ๆ
สินค้าทั่วไป (รีเซ็ตทุกวัน)
["water"] = {
name = "น้ำเปล่า",
currentStock = 500,
maxStock = 500,
resetToMax = true,
category = "item",
}รถหายาก (ไม่รีเซ็ต, จำกัดคนละ 1 คัน)
["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
}
},
}สินค้าตามเทศกาล (เพิ่มตามช่วงเวลา)
["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)
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 ที่มากับสคริปต์