Devil HunterDevil Docs
Payment In Game

ตั้งค่าร้านค้าครั้งแรก

flow ครบตั้งแต่ License, ตำแหน่ง Zone, สินค้าชิ้นแรก จนถึงสต็อกและการแจ้งเตือน

หน้านี้จะพาคุณตั้งค่าร้านค้า Devil Market ตั้งแต่เริ่มต้น จนกระทั่งผู้เล่นสามารถเดินเข้าไปซื้อของได้ ถ้าติดตั้ง resource เรียบร้อยแล้ว ให้ทำตามขั้นตอนเรียงตามลำดับ

สิ่งที่ต้องมีก่อนเริ่ม

  • ติดตั้ง devil_market และ devil_marketaddons เรียบร้อย (ดู การติดตั้ง)
  • นำเข้าไฟล์ @installme.sql ลงฐานข้อมูลแล้ว
  • เปิด resource es_extended, oxmysql, nc_inventory, nc_notify ไว้

ภาพรวมขั้นตอน

ขั้นตอนทำอะไรไฟล์ที่แก้
1ผูก License ระหว่างเกมกับ Addonconfig_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:

config_main.lua
Settings = {
    License = "YOUR_LICENSE_KEY_HERE", 
    -- ...ค่าอื่น ๆ
}

แล้วเปิดไฟล์ .env ฝั่ง Addon ใส่ค่า เดียวกันเป๊ะ กับด้านบน:

.env
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 เป็นตำแหน่งที่คุณต้องการ:

config_main.lua
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 ให้เพิ่มสินค้าเข้าไป เริ่มจากไอเทมง่าย ๆ ก่อน เช่นน้ำดื่ม:

config_main.lua
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:

config_limit.lua
["water_basic"] = {
    name = "น้ำดื่ม",
    currentStock = 100,
    maxStock = 100,
    resetToMax = true,           -- รีเติมเป็น 100 ทุกวัน
    category = "item",
}

ความหมาย: มีน้ำดื่ม 100 ขวดในสต็อก พอหมดจะรีเซ็ตเป็น 100 ใหม่ทุกวันเวลา 00:00 (ตามค่า AutoReset ในไฟล์เดียวกัน)

เปิดการแจ้งเตือน

เปิดไฟล์ config_notification.lua เพื่อปรับข้อความแจ้งเตือนตอนซื้อสำเร็จ:

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)

ทดสอบในเกม:

  1. เข้าเซิร์ฟเวอร์
  2. เดินไปยังตำแหน่ง Zone ที่ตั้งไว้
  3. เห็น marker + ข้อความแจ้งเตือน Press [E] Open Devil Market
  4. กด E → UI เปิดขึ้น → เห็นสินค้า "น้ำดื่ม"
  5. ซื้อ 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 ต่อไปนี้เพื่อขยายร้านค้า:

On this page