เอกสาร

X3D Sell Drug (งานขายยา)

งานขายของผิดกฎหมาย ผู้รับซื้อลับสุ่มโผล่ตามแมพ มีเวลาจำกัด จ่ายเป็นเงินดำ มีระบบจุด10 ใช้ได้ทั้ง ESX และ standalone

ซื้อ / รับฟรีตั้งค่า config

การติดตั้ง

  1. วางโฟลเดอร์ x3d_selldrug ลง resources/
  2. เพิ่มใน 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

ขายแล้วไม่ได้เงิน — ดูคอนโซลฝั่งเซิร์ฟเวอร์ ปกติคือของไม่พอ หรือเดินออกนอกระยะระหว่างดีล

ดูหน้าสินค้า