# NEXTCODE-Utils
`NEXTCODE-Utils` คือชุดเครื่องมือ (Utility Resource) ที่มีประสิทธิภาพสูงสำหรับเซิร์ฟเวอร์ RedM พัฒนาขึ้นเพื่อช่วยให้นักพัฒนาสามารถจัดการระบบต่าง ๆ ในเกมได้อย่างง่ายดายและเป็นระเบียบ ด้วยสถาปัตยกรรมแบบ OOP (Object-Oriented Programming) และการสตรีมข้ามระบบ (Exports)
---
## 🚀 วิธีการเริ่มต้นใช้งาน (Initialization)
คุณสามารถดึงชุดเครื่องมือทั้งหมดไปใช้งานในสคริปต์อื่น ๆ ได้อย่างสะดวกสบายผ่านระบบ Export:
### วิธีนำเข้าสคริปต์ (Importing)
```lua
local NEXTCODEUtils = exports["NEXTCODE-Utils"]:initiate()
```
---
## 📦 โมดูลระบบที่มีให้ใช้งาน (Available Modules)
เครื่องมือนี้ประกอบไปด้วย API ต่าง ๆ แบ่งตามการใช้งานดังนี้:
### 1. 🎛️ ปุ่มและการกดปุ่ม (Button & Keys)
* **`NEXTCODEUtils.Button`**: คลาสขั้นสูงในการจัดการปุ่มกด ตรวจจับการคลิกธรรมดา, การกดซ้ำ (Double Click), การกดค้าง (Long Press), และการกดรัว (Mash keys)
* **`NEXTCODEUtils.Keys`**: รายการรหัสปุ่มทั้งหมด และระบบดักจับการกดปุ่มแบบ Global (Key Listeners)
### 2. 🗺️ แผนที่และการนำทาง (Map & Blips)
* **`NEXTCODEUtils.Blips`**: สร้างจุดแผนที่ (Blips), ปรับแต่งสี/สเกล, ใส่รัศมี (Radius), และเพิ่มตัวดัดแปลง (Modifiers)
* **`NEXTCODEUtils.Map`**: จัดการการเปิด/ปิด Radar (มินิแมพ), การซ่อนหมอก (FOW), และระบบนำทาง GPS หลายจุดแบบไดนามิก
### 3. 🐎 ระบบการจัดการสัตว์ขี่ (Horse API)
* **`NEXTCODEUtils.Horse`**: จัดการการสร้างและสปอนม้า, เปลี่ยนสกินและอานม้า (Outfit), กำหนดค่าความอึด (Stamina) และพลังชีวิต (Health), เล่นแอนิเมชันสำหรับม้า, และตรวจจับการเชื่อง (Taming State)
### 4. 🧍 ระบบบอทและตัวละคร (Ped API)
* **`NEXTCODEUtils.Ped`**: สร้างและจัดการ NPC ทั้งบนบก, ในพาหนะ และบนหลังม้า. ตั้งค่าพฤติกรรมการต่อสู้ (Combat Attributes), รูปแบบการโจมตี (Combat Styles), การหนี (Flee Attributes), และกลุ่มความสัมพันธ์ (Relationship Groups)
### 5. 📦 การจัดการวัตถุ (Object API)
* **`NEXTCODEUtils.Object`**: สปอนวัตถุ/พร็อพ (Props), ตั้งค่าฟิสิกส์และการขยับสไลด์ (Slide to), ตั้งเอฟเฟกต์ไฟไหม้, และการกำหนดคุณสมบัติการถือพกพา (Carriable/Portable)
### 6. 🛒 จุดเก็บของ (Pickup API)
* **`NEXTCODEUtils.Pickup`**: ระบบสร้างไอเทมดร็อปบนพื้น ทั้งแบบคงที่ แบบหมุน หรือจุดเก็บของทั่วไป รวมถึงจัดการสิทธิการเก็บไอเทมสำหรับผู้เล่น
### 7. 💬 ปุ่มโต้ตอบและป๊อปอัป (Prompts UI)
* **`NEXTCODEUtils.Prompt`**: ออกแบบปุ่มโต้ตอบกับวัตถุหรือสถานที่รูปแบบต่าง ๆ (กดทีเดียว, กดค้าง, กดรัว, ตรวจสอบระยะทางและขอบเขต 3 มิติรอบตัว)
### 8. 🎨 การวาดเอฟเฟกต์และข้อความ (Render API)
* **`NEXTCODEUtils.Render`**: การแปลงพิกัดโลก 3D เป็นพิกัดหน้าจอ 2D, การวาดรูปสี่เหลี่ยม, การวาดสัญลักษณ์ (Markers), และการแสดงผลข้อความ 3D (3D Text) เหนือวัตถุหรือหัวผู้เล่น
### 9. 🗄️ ไฟล์และฐานข้อมูล (File & Database)
* **`NEXTCODEUtils.file`** (Server-Side): เครื่องมืออ่าน เขียน และอัปเดตไฟล์ JSON เพื่อเก็บข้อมูลแบบออฟไลน์
* **`NEXTCODEUtils.Database`** (Server-Side): ตัวช่วยเรียกคิวรี MySQL อย่างปลอดภัย ป้องกันปัญหา SQL Injection
### 10. 🌐 ระบบเครือข่ายและการควบคุมมิติ (RPC & Instances)
* **`NEXTCODEUtils.RPC` / `NEXTCODEUtils.Crypt`**: การส่งข้อมูลแบบ Remote Procedure Calls (RPC) ระหว่างฝั่ง Client และ Server ทั้งแบบปกติและแบบเข้ารหัส/บีบอัดข้อมูลความปลอดภัยสูง (sRPC)
* **`NEXTCODEUtils.instance`** (Server-Side): ระบบแยกมิติของผู้เล่น (Routing Bucket/Virtual Instance) ป้องกันการทับซ้อนพื้นที่หรือการรบกวนกันของผู้เล่น
### 11. 🔔 เครื่องมือทั่วไปและประวัติการทำงาน (Misc & Versioner)
* **`NEXTCODEUtils.Discord`**: ส่งข้อความแจ้งเตือนพร้อมรูปแบบการ์ด Embed เข้า Discord Webhook
* **`NEXTCODEUtils.Versioner`** (Server-Side): ระบบตรวจสอบความปลอดภัยและการอัปเดตเวอร์ชันของสคริปต์อัตโนมัติผ่าน GitHub
---
## 🛠️ ตัวอย่างการปรับแต่งไฟล์ `config.lua`
คุณสามารถควบคุมการแสดงผลบันทึกระบบได้ใน `config.lua`:
```lua
Config = {
DevMode = false -- ใช้สำหรับการเปิดประวัติบันทึกการกดปุ่ม (keylistener), ตัวรับเหตุการณ์ (event listener) และบันทึกแก้ไขข้อผิดพลาด (Debug logs)
}
```
---
## 📝 ตัวอย่างการนำไปใช้งานจริง (Usage Example)
### การแสดงข้อความ 3D บนแผนที่
```lua
local NEXTCODEUtils = exports["NEXTCODE-Utils"]:initiate()
Citizen.CreateThread(function()
while true do
Citizen.Wait(0)
local playerCoords = GetEntityCoords(PlayerPedId())
-- วาดข้อความ 3D บนพิกัดที่ระบุ
NEXTCODEUtils.Render:Draw3DText(
vector3(playerCoords.x, playerCoords.y, playerCoords.z + 1.0),
"ยินดีต้อนรับสู่ NEXTCODE",
1.0,
{r = 255, g = 215, b = 0, a = 255},
1
)
end
end)
```
---
*จัดทำเอกสารโดยทีมงานพัฒนา NEXTCODE Utility*