[{"data":1,"prerenderedAt":97},["ShallowReactive",2],{"site":3,"config-slug-site":15,"config-product-th-x3d-houserobbery":21,"config-public-x3d-houserobbery":89},{"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":52,"latest_released_at":53,"published_at":54,"has_docs":55,"config":56,"rent_price_satang":57,"description_md":58,"docs_md":59,"seo_title":60,"seo_description":61,"media":62,"versions":74},"65d3b2da-6dba-4cd0-9907-06b8e6e54994","x3d-houserobbery","X3D House Robbery (งัดบ้าน)","งัดบ้าน — งัดประตู ค้นของตามพื้น เจาะตู้เซฟ มีคูลดาวน์ต่อหลัง แถมมินิเกมครบในซิปเดียว",0,"none","public\u002Fproducts\u002Fx3d-houserobbery\u002Fcover\u002F73f596dab6db196a.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-houserobbery\u002Fcover\u002F73f596dab6db196a.jpg",[31,32],"housing","gangs",[34,35,36,37,38,39,40,41,32,42,31,43,44,45,46,47,48,49,50,51],"งัดบ้าน","ปล้นบ้าน","house robbery","robbery","ปล้น","ตู้เซฟ","lockpick","มินิเกม","แก๊ง","crime","esx","ฟรี","free","คีย์การ์ด","เจาะตู้เซฟ","เงินแดง","จุดค้นของ","ปล้นบ้านคูลดาวน์","1.2.4","2026-10-12T17:19:03.056031Z","2026-09-24T03:48:06.633278Z",true,"public",null,"งัดบ้านครบวงจร — **งัดประตู → ค้นของตามพื้น → เจาะตู้เซฟ → ออก** แต่ละหลังมีคูลดาวน์ของตัวเอง ปล้นรัวไม่ได้\n\nใช้ได้ทั้ง **ESX และ standalone** มินิเกมใช้ [X3D Lockpick](\u002Fth\u002Fproducts\u002Fx3d-lockpick\u002F) กับ [X3D Safe Cracking](\u002Fth\u002Fproducts\u002Fx3d-safe\u002F) (ฟรี ลงแยก) หรือ skillCheck ของ ox_lib อย่างใดอย่างหนึ่งก็พอ\n\n---\n\n## ฟีเจอร์\n\n- [+] ตั้งค่าง่าย ปรับได้หมดใน config หรือตั้งผ่านเว็บได้เลย\n- [+] งัดประตู ค้นของตามพื้น เจาะตู้เซฟ แล้วออก ครบวงจรในตัว\n- [+] แต่ละหลังมีคูลดาวน์ของตัวเอง ตั้งเวลาเองได้ ปล้นรัวไม่ได้\n- [+] มินิเกมงัดประตู ตั้งจำนวนหมุดได้ และมินิเกมหมุนรหัสตู้เซฟ\n- [+] ใช้มินิเกม X3D Lockpick \u002F X3D Safe หรือ skillCheck ของ ox_lib ก็ได้\n- [+] ต้องพกคีย์การ์ด 3 สี สีต่างกันตู้เซฟจ่ายของต่างกัน พลาดมีโอกาสหัก\n- [+] ต้องมีตำรวจเข้าเวรขั้นต่ำก่อนงัด และห้ามบางอาชีพงัดได้\n- [+] แจ้งตำรวจตามโอกาสที่ตั้ง พร้อมวงสีแดงบนแผนที่ ตั้งเวลาหน่วงได้\n- [+] ตารางของแยกของตามพื้น กับในตู้เซฟ สุ่มจำนวน min-max และตั้ง % โอกาส\n- [+] ของที่ได้เป็นเงินแดง (black_money) หรือเงินเขียวก็ได้ ตั้งเอง\n- [+] เพิ่มบ้านเอง ตั้งจุดเข้า-ออก จุดค้นของ ตำแหน่งตู้เซฟได้\n- [+] เขียนเชื่อมกับสคริปต์อื่นได้ที่ addons\u002F\n\n---\n\n## เล่นยังไง\n\n1. พก **คีย์การ์ด** (`keycard_red` \u002F `keycard_gold` \u002F `keycard_silver`) เดินไปหน้าบ้านที่ยังไม่ถูกปล้น กด **E**\n2. **มินิเกมงัดประตู** ผ่านแล้วเข้าไปได้ คีย์การ์ดถูกใช้ไป ถ้าพลาดมีโอกาสคีย์การ์ดหัก\n3. ข้างในมีจุดค้นของกระจายตามห้อง เดินไปกดค้นทีละจุด ของสุ่มตามตารางที่ตั้งไว้\n4. **ตู้เซฟ** มีมินิเกมหมุนรหัสของตัวเอง ได้ของดีกว่าพื้น สีของคีย์การ์ดกำหนดว่าตู้เซฟจ่ายจากตารางไหน\n5. กด **E** ที่ประตูเพื่อออก\n\nปล้นเสร็จบ้านหลังนั้นเข้าคูลดาวน์ ป้ายหน้าบ้านเปลี่ยนเป็นสีแดงบอกว่าถูกปล้นไปแล้ว\n\n---\n\n## ตำรวจกับแอดมิน\n\n- **ต้องมีตำรวจเข้าเวรก่อนงัด** `Config.RequiredJobs = { police = 2 }` เช็กตอนกด E และเช็กซ้ำหลังมินิเกม\n- **ห้ามบางอาชีพงัด** `Config.BlockedJobs = { police = true }`\n- **แจ้งตำรวจ** `Config.Alert` เมื่อมีคนงัดเข้าบ้านสำเร็จ อาชีพที่เลือกได้ข้อความและวงสีแดงบนแผนที่ชั่วคราว ตั้งโอกาสและเวลาหน่วงได้\n- **แอดมินเห็นบ้านทุกหลังบนแผนที่** เขียว = งัดได้ · แดงจาง = ติดคูลดาวน์ เปิดด้วย `Config.AdminBlips = true` หรือกดจากหน้า \"งัดบ้าน\" ใน [X3D Admin Panel](\u002Fth\u002Fproducts\u002Fx3d-adminpanel\u002F) ที่มีรายชื่อบ้านทั้งหมดด้วย ผู้เล่นทั่วไปไม่เห็น\n\n---\n\n## ของที่ได้\n\nตารางของแยกกันระหว่าง **ของตามพื้น** กับ **ในตู้เซฟ** ตั้งได้ว่าจะออกอะไร โอกาสเท่าไหร่ จำนวนเท่าไหร่ ตู้เซฟมีตารางแยกตามสีคีย์การ์ด\n\nเช็กน้ำหนักกระเป๋าก่อนให้ได้ ถ้าเซิร์ฟมี inventory ที่รองรับ (ปิดไว้เป็นค่าเริ่มต้น)\n\n---\n\n## ปรับได้ทั้งหมด\n\nบ้านแต่ละหลัง จุดเข้า-ออก จุดค้นของ ตำแหน่งตู้เซฟ เวลาค้น จำนวนหมุดของมินิเกมงัด คูลดาวน์ — อยู่ใน `config.lua` ตารางของอยู่ใน `sv_config.lua`\n\nข้อความไทย\u002Fอังกฤษ สลับที่ `Config.Locale`\n\n---\n\n## ป้ายและแถบความคืบหน้าในตัว\n\nป้าย 3D กับปุ่ม **E** มีในตัว ไม่ต้องลง resource ป้ายไหน · แถบความคืบหน้าและแจ้งเตือนเลือกให้เองจากที่เซิร์ฟมี (esx_progressbar \u002F ox_lib \u002F esx_notify) ไม่มีสักตัวก็ยังทำงานครบ\n","## การติดตั้ง\n\n1. วาง `x3d_houserobbery` ลง `resources\u002F`\n2. เลือกมินิเกม อย่างใดอย่างหนึ่ง\n   - ดาวน์โหลด [X3D Lockpick](\u002Fth\u002Fproducts\u002Fx3d-lockpick\u002F) กับ [X3D Safe Cracking](\u002Fth\u002Fproducts\u002Fx3d-safe\u002F) (ฟรี) วางใน `resources\u002F`\n   - หรือใช้ ox_lib ที่เซิร์ฟมีอยู่แล้ว (skillCheck)\n3. เพิ่มใน `server.cfg` มินิเกมต้องมาก่อน\n\n```\nensure x3d_lockpick\nensure x3d_safe\nensure x3d_houserobbery\n```\n\n4. เพิ่มไอเทมในตารางไอเทมของเซิร์ฟ: คีย์การ์ด `keycard_red` `keycard_gold` `keycard_silver` และกุญแจตู้เซฟ `loot_house_red` `loot_house_gold` `loot_house_silver` (ชื่อตาม `sv_config.lua`)\n\nไม่ต้องรัน SQL\n\n> อัปเดตจาก 1.0.0: ตั้งแต่ 1.2.0 มินิเกมไม่ได้อยู่ในซิปแล้ว ถ้าเคยย้าย `x3d_lockpick` กับ `x3d_safe` ออกมาไว้ใน `resources\u002F` แล้ว ใช้ของเดิมต่อได้เลย\n\n## ตั้งค่า (`config.lua`)\n\n| ค่า | ทำอะไร |\n|---|---|\n| `Config.Framework` | `'auto'` ใช้ ESX ถ้ามี ไม่มีก็ standalone · `'esx'` · `'standalone'` |\n| `Config.Minigame` | `'auto'` ใช้ x3d_lockpick\u002Fx3d_safe ถ้า start ไว้ ไม่มีก็ ox_lib · `'x3d'` · `'ox_lib'` |\n| `Config.Locale` | `'th'` หรือ `'en'` |\n| `Config.InventoryResource` | inventory ที่มี export `CanCarryItemSrc` ไว้เช็กน้ำหนักก่อนให้ของ · `false` = ไม่เช็ก |\n| `Config.RequiredJobs` | คนเข้าเวรขั้นต่ำต่ออาชีพก่อนงัด เช่น `{ police = 2 }` · `{}` = ไม่เช็ก |\n| `Config.BlockedJobs` | อาชีพที่ห้ามงัด เช่น `{ police = true }` |\n| `Config.Alert` | แจ้งอาชีพใน `jobs` เมื่อมีคนงัดเข้าบ้าน · `chance` 0–1 · `delay` หน่วง ms · `blipTime` วงบนแผนที่อยู่กี่วินาที · `jobs = {}` = ไม่แจ้ง |\n| `Config.AdminBlips` | `true` = แอดมินเห็น blip บ้านทุกหลังตอนเข้าเกม (มี x3d_adminpanel กดเปิด\u002Fปิดจากแผงได้) |\n\n```lua\nConfig.Alert = { jobs = { 'police' }, chance = 1.0, delay = 15000, blipTime = 60 }\n\nConfig.Settings = {\n    lockpickPins       = 3,        -- จำนวนหมุดมินิเกมงัดประตู (ox_lib = จำนวนรอบ)\n    safeCombination    = { {0, 20}, {30, 60}, {80, 99} },  -- รหัสตู้เซฟ สุ่มหนึ่งตัวเลขต่อช่วง\n    searchDuration     = 10000,    -- เวลาค้นแต่ละจุด (ms)\n    cooldownTime       = 3600000,  -- คูลดาวน์ต่อหลัง (ms)\n    portalDrawDistance = 8.0,      -- ระยะที่ป้ายหน้าบ้านเริ่มโชว์\n    zoneDrawDistance   = 3.0,      -- ระยะที่ป้ายจุดค้นเริ่มโชว์\n    interactDistance   = 1.5,      -- ระยะกด E\n    robControl         = 38,       -- ปุ่ม (38 = E)\n    robControlLabel    = 'E',\n}\n```\n\n### standalone\n\nไม่มี ESX ระบบใช้ ox_inventory เก็บไอเทมและเงิน (ถ้ามี) แอดมินใช้ ACE: `add_ace group.admin x3d_houserobbery.admin allow`\n\nstandalone ไม่มีระบบอาชีพ ถ้าตั้ง `Config.RequiredJobs` ต้องเขียน `Framework.GetJob` ใน `addons\u002Fframework\u002Fserver.lua` เอง ไม่งั้นงัดไม่ได้เลย\n\n## เพิ่มบ้าน\n\n`Config.HouseRob` เก็บบ้านทีละหลัง แต่ละหลังมี\n\n- `portal` — จุดเข้ากับจุดออก (`type = 'entrance'` \u002F `'exit'`) พร้อม `coords` `destination` และ `heading`\n- `robzone` — จุดในบ้าน `type = 'search'` (ค้นของ) หรือ `'safe'` (ตู้เซฟ)\n\nคัดลอกบล็อกของหลังที่มีอยู่แล้วแก้พิกัดเป็นวิธีที่เร็วที่สุด\n\n## ของที่ได้ (`sv_config.lua`)\n\n| ตาราง | ทำอะไร |\n|---|---|\n| `Config.Search` | ของตามพื้น ตั้ง `itemName` `quantity = {min, max}` `percent` |\n| `Config.Keycard` | คีย์การ์ดแต่ละสี (`itemName`) แลกเป็นกุญแจตู้เซฟ (`getkeyName`) ตอนงัดประตูผ่าน |\n| `Config.Safe` | ของในตู้เซฟแยกตามกุญแจ (`keyName`) · `getItem` ได้แน่นอน · `randomItem` สุ่มตาม `percent` |\n\nงัดพลาดมีโอกาส 30% ที่คีย์การ์ดหัก ออกจากบ้านแล้วกุญแจตู้เซฟที่เหลือถูกเก็บคืน\n\nของทุกชิ้นต้องมีอยู่ในตารางไอเทมของเซิร์ฟอยู่แล้ว สคริปต์นี้ไม่ได้เพิ่มไอเทมให้ ส่วน `money` กับ `black_money` จ่ายเข้าบัญชีเงินของผู้เล่น\n\n## แผงแอดมิน\n\nมี [X3D Admin Panel](\u002Fth\u002Fproducts\u002Fx3d-adminpanel\u002F) จะมีหน้า \"งัดบ้าน\" ให้เอง: รายชื่อบ้านทั้งหมดพร้อมสถานะ และปุ่มเปิด\u002Fปิด blip บ้านบนแผนที่ (เขียว = งัดได้ · แดงจาง = ติดคูลดาวน์) ไม่มีแผงก็ทำงานปกติ\n\n## export\n\n```lua\nexports['x3d_houserobbery']:forceExit(src)   -- ดันผู้เล่นออกจากบ้าน (แอดมิน\u002Fกันค้าง)\n```\n\n## ปัญหาที่เจอบ่อย\n\n**กด E หน้าบ้านแล้วงัดไม่ได้** — ต้องมีคีย์การ์ดอย่างน้อยหนึ่งใบในกระเป๋า\n\n**มินิเกมไม่ขึ้น** — คอนโซลขึ้น `no minigame available` แปลว่ายังไม่ได้ start `x3d_lockpick`\u002F`x3d_safe` หรือ ox_lib (`ensure` ก่อนตัวหลัก)\n\n**ขึ้นว่าตำรวจไม่พอ** — `Config.RequiredJobs` นับเฉพาะคนที่เข้าเวร ตั้ง `{}` ถ้าไม่ต้องการ\n\n**เข้าไปแล้วไม่มีจุดค้นของ** — `robzone` ของบ้านหลังนั้นยังไม่ได้ตั้ง\n\n**ค้นแล้วไม่ได้ของ** — ชื่อไอเทมใน `sv_config.lua` ต้องตรงกับตารางไอเทมของเซิร์ฟ\n","งัดบ้าน FiveM ฟรี — งัดประตู ค้นของ เจาะตู้เซฟ","ระบบงัดบ้านสำหรับ ESX งัดประตูด้วยมินิเกม ค้นของตามพื้นบ้าน เจาะตู้เซฟ มีคูลดาวน์ต่อหลัง มินิเกมงัดกับเจาะเซฟแถมมาในซิปเดียว",[63,66,68,70,72],{"kind":64,"url":65},"image","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-houserobbery\u002Fmedia\u002Ff1e5ed86a7504cdf.png",{"kind":64,"url":67},"\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-houserobbery\u002Fmedia\u002Fa0a5ef8cadb59084.png",{"kind":64,"url":69},"\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-houserobbery\u002Fmedia\u002Fbd860a23d1a7a1a8.png",{"kind":64,"url":71},"\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-houserobbery\u002Fmedia\u002Fd758cef6ab88d7bb.png",{"kind":64,"url":73},"\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-houserobbery\u002Fmedia\u002F2d05bf8e7374e570.png",[75,77,81,85],{"version":52,"released_at":53,"changelog_md":76},"### Changed\n\n- Store images now carry English captions for the English store page",{"version":78,"released_at":79,"changelog_md":80},"1.2.2","2026-10-12T03:21:46.142527Z","### Changed\n\n- New store images\n- Shared label library synced (no visible change)",{"version":82,"released_at":83,"changelog_md":84},"1.2.0","2026-10-11T08:44:40.280851Z","### Added\n\n- Admin-only map blips for every house (green = robbable · faded red = on cooldown): `Config.AdminBlips = true` (admins get them on join) or the toggle button on the new x3d_adminpanel page, which also lists them\n- `Config.RequiredJobs`: minimum on-duty players per job (e.g. police) before a robbery can start, checked on [E] and again after the door minigame\n- `Config.BlockedJobs`: jobs that cannot rob\n- `Config.Alert`: alert chosen jobs with a message and a temporary red map circle when someone breaks in\n\n### Changed\n\n- The lockpick and safe minigames no longer ship inside this zip: install X3D Lockpick and X3D Safe Cracking separately (free), or let it fall back to the ox_lib skill check (`Config.Minigame = 'auto'`)\n- Runs on ESX or standalone (`Config.Framework = 'auto'`)",{"version":86,"released_at":87,"changelog_md":88},"1.0.0","2026-09-24T03:48:04.71351Z","First public release.\r\n\r\n### Added\r\n\r\n- Full robbery loop: lockpick the door, search randomised floor loot through the rooms, crack the safe, exit\r\n- Per-house cooldown, with the label out front turning red once a house has been hit\r\n- Separate loot tables for the floor and the safe, each with its own items, chances and counts\r\n- Both minigames bundled under `minigames\u002F` as x3d_lockpick and x3d_safe\r\n- 3D labels with an E-prompt owner arbiter built in, so no label resource is needed\r\n- `Config.InventoryResource` checks carry weight through any inventory exposing CanCarryItemSrc, off by default\r\n- `forceExit` export for admins and for unsticking a player\r\n- Thai and English text on `Config.Locale`",{"slug":23,"version":52,"latest_version":52,"files":90,"options":57},[91,94],{"path":92,"content":93},"config.lua","Config = {}\n\n-- ===== ทั่วไป \u002F General =====\n\n-- เฟรมเวิร์ก: 'auto' ใช้ ESX ถ้ามี es_extended ไม่มีก็ standalone · 'esx' · 'standalone'\n-- Framework: 'auto' uses ESX when es_extended is there, otherwise standalone · 'esx' · 'standalone'\nConfig.Framework = 'auto'\n\n-- มินิเกม: 'auto' ใช้ x3d_lockpick\u002Fx3d_safe ถ้า start ไว้ ไม่มีก็ ox_lib skillCheck\n--          'x3d' บังคับใช้ x3d_lockpick\u002Fx3d_safe เท่านั้น · 'ox_lib' บังคับใช้ ox_lib เท่านั้น\n-- Minigame: 'auto' uses x3d_lockpick\u002Fx3d_safe when started, otherwise the ox_lib skill check · 'x3d' forces x3d only · 'ox_lib' forces ox_lib only\nConfig.Minigame = 'auto'\n\n-- ภาษาของข้อความทั้งหมด ('th' หรือ 'en')\n-- Language of all text ('th' or 'en')\nConfig.Locale = 'th'\n\n-- inventory ที่มี export CanCarryItemSrc ไว้เช็กว่ากระเป๋ารับของไหวไหมก่อนให้ของ\n-- false = ไม่เช็ก ปล่อย inventory จัดการเอง\n-- Inventory resource with a CanCarryItemSrc export, to check the bag can hold the loot before handing it over\n-- false = no check, the inventory handles it\nConfig.InventoryResource = false\n\n-- เปิดข้อความดีบัก (true\u002Ffalse) \u002F Print debug messages (true\u002Ffalse)\nConfig.Debug = false\n\n-- ===== เงื่อนไขและการแจ้งเตือน \u002F Requirements and alerts =====\n\n-- จำนวนคนออนไลน์ขั้นต่ำต่ออาชีพ (นับเฉพาะคนที่เข้าเวร) ก่อนเริ่มงัดได้ เช่น { police = 2, ambulance = 1 } · {} = ไม่เช็ก\n-- standalone ไม่มีอาชีพ: ต้องเขียน Framework.GetJob ใน addons\u002Fframework\u002Fserver.lua เอง ไม่งั้นงัดไม่ได้เลย\n-- Minimum on-duty players per job before a robbery can start, e.g. { police = 2, ambulance = 1 } · {} = no check\n-- Standalone has no jobs: fill Framework.GetJob in addons\u002Fframework\u002Fserver.lua, otherwise nobody can rob\nConfig.RequiredJobs = {}\n\n-- อาชีพที่ห้ามงัดบ้าน เช่น { police = true, ambulance = true }\n-- Jobs that cannot rob, e.g. { police = true, ambulance = true }\nConfig.BlockedJobs = {}\n\n-- แจ้งอาชีพเหล่านี้เมื่อมีคนงัดเข้าบ้านสำเร็จ: chance 0–1, delay = หน่วง ms, blipTime = วงบนแผนที่อยู่กี่วินาที\n-- radius = ขนาดวง, colour = สีวง (id สี blip ของ GTA เช่น 1 แดง 47 ส้ม 5 เหลือง) วงกระพริบจนหมดเวลา · jobs = {} = ไม่แจ้ง\n-- Alert these jobs when someone breaks in: chance 0–1, delay in ms, blipTime = seconds the map circle stays\n-- radius = circle size, colour = GTA blip colour id (1 red, 47 orange, 5 yellow); the circle flashes until it expires · jobs = {} = off\nConfig.Alert = { jobs = {}, chance = 1.0, delay = 15000, blipTime = 60, radius = 80.0, colour = 1 }\n\n-- แอดมินเห็น blip ทุกบ้านบนแผนที่ตอนเข้าเกม (ผู้เล่นทั่วไปไม่เห็น) · มี x3d_adminpanel ก็เปิด\u002Fปิดจากแผงได้ไม่ต้องตั้งตรงนี้\n-- Admins see every house as a map blip on join (players never do) · with x3d_adminpanel you can toggle it there instead\nConfig.AdminBlips = false\n\n-- ===== ค่าการงัด \u002F Robbery settings =====\n\nConfig.Settings = {\n\tlockpickPins       = 3,                                 -- จำนวนหมุดมินิเกมงัดประตู (ox_lib = จำนวนรอบ) \u002F lockpick pins (ox_lib = rounds)\n\tsafeCombination    = { {0, 20}, {30, 60}, {80, 99} },   -- รหัสตู้เซฟ สุ่มหนึ่งตัวเลขต่อช่วง \u002F safe code, one random number per range\n\tsearchDuration     = 10000,                             -- เวลาค้นแต่ละจุด (ms) \u002F time per search point (ms)\n\tcooldownTime       = 3600000,                           -- คูลดาวน์ต่อหลัง (ms) \u002F per-house cooldown (ms)\n\tportalDrawDistance = 8.0,                               -- ระยะที่ป้ายหน้าบ้านเริ่มโชว์ \u002F distance the door label appears\n\tzoneDrawDistance   = 3.0,                               -- ระยะที่ป้ายจุดค้นเริ่มโชว์ \u002F distance the search labels appear\n\tinteractDistance   = 1.5,                               -- ระยะกดปุ่ม \u002F key press range\n\trobControl         = 38,                                -- ปุ่มโต้ตอบ (38 = E) \u002F interact key (38 = E)\n\trobControlLabel    = 'E',                               -- ตัวอักษรที่ขึ้นบนป้าย \u002F letter shown on the label\n}\n\n-- ===== บ้านที่งัดได้ \u002F Houses =====\n-- แต่ละหลัง: name = ชื่อ · portal = จุดเข้า (entrance) และจุดออก (exit) พร้อม coords \u002F destination \u002F heading\n-- robzone = จุดในบ้าน type = 'search' (ค้นของ) หรือ 'safe' (ตู้เซฟ) · onCooldown ระบบใช้เอง ไม่ต้องแก้\n-- เพิ่มบ้านใหม่: คัดลอกบล็อก houserob1 แล้วเปลี่ยนชื่อคีย์และพิกัด\n-- Each house: name = label · portal = entrance and exit with coords \u002F destination \u002F heading\n-- robzone = points inside, type = 'search' (loot spot) or 'safe' · onCooldown is managed by the script, leave it\n-- To add a house: copy the houserob1 block and change the key name and coordinates\n\nConfig.HouseRob = {\n\thouserob1 = {\n\t\tname = \"low_end_appartment\",\n\t\tportal = {\n\t\t\t{\n\t\t\t\ttype = \"entrance\",\n\t\t\t\tcoords = vector3(23.419780, -1896.501098, 22.961182),\n\t\t\t\tdestination = vector3(266.05999755859375, -1007.0399780273438, -100.83000030517578),\n\t\t\t\tonCooldown = false,\n\t\t\t\theading = 348.661408,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype = \"exit\",\n\t\t\t\tcoords = vector3(266.004394, -1007.617554, -101.019776),\n\t\t\t\tdestination = vector3(23.419780, -1896.501098, 23.961182),\n\t\t\t\theading = 320.314972,\n\t\t\t},\n\t\t},\n\n\t\trobzone = {\n\t\t\t{\n\t\t\t\tcoords = vector3(264.764832, -995.485718, -99.014648),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(262.918670, -1002.778016, -99.014648),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(256.905588, -995.934082, -99.014648),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(265.885712, -999.309876, -99.014648),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(256.457154, -1001.498902, -99.014648),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(259.318696, -1003.661560, -99.014648),\n\t\t\t\ttype = \"safe\",\n\t\t\t},\n\t\t},\n\t},\n\thouserob2 = {\n\t\tname = \"medium_end_apartment\",\n\t\tportal = {\n\t\t\t{\n\t\t\t\ttype = \"entrance\",\n\t\t\t\tcoords = vector3(1265.696656, -458.162628, 70.511352),\n\t\t\t\tdestination = vector3(346.57000732421875, -1012.8900146484376, -98.6999969482422),\n\t\t\t\tonCooldown = false,\n\t\t\t\theading = 0.0,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype = \"exit\",\n\t\t\t\tcoords = vector3(346.562622, -1013.182434, -99.199952),\n\t\t\t\tdestination = vector3(1265.696656, -458.162628, 71.511352),\n\t\t\t\theading = 272.125976,\n\t\t\t},\n\t\t},\n\n\t\trobzone = {\n\t\t\t{\n\t\t\t\tcoords = vector3(339.270324, -1003.345032, -99.199952),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(342.567048, -1003.213196, -99.199952),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(338.202210, -994.958252, -99.199952),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(350.215394, -993.599976, -99.199952),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(346.140656, -1001.670350, -99.199952),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(345.283508, -995.815368, -99.199952),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(344.030762, -1001.037354, -99.199952),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(352.760438, -998.756042, -99.199952),\n\t\t\t\ttype = \"safe\",\n\t\t\t},\n\t\t},\n\t},\n\thouserob3 = {\n\t\tname = \"motel\",\n\t\tportal = {\n\t\t\t{\n\t\t\t\ttype = \"entrance\",\n\t\t\t\tcoords = vector3(240.593414, -1687.767090, 29.684204),\n\t\t\t\tdestination = vector3(151.4499969482422, -1007.5800170898438, -98.5),\n\t\t\t\tonCooldown = false,\n\t\t\t\theading = 357.165344,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype = \"exit\",\n\t\t\t\tcoords = vector3(151.437362, -1008.039550, -99.014648),\n\t\t\t\tdestination = vector3(240.593414, -1687.767090, 30.684204),\n\t\t\t\theading = 235.275588,\n\t\t\t},\n\t\t},\n\n\t\trobzone = {\n\t\t\t{\n\t\t\t\tcoords = vector3(151.345062, -1002.975830, -99.014648),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(154.800004, -1005.876954, -99.014648),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(154.338470, -1003.279114, -99.014648),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(154.193406, -1000.694520, -99.014648),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(152.439560, -1000.232972, -99.014648),\n\t\t\t\ttype = \"safe\",\n\t\t\t},\n\t\t},\n\t},\n\thouserob4 = {\n\t\tname = \"document_forgery_office\",\n\t\tportal = {\n\t\t\t{\n\t\t\t\ttype = \"entrance\",\n\t\t\t\tcoords = vector3(1341.243869, -597.349426, 74.690064),\n\t\t\t\tdestination = vector3(1173.5699462890625, -3196.639892578125, -38.9099983215332),\n\t\t\t\tonCooldown = false,\n\t\t\t\theading = 85.039368,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype = \"exit\",\n\t\t\t\tcoords = vector3(1173.784668, -3196.575928, -39.012452),\n\t\t\t\tdestination = vector3(1341.243869, -597.349426, 75.090064),\n\t\t\t\theading = 232.440948,\n\t\t\t},\n\t\t},\n\n\t\trobzone = {\n\t\t\t{\n\t\t\t\tcoords = vector3(1171.898926, -3199.068116, -39.012452),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(1167.692260, -3194.439454, -39.012452),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(1161.758300, -3199.054932, -39.012452),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(1156.562622, -3195.032958, -39.012452),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(1160.268188, -3195.771484, -39.012452),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(1162.734008, -3195.890136, -39.012452),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(1165.556030, -3191.551758, -39.012452),\n\t\t\t\ttype = \"safe\",\n\t\t\t},\n\t\t},\n\t},\n\thouserob5 = {\n\t\tname = \"cocaine_lockup\",\n\t\tportal = {\n\t\t\t{\n\t\t\t\ttype = \"entrance\",\n\t\t\t\tcoords = vector3(-595.542846, 393.019776, 101.868896),\n\t\t\t\tdestination = vector3(1088.530029296875, -3188.030029296875, -38.7900016784668),\n\t\t\t\tonCooldown = false,\n\t\t\t\theading = 175.748032,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype = \"exit\",\n\t\t\t\tcoords = vector3(1088.690064, -3187.463624, -38.995606),\n\t\t\t\tdestination = vector3(-595.542846, 393.019776, 102.868896),\n\t\t\t\theading = 11.338582,\n\t\t\t},\n\t\t},\n\n\t\trobzone = {\n\t\t\t{\n\t\t\t\tcoords = vector3(1088.927490, -3195.125244, -38.995606),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(1090.272584, -3199.107666, -38.995606),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(1093.516480, -3199.107666, -38.995606),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(1094.861572, -3192.962646, -38.995606),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(1096.892334, -3196.246094, -38.995606),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(1086.791260, -3199.437256, -38.995606),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(1097.934082, -3199.344970, -38.995606),\n\t\t\t\ttype = \"safe\",\n\t\t\t},\n\t\t},\n\t},\n\thouserob6 = {\n\t\tname = \"garage_2_car\",\n\t\tportal = {\n\t\t\t{\n\t\t\t\ttype = \"entrance\",\n\t\t\t\tcoords = vector3(1229.670288, -725.169250, 60.940674),\n\t\t\t\tdestination = vector3(178.89999389648438, -1000.219970703125, -98.5999984741211),\n\t\t\t\tonCooldown = false,\n\t\t\t\theading = 178.582688,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype = \"exit\",\n\t\t\t\tcoords = vector3(178.971436, -1000.101074, -99.014648),\n\t\t\t\tdestination = vector3(1229.670288, -725.169250, 61.940674),\n\t\t\t\theading = 93.543304,\n\t\t\t},\n\t\t},\n\n\t\trobzone = {\n\t\t\t{\n\t\t\t\tcoords = vector3(178.997802, -1007.723084, -99.014648),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(177.296708, -999.797790, -99.014648),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(169.371430, -1002.606568, -99.014648),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(168.962632, -1008.013184, -99.014648),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(173.947250, -999.639588, -99.014648),\n\t\t\t\ttype = \"safe\",\n\t\t\t},\n\t\t},\n\t},\n\thouserob7 = {\n\t\tname = \"garage_6_car\",\n\t\tportal = {\n\t\t\t{\n\t\t\t\ttype = \"entrance\",\n\t\t\t\tcoords = vector3(-824.610962, 422.004394, 92.112792),\n\t\t\t\tdestination = vector3(207.2100067138672, -999.260009765625, -98.85),\n\t\t\t\tonCooldown = false,\n\t\t\t\theading = 65.196854,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype = \"exit\",\n\t\t\t\tcoords = vector3(207.230774, -998.967042, -99.0146648),\n\t\t\t\tdestination = vector3(-825.006592, 423.626374, 92.112792),\n\t\t\t\theading = 0.0,\n\t\t\t},\n\t\t},\n\n\t\trobzone = {\n\t\t\t{\n\t\t\t\tcoords = vector3(206.149444, -996.039550, -99.014648),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(202.061538, -994.549438, -99.014648),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(190.443954, -997.621948, -99.014648),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(190.773620, -1002.079102, -99.014648),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(190.826370, -1007.525268, -99.014648),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(206.531860, -1002.804382, -99.014648),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(206.558242, -1006.496704, -99.014648),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(194.808792, -993.494506, -99.014648),\n\t\t\t\ttype = \"safe\",\n\t\t\t},\n\t\t},\n\t},\n\thouserob8 = {\n\t\tname = \"high_towers\",\n\t\tportal = {\n\t\t\t{\n\t\t\t\ttype = \"entrance\",\n\t\t\t\tcoords = vector3(-679.015380, 512.136292, 113.512084),\n\t\t\t\tdestination = vector3(-777.613160, 340.457154, 160.5),\n\t\t\t\tonCooldown = false,\n\t\t\t\theading = 90.708656,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype = \"exit\",\n\t\t\t\tcoords = vector3(-777.613160, 340.457154, 160.000732),\n\t\t\t\tdestination = vector3(-679.015380, 512.136292, 114.512084),\n\t\t\t\theading = 195.590546,\n\t\t\t},\n\t\t},\n\n\t\trobzone = {\n\t\t\t{\n\t\t\t\tcoords = vector3(-778.523072, 332.558228, 160.000732),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(-789.626342, 327.085724, 158.585328),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(-787.331848, 330.131866, 158.585328),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(-801.362610, 326.465942, 158.585328),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(-799.806580, 342.540650, 158.585328),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(-796.958252, 340.747254, 153.783204),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(-794.386840, 336.105500, 153.783204),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(-794.334046, 330.764832, 153.783204),\n\t\t\t\ttype = \"search\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcoords = vector3(-782.149476, 327.837372, 160.000732),\n\t\t\t\ttype = \"safe\",\n\t\t\t},\n\t\t},\n\t},\n}\n",{"path":95,"content":96},"sv_config.lua","-- ===== คีย์การ์ด \u002F Keycards =====\n-- itemName = คีย์การ์ดที่ผู้เล่นต้องพก · getkeyName = กุญแจตู้เซฟที่ได้เมื่องัดประตูผ่าน (ชื่อต้องมีในตารางไอเทมของเซิร์ฟ)\n-- itemName = keycard the player must carry · getkeyName = safe key given when the door is picked (both must exist in your items table)\n\nConfig.Keycard = {\n\t{\n\t\titemName = \"keycard_red\",\n\t\tgetkeyName = \"loot_house_red\",\n\t},\n\t{\n\t\titemName = \"keycard_gold\",\n\t\tgetkeyName = \"loot_house_gold\",\n\t},\n\t{\n\t\titemName = \"keycard_silver\",\n\t\tgetkeyName = \"loot_house_silver\",\n\t},\n}\n\n-- ===== ของในตู้เซฟ \u002F Safe loot =====\n-- keyName = กุญแจที่ใช้เปิด · getItem = ได้แน่นอน quantity = {min, max} · randomItem = สุ่มตาม percent (0.05 = 5%)\n-- keyName = key that opens it · getItem = always given, quantity = {min, max} · randomItem = rolled by percent (0.05 = 5%)\n\nConfig.Safe = {\n\t{\n\t\tkeyName = \"loot_house_red\",\n\t\tgetItem = {\n\t\t\t{ itemName = \"black_money\", quantity = {3000, 5000} },\n\t\t\t{ itemName = \"drug_meth\",      quantity = {1, 1} },\n\t\t\t{ itemName = \"vest\",        quantity = {3, 5} },\n\t\t\t{ itemName = \"microchip\",   quantity = {1, 3} },\n\t\t},\n\t\trandomItem = {\n\t\t\t{ itemName = \"part_gun_pin\",    quantity = 1, percent = 0.05 },\n\t\t\t{ itemName = \"part_gun_spring\", quantity = 1, percent = 0.05 },\n\t\t\t{ itemName = \"part_gun_barrel\", quantity = 1, percent = 0.05 },\n\t\t},\n\t},\n\n\t{\n\t\tkeyName = \"loot_house_gold\",\n\t\tgetItem = {\n\t\t\t{ itemName = \"black_money\", quantity = {2000, 4000} },\n\t\t\t{ itemName = \"drug_meth\",      quantity = {1, 1} },\n\t\t\t{ itemName = \"vest\",        quantity = {2, 4} },\n\t\t\t{ itemName = \"microchip\",   quantity = {1, 2} },\n\t\t},\n\t\trandomItem = {\n\t\t\t{ itemName = \"part_gun_pin\",    quantity = 1, percent = 0.03 },\n\t\t\t{ itemName = \"part_gun_barrel\", quantity = 1, percent = 0.03 },\n\t\t\t{ itemName = \"part_gun_spring\", quantity = 1, percent = 0.03 },\n\t\t},\n\t},\n\n\t{\n\t\tkeyName = \"loot_house_silver\",\n\t\tgetItem = {\n\t\t\t{ itemName = \"black_money\", quantity = {1000, 3000} },\n\t\t\t{ itemName = \"drug_meth\",      quantity = {1, 1} },\n\t\t\t{ itemName = \"vest\",        quantity = {1, 2} },\n\t\t\t{ itemName = \"microchip\",   quantity = {1, 1} },\n\t\t},\n\t\trandomItem = {\n\t\t\t{ itemName = \"part_gun_barrel\", quantity = 1, percent = 0.01 },\n\t\t\t{ itemName = \"part_gun_pin\",    quantity = 1, percent = 0.01 },\n\t\t\t{ itemName = \"part_gun_spring\", quantity = 1, percent = 0.01 },\n\t\t},\n\t},\n}\n\n-- ===== ของตามพื้น \u002F Floor loot =====\n-- itemName = ไอเทมหรือ money \u002F black_money · quantity = {min, max} สุ่มจำนวน · percent = โอกาส 0–1 (1.0 = 100%)\n-- itemName = item, or money \u002F black_money · quantity = {min, max} random count · percent = chance 0–1 (1.0 = 100%)\n\nConfig.Search = {\n\t{ itemName = \"black_money\",    quantity = {500, 1000}, percent = 1.0 },\n\t{ itemName = \"screwdriver_broken\", quantity = {1, 1},      percent = 1.0 },\n\t{ itemName = \"drug_coca_raw\",      quantity = {1, 1},      percent = 1.0 },\n\t{ itemName = \"drug_meth\",         quantity = {1, 1},      percent = 1.0 },\n\t{ itemName = \"vest\",           quantity = {1, 2},      percent = 1.0 },\n}\n",1792316307852]