[{"data":1,"prerenderedAt":899},["ShallowReactive",2],{"site":3,"docs-slug-site":15,"docs-product-th-x3d-menu":21,"docs-products-th":83,"docs-html-th-x3d-menu":863},{"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":32,"latest_version":48,"latest_released_at":49,"published_at":50,"has_docs":51,"config":52,"rent_price_satang":53,"description_md":54,"docs_md":55,"seo_title":56,"seo_description":57,"media":58,"versions":72},"7337afbc-ca0d-4071-9de4-2cc04bd1b4e6","x3d-menu","X3D เมนูหลัก","เมนูหลักของเซิร์ฟ — การ์ดระบบ ประกาศ อีเวนต์มีช่วงเวลา คู่มือเมือง และหน้าตั้งค่าของผู้เล่น ไม่ต้องลงฐานข้อมูล ต่อกับเฟรมเวิร์กไหนก็ได้",0,"none","public\u002Fproducts\u002Fx3d-menu\u002Fcover\u002F8a1dbb30861b0387.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-menu\u002Fcover\u002F8a1dbb30861b0387.jpg",[31],"hud",[33,34,35,36,37,38,39,40,41,42,43,44,45,46,47],"esx","standalone","เมนูหลัก","main menu","menu","ประกาศ","อีเวนต์","คู่มือเมือง","ฟรี","free","เมนูเมือง","กฎเมือง","เมนู F4","ตั้งค่าผู้เล่น","แบนเนอร์อีเวนต์","1.1.4","2026-10-12T17:21:29.681926Z","2026-09-21T04:20:29.437521Z",true,"public",null,"# เมนูหลัก + ระบบ\u002Fประกาศ\u002Fอีเวนต์\u002Fคู่มือ + ตั้งค่าผู้เล่น — ฟรี ไม่ต้องลงฐานข้อมูล\n\nทุกเซิร์ฟเวอร์ต้องมีเมนูหลักสักอัน — การ์ดรวมระบบทั้งหมดให้ผู้เล่นกดเข้าแทนที่จะจำคำสั่งเอง ประกาศ\u002Fอีเวนต์ที่มีช่วงเวลาบนหน้าแรก คู่มือกฎเมืองแยกหมวด และแท็บตั้งค่าที่สคริปต์อื่นเพิ่มสวิตช์เข้ามาเองได้ `x3d_menu` ทำครบในไฟล์เดียว ผ่านแผง Nuxt 4 UI พร้อมใช้\n\n---\n\n## ฟีเจอร์\n\n- [+] ตั้งค่าง่าย ปรับได้หมดใน config หรือตั้งผ่านเว็บได้เลย\n- [+] การ์ดระบบกดเปิดคำสั่งของสคริปต์อื่น ซ่อนเองถ้าไม่ได้ลง resource\n- [+] ปักรายการโปรดและค้นหาระบบได้ แยกกริดความสะดวก\n- [+] ประกาศบนหน้าแรก ใส่รูป สี ลำดับเองได้\n- [+] อีเวนต์ตั้งช่วงเวลาเริ่ม-จบ นอกช่วงหายเอง\n- [+] คู่มือกฎเมืองแยกหมวด มีช่องค้นหา\n- [+] แอดมินแก้ประกาศ อีเวนต์ คู่มือในเกมด้วยคำสั่ง ไม่ต้องรีสตาร์ท\n- [+] สคริปต์อื่นเพิ่มสวิตช์ในหน้าตั้งค่าผู้เล่นได้\n- [+] ผู้เล่นเลือกธีม peach \u002F jade และสีเองได้ สลับไทย\u002Fอังกฤษ\n- [+] ใส่ลิงก์ Discord YouTube Facebook บนหน้าแรกได้\n- [+] ไม่ต้องลงฐานข้อมูล ไม่ต้องใช้เฟรมเวิร์ก สลับเป็น MySQL ได้\n- [+] เขียนเชื่อมกับสคริปต์อื่นได้ที่ addons\u002F\n\n---\n\n## การ์ดระบบ แบ่งเป็น \"ระบบ\" กับ \"ความสะดวก\" ซ่อนเองถ้า resource ยังไม่ได้ลง\n\n`Config.Systems` หรือ export `RegisterSystem` ตอน runtime เพิ่มการ์ดได้ทั้งสองทาง แต่ละการ์ดผูกกับ `resource` ของตัวเองได้ — resource นั้นไม่ได้ `started` การ์ดจะถูกซ่อนอัตโนมัติ ไม่ต้องมาคอยลบเอง `category` แยกการ์ดเต็มรูปแบบ (`'system'`) ออกจากทางลัดความสะดวกแบบปักหมุด\u002Fสลับด่วน (`'qol'`) เป็นกริดคนละส่วน คำสั่งที่ยิงตอนกดมาจาก cache ฝั่งเซิร์ฟเวอร์เท่านั้น ไม่เชื่อ command string จากตัวพาเนลเอง\n\n## ประกาศ อีเวนต์มีช่วงเวลา คู่มือแยกหมวด — แก้ได้จากคำสั่งแอดมิน ไม่ต้องรีสตาร์ท\n\nอีเวนต์ตั้ง `start_at`\u002F`end_at` แล้วนอกช่วงเวลาจะหายจากพาเนลเองแม้เปิด `is_active` ไว้ แบนเนอร์หน้าแรกบอกเองว่า \"จะเริ่ม\", \"เหลืออีก N วัน\" หรือ \"กำลังจัด\" ข้อมูลทั้งหมด (ระบบ\u002Fประกาศ\u002Fอีเวนต์\u002Fคู่มือ) seed จาก `config.lua` แค่ครั้งแรกที่ resource เริ่ม หลังจากนั้นแก้ผ่านคำสั่งแอดมิน `\u002Fmenusystem` `\u002Fmenuevent` `\u002Fmenuannouncement` `\u002Fmenuguide` — เพิ่ม\u002Fแก้\u002Fลบ\u002Fดูรายการ ไม่ต้องรีสตาร์ทเซิร์ฟ\n\n## ตั้งค่าผู้เล่น: ธีม peach\u002Fjade สีกำหนดเอง และสวิตช์ที่สคริปต์อื่นเพิ่มเองได้\n\n`RegisterSetting` เพิ่มสวิตช์ (toggle\u002Fselect\u002Fslider) เข้าแท็บตั้งค่าจาก resource ไหนก็ได้ ค่าจริงของผู้เล่นเก็บฝั่ง client ผ่าน KVP แล้ว replicate ขึ้น `LocalPlayer.state` ให้ resource อื่นอ่านได้ทันทีผ่าน export `GetSetting` หรือ state bag ตรง ๆ พร้อม hook `x3d_menu:onSetting` แจ้งทุกครั้งที่ผู้เล่นเปลี่ยนค่าอะไร\n\n## ไม่ต้องลงฐานข้อมูล\n\nเนื้อหาที่แอดมินคุม (ระบบ\u002Fประกาศ\u002Fอีเวนต์\u002Fคู่มือ) เก็บเป็นไฟล์ JSON ในตัว resource เอง flush ทุก 30 วินาทีและตอนผู้เล่นออก\u002Fresource หยุดแบบปกติ อยากได้ MySQL สำหรับเซิร์ฟเวอร์ใหญ่? สลับ 4 ฟังก์ชันในไฟล์เดียวไปใช้บล็อก oxmysql ที่คอมเมนต์ไว้ท้ายไฟล์ พร้อม `install.sql`\n\n## ต้องมี\n\nไม่มี · ไม่ต้องใช้ฐานข้อมูล ไม่ต้องใช้เฟรมเวิร์ก ไม่มีไลเซนส์ · วางแล้ว `ensure` ได้เลย\n\n**ฟรี** · แก้โค้ดได้ตามใจ · ขอแค่อย่านำไปขายต่อและอย่าอัปโหลดใหม่ในชื่อตัวเอง\n","## การติดตั้ง\n\n1. แตกไฟล์แล้ว **เปลี่ยนชื่อโฟลเดอร์เป็น `x3d_menu`** (สคริปต์อื่นเรียก export ด้วยชื่อนี้)\n2. วางใน `resources\u002F`\n3. เพิ่มใน `server.cfg`:\n\n```\nensure x3d_menu\n```\n\nเสร็จแล้ว — เก็บข้อมูลเป็นไฟล์ `data\u002Fmenu.json` ในตัว resource เอง ไม่ต้องรัน SQL ใด ๆ\n\nผู้เล่นเปิดเมนูด้วย `\u002Fmenu` หรือปุ่ม **F4** (`Config.Key`, ว่าง = ไม่ผูกปุ่ม) ปิดเมนูตอนตายหรือค้าง pause menu อัตโนมัติ\n\nในพาเนล 4 แท็บ: **หน้าแรก** (ประกาศ + แบนเนอร์อีเวนต์ที่กำลังจัด), **ระบบ** (ค้นหา, ปักรายการโปรด, การ์ด \"ระบบทั้งหมด\" กับกริดแยก \"ความสะดวก\"), **คู่มือ** (แยกหมวด + ค้นหา), **ตั้งค่า** (สวิตช์ที่ตั้งไว้ + ภาษา th\u002Fen + ธีม peach\u002Fjade + สีกำหนดเอง)\n\nไม่ต้องใช้ฐานข้อมูล ไม่ต้องใช้เฟรมเวิร์ก ไม่มีไลเซนส์\n\n## ระบบในเมนู (แท็บ \"ระบบ\")\n\nการ์ดที่กดแล้วยิงคำสั่งของสคริปต์อื่น — สั่งจาก `Config.Systems` (seed ครั้งแรกเท่านั้น) หรือ export `RegisterSystem` ตอน runtime:\n\n| field | ทำอะไร |\n|---|---|\n| `system_id` | คีย์ไม่ซ้ำ — ใช้ตรวจ favorite และเป็น id ที่ `\u002Fmenusystem edit\\|remove` เรียกหา |\n| `label` \u002F `description` \u002F `icon` | ข้อความ + ไอคอน heroicons บนการ์ด |\n| `command` | คำสั่งที่ยิงตอนกด — ไม่ใส่ = การ์ดกดไม่ได้ |\n| `resource` | resource ที่การ์ดนี้ผูกอยู่ — ไม่ได้ `started` = การ์ดถูกซ่อน (เว้นแต่ `always_show`) |\n| `always_show` | โชว์เสมอไม่สนสถานะ resource |\n| `category` | `'system'` (ค่าเริ่มต้น) = การ์ดเต็มรูปแบบ ขึ้นกริด \"ระบบทั้งหมด\"; `'qol'` = ทางลัดความสะดวก ขึ้นกริดแยก \"ความสะดวก\" — ค่าอื่นถูกปฏิเสธ |\n| `sort_order` | เรียงจากน้อยไปมาก |\n\n`.command` ที่ใช้จริงตอนกดมาจาก cache ฝั่ง client ที่ server เพิ่งส่งให้เท่านั้น ไม่เชื่อ command string จาก NUI ตรง ๆ\n\nตัวอย่างที่มากับ config: การ์ด `x3d_mailbox`\u002F`x3d_dailylogin` (ซ่อนเองถ้าเซิร์ฟไม่ได้ลง 2 resource นี้) และการ์ด `qol` ตัวอย่าง \"ล้างหมุดนำทาง\" ที่ใช้งานได้จริงทันที\n\nรายการโปรด (ดาวที่การ์ด) เป็นของผู้เล่นแต่ละคน เก็บฝั่ง client\n\n## ประกาศ + อีเวนต์ (แท็บ \"หน้าแรก\")\n\n`Config.Announcements` — การ์ดข้อความบนหน้าแรก มี `title`\u002F`content`\u002F`image_url`\u002F`color`\u002F`is_active`\u002F`sort_order`\n\n`Config.Events` — แบนเนอร์บนสุดของหน้าแรก มี `start_at`\u002F`end_at` เป็น unix timestamp วินาที ไม่ใส่ = ไม่จำกัดฝั่งนั้น นอกช่วงเวลาจะไม่โชว์เลยแม้ `is_active = true` (เซิร์ฟกรองให้ก่อนส่ง) แบนเนอร์แสดง \"จะเริ่ม\", \"เหลืออีก N วัน\" หรือ \"กำลังจัด\" ตามเวลาปัจจุบัน\n\nทั้งสองอย่าง seed จาก config ครั้งแรก แก้ทีหลังผ่าน `\u002Fmenuannouncement` \u002F `\u002Fmenuevent`\n\n## คู่มือ\u002Fกฎเมือง (แท็บ \"คู่มือ\")\n\n`Config.Guide` — แถวมี `category`\u002F`title`\u002F`content`\u002F`image_url`\u002F`is_active`\u002F`sort_order` พาเนลจัดกลุ่มตาม `category` เอง + ช่องค้นหา แก้ทีหลังผ่าน `\u002Fmenuguide`\n\n## ตั้งค่า (แท็บ \"ตั้งค่า\")\n\n`Config.Settings` คือ spec ว่าจะวาด item ไหนบ้าง — ไม่ใช่ค่าจริงของผู้เล่น เพิ่มจาก resource อื่นตอน runtime ได้ด้วย export `RegisterSetting`:\n\n```lua\nexports['x3d_menu']:RegisterSetting('ทั่วไป', {\n    id = 'show_minimap', label = 'แสดงมินิแมป', type = 'toggle', default_value = true,\n})\nexports['x3d_menu']:RegisterSetting('กราฟิก', {\n    id = 'quality', label = 'คุณภาพเอฟเฟกต์', type = 'select', default_value = 'high',\n    options = { { value = 'low', label = 'ต่ำ' }, { value = 'high', label = 'สูง' } },\n})\n```\n\n`type` มี `'toggle'` \u002F `'select'` \u002F `'slider'` (`min`\u002F`max` สำหรับ slider) ห้ามลงทะเบียนซ้ำ `id` เดิม และ `id` ที่ระบบจองไว้ (`theme`, `custom_color`, `favorites`) ลงทะเบียนทับไม่ได้ — สเปกใหม่ถูก broadcast ให้ client ทันทีเพื่อตั้งค่าเริ่มต้น\n\nในพาเนลเอง: ภาษา th\u002Fen (เก็บใน browser `localStorage` — เป็นภาษาของตัวพาเนล ไม่ผ่านเซิร์ฟเวอร์), ธีม peach\u002Fjade กับสีกำหนดเอง — ทุกคนเลือกได้เท่ากัน ไม่มีการล็อกธีมด้วยไอเทม\n\n## ที่เก็บข้อมูล — สองที่ คนละหน้าที่\n\n**ของผู้เล่นแต่ละคน** (ธีม, สีกำหนดเอง, ค่า toggle\u002Fselect\u002Fslider, รายการโปรด) — เก็บฝั่ง client ล้วน ๆ ผ่าน resource KVP แล้ว replicate ขึ้น `LocalPlayer.state` ภายใต้คีย์ `x3dmenu:\u003Cid>` resource อื่นอ่านได้ฝั่งเซิร์ฟผ่าน export `GetSetting` หรือ `Player(src).state['x3dmenu:\u003Cid>']` ตรง ๆ เป็น `nil` ถ้าผู้เล่นยังไม่เคยตั้งค่า id นั้น\n\n**เนื้อหาที่แอดมินคุม** (ระบบ, ประกาศ, อีเวนต์, คู่มือ) — เก็บฝั่ง server ผ่าน storage adapter ไฟล์ JSON เดี่ยว (`Config.Storage.File`, ค่าเริ่มต้น `data\u002Fmenu.json`) โหลดครั้งเดียวตอน resource เริ่ม เขียนกลับทุก `Config.Storage.FlushSeconds` วินาที และตอนผู้เล่นออก\u002Fresource หยุด ไฟล์เสียอ่านไม่ได้ → ย้ายไปเก็บเป็น `data\u002Fmenu.broken.json` แล้วเริ่มใหม่ `Config.Systems`\u002F`Config.Events`\u002F`Config.Announcements`\u002F`Config.Guide` ถูกนำเข้า storage แค่ครั้งแรกที่ resource เริ่มทำงาน หลังจากนั้นแก้ `config.lua` จะไม่มีผลอีก — แก้ผ่านคำสั่งแอดมินแทน\n\nอยากใช้ MySQL แทน (เฉพาะเนื้อหาแอดมิน ของผู้เล่นยังอยู่ที่ client KVP เหมือนเดิม):\n\n1. รัน `install.sql` ผ่าน oxmysql\n2. เปิด `addons\u002Fstorage\u002Fserver.lua` เลื่อนลงล่างสุด คัดลอกบล็อก oxmysql ทับ 4 ฟังก์ชัน `Storage.Get\u002FSet\u002FAll\u002FFlush` ด้านบน\n\n## Exports\n\n```lua\n-- การ์ดระบบใหม่ — ปฏิเสธ (คืน false) ถ้า system_id ซ้ำ, def ไม่ครบ, หรือ category ไม่ใช่ 'system'\u002F'qol'\nexports['x3d_menu']:RegisterSystem({\n    system_id = 'my_shop', label = 'ร้านค้า', description = 'ซื้อของใช้ในเมือง',\n    icon = 'i-heroicons-shopping-cart', command = 'openmyshop', resource = 'my_shop',\n    always_show = false, is_active = true, sort_order = 5, category = 'system',\n})\n\nexports['x3d_menu']:RegisterSetting(section, def)   --> boolean\nexports['x3d_menu']:GetSetting(src, 'show_hud')     --> ค่าจริง หรือ nil ถ้ายังไม่เคยตั้ง\n```\n\n## Hook — server-internal (ไม่ใช่ net event)\n\n```lua\nAddEventHandler('x3d_menu:onSetting', function(src, id, value)\n    if id == 'show_hud' then\n        print(('player %s set show_hud = %s'):format(src, tostring(value)))\n    end\nend)\n```\n\nยิงทุกครั้งที่ผู้เล่นคนไหนเปลี่ยนค่าอะไรใน `x3dmenu:*` (รวม theme\u002Fcustom_color\u002Ffavorites ด้วย ไม่ใช่แค่ค่าใน `Config.Settings`)\n\n## คำสั่งแอดมิน\n\nจัดการ 4 คอลเลกชัน (`systems`\u002F`events`\u002F`announcements`\u002F`guide`) ทีละอย่าง เรียกจาก in-game console ได้เสมอ เรียกจากผู้เล่นในเกมต้องมี ace `Config.AdminAce` (ค่าเริ่มต้น `x3d_menu.admin`):\n\n```\n\u002Fmenusystem add \u003Cjson>          -- json ต้องมี system_id, label\n\u002Fmenusystem edit \u003Csystem_id> \u003Cjson>\n\u002Fmenusystem remove \u003Csystem_id>\n\u002Fmenusystem list\n\n\u002Fmenuevent add \u003Cjson>           -- json ต้องมี title\n\u002Fmenuevent edit \u003Cid> \u003Cjson>\n\u002Fmenuevent remove \u003Cid>\n\u002Fmenuevent list\n\n\u002Fmenuannouncement add \u003Cjson>    -- json ต้องมี title\n\u002Fmenuannouncement edit \u003Cid> \u003Cjson>\n\u002Fmenuannouncement remove \u003Cid>\n\u002Fmenuannouncement list\n\n\u002Fmenuguide add \u003Cjson>           -- json ต้องมี title, content, category\n\u002Fmenuguide edit \u003Cid> \u003Cjson>\n\u002Fmenuguide remove \u003Cid>\n\u002Fmenuguide list\n```\n\n`add`\u002F`edit` ตรวจ field ที่พาเนลต้องใช้ทุกครั้ง — ขาดแล้วปฏิเสธ ไม่เขียนลง storage เลย `edit` ห้ามเปลี่ยน id ไปชนแถวอื่นที่มีอยู่แล้ว `remove`\u002F`edit` กับ id ที่ไม่มีจริงตอบกลับว่าไม่พบโดยไม่ throw `list` ส่ง JSON ดิบของทั้งคอลเลกชันกลับไม่แก้อะไรใน storage\n\n## ความปลอดภัยที่ทดสอบไว้\n\n- **คำสั่งของการ์ดมาจาก cache ฝั่ง server เท่านั้น** — ไม่เชื่อ command string ที่ NUI ส่งมาเอง\n- **แถวจากคำสั่งแอดมินถูกตรวจก่อนเขียนลง storage เสมอ** ทั้งตอน `add` และตอน `edit` (ตรวจผลลัพธ์หลัง merge)\n- **`id` จองไว้ของระบบ (`theme`\u002F`custom_color`\u002F`favorites`) ลงทะเบียนทับ\u002Fเขียนทับไม่ได้** ทั้งฝั่ง server และ client\n- **request\u002Fresponse ทุกเส้นทางตอบกลับเสมอแม้โดนปฏิเสธ** — จำกัด 1 ครั้ง\u002Fวินาที\u002Fคนต่อ action ผู้เล่นออกจากเกมแล้ว throttle bucket ของคนนั้นถูกล้างทิ้งทันที\n- **คีย์ผู้เล่นเป็น identifier ถาวรเสมอ** ไม่ใช่ server id\n\n```bash\npip install lupa\npython tools\u002Flua-test\u002Fx3d_menu_check.py\n```\n\n## ตั้งค่า (`config.lua`)\n\n| ค่า | ทำอะไร |\n|---|---|\n| `Config.Locale` | ภาษาเริ่มต้นของข้อความฝั่ง Lua (`th`\u002F`en`) — คนละส่วนกับภาษาของพาเนล |\n| `Config.Command` \u002F `Config.Key` | คำสั่งเปิด (`\u002Fmenu`) และปุ่มลัด (`F4`) |\n| `Config.AdminAce` | ace ที่ใช้สั่ง `\u002Fmenusystem` `\u002Fmenuevent` `\u002Fmenuannouncement` `\u002Fmenuguide` |\n| `Config.Storage.File` \u002F `.FlushSeconds` | ที่เก็บไฟล์ JSON ของเนื้อหาแอดมิน และความถี่ flush |\n| `Config.SocialLinks` | ลิงก์โซเชียลบนหน้าแรก |\n| `Config.Systems` \u002F `Config.Events` \u002F `Config.Announcements` \u002F `Config.Guide` | ข้อมูลตั้งต้น — seed เข้า storage แค่ครั้งเดียว |\n| `Config.Settings` | spec ของสวิตช์ในแท็บตั้งค่า |\n\n## ช่วยเหลือ\n\nDiscord: discord.gg\u002Fx3d-developer · เว็บ: x3d-developer.com\n","สคริปต์เมนูหลัก FiveM ฟรี ไม่ต้องใช้ฐานข้อมูล","เมนูหลัก FiveM ฟรี รวมการ์ดระบบ ประกาศ อีเวนต์ตามช่วงเวลา คู่มือเมือง ตั้งค่าผู้เล่นและธีม ไม่ต้องลงฐานข้อมูล แอดมินแก้เนื้อหาในเกมได้",[59,62,64,66,68,70],{"kind":60,"url":61},"image","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-menu\u002Fmedia\u002Fdf5554e733bb3344.png",{"kind":60,"url":63},"\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-menu\u002Fmedia\u002Fb69a7d2d674141e6.png",{"kind":60,"url":65},"\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-menu\u002Fmedia\u002Fac244d9e6dbda554.png",{"kind":60,"url":67},"\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-menu\u002Fmedia\u002F6d4299351032214d.png",{"kind":60,"url":69},"\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-menu\u002Fmedia\u002F60886675555c9c64.png",{"kind":60,"url":71},"\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-menu\u002Fmedia\u002F4a5b1d1684d6d441.png",[73,75,79],{"version":48,"released_at":49,"changelog_md":74},"### Changed\n\n- Store images now carry English captions for the English store page",{"version":76,"released_at":77,"changelog_md":78},"1.1.1","2026-10-12T03:26:17.490932Z","### Changed\n\n- UI font is now Kanit (one family for Thai and English), bundled inside the script; the Thai font now really loads in game (FiveM's browser dropped the old font declaration and fell back to a system font)",{"version":80,"released_at":81,"changelog_md":82},"1.0.0","2026-09-21T04:20:20.653667Z","### Added\n- Main menu panel (`\u002Fmenu`, F4) ported from cc_menu: home with announcements and a timed event banner, systems grid with favourites, guidebook with categories and search, settings tab\n- Systems come from `Config.Systems` or the `RegisterSystem` export, split into the full `system` grid and the `qol` convenience grid, hidden automatically while their resource is not started\n- Events carry a `start_at`\u002F`end_at` window and are filtered server-side, so an out-of-window event never reaches the panel\n- Settings spec from `Config.Settings` plus the `RegisterSetting` export, with `toggle`, `select` and `slider` controls; a newly registered spec is broadcast so its default is readable without the player opening the panel\n- Per-player theme, custom colour, setting values and favourites live in client KVP and are republished to `LocalPlayer.state` under `x3dmenu:\u003Cid>`, readable server-side through `GetSetting(src, id)` or the state bag directly\n- Admin-managed content (systems, announcements, events, guidebook) lives in the storage adapter: a JSON file by default, with an oxmysql block shipped commented in the same file\n- Admin commands `\u002Fmenusystem`, `\u002Fmenuevent`, `\u002Fmenuannouncement`, `\u002Fmenuguide` with `add`, `edit`, `remove` and `list`, gated by the `x3d_menu.admin` ace and always available from the console\n- Server event `x3d_menu:onSetting(src, id, value)` for reacting to a player's choice\n- Every net event resolves `source` itself, is rate limited per action per second, validates its arguments before use and always answers; a card's command is taken from the server's cache, never from the NUI",{"items":84,"page":861,"size":862,"total":862},[85,121,142,170,191,220,253,278,305,335,360,386,414,441,469,497,521,540,563,590,620,645,669,693,714,742,767,770,794,819,840],{"id":86,"slug":87,"name":88,"summary":89,"price_thb":90,"license_mode":91,"cover_key":92,"cover_url":93,"category_slugs":94,"tags":97,"latest_version":116,"latest_released_at":117,"published_at":118,"has_docs":51,"config":119,"rent_price_satang":120},"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",[95,96],"anticheat","admin",[33,98,99,100,101,102,103,104,105,106,107,108,109,110,95,111,112,113,114,115],"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","owners",12000,{"id":122,"slug":123,"name":124,"summary":125,"price_thb":90,"license_mode":91,"cover_key":126,"cover_url":127,"category_slugs":128,"tags":129,"latest_version":80,"latest_released_at":140,"published_at":141,"has_docs":51,"config":119,"rent_price_satang":120},"ff948fa9-6fc5-410e-b952-ee88b15f0c9d","x3d-anticheat","X3D Anti-Cheat (กันโปร)","BETA ราคาพิเศษ ร่วมทดสอบได้ · แอนตี้โกงเก็บหลักฐานก่อนแบน: Discord + ภาพหน้าจอ + แบน HWID + ล็อกบัญชี Steam\u002FDiscord + กัน event spam ด้วย 2 บรรทัด","public\u002Fproducts\u002Fx3d-anticheat\u002Fcover\u002Fd90612eed4448164.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-anticheat\u002Fcover\u002Fd90612eed4448164.jpg",[95],[33,34,130,95,131,132,133,110,134,135,136,137,138,139],"แอนตี้โกง","ป้องกันแฮก","กันโกง","HWID ban","ภาพหลักฐาน","ล็อกบัญชี Steam Discord","แบนเครื่อง","คิวยศ Discord","กัน event สแปม","แอนตี้โกง ESX","2026-09-16T09:45:51.78533Z","2026-09-16T09:46:00.05928Z",{"id":143,"slug":144,"name":145,"summary":146,"price_thb":147,"license_mode":91,"cover_key":148,"cover_url":149,"category_slugs":150,"tags":154,"latest_version":48,"latest_released_at":167,"published_at":168,"has_docs":51,"config":119,"rent_price_satang":169},"47a33337-7dcf-4a78-b056-4b3e324a648d","x3d-slots","X3D สล็อต 1024 ทาง","สล็อตคาสเคด 1,024 ทาง สไตล์มาห์จอง RTP 97.5% คิดผลบนเซิร์ฟเวอร์ กันโกง พร้อมฟรีสปิน ตัวคูณ และซีนแจ็กพอต",250000,"public\u002Fproducts\u002Fx3d-slots\u002Fcover\u002Fd09c2066a6ea2968.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-slots\u002Fcover\u002Fd09c2066a6ea2968.jpg",[151,152,153],"casino","economy","entertainment",[33,34,155,156,151,157,158,159,160,161,162,163,164,165,166],"คาสิโน","สล็อต","slot","มินิเกม","minigame","RTP 97.5%","มาห์จอง","คาสเคด","ฟรีสปิน","ตู้สล็อต","ซื้อฟีเจอร์","ปรับ RTP","2026-10-12T17:13:01.863556Z","2026-09-14T15:28:02.281478Z",50000,{"id":171,"slug":172,"name":173,"summary":174,"price_thb":26,"license_mode":27,"cover_key":175,"cover_url":176,"category_slugs":177,"tags":179,"latest_version":188,"latest_released_at":189,"published_at":190,"has_docs":51,"config":52,"rent_price_satang":53},"1fb91794-3e8b-4955-bc54-dc6b1491912e","x3d-mapevents","X3D Map Events (อีเวนต์บนแผนที่)","แผงอีเวนต์บนหน้าแผนที่ pause menu ฟรี: ชื่อ + เวลานับถอยหลัง คลิกเพื่อตั้งจุดนำทาง สคริปต์อื่นส่งอีเวนต์เข้ามาได้เหมือนส่งแจ้งเตือน แอดมินสร้างอีเวนต์เองได้","public\u002Fproducts\u002Fx3d-mapevents\u002Fcover\u002F8e738f2dfcf0ea2f.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-mapevents\u002Fcover\u002F8e738f2dfcf0ea2f.jpg",[31,178],"gameplay",[39,180,181,182,183,184,185,186,187,41,42],"อีเวนต์บนแผนที่","แผนที่","จุดนำทาง","นับถอยหลัง","pause menu","map events","event","waypoint","1.0.3","2026-10-12T17:13:20.327337Z","2026-10-12T04:21:56.480796Z",{"id":192,"slug":193,"name":194,"summary":195,"price_thb":26,"license_mode":27,"cover_key":196,"cover_url":197,"category_slugs":198,"tags":200,"latest_version":217,"latest_released_at":218,"published_at":219,"has_docs":51,"config":52,"rent_price_satang":53},"58697b89-cbe5-4b1f-8a29-c5289727202e","x3d-weaponskins","X3D Weapon Skins (สกินอาวุธ)","สกินอาวุธแบบสะสม ESX ฟรี สกินเป็นอาวุธ add-on ผูกกับปืนหลัก ใช้ไอเทมปลดล็อกเข้าคลัง ใส่\u002Fถอดได้ ดาเมจเท่าเดิม แปลงกลับเป็นไอเทมไปเทรดได้ มีเอฟเฟกต์ตอนถือ","public\u002Fproducts\u002Fx3d-weaponskins\u002Fcover\u002F25e3c37b23545ec8.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-weaponskins\u002Fcover\u002F25e3c37b23545ec8.jpg",[178,199],"inventory",[201,202,203,204,205,206,207,208,209,210,33,41,42,211,212,213,214,215,216],"weapon skins","สกินอาวุธ","สกินอาวุธ fivem","สกินปืน","gun skin","weapon skin fivem","คลังสกิน","เทรดสกิน","skin collection","x3d_inventory","ปลดล็อกสกิน","สกินสะสม","เอฟเฟกต์อาวุธ","ความหายากสกิน","สกิน add-on","แปลงสกินเป็นไอเทม","1.1.2","2026-10-12T17:13:35.599698Z","2026-10-10T11:46:16.716284Z",{"id":221,"slug":222,"name":223,"summary":224,"price_thb":26,"license_mode":27,"cover_key":225,"cover_url":226,"category_slugs":227,"tags":229,"latest_version":116,"latest_released_at":251,"published_at":252,"has_docs":51,"config":52,"rent_price_satang":53},"d82d8eb1-ed6a-43e3-86ef-24e45ae2b39d","x3d-damage","X3D Damage (ดาเมจอาวุธ)","ตั้งดาเมจอาวุธเองทุกชิ้น พร้อมเอฟเฟกต์ เลือดออก ช้า สตัน ล้ม ดูดเลือด รองรับสกินอาวุธ ใช้ได้ทั้ง ESX และ standalone","public\u002Fproducts\u002Fx3d-damage\u002Fcover\u002F8ce8864c16843fe6.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-damage\u002Fcover\u002F8ce8864c16843fe6.jpg",[178,228],"gangs",[230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,33,34,41,42,245,246,247,248,249,250],"weapon damage","ดาเมจอาวุธ","ดาเมจปืน","fivem weapon damage","damage script","headshot","headshot kill","เลือดออก","bleed","สตัน","stun","lifesteal","ดูดเลือด","เมืองปืน","pvp","ทะลุเกราะ","ดาเมจเสริม","ปิดท่าต่อยหนัก","ปรับดาเมจ","ทำให้ช้า","กันกระโดดหลบ","2026-10-12T17:14:19.289254Z","2026-10-10T11:45:52.279629Z",{"id":254,"slug":255,"name":256,"summary":257,"price_thb":26,"license_mode":27,"cover_key":258,"cover_url":259,"category_slugs":260,"tags":262,"latest_version":116,"latest_released_at":276,"published_at":277,"has_docs":51,"config":52,"rent_price_satang":53},"93def22a-9501-4b66-bdf0-158cc6a0093c","x3d-vehiclestorage","X3D Vehicle Storage (ท้ายรถ)","ท้ายรถสำหรับ ESX ใช้หน้าจอกระเป๋า x3d_inventory น้ำหนักตามประเภท\u002Fรุ่นรถ เฉพาะเจ้าของ รถงาน และแอดมินเปิดดูได้ ฟรี","public\u002Fproducts\u002Fx3d-vehiclestorage\u002Fcover\u002F2c2d97cb47678e1b.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-vehiclestorage\u002Fcover\u002F2c2d97cb47678e1b.jpg",[199,261],"garage",[263,264,265,266,267,268,269,210,33,41,42,270,271,272,273,274,275],"trunk","ท้ายรถ","ท้ายรถ fivem","vehicle storage","trunk inventory","esx trunk","เก็บของในรถ","ตู้ท้ายรถ","รถงาน","กล่องเก็บของหน้ารถ","น้ำหนักท้ายรถ","ล็อกรถ","เปิดท้ายรถ","2026-10-12T17:14:46.845123Z","2026-10-05T04:28:52.749188Z",{"id":279,"slug":280,"name":281,"summary":282,"price_thb":26,"license_mode":27,"cover_key":283,"cover_url":284,"category_slugs":285,"tags":287,"latest_version":116,"latest_released_at":303,"published_at":304,"has_docs":51,"config":52,"rent_price_satang":53},"b642bb91-9f6d-4c3c-8830-e594c2a92fcb","x3d-vault","X3D Vault (ตู้เซฟแก๊ง)","ตู้เซฟ ESX ใช้หน้าจอกระเป๋า x3d_inventory ตู้ส่วนตัวมีเลเวล แชร์ให้เพื่อน ตู้หน่วยงานตามอาชีพ ฟรี","public\u002Fproducts\u002Fx3d-vault\u002Fcover\u002F72ea3a88a64e0034.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-vault\u002Fcover\u002F72ea3a88a64e0034.jpg",[199,286],"jobs",[288,289,290,291,292,293,294,295,210,33,41,42,296,297,298,299,300,301,302],"vault","stash","ตู้เซฟ","ตู้เก็บของ","ตู้เซฟ fivem","esx stash","job vault","ตู้หน่วยงาน","ตู้เซฟแก๊ง","ตู้ส่วนตัว","แชร์ตู้","อัปเกรดตู้","ตู้เซฟตำรวจ","ตู้เซฟอาชีพ","ลิมิตตู้","2026-10-12T17:15:03.928293Z","2026-10-05T04:28:43.828514Z",{"id":306,"slug":307,"name":308,"summary":309,"price_thb":26,"license_mode":27,"cover_key":310,"cover_url":311,"category_slugs":312,"tags":313,"latest_version":332,"latest_released_at":333,"published_at":334,"has_docs":51,"config":52,"rent_price_satang":53},"70fa1474-294a-49ad-91cb-1de0ab4dc8d8","x3d-adminpanel","X3D Admin Panel (เมนูแอดมิน)","แผงแอดมิน FiveM ฟรี ครบในหน้าเดียว ผู้เล่น แบน\u002Fเตือน จับบัญชีสำรอง กระเป๋า ไอเทม รถ อากาศ บันทึกการใช้งาน และเมนูของสคริปต์ X3D","public\u002Fproducts\u002Fx3d-adminpanel\u002Fcover\u002F5cb8420f481eee28.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-adminpanel\u002Fcover\u002F5cb8420f481eee28.jpg",[96],[314,315,316,317,318,319,136,320,321,322,323,324,114,325,33,34,41,42,326,327,328,329,330,331],"admin panel","admin menu","แผงแอดมิน","เมนูแอดมิน","เมนูแอดมิน fivem","fivem admin menu","token ban","จับบัญชีสำรอง","alt detection","txadmin","noclip","log","แอดมินไทย","ยึดไอเทม","ประวัติแบน","โน้ตแอดมิน","นำเข้า txAdmin","บทบาทแอดมิน","1.0.5","2026-10-12T17:15:53.66615Z","2026-10-05T04:11:47.352812Z",{"id":336,"slug":337,"name":338,"summary":339,"price_thb":26,"license_mode":27,"cover_key":340,"cover_url":341,"category_slugs":342,"tags":343,"latest_version":48,"latest_released_at":358,"published_at":359,"has_docs":51,"config":52,"rent_price_satang":53},"d76ff7ae-ded6-4f39-b63f-734181952698","x3d-inventory","X3D Inventory (กระเป๋า)","กระเป๋าไอเทม ESX ฟรี ตัวหนังสือไทยใหญ่ ช่องลัด 1–9 บันทึกกับตัวละคร ความจุขยายด้วยคูปอง ต่อตู้เซฟ\u002Fท้ายรถได้ทุกสคริปต์","public\u002Fproducts\u002Fx3d-inventory\u002Fcover\u002Ffc3857e556cf31f3.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-inventory\u002Fcover\u002Ffc3857e556cf31f3.jpg",[199,31],[199,344,345,346,347,348,349,350,351,352,33,41,42,353,354,355,356,357],"กระเป๋า","กระเป๋า fivem","ui กระเป๋า","esx inventory","inventory fivem","ช่องลัด","hotbar","ไอเทม","nui","คูปองขยายช่อง","คูปองน้ำหนัก","ความหายากไอเทม","ค้นกระเป๋า","จำกัดน้ำหนัก","2026-10-12T17:16:22.733967Z","2026-10-05T04:10:14.693356Z",{"id":361,"slug":362,"name":363,"summary":364,"price_thb":26,"license_mode":27,"cover_key":365,"cover_url":366,"category_slugs":367,"tags":368,"latest_version":48,"latest_released_at":384,"published_at":385,"has_docs":51,"config":52,"rent_price_satang":53},"f782bbab-0321-4d3f-832f-797a2aa198f5","x3d-fortune","X3D Fortune (หมอดู)","หมอดูฟรีสำหรับ ESX: ดวงรายวัน ราศีจากวันเกิด เซียมซี 28 ใบ ไพ่ยิปซี 22 ใบ 9 หัวข้อ และดวงรายเดือนเปิดไพ่ 10 ใบ","public\u002Fproducts\u002Fx3d-fortune\u002Fcover\u002Fab130eeac9fbc029.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-fortune\u002Fcover\u002Fab130eeac9fbc029.jpg",[153],[369,370,371,372,373,374,375,376,377,33,41,42,378,379,380,381,382,383],"หมอดู","ดูดวง","เซียมซี","ไพ่ยิปซี","tarot","ราศี","ดวงรายวัน","fortune teller","npc","ดวงรายเดือน","ไพ่ทาโร่","เลขมงคล","สีมงคล","ไพ่กลับหัว","จุดหมอดู","2026-10-12T17:16:40.12128Z","2026-09-26T14:59:27.315955Z",{"id":387,"slug":388,"name":389,"summary":390,"price_thb":26,"license_mode":27,"cover_key":391,"cover_url":392,"category_slugs":393,"tags":394,"latest_version":411,"latest_released_at":412,"published_at":413,"has_docs":51,"config":52,"rent_price_satang":53},"9cb293aa-8b2c-447d-b810-3a7e385f6e81","x3d-banking","X3D Banking (ธนาคาร)","ธนาคารและตู้ ATM ฟรีสำหรับ ESX: ฝาก ถอน โอนด้วย ID ผู้เล่น ประวัติรายการ ใช้ได้ทุกตู้บนแผนที่ เซิร์ฟเวอร์เช็คทุกรายการ","public\u002Fproducts\u002Fx3d-banking\u002Fcover\u002Fe7e66ab29819a980.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-banking\u002Fcover\u002Fe7e66ab29819a980.jpg",[152],[395,396,397,398,399,400,401,402,403,404,33,41,42,405,406,407,408,409,410],"banking","ธนาคาร","ระบบธนาคาร","atm","ตู้ atm","โอนเงิน","โอนด้วยเบอร์โทร","esx banking","bank script","ประวัติรายการ","ถอนด่วน","วงเงินโอน","สาขาธนาคาร","ฝากเงิน","ถอนเงิน","เพิ่มตู้ ATM","1.1.8","2026-10-12T17:16:55.98941Z","2026-09-26T14:59:08.07128Z",{"id":415,"slug":416,"name":417,"summary":418,"price_thb":26,"license_mode":27,"cover_key":419,"cover_url":420,"category_slugs":421,"tags":422,"latest_version":48,"latest_released_at":439,"published_at":440,"has_docs":51,"config":52,"rent_price_satang":53},"c72d91e0-6bcd-4fae-bde9-0e140e02b0cb","x3d-music","X3D Music (ลำโพง)","ลำโพงบูมบ็อกซ์ฟรีสำหรับ ESX: วางบนพื้นหรือติดบนรถ เปิดเพลง YouTube คิวเพลงร่วมกัน เสียงเบาลงตามระยะ ลำโพงยังอยู่หลังรีสตาร์ท","public\u002Fproducts\u002Fx3d-music\u002Fcover\u002Fce445e0d251f7540.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-music\u002Fcover\u002Fce445e0d251f7540.jpg",[153],[423,424,425,426,427,428,429,430,431,432,33,41,42,433,434,435,436,437,438],"boombox","ลำโพง","ลำโพงเปิดเพลง","เปิดเพลง youtube","music script","fivem music","xsound","youtube","คิวเพลง","ติดบนรถ","ลำโพงติดรถ","เปิดเพลงในรถ","ฟังเพลงด้วยกัน","เพลงร่วมกัน","ลำโพงวางพื้น","จำกัดลำโพง","2026-10-12T17:17:14.482272Z","2026-09-26T14:56:09.091062Z",{"id":442,"slug":443,"name":444,"summary":445,"price_thb":26,"license_mode":27,"cover_key":446,"cover_url":447,"category_slugs":448,"tags":449,"latest_version":466,"latest_released_at":467,"published_at":468,"has_docs":51,"config":52,"rent_price_satang":53},"6125d85f-eaff-45cb-90cd-9db4d66e7954","x3d-respawn","X3D Respawn (หน้าจอตาย)","หน้าจอตายฟรี: ปุ่มเรียกหมอ หมอออนไลน์ต้องรอหมอ จุดเกิดใหม่ ชุบตัวเอง สรุปการตาย และเก็บสถานะตายตอนออกเกม","public\u002Fproducts\u002Fx3d-respawn\u002Fcover\u002F1af99658aa5089b2.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-respawn\u002Fcover\u002F1af99658aa5089b2.jpg",[31],[450,451,452,453,454,455,456,457,458,459,460,33,41,42,461,462,463,464,465],"respawn","หน้าจอตาย","death screen","เรียกหมอ","call ems","ambulance","esx_ambulancejob","ชุบตัวเอง","จุดเกิดใหม่","dispatch","สรุปการตาย","รอหมอ","กันหนีตาย","ปุ่มเรียกหมอ","เกิดใหม่เมือง","ชุดปฐมพยาบาล","1.1.3","2026-10-12T17:17:26.33517Z","2026-09-25T16:14:21.42282Z",{"id":470,"slug":471,"name":472,"summary":473,"price_thb":26,"license_mode":27,"cover_key":474,"cover_url":475,"category_slugs":476,"tags":477,"latest_version":466,"latest_released_at":495,"published_at":496,"has_docs":51,"config":52,"rent_price_satang":53},"879a5a5d-5b22-4fb5-9274-6ac3ee631904","x3d-phone","X3D Phone (โทรศัพท์)","โทรศัพท์มือถือฟรีสำหรับ ESX: โทรผ่าน pma-voice, SMS แชร์ตำแหน่ง, ธนาคารมือถือ, กล้องถ่ายรูปเก็บในเซิร์ฟเอง, Buzz และ Dark Chat","public\u002Fproducts\u002Fx3d-phone\u002Fcover\u002F9e0b9e2f9bc7352d.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-phone\u002Fcover\u002F9e0b9e2f9bc7352d.jpg",[31],[478,479,480,481,482,483,484,459,485,486,487,488,489,33,41,42,490,491,492,453,493,494],"phone","โทรศัพท์","โทรศัพท์ fivem","esx phone","phone script","sms","pma-voice","แจ้งเหตุ","ธนาคารมือถือ","buzz","dark chat","กล้อง","เบอร์หน่วยงาน","ออกบิล","แชร์ตำแหน่ง","กล้องโทรศัพท์","ไอเทมโทรศัพท์","2026-10-12T17:18:13.372348Z","2026-09-25T15:32:10.424119Z",{"id":498,"slug":499,"name":500,"summary":501,"price_thb":26,"license_mode":27,"cover_key":502,"cover_url":503,"category_slugs":504,"tags":505,"latest_version":466,"latest_released_at":518,"published_at":519,"has_docs":520,"config":27,"rent_price_satang":53},"6705aca9-39b7-48ad-a39b-0dc4a906dd70","x3d-safe","X3D Safe Cracking (เจาะตู้เซฟ)","มินิเกมหมุนเจาะตู้เซฟ หมุนหน้าปัดด้วย A\u002FD กด E ตอนตรงจุด เรียกด้วย export เดียว","public\u002Fproducts\u002Fx3d-safe\u002Fcover\u002F410a110f32490438.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-safe\u002Fcover\u002F410a110f32490438.jpg",[228,178],[506,507,290,508,158,159,509,510,34,511,41,42,512,513,514,515,516,517],"safe cracking","เจาะตู้เซฟ","หมุนตู้เซฟ","มินิเกม fivem","export","crime","หมุนหน้าปัด","ตู้เซฟธนาคาร","ตู้เซฟร้าน","ตู้เซฟบ้าน","ไม่ต้องใช้ ESX","มินิเกม A\u002FD","2026-10-12T17:18:34.435941Z","2026-09-24T03:53:28.3285Z",false,{"id":522,"slug":523,"name":524,"summary":525,"price_thb":26,"license_mode":27,"cover_key":526,"cover_url":527,"category_slugs":528,"tags":529,"latest_version":76,"latest_released_at":538,"published_at":539,"has_docs":520,"config":27,"rent_price_satang":53},"d5bcab3a-9189-4813-9b17-6b34f3a16584","x3d-lockpick","X3D Lockpick (งัดล็อก)","มินิเกมงัดล็อก หมุนหาจุดด้วย WASD เรียกด้วย export เดียว ใช้กับสคริปต์อะไรก็ได้","public\u002Fproducts\u002Fx3d-lockpick\u002Fcover\u002Fc36242cb20a32b3b.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-lockpick\u002Fcover\u002Fc36242cb20a32b3b.jpg",[228,178],[530,531,532,158,159,509,510,34,511,41,42,533,534,535,536,537],"lockpick","งัดล็อก","สะเดาะกุญแจ","งัดประตูบ้าน","งัดรถ","หมุดล็อก","มินิเกม WASD","ปรับความยาก","2026-10-12T17:18:46.115275Z","2026-09-24T03:53:14.231073Z",{"id":541,"slug":542,"name":543,"summary":544,"price_thb":26,"license_mode":27,"cover_key":545,"cover_url":546,"category_slugs":547,"tags":549,"latest_version":560,"latest_released_at":561,"published_at":562,"has_docs":51,"config":52,"rent_price_satang":53},"65d3b2da-6dba-4cd0-9907-06b8e6e54994","x3d-houserobbery","X3D House Robbery (งัดบ้าน)","งัดบ้าน — งัดประตู ค้นของตามพื้น เจาะตู้เซฟ มีคูลดาวน์ต่อหลัง แถมมินิเกมครบในซิปเดียว","public\u002Fproducts\u002Fx3d-houserobbery\u002Fcover\u002F73f596dab6db196a.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-houserobbery\u002Fcover\u002F73f596dab6db196a.jpg",[548,228],"housing",[550,551,552,553,554,290,530,158,228,555,548,511,33,41,42,556,507,557,558,559],"งัดบ้าน","ปล้นบ้าน","house robbery","robbery","ปล้น","แก๊ง","คีย์การ์ด","เงินแดง","จุดค้นของ","ปล้นบ้านคูลดาวน์","1.2.4","2026-10-12T17:19:03.056031Z","2026-09-24T03:48:06.633278Z",{"id":564,"slug":565,"name":566,"summary":567,"price_thb":26,"license_mode":27,"cover_key":568,"cover_url":569,"category_slugs":570,"tags":571,"latest_version":587,"latest_released_at":588,"published_at":589,"has_docs":51,"config":52,"rent_price_satang":53},"5532c49c-d819-4dda-b8a0-71514a14df31","x3d-selldrug","X3D Sell Drug (งานขายยา)","งานขายของผิดกฎหมาย ผู้รับซื้อลับสุ่มโผล่ตามแมพ มีเวลาจำกัด จ่ายเป็นเงินดำ มีระบบจุด10 ใช้ได้ทั้ง ESX และ standalone","public\u002Fproducts\u002Fx3d-selldrug\u002Fcover\u002F38844a64037d78d6.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-selldrug\u002Fcover\u002F38844a64037d78d6.jpg",[228,152],[572,573,574,575,576,577,578,579,228,555,511,33,41,42,580,581,582,583,584,585,557,586],"ขายยา","งานขายยา","sell drug","drug selling","ของผิดกฎหมาย","เงินดำ","black money","ผู้รับซื้อ","จุด10","จุดสิบ","จุดขายยา","ขายของจุด10","ขายของลับ","ฟอกเงิน","ผู้รับซื้อรายใหญ่","1.2.6","2026-10-12T17:19:19.018788Z","2026-09-24T03:39:03.703963Z",{"id":591,"slug":592,"name":593,"summary":594,"price_thb":26,"license_mode":27,"cover_key":595,"cover_url":596,"category_slugs":597,"tags":598,"latest_version":217,"latest_released_at":618,"published_at":619,"has_docs":520,"config":52,"rent_price_satang":53},"8e4dcdf4-7c70-4185-a3c9-15bb5328c457","x3d-useitem","X3D Use Item (ไอเทมใช้ได้)","ยา ผ้าพันแผล AED เกราะ หมวกกันน็อค ซ่อมรถ กระสุน กล่องสุ่ม อาหารพร้อมบัฟ — ไอเทมใช้ได้ครบชุด ต้องการแค่ ESX","public\u002Fproducts\u002Fx3d-useitem\u002Fcover\u002Fe007251b171e6791.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-useitem\u002Fcover\u002Fe007251b171e6791.jpg",[199,178],[599,600,601,602,603,604,605,606,607,608,609,610,611,33,41,42,612,613,614,615,616,617],"use item","ไอเทมใช้ได้","usable items","ยา","ผ้าพันแผล","aed","ชุบคนล้ม","ซ่อมรถ","กระสุน","กล่องสุ่ม","อาหาร","เสื้อเกราะ","หมวกกันน็อค","บัฟอาหาร","ชุดซ่อมรถ","เติมกระสุน","ยืมเสื้อเกราะ","ใช้ไอเทม","ไอเทมเติมเลือด","2026-10-12T17:19:33.653792Z","2026-09-24T02:05:34.038449Z",{"id":621,"slug":622,"name":623,"summary":624,"price_thb":26,"license_mode":27,"cover_key":625,"cover_url":626,"category_slugs":627,"tags":628,"latest_version":466,"latest_released_at":643,"published_at":644,"has_docs":520,"config":27,"rent_price_satang":53},"8c823bc1-1de6-41b6-bf82-146d5a55eeb5","x3d-progressbar","X3D Progress Bar (หลอดโหลด)","แถบความคืบหน้าธีมพีช ยกเลิกด้วย ESC นับเวลาถอยหลัง ล็อกปุ่มลัดให้อัตโนมัติ รองรับภาษาไทย","public\u002Fproducts\u002Fx3d-progressbar\u002Fcover\u002Ff6830df60f656452.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-progressbar\u002Fcover\u002Ff6830df60f656452.jpg",[31],[629,630,631,632,633,634,635,31,636,33,41,42,637,638,639,640,641,642],"progressbar","progress bar","แถบโหลด","แถบความคืบหน้า","esx_progressbar","esx progressbar","ui","ยกเลิก esc","หลอดโหลด","ฟอนต์ไทย","นับเวลาถอยหลัง","ล็อกปุ่มลัด","โปรเกรสบาร์","แทน esx_progressbar","2026-10-12T17:19:45.934106Z","2026-09-24T01:22:17.768991Z",{"id":646,"slug":647,"name":648,"summary":649,"price_thb":26,"license_mode":27,"cover_key":650,"cover_url":651,"category_slugs":652,"tags":653,"latest_version":217,"latest_released_at":667,"published_at":668,"has_docs":51,"config":52,"rent_price_satang":53},"63ce5efe-2f18-499e-a52b-8155a6cebb84","x3d-slide","X3D Slide (สไลด์)","สไลด์หลบไปข้างหน้าแบบเกมยิง กด Shift พร้อมปุ่มสไลด์ มีคูลดาวน์กันสแปม ตั้งค่าได้ใน config","public\u002Fproducts\u002Fx3d-slide\u002Fcover\u002F8c8383608791f58a.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-slide\u002Fcover\u002F8c8383608791f58a.jpg",[178],[654,655,656,657,658,659,660,661,34,33,41,42,662,663,664,665,666],"slide","สไลด์","slide fivem","ท่าสไลด์","หลบ","dodge","ท่าทาง","คูลดาวน์","สไลด์แบบเกมยิง","Shift สไลด์","ท่าหลบเกมยิง","ปุ่มสไลด์","ปรับแรงสไลด์","2026-10-12T17:20:03.227099Z","2026-09-24T01:21:56.84494Z",{"id":670,"slug":671,"name":672,"summary":673,"price_thb":26,"license_mode":27,"cover_key":674,"cover_url":675,"category_slugs":676,"tags":677,"latest_version":48,"latest_released_at":691,"published_at":692,"has_docs":51,"config":52,"rent_price_satang":53},"9b62b8ed-5911-47a8-b695-3320a6183758","x3d-notify","X3D Notify (แจ้งเตือน)","การ์ดแจ้งเตือน 9 ตำแหน่ง ใส่ไอคอนไอเทมกับกรอบระดับความหายากได้ รองรับภาษาไทยเต็มรูปแบบ","public\u002Fproducts\u002Fx3d-notify\u002Fcover\u002F4a9cbdcedd86a149.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-notify\u002Fcover\u002F4a9cbdcedd86a149.jpg",[31],[678,679,680,681,682,683,635,31,638,684,33,41,42,685,686,687,688,689,690],"notify","notification","แจ้งเตือน","แจ้งเตือน fivem","esx_notify","esx notify","ไอคอนไอเทม","การ์ดแจ้งเตือน","กรอบความหายาก","แจ้งเตือน 9 ตำแหน่ง","สีในข้อความ","แทน esx_notify","แจ้งเตือนไอเทม","2026-10-12T17:20:21.047259Z","2026-09-24T01:21:40.547491Z",{"id":694,"slug":695,"name":696,"summary":697,"price_thb":26,"license_mode":27,"cover_key":698,"cover_url":699,"category_slugs":700,"tags":701,"latest_version":332,"latest_released_at":712,"published_at":713,"has_docs":51,"config":27,"rent_price_satang":53},"e6dc80f3-4f29-4d01-bffa-eba6829c6497","x3d-loadingscreen","X3D Loading Screen (หน้าโหลด)","หน้าโหลดสไตล์เทอร์มินัล มีปุ่ม ENTER WORLD ให้ผู้เล่นกดเองก่อนลงเมือง ไฟล์ HTML เดียว ไม่ต้อง build","public\u002Fproducts\u002Fx3d-loadingscreen\u002Fcover\u002F32f1538b8e18f4db.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-loadingscreen\u002Fcover\u002F32f1538b8e18f4db.jpg",[31],[702,703,704,705,706,707,635,34,33,41,42,708,709,637,710,711],"loading screen","หน้าโหลด","หน้าโหลด fivem","loadingscreen","esx_loadingscreen","enter world","ปุ่มเข้าเมือง","หน้าโหลดเทอร์มินัล","พื้นหลังวิดีโอ","เพลงหน้าโหลด","2026-10-12T17:20:39.269405Z","2026-09-24T00:50:19.336351Z",{"id":715,"slug":716,"name":717,"summary":718,"price_thb":26,"license_mode":27,"cover_key":719,"cover_url":720,"category_slugs":721,"tags":723,"latest_version":739,"latest_released_at":740,"published_at":741,"has_docs":51,"config":27,"rent_price_satang":53},"37f7d9db-f90d-4eed-861b-922da1072932","es-extended","ESX Legacy Core — X3D Build","es_extended ที่เร็วขึ้น กันข้อมูลผู้เล่นหาย และล็อกเศรษฐกิจก่อนรีสตาร์ท ลงทับตัวเดิมได้เลย ชื่อ resource เหมือนเดิมทุกอย่าง","public\u002Fproducts\u002Fes-extended\u002Fcover\u002Fa0b783dc4bf383e9.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fes-extended\u002Fcover\u002Fa0b783dc4bf383e9.jpg",[722],"optimization",[33,724,725,726,727,728,729,730,731,732,41,42,733,734,735,736,737,738],"es_extended","esx legacy","esx core","esx_core","framework","core","esx ฟรี","ดาวน์โหลด esx","esx legacy 1.13","กันข้อมูลหาย","กันดูป","audit log","เซฟผู้เล่น","esx fork","กันตกทะลุแมพ","1.13.6","2026-10-12T17:20:52.726747Z","2026-09-23T13:28:50.819982Z",{"id":743,"slug":744,"name":745,"summary":746,"price_thb":26,"license_mode":27,"cover_key":747,"cover_url":748,"category_slugs":749,"tags":750,"latest_version":764,"latest_released_at":765,"published_at":766,"has_docs":51,"config":52,"rent_price_satang":53},"7c86bf83-0df0-4e59-ab59-461ac4a2bff8","x3d-skin","X3D ตกแต่งตัวละคร","หน้าตกแต่งตัวละคร 77 ช่อง กล้องหมุนซูม ท่าโพส ไฟส่องหน้า ไม่ต้องลง skinchanger ไม่ต้องลงฐานข้อมูล ต่อกับเฟรมเวิร์กไหนก็ได้","public\u002Fproducts\u002Fx3d-skin\u002Fcover\u002Fdb520ac6e2e3d502.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-skin\u002Fcover\u002Fdb520ac6e2e3d502.jpg",[31],[33,34,751,752,753,754,755,756,757,41,42,758,759,760,761,762,763],"ตกแต่งตัวละคร","skin","character customization","skin creator","แต่งตัวละคร","ร้านเสื้อผ้า","ร้านตัดผม","ตู้เสื้อผ้า","ร้านเสริมสวย","ร้านหน้ากาก","ท่าโพส","แต่งหน้า","ไม่ต้องใช้ skinchanger","1.5.4","2026-10-12T17:21:14.159219Z","2026-09-22T04:02:41.988907Z",{"id":22,"slug":23,"name":24,"summary":25,"price_thb":26,"license_mode":27,"cover_key":28,"cover_url":29,"category_slugs":768,"tags":769,"latest_version":48,"latest_released_at":49,"published_at":50,"has_docs":51,"config":52,"rent_price_satang":53},[31],[33,34,35,36,37,38,39,40,41,42,43,44,45,46,47],{"id":771,"slug":772,"name":773,"summary":774,"price_thb":26,"license_mode":27,"cover_key":775,"cover_url":776,"category_slugs":777,"tags":778,"latest_version":791,"latest_released_at":792,"published_at":793,"has_docs":51,"config":52,"rent_price_satang":53},"7a9dd386-11c0-4f21-8c2e-cfa7dc24d15d","x3d-dailylogin","X3D Daily Login (เช็คอินรายวัน)","เช็คอินรายวัน สตรีค + ตารางรางวัลแก้เองได้ทั้งหมด ฟรี ไม่ต้องลงฐานข้อมูล กระเป๋าเต็มไม่เสียของ ต่อกับเฟรมเวิร์กไหนก็ได้","public\u002Fproducts\u002Fx3d-dailylogin\u002Fcover\u002Fffcad7901926aa67.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-dailylogin\u002Fcover\u002Fffcad7901926aa67.jpg",[178],[33,34,779,780,781,782,783,41,42,784,785,786,787,788,789,790],"เช็คอินรายวัน","daily login","daily reward","สตรีค","รางวัลรายวัน","ล็อคอินรายวัน","รางวัลค้างรับ","รับย้อนหลัง","โบนัสเวลาเล่น","รางวัลเข้าเกม","เช็คชื่อรายวัน","ไม่ต้องใช้ฐานข้อมูล","1.4.3","2026-10-12T17:21:47.885233Z","2026-09-20T10:37:48.155794Z",{"id":795,"slug":796,"name":797,"summary":798,"price_thb":26,"license_mode":27,"cover_key":799,"cover_url":800,"category_slugs":801,"tags":802,"latest_version":816,"latest_released_at":817,"published_at":818,"has_docs":51,"config":52,"rent_price_satang":53},"83c7d7cb-bde4-45e3-a552-d7e377e4dc5d","x3d-mailbox","X3D Mailbox (โค้ดรับของ)","กล่องจดหมายออฟไลน์พร้อมของแนบ + โค้ดรับของ \u002Fredeem ฟรี ไม่ต้องลงฐานข้อมูล — ส่งไอเทมและเงินให้ผู้เล่นที่ออฟไลน์ แยกแท็บจดหมาย\u002Fตู้นิรภัย ต่อได้ทุกเฟรมเวิร์ก","public\u002Fproducts\u002Fx3d-mailbox\u002Fcover\u002F743a9e72c1ae8d6d.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-mailbox\u002Fcover\u002F743a9e72c1ae8d6d.jpg",[178],[33,42,803,804,34,805,806,41,807,808,809,810,811,812,813,814,815,790],"mailbox","redeem code","กล่องจดหมาย","ของแนบ","รีดีมโค้ด","ส่งของออฟไลน์","โค้ดรับของ","กรอกโค้ดรับของ","จดหมายออฟไลน์","ส่งของให้คนออฟไลน์","โค้ดแจกของ","แจกของกิจกรรม","ของชดเชย","1.7.2","2026-10-12T17:22:30.892527Z","2026-09-19T19:05:39.140076Z",{"id":820,"slug":821,"name":822,"summary":823,"price_thb":26,"license_mode":27,"cover_key":824,"cover_url":825,"category_slugs":826,"tags":827,"latest_version":466,"latest_released_at":838,"published_at":839,"has_docs":51,"config":52,"rent_price_satang":53},"fd28d581-12ee-43b8-9dfb-aa18defe53be","x3d-carry","X3D Carry (อุ้มศพ)","ระบบอุ้มผู้เล่นฟรี — อุ้มศพ แย่งศพ อุ้มพาดบ่า ขี่หลัง ศพอุ้มได้ไม่ต้องขอ คนเป็นต้องขออนุญาตก่อน เซิร์ฟเวอร์ตัดสินทุกอย่าง UI ภาษาไทย","public\u002Fproducts\u002Fx3d-carry\u002Fcover\u002F133f7c2c2d80c8a5.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-carry\u002Fcover\u002F133f7c2c2d80c8a5.jpg",[178],[33,34,828,829,830,41,42,831,832,833,834,835,836,837],"อุ้มศพ","carry","อุ้มผู้เล่น","แย่งศพ","แบกผู้เล่น","ขี่หลัง","อุ้มพาดบ่า","ลากศพ","เมืองแก๊ง","อุ้มเพื่อน","2026-10-12T17:22:50.777785Z","2026-09-16T13:52:19.956202Z",{"id":841,"slug":842,"name":843,"summary":844,"price_thb":26,"license_mode":27,"cover_key":845,"cover_url":846,"category_slugs":847,"tags":848,"latest_version":116,"latest_released_at":859,"published_at":860,"has_docs":51,"config":52,"rent_price_satang":53},"12cb8b4e-b8db-4ad1-a8a2-bd0679aabec5","x3d-environment","X3D Environment (ล้างแมพ)","ล้างแมพให้สะอาด ฟรี ไฟล์เดียว — ปิด NPC รถ AI scenario กล้อง idle ล้างคราบเลือด ลอยยาง รอยกระสุน และรอยแผลบนตัวผู้เล่น","public\u002Fproducts\u002Fx3d-environment\u002Fcover\u002F7aa9b73e2efb1416.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-environment\u002Fcover\u002F7aa9b73e2efb1416.jpg",[722],[33,34,849,722,850,851,852,41,42,853,854,855,856,857,858],"ล้างแมพ","ลดแลค","เพิ่ม FPS","ปิด NPC","ปิดรถ AI","ล้างคราบเลือด","ลบลอยยาง","ปิดกล้อง idle","ลบ NPC","แมพโล่ง","2026-10-12T17:23:03.418375Z","2026-09-16T09:49:13.991696Z",1,31,{"html":864,"headings":865},"\u003Ch2 id=\"การติดตั้ง\">การติดตั้ง\u003C\u002Fh2>\n\u003Col>\n\u003Cli>แตกไฟล์แล้ว \u003Cstrong>เปลี่ยนชื่อโฟลเดอร์เป็น \u003Ccode>x3d_menu\u003C\u002Fcode>\u003C\u002Fstrong> (สคริปต์อื่นเรียก export ด้วยชื่อนี้)\u003C\u002Fli>\n\u003Cli>วางใน \u003Ccode>resources\u002F\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>เพิ่มใน \u003Ccode>server.cfg\u003C\u002Fcode>:\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cpre>\u003Ccode>ensure x3d_menu\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>เสร็จแล้ว — เก็บข้อมูลเป็นไฟล์ \u003Ccode>data\u002Fmenu.json\u003C\u002Fcode> ในตัว resource เอง ไม่ต้องรัน SQL ใด ๆ\u003C\u002Fp>\n\u003Cp>ผู้เล่นเปิดเมนูด้วย \u003Ccode>\u002Fmenu\u003C\u002Fcode> หรือปุ่ม \u003Cstrong>F4\u003C\u002Fstrong> (\u003Ccode>Config.Key\u003C\u002Fcode>, ว่าง = ไม่ผูกปุ่ม) ปิดเมนูตอนตายหรือค้าง pause menu อัตโนมัติ\u003C\u002Fp>\n\u003Cp>ในพาเนล 4 แท็บ: \u003Cstrong>หน้าแรก\u003C\u002Fstrong> (ประกาศ + แบนเนอร์อีเวนต์ที่กำลังจัด), \u003Cstrong>ระบบ\u003C\u002Fstrong> (ค้นหา, ปักรายการโปรด, การ์ด &quot;ระบบทั้งหมด&quot; กับกริดแยก &quot;ความสะดวก&quot;), \u003Cstrong>คู่มือ\u003C\u002Fstrong> (แยกหมวด + ค้นหา), \u003Cstrong>ตั้งค่า\u003C\u002Fstrong> (สวิตช์ที่ตั้งไว้ + ภาษา th\u002Fen + ธีม peach\u002Fjade + สีกำหนดเอง)\u003C\u002Fp>\n\u003Cp>ไม่ต้องใช้ฐานข้อมูล ไม่ต้องใช้เฟรมเวิร์ก ไม่มีไลเซนส์\u003C\u002Fp>\n\u003Ch2 id=\"ระบบในเมนู-แท็บ-ระบบ\">ระบบในเมนู (แท็บ &quot;ระบบ&quot;)\u003C\u002Fh2>\n\u003Cp>การ์ดที่กดแล้วยิงคำสั่งของสคริปต์อื่น — สั่งจาก \u003Ccode>Config.Systems\u003C\u002Fcode> (seed ครั้งแรกเท่านั้น) หรือ export \u003Ccode>RegisterSystem\u003C\u002Fcode> ตอน runtime:\u003C\u002Fp>\n\u003Cdiv class=\"table-scroll\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>field\u003C\u002Fth>\n\u003Cth>ทำอะไร\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>system_id\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>คีย์ไม่ซ้ำ — ใช้ตรวจ favorite และเป็น id ที่ \u003Ccode>\u002Fmenusystem edit|remove\u003C\u002Fcode> เรียกหา\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>label\u003C\u002Fcode> \u002F \u003Ccode>description\u003C\u002Fcode> \u002F \u003Ccode>icon\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>ข้อความ + ไอคอน heroicons บนการ์ด\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>command\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>คำสั่งที่ยิงตอนกด — ไม่ใส่ = การ์ดกดไม่ได้\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>resource\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>resource ที่การ์ดนี้ผูกอยู่ — ไม่ได้ \u003Ccode>started\u003C\u002Fcode> = การ์ดถูกซ่อน (เว้นแต่ \u003Ccode>always_show\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>always_show\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>โชว์เสมอไม่สนสถานะ resource\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>category\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>'system'\u003C\u002Fcode> (ค่าเริ่มต้น) = การ์ดเต็มรูปแบบ ขึ้นกริด &quot;ระบบทั้งหมด&quot;; \u003Ccode>'qol'\u003C\u002Fcode> = ทางลัดความสะดวก ขึ้นกริดแยก &quot;ความสะดวก&quot; — ค่าอื่นถูกปฏิเสธ\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>sort_order\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>เรียงจากน้อยไปมาก\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n\u003Cp>\u003Ccode>.command\u003C\u002Fcode> ที่ใช้จริงตอนกดมาจาก cache ฝั่ง client ที่ server เพิ่งส่งให้เท่านั้น ไม่เชื่อ command string จาก NUI ตรง ๆ\u003C\u002Fp>\n\u003Cp>ตัวอย่างที่มากับ config: การ์ด \u003Ccode>x3d_mailbox\u003C\u002Fcode>\u002F\u003Ccode>x3d_dailylogin\u003C\u002Fcode> (ซ่อนเองถ้าเซิร์ฟไม่ได้ลง 2 resource นี้) และการ์ด \u003Ccode>qol\u003C\u002Fcode> ตัวอย่าง &quot;ล้างหมุดนำทาง&quot; ที่ใช้งานได้จริงทันที\u003C\u002Fp>\n\u003Cp>รายการโปรด (ดาวที่การ์ด) เป็นของผู้เล่นแต่ละคน เก็บฝั่ง client\u003C\u002Fp>\n\u003Ch2 id=\"ประกาศ-อีเวนต์-แท็บ-หน้าแรก\">ประกาศ + อีเวนต์ (แท็บ &quot;หน้าแรก&quot;)\u003C\u002Fh2>\n\u003Cp>\u003Ccode>Config.Announcements\u003C\u002Fcode> — การ์ดข้อความบนหน้าแรก มี \u003Ccode>title\u003C\u002Fcode>\u002F\u003Ccode>content\u003C\u002Fcode>\u002F\u003Ccode>image_url\u003C\u002Fcode>\u002F\u003Ccode>color\u003C\u002Fcode>\u002F\u003Ccode>is_active\u003C\u002Fcode>\u002F\u003Ccode>sort_order\u003C\u002Fcode>\u003C\u002Fp>\n\u003Cp>\u003Ccode>Config.Events\u003C\u002Fcode> — แบนเนอร์บนสุดของหน้าแรก มี \u003Ccode>start_at\u003C\u002Fcode>\u002F\u003Ccode>end_at\u003C\u002Fcode> เป็น unix timestamp วินาที ไม่ใส่ = ไม่จำกัดฝั่งนั้น นอกช่วงเวลาจะไม่โชว์เลยแม้ \u003Ccode>is_active = true\u003C\u002Fcode> (เซิร์ฟกรองให้ก่อนส่ง) แบนเนอร์แสดง &quot;จะเริ่ม&quot;, &quot;เหลืออีก N วัน&quot; หรือ &quot;กำลังจัด&quot; ตามเวลาปัจจุบัน\u003C\u002Fp>\n\u003Cp>ทั้งสองอย่าง seed จาก config ครั้งแรก แก้ทีหลังผ่าน \u003Ccode>\u002Fmenuannouncement\u003C\u002Fcode> \u002F \u003Ccode>\u002Fmenuevent\u003C\u002Fcode>\u003C\u002Fp>\n\u003Ch2 id=\"คู่มือ-กฎเมือง-แท็บ-คู่มือ\">คู่มือ\u002Fกฎเมือง (แท็บ &quot;คู่มือ&quot;)\u003C\u002Fh2>\n\u003Cp>\u003Ccode>Config.Guide\u003C\u002Fcode> — แถวมี \u003Ccode>category\u003C\u002Fcode>\u002F\u003Ccode>title\u003C\u002Fcode>\u002F\u003Ccode>content\u003C\u002Fcode>\u002F\u003Ccode>image_url\u003C\u002Fcode>\u002F\u003Ccode>is_active\u003C\u002Fcode>\u002F\u003Ccode>sort_order\u003C\u002Fcode> พาเนลจัดกลุ่มตาม \u003Ccode>category\u003C\u002Fcode> เอง + ช่องค้นหา แก้ทีหลังผ่าน \u003Ccode>\u002Fmenuguide\u003C\u002Fcode>\u003C\u002Fp>\n\u003Ch2 id=\"ตั้งค่า-แท็บ-ตั้งค่า\">ตั้งค่า (แท็บ &quot;ตั้งค่า&quot;)\u003C\u002Fh2>\n\u003Cp>\u003Ccode>Config.Settings\u003C\u002Fcode> คือ spec ว่าจะวาด item ไหนบ้าง — ไม่ใช่ค่าจริงของผู้เล่น เพิ่มจาก resource อื่นตอน runtime ได้ด้วย export \u003Ccode>RegisterSetting\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-lua\">exports['x3d_menu']:RegisterSetting('ทั่วไป', {\n    id = 'show_minimap', label = 'แสดงมินิแมป', type = 'toggle', default_value = true,\n})\nexports['x3d_menu']:RegisterSetting('กราฟิก', {\n    id = 'quality', label = 'คุณภาพเอฟเฟกต์', type = 'select', default_value = 'high',\n    options = { { value = 'low', label = 'ต่ำ' }, { value = 'high', label = 'สูง' } },\n})\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Ccode>type\u003C\u002Fcode> มี \u003Ccode>'toggle'\u003C\u002Fcode> \u002F \u003Ccode>'select'\u003C\u002Fcode> \u002F \u003Ccode>'slider'\u003C\u002Fcode> (\u003Ccode>min\u003C\u002Fcode>\u002F\u003Ccode>max\u003C\u002Fcode> สำหรับ slider) ห้ามลงทะเบียนซ้ำ \u003Ccode>id\u003C\u002Fcode> เดิม และ \u003Ccode>id\u003C\u002Fcode> ที่ระบบจองไว้ (\u003Ccode>theme\u003C\u002Fcode>, \u003Ccode>custom_color\u003C\u002Fcode>, \u003Ccode>favorites\u003C\u002Fcode>) ลงทะเบียนทับไม่ได้ — สเปกใหม่ถูก broadcast ให้ client ทันทีเพื่อตั้งค่าเริ่มต้น\u003C\u002Fp>\n\u003Cp>ในพาเนลเอง: ภาษา th\u002Fen (เก็บใน browser \u003Ccode>localStorage\u003C\u002Fcode> — เป็นภาษาของตัวพาเนล ไม่ผ่านเซิร์ฟเวอร์), ธีม peach\u002Fjade กับสีกำหนดเอง — ทุกคนเลือกได้เท่ากัน ไม่มีการล็อกธีมด้วยไอเทม\u003C\u002Fp>\n\u003Ch2 id=\"ที่เก็บข้อมูล-สองที่-คนละหน้าที่\">ที่เก็บข้อมูล — สองที่ คนละหน้าที่\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>ของผู้เล่นแต่ละคน\u003C\u002Fstrong> (ธีม, สีกำหนดเอง, ค่า toggle\u002Fselect\u002Fslider, รายการโปรด) — เก็บฝั่ง client ล้วน ๆ ผ่าน resource KVP แล้ว replicate ขึ้น \u003Ccode>LocalPlayer.state\u003C\u002Fcode> ภายใต้คีย์ \u003Ccode>x3dmenu:&lt;id&gt;\u003C\u002Fcode> resource อื่นอ่านได้ฝั่งเซิร์ฟผ่าน export \u003Ccode>GetSetting\u003C\u002Fcode> หรือ \u003Ccode>Player(src).state['x3dmenu:&lt;id&gt;']\u003C\u002Fcode> ตรง ๆ เป็น \u003Ccode>nil\u003C\u002Fcode> ถ้าผู้เล่นยังไม่เคยตั้งค่า id นั้น\u003C\u002Fp>\n\u003Cp>\u003Cstrong>เนื้อหาที่แอดมินคุม\u003C\u002Fstrong> (ระบบ, ประกาศ, อีเวนต์, คู่มือ) — เก็บฝั่ง server ผ่าน storage adapter ไฟล์ JSON เดี่ยว (\u003Ccode>Config.Storage.File\u003C\u002Fcode>, ค่าเริ่มต้น \u003Ccode>data\u002Fmenu.json\u003C\u002Fcode>) โหลดครั้งเดียวตอน resource เริ่ม เขียนกลับทุก \u003Ccode>Config.Storage.FlushSeconds\u003C\u002Fcode> วินาที และตอนผู้เล่นออก\u002Fresource หยุด ไฟล์เสียอ่านไม่ได้ → ย้ายไปเก็บเป็น \u003Ccode>data\u002Fmenu.broken.json\u003C\u002Fcode> แล้วเริ่มใหม่ \u003Ccode>Config.Systems\u003C\u002Fcode>\u002F\u003Ccode>Config.Events\u003C\u002Fcode>\u002F\u003Ccode>Config.Announcements\u003C\u002Fcode>\u002F\u003Ccode>Config.Guide\u003C\u002Fcode> ถูกนำเข้า storage แค่ครั้งแรกที่ resource เริ่มทำงาน หลังจากนั้นแก้ \u003Ccode>config.lua\u003C\u002Fcode> จะไม่มีผลอีก — แก้ผ่านคำสั่งแอดมินแทน\u003C\u002Fp>\n\u003Cp>อยากใช้ MySQL แทน (เฉพาะเนื้อหาแอดมิน ของผู้เล่นยังอยู่ที่ client KVP เหมือนเดิม):\u003C\u002Fp>\n\u003Col>\n\u003Cli>รัน \u003Ccode>install.sql\u003C\u002Fcode> ผ่าน oxmysql\u003C\u002Fli>\n\u003Cli>เปิด \u003Ccode>addons\u002Fstorage\u002Fserver.lua\u003C\u002Fcode> เลื่อนลงล่างสุด คัดลอกบล็อก oxmysql ทับ 4 ฟังก์ชัน \u003Ccode>Storage.Get\u002FSet\u002FAll\u002FFlush\u003C\u002Fcode> ด้านบน\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2 id=\"exports\">Exports\u003C\u002Fh2>\n\u003Cpre>\u003Ccode class=\"language-lua\">-- การ์ดระบบใหม่ — ปฏิเสธ (คืน false) ถ้า system_id ซ้ำ, def ไม่ครบ, หรือ category ไม่ใช่ 'system'\u002F'qol'\nexports['x3d_menu']:RegisterSystem({\n    system_id = 'my_shop', label = 'ร้านค้า', description = 'ซื้อของใช้ในเมือง',\n    icon = 'i-heroicons-shopping-cart', command = 'openmyshop', resource = 'my_shop',\n    always_show = false, is_active = true, sort_order = 5, category = 'system',\n})\n\nexports['x3d_menu']:RegisterSetting(section, def)   --&gt; boolean\nexports['x3d_menu']:GetSetting(src, 'show_hud')     --&gt; ค่าจริง หรือ nil ถ้ายังไม่เคยตั้ง\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"hook-server-internal-ไม่ใช่-net-event\">Hook — server-internal (ไม่ใช่ net event)\u003C\u002Fh2>\n\u003Cpre>\u003Ccode class=\"language-lua\">AddEventHandler('x3d_menu:onSetting', function(src, id, value)\n    if id == 'show_hud' then\n        print(('player %s set show_hud = %s'):format(src, tostring(value)))\n    end\nend)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>ยิงทุกครั้งที่ผู้เล่นคนไหนเปลี่ยนค่าอะไรใน \u003Ccode>x3dmenu:*\u003C\u002Fcode> (รวม theme\u002Fcustom_color\u002Ffavorites ด้วย ไม่ใช่แค่ค่าใน \u003Ccode>Config.Settings\u003C\u002Fcode>)\u003C\u002Fp>\n\u003Ch2 id=\"คำสั่งแอดมิน\">คำสั่งแอดมิน\u003C\u002Fh2>\n\u003Cp>จัดการ 4 คอลเลกชัน (\u003Ccode>systems\u003C\u002Fcode>\u002F\u003Ccode>events\u003C\u002Fcode>\u002F\u003Ccode>announcements\u003C\u002Fcode>\u002F\u003Ccode>guide\u003C\u002Fcode>) ทีละอย่าง เรียกจาก in-game console ได้เสมอ เรียกจากผู้เล่นในเกมต้องมี ace \u003Ccode>Config.AdminAce\u003C\u002Fcode> (ค่าเริ่มต้น \u003Ccode>x3d_menu.admin\u003C\u002Fcode>):\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u002Fmenusystem add &lt;json&gt;          -- json ต้องมี system_id, label\n\u002Fmenusystem edit &lt;system_id&gt; &lt;json&gt;\n\u002Fmenusystem remove &lt;system_id&gt;\n\u002Fmenusystem list\n\n\u002Fmenuevent add &lt;json&gt;           -- json ต้องมี title\n\u002Fmenuevent edit &lt;id&gt; &lt;json&gt;\n\u002Fmenuevent remove &lt;id&gt;\n\u002Fmenuevent list\n\n\u002Fmenuannouncement add &lt;json&gt;    -- json ต้องมี title\n\u002Fmenuannouncement edit &lt;id&gt; &lt;json&gt;\n\u002Fmenuannouncement remove &lt;id&gt;\n\u002Fmenuannouncement list\n\n\u002Fmenuguide add &lt;json&gt;           -- json ต้องมี title, content, category\n\u002Fmenuguide edit &lt;id&gt; &lt;json&gt;\n\u002Fmenuguide remove &lt;id&gt;\n\u002Fmenuguide list\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Ccode>add\u003C\u002Fcode>\u002F\u003Ccode>edit\u003C\u002Fcode> ตรวจ field ที่พาเนลต้องใช้ทุกครั้ง — ขาดแล้วปฏิเสธ ไม่เขียนลง storage เลย \u003Ccode>edit\u003C\u002Fcode> ห้ามเปลี่ยน id ไปชนแถวอื่นที่มีอยู่แล้ว \u003Ccode>remove\u003C\u002Fcode>\u002F\u003Ccode>edit\u003C\u002Fcode> กับ id ที่ไม่มีจริงตอบกลับว่าไม่พบโดยไม่ throw \u003Ccode>list\u003C\u002Fcode> ส่ง JSON ดิบของทั้งคอลเลกชันกลับไม่แก้อะไรใน storage\u003C\u002Fp>\n\u003Ch2 id=\"ความปลอดภัยที่ทดสอบไว้\">ความปลอดภัยที่ทดสอบไว้\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>คำสั่งของการ์ดมาจาก cache ฝั่ง server เท่านั้น\u003C\u002Fstrong> — ไม่เชื่อ command string ที่ NUI ส่งมาเอง\u003C\u002Fli>\n\u003Cli>\u003Cstrong>แถวจากคำสั่งแอดมินถูกตรวจก่อนเขียนลง storage เสมอ\u003C\u002Fstrong> ทั้งตอน \u003Ccode>add\u003C\u002Fcode> และตอน \u003Ccode>edit\u003C\u002Fcode> (ตรวจผลลัพธ์หลัง merge)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>\u003Ccode>id\u003C\u002Fcode> จองไว้ของระบบ (\u003Ccode>theme\u003C\u002Fcode>\u002F\u003Ccode>custom_color\u003C\u002Fcode>\u002F\u003Ccode>favorites\u003C\u002Fcode>) ลงทะเบียนทับ\u002Fเขียนทับไม่ได้\u003C\u002Fstrong> ทั้งฝั่ง server และ client\u003C\u002Fli>\n\u003Cli>\u003Cstrong>request\u002Fresponse ทุกเส้นทางตอบกลับเสมอแม้โดนปฏิเสธ\u003C\u002Fstrong> — จำกัด 1 ครั้ง\u002Fวินาที\u002Fคนต่อ action ผู้เล่นออกจากเกมแล้ว throttle bucket ของคนนั้นถูกล้างทิ้งทันที\u003C\u002Fli>\n\u003Cli>\u003Cstrong>คีย์ผู้เล่นเป็น identifier ถาวรเสมอ\u003C\u002Fstrong> ไม่ใช่ server id\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cpre>\u003Ccode class=\"language-bash\">pip install lupa\npython tools\u002Flua-test\u002Fx3d_menu_check.py\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"ตั้งค่า-config-lua\">ตั้งค่า (\u003Ccode>config.lua\u003C\u002Fcode>)\u003C\u002Fh2>\n\u003Cdiv class=\"table-scroll\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>ค่า\u003C\u002Fth>\n\u003Cth>ทำอะไร\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Config.Locale\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>ภาษาเริ่มต้นของข้อความฝั่ง Lua (\u003Ccode>th\u003C\u002Fcode>\u002F\u003Ccode>en\u003C\u002Fcode>) — คนละส่วนกับภาษาของพาเนล\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Config.Command\u003C\u002Fcode> \u002F \u003Ccode>Config.Key\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>คำสั่งเปิด (\u003Ccode>\u002Fmenu\u003C\u002Fcode>) และปุ่มลัด (\u003Ccode>F4\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Config.AdminAce\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>ace ที่ใช้สั่ง \u003Ccode>\u002Fmenusystem\u003C\u002Fcode> \u003Ccode>\u002Fmenuevent\u003C\u002Fcode> \u003Ccode>\u002Fmenuannouncement\u003C\u002Fcode> \u003Ccode>\u002Fmenuguide\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Config.Storage.File\u003C\u002Fcode> \u002F \u003Ccode>.FlushSeconds\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>ที่เก็บไฟล์ JSON ของเนื้อหาแอดมิน และความถี่ flush\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Config.SocialLinks\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>ลิงก์โซเชียลบนหน้าแรก\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Config.Systems\u003C\u002Fcode> \u002F \u003Ccode>Config.Events\u003C\u002Fcode> \u002F \u003Ccode>Config.Announcements\u003C\u002Fcode> \u002F \u003Ccode>Config.Guide\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>ข้อมูลตั้งต้น — seed เข้า storage แค่ครั้งเดียว\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Config.Settings\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>spec ของสวิตช์ในแท็บตั้งค่า\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n\u003Ch2 id=\"ช่วยเหลือ\">ช่วยเหลือ\u003C\u002Fh2>\n\u003Cp>Discord: discord.gg\u002Fx3d-developer · เว็บ: x3d-developer.com\u003C\u002Fp>\n",[866,869,872,875,878,881,884,887,890,892,894,897],{"id":867,"text":867,"level":868},"การติดตั้ง",2,{"id":870,"text":871,"level":868},"ระบบในเมนู-แท็บ-ระบบ","ระบบในเมนู (แท็บ \"ระบบ\")",{"id":873,"text":874,"level":868},"ประกาศ-อีเวนต์-แท็บ-หน้าแรก","ประกาศ + อีเวนต์ (แท็บ \"หน้าแรก\")",{"id":876,"text":877,"level":868},"คู่มือ-กฎเมือง-แท็บ-คู่มือ","คู่มือ\u002Fกฎเมือง (แท็บ \"คู่มือ\")",{"id":879,"text":880,"level":868},"ตั้งค่า-แท็บ-ตั้งค่า","ตั้งค่า (แท็บ \"ตั้งค่า\")",{"id":882,"text":883,"level":868},"ที่เก็บข้อมูล-สองที่-คนละหน้าที่","ที่เก็บข้อมูล — สองที่ คนละหน้าที่",{"id":885,"text":886,"level":868},"exports","Exports",{"id":888,"text":889,"level":868},"hook-server-internal-ไม่ใช่-net-event","Hook — server-internal (ไม่ใช่ net event)",{"id":891,"text":891,"level":868},"คำสั่งแอดมิน",{"id":893,"text":893,"level":868},"ความปลอดภัยที่ทดสอบไว้",{"id":895,"text":896,"level":868},"ตั้งค่า-config-lua","ตั้งค่า (config.lua)",{"id":898,"text":898,"level":868},"ช่วยเหลือ",1792316306349]