เริ่มเขียน Script FiveM อย่างไร สำหรับมือใหม่
ถ้าคุณเล่น FiveM มาสักพักและเริ่มสงสัยว่า Script FiveM เขียนอย่างไร หรืออยากสร้างระบบของตัวเอง เช่น ระบบงาน ระบบร้านค้า ระบบรถ ระบบ UI หรือคำสั่งต่าง ๆ ข่าวดีคือการเริ่มเขียน Script FiveM ไม่ได้ยากอย่างที่หลายคนคิด
สิ่งสำคัญคืออย่าเริ่มจาก Script ขนาดใหญ่ทันที แต่ควรเข้าใจโครงสร้างพื้นฐานของ FiveM ก่อน ตั้งแต่ Resource, fxmanifest.lua, Client Script, Server Script, Event และ Native จากนั้นค่อยพัฒนาไปสู่ Database, NUI และ Framework เช่น ESX, QBCore หรือ Qbox
บทความนี้จะพาเริ่มตั้งแต่ศูนย์จนสามารถสร้าง FiveM Resource ตัวแรก และทดสอบ Script ได้จริง
① ก่อนเขียน Script FiveM ต้องรู้อะไรบ้าง
FiveM เป็นแพลตฟอร์ม Multiplayer สำหรับ GTA V ที่เปิดให้ Developer สามารถสร้างระบบเพิ่มเติมผ่าน Resource และ Script ได้
FiveM รองรับภาษาหลักสำหรับการเขียน Script ได้แก่
Lua
JavaScript
C#
สำหรับมือใหม่ Lua เป็นจุดเริ่มต้นที่ดีมาก เพราะ Syntax ค่อนข้างอ่านง่าย ตัวอย่าง FiveM จำนวนมากใช้ Lua และ Framework ยอดนิยมจำนวนมากก็มี Resource ที่เขียนด้วย Lua
อย่างไรก็ตาม ไม่ได้หมายความว่า JavaScript หรือ C# ใช้ไม่ได้ หากคุณมีพื้นฐานภาษาเหล่านั้นอยู่แล้วก็สามารถเลือกใช้ได้เช่นกัน
② Resource FiveM คืออะไร
ก่อนเขียน Script ต้องเข้าใจคำว่า Resource
Resource คือชุดไฟล์ที่ FiveM Server สามารถโหลด เริ่ม หยุด หรือ Restart ได้ โดย Resource หนึ่งตัวอาจประกอบด้วย
my_first_script/
├── fxmanifest.lua
├── client.lua
└── server.lua
ตัวอย่างนี้มีไฟล์หลัก 3 ไฟล์
fxmanifest.lua
ใช้กำหนดข้อมูลของ Resource และบอก FiveM ว่าต้องโหลด Script ไฟล์ใด
client.lua
เป็น Script ที่ทำงานฝั่งเครื่องของผู้เล่น
เหมาะกับงาน เช่น
ตรวจปุ่มที่ผู้เล่นกด
แสดงข้อความ
จัดการ Ped
จัดการ Vehicle
Marker
Blip
กล้อง
Animation
UI
server.lua
เป็น Script ที่ทำงานฝั่ง Server
มักใช้กับ
ข้อมูลผู้เล่น
เงิน
Inventory
Database
Permission
ระบบงาน
การตรวจสอบข้อมูลสำคัญ
เมื่อเข้าใจสามส่วนนี้แล้ว การเรียน Script FiveM จะง่ายขึ้นมาก
③ โปรแกรมที่ควรมีสำหรับเขียน FiveM Script
สำหรับเริ่มต้นไม่จำเป็นต้องใช้เครื่องมือซับซ้อน
สิ่งที่ควรมีคือ
Visual Studio Code
ใช้สำหรับเขียน Lua, JavaScript, JSON, HTML และไฟล์ต่าง ๆ ของ Resource
FiveM Server สำหรับทดสอบ
ควรมี Server สำหรับ Development ของตัวเอง เพื่อให้สามารถ Start, Stop และ Restart Resource ได้โดยไม่กระทบผู้เล่นจริง
FiveM Client
ใช้เข้า Server และทดสอบ Script
Database
ช่วงแรกยังไม่จำเป็น แต่เมื่อเริ่มสร้างระบบผู้เล่น เงิน รถ บ้าน หรือ Inventory จะเริ่มต้องใช้ MySQL หรือ MariaDB
สำหรับมือใหม่ควรเริ่มจาก Script ที่ไม่ใช้ Database ก่อน
④ สร้าง Resource FiveM ตัวแรก
สมมติว่า Server ของเรามีโฟลเดอร์
resources/
ให้สร้างโฟลเดอร์สำหรับ Resource ใหม่ เช่น
resources/[local]/my_first_script/
จากนั้นสร้างไฟล์
fxmanifest.lua
client.lua
โครงสร้างจะเป็น
resources/
└── [local]/
└── my_first_script/
├── fxmanifest.lua
└── client.lua
นี่คือ Resource FiveM แบบพื้นฐานที่สุด
⑤ วิธีเขียน fxmanifest.lua
ภายใน fxmanifest.lua ใส่
fx_version 'cerulean'
game 'gta5'
author 'Your Name'
description 'My First FiveM Script'
version '1.0.0'
client_script 'client.lua'
ส่วนสำคัญคือ
fx_version 'cerulean'
ใช้ระบุ FX version ของ Resource
และ
game 'gta5'
ระบุว่า Resource นี้ใช้กับ GTA V
ส่วน
client_script 'client.lua'
เป็นการบอก FiveM ให้โหลดไฟล์ client.lua ฝั่ง Client
ปัจจุบัน Resource ใหม่ควรใช้ fxmanifest.lua ไม่ควรสร้าง Resource ใหม่ด้วย __resource.lua ซึ่งเป็นรูปแบบเก่า
⑥ เขียน FiveM Script แรกด้วย Lua
เปิดไฟล์
client.lua
แล้วใส่
print('Hello FiveM!')
เมื่อ Resource ทำงาน FiveM จะเรียก Script นี้และแสดงข้อความออกมา
แม้ตัวอย่างจะง่ายมาก แต่แนวคิดสำคัญคือเราได้สร้าง Resource และสามารถให้ FiveM Execute Lua Script ของเราได้แล้ว
⑦ วิธี Start Resource FiveM
เปิดไฟล์
server.cfg
เพิ่ม
ensure my_first_script
จากนั้น Restart Server
หรือหาก Server เปิดอยู่แล้ว สามารถใช้ Console
ensure my_first_script
ถ้า Resource ทำงานถูกต้อง จะไม่มี Error สำคัญปรากฏขึ้น
หลังจากแก้ Script สามารถใช้
restart my_first_script
เพื่อโหลด Resource ใหม่ได้
Developer จึงไม่จำเป็นต้อง Restart FiveM Server ทั้งเครื่องทุกครั้งที่แก้ Script
⑧ ทดลองสร้าง Command FiveM ตัวแรก
หลังจาก Resource ทำงานแล้ว ลองสร้าง Command ง่าย ๆ
แก้ client.lua เป็น
RegisterCommand('hello', function()
print('Hello from FiveM Script!')
end, false)
เข้า Server แล้วเปิด F8 Console จากนั้นลองพิมพ์
hello
Script จะเรียก Function ที่เราสร้างไว้
ตรงนี้คือก้าวสำคัญ เพราะคุณเริ่มเห็นแล้วว่า คำสั่งของผู้เล่นสามารถเรียก Code ของเราได้อย่างไร
⑨ ทดลองใช้ Native ของ FiveM
FiveM มีสิ่งที่เรียกว่า Native Functions
Native คือ Function ที่ใช้ติดต่อกับระบบของ GTA V หรือ FiveM เช่น
ตรวจตำแหน่งผู้เล่น
สร้างรถ
ตรวจรถ
จัดการ Ped
เปลี่ยนเวลา
แสดงข้อความ
เล่น Animation
ตรวจปุ่ม
จัดการ Entity
ตัวอย่าง
RegisterCommand('coords', function()
local ped = PlayerPedId()
local coords = GetEntityCoords(ped)
print(coords)
end, false)
เมื่อใช้คำสั่ง
coords
Script จะ
หา Ped ของผู้เล่น
ดึงตำแหน่ง Entity
แสดง Coordinates
ตรงนี้คุณกำลังใช้ Native สองตัวคือ
PlayerPedId()
GetEntityCoords()
การเข้าใจ Native ถือเป็นทักษะสำคัญมากสำหรับ FiveM Developer
⑩ Client Script กับ Server Script ต่างกันอย่างไร
หนึ่งในเรื่องที่มือใหม่สับสนมากที่สุดคือ Client และ Server
Client Script
ทำงานบนเครื่องผู้เล่นแต่ละคน
ตัวอย่างเช่น
local ped = PlayerPedId()
เกี่ยวข้องกับ Player ฝั่ง Client
Client เหมาะกับระบบที่ต้องทำงานกับ GTA V โดยตรง เช่น
Marker
Vehicle
Ped
Animation
Camera
HUD
NUI
Control
Server Script
ทำงานบน FXServer
ตัวอย่างงานที่ควรทำ Server-side เช่น
เพิ่มเงิน
ลดเงิน
ตรวจ Item
ตรวจสิทธิ์
บันทึก Database
ตรวจสอบ Player
ตรวจสอบธุรกรรม
สิ่งสำคัญมากคือ อย่าเชื่อข้อมูลสำคัญจาก Client โดยไม่มีการตรวจสอบ
เช่น ไม่ควรออกแบบระบบให้ Client สามารถสั่ง Server ว่า
เพิ่มเงินให้ฉัน 1,000,000
แล้ว Server เพิ่มให้ทันที
ข้อมูลสำคัญควรมีการตรวจสอบฝั่ง Server เสมอ
⑪ เพิ่ม Server Script เข้า Resource
สร้างไฟล์
server.lua
จากนั้นแก้ fxmanifest.lua
fx_version 'cerulean'
game 'gta5'
author 'Your Name'
description 'My First FiveM Script'
version '1.0.0'
client_script 'client.lua'
server_script 'server.lua'
ภายใน server.lua ทดลองเขียน
print('My FiveM server script started!')
เมื่อ Resource Start ข้อความจะปรากฏใน Server Console
ตอนนี้ Resource ของเรามีทั้ง Client และ Server แล้ว
⑫ Event คือหัวใจของ FiveM Script
เมื่อ Script ซับซ้อนขึ้น Client และ Server จำเป็นต้องสื่อสารกัน
FiveM จึงมีระบบ Event
ตัวอย่างแนวคิด
Player
↓
Client Script
↓
TriggerServerEvent
↓
Server Script
↓
ตรวจสอบข้อมูล
↓
ดำเนินการ
ตัวอย่าง Client
RegisterCommand('testserver', function()
TriggerServerEvent('my_script:hello')
end, false)
Server
RegisterNetEvent('my_script:hello', function()
print('Received event from player')
end)
เมื่อผู้เล่นใช้คำสั่ง
testserver
Client จะส่ง Event ไปยัง Server
นี่คือพื้นฐานของระบบ FiveM จำนวนมาก
⑬ FiveM Script ทำงานวน Loop อย่างไร
Script จำนวนมากต้องตรวจสอบบางอย่างต่อเนื่อง เช่น
ผู้เล่นอยู่ใกล้ Marker หรือไม่
ผู้เล่นกด E หรือไม่
ผู้เล่นอยู่ในรถหรือไม่
Player อยู่ใน Zone หรือไม่
จึงมักพบ Code ลักษณะนี้
CreateThread(function()
while true do
Wait(1000)
print('Running...')
end
end)
CreateThread ใช้สร้าง Thread สำหรับทำงาน
ส่วน
Wait(1000)
หมายถึงพักการทำงานประมาณ 1,000 milliseconds
หรือประมาณ 1 วินาที
⑭ อย่าเขียน Loop แบบกิน CPU
ข้อผิดพลาดที่มือใหม่ควรระวังคือ
CreateThread(function()
while true do
print('Running')
end
end)
Loop นี้ไม่มี Wait() ทำให้ Script พยายามทำงานต่อเนื่องอย่างรวดเร็วและอาจสร้างปัญหาด้าน Performance
ควรมีการกำหนด Wait ให้เหมาะสม เช่น
CreateThread(function()
while true do
Wait(1000)
print('Running')
end
end)
แต่ก็ไม่ใช่ว่าต้องใช้ Wait(1000) ทุกระบบ
ระบบที่ต้องตรวจทุก Frame อาจต้องใช้
Wait(0)
ส่วนระบบที่ไม่จำเป็นต้องตรวจถี่ควรเพิ่มระยะ Wait เพื่อลดการใช้ทรัพยากร
การ Optimize Loop ตั้งแต่เริ่มต้นจะช่วยลดปัญหา FiveM Resmon สูง ในภายหลัง
⑮ Error ที่มือใหม่เจอบ่อย
Resource ไม่ Start
ตรวจสอบว่า fxmanifest.lua อยู่ใน Resource Folder หรือไม่
Couldn't find resource
ตรวจชื่อ Folder กับชื่อที่ใช้ใน ensure
ตัวอย่าง
ensure my_first_script
ต้องตรงกับชื่อ Resource
Lua Syntax Error
มักเกิดจาก
ลืม
endวงเล็บไม่ครบ
เครื่องหมายคำพูดไม่ครบ
เขียนชื่อ Variable ผิด
Native ใช้ไม่ได้
ตรวจว่า Native นั้นเป็น Client-side หรือ Server-side
Native บางตัวใช้ได้เฉพาะ Client ขณะที่บางตัวใช้เฉพาะ Server
แก้ Code แล้วไม่เปลี่ยน
ลอง
restart my_first_script
และตรวจว่าแก้ Resource ตัวที่ Server กำลังใช้งานจริงหรือไม่
⑯ ควรเรียน Lua อะไรก่อนเขียน FiveM
ไม่จำเป็นต้องเรียน Lua ทั้งภาษาให้จบก่อนเริ่ม FiveM
แต่ควรเข้าใจเรื่องต่อไปนี้
Variable
local name = 'John'
local money = 1000
if
if money >= 1000 then
print('Enough money')
end
Function
local function hello()
print('Hello')
end
hello()
Table
local player = {
name = 'John',
money = 1000
}
Loop
for i = 1, 5 do
print(i)
end
Function Parameter
local function addMoney(amount)
print(amount)
end
addMoney(500)
ถ้าเข้าใจพื้นฐานเหล่านี้แล้ว สามารถเริ่มอ่าน FiveM Script จริงได้ค่อนข้างเร็ว
⑰ มือใหม่ควรเริ่มเขียน Script อะไร
อย่าเริ่มจากระบบ Police, Inventory หรือ Framework ขนาดใหญ่ทันที
แนะนำให้ไล่ระดับดังนี้
ระดับ 1
สร้าง Command
/hello
ระดับ 2
อ่าน Coordinates ของผู้เล่น
ระดับ 3
สร้าง Marker
ระดับ 4
ตรวจ Distance ระหว่าง Player กับตำแหน่ง
ระดับ 5
กดปุ่ม E เพื่อทำ Action
ระดับ 6
ส่ง Event จาก Client ไป Server
ระดับ 7
สร้างระบบเงินหรือข้อมูลจำลอง
ระดับ 8
เชื่อม Database
ระดับ 9
สร้าง NUI
ระดับ 10
เริ่มทำระบบจริง เช่น
Job
Garage
Shop
Vehicle
Housing
Inventory
Phone
เส้นทางนี้จะช่วยให้เข้าใจ Code มากกว่าการดาวน์โหลด Script ขนาดใหญ่มาแล้วพยายามแก้โดยไม่รู้โครงสร้าง
⑱ ต้องเรียน ESX หรือ QBCore ก่อนหรือไม่
ไม่จำเป็น
จริง ๆ แล้วควรเรียนพื้นฐาน FiveM ก่อน Framework
พยายามเข้าใจ
Lua
↓
Resource
↓
Client
↓
Server
↓
Native
↓
Event
↓
Callback
↓
Database
↓
Framework
ถ้าเข้าใจพื้นฐานเหล่านี้ การเรียน ESX, QBCore หรือ Qbox จะง่ายขึ้นมาก
แต่ถ้าเริ่มจาก Framework โดยไม่เข้าใจ Client/Server/Event เวลา Script Error จะตามหาสาเหตุได้ยาก
⑲ วิธีฝึกให้เขียน FiveM Script เก่งเร็วขึ้น
หลักสำคัญไม่ใช่การจำ Code แต่คือเข้าใจว่า Code ทำงานอย่างไร
เวลาพบ Script ตัวอย่าง ลองถามตัวเองว่า
Code นี้ทำงาน Client หรือ Server
Event ถูกเรียกจากไหน
Variable นี้เก็บอะไร
Native นี้ทำอะไร
Function ถูกเรียกเมื่อใด
ข้อมูลมาจาก Client หรือ Server
มีจุดไหนที่ผู้เล่นสามารถแก้หรือโกงข้อมูลได้
Loop ทำงานบ่อยแค่ไหน
Script ติดต่อ Database หรือไม่
Developer ที่แก้ปัญหาเก่งมักไม่ได้จำทุก Function แต่รู้ว่าจะหา Error และไล่ Logic จากตรงไหน
⑳ Roadmap สำหรับ FiveM Developer มือใหม่
ถ้าต้องการเรียนอย่างเป็นระบบ สามารถใช้ Roadmap นี้ได้
พื้นฐาน Lua
↓
Resource
↓
fxmanifest.lua
↓
Client Script
↓
Server Script
↓
Native
↓
Event
↓
Callback / Export
↓
Entity / Network
↓
Database
↓
NUI
↓
Framework
↓
Security
↓
Debug
↓
Optimization
ไม่จำเป็นต้องเรียนทุกอย่างพร้อมกัน
ให้สร้าง Project เล็ก ๆ แล้วเพิ่มความยากทีละขั้น จะเห็นพัฒนาการเร็วกว่าอ่านทฤษฎีอย่างเดียว
สรุป เริ่มเขียน Script FiveM อย่างไร
สำหรับมือใหม่ที่ต้องการเริ่มเขียน Script FiveM แนะนำให้เริ่มจาก Lua + Resource + fxmanifest.lua + Client/Server ก่อน จากนั้นฝึก Native, Command และ Event ให้เข้าใจ
Resource แรกไม่ต้องซับซ้อน แค่สามารถ
สร้าง Resource
เขียน
fxmanifest.luaโหลด
client.luaStart Resource
สร้าง Command
เรียก Native
ส่ง Event ไป Server
ถ้าทำทั้งหมดนี้ได้ คุณผ่านขั้นเริ่มต้นของการเป็น FiveM Developer แล้ว
หลังจากนั้นจึงค่อยเรียน Database, NUI, Framework, Networking, Security และ Performance ต่อไป
สำหรับคนที่กำลังสร้างเซิร์ฟเวอร์หรือศึกษา Script บน comsiam การเข้าใจพื้นฐานเหล่านี้จะช่วยให้ไม่ต้องพึ่งการ Copy Script อย่างเดียว และสามารถแก้ไขระบบตามความต้องการของ Server ได้จริง
ยิ่งฝึกสร้าง Resource เล็ก ๆ ด้วยตัวเองมากเท่าไร คุณจะยิ่งอ่าน Script ของ FiveM ได้เร็วขึ้น และเมื่อเจอ Error ก็จะสามารถไล่หาสาเหตุได้เป็นระบบมากขึ้น ซึ่งเป็นพื้นฐานสำคัญก่อนพัฒนา Script ระดับจริงจังบน comsiam และเซิร์ฟเวอร์ของคุณเอง
Comments
Post a Comment