Weapons

ฟังก์ชันฝั่ง Server สำหรับจัดการอาวุธ (Loadout) ของผู้เล่นผ่าน xPlayer เช่น เพิ่ม/ลบอาวุธ, กระสุน, components และสีอาวุธ (tint)

Weapons (xPlayer)

กลุ่มฟังก์ชันสำหรับจัดการอาวุธของผู้เล่น (Loadout) เช่น เพิ่ม/ลบอาวุธ, ปรับกระสุน, ติดตั้งอุปกรณ์เสริม และตั้งสีอาวุธ

ใช้งานผ่านออบเจกต์ผู้เล่น xPlayer และทำงานฝั่ง Server-side เท่านั้น

ก่อนเริ่ม (แนะนำ)

  • แนะนำให้ตั้งค่าการเรียกใช้ Framework ให้ถูกต้องตาม Framework Usage

  • ดึง xPlayer จาก source ก่อนเรียกใช้งาน:

local xPlayer = ESX.GetPlayerFromId(source)
circle-info

ชื่ออาวุธต้องเป็นชื่อมาตรฐานของ GTA V เช่น WEAPON_PISTOL ไม่ใช่ชื่อเล่น เช่น pistol

circle-exclamation

โครงสร้างข้อมูลอาวุธ (Weapon object)

อาวุธใน loadout มักมีฟิลด์สำคัญดังนี้:

  • name ชื่ออาวุธ (เช่น WEAPON_PISTOL)

  • label ชื่อแสดง

  • ammo จำนวนกระสุน

  • components รายการอุปกรณ์เสริม

  • tintIndex สีอาวุธ (โดยทั่วไป 0-7)


xPlayer.addWeapon

ให้อาวุธแก่ผู้เล่น

รูปแบบการใช้งาน (Syntax)

พารามิเตอร์ (Parameters)

Name
Type
Description

name

string

ชื่ออาวุธ (เช่น 'WEAPON_PISTOL', 'WEAPON_COMBATPISTOL')

ammo

number

(ไม่บังคับ) จำนวนกระสุนเริ่มต้น (default: 0)

reason

string

(ไม่บังคับ) เหตุผลในการให้อาวุธ

ค่าที่ส่งคืน (Returns)

Type
Description

boolean

true หากสำเร็จ, false หากผู้เล่นมีอาวุธนี้อยู่แล้ว

ตัวอย่างการใช้งาน (Example)

chevron-rightตัวอย่างเพิ่มเติม (ขยายดู)hashtag

กรณีการใช้งาน (Use cases)

  • ร้านขายอาวุธ/ซื้ออาวุธ

  • ระบบอาชีพ (แจกอาวุธตอนเข้าเวร)

  • รางวัลจากภารกิจ/กิจกรรม

  • เครื่องมือแอดมิน

circle-exclamation
circle-check

xPlayer.addWeaponSet

ให้อาวุธพร้อมอุปกรณ์เสริมและสีครบชุดให้กับผู้เล่น

รูปแบบการใช้งาน (Syntax)

พารามิเตอร์ (Parameters)

Name
Type
Description

weapon

table

ตารางข้อมูลอาวุธ (ดูโครงสร้างด้านล่าง)

reason

string

(ไม่บังคับ) เหตุผลในการให้อาวุธ

โครงสร้างตาราง Weapon set

ฟิลด์
ประเภท
คำอธิบาย

name

string

ชื่ออาวุธ

ammo

number

(ไม่บังคับ) จำนวนกระสุน

components

table

(ไม่บังคับ) Array ของชื่อ components

tintIndex

number

(ไม่บังคับ) ดัชนีสี (0-7)

ค่าที่ส่งคืน (Returns)

ประเภท
คำอธิบาย

boolean

true ถ้าสำเร็จ

ตัวอย่างการใช้งาน (Example)

chevron-rightตัวอย่างเพิ่มเติม (ขยายดู)hashtag

กรณีการใช้งาน (Use cases)

  • แจกอาวุธแบบ “ชุด” ตามตำแหน่ง/ยศ

  • VIP package / อาวุธพิเศษ

  • Gunsmith / ระบบปรับแต่งอาวุธ

circle-info

ชื่อ component ต้องตรงกับที่กำหนดใน config.weapons.lua เช่น clip_extended, suppressor, scope


xPlayer.removeWeapon

ลบอาวุธออกจาก loadout ของผู้เล่น

รูปแบบการใช้งาน (Syntax)

พารามิเตอร์ (Parameters)

ชื่อ
ประเภท
คำอธิบาย

name

string

ชื่ออาวุธ

reason

string

(ไม่บังคับ) เหตุผลในการลบอาวุธ

ค่าที่ส่งคืน (Returns)

ประเภท
คำอธิบาย

boolean

true ถ้าสำเร็จ, false ถ้าไม่พบอาวุธ

ตัวอย่างการใช้งาน (Example)

chevron-rightตัวอย่างเพิ่มเติม (ขยายดู)hashtag

xPlayer.removeWeapons

ลบอาวุธหลายชิ้นพร้อมกันจาก loadout

รูปแบบการใช้งาน (Syntax)

พารามิเตอร์ (Parameters)

ชื่อ
ประเภท
คำอธิบาย

weapons

table

ตารางชื่ออาวุธ {['WEAPON_PISTOL'] = true}

reason

string

(ไม่บังคับ) เหตุผลในการลบ

ตัวอย่างการใช้งาน (Example)


xPlayer.hasWeapon

ตรวจสอบว่าผู้เล่นมีอาวุธที่ระบุหรือไม่

รูปแบบการใช้งาน (Syntax)

พารามิเตอร์ (Parameters)

ชื่อ
ประเภท
คำอธิบาย

name

string

ชื่ออาวุธ

ค่าที่ส่งคืน (Returns)

ประเภท
คำอธิบาย

boolean

true ถ้าผู้เล่นมีอาวุธ

ตัวอย่างการใช้งาน (Example)


xPlayer.getWeapon

ดึงข้อมูลอาวุธจาก loadout ของผู้เล่น

รูปแบบการใช้งาน (Syntax)

พารามิเตอร์ (Parameters)

ชื่อ
ประเภท
คำอธิบาย

name

string

ชื่ออาวุธ

ค่าที่ส่งคืน (Returns)

Type
Description

number

index ของอาวุธใน loadout (อาจเป็น nil หากไม่พบ)

table

weapon object { name, ammo, label, components, tintIndex } (อาจเป็น nil หากไม่พบ)

ตัวอย่างการใช้งาน (Example)


xPlayer.getLoadout

ดึงอาวุธทั้งหมดของผู้เล่น

รูปแบบการใช้งาน (Syntax)

พารามิเตอร์ (Parameters)

ชื่อ
ประเภท
คำอธิบาย

minimal

boolean

(ไม่บังคับ) ถ้าเป็น true จะคืนค่าแบบย่อ

ค่าที่ส่งคืน (Returns)

Type
Description

table

แบบเต็ม: array ของ { name, ammo, label, components, tintIndex }

table

แบบย่อ (minimal = true): {[weaponName] = { ammo, tintIndex?, components? }}

ตัวอย่างการใช้งาน (Example)


xPlayer.clearLoadout

ลบอาวุธทั้งหมดของผู้เล่น

รูปแบบการใช้งาน (Syntax)

พารามิเตอร์ (Parameters)

ชื่อ
ประเภท
คำอธิบาย

reason

string

(ไม่บังคับ) เหตุผลในการลบ

ค่าที่ส่งคืน (Returns)

ประเภท
คำอธิบาย

boolean

true ถ้าสำเร็จ

ตัวอย่างการใช้งาน (Example)


xPlayer.addWeaponComponent

เพิ่มอุปกรณ์เสริมให้กับอาวุธ

รูปแบบการใช้งาน (Syntax)

พารามิเตอร์ (Parameters)

ชื่อ
ประเภท
คำอธิบาย

name

string

ชื่ออาวุธ

componentName

string

ชื่อ component (เช่น 'clip_extended')

ค่าที่ส่งคืน (Returns)

ประเภท
คำอธิบาย

boolean

true ถ้าสำเร็จ

ตัวอย่างการใช้งาน (Example)

chevron-rightตัวอย่างเพิ่มเติม (ขยายดู)hashtag

xPlayer.removeWeaponComponent

ลบอุปกรณ์เสริมออกจากอาวุธ

รูปแบบการใช้งาน (Syntax)

พารามิเตอร์ (Parameters)

ชื่อ
ประเภท
คำอธิบาย

name

string

ชื่ออาวุธ

componentName

string

ชื่อ component

ค่าที่ส่งคืน (Returns)

ประเภท
คำอธิบาย

boolean

true ถ้าสำเร็จ


xPlayer.hasWeaponComponent

ตรวจสอบว่าอาวุธมีอุปกรณ์เสริมที่ระบุหรือไม่

รูปแบบการใช้งาน (Syntax)

พารามิเตอร์ (Parameters)

ชื่อ
ประเภท
คำอธิบาย

name

string

ชื่ออาวุธ

componentName

string

ชื่อ component

ค่าที่ส่งคืน (Returns)

ประเภท
คำอธิบาย

boolean

true ถ้ามี component ติดอยู่


xPlayer.addWeaponAmmo

เพิ่มกระสุนให้อาวุธ

รูปแบบการใช้งาน (Syntax)

พารามิเตอร์ (Parameters)

ชื่อ
ประเภท
คำอธิบาย

name

string

ชื่ออาวุธ

ammo

number

จำนวนที่เพิ่ม

ค่าที่ส่งคืน (Returns)

ประเภท
คำอธิบาย

boolean

true ถ้าสำเร็จ

ตัวอย่างการใช้งาน (Example)


xPlayer.removeWeaponAmmo

ลดกระสุนจากอาวุธ

รูปแบบการใช้งาน (Syntax)

พารามิเตอร์ (Parameters)

ชื่อ
ประเภท
คำอธิบาย

name

string

ชื่ออาวุธ

ammo

number

จำนวนที่ลด

ค่าที่ส่งคืน (Returns)

ประเภท
คำอธิบาย

boolean

true ถ้าสำเร็จ


xPlayer.updateWeaponAmmo

อัปเดตจำนวนกระสุนจาก game state (ใช้ภายใน)

รูปแบบการใช้งาน (Syntax)

พารามิเตอร์ (Parameters)

ชื่อ
ประเภท
คำอธิบาย

name

string

ชื่ออาวุธ

ammo

number

จำนวนกระสุนปัจจุบัน

ค่าที่ส่งคืน (Returns)

ประเภท
คำอธิบาย

boolean

true ถ้าสำเร็จ, false ถ้ากระสุนไม่เปลี่ยนแปลง

circle-info

ฟังก์ชันนี้ถูกเรียกโดย framework เพื่อ sync กระสุนจาก client ไปยัง server โดยทั่วไปไม่จำเป็นต้องเรียกเอง


xPlayer.getWeaponTint

ดึงดัชนีสีของอาวุธ

รูปแบบการใช้งาน (Syntax)

พารามิเตอร์ (Parameters)

ชื่อ
ประเภท
คำอธิบาย

name

string

ชื่ออาวุธ

ค่าที่ส่งคืน (Returns)

ประเภท
คำอธิบาย

number

ดัชนีสี (default: 0)


xPlayer.setWeaponTint

ตั้งสีให้กับอาวุธ

รูปแบบการใช้งาน (Syntax)

พารามิเตอร์ (Parameters)

ชื่อ
ประเภท
คำอธิบาย

name

string

ชื่ออาวุธ

tintIndex

number

ดัชนีสี (0-7)

ค่าที่ส่งคืน (Returns)

ประเภท
คำอธิบาย

boolean

true ถ้าสำเร็จ, false ถ้าสีไม่ถูกต้อง

ตัวอย่างการใช้งาน (Example)

circle-check

สรุปฟังก์ชันใน Weapons

ฟังก์ชันต่อไปนี้เป็น method บน xPlayer

Function
Description

addWeapon(name, ammo, reason)

เพิ่มอาวุธให้ผู้เล่น

addWeaponSet(weapon, reason)

เพิ่มอาวุธแบบชุด (ammo/components/tint)

removeWeapon(name, reason)

ลบอาวุธรายชิ้น

removeWeapons(weapons, reason)

ลบอาวุธหลายชิ้น

hasWeapon(name)

ตรวจว่ามีอาวุธหรือไม่

getWeapon(name)

อ่านข้อมูลอาวุธรายชิ้น

getLoadout(minimal)

อ่านอาวุธทั้งหมด

clearLoadout(reason)

ลบอาวุธทั้งหมด

addWeaponComponent(name, componentName)

เพิ่ม component

removeWeaponComponent(name, componentName)

ลบ component

hasWeaponComponent(name, componentName)

ตรวจ component

addWeaponAmmo(name, ammo)

เพิ่มกระสุน

removeWeaponAmmo(name, ammo)

ลดกระสุน

updateWeaponAmmo(name, ammo)

sync กระสุน (internal)

getWeaponTint(name)

อ่านสีอาวุธ

setWeaponTint(name, tintIndex)

ตั้งสีอาวุธ


circle-check
1

ทำ allowlist ของอาวุธและ component

จำกัดชนิดอาวุธ/อุปกรณ์เสริมที่อนุญาตในเซิร์ฟเวอร์ และปฏิเสธทุกค่าที่มาจาก Client ที่อยู่นอก allowlist

2

ตรวจสิทธิ์ก่อนแจกอาวุธ

การแจกอาวุธควรถูกควบคุมโดย job/grade, group หรือ permission เท่านั้น อย่าให้ผู้เล่นเรียก event แล้วได้อาวุธทันที

3

ตรวจซ้ำก่อนเพิ่ม

ใช้ xPlayer.hasWeapon() เพื่อตรวจซ้ำก่อน addWeapon/addWeaponSet

4

ระบุ reason สำหรับรายการสำคัญ

ระบุ reason เมื่อแจก/ยึดอาวุธ เพื่อช่วยตรวจสอบ log และ debug

Last updated