Custom functions
เพิ่มฟังก์ชันกลางให้ NC Core โดยไม่แก้ไฟล์หลัก และไม่กระทบการอัปเดต
Custom Functions
วิธีการสร้าง Custom Functions
หน้านี้อธิบายวิธีเพิ่ม “ฟังก์ชันส่วนกลาง” ให้ NC Core โดยไม่แก้ไฟล์หลัก
ฟังก์ชันที่เพิ่มจะถูกโหลดพร้อม es_extended และเรียกใช้ผ่าน ESX ได้ทันที
เหมาะสำหรับกรณีใด
ฟังก์ชันที่ต้องเรียกใช้ซ้ำในหลายทรัพยากร (resource)
ฟังก์ชันช่วย เช่น notification, logging, validation
ตรรกะธุรกิจที่ต้องการมาตรฐานเดียวกันทั้งเซิร์ฟเวอร์
ประโยชน์หลัก
ลดโอกาสโค้ดชนกับการอัปเดตของ NC Core
ใช้งานซ้ำได้จากหลายทรัพยากร ผ่านจุดอ้างอิงเดียว (
ESX)รวมตรรกะไว้ที่เดียว ลดโค้ดซ้ำ และดูแลง่าย
ตำแหน่งไฟล์
NC Core เตรียมไฟล์สำหรับ custom functions ไว้ 2 จุด:
lib/cl.custom.luaสำหรับฟังก์ชันฝั่ง Clientlib/sv.custom.luaสำหรับฟังก์ชันฝั่ง Server
ไฟล์เหล่านี้ถูกโหลดพร้อม NC Core
ฟังก์ชันที่ประกาศไว้จะพร้อมใช้งานผ่าน ESX โดยตรง
ขั้นตอนการเพิ่มฟังก์ชัน (แนะนำ)
เลือกฝั่งที่เหมาะสม
งานที่เกี่ยวข้องกับเงิน Item สิทธิ์ และความปลอดภัย ให้ทำบน Server
งานที่เกี่ยวกับ UI/เอฟเฟกต์/การควบคุมตัวละคร ให้ทำบน Client
เพิ่มเมทอดในไฟล์ *.custom.lua
เพิ่มฟังก์ชันใน
lib/sv.custom.luaหรือlib/cl.custom.luaตั้งชื่อเป็นกริยา และสื่อหน้าที่ชัดเจน เช่น
ESX.GivePackage,ESX.RevivePlayer
ทดสอบการโหลดและการเรียกใช้งาน
รีสตาร์ท
es_extendedหรือรีสตาร์ทเซิร์ฟเวอร์ 1 รอบตรวจ error ที่ Console/F8 เพื่อยืนยันว่าเมทอดถูกผูกกับ
ESXแล้ว
โครงสร้างพื้นฐาน (Template)
กำหนดรูปแบบพารามิเตอร์และการคืนค่าให้สม่ำเสมอ
ใส่คำอธิบายสั้น ๆ เพื่อให้ทีมอ่านโค้ดได้เร็วขึ้น
การเรียกใช้งานจาก resource อื่น
Custom functions ถูกผูกกับ ESX จึงเรียกใช้ได้เหมือนเมทอดทั่วไป
ฝั่ง Client: เรียก
ESX.YourFunction()ใน client scriptฝั่ง Server: เรียก
ESX.YourFunction()ใน server script
หาก resource ของคุณยังไม่ได้ import Framework ให้ตั้งค่าตามหน้า Framework usage
แนวทางการออกแบบ (แนะนำ)
ตรวจสอบอินพุตทุกครั้ง โดยเฉพาะค่าที่มาจาก client
ระบุผลลัพธ์ให้ตรวจสอบได้ เช่น
success (boolean)และmessage (string)แยกตรรกะ Client/Server ให้ชัดเจน และให้ Server เป็นแหล่งข้อมูลจริง (source of truth)
หลีกเลี่ยง side-effect ที่คาดเดายาก เช่น แก้ state หลายจุดในฟังก์ชันเดียว
หลีกเลี่ยงการวาง logic ที่ “เชื่อถือไม่ได้” ไว้ฝั่ง Client งานด้านเศรษฐกิจ สิทธิ์ Item และความปลอดภัย ควรทำบน Server เป็นหลัก
ตัวอย่างเพิ่มเติม
การทดสอบและการดีบัก (แนะนำ)
ทดสอบแยกตามฝั่ง เพื่อแยกสาเหตุได้ชัดเจน
ทดสอบฝั่ง Server ด้วย command/event ที่ควบคุมได้
ทดสอบฝั่ง Client หลัง spawn แล้ว และตรวจสอบ error ใน F8
Support
ติดต่อทีมงานผ่าน Ticket บน Discord ทางการ
Discord: https://discord.gg/ncdeveloper
เพื่อความเร็ว โปรดแนบรูปภาพ ตอนบูตเซิร์ฟเวอร์ + error ที่พบ (Server console/F8)
Last updated