ตั้งค่าร้านค้าครั้งแรก
flow ครบตั้งแต่ License, ตำแหน่ง Zone, สินค้าชิ้นแรก จนถึงสต็อกและการแจ้งเตือน
หน้านี้จะพาคุณตั้งค่าร้านค้า Devil Market ตั้งแต่เริ่มต้น จนกระทั่งผู้เล่นสามารถเดินเข้าไปซื้อของได้ ถ้าติดตั้ง resource เรียบร้อยแล้ว ให้ทำตามขั้นตอนเรียงตามลำดับ
สิ่งที่ต้องมีก่อนเริ่ม
- ติดตั้ง
devil_marketและdevil_marketaddonsเรียบร้อย (ดู การติดตั้ง) - นำเข้าไฟล์
@installme.sqlลงฐานข้อมูลแล้ว - เปิด resource
es_extended,oxmysql,nc_inventory,nc_notifyไว้
ภาพรวมขั้นตอน
| ขั้นตอน | ทำอะไร | ไฟล์ที่แก้ |
|---|---|---|
| 1 | ผูก License ระหว่างเกมกับ Addon | config_main.lua + .env |
| 2 | ตั้งตำแหน่งเปิดร้าน (Zone) | config_main.lua |
| 3 | เพิ่มสินค้าชิ้นแรก | config_main.lua |
| 4 | กำหนดสต็อกสินค้า | config_limit.lua |
| 5 | เปิดการแจ้งเตือน | config_notification.lua |
| 6 | รีสตาร์ทและทดสอบ | — |
การตั้งค่า
ผูก License
ค่า License เป็นกุญแจที่ให้ฝั่งเกม (devil_market) คุยกับฝั่ง Addon ได้ ค่าทั้งสองฝั่ง ต้องเหมือนกันเป๊ะ มิฉะนั้นระบบเติมเงินและ sync ข้อมูลจะใช้งานไม่ได้
เปิดไฟล์ config_main.lua แล้วแก้บรรทัด License:
Settings = {
License = "YOUR_LICENSE_KEY_HERE",
-- ...ค่าอื่น ๆ
}แล้วเปิดไฟล์ .env ฝั่ง Addon ใส่ค่า เดียวกันเป๊ะ กับด้านบน:
DEVIL_API_SECRET=YOUR_LICENSE_KEY_HEREค่าทั้งสองฝั่งต้องตรงกันเป๊ะ
ค่า License ใน config_main.lua และ DEVIL_API_SECRET ใน .env ต้องเป็น ข้อความเดียวกันทุกตัวอักษร ถ้าต่างกันแม้แค่ 1 ตัว API จะปฏิเสธการเชื่อมต่อทั้งหมด — ระบบเติมเงินและ sync ข้อมูลจะใช้งานไม่ได้
- ใช้ค่า License ที่มากับสคริปต์ของคุณ (หาได้จาก
config_main.luaบรรทัดLicense) - คัดลอกค่านั้นไปใส่ใน
DEVIL_API_SECRETใน.env - ห้ามลบหรือแก้ค่า License ใน
config_main.luaเด็ดขาด — มันผูกกับบัญชีที่ซื้อสคริปต์
ตั้งตำแหน่งเปิดร้าน (Zone)
Zone คือจุดที่ผู้เล่นเดินเข้าไปแล้วกดปุ่มเปิดร้าน มักจะตั้งไว้กลางเมืองหรือจุดที่ผู้เล่นเข้าถึงง่าย
ใน config_main.lua ใต้ส่วน Zones ให้แก้พิกัด coords เป็นตำแหน่งที่คุณต้องการ:
Zones = {
{
coords = vector3(398.18, -822.82, 29.29), -- พิกัด Legion Square (ตัวอย่าง)
label = "Devil Market - Legion Square",
marker = {
size = vector3(1.4, 1.4, 0.6),
color = { r = 217, g = 160, b = 76, a = 140 },
rotate = true,
},
},
}วิธีหาพิกัดในเกม
ใน FiveM console พิมพ์ /coords หรือใช้คำสั่ง /pos (ถ้าเซิร์ฟเวอร์รองรับ) ขณะยืนในตำแหน่งที่ต้องการ ค่าที่ได้คือ x, y, z ที่จะใส่ใน vector3(x, y, z)
เพิ่มสินค้าชิ้นแรก
ใต้ส่วน Products ให้เพิ่มสินค้าเข้าไป เริ่มจากไอเทมง่าย ๆ ก่อน เช่นน้ำดื่ม:
Products = {
{
category = "ของกินของใช้",
items = {
{
label = "น้ำดื่ม",
price = 15,
pointPrice = 15,
description = "น้ำดื่มบรรจุขวด",
earnPoints = 1,
type = "item",
spawnName = "water",
limitId = { enabled = true, id = "water_basic" },
},
},
},
}ค่าสำคัญที่ต้องเช็ค:
| ค่า | ความหมาย |
|---|---|
spawnName | ต้องตรงกับชื่อไอเทมใน nc_inventory (ระบบกระเป๋า) มิฉะนั้นซื้อแล้วไอเทมไม่เข้า |
price | ราคาเต็ม (เงินสดในเกม) |
pointPrice | ราคาเมื่อจ่ายด้วย Point (ส่วนใหญ่ตั้งเท่ากับ price) |
limitId.id | ตัวระบุสต็อก ต้องไปสร้าง entry ใน config_limit.lua ให้ตรงกัน |
กำหนดสต็อกสินค้า
สินค้าทุกชิ้นที่เปิด limitId.enabled = true ต้องมี entry ใน config_limit.lua ที่มี key ตรงกับ limitId.id ไม่งั้นระบบจะสร้างค่า default 100/100 ให้อัตโนมัติ
เปิด config_limit.lua แล้วเพิ่ม entry สำหรับ water_basic:
["water_basic"] = {
name = "น้ำดื่ม",
currentStock = 100,
maxStock = 100,
resetToMax = true, -- รีเติมเป็น 100 ทุกวัน
category = "item",
}ความหมาย: มีน้ำดื่ม 100 ขวดในสต็อก พอหมดจะรีเซ็ตเป็น 100 ใหม่ทุกวันเวลา 00:00 (ตามค่า AutoReset ในไฟล์เดียวกัน)
เปิดการแจ้งเตือน
เปิดไฟล์ config_notification.lua เพื่อปรับข้อความแจ้งเตือนตอนซื้อสำเร็จ:
Messages = {
purchase_success = function(data)
local name = data.name or 'ไอเท็ม'
local count = data.count or 1
return 'คุณได้รับ ' .. count .. 'x ' .. name
end,
}ค่าเริ่มต้นใช้ nc_notify ถ้าเซิร์ฟเวอร์ใช้ notify อื่น ดูวิธีเปลี่ยนใน ระบบแจ้งเตือน
รีสตาร์ทและทดสอบ
รีสตาร์ท resource ใน console:
restart devil_marketหรือถ้าแก้ทั้งสองฝั่ง รีสตาร์ท Addon ด้วย:
restart devil_marketaddons(ถ้า Addon รันผ่าน PM2: pm2 restart devil-market-addons)
ทดสอบในเกม:
- เข้าเซิร์ฟเวอร์
- เดินไปยังตำแหน่ง Zone ที่ตั้งไว้
- เห็น marker + ข้อความแจ้งเตือน
Press [E] Open Devil Market - กด
E→ UI เปิดขึ้น → เห็นสินค้า "น้ำดื่ม" - ซื้อ 1 ชิ้น → ได้รับ
waterในกระเป๋า + แจ้งเตือนสำเร็จ
เจอปัญหา?
ตรวจสอบ:
- ตำแหน่ง Zone (
coords) ถูกต้องหรือไม่ — ลองพิมพ์/coordsในเกมเพื่อเช็คพิกัดปัจจุบัน ViewDistanceในconfig_main.luaไม่ต่ำเกินไป (ค่า default 15 เมตร)OpenUIKeyถ้าตั้งเป็น999= ปิด hotkey ต้องเข้าไปกดที่ marker เท่านั้น- ดู console ว่ามี error เกี่ยวกับ
devil_marketไหม
ปัญหาส่วนใหญ่คือ spawnName ไม่ตรงกับชื่อใน nc_inventory:
- ตรวจว่า
spawnName = "water"ตรงกับชื่อไอเทมในระบบกระเป๋าจริง ๆ หรือไม่ - ถ้าใช้ inventory อื่น (เช่น ox_inventory) อาจต้องแก้
Config_Function.GiveItemใน ฟังก์ชัน Hook - ดู console ฝั่ง server ว่ามี error ตอนส่งไอเทมไหม
- ตรวจว่า
nc_notifyเริ่มทำงานอยู่ (ensure nc_notifyในserver.cfg) - ถ้าใช้ notify อื่น ดูวิธีเปลี่ยนใน ระบบแจ้งเตือน
- ดู console ว่ามี error
nc_notify not foundหรือไม่
- ตรวจ
config_limit.luaว่ามี key["water_basic"]อยู่จริง (ชื่อต้องตรงกับlimitId.idในconfig_main.lua) - ตรวจว่า
currentStockไม่ใช่0 - ใช้คำสั่งแอดมิน
/marketstock water_basicเพื่อดูสถานะสต็อกปัจจุบัน
ขั้นตอนถัดไป
ตั้งค่าเบื้องต้นเสร็จแล้ว ลองดู use case ต่อไปนี้เพื่อขยายร้านค้า: