[{"data":1,"prerenderedAt":97},["ShallowReactive",2],{"site":3,"config-slug-site":15,"config-product-en-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","Pick the door, search the floor, crack the safe, with a cooldown per house and both minigames in the same zip.",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,"A full house robbery loop — **pick the door, search the rooms, crack the safe, walk out**. Each house carries its own cooldown, so nobody farms one address.\n\nRuns on **ESX or standalone**. The minigames come from [X3D Lockpick](\u002Fen\u002Fproducts\u002Fx3d-lockpick\u002F) and [X3D Safe Cracking](\u002Fen\u002Fproducts\u002Fx3d-safe\u002F) (free, separate downloads) or the ox_lib skill check; either one is enough.\n\n---\n\n## Features\n\n- [+] Easy to set up: tune everything in the config, or change it from the web\n- [+] Pick the door, search the rooms, crack the safe, walk out: the full loop\n- [+] Each house has its own cooldown, with a time you set\n- [+] Lockpick minigame with a pin count you set, and a safe-dial minigame\n- [+] Use X3D Lockpick \u002F X3D Safe, or the ox_lib skill check\n- [+] Three keycard colours; each colour opens a different safe loot table\n- [+] Minimum on-duty police before anyone can rob, plus jobs that cannot rob\n- [+] Police alert by chance with a delay, and a red circle on the map\n- [+] Separate floor and safe loot tables, random min-max counts and % chances\n- [+] Loot can be black money or cash, as you set it\n- [+] Add your own houses: entrance, exit, search points and safe position\n- [+] Hook your own scripts in at addons\u002F\n\n---\n\n## How it plays\n\n1. Carry a **keycard** (`keycard_red` \u002F `keycard_gold` \u002F `keycard_silver`), walk up to a house that has not been hit and press **E**\n2. **The lockpick minigame** runs on the door; clear it to get in. The keycard is used up, and a failed attempt can break it\n3. Inside, search points are spread through the rooms. Work through them one at a time for randomised loot\n4. **The safe** has its own dial-cracking minigame and pays better than the floor. The keycard's colour decides which loot table the safe pays from\n5. Press **E** at the door to leave\n\nOnce robbed the house goes on cooldown, and the label out front turns red to say so.\n\n---\n\n## Police and admins\n\n- **On-duty police required**: `Config.RequiredJobs = { police = 2 }`, checked on **E** and again after the minigame\n- **Jobs that cannot rob**: `Config.BlockedJobs = { police = true }`\n- **Police alert**: `Config.Alert` fires on a successful break-in. Chosen jobs get a message and a temporary red circle on the map, with a chance and a delay you set\n- **Admins see every house on the map**: green = robbable · faded red = on cooldown. Turn it on with `Config.AdminBlips = true`, or from the \"House robbery\" page in [X3D Admin Panel](\u002Fen\u002Fproducts\u002Fx3d-adminpanel\u002F), which also lists every house. Players never see them\n\n---\n\n## The loot\n\nSeparate tables for **floor loot** and **the safe**, each with its own items, chances and counts. The safe has one table per keycard colour.\n\nCarry weight is checked before anything is handed over, if your inventory exposes that (off by default).\n\n---\n\n## All of it is configurable\n\nEvery house, the entry and exit portals, the search points, the safe position, search duration, how many pins the lockpick uses, the cooldown — all in `config.lua`. Loot tables live in `sv_config.lua`.\n\nThai and English text, switched with `Config.Locale`.\n\n---\n\n## Labels and progress bar built in\n\n3D labels and the **E** prompt are built in, so no label resource is required. The progress bar and notifications pick whatever you already run (esx_progressbar, ox_lib, esx_notify) and still work when you run none of them.\n","## Installation\n\n1. Drop `x3d_houserobbery` into `resources\u002F`\n2. Pick a minigame source, either one\n   - Download [X3D Lockpick](\u002Fen\u002Fproducts\u002Fx3d-lockpick\u002F) and [X3D Safe Cracking](\u002Fen\u002Fproducts\u002Fx3d-safe\u002F) (free) into `resources\u002F`\n   - or use the ox_lib you already run (skill check)\n3. Add to `server.cfg`, minigames first\n\n```\nensure x3d_lockpick\nensure x3d_safe\nensure x3d_houserobbery\n```\n\n4. Add these items to your items table: keycards `keycard_red` `keycard_gold` `keycard_silver` and safe keys `loot_house_red` `loot_house_gold` `loot_house_silver` (names from `sv_config.lua`)\n\nNo SQL to run.\n\n> Updating from 1.0.0: since 1.2.0 the minigames are no longer inside the zip. If you already moved `x3d_lockpick` and `x3d_safe` into `resources\u002F`, keep using them.\n\n## Config (`config.lua`)\n\n| Option | What it does |\n|---|---|\n| `Config.Framework` | `'auto'` uses ESX when present, otherwise standalone · `'esx'` · `'standalone'` |\n| `Config.Minigame` | `'auto'` uses x3d_lockpick\u002Fx3d_safe when started, otherwise ox_lib · `'x3d'` · `'ox_lib'` |\n| `Config.Locale` | `'th'` or `'en'` |\n| `Config.InventoryResource` | an inventory with a `CanCarryItemSrc` export, to check weight before handing loot over · `false` = no check |\n| `Config.RequiredJobs` | minimum on-duty players per job before a robbery, e.g. `{ police = 2 }` · `{}` = no check |\n| `Config.BlockedJobs` | jobs that cannot rob, e.g. `{ police = true }` |\n| `Config.Alert` | alert the jobs in `jobs` on a break-in · `chance` 0–1 · `delay` in ms · `blipTime` seconds the map circle stays · `jobs = {}` = off |\n| `Config.AdminBlips` | `true` = admins see every house as a map blip on join (with x3d_adminpanel, toggle it from the panel) |\n\n```lua\nConfig.Alert = { jobs = { 'police' }, chance = 1.0, delay = 15000, blipTime = 60 }\n\nConfig.Settings = {\n    lockpickPins       = 3,        -- lockpick pins (ox_lib = number of rounds)\n    safeCombination    = { {0, 20}, {30, 60}, {80, 99} },  -- safe code, one random number per range\n    searchDuration     = 10000,    -- time per search point (ms)\n    cooldownTime       = 3600000,  -- per-house cooldown (ms)\n    portalDrawDistance = 8.0,      -- distance the door label appears\n    zoneDrawDistance   = 3.0,      -- distance the search labels appear\n    interactDistance   = 1.5,      -- E range\n    robControl         = 38,       -- key (38 = E)\n    robControlLabel    = 'E',\n}\n```\n\n### Standalone\n\nWithout ESX, items and money go through ox_inventory when it runs. Admins use ACE: `add_ace group.admin x3d_houserobbery.admin allow`\n\nStandalone has no jobs. If you set `Config.RequiredJobs`, write `Framework.GetJob` in `addons\u002Fframework\u002Fserver.lua`, otherwise nobody can rob.\n\n## Adding houses\n\n`Config.HouseRob` holds one block per house:\n\n- `portal` — the entrance and exit (`type = 'entrance'` \u002F `'exit'`) with `coords`, `destination` and `heading`\n- `robzone` — points inside, `type = 'search'` (loot spot) or `'safe'`\n\nCopying an existing house block and changing the coordinates is the quickest way.\n\n## Loot (`sv_config.lua`)\n\n| Table | What it does |\n|---|---|\n| `Config.Search` | floor loot: `itemName`, `quantity = {min, max}`, `percent` |\n| `Config.Keycard` | each keycard colour (`itemName`) is swapped for a safe key (`getkeyName`) when the door is picked |\n| `Config.Safe` | safe loot per key (`keyName`) · `getItem` always given · `randomItem` rolled by `percent` |\n\nA failed lockpick has a 30% chance to break the keycard. Leftover safe keys are taken back when the player leaves the house.\n\nEvery item has to already exist in your items table; this script does not add items. `money` and `black_money` are paid into the player's money accounts.\n\n## Admin panel\n\nWith [X3D Admin Panel](\u002Fen\u002Fproducts\u002Fx3d-adminpanel\u002F) installed you get a \"House robbery\" page: every house with its status, and a toggle for house blips on the map (green = robbable · faded red = on cooldown). Without the panel everything works the same.\n\n## Exports\n\n```lua\nexports['x3d_houserobbery']:forceExit(src)   -- push a player out of a house (admin, or unsticking)\n```\n\n## Troubleshooting\n\n**E at the door does not start a robbery** — the player needs at least one keycard in the bag.\n\n**No minigame appears** — the console shows `no minigame available`: start `x3d_lockpick`\u002F`x3d_safe` or ox_lib, ensured before the main resource.\n\n**\"Not enough police\"** — `Config.RequiredJobs` counts on-duty players only. Set it to `{}` if you don't want the check.\n\n**Inside but no search points** — that house has no `robzone` set yet.\n\n**Searching gives nothing** — the item names in `sv_config.lua` have to match your items table.\n","Free FiveM house robbery — lockpick, loot and safes","A house robbery system for ESX: pick the lock, search the rooms for random loot, crack the safe, with a per-house cooldown. Both minigames included.",[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",1792316315654]