# ตั้งค่า CXG-GTFAT

แก้ไข `config.lua` แล้วรีสตาร์ต `CXG_GTFAT` ค่าน้ำหนักใช้หน่วยกิโลกรัมและต้องตรงกับช่วงขั้นที่กำหนด

## ภาษาและน้ำหนัก

```lua
Config.Locale = 'th'

Config.Weight = {
    minKg = 50,
    maxKg = 180,
    defaultKg = 75,
    fatThresholdKg = 100,
    stepKg = 0.5,
}
```

ภาษาที่ใช้ได้: en, es, `pt-BR`, fr, de, it, pl, ru, tr, th, ar, sv และ br ภาษา br ยังคงข้อความโปรตุเกสบราซิลแบบเก่า แนะนำให้ใช้ `pt-BR` สำหรับการเลือกทั่วไป

ช่วงเริ่มต้นคือ 50–180 กก. ค่าเริ่มต้นคือ 75 กก. และเปิด Fat ตั้งแต่ 100 กก. รวมค่านั้นด้วย `minKg` ต้องไม่น้อยกว่าศูนย์ `stepKg` ต้องเป็นค่าบวก และต้องเป็นไปตาม `minKg` <= `defaultKg` <= `maxKg` เกณฑ์ต้องมากกว่าค่าต่ำสุดและไม่เกินค่าสูงสุด ค่าเริ่มต้น เกณฑ์ และค่าสูงสุดต้องอยู่ในช่วงขั้นที่เริ่มจาก `minKg`; เช่น เมื่อค่าต่ำสุดคือ 50 กก. และขั้นคือ 0.5 กก. ค่า 75 และ 100 กก. ถือว่าใช้ได้ หากการตั้งค่าไม่ถูกต้อง ระบบปฏิบัติการเกี่ยวกับน้ำหนักจะถูกปิด

LB แปลงเฉพาะค่าที่แสดง เซิร์ฟเวอร์จัดเก็บและตรวจสอบค่าเป็น kg

## คำสั่งและสิทธิ์

```lua
Config.Commands = {
    enabled = true,
    access = 'ace',
    ace = 'cxg_gtfat.use',
    job = nil,
    group = nil,
    custom = nil,
    open = 'fatweight',
    control = 'fatdecal',
}
```

เมื่อเปิดใช้ ระบบจะลงทะเบียนคำสั่งที่กำหนดไว้ คำสั่งเปิดเริ่มต้นคือ `/fatweight` ส่วนคำสั่งควบคุมคือ `/fatdecal` คำสั่งควบคุมรับ on, off, status หรือ ui โดย on จะตั้งน้ำหนักให้ถึงหรือสูงกว่าเกณฑ์ Fat ส่วน off จะตั้งให้ต่ำกว่าเกณฑ์ไม่เกินหนึ่งขั้น คำสั่งเหล่านี้ไม่ใช่สวิตช์รูปลักษณ์แยกต่างหาก

| access | การทำงาน |
| --- | --- |
| ace | ต้องมีสิทธิ์ `ACE` ที่ระบุใน ace เป็นค่าเริ่มต้น |
| everyone | ผู้เล่นทุกคนที่ผ่านการตรวจสอบจากเซิร์ฟเวอร์สามารถใช้ได้ |
| jobs, groups, custom | ต้องเขียนนโยบายใน `bridge/server.lua`; ไม่มีการเชื่อมกับ framework อัตโนมัติ |

ให้สิทธิ์ `ACE` แก่ผู้ดูแลระบบ:

```cfg
add_ace group.admin cxg_gtfat.use allow
```

เมนูหรือ target ขอเปิดหน้าจอได้ แต่เซิร์ฟเวอร์ยังตรวจสอบสิทธิ์อยู่ การปิดการลงทะเบียนคำสั่งไม่ได้ขัดขวาง resource ฝั่งเซิร์ฟเวอร์อื่นจากการเรียก export `OpenWeightUI`

## สถานี

หลังติดตั้งจะไม่มีเครื่องชั่งจริงเปิดใช้งาน เพิ่มรายการสถานีลงใน `Config.Stations` ใช้คีย์ไม่ซ้ำ ใส่พิกัดจริง แล้วเปิดใช้งาน

```lua
Config.Interaction = {
    key = 'E',
    streamDistance = 60.0,
}

Config.Stations = {
    gimnasio = {
        enabled = true,
        coords = { x = 0.0, y = 0.0, z = 0.0 },
        heading = 0.0,
        distance = 1.8,
        bucket = 0,
        access = 'ace',
        ace = 'cxg_gtfat.use',
        job = nil,
        group = nil,
        custom = nil,
        model = false,
        spawnProp = false,
    },
}
```

แทนที่พิกัดตัวอย่าง ระยะ `distance` รองรับสูงสุด 5 เมตร `bucket` ต้องตรงกับ routing bucket ของสถานี ซึ่งปกติคือ 0 แต่ละสถานีมีนโยบาย `access` ของตัวเอง

| รูปแบบ | การตั้งค่า | ผลลัพธ์ |
| --- | --- | --- |
| จุดที่ไม่มี object | model = false, `spawnProp` = false | จุดโต้ตอบที่มองไม่เห็นตามพิกัดที่ตั้งไว้ |
| object ที่มีอยู่แล้ว | model = 'ชื่อโมเดล', `spawnProp` = false | ต้องพบโมเดลนั้นภายใน 1 เมตรจากพิกัด resource จะไม่ลบ object |
| object ที่สร้างในเครื่อง | model = 'ชื่อโมเดล', `spawnProp` = true | สร้าง object ในเครื่องที่ตรึงไว้เมื่ออยู่ใกล้ และลบเมื่อเดินออกไปหรือหยุด resource |

จุดโต้ตอบไม่วาง object ลงบนพื้นโดยอัตโนมัติ กำหนด `coords` เป็นจุดกำเนิดจริงของ object และ `heading` เป็นทิศทาง ข้อความแจ้งเตือนใช้ E เป็นค่าเริ่มต้น ผู้เล่นเปลี่ยนปุ่ม “ใช้เครื่องชั่ง” ได้ที่ FiveM Settings > Key Bindings

adapter เริ่มต้นรองรับ ace และ everyone รูปแบบอื่นต้องเขียนการทำงานฝั่งเซิร์ฟเวอร์ การแสดงข้อความหรือ prop ไม่ได้ให้สิทธิ์ เซิร์ฟเวอร์จะตรวจสอบสิทธิ์และระยะใกล้อีกครั้ง

## การบันทึกแยกตามตัวละคร

```lua
Config.Persistence = { framework = 'none' }
```

| โหมด | การใช้งาน |
| --- | --- |
| none | ค่าเริ่มต้น เก็บเฉพาะเซสชัน; เมื่อเชื่อมต่อใหม่หรือรีสตาร์ตจะใช้ `defaultKg` |
| qb | ค้นหาตัวละครผ่าน qb-core และ citizenid |
| esx | ค้นหาตัวละครผ่าน es_extended และ identifier |
| custom | ใช้ `GTFatCustomCharacterId(source)` ใน `identity.lua` |

resource ไม่ตรวจจับ Qbox อัตโนมัติ หากมีหลายตัวละคร ให้กำหนด identifier ที่คงที่และไม่ซ้ำสำหรับแต่ละตัวละครผ่านตัวเลือกที่รองรับหรือ adapter ของคุณเอง อย่าใช้ identifier ร่วมกันระหว่างตัวละครและอย่ารับ identity จากไคลเอนต์ ในโหมด custom ให้คืนค่า nil จนกว่าตัวละครจะโหลดเสร็จ

น้ำหนักที่บันทึกถาวรจะแยกจากเสื้อผ้าและชุด รักษาชื่อ resource เป็น `CXG_GTFAT` และสำรองข้อมูล `KVP` ของเซิร์ฟเวอร์ร่วมกับข้อมูลถาวรอื่น ๆ
