[{"data":1,"prerenderedAt":82},["ShallowReactive",2],{"site":3,"config-slug-site":15,"config-product-th-x3d-replay":21,"config-public-x3d-replay":81},{"site":4,"contact":10,"seo":13,"payment":14},{"name":5,"host":6,"default_locale":7,"locales":8},"X3D Developer","fivem.x3d-developer.com","th",[7,9],"en",{"discord_invite":11,"email":12,"line":12},"https:\u002F\u002Fdiscord.gg\u002FNA5kPVynFv","",{"google_site_verification":12,"bing_site_verification":12},{"bank_name":12,"account_name":12,"account_no":12,"promptpay_id":12},{"site":16,"contact":18,"seo":19,"payment":20},{"name":5,"host":6,"default_locale":7,"locales":17},[7,9],{"discord_invite":11,"email":12,"line":12},{"google_site_verification":12,"bing_site_verification":12},{"bank_name":12,"account_name":12,"account_no":12,"promptpay_id":12},{"id":22,"slug":23,"name":24,"summary":25,"price_thb":26,"license_mode":27,"cover_key":28,"cover_url":29,"category_slugs":30,"tags":33,"latest_version":53,"latest_released_at":54,"published_at":55,"has_docs":56,"config":57,"rent_price_satang":58,"description_md":59,"docs_md":60,"seo_title":61,"seo_description":62,"media":63,"versions":78},"6bdadea7-4316-4a4a-a38e-87c5e841077d","x3d-replay","X3D Replay (ดูย้อนหลัง)","BETA ราคาพิเศษ · บันทึกผู้เล่นทุกคนอัตโนมัติ ดูย้อนหลังในเกมได้ทุกวินาที กล้อง 4 แบบ ไทม์ไลน์ยิง\u002Fตาย ปุ่มที่กด สคริปต์ที่ใช้ จับ macro",59900,"shop_license","public\u002Fproducts\u002Fx3d-replay\u002Fcover.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-replay\u002Fcover.jpg",[31,32],"anticheat","admin",[34,35,36,37,38,39,40,41,42,43,44,45,46,47,31,48,49,50,51,52],"esx","ESX Legacy","replay","fivem replay script","replay system","รีเพลย์","ดูย้อนหลัง","ย้อนดูผู้เล่น","บันทึกผู้เล่น","เคสรีพอร์ต","จับโกง","จับมาโคร","macro detection","กันโปร","แอดมิน","admin tool","demo recorder","spectate","BETA","1.0.2","2026-10-14T06:14:23.677549Z","2026-10-14T06:14:23.700289Z",true,"owners",12000,"# ดูย้อนหลังผู้เล่นทุกคน ทุกวินาที — ในเกมจริง ไม่ต้องรอคลิป\n\nระบบบันทึกผู้เล่นทุกคนตั้งแต่เข้าเมืองจนออกโดยอัตโนมัติ แอดมินเปิดดูย้อนหลังได้ในเกม ตัวละครจำลองเดิน ยิง ขึ้นรถ ใส่ชุดเหมือนตอนนั้น เห็นทั้งปุ่มที่กดและสคริปต์ที่ใช้ ตัดสินเคสรีพอร์ตจากของจริง ไม่ต้องรอคลิปจากผู้เล่น\n\n---\n\n## ฟีเจอร์\n\n- [+] บันทึกผู้เล่นทุกคนอัตโนมัติทุกเซสชัน ไม่ต้องกดอัด\n- [+] ดูย้อนหลังในเกม ตัวละครจำลองใส่ชุด หน้าตา ท่าทางเหมือนตอนนั้น\n- [+] กล้อง 4 แบบ: กล้องติดตาม \u002F มุมมองผู้เล่น \u002F กล้องอิสระ \u002F แผนที่\n- [+] ไทม์ไลน์เหตุการณ์ ยิงโดน ฆ่า ตาย กดแล้วข้ามไปจุดนั้นทันที\n- [+] ผู้เล่นรอบตัวขึ้นมาด้วย สลับดูคนไหนก็ได้ ความเร็ว 0.25x–8x\n- [+] แผงปุ่มที่กดและจังหวะคลิกยิง รู้ว่ากดอะไรตอนไหน\n- [+] เห็นคำสั่ง ปุ่มลัด และ event ของสคริปต์ที่ผู้เล่นใช้ เพิ่มบรรทัดเดียวใน fxmanifest\n- [+] จับ macro จากจังหวะกดที่สม่ำเสมอเกินคน ขึ้นป้ายในไทม์ไลน์\n- [+] เงิน ไอเทม อาชีพที่เปลี่ยน บันทึกจาก ESX ให้อัตโนมัติ\n- [+] เคสแอนตี้โกง รีพอร์ต และ macro เก็บถาวร เซสชันอื่นลบเองตามวันที่ตั้ง\n- [+] หน้ารายการ: เลือกผู้เล่น → วัน → เซสชัน ใส่เวลาเริ่มดูได้\n- [+] การ์ดยอมรับการบันทึกตอนเข้าเซิร์ฟ แก้ข้อความได้ หรือตั้งเป็นแจ้งเฉย ๆ \u002F ปิด\n\n---\n\n## ราคาพิเศษช่วง BETA — ร่วมทดสอบและพัฒนาไปด้วยกัน\n\nX3D Replay อยู่ในช่วง **BETA** เราตั้งราคาให้เข้าถึงง่าย เพื่อให้มีลูกค้าเข้ามาร่วมทดลองใช้งานบนเซิร์ฟเวอร์ที่หลากหลายมากขึ้น พร้อมช่วยแจ้งปัญหาและเสนอแนะผ่าน Discord ประสบการณ์จากการใช้งานจริงจะช่วยให้เราปรับปรุงระบบก่อนออกเวอร์ชันเต็ม\n\n## ใช้ทำอะไรได้บ้าง\n\n- **ตัดสินเคสรีพอร์ต** — ยิงตอนยอมแล้ว ฆ่าไม่มีเหตุผล ชนแล้วหนี เปิดดูเวลานั้นได้เลย\n- **เช็กโปรและ macro** — ดูปุ่มที่กดเทียบกับสิ่งที่เกิดขึ้นในเกม จังหวะคลิกที่เท่ากันผิดคน\n- **ตรวจบัคสคริปต์** — รู้ว่าผู้เล่นกดคำสั่งอะไร ส่ง event อะไร ก่อนเงินหรือไอเทมเปลี่ยน\n- **ต่อกับสคริปต์อื่น** — `exports.x3d_replay:Mark(src, 'report', {...})` ส่งเหตุการณ์เข้าไทม์ไลน์และเก็บเซสชันถาวร\n\n## ทำไมต้อง X3D\n\n- **ดูในเกมจริง** ไม่ใช่ log ตัวหนังสือ — เห็นตำแหน่ง ท่าทาง ชุด รถ ของทุกคนรอบตัว\n- **แยกโลกคนดู** ด้วย routing bucket คนดูไม่โผล่ในเมือง ไม่กระทบผู้เล่นจริง\n- **ไฟล์อยู่ในเครื่องเซิร์ฟเอง** ไม่ต้องเปิดพอร์ต ไม่ต้องฝากที่อื่น ลบเก่าเองตามวันที่ตั้ง\n- **config อ่านง่าย** คอมเมนต์ไทย\u002Fอังกฤษทุกบรรทัด เปิด\u002Fปิดแต่ละส่วนได้\n- **ใช้กับ X3D Admin Panel ได้** มีเมนูรีเพลย์ในแผงแอดมิน (ไม่บังคับ)\n- **อัปเดตต่อเนื่อง** — ซื้อครั้งเดียวได้ทุกเวอร์ชัน · ซัพพอร์ตทาง Discord\n\n## ต้องมี\n\nESX Legacy · oxmysql\n","## การติดตั้ง\n\n### 1. ฐานข้อมูล\n\nรัน `install.sql` ที่แถมมาในโฟลเดอร์ กับฐานข้อมูลเดียวกับที่ `oxmysql` ใช้\n\n```\nmysql -u \u003Cuser> -p \u003Cdatabase> \u003C install.sql\n```\n\nหรือวางทั้งไฟล์ลง HeidiSQL \u002F phpMyAdmin \u002F DBeaver แล้วรัน · รันซ้ำได้ ไม่ทับข้อมูลเดิม\n\n### 2. วางไฟล์\n\nวางโฟลเดอร์ `x3d_replay` ใน `resources\u002F` — **ห้ามเปลี่ยนชื่อโฟลเดอร์** (สคริปต์อื่นอ้างชื่อนี้ตอนใส่ inject)\n\n### 3. server.cfg\n\n`ensure` หลัง oxmysql และ es_extended และ **ก่อน** สคริปต์ที่ใส่ inject\n\n```cfg\nensure oxmysql\nensure es_extended\nensure x3d_replay\n\nset x3d_license_x3d-replay \"X3D-XXXXX-XXXXX-XXXXX-XXXXX\"\n\n# ทางเลือก: ให้สิทธิ์ดูด้วย ACE แทนกลุ่ม ESX\nadd_ace group.admin x3d_replay.admin allow\n```\n\nคีย์ใส่ใน `config\u002Fconfig.license.lua` แทน convar ก็ได้\n\n### 4. ตรวจว่าทำงาน\n\nเข้าเกมด้วยบัญชีแอดมิน พิมพ์ `\u002Freplay` ต้องเปิดหน้ารายการ และเห็นชื่อตัวเองพร้อมเซสชันที่กำลังบันทึก (จุดเขียว = ออนไลน์)\n\n### 5. อัปเดตสคริปต์\n\nไฟล์รีเพลย์อยู่ใน `x3d_replay\u002Fdata\u002F` — **ตอนอัปเดตห้ามลบโฟลเดอร์ `data`** ไม่งั้นรีเพลย์เก่าหายหมด\n\n## วิธีดู\n\n| ทำอะไร | ยังไง |\n|---|---|\n| เปิดหน้ารายการ | `\u002Freplay` → เลือกผู้เล่น → วัน → เซสชัน → ใส่เวลาเริ่ม → ดูย้อนหลัง |\n| เปิดตรง ๆ | `\u002Freplay \u003Cid เซสชัน \\| id ผู้เล่นออนไลน์ \\| ชื่อ> [นาที:วินาที]` |\n| ออก | `Esc` หรือ `\u002Freplay stop` |\n| สลับเมาส์ \u002F หมุนกล้อง | `Alt` |\n| ติดตามคนอื่น | คลิกชื่อในแผงผู้เล่นในฉาก หรือกด `1`–`9` |\n\nคนดูถูกย้ายไป routing bucket ของตัวเอง (`Config.Viewer.BucketBase` + server id) ผู้เล่นในเมืองไม่เห็น ออกแล้วกลับที่เดิม\nทุกครั้งที่เปิดดูถูกบันทึกลงตาราง `TB_X3D_REPLAY_ACCESS` (ใครดูเซสชันไหน เมื่อไร)\n\n## ตั้งค่า — `config\u002Fconfig.general.lua`\n\n| หัวข้อ | แก้อะไร |\n|---|---|\n| `Config.Record` | ความถี่บันทึก (`Hz`) · เก็บกี่วัน (`RetentionDays`) · เหตุการณ์ที่ทำให้เก็บถาวร (`KeepKinds`) |\n| `Config.Storage` | โฟลเดอร์เก็บไฟล์ (ว่าง = `data\u002F` ในสคริปต์) |\n| `Config.Client` | เปิด\u002Fปิด: การยิง · ท่าทาง · ชุด\u002Fหน้าตา · ปุ่มที่กด |\n| `Config.Actions` | เงิน\u002Fไอเทม\u002Fอาชีพจาก ESX · รับข้อมูลจาก inject · เก็บค่าที่ส่งมากับ event · ชื่อที่ไม่เก็บ · เกณฑ์ macro |\n| `Config.Detect` | ติดป้ายตีหัวด้วยอาวุธระยะประชิด · รายชื่ออาวุธระยะประชิด |\n| `Config.Viewer` | คำสั่ง · กลุ่มที่ดูได้ · รัศมีและจำนวนผู้เล่นรอบตัวที่โหลดมาด้วย · ความเร็วส่งไฟล์ |\n| `Config.Consent` | `'card'` การ์ดกดยอมรับ · `'notice'` แจ้งเฉย ๆ · `'off'` ไม่แจ้ง (แจ้งในกฎเซิร์ฟเอง) · ข้อความแก้ได้ที่ `Text` (`{days}` = จำนวนวันที่เก็บ) · เพิ่ม `Version` = ทุกคนกดใหม่ |\n| `Config.Voice` | ยังอยู่ระหว่างทดสอบ ปล่อย `Enabled = false` ไว้ |\n\n## เก็บการใช้สคริปต์อื่น (inject)\n\nใส่เป็น **บรรทัดแรก** ของแต่ละ block ใน `fxmanifest.lua` ของสคริปต์ที่อยากเก็บ ไม่ต้องแก้โค้ดเดิม ไม่ต้องใส่ dependencies\n\n```lua\nclient_scripts { '@x3d_replay\u002Finject\u002Fclient.lua', 'client\u002Fmain.lua' }\nserver_scripts { '@x3d_replay\u002Finject\u002Fserver.lua', 'server\u002Fmain.lua' }\n```\n\n- **client** — คำสั่งที่พิมพ์\u002Fกดปุ่มลัด (ขึ้นเป็น `[F9]`) · ปุ่มใน NUI · event ที่ส่งไป server · ท่าที่สคริปต์สั่งตัวผู้เล่น (ตัวละครจำลองเล่นตาม)\n- **server** — ทุก net event ที่ผู้เล่นส่งเข้าสคริปต์นั้น\n- ไม่ได้เปิด `x3d_replay` = ไม่มีผลอะไร\n\nหลังเพิ่ม inject ให้ restart `x3d_replay` ก่อน รอสักครู่ แล้วค่อย restart สคริปต์นั้น\n\n## ท่าทาง \u002F อีโมท\n\nGTA ไม่มีคำสั่งถามว่าตัวละครเล่นท่าอะไร สคริปต์อีโมทต้องบอกเอง วิธีต่อกับ dpemotes อยู่ใน `addons\u002Fhooks\u002Fclient.lua` · สคริปต์อื่นเรียก\n\n```lua\nexports.x3d_replay:Anim(dict, name, flag)\nexports.x3d_replay:AnimStop()\n```\n\nสคริปต์ที่ใส่ inject ฝั่ง client แล้วไม่ต้องเรียกเอง\n\n## จุดต่อ — `addons\u002Fhooks\u002F`\n\n| ไฟล์ | ฟังก์ชัน |\n|---|---|\n| `server.lua` | `Hooks.ShouldRecord(src)` คืน `false` = ไม่บันทึกคนนี้ · `Hooks.OnMark(src, kind, data)` ทุกเหตุการณ์ที่ลงไฟล์ (ส่งต่อ log \u002F Discord) · `Hooks.CanView(src)` (ไม่ใส่ก็ได้) คืน `true`\u002F`false` แทนการเช็กกลุ่ม |\n| `client.lua` | `Hooks.OnView(on)` ซ่อน\u002Fแสดง HUD ของสคริปต์อื่นตอนเริ่ม\u002Fจบการดู |\n\nสคริปต์อื่นฟังได้เอง: `AddEventHandler('x3d_replay:viewing', function(on) end)` หรือ `LocalPlayer.state.x3dReplay`\n\n## Export (server)\n\n```lua\nexports.x3d_replay:Mark(src, 'report', { by = reporterSrc, text = '...' })   -- 'anticheat' \u002F 'report' \u002F 'bookmark' = เก็บถาวร\nexports.x3d_replay:IsRecording(src)          -- true \u002F false\nexports.x3d_replay:GetSession(src)           -- { id, t } หรือ nil\nexports.x3d_replay:Open(viewerSrc, target, 'mm:ss')   -- เปิดดู (target = id เซสชัน \u002F id ผู้เล่น \u002F ชื่อ)\nexports.x3d_replay:OpenBrowser(viewerSrc, target)     -- เปิดหน้ารายการ (target ไม่ใส่ก็ได้)\n```\n\n## X3D Admin Panel (ไม่บังคับ)\n\nถ้ามี X3D Admin Panel จะมีเมนูรีเพลย์: ตารางผู้เล่น → ปุ่มเปิดหน้ารายการของคนนั้น ปิดแล้วกลับแผง\nสิทธิ์ตั้งในแผง › บทบาท: `mod.x3d_replay.players.view` \u002F `mod.x3d_replay.players.action.browse`\n\n## แก้ปัญหา\n\n- **`LICENSE CHECK FAILED`** — `LICENSE_INVALID` คีย์ไม่ตรงสินค้า · `NETWORK` ต่อเซิร์ฟเวอร์ไลเซนส์ไม่ได้ · `LICENSE_IP_MISMATCH` IP เปลี่ยน อัปเดตในหน้าบัญชี\n- **ไม่มีสิทธิ์ดู** — กลุ่ม ESX ไม่อยู่ใน `Config.Viewer.Groups` และไม่มี ACE `x3d_replay.admin`\n- **`Failed to load script @x3d_replay\u002Finject\u002Fclient.lua`** — `x3d_replay` ต้อง `ensure` ก่อนสคริปต์ที่ใส่ inject\n- **ตัวละครจำลองไม่เล่นท่า** — สคริปต์นั้นยังไม่ได้ใส่ inject ฝั่ง client หรือยังไม่ได้ต่อสคริปต์อีโมท\n- **ไม่มีเงิน\u002Fไอเทมในไทม์ไลน์** — ต้องเปิด `Config.Actions.Framework` และใช้ ESX\n- **รีเพลย์เก่าหาย** — โฟลเดอร์ `data\u002F` ถูกลบตอนอัปเดต หรือเกิน `RetentionDays` (เซสชันที่ติด keep ไม่ถูกลบ)\n","สคริป Replay FiveM ESX ดูย้อนหลังผู้เล่น หลักฐานจับโกง","ระบบรีเพลย์ FiveM ESX บันทึกผู้เล่นทุกคนอัตโนมัติ ดูย้อนหลังในเกม เห็นปุ่มที่กด คำสั่งสคริปต์ จับ macro ใช้เป็นหลักฐานเคสรีพอร์ตได้",[64,67,70,72,74,76],{"kind":65,"url":66},"video_url","https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=PpZ7Eb53Ajk",{"kind":68,"url":69},"image","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-replay\u002Fmedia\u002Fx3d-replay-fivem-browser.png",{"kind":68,"url":71},"\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-replay\u002Fmedia\u002Fx3d-replay-fivem-carry-timeline.png",{"kind":68,"url":73},"\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-replay\u002Fmedia\u002Fx3d-replay-fivem-switch-player.png",{"kind":68,"url":75},"\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-replay\u002Fmedia\u002Fx3d-replay-fivem-pov.png",{"kind":68,"url":77},"\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-replay\u002Fmedia\u002Fx3d-replay-fivem-map.png",[79],{"version":53,"released_at":54,"changelog_md":80},"### Changed\n- `core\u002Fserver\u002Fvoice.js` now ships obfuscated like the rest of `core\u002F`",null,1792316306617]