เริ่มเขียน 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 จะ

  1. หา Ped ของผู้เล่น

  2. ดึงตำแหน่ง Entity

  3. แสดง 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 แรกไม่ต้องซับซ้อน แค่สามารถ

  1. สร้าง Resource

  2. เขียน fxmanifest.lua

  3. โหลด client.lua

  4. Start Resource

  5. สร้าง Command

  6. เรียก Native

  7. ส่ง Event ไป Server

ถ้าทำทั้งหมดนี้ได้ คุณผ่านขั้นเริ่มต้นของการเป็น FiveM Developer แล้ว

หลังจากนั้นจึงค่อยเรียน Database, NUI, Framework, Networking, Security และ Performance ต่อไป

สำหรับคนที่กำลังสร้างเซิร์ฟเวอร์หรือศึกษา Script บน comsiam การเข้าใจพื้นฐานเหล่านี้จะช่วยให้ไม่ต้องพึ่งการ Copy Script อย่างเดียว และสามารถแก้ไขระบบตามความต้องการของ Server ได้จริง

ยิ่งฝึกสร้าง Resource เล็ก ๆ ด้วยตัวเองมากเท่าไร คุณจะยิ่งอ่าน Script ของ FiveM ได้เร็วขึ้น และเมื่อเจอ Error ก็จะสามารถไล่หาสาเหตุได้เป็นระบบมากขึ้น ซึ่งเป็นพื้นฐานสำคัญก่อนพัฒนา Script ระดับจริงจังบน comsiam และเซิร์ฟเวอร์ของคุณเอง

Comments

Popular posts from this blog

FiveM ยังน่าเล่นไหม? Enhanced เปลี่ยน FiveM แค่ไหน

FiveM คืออะไร เล่นอย่างไร สำหรับมือใหม่ เริ่มต้นตั้งแต่ศูนย์

วิธีตั้ง Admin Permission ด้วย add_ace และ add_principal FiveM แบบละเอียด