X3D Phone (โทรศัพท์)
โทรศัพท์มือถือฟรีสำหรับ ESX: โทรผ่าน pma-voice, SMS แชร์ตำแหน่ง, ธนาคารมือถือ, กล้องถ่ายรูปเก็บในเซิร์ฟเอง, Buzz และ Dark Chat
ซื้อ / รับฟรีตั้งค่า configการติดตั้ง
- แตกไฟล์ วางโฟลเดอร์
x3d_phoneไว้ในresources/ห้ามเปลี่ยนชื่อโฟลเดอร์ เพราะ export และ event ทุกตัวใช้ชื่อนี้ - รัน
install.sqlบนฐานข้อมูลของเซิร์ฟ (รันซ้ำได้ ข้อมูลเดิมไม่หาย) - ถ้าเซิร์ฟยังไม่มีไอเทม
phoneให้รันoptional/phone_item.sql(ถ้าใช้ ox_inventory ให้เพิ่มในox_inventory/data/items.luaแทน มีตัวอย่างอยู่ในไฟล์นั้น) - ถ้าเซิร์ฟยังไม่มี
screenshot-basicให้ย้ายoptional/screenshot-basic/ออกไปไว้ในresources/(ไม่ลงก็ได้ แค่ใช้กล้องไม่ได้) - เพิ่มใน
server.cfgตามลำดับนี้:
ensure oxmysql
ensure es_extended
ensure pma-voice
ensure screenshot-basic
ensure x3d_phone
ผู้เล่นเปิดโทรศัพท์ด้วย F1, คำสั่ง /openphone หรือกดใช้ไอเทม phone ระหว่างเปิดโทรศัพท์ กด Alt เพื่อสลับไปบังคับตัวละคร แล้วกดอีกครั้งเพื่อกลับมาใช้เมาส์
ต้องมี
| resource | จำเป็นไหม | ใช้ทำอะไร |
|---|---|---|
es_extended |
ไม่บังคับ | ESX Legacy ถ้าไม่มีจะรันแบบ standalone ซึ่งต้องต่อบัญชีธนาคารและระบบบิลเองที่ addons/ (ดู Config.Framework) |
oxmysql |
จำเป็น | ฐานข้อมูล |
pma-voice |
ไม่บังคับ | เสียงตอนโทร ถ้าไม่มี สายยังต่อติดแต่ไม่มีเสียง |
screenshot-basic |
ไม่บังคับ | กล้องถ่ายรูป มีแนบมาให้ใน optional/ |
chat (ของ FiveM) |
ไม่บังคับ | การ์ดโพสต์ในแชท |
ไม่ต้องสมัครเว็บฝากรูป ไม่ต้องใช้ API key และไม่ต้องลงโปรแกรมอื่นเพิ่ม
ตั้งค่าทั้งหมด: config/config.lua
ทั่วไป
| ค่า | ค่าเริ่มต้น | ความหมาย |
|---|---|---|
Config.Locale |
'th' |
ภาษาในโทรศัพท์และข้อความแจ้งเตือน: 'th' หรือ 'en' |
Config.Framework |
'auto' |
'auto' (มี ESX ใช้ ESX ไม่มีเป็น standalone) | 'esx' | 'standalone' |
Config.Debug |
false |
true = พิมพ์ log ลง console ของเซิร์ฟ |
Config.OpenKey |
'F1' |
ปุ่มเปิดโทรศัพท์ ผู้เล่นเปลี่ยนเองได้ใน Settings > Key Bindings > FiveM (ค่านี้มีผลกับผู้เล่นที่เข้าเซิร์ฟครั้งแรกเท่านั้น) |
Config.DefaultContacts |
{} |
รายชื่อที่ใส่ให้ทุกเบอร์ใหม่ เช่น { phone = '911', name = 'Police' } |
ไอเทมโทรศัพท์
| ค่า | ค่าเริ่มต้น | ความหมาย |
|---|---|---|
Config.UseItem |
true |
ต้องมีไอเทมในกระเป๋าถึงจะเปิดโทรศัพท์, โทรออก, รับสาย และได้แจ้งเตือน SMS |
Config.PhoneItem |
'phone' |
ชื่อไอเทม ใช้ชื่อที่เซิร์ฟมีอยู่แล้วได้ เช่น 'iphone' |
เมื่อเปิด UseItem:
- ไม่มีไอเทม = เปิดโทรศัพท์ไม่ได้ ทุก callback ฝั่งเซิร์ฟเวอร์ปฏิเสธ (ยิง event เองก็ไม่ผ่าน)
- คนที่ไม่มีไอเทมจะไม่ได้รับสาย ฝั่งคนโทรเห็นว่าติดต่อไม่ได้ และระบบบันทึกเป็นสายที่ไม่ได้รับ
- SMS ยังเก็บไว้ให้ แต่จะไม่เด้งแจ้งเตือนจนกว่าจะมีไอเทม
- ถ้าไอเทมหายระหว่างเปิดอยู่ (ทิ้ง / โดนยึด) โทรศัพท์จะปิดและตัดสายทันที
การโทร
| ค่า | ค่าเริ่มต้น | ความหมาย |
|---|---|---|
Config.UseVoice |
true |
ใช้ pma-voice เป็นเสียงตอนโทร |
Config.CallChannelStart |
1000 |
เลขช่องเสียงของ pma-voice ที่เริ่มใช้สำหรับการโทร เปลี่ยนเฉพาะเมื่อชนกับสคริปต์อื่น |
Config.CallTimeout |
30 |
กี่วินาทีที่ไม่มีคนรับแล้วตัดสาย |
Config.Ringtones |
5 เสียง | เสียงเรียกเข้า แต่ละตัวชี้ไปที่เสียงในเกม GTA V |
Config.NotificationSounds |
3 เสียง | เสียงแจ้งเตือนข้อความ |
Config.RingtonePreviewMs |
3000 |
ความยาวเสียงตอนพิมพ์ /testringtone และ /testdialtone |
Config.Ringtones,Config.NotificationSoundsและConfig.Wallpapersเป็นรายการที่เซิร์ฟเวอร์ใช้ตรวจค่าที่ผู้เล่นเลือก ถ้าจะลบตัวเลือก ให้ลบจาก config ได้เลย แต่ถ้าจะเพิ่มตัวเลือกใหม่ ต้องแก้หน้าเว็บของโทรศัพท์ด้วย
ข้อความ
พิมพ์ emoji ได้ทุกช่อง (SMS, Buzz, Dark Chat) มีแผงเลือก emoji ครบทุกตัว แบ่งหมวดและค้นหาได้ ความยาวข้อความนับตามตัวอักษรจริง ภาษาไทยและ emoji จึงไม่ถูกนับเกิน
| ค่า | ค่าเริ่มต้น | ความหมาย |
|---|---|---|
Config.MaxMessageLength |
500 |
ความยาวสูงสุดของ SMS และข้อความ Dark Chat |
Buzz และสกินการ์ดโพสต์
| ค่า | ค่าเริ่มต้น | ความหมาย |
|---|---|---|
Config.Buzz.ToChat |
true |
โพสต์ใหม่เด้งขึ้นในแชทเกมของทุกคน |
Config.Buzz.Themes |
ทั้ง 5 แบบ | สกินที่เปิดให้ใช้: default, halloween, christmas, songkran, night |
Config.Buzz.DefaultTheme |
'default' |
สกินของคนที่ยังไม่ได้เลือก |
Config.Buzz.PlayerTheme |
true |
true = ผู้เล่นเลือกสกินเองในแอปตั้งค่า · false = ทุกคนใช้ DefaultTheme |
ตัวอย่าง: ล็อกทั้งเซิร์ฟเป็นฮาโลวีนช่วงเทศกาล:
Config.Buzz = {
ToChat = true,
Themes = { 'halloween' },
DefaultTheme = 'halloween',
PlayerTheme = false,
}
การ์ดโพสต์ใช้ chat มาตรฐานของ FiveM โดย x3d_phone โหลดสไตล์ของตัวเองเข้าไปผ่าน chat_theme แบบไม่ทับธีมแชทที่เซิร์ฟใช้อยู่ ข้อความในโพสต์ถูก escape ทุกครั้ง ผู้เล่นจึงแทรก HTML ลงในแชทไม่ได้
เบอร์หน่วยงาน (ตำรวจ / หมอ / ช่าง) และสคริปต์อาชีพ
| ค่า | ค่าเริ่มต้น | ความหมาย |
|---|---|---|
Config.Dispatch.Numbers |
police, ambulance, mechanic | เบอร์หน่วยงาน: เบอร์ = { label = 'ชื่อที่แสดง', jobs = { 'อาชีพ' }, coords = true } |
Config.Dispatch.OnDutyOnly |
false |
true = ส่งถึงเฉพาะคนที่เข้าเวรอยู่ (job.onDuty ของ ESX Legacy) |
- เบอร์หน่วยงานขึ้นเป็นรายชื่อพิเศษในแอปรายชื่อของทุกคน แก้ไขและลบไม่ได้
- ส่ง SMS เข้าเบอร์
police= ทุกคนที่มีอาชีพในjobs(ออนไลน์และมีโทรศัพท์) ได้รับข้อความ[ตำรวจ] ...จากเบอร์ของผู้ส่งพร้อมพิกัด แตะพิกัดเพื่อปักหมุด GPS แล้วตอบกลับหาผู้ส่งได้ในแชทนั้นเลย - พิกัดมาจากตำแหน่งตัวละครฝั่งเซิร์ฟเวอร์ ปลอมไม่ได้ และส่งเข้าเบอร์หน่วยงานเดียวกันได้ 1 ครั้งทุก 20 วินาที
- ถ้าไม่มีเจ้าหน้าที่ออนไลน์ ผู้ส่งจะได้แจ้งเตือน
เชื่อมกับสคริปต์อาชีพ: เบอร์ police, ambulance และ mechanic มีอยู่ใน config แล้ว สคริปต์อาชีพของคุณเพิ่มหรือลบเบอร์เองได้ด้วย event เหล่านี้
| event | ทำอะไร |
|---|---|
TriggerEvent('x3d_phone:registerNumber', number, label, isDispatch, hasCoords) (server) |
เพิ่มเบอร์หน่วยงานจากสคริปต์อาชีพ (ถ้ามีเบอร์นี้แล้วจะไม่ทับ) |
TriggerEvent('x3d_phone:removeNumber', number) (server) |
ลบเบอร์ที่ลงทะเบียนไว้ (เบอร์ใน config ลบไม่ได้) |
TriggerServerEvent('x3d_phone:send', number, message, anonymous) |
สคริปต์ที่แจ้งตำรวจอัตโนมัติ (เช่น ระบบปล้น) ส่งข้อความเข้าเบอร์หน่วยงาน ถ้า anonymous = true จะขึ้นเป็นข้อความจากเบอร์หน่วยงานแทนเบอร์ผู้เล่น |
สคริปต์อาชีพที่เรียก event ชื่อเดิมของ
esx_phone(esx_phone:*) จะไม่ทำงานกับ x3d_phone ต้องเปลี่ยนไปเรียก event ข้างบน
แจ้งเหตุ (แอป Dispatch)
เจ้าหน้าที่ (คนที่มีอาชีพใน jobs) จะเห็นแอป แจ้งเหตุ ในโทรศัพท์ ทุกเคสมีหัวข้อ ข้อความ ระยะทาง เวลา และเบอร์ผู้แจ้ง พร้อมจุดกะพริบบนแผนที่ แจ้งเตือน และเสียง
- รับเคส → ปักหมุด GPS ให้ ผู้แจ้งได้แจ้งเตือนว่า "หมอ X รับเคสแล้ว กำลังไปหาคุณ" และเจ้าหน้าที่คนอื่นเห็นว่ามีคนรับแล้ว
- ปิดเคส → เคสหายจากทุกเครื่องและแผนที่ เคสที่ไม่มีใครปิดจะหายเองหลัง
AlertSeconds - เคสเกิดจาก SMS ถึงเบอร์หน่วยงาน หรือจากสคริปต์อื่นเรียกหน่วยงาน
| ค่า | ค่าเริ่มต้น | ความหมาย |
|---|---|---|
Config.Dispatch.AlertSeconds |
600 |
เคสค้างในแอปกี่วินาที |
Config.Dispatch.CallNeedsPhone |
false |
คนที่กดเรียกต้องมีไอเทมโทรศัพท์ไหม (ปุ่มเรียกหมอตอนล้มไม่ควรต้องมี) |
Numbers.<เบอร์>.request |
หัวข้อเคสเวลามีคนกดเรียก เช่น 'มีผู้บาดเจ็บ ต้องการหมอ' |
|
Numbers.<เบอร์>.blip |
{ sprite, color } ของจุดบนแผนที่เจ้าหน้าที่ |
ให้สคริปต์อื่นเรียกหน่วยงาน (เช่นปุ่ม "เรียกหมอ" ตอนล้ม):
-- client
exports['x3d_phone']:RequestService('ambulance', 'หมดสติกลางถนน')
-- หรือ
TriggerServerEvent('x3d_phone:requestService', 'ambulance', 'หมดสติกลางถนน')
-- server (กำหนดหัวข้อ/พิกัดเองได้)
exports['x3d_phone']:SendAlert('police', { source = src, title = 'ปล้นธนาคาร', message = 'Pacific Standard' })
exports['x3d_phone']:SendAlert('police', { coords = vector3(x, y, z), title = 'สัญญาณกันขโมยดัง' })
พิกัดของ RequestService อ่านจากตัวละครฝั่งเซิร์ฟเวอร์ ปลอมไม่ได้ และเรียกหน่วยงานเดียวกันได้ 1 ครั้งทุก 60 วินาที
แอปบิล
| ค่า | ค่าเริ่มต้น | ความหมาย |
|---|---|---|
Config.Billing.Enabled |
true |
แสดงแอปบิล |
Config.Billing.AllowPersonal |
true |
ออกบิลส่วนตัวได้ เงินเข้าบัญชีธนาคารของคนออกบิล (ออฟไลน์อยู่ก็เข้า) |
Config.Billing.AllowDecline |
true |
ผู้รับกดปฏิเสธบิลได้ ถ้า false ต้องจ่ายอย่างเดียว (คนออกบิลยังยกเลิกได้) |
Config.Billing.MinAmount / MaxAmount |
1 / 1000000 |
ยอดบิลต่ำสุด / สูงสุด |
Config.Billing.MaxOpenPerTarget |
10 |
บิลค้างสูงสุดจากคนออกบิลหนึ่งคนถึงเบอร์เดียว (กันสแปม) |
Config.Billing.PayFrom |
'bank' |
จ่ายจากบัญชีไหนของผู้จ่าย: 'bank' หรือ 'money' |
Config.Billing.UsersTable |
'users' |
ตารางผู้เล่นของ ESX ใช้ตอนเงินเข้าบัญชีคนออกบิลที่ออฟไลน์ |
Config.Billing.Jobs |
police, ambulance, mechanic, taxi | อาชีพที่ออกบิลในนามหน่วยงานได้: ชื่ออาชีพ = { label = 'ชื่อที่แสดง', minGrade = 0, locked = true } · locked = true = คนออกบิลยกเลิกไม่ได้ ผู้รับปฏิเสธไม่ได้ ต้องจ่าย หรือแอดมินยกเลิกจากแผง x3d_adminpanel (ค่าเริ่มต้น: ตำรวจ หมอ) |
Config.Billing.Admin |
{ enabled = true, label = 'แอดมิน', groups = { 'admin', 'superadmin' }, locked = true } |
แอดมินออกบิลในนาม "แอดมิน" ได้ (เช่น ค่าปรับ) เงินส่งไป Billing.PayAdmin ที่ท้าย addons/billing/server.lua ค่าเริ่มต้นไม่เข้าบัญชีใคร |
บิลในนามหน่วยงาน: ค่าเริ่มต้นไม่มีบัญชีหน่วยงานให้ (Billing.PaySociety คืน false) ผู้จ่ายจึงไม่ถูกหักเงิน และบิลค้างอยู่เหมือนเดิม ต่อบัญชีหน่วยงานของเซิร์ฟ (เช่น esx_addonaccount) ที่ addons/billing/server.lua ก่อนเปิดใช้บิลหน่วยงาน
- ผู้รับได้แจ้งเตือนทันทีถ้าออนไลน์อยู่ ถ้าออฟไลน์ บิลรอในแอปจนกว่าจะเข้าเกม
- จ่ายบิลได้ครั้งเดียว กดรัว ๆ ก็ไม่หักเงินซ้ำ
- บิลที่ล็อกไว้ ยกเลิกได้ที่แผง x3d_adminpanel > โทรศัพท์ > บิลค้างจ่าย เท่านั้น (ค้นหาด้วยเบอร์หรือรายละเอียด กดค้างเพื่อยกเลิก มีประวัติการยกเลิก)
- ออกบิลได้ 1 ครั้งทุก 5 วินาที รายละเอียดบิลผ่าน
FilterMessageเหมือนข้อความอื่น
ให้สคริปต์อื่นออกบิล (server):
local ok, idOrError = exports['x3d_phone']:CreateBill(source, '48213', 500, 'ค่าปรับจอดในที่ห้าม', 'police')
-- issuer: 'personal', ชื่ออาชีพใน Config.Billing.Jobs (ผู้ออกบิลต้องมีอาชีพนั้นจริง) หรือ 'admin' (ต้องเป็นแอดมินตาม Config.Billing.Admin.groups)
รูปภาพ: กล้อง อัปโหลด และลิงก์จากภายนอก
| ค่า | ค่าเริ่มต้น | ความหมาย |
|---|---|---|
Config.Uploads.Enabled |
true |
เปิดกล้องและการอัปโหลดวอลเปเปอร์จากคอมพิวเตอร์ |
Config.Uploads.BaseUrl |
'' |
เว้นว่างได้ ดูคำอธิบายด้านล่าง |
Config.Uploads.MaxBytes |
3 MB | ขนาดไฟล์สูงสุดต่อรูป (เพดานในตัวคือ 8 MB) |
Config.Uploads.PerPlayerPerHour |
30 |
ผู้เล่นหนึ่งคนอัปโหลดได้กี่รูปต่อชั่วโมง |
Config.Uploads.Keep |
1000 |
เก็บรูปล่าสุดกี่รูป เกินแล้ววนทับรูปเก่าที่สุด ลิงก์ของรูปที่ถูกทับจะเปิดไม่ได้ |
Config.Uploads.Quality |
0.85 |
คุณภาพ JPG ตอนถ่ายรูป (0–1) |
Config.ImageHosts |
imgur, ibb | เว็บภายนอกที่ผู้เล่นวางลิงก์รูปได้ (ในแชท โพสต์ และวอลเปเปอร์) ใส่ {} เพื่อปิดลิงก์ภายนอก |
Config.AnyImageHost |
false |
true = รับลิงก์ https จากทุกเว็บ |
รูปเก็บไว้ที่ไหน: ที่ x3d_phone/data/uploads/ ในเครื่องเซิร์ฟ แล้วเปิดผ่านพอร์ตเกมของ FXServer เอง (30120) ไม่มีบริการภายนอก ประมาณการพื้นที่สูงสุดคือ Keep × MaxBytes (ค่าเริ่มต้นประมาณ 3 GB แต่รูปจากกล้องปกติไม่เกิน 400 KB)
BaseUrl: ถ้าเว้นว่าง ลิงก์รูปถูกเก็บเป็น /i/<token>.jpg แล้วเครื่องของผู้เล่นแต่ละคนเติมที่อยู่เซิร์ฟที่ตัวเองต่ออยู่ให้เอง ใช้ได้ทันทีโดยไม่ต้องตั้งอะไร ให้ตั้ง BaseUrl เฉพาะเมื่อ:
- มีโดเมน https ชี้มาที่เซิร์ฟ (เช่นผ่าน reverse proxy) และอยากให้รูปที่ถ่ายขึ้นในการ์ดโพสต์ในแชทด้วย
- ตัวอย่าง:
BaseUrl = 'https://img.myserver.com/x3d_phone'
ทำไมไม่ใส่ cdn.discordapp.com เป็นค่าเริ่มต้น: ลิงก์ไฟล์ของ Discord หมดอายุภายในประมาณ 24 ชั่วโมงถ้าเปิดจากนอก Discord รูปจะหายไปในวันถัดไป
⚠️
AnyImageHost = true: เจ้าของเว็บรูปจะเห็น IP ของผู้เล่นทุกคนที่เปิดดูรูปนั้น และคุณคุมไม่ได้ว่ารูปที่ขึ้นคืออะไร แนะนำให้ใส่เฉพาะเว็บที่ไว้ใจในImageHostsแทน
ธนาคารมือถือ
| ค่า | ค่าเริ่มต้น | ความหมาย |
|---|---|---|
Config.Banking.Enabled |
true |
แสดงแอปธนาคาร |
Config.Banking.MinTransfer |
1 |
ยอดโอนต่ำสุด |
Config.Banking.MaxTransfer |
1000000 |
ยอดโอนสูงสุดต่อครั้ง |
โอนได้เฉพาะเข้าเบอร์ของผู้เล่นที่ออนไลน์อยู่ ใช้บัญชี bank ของ ESX และเก็บประวัติในตาราง x3d_phone_bank_history ระบบกันกดโอนซ้อน (ขณะกำลังโอนอยู่จะโอนรายการใหม่ไม่ได้) และโอนได้ 1 ครั้งทุก 3 วินาที
ส่งสำเนาเข้า Discord
ใส่ใน server.cfg ลิงก์ webhook อยู่ฝั่งเซิร์ฟเวอร์เท่านั้น ผู้เล่นไม่เห็น
set x3d_phone_upload_webhook "https://discord.com/api/webhooks/..."
set x3d_phone_log_webhook "https://discord.com/api/webhooks/..."
| convar | ส่งอะไร |
|---|---|
x3d_phone_upload_webhook |
สำเนาทุกรูปที่ผู้เล่นถ่าย/อัปโหลด พร้อมชื่อ, server id, identifier และประเภท (messages / twitter / wallpaper) |
x3d_phone_log_webhook |
log SMS, โพสต์, Dark Chat และการโอนเงิน (ไม่บังคับ) |
- ปิดการ @mention ทุกข้อความ ผู้เล่นที่ตั้งชื่อเป็น
@everyoneจะไม่ ping ห้อง - ส่งเป็นคิว 1 รายการทุก 1.5 วินาที เพื่อไม่ให้โดน Discord จำกัดความถี่ ถ้าค้างเกิน 20 รายการจะข้ามรายการใหม่
- รูปจริงยังเก็บในเซิร์ฟ ลิงก์ในเกมจึงไม่หมดอายุ
- รับเฉพาะลิงก์ที่หน้าตาเป็น webhook ของ Discord จริง
ปรับให้เข้ากับเซิร์ฟ: addons/
ไฟล์ในนี้แก้ได้อิสระ แต่ละไฟล์ทำงานได้ทันทีด้วยค่าเริ่มต้น
| ไฟล์ | ฟังก์ชัน | ค่าเริ่มต้น |
|---|---|---|
addons/notify/client.lua |
Notify(message, kind) |
esx_notify → ox_lib → ESX.ShowNotification |
addons/voice/client.lua |
Voice.Enabled(), Voice.SetCallChannel(ch), Voice.SetMuted(bool) |
pma-voice (มีตัวอย่าง mumble-voip) |
addons/upload/client.lua |
Upload.Screenshot(kind, cb), Upload.Target(kind, cb) |
screenshot-basic → เก็บในเซิร์ฟ |
addons/framework/server.lua / client.lua |
ตัวเชื่อมเฟรมเวิร์ก (Framework.*) เหมือนกันทุกสินค้า X3D |
ESX ถ้ามี ไม่มีเป็น standalone |
addons/billing/server.lua |
Billing.Charge, Billing.Refund, Billing.PaySociety, Billing.PayPerson, Billing.PayAdmin |
หัก/คืนเงินและเข้าบัญชีธนาคารคนออกบิลผ่าน Framework.* · PaySociety คืน false ต้องต่อเอง |
addons/banking/server.lua |
Banking.GetBalances, Banking.Transfer, Banking.History |
บัญชี bank ของ ESX |
addons/filter/server.lua |
FilterMessage(src, kind, message) |
บล็อกคำใน Config.BannedWords |
addons/log/server.lua |
PhoneLog(src, kind, data), UploadCopy(p, file) |
Discord webhook จาก convar |
addons/locale/shared.lua |
T(th, en) |
ตาม Config.Locale |
ตัวอย่าง: ต่อกับระบบธนาคารของตัวเอง ให้แก้ Banking.Transfer ให้เรียกระบบนั้นแล้วคืนค่า true หรือ false, 'ข้อความ error' เซิร์ฟเวอร์ตรวจจำนวนเงิน ผู้รับ และความถี่ให้ก่อนแล้ว
ตัวอย่าง: ใส่คำต้องห้าม:
Config.BannedWords = { 'คำหยาบ1', 'badword' }
Exports (client)
exports['x3d_phone']:OpenPhone()
exports['x3d_phone']:ClosePhone()
exports['x3d_phone']:IsPhoneOpen() --> boolean
exports['x3d_phone']:GetPhoneNumber() --> string | nil
exports['x3d_phone']:IsInCall() --> boolean
exports['x3d_phone']:GetCallData() --> { phoneNumber, displayName, isOutgoing } | nil
คำสั่ง
| คำสั่ง | ทำอะไร |
|---|---|
/openphone |
เปิด/ปิดโทรศัพท์ |
/testringtone |
ฟังเสียงเรียกเข้าที่เลือกไว้ |
/testnotification |
ฟังเสียงแจ้งเตือนที่เลือกไว้ |
/testdialtone |
ฟังเสียงรอสายตอนโทรออก |
ปัญหาที่พบบ่อย
| อาการ | สาเหตุ / วิธีแก้ |
|---|---|
| กด F1 แล้วขึ้นว่า "คุณไม่มีโทรศัพท์" | Config.UseItem = true แต่ไม่มีไอเทมในกระเป๋า ให้ไอเทม phone หรือตั้ง UseItem = false |
| ไม่มีปุ่มกล้อง | ยังไม่ได้ ensure screenshot-basic หรือ Config.Uploads.Enabled = false |
ถ่ายรูปแล้วขึ้น upload_failed |
เช็ค console ถ้ามีข้อความ cannot write data/uploads/ ให้สร้างโฟลเดอร์ data/uploads/ ใน resource |
| โทรติดแต่ไม่มีเสียง | ยังไม่ได้ลง pma-voice หรือ ensure หลัง x3d_phone |
| โพสต์ไม่ขึ้นในแชท | Config.Buzz.ToChat = false หรือเซิร์ฟไม่ได้ใช้ resource chat ของ FiveM |
| วางลิงก์รูปแล้วส่งไม่ได้ | เว็บนั้นไม่ได้อยู่ใน Config.ImageHosts หรือลิงก์ไม่ได้ขึ้นต้นด้วย https |