X3D Sell Drug (งานขายยา)
งานขายของผิดกฎหมาย ผู้รับซื้อลับสุ่มโผล่ตามแมพ มีเวลาจำกัด จ่ายเป็นเงินดำ มีระบบจุด10 ใช้ได้ทั้ง ESX และ standalone
ซื้อ / รับฟรีตั้งค่า configการติดตั้ง
- วางโฟลเดอร์
x3d_selldrugลงresources/ - เพิ่มใน
server.cfg
ensure x3d_selldrug
จบ ไม่ต้องรัน SQL
ตั้งค่าหลัก (shared/config.lua)
| ค่า | ทำอะไร |
|---|---|
Config.Framework |
'auto' ใช้ ESX ถ้ามี ไม่มีก็ standalone · 'esx' · 'standalone' |
Config.Locale |
'th' หรือ 'en' |
Config.RequiredJobs |
คนเข้าเวรขั้นต่ำต่ออาชีพก่อนขาย เช่น { police = 2 } · {} = ไม่เช็ก |
Config.Alert |
แจ้งอาชีพใน jobs หลังขายสำเร็จ · chance 0–1 ต่อการขาย · delay หน่วง ms · blipTime วงบนแผนที่อยู่กี่วินาที · jobs = {} = ไม่แจ้ง |
Config.AdminBlips |
true = แอดมินเห็น blip ทุกจุดขาย (รวมจุดว่าง) ตอนเข้าเกม (มี x3d_adminpanel กดเปิด/ปิดจากแผงได้) |
Config.InteractDistance |
ระยะกด E |
Config.StreamDistance |
ระยะที่ ped ผู้รับซื้อถูกสร้าง |
Config.RequiredJobs = { police = 2 }
Config.Alert = { jobs = { 'police' }, chance = 0.3, delay = 10000, blipTime = 60 }
standalone
ไม่มี ESX ระบบใช้ ox_inventory เก็บไอเทมและเงิน (ถ้ามี) แอดมินใช้ ACE: add_ace group.admin x3d_selldrug.admin allow
standalone ไม่มีระบบอาชีพ ถ้าตั้ง Config.RequiredJobs ต้องเขียน Framework.GetJob ใน addons/framework/server.lua เอง ไม่งั้นขายไม่ได้เลย
กลุ่มผู้รับซื้อ (Config.Groups)
แต่ละกลุ่มมีของ ราคา จุด และ blip ของตัวเอง ค่าเริ่มต้นมีสองกลุ่ม: street (ผู้รับซื้อลับ) กับ event (ผู้รับซื้อรายใหญ่)
| ค่า | ทำอะไร |
|---|---|
label / labelEn |
ชื่อที่แสดง |
activeCount |
จำนวนที่โผล่พร้อมกัน (0 = ไม่ยืนประจำ ใช้ schedule) |
lifeTime |
อยู่กี่วินาทีต่อคน { min, max } |
respawnDelay |
หายไปแล้วกี่ ms ถึงมีคนใหม่ { min, max } |
exclusive |
true = ผู้รับซื้อหนึ่งคนขายได้ทีละคน · false = ทุกคนขายได้คนละครั้ง |
blockedJobs |
อาชีพที่ห้ามขาย เช่น { police = true } |
progressMs |
ขายนานกี่ ms |
minigame |
{ enabled, rounds, difficulty } skillCheck ของ ox_lib ก่อนขาย (ไม่มี ox_lib = ข้าม) |
models / scenarios |
หน้าตาและท่าของ ped |
blip |
sprite scale name colour · flash = กระพริบ · shortRange = false = เห็นได้ทั้งแมพ |
offers |
ของที่รับซื้อกับราคา { items = { { name, count } }, pay = { min, max } } |
spots |
พิกัดที่ผู้รับซื้อโผล่ vector4(x, y, z, heading) |
spotsFrom / offersFrom |
ใช้จุดหรือตารางราคาของกลุ่มอื่น เช่น 'street' |
ผู้รับซื้อรายใหญ่ (event)
| ค่า | ทำอะไร |
|---|---|
schedule |
{ every = { min, max } (วินาที), count = จำนวนต่อรอบ, announce = ประกาศทุกคน } |
quantity |
ขายทีละกี่ชิ้น (ต้องมีครบ) ค่าเริ่มต้น 10 |
payMultiplier |
ราคา = ราคาปกติ × quantity × ตัวนี้ ค่าเริ่มต้น 1.2 |
progressMs |
ค่าเริ่มต้น 180000 (3 นาที) ยกเลิกกลางทางได้ |
ลบกลุ่ม event ทั้งก้อน = ไม่มี event · แอดมินเริ่มเองได้จากแผงหรือ exports.x3d_selldrug:StartEvent('event')
ไอเทม
ของที่ขายได้ต้องมีอยู่ในตารางไอเทมของเซิร์ฟอยู่แล้ว สคริปต์นี้ไม่ได้เพิ่มไอเทมให้
จุดต่อ (addons/hooks/server.lua)
-- เรียกหลังขายสำเร็จ (จ่ายเงินดำแล้ว)
-- sale = { group = 'street', pay = 720, items = { { name = 'drug_meth', count = 1 } } }
Hooks.OnSold = function(src, sale) end
Hooks.OnEventBuyer กับ Hooks.OnEventBuyerGone ถูกเรียกตอนผู้รับซื้อรายใหญ่ของอีเวนต์โผล่และตอนหายไป — เอาไปต่อประกาศหรือ log ได้
แผงแอดมิน
มี X3D Admin Panel จะมีหน้า "ขายของลับ" ให้เอง: รายการจุดผู้รับซื้อทั้งหมด ปุ่มเปิด/ปิด blip ทุกจุด (เห็นคนเดียว) ปุ่มเริ่ม event ตอนนี้ และตัวแก้จุดขาย (เพิ่มจุดตรงที่ยืน วาร์ปไปที่จุด เปิด/ปิดจุด ย้ายผู้รับซื้อ กดค้างเพื่อลบ) ไม่มีแผงก็ทำงานปกติ
ฟังก์ชัน SpotAdmin.* ฝั่งเซิร์ฟเวอร์ทำได้ทุกอย่างที่ตัวแก้จุดขายทำ แผงแอดมินที่คุณเขียนเองจึงคุมจุดได้เหมือนกัน (net event x3d_selldrug:admin* เรียกฟังก์ชันพวกนี้อยู่)
ต่อกับระบบฟอกเงิน
จ่ายเป็น black_money ตรง ๆ ระบบฟอกเงินอะไรก็รับต่อได้
ปัญหาที่เจอบ่อย
ไม่เห็นผู้รับซื้อเลย — เช็กว่ากลุ่มมี spots และ activeCount ไม่ใช่ 0
กด E แล้วไม่มีอะไรเกิดขึ้น — ยืนใกล้กว่า Config.InteractDistance และต้องไม่ได้อยู่ในรถ
ขึ้นว่าตำรวจไม่พอ — Config.RequiredJobs นับเฉพาะคนที่เข้าเวร ตั้ง {} ถ้าไม่ต้องการ
เจรจาไม่สำเร็จ — เล่น skillCheck ของ ox_lib ไม่ผ่าน ปิดได้ที่ minigame.enabled = false
ขายแล้วไม่ได้เงิน — ดูคอนโซลฝั่งเซิร์ฟเวอร์ ปกติคือของไม่พอ หรือเดินออกนอกระยะระหว่างดีล