[{"data":1,"prerenderedAt":111},["ShallowReactive",2],{"site":3,"config-slug-site":15,"config-product-en-x3d-inventory":21,"config-public-x3d-inventory":94},{"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":51,"latest_released_at":52,"published_at":53,"has_docs":54,"config":55,"rent_price_satang":56,"description_md":57,"docs_md":58,"seo_title":59,"seo_description":60,"media":61,"versions":75},"d76ff7ae-ded6-4f39-b63f-734181952698","x3d-inventory","X3D Inventory","Free ESX inventory with big readable text, hotkeys 1–9 saved per character, coupon-based capacity and a storage panel for any vault or trunk script.",0,"none","public\u002Fproducts\u002Fx3d-inventory\u002Fcover\u002Ffc3857e556cf31f3.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-inventory\u002Fcover\u002Ffc3857e556cf31f3.jpg",[31,32],"inventory","hud",[31,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50],"กระเป๋า","กระเป๋า fivem","ui กระเป๋า","esx inventory","inventory fivem","ช่องลัด","hotbar","ไอเทม","nui","esx","ฟรี","free","คูปองขยายช่อง","คูปองน้ำหนัก","ความหายากไอเทม","ค้นกระเป๋า","จำกัดน้ำหนัก","1.1.4","2026-10-12T17:16:22.733967Z","2026-10-05T04:10:14.693356Z",true,"public",null,"# An ESX inventory that reads clearly, runs smoothly and plugs into your other scripts\n\nA free ESX Legacy inventory with a ready Nuxt 4 screen: big readable text, big item icons with rarity colours, drag and drop, stack split and hotkeys 1–9 from the first start.\n\n---\n\n## Features\n\n- [+] Easy to set up: tune everything in config, or edit it from the web builder\n- [+] Hotkeys 1-9 saved per character, with the hotkey bar position you choose\n- [+] Set starting slots and weight, then grow them with slot and weight coupons\n- [+] Value Pack for temporary extra slots and weight, by number of days\n- [+] Rarity colours on every item, set per item\n- [+] Stack size set per item\n- [+] Per-item use cooldown, reduced by job if you want\n- [+] Switch off durability, weight, slot count or stack limit one at a time\n- [+] Choose whether cash, dirty money and bank show as bag slots\n- [+] Police and admins can search a player's bag, with the jobs and groups you set\n- [+] Plug vaults, trunks and stash scripts in through 3 exports\n- [+] Connect other scripts through addons\u002F\n\n---\n\n## Hotkeys 1–9 that stay\n\nDrag an item onto the bottom bar and press its number. Hotkeys are saved with the character in the database, so a new PC or a cleared cache keeps them.\n\n## Capacity that grows\n\nSet the starting slots and weight, raise them permanently with slot and weight coupons, or for a number of days with a Value Pack. The items and their pictures come in `install.sql`.\n\n## Server-side checks\n\n- Every use, give, drop and bag search is checked on the server: amount, distance and permission\n- A lock stops double gives, and each item can have its own cooldown\n- Switch off any part on its own: durability, weight, slot count, stack limit\n\n## Easy to connect\n\n- Any vault, trunk or stash script drives the same storage panel through 3 exports\n- `RegisterDurabilityProvider` lets job scripts show a durability bar on the slot\n- Weapon skins with [X3D Weapon Skins](\u002Fen\u002Fproducts\u002Fx3d-weaponskins\u002F): change skin from the right-click menu, skin tag and tooltip on the slot, nothing to configure\n- Hooks for a sell button, a guide button and vehicle keys; leave one empty to hide it\n\n## Two languages\n\nPick `Config.Locale = 'th'` or `'en'`. Item descriptions take both languages.\n\n**Free** · edit the code as you like · just don't resell it or re-upload it under your own name\n\nItems dropped on the ground get a clear 3D label — Thai item names display correctly — and the pick-up line follows your language (`[E] Pick up` \u002F `[E] เก็บของ`).\n","## Installation\n\nRequires `es_extended` (ESX Legacy) and `oxmysql` · optional: `esx_notify`\n\n1. Unzip and put the `x3d_inventory` folder in `resources\u002F` (keep the folder name — item pictures and exports use it)\n2. Run `install.sql` on your ESX database — it creates the hotkey table and adds example items (existing items are never overwritten)\n3. Add to `server.cfg` after `es_extended`:\n\n```\nensure x3d_inventory\n```\n\n4. Stop your old inventory script so only one runs\n\n## Keys and commands\n\n| Key \u002F command | Does |\n|---|---|\n| `T` | Open\u002Fclose the bag (`Config.OpenKey`) — players can rebind it in FiveM's key bindings |\n| `1`–`9` | Use the item in that hotkey |\n| Double-click \u002F right-click | Use the item \u002F item menu |\n| `\u002Fclosebag` | Force-close the bag if the screen gets stuck (`Config.CloseCommand`) |\n| `\u002Fx3dinv \u003Cid>` | Admin search of another player's bag (`Config.AdminSearchCommand`, groups in `Config.SearchGroups`) |\n\n## Config files\n\n| File | Covers |\n|---|---|\n| `config.lua` | Language, keys\u002Fcommands, feature switches (durability, weight, slot count, stack limit), give\u002Fdrop\u002Fsearch, money, hotkeys, cooldowns |\n| `config\u002Fcatalog.lua` | Items: rarity, stack size, use\u002Fdrop\u002Fgive rules, descriptions |\n| `config\u002Fweapons.lua` | Thai weapon names, weapon rarity\u002Fweight, equip\u002Fholster animations |\n| `config\u002Fcapacity.lua` | Starting slots\u002Fweight, upgrade coupons, Value Packs |\n| `config\u002Fheldobjects.lua` | The item in the hand on give\u002Freceive\u002Fpick up\u002Fdrop |\n| `addons\u002Fhooks\u002F*.lua` | Links to your other scripts (sell button, guide button, vehicle keys) |\n\n## Adding your own items\n\n1. Add the item to the ESX `items` table\n2. Put a lowercase PNG named after the item at `web\u002Fbuild\u002Fimg\u002Fitems\u002F\u003Citem>.png` (92×92, transparent background recommended)\n3. Optionally set its rarity and description in `config\u002Fcatalog.lua`:\n\n```lua\nConfig.ItemRarity = { ['my_item'] = 2 }\nConfig.Descriptions = { item = { ['my_item'] = { th = 'ไอเทมของฉัน', en = 'My item' } } }\n```\n\n## Vaults, trunks and other storage scripts\n\nA storage script calls 3 client exports. The bag then fires the server events you named when the player drags items in or out or closes the panel. Saving and permission checks stay in your storage script:\n\n```lua\nexports.x3d_inventory:SetCurrentVaultData({\n    events = { store = 'myvault:store', take = 'myvault:take', close = 'myvault:close' },\n    args = { vaultId },\n})\nexports.x3d_inventory:UpdateStorageData({ inventory = items, label = 'Vault', weight = 10, maxWeight = 100 })\nexports.x3d_inventory:OpenStorage()\n```\n\nThe server receives `(...args, { name, label, count, weight })`. No `events` = the bag refuses the drag, so nothing is lost.\n\n## Durability from other scripts\n\n```lua\nexports.x3d_inventory:RegisterDurabilityProvider('pickaxe', function(proxy, raw)\n    return { dur = 70, max = 100 }   -- or return a number 0–100\nend)\n```\n\n## Weapon skins (X3D Weapon Skins)\n\nWith [X3D Weapon Skins](\u002Fen\u002Fproducts\u002Fx3d-weaponskins\u002F) running, the bag supports skins with nothing to configure (it reads `GlobalState.x3dWeaponSkins`, no dependency):\n\n- \"Change skin\" in the weapon's right-click menu and a \"Skins\" button in the bag header\n- A skin tag on the slot, and tooltip rows showing which weapon it is a skin of and its damage\n- After a skin change the weapon stays in hand and hotkeys follow\n\nIn X3D Weapon Skins, set `Config.ImagePath` to `nui:\u002F\u002Fx3d_inventory\u002Fweb\u002Fbuild\u002Fimg\u002Fitems\u002F%s.png` and `Hooks.CanCarry` to `exports.x3d_inventory:CanCarryItemSrc`.\n\n## Exports\n\nClient: `OpenInventory` `CloseInventory` `IsInventoryOpen` `OpenStorage` `CloseStorage` `SetCurrentVaultData` `UpdateStorageData` `HideQuickSlots` `ShowQuickSlots` `Notify`\n\nServer: `GetPlayerInventory` `CanCarryItem` `GetFreeSlots` `CheckItemFit` `GetCapacity` `AddSlots` `AddWeight` `GrantValuePack` `HasValuePack` `RegisterDurabilityProvider`\n","Free FiveM ESX Inventory with Hotkeys 1-9","Free FiveM ESX inventory: readable Nuxt UI, hotkeys 1–9 saved per character, slot and weight coupons, server-side checks, Thai and English.",[62,65,67,69,71,73],{"kind":63,"url":64},"image","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-inventory\u002Fmedia\u002Fe69ea70e81e7ba0d.png",{"kind":63,"url":66},"\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-inventory\u002Fmedia\u002F205aa6c1deaa3417.png",{"kind":63,"url":68},"\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-inventory\u002Fmedia\u002F7961287898741eba.png",{"kind":63,"url":70},"\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-inventory\u002Fmedia\u002Fb8da680936dfc566.png",{"kind":63,"url":72},"\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-inventory\u002Fmedia\u002F69cd7c93e1ee5ae2.png",{"kind":63,"url":74},"\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-inventory\u002Fmedia\u002F85359e7579aac422.png",[76,78,82,86,90],{"version":51,"released_at":52,"changelog_md":77},"### Changed\n\n- Store images now carry English captions for the English store page",{"version":79,"released_at":80,"changelog_md":81},"1.1.2","2026-10-12T03:22:26.726847Z","### Changed\n\n- New store images",{"version":83,"released_at":84,"changelog_md":85},"1.1.1","2026-10-11T09:17:12.89037Z","### Changed\n\n- Ground-drop labels use the X3D 3D-text standard; Thai item names no longer render as broken glyphs, and the pick-up line is localized (`[E] เก็บของ` \u002F `[E] Pick up`)",{"version":87,"released_at":88,"changelog_md":89},"1.1.0","2026-10-10T11:46:35.452391Z","### Added\r\n- Works with X3D Weapon Skins (optional): \"Change skin\" right-click entry, \"Skins\" header button, skin tag and \"skin of \u002F damage\" tooltip rows on skinned weapons; the weapon stays in hand and hotkeys follow after a skin change (reads `GlobalState.x3dWeaponSkins`, no dependency)\r\n### Changed\r\n- One font for Thai and English (Kanit), self-hosted\r\n### Fixed\r\n- The Thai font never loaded in game: the build wrote `format(woff2)` unquoted, which FiveM's Chromium 103 rejects, so text fell back to the system font",{"version":91,"released_at":92,"changelog_md":93},"1.0.0","2026-10-05T04:10:06.72292Z","### Added\n- First store release: ESX Legacy inventory with a Nuxt 4 screen, drag and drop, stack split, search, category filters and rarity colours\n- Hotkeys 1–9 saved per character in `x3d_inventory_quickslots`; a new PC or a cleared cache restores them\n- Bag capacity in slots and weight, raised by slot\u002Fweight coupons and Value Packs (`config\u002Fcapacity.lua`)\n- Feature switches for durability, weight, slot count and stack limit\n- Storage panel for any vault or trunk script (`SetCurrentVaultData`, `UpdateStorageData`, `OpenStorage`)\n- `RegisterDurabilityProvider` for other scripts to show a durability bar on a slot\n- Hooks for a sell button, a guide button, an open callback, emote cancel and vehicle keys\n- Thai and English (`Config.Locale`), item descriptions in both languages\n- `install.sql` with the hotkey table and example items that never overwrite existing ones",{"slug":23,"version":51,"latest_version":51,"files":95,"options":56},[96,99,102,105,108],{"path":97,"content":98},"config.lua","-- ═══════════════════════════════════════════════════════════════\n--  x3d_inventory — ตั้งค่าหลัก \u002F main settings\n--  X3D-Developer · https:\u002F\u002Fx3d-developer.com\n--  ไอเทม (ความหายาก, จำนวนต่อช่อง, คำอธิบาย) อยู่ที่ config\u002Fcatalog.lua\n--  Item data (rarity, stack size, descriptions) lives in config\u002Fcatalog.lua\n-- ═══════════════════════════════════════════════════════════════\n\nConfig = {}\n\n-- ===== ทั่วไป \u002F General =====\n\n-- ภาษาของหน้าจอและข้อความแจ้งเตือน: 'th' | 'en'\n-- Language of the screens and messages: 'th' | 'en'\nConfig.Locale = 'th'\n\n-- พิมพ์ log ดีบักลง console (ปิดไว้ตอนเปิดเซิร์ฟจริง)\n-- Print debug logs to the console (keep off on a live server)\nConfig.Debug = false\n\n-- ===== ปุ่มและคำสั่ง \u002F Keys and commands =====\n\n-- ปุ่มเปิด\u002Fปิดกระเป๋า (ผู้เล่นเปลี่ยนเองได้ใน ตั้งค่า > ปุ่มลัด > FiveM)\n-- Bag toggle key (players can rebind it in Settings > Key Bindings > FiveM)\nConfig.OpenKey = 't'\n\n-- คำสั่งปิดกระเป๋า (เผื่อหน้าจอค้าง)\n-- Command that force-closes the bag (in case the screen gets stuck)\nConfig.CloseCommand = 'closebag'\n\n-- คำสั่งแอดมินค้นกระเป๋าผู้เล่นอื่น: \u002Fx3dinv \u003Cid>\n-- Admin command to search another player's bag: \u002Fx3dinv \u003Cid>\nConfig.AdminSearchCommand = 'x3dinv'\n\n-- ===== เปิด\u002Fปิดระบบ \u002F Feature switches =====\n\n-- ความทนทาน: false = ไม่โชว์แถบทนทานเลย แม้สคริปต์อื่นลงทะเบียนไว้ (RegisterDurabilityProvider)\n-- Durability: false = no durability bar at all, even when other scripts register providers\nConfig.Durability = { enabled = true }\n\n-- จำกัดจำนวนต่อช่อง: false = ซ้อนได้ไม่จำกัด\n-- Stack limit per slot: false = unlimited stacking\nConfig.StackLimit = { enabled = true }\n\n-- น้ำหนัก: false = ไม่คิดน้ำหนักและซ่อนแถบน้ำหนัก · max_weight = เพดานสำรองเมื่อไม่มีข้อมูลความจุ\n-- Weight: false = no weight and the weight bar is hidden · max_weight = fallback cap when no capacity data exists\nConfig.Weight = { enabled = true, max_weight = 20000 }\n\n-- จำนวนช่อง: false = ไม่จำกัดช่องและซ่อนตัวนับ · max_slots = ค่าสำรองเมื่อไม่มีข้อมูลความจุ\n-- Slot count: false = unlimited slots and the counter is hidden · max_slots = fallback when no capacity data exists\nConfig.SlotLimit = { enabled = true, max_slots = 34 }\n\n-- เสียงคลิกของเกมตอนกดใช้ไอเทม\n-- Play the game's click sound when an item is used\nConfig.Sounds = true\n\n-- เบลอฉากหลังตอนเปิดกระเป๋า\n-- Blur the game behind the open bag\nConfig.Blur = false\n\n-- เปิดกระเป๋าได้ระหว่างตาย\n-- Allow opening the bag while dead\nConfig.OpenWhileDead = false\n\n-- ห้ามเปิดกระเป๋าระหว่างอยู่ในรถ\n-- Block opening the bag while in a vehicle\nConfig.BlockInVehicle = true\n\n-- ===== ส่ง ทิ้ง ค้น \u002F Give, drop, search =====\n\n-- ระยะส่งของให้ผู้เล่นอื่น (เมตร) — เซิร์ฟเวอร์ตรวจซ้ำ\n-- Give distance in metres — re-checked by the server\nConfig.GiveDistance = 3.0\n\n-- ลากไปถังขยะ = ลบไอเทมทิ้ง\n-- Dragging onto the trash deletes the item\nConfig.DropToTrash = true\n\n-- true = ทิ้งลงพื้นให้คนอื่นเก็บได้ แทนการลบ (ทับ DropToTrash)\n-- true = drop onto the ground for others to pick up instead of deleting (overrides DropToTrash)\nConfig.DropToGround = false\n\n-- ของบนพื้นหายไปหลังกี่วินาที\n-- Seconds before a ground drop disappears\nConfig.GroundDropLifetime = 300\n\n-- ระยะค้นกระเป๋าผู้เล่นอื่น (เมตร) — เซิร์ฟเวอร์ตรวจซ้ำ\n-- Bag search distance in metres — re-checked by the server\nConfig.SearchDistance = 3.0\n\n-- กลุ่มแอดมิน (xPlayer.getGroup()) ที่ค้นกระเป๋าผู้อื่นได้\n-- Admin groups (xPlayer.getGroup()) allowed to search other bags\nConfig.SearchGroups = { admin = true, superadmin = true }\n\n-- อาชีพที่ค้นกระเป๋าผู้อื่นได้\n-- Jobs allowed to search other bags\nConfig.SearchJobs = { police = true }\n\n-- ===== เงินในกระเป๋า \u002F Money in the bag =====\n\n-- บัญชีที่โชว์เป็นช่องในกระเป๋า (bank โชว์ที่กล่องเงินด้านบนเสมอ)\n-- Accounts shown as bag slots (bank always shows in the money box at the top)\nConfig.AccountSlots = { money = true, bank = false, black_money = true }\n\n-- ชื่อบัญชีที่โชว์ (ทับชื่อจาก ESX ซึ่งเป็นภาษาอังกฤษ) \u002F account names shown (override the English ESX labels)\nConfig.AccountLabels = {\n\tmoney = { th = 'เงินสด', en = 'Cash' },\n\tblack_money = { th = 'เงินผิดกฎหมาย', en = 'Dirty Money' },\n\tbank = { th = 'ธนาคาร', en = 'Bank' },\n}\n\n-- น้ำหนักต่อ $1 ของแต่ละบัญชี (ไม่ใส่ = 0)\n-- Weight per $1 for each account (unset = 0)\n-- เช่น \u002F e.g. Config.AccountWeight = { black_money = 0.001 }\nConfig.AccountWeight = {}\n\n-- ความหายากของช่องเงิน 0–4 (ไม่ใส่ = 0)\n-- Rarity of the money slots 0–4 (unset = 0)\nConfig.AccountRarity = { money = 4 }\n\n-- บัญชีที่ห้ามทิ้ง \u002F ห้ามมอบ\n-- Accounts that can't be dropped \u002F given\nConfig.AccountRules = {\n\tdrop = { type = 'block', list = { 'bank' } },\n\tgive = { type = 'block', list = { 'bank' } },\n}\n\n-- ลำดับการเรียงในกระเป๋า (เลขน้อยขึ้นก่อน)\n-- Sort order in the bag (lower number first)\nConfig.SortOrder = { account = 1, personal = 2, house_key = 3, vehicle_key = 4, accessory = 5, item = 6, weapon = 7 }\n\n-- ===== ช่องลัด 1–9 \u002F Hotkeys 1–9 =====\n\n-- alwaysShow = แถบช่องลัดโชว์ตลอดเวลา · showOnKeyPress = โชว์ตอนกดเลข · defaultCooldown = ms ระหว่างการใช้\n-- alwaysShow = hotkey bar always visible · showOnKeyPress = show it when a number is pressed · defaultCooldown = ms between uses\nConfig.QuickSlots = {\n\tenabled = true,\n\talwaysShow = true,\n\tshowOnKeyPress = true,\n\tposition = 'bottom',\t-- 'bottom' | 'bottom-left' | 'bottom-right'\n\tslots = 9,\n\tdefaultCooldown = 3000,\n}\n\n-- คูลดาวน์เฉพาะไอเทม (ms) — 0 \u002F false = ไม่มีคูลดาวน์\n-- Per-item cooldown in ms — 0 \u002F false = none\nConfig.ItemCooldowns = {\n\t-- ['bandage'] = 5000,\n\t-- ['medkit'] = 10000,\n\t['vest'] = 5000,\n\t['vest_training'] = 5000,\n\t['helmet'] = 3000,\n}\n\n-- ไอเทมที่ใช้ได้ทันทีไม่มีคูลดาวน์\n-- Items with no cooldown at all\nConfig.NoCooldownItems = {\n\t-- 'phone',\n\t-- 'radio',\n}\n\n-- ตัวคูณคูลดาวน์ตามอาชีพ (0.5 = เร็วขึ้นครึ่งหนึ่ง)\n-- Cooldown multiplier per job (0.5 = twice as fast)\nConfig.JobCooldownModifiers = {\n\t['ambulance'] = { items = { ['bandage'] = 0.5, ['medkit'] = 0.5 } },\n}\n\n-- ลดคูลดาวน์เพิ่มตามระดับอาชีพ: ตัวคูณ - (grade × gradeReduction) แต่ไม่ต่ำกว่า minModifier\n-- Extra cooldown cut by job grade: multiplier - (grade × gradeReduction), never below minModifier\nConfig.JobGradeCooldownReduction = { enabled = false, gradeReduction = 0.05, minModifier = 0.5 }\n\n-- ===== ต่อกับสคริปต์อื่น \u002F Other scripts =====\n\n-- อีเวนต์ฝั่ง client ที่สั่งปิดกระเป๋าทันที เช่น { 'myserver:restartLock' }\n-- Client events that close the bag at once, e.g. { 'myserver:restartLock' }\nConfig.CloseEvents = {}\n\n-- อีเวนต์ชุบชีวิตที่ไม่ยิง playerSpawned (คืนสถานะอาวุธ) เช่น { 'myrespawn:revived' }\n-- Revive events that never fire playerSpawned (restores weapon state), e.g. { 'myrespawn:revived' }\nConfig.ReviveEvents = {}\n\n-- ชื่อ GlobalState ที่บอกว่าเซิร์ฟเวอร์ล็อกก่อนรีสตาร์ท (ค่า { lock = true }) — nil = ไม่ใช้\n-- GlobalState key marking the pre-restart lock (value { lock = true }) — nil = not used\n-- เช่น \u002F e.g. Config.RestartLockState = 'restartlock'\nConfig.RestartLockState = nil\n\nfunction printDebug(message)\n\tif Config.Debug then print(message) end\nend\n",{"path":100,"content":101},"config\u002Fcapacity.lua","-- ===== ความจุ \u002F Capacity =====\n\n-- ความจุกระเป๋า (ช่อง + น้ำหนัก) ที่ขยายได้ด้วยคูปองและห่อสารพัดประโยชน์\n-- Bag capacity (slots + weight) that grows with coupons and Value Packs\nConfig.Capacity = {\n    -- ช่องเริ่มต้นของผู้เล่นใหม่ \u002F starting slots for a new player\n    baseSlots     = 34,\n    -- เพดานช่องสูงสุด ขยายเท่าไรก็เกินนี้ไม่ได้ \u002F slot cap, no upgrade goes past it\n    hardMaxSlots  = 189,\n    -- น้ำหนักเริ่มต้นของผู้เล่นใหม่ \u002F starting weight for a new player\n    baseWeight    = 3000,\n    -- เพดานน้ำหนักสูงสุด ขยายเท่าไรก็เกินนี้ไม่ได้ \u002F weight cap, no upgrade goes past it\n    hardMaxWeight = 20000,\n    vpSlots       = 16,    -- โบนัสช่องจาก Value Pack ขณะออกฤทธิ์ \u002F slot bonus while a Value Pack is active\n    vpWeight      = 1000,  -- โบนัสน้ำหนักจาก Value Pack ขณะออกฤทธิ์ \u002F weight bonus while a Value Pack is active\n}\n\n-- ===== คูปองขยายช่อง \u002F Slot coupons =====\n\n-- ไอเทมคูปองขยายช่อง (ถาวร) -> จำนวนช่องที่เพิ่ม\n-- Slot coupon items (permanent) -> slots added\n-- เช่น \u002F e.g. ['slot_coupon_1'] = 1\nConfig.SlotCoupons = {\n    ['slot_coupon_1']  = 1,\n    ['slot_coupon_4']  = 4,\n    ['slot_coupon_8']  = 8,\n    ['slot_coupon_16'] = 16,\n}\n\n-- ===== คูปองขยายน้ำหนัก \u002F Weight coupons =====\n\n-- ไอเทมคูปองขยายน้ำหนัก (ถาวร) -> น้ำหนักที่เพิ่ม (LT)\n-- Weight coupon items (permanent) -> weight added (LT)\n-- เช่น \u002F e.g. ['weight_coupon_50'] = 50\nConfig.WeightCoupons = {\n    ['weight_coupon_50']  = 50,\n    ['weight_coupon_100'] = 100,\n    ['weight_coupon_200'] = 200,\n    ['weight_coupon_500'] = 500,\n}\n\n-- ===== ห่อสารพัดประโยชน์ \u002F Value Pack =====\n\n-- ห่อสารพัดประโยชน์ (Value Pack) -> จำนวนวันที่ออกฤทธิ์\n-- Value Pack items -> days of effect\n-- เช่น \u002F e.g. ['valuepack_7'] = 7\nConfig.ValuePacks = {\n    ['valuepack_7']  = 7,\n    ['valuepack_15'] = 15,\n    ['valuepack_30'] = 30,\n}\n",{"path":103,"content":104},"config\u002Fcatalog.lua","-- ═══════════════════════════════════════════════════════════════\n--  x3d_inventory — ข้อมูลไอเทม \u002F item data\n--  ตัวอย่างตรงกับไอเทมใน install.sql — เพิ่มไอเทมของเซิร์ฟเวอร์คุณได้เลย\n--  The examples match the items in install.sql — add your server's own items\n--  รูปไอเทม: web\u002Fbuild\u002Fimg\u002Fitems\u002F\u003Cชื่อไอเทม>.png  ·  item pictures: web\u002Fbuild\u002Fimg\u002Fitems\u002F\u003Citem>.png\n-- ═══════════════════════════════════════════════════════════════\n\n-- ===== รูปไอเทม \u002F Item pictures =====\n\n-- นามสกุลรูปไอเทม และรายการที่ใช้นามสกุลอื่น\n-- Item picture extension, and items that use a different one\nConfig.ImageExtension = 'png'\nConfig.ImageExtensionFor = {\n\t-- ['my_item'] = 'webp',\n}\n\n-- ===== จำนวนต่อช่อง \u002F Stack sizes =====\n\n-- จำนวนสูงสุดต่อช่องของไอเทมที่ไม่ได้ระบุ \u002F max stack for items not listed below\nConfig.DefaultStackSize = 100\n\n-- จำนวนสูงสุดต่อช่องรายไอเทม \u002F max stack per item\nConfig.StackSize = {\n\t['food_lunchbox'] = 10,\n\t['drink_water'] = 10,\n\t['medkit'] = 5,\n\t['aed'] = 1,\n}\n\n-- ===== ความหายาก \u002F Rarity =====\n\n-- ความหายาก 0–4 (สามัญ → ตำนาน) · ไม่ใส่ = ใช้คอลัมน์ rare ในตาราง items\n-- Rarity 0–4 (common → legendary) · unset = the `rare` column of the items table\nConfig.ItemRarity = {\n\t['food_lunchbox'] = 0,\n\t['drink_water'] = 0,\n\t['milk'] = 0,\n\t['bandage'] = 0,\n\t['painkiller'] = 1,\n\t['medkit'] = 1,\n\t['adrenaline'] = 2,\n\t['aed'] = 3,\n\t['lockpick'] = 1,\n\t['toolkit'] = 1,\n\t['fixkit'] = 2,\n\t['radio'] = 1,\n\t['phone'] = 1,\n\t['gadget_parachute'] = 1,\n\t['slot_coupon_1'] = 1,\n\t['slot_coupon_4'] = 2,\n\t['slot_coupon_8'] = 3,\n\t['slot_coupon_16'] = 4,\n\t['weight_coupon_50'] = 1,\n\t['weight_coupon_100'] = 2,\n\t['weight_coupon_200'] = 3,\n\t['weight_coupon_500'] = 4,\n\t['valuepack_7'] = 2,\n\t['valuepack_15'] = 3,\n\t['valuepack_30'] = 4,\n}\n\n-- ===== กฎการใช้ \u002F Use rules =====\n\n-- ไอเทมที่ปิดกระเป๋าทันทีหลังกดใช้ (เช่น ของที่มีแอนิเมชัน)\n-- Items that close the bag right after use (e.g. ones that play an animation)\nConfig.CloseOnUseItems = {\n\t['painkiller'] = true,\n\t['bandage'] = true,\n\t['aed'] = true,\n\t['fixkit'] = true,\n}\n\n-- เช่น \u002F e.g. use = { type = 'block', list = { 'lockpick' } }\n-- กฎการใช้ \u002F ทิ้ง \u002F มอบ: type 'block' = ห้ามเฉพาะในรายการ · 'allow' = อนุญาตเฉพาะในรายการ\n-- Use \u002F drop \u002F give rules: type 'block' = block only the listed items · 'allow' = allow only the listed items\nConfig.ItemRules = {\n\tuse = { type = 'block', list = {} },\n\tdrop = { type = 'block', list = {} },\n\tgive = { type = 'block', list = {} },\n}\n\n-- ===== คำอธิบายไอเทม \u002F Item descriptions =====\n-- ทุกข้อความใส่ได้ทั้ง 'ข้อความเดียว' หรือ { th = '...', en = '...' } (เลือกตาม Config.Locale)\n-- Every text accepts a plain 'string' or { th = '...', en = '...' } (picked by Config.Locale)\n\n-- โชว์คำอธิบายในกล่องข้อมูลไอเทม \u002F show descriptions in the item tooltip\nConfig.ShowDescriptions = true\n\n-- คำอธิบายเริ่มต้นตามชนิด \u002F default text per type\nConfig.DescriptionDefaults = {\n\titem = { th = 'สิ่งของทั่วไปภายในเมือง', en = 'A general item used around the city.' },\n\tweapon = { th = 'อาวุธสำหรับป้องกันตัว โปรดใช้ตามกฎของเมือง', en = 'A weapon for self-defence. Follow your server rules.' },\n}\n\n-- คำอธิบายตามคำนำหน้าชื่อไอเทม (คำนำหน้ายาวกว่าชนะ) \u002F text by item-name prefix (the longest prefix wins)\nConfig.DescriptionPrefixes = {\n\t['slot_coupon_'] = { th = 'คูปองเพิ่มช่องกระเป๋าถาวร ใช้แล้วหายไป', en = 'Adds bag slots permanently. Consumed on use.' },\n\t['weight_coupon_'] = { th = 'คูปองเพิ่มน้ำหนักกระเป๋าถาวร ใช้แล้วหายไป', en = 'Adds bag weight permanently. Consumed on use.' },\n\t['valuepack_'] = { th = 'ห่อสารพัดประโยชน์ เพิ่มช่องและน้ำหนักกระเป๋าตามจำนวนวัน', en = 'Value Pack: extra bag slots and weight for a number of days.' },\n\t['weapon_'] = { th = 'อาวุธในรูปแบบไอเทม ใช้งานเพื่อหยิบออกมาถือ', en = 'A weapon stored as an item. Use it to equip.' },\n}\n\n-- คำอธิบายรายไอเทม (ทับคำนำหน้า) \u002F per-item text (overrides the prefix)\nConfig.Descriptions = {\n\titem = {\n\t\t['food_lunchbox'] = { th = 'ข้าวกล่อง กินเพื่อเติมหลอดอาหาร', en = 'A lunchbox. Eat it to fill your hunger bar.' },\n\t\t['drink_water'] = { th = 'น้ำดื่มสะอาด ดื่มเพื่อเติมหลอดน้ำ', en = 'Clean drinking water. Fills your thirst bar.' },\n\t\t['milk'] = { th = 'นมพร้อมดื่ม เติมหลอดอาหารและน้ำเล็กน้อย', en = 'Ready-to-drink milk. Fills a little hunger and thirst.' },\n\t\t['bandage'] = { th = 'ผ้าพันแผล ฟื้นฟูเลือดเล็กน้อย', en = 'A bandage. Restores a little health.' },\n\t\t['painkiller'] = { th = 'ยาแก้ปวด ฟื้นฟูเลือดปานกลาง', en = 'Painkillers. Restore some health.' },\n\t\t['medkit'] = { th = 'ชุดปฐมพยาบาล ฟื้นฟูเลือดจำนวนมาก', en = 'A medkit. Restores a lot of health.' },\n\t\t['adrenaline'] = { th = 'อะดรีนาลีน กระตุ้นร่างกายให้ฟื้นตัวทันที', en = 'Adrenaline. An instant recovery boost.' },\n\t\t['aed'] = { th = 'เครื่องกระตุกหัวใจ ใช้ช่วยผู้เล่นที่สลบ', en = 'A defibrillator. Revives a downed player.' },\n\t\t['lockpick'] = { th = 'อุปกรณ์สะเดาะกุญแจ', en = 'A lockpick.' },\n\t\t['toolkit'] = { th = 'ชุดเครื่องมือช่าง ใช้ในงานซ่อมบำรุง', en = 'A toolkit for repair jobs.' },\n\t\t['fixkit'] = { th = 'ชุดซ่อมรถ ใช้ซ่อมเครื่องยนต์', en = 'A repair kit. Fixes a vehicle engine.' },\n\t\t['radio'] = { th = 'วิทยุสื่อสาร พูดคุยตามช่องความถี่', en = 'A radio. Talk on a frequency.' },\n\t\t['phone'] = { th = 'โทรศัพท์มือถือ', en = 'A mobile phone.' },\n\t\t['gadget_parachute'] = { th = 'ร่มชูชีพ ใช้กางกลางอากาศ', en = 'A parachute. Deploy it in the air.' },\n\t},\n\taccount = {\n\t\t['money'] = { th = 'เงินสดที่ใช้จ่ายภายในเมือง', en = 'Cash to spend around the city.' },\n\t\t['black_money'] = { th = 'เงินผิดกฎหมาย ระวังการตรวจค้น', en = 'Dirty money. Watch out for searches.' },\n\t},\n\tkey = {\n\t\t['vehicle_key'] = { th = 'กุญแจสำหรับยานพาหนะส่วนตัว ใช้ล็อคและปลดล็อครถ', en = 'A key for your own vehicle. Locks and unlocks it.' },\n\t},\n}\n",{"path":106,"content":107},"config\u002Fheldobjects.lua","-- ===== วัตถุในมือ \u002F Held objects =====\n-- แสดงวัตถุ\u002Fรูปไอเทมในมือตอน ส่ง-รับ-เก็บ-ทิ้ง ไอเทม\n-- Shows the item (prop or picture) in the hand on give \u002F receive \u002F pick up \u002F drop\n-- ไอเทมที่ไม่มี model ในตาราง จะแสดงรูปไอเทมจากกระเป๋า (web\u002Fbuild\u002Fimg\u002Fitems) แทน\n-- Items with no model entry show the bag picture instead (web\u002Fbuild\u002Fimg\u002Fitems)\n\nConfig.HeldObjects = {\n    -- เปิด\u002Fปิดระบบวัตถุในมือ \u002F turn held objects on or off\n    Enable = true,\n\n    -- ไอเทมที่ไม่ต้องแสดงวัตถุ\u002Fรูปภาพ (ยังเล่นท่าทางตามปกติ) เช่น { black_money = true }\n    -- Items that show no object or picture (the animation still plays), e.g. { black_money = true }\n    Blacklist = {},\n\n    -- true = แสดงรูปไอเทมจากกระเป๋าเสมอ (ไม่ใช้โมเดล prop ในตาราง Items\u002FPrefix)\n    -- true = always show the bag picture (ignore the prop models in Items\u002FPrefix)\n    ImageOnly = true,\n\n    -- รูปไอเทมในมือ: Bone = กระดูกที่ติด, Width = ขนาด, Distance = ระยะที่มองเห็น (เมตร)\n    -- Picture in hand: Bone = attach bone, Width = size, Distance = visible range (meters)\n    Image = {\n        Enable = true,\n        Bone = 28422,\n        Width = 0.09,\n        Distance = 25.0,\n    },\n\n    -- เสียงตอนรับของ\u002Fเก็บของ \u002F sound when receiving or picking up\n    Sound = { name = 'PICK_UP', set = 'HUD_FRONTEND_DEFAULT_SOUNDSET' },\n\n    -- ผู้เล่นหันมองหน้ากันตอนส่ง\u002Fรับ \u002F players look at each other while giving and receiving\n    Stare = true,\n\n    -- ท่าของแต่ละการกระทำ: show\u002Fhide = ms ที่วัตถุปรากฏ\u002Fหาย, steps = ท่าต่อเนื่อง\n    -- Animation per action: show\u002Fhide = ms when the object appears\u002Fdisappears, steps = chained animations\n    Anims = {\n        give = {\n            show = 400,\n            steps = {\n                { dict = 'reaction@intimidation@1h', anim = 'intro', ms = 900, flag = 48 },\n                { dict = 'mp_common', anim = 'givetake1_a', ms = 1200, flag = 48 },\n            },\n        },\n        receive = {\n            delay = 1100,\n            show = 300,\n            sound = true,\n            steps = {\n                { dict = 'mp_common', anim = 'givetake1_b', ms = 1200, flag = 48 },\n                { dict = 'reaction@intimidation@1h', anim = 'outro', ms = 900, flag = 48 },\n            },\n        },\n        pickup = {\n            show = 500,\n            sound = true,\n            steps = {\n                { dict = 'pickup_object', anim = 'pickup_low', ms = 900, flag = 0 },\n                { dict = 'reaction@intimidation@1h', anim = 'outro', ms = 900, flag = 48 },\n            },\n        },\n        drop = {\n            show = 400,\n            hide = 1500,\n            steps = {\n                { dict = 'reaction@intimidation@1h', anim = 'intro', ms = 900, flag = 48 },\n                { dict = 'pickup_object', anim = 'putdown_low', ms = 900, flag = 0 },\n            },\n        },\n    },\n\n    -- ตำแหน่งวัตถุที่มือเมื่อไม่ได้ระบุ (กระดูก ตำแหน่ง หมุน)\n    -- Default hand placement when not given (bone, position, rotation)\n    DefaultBone = 57005,\n    DefaultPos = vector3(0.10, 0.02, -0.02),\n    DefaultRot = vector3(0.0, 0.0, 0.0),\n\n    -- ตรวจตามลำดับ (prefix ยาวไว้ก่อน) — { prefix, { model, bone?, pos?, rot? } }\n    -- Checked in order (longest prefix first) — { prefix, { model, bone?, pos?, rot? } }\n    Prefix = {\n        { 'drug_meth', { model = 'prop_meth_bag_01' } },\n        { 'drug_weed', { model = 'prop_weed_bottle', bone = 28422 } },\n        { 'drug_', { model = 'prop_mp_drug_package' } },\n        { 'pickaxe_', { model = 'prop_tool_pickaxe', pos = vector3(0.09, 0.0, 0.0), rot = vector3(0.0, 90.0, 0.0) } },\n        { 'axe_', { model = 'prop_tool_fireaxe', pos = vector3(0.09, 0.0, 0.0), rot = vector3(0.0, 90.0, 0.0) } },\n        { 'hoe_', { model = 'prop_tool_rake', pos = vector3(0.09, 0.0, 0.0), rot = vector3(0.0, 90.0, 0.0) } },\n        { 'sickle_', { model = 'w_me_machette_lr', bone = 28422, pos = vector3(0.0, 0.0, 0.0) } },\n        { 'huntknife_', { model = 'w_me_knife_01', bone = 28422, pos = vector3(0.0, 0.0, 0.0) } },\n        { 'livestock_', { model = 'prop_bucket_01a' } },\n        { 'rod_', { model = 'prop_fishing_rod_01', bone = 28422, pos = vector3(0.0, 0.0, 0.0) } },\n        { 'trade_crate_', { model = 'prop_cs_cardbox_01', pos = vector3(0.0, 0.0, -0.12) } },\n        { 'box_', { model = 'prop_cs_package_01' } },\n        { 'gacha_', { model = 'prop_cs_package_01' } },\n        { 'dish_', { model = 'prop_cs_bowl_01b', bone = 28422 } },\n        { 'meal_', { model = 'prop_paper_bag_small' } },\n        { 'meat_', { model = 'prop_cs_steak', bone = 28422 } },\n        { 'keycard_', { model = 'prop_cs_swipe_card', bone = 28422, pos = vector3(0.02, 0.0, 0.0) } },\n        { 'card_', { model = 'prop_cs_credit_card', bone = 28422, pos = vector3(0.02, 0.0, 0.0) } },\n    },\n\n    -- โมเดลรายไอเทม (ทับ Prefix) เช่น medkit = { model = 'prop_ld_health_pack' }\n    -- Per-item models (override Prefix), e.g. medkit = { model = 'prop_ld_health_pack' }\n    Items = {\n        medkit = { model = 'prop_ld_health_pack' },\n        painkiller = { model = 'prop_cs_pills', bone = 28422 },\n        drink_water = { model = 'prop_ld_flow_bottle', bone = 28422 },\n        milk = { model = 'prop_ld_flow_bottle', bone = 28422 },\n        milk_raw = { model = 'prop_ld_flow_bottle', bone = 28422 },\n        gold_bar = { model = 'prop_gold_bar', bone = 28422 },\n        ingot_gold = { model = 'prop_gold_bar', bone = 28422 },\n        gem_diamond = { model = 'h4_prop_h4_diamond_01a', bone = 28422 },\n        gem_ruby = { model = 'prop_jewel_04b', bone = 28422 },\n        gem_crystal = { model = 'prop_jewel_02b', bone = 28422 },\n        phone = { model = 'prop_npc_phone_02', bone = 28422, pos = vector3(0.0, 0.0, 0.0) },\n        radio = { model = 'prop_cs_hand_radio', bone = 28422, pos = vector3(0.0, 0.0, 0.0) },\n        megaphone = { model = 'prop_megaphone_01' },\n        lockpick = { model = 'prop_tool_screwdvr01', bone = 28422 },\n        screwdriver = { model = 'prop_tool_screwdvr01', bone = 28422 },\n        screwdriver_broken = { model = 'prop_tool_screwdvr01', bone = 28422 },\n        fixkit = { model = 'prop_tool_wrench', bone = 28422 },\n        tool_repair_kit = { model = 'prop_tool_wrench', bone = 28422 },\n        work_kit = { model = 'prop_tool_hammer', bone = 28422 },\n        toolkit = { model = 'prop_toolchest_01', pos = vector3(0.05, 0.0, -0.1) },\n        vehicle_key = { model = 'p_car_keys_01', bone = 28422, pos = vector3(0.0, 0.0, 0.0) },\n        key_gang = { model = 'prop_cs_keys_01', bone = 28422, pos = vector3(0.0, 0.0, 0.0) },\n        license_gun = { model = 'prop_cs_documents_01', bone = 28422 },\n        maid_contract = { model = 'prop_cs_documents_01', bone = 28422 },\n        ammo_box = { model = 'prop_box_ammo03a' },\n        bullet = { model = 'prop_ld_ammo_pack_01', bone = 28422 },\n        gadget_parachute = { model = 'p_parachute_s', pos = vector3(0.05, 0.0, -0.15) },\n        scuba = { model = 'p_s_scuba_mask_s', bone = 28422 },\n        vest = { model = 'prop_bodyarmour_03', pos = vector3(0.05, 0.0, -0.1) },\n        vest_training = { model = 'prop_bodyarmour_03', pos = vector3(0.05, 0.0, -0.1) },\n        player_mask = { model = 'prop_mask_specops', bone = 28422 },\n        narcotics_brick = { model = 'prop_mp_drug_package' },\n        food_lunchbox = { model = 'prop_paper_bag_small' },\n        cement = { model = 'prop_cs_fertilizer', pos = vector3(0.05, 0.0, -0.1) },\n    },\n}\n",{"path":109,"content":110},"config\u002Fweapons.lua","-- ═══════════════════════════════════════════════════════════════\n--  x3d_inventory — อาวุธ \u002F weapons\n-- ═══════════════════════════════════════════════════════════════\n\n-- ===== ชื่ออาวุธ \u002F Weapon names =====\n\n-- ชื่ออาวุธภาษาไทย (ใช้เมื่อ Config.Locale = 'th' · ภาษาอังกฤษใช้ชื่อจาก ESX) — ไม่ใส่ = ใช้ชื่อจาก ESX\n-- Thai weapon names (used when Config.Locale = 'th' · English keeps the ESX labels) — unset = the ESX label\nConfig.WeaponNames = {\n\t-- ระยะประชิด \u002F melee\n\t['WEAPON_BAT'] = 'ไม้เบสบอล',\n\t['WEAPON_BATTLEAXE'] = 'ขวานศึก',\n\t['WEAPON_BOTTLE'] = 'ขวดแก้วแตก',\n\t['WEAPON_CANDYCANE'] = 'ไม้เท้าลูกกวาด',\n\t['WEAPON_CROWBAR'] = 'ชะแลง',\n\t['WEAPON_DAGGER'] = 'กริชโบราณ',\n\t['WEAPON_FLASHLIGHT'] = 'ไฟฉาย',\n\t['WEAPON_GOLFCLUB'] = 'ไม้ตีกอล์ฟ',\n\t['WEAPON_HAMMER'] = 'ค้อน',\n\t['WEAPON_HATCHET'] = 'ขวานเล็ก',\n\t['WEAPON_KNIFE'] = 'มีดพก',\n\t['WEAPON_KNUCKLE'] = 'สนับมือเหล็ก',\n\t['WEAPON_MACHETE'] = 'มีดดาบ',\n\t['WEAPON_NIGHTSTICK'] = 'กระบองตำรวจ',\n\t['WEAPON_POOLCUE'] = 'ไม้คิวสนุ้ก',\n\t['WEAPON_STONE_HATCHET'] = 'ขวานหิน',\n\t['WEAPON_SWITCHBLADE'] = 'มีดสปริง',\n\t['WEAPON_WRENCH'] = 'ประแจเลื่อน',\n\n\t-- ปืนสั้น \u002F handguns\n\t['WEAPON_APPISTOL'] = 'ปืนพกยิงรัว AP',\n\t['WEAPON_CERAMICPISTOL'] = 'ปืนพกโครงเซรามิก',\n\t['WEAPON_COMBATPISTOL'] = 'ปืนพกคอมแบท',\n\t['WEAPON_DOUBLEACTION'] = 'ลูกโม่ดับเบิลแอ็กชัน',\n\t['WEAPON_FLAREGUN'] = 'ปืนยิงพลุ',\n\t['WEAPON_GADGETPISTOL'] = 'ปืนพกเพอริโก',\n\t['WEAPON_HEAVYPISTOL'] = 'ปืนพกขนาดหนัก',\n\t['WEAPON_MARKSMANPISTOL'] = 'ปืนพกนัดเดียวแม่นยำ',\n\t['WEAPON_NAVYREVOLVER'] = 'ลูกโม่ทหารเรือ',\n\t['WEAPON_PISTOL'] = 'ปืนพกมาตรฐาน',\n\t['WEAPON_PISTOL50'] = 'ปืนพกลำกล้อง .50',\n\t['WEAPON_PISTOL_MK2'] = 'ปืนพกมาตรฐาน Mk II',\n\t['WEAPON_PISTOLXM3'] = 'ปืนพก WM 29',\n\t['WEAPON_RAYPISTOL'] = 'ปืนเลเซอร์อัพ-แอนด์-แอทอมไมเซอร์',\n\t['WEAPON_REVOLVER'] = 'ลูกโม่ขนาดหนัก',\n\t['WEAPON_REVOLVER_MK2'] = 'ลูกโม่ขนาดหนัก Mk II',\n\t['WEAPON_SNSPISTOL'] = 'ปืนพกจิ๋ว SNS',\n\t['WEAPON_SNSPISTOL_MK2'] = 'ปืนพกจิ๋ว SNS Mk II',\n\t['WEAPON_STUNGUN'] = 'ปืนช็อตไฟฟ้า',\n\t['WEAPON_STUNROD'] = 'กระบองช็อตไฟฟ้า',\n\t['WEAPON_VINTAGEPISTOL'] = 'ปืนพกรุ่นคลาสสิก',\n\n\t-- ปืนกลมือ \u002F SMGs\n\t['WEAPON_ASSAULTSMG'] = 'ปืนกลมือจู่โจม',\n\t['WEAPON_COMBATPDW'] = 'ปืนกลมือ PDW',\n\t['WEAPON_MACHINEPISTOL'] = 'ปืนพกกล',\n\t['WEAPON_MICROSMG'] = 'ปืนกลมือขนาดเล็ก',\n\t['WEAPON_MINISMG'] = 'ปืนกลมือมินิ',\n\t['WEAPON_RAYCARBINE'] = 'ปืนกลเลเซอร์ Unholy Hellbringer',\n\t['WEAPON_SMG'] = 'ปืนกลมือ',\n\t['WEAPON_SMG_MK2'] = 'ปืนกลมือ Mk II',\n\t['WEAPON_TECPISTOL'] = 'ปืนกลมือแท็กติคอล',\n\n\t-- ลูกซอง \u002F shotguns\n\t['WEAPON_ASSAULTSHOTGUN'] = 'ลูกซองจู่โจม',\n\t['WEAPON_AUTOSHOTGUN'] = 'ลูกซองกึ่งอัตโนมัติ Sweeper',\n\t['WEAPON_BULLPUPSHOTGUN'] = 'ลูกซองบูลพัพ',\n\t['WEAPON_COMBATSHOTGUN'] = 'ลูกซองคอมแบท',\n\t['WEAPON_DBSHOTGUN'] = 'ลูกซองสองลำกล้อง',\n\t['WEAPON_HEAVYSHOTGUN'] = 'ลูกซองขนาดหนัก',\n\t['WEAPON_MUSKET'] = 'ปืนคาบศิลา',\n\t['WEAPON_PUMPSHOTGUN'] = 'ลูกซองปั๊ม',\n\t['WEAPON_PUMPSHOTGUN_MK2'] = 'ลูกซองปั๊ม Mk II',\n\t['WEAPON_SAWNOFFSHOTGUN'] = 'ลูกซองตัดสั้น',\n\n\t-- ไรเฟิล \u002F rifles\n\t['WEAPON_ADVANCEDRIFLE'] = 'ไรเฟิลรุ่นสูง',\n\t['WEAPON_ASSAULTRIFLE'] = 'ไรเฟิลจู่โจม',\n\t['WEAPON_ASSAULTRIFLE_MK2'] = 'ไรเฟิลจู่โจม Mk II',\n\t['WEAPON_BATTLERIFLE'] = 'ไรเฟิลสนามรบ',\n\t['WEAPON_BULLPUPRIFLE'] = 'ไรเฟิลบูลพัพ',\n\t['WEAPON_BULLPUPRIFLE_MK2'] = 'ไรเฟิลบูลพัพ Mk II',\n\t['WEAPON_CARBINERIFLE'] = 'คาร์บิน',\n\t['WEAPON_CARBINERIFLE_MK2'] = 'คาร์บิน Mk II',\n\t['WEAPON_COMPACTRIFLE'] = 'ไรเฟิลพานท้ายสั้น',\n\t['WEAPON_HEAVYRIFLE'] = 'ไรเฟิลขนาดหนัก',\n\t['WEAPON_MILITARYRIFLE'] = 'ไรเฟิลทหาร',\n\t['WEAPON_SPECIALCARBINE'] = 'คาร์บินพิเศษ',\n\t['WEAPON_SPECIALCARBINE_MK2'] = 'คาร์บินพิเศษ Mk II',\n\t['WEAPON_TACTICALRIFLE'] = 'ไรเฟิลยุทธวิธี',\n\n\t-- ปืนกล \u002F machine guns\n\t['WEAPON_COMBATMG'] = 'ปืนกลคอมแบท',\n\t['WEAPON_COMBATMG_MK2'] = 'ปืนกลคอมแบท Mk II',\n\t['WEAPON_GUSENBERG'] = 'ปืนกลกูเซนเบิร์ก',\n\t['WEAPON_MG'] = 'ปืนกลเบา',\n\n\t-- ปืนซุ่มยิง \u002F snipers\n\t['WEAPON_HEAVYSNIPER'] = 'ปืนซุ่มยิงขนาดหนัก',\n\t['WEAPON_HEAVYSNIPER_MK2'] = 'ปืนซุ่มยิงขนาดหนัก Mk II',\n\t['WEAPON_MARKSMANRIFLE'] = 'ไรเฟิลพลแม่นปืน',\n\t['WEAPON_MARKSMANRIFLE_MK2'] = 'ไรเฟิลพลแม่นปืน Mk II',\n\t['WEAPON_PRECISIONRIFLE'] = 'ไรเฟิลความแม่นยำสูง',\n\t['WEAPON_SNIPERRIFLE'] = 'ปืนซุ่มยิง',\n\n\t-- อาวุธหนัก \u002F heavy\n\t['WEAPON_COMPACTLAUNCHER'] = 'เครื่องยิงลูกระเบิดขนาดพกพา',\n\t['WEAPON_FIREWORK'] = 'เครื่องยิงพลุดอกไม้ไฟ',\n\t['WEAPON_GRENADELAUNCHER'] = 'เครื่องยิงลูกระเบิด',\n\t['WEAPON_HOMINGLAUNCHER'] = 'เครื่องยิงจรวดนำวิถี',\n\t['WEAPON_MINIGUN'] = 'ปืนกลหมุนมินิกัน',\n\t['WEAPON_RAILGUN'] = 'ปืนเรลกัน',\n\t['WEAPON_RAILGUNXM3'] = 'ปืนเรลกัน XM3',\n\t['WEAPON_RAYMINIGUN'] = 'มินิกันเลเซอร์ Widowmaker',\n\t['WEAPON_RPG'] = 'เครื่องยิงจรวด RPG',\n\t['WEAPON_SNOWLAUNCHER'] = 'เครื่องยิงก้อนหิมะ',\n\n\t-- ขว้าง \u002F throwables\n\t['WEAPON_ACIDPACKAGE'] = 'ถุงกรด',\n\t['WEAPON_BALL'] = 'ลูกบอล',\n\t['WEAPON_BZGAS'] = 'แก๊สน้ำตา BZ',\n\t['WEAPON_FLARE'] = 'พลุสัญญาณมือ',\n\t['WEAPON_GRENADE'] = 'ระเบิดมือ',\n\t['WEAPON_MOLOTOV'] = 'ระเบิดขวดน้ำมัน',\n\t['WEAPON_PIPEBOMB'] = 'ระเบิดท่อเหล็ก',\n\t['WEAPON_PROXMINE'] = 'กับระเบิดตรวจจับระยะ',\n\t['WEAPON_SMOKEGRENADE'] = 'ระเบิดควัน',\n\t['WEAPON_SNOWBALL'] = 'ก้อนหิมะ',\n\t['WEAPON_STICKYBOMB'] = 'ระเบิดติดผนัง',\n\n\t-- อุปกรณ์ \u002F gear\n\t['GADGET_PARACHUTE'] = 'ร่มชูชีพ',\n\t['WEAPON_DIGISCANNER'] = 'เครื่องสแกนดิจิทัล',\n\t['WEAPON_FIREEXTINGUISHER'] = 'ถังดับเพลิง',\n\t['WEAPON_HACKINGDEVICE'] = 'อุปกรณ์เจาะระบบ',\n\t['WEAPON_HAZARDCAN'] = 'ถังสารอันตราย',\n\t['WEAPON_METALDETECTOR'] = 'เครื่องหาโลหะ',\n\t['WEAPON_PETROLCAN'] = 'ถังน้ำมัน',\n}\nif Config.Locale == 'en' then Config.WeaponNames = {} end\n\n-- ===== ความหายากและน้ำหนัก \u002F Rarity and weight =====\n\n-- ความหายากของอาวุธ 0–4 · ไม่ใส่ = DefaultWeaponTier\n-- Weapon rarity 0–4 · unset = DefaultWeaponTier\nConfig.DefaultWeaponTier = 0\nConfig.WeaponRarity = {\n\t['WEAPON_PISTOL50'] = 2,\n\t['WEAPON_HEAVYSNIPER'] = 3,\n\t['WEAPON_RPG'] = 4,\n}\n\n-- น้ำหนักต่ออาวุธ 1 ชิ้น (ไม่ใส่ = 0) \u002F weight per weapon (unset = 0)\nConfig.WeaponWeight = {\n\t-- ['WEAPON_BAT'] = 1000,\n}\n\n-- ===== กฎการใช้ \u002F Use rules =====\n\n-- อาวุธที่ปิดกระเป๋าทันทีหลังหยิบ\u002Fเก็บ \u002F weapons that close the bag after equip\u002Fholster\nConfig.CloseOnUseWeapons = {\n\t-- 'WEAPON_BAT',\n}\n\n-- กฎการใช้อาวุธ (type 'block' = ห้ามที่อยู่ในรายการ · 'allow' = ใช้ได้เฉพาะในรายการ)\n-- Weapon use rule (type 'block' = block the listed ones · 'allow' = allow only the listed ones)\nConfig.WeaponRules = {\n\tuse = { type = 'block', list = { 'GADGET_PARACHUTE' } },\n}\n\n-- ===== กระสุนและท่าทาง \u002F Ammo and animations =====\n\n-- อาวุธที่ไม่มีกระสุน (ไม่โชว์จำนวนกระสุน) \u002F weapons without ammo (no ammo count shown)\nConfig.WeaponsWithoutAmmo = {\n\t'GADGET_PARACHUTE',\n\t'WEAPON_BAT', 'WEAPON_BATTLEAXE', 'WEAPON_BOTTLE', 'WEAPON_CANDYCANE', 'WEAPON_CROWBAR',\n\t'WEAPON_DAGGER', 'WEAPON_FLASHLIGHT', 'WEAPON_GOLFCLUB', 'WEAPON_HAMMER', 'WEAPON_HATCHET',\n\t'WEAPON_KNIFE', 'WEAPON_KNUCKLE', 'WEAPON_MACHETE', 'WEAPON_NIGHTSTICK', 'WEAPON_POOLCUE',\n\t'WEAPON_STONE_HATCHET', 'WEAPON_STUNGUN', 'WEAPON_STUNGUN_MP', 'WEAPON_SWITCHBLADE', 'WEAPON_WRENCH',\n}\n\n-- ท่าหยิบ\u002Fเก็บอาวุธ · SkipWeaponAnimation = ข้ามท่าทุกอาวุธ · SkipWeaponAnimationFor = ข้ามเฉพาะในรายการ\n-- Equip\u002Fholster animation · SkipWeaponAnimation = skip for every weapon · SkipWeaponAnimationFor = skip only the listed ones\nConfig.SkipWeaponAnimation = false\nConfig.SkipWeaponAnimationFor = {\n\t-- 'WEAPON_BAT',\n}\n\n-- swapAt = ms ที่อาวุธปรากฏ\u002Fหายในมือ · duration = ความยาวท่า (ms) · customs = ท่าเฉพาะอาวุธ\n-- swapAt = ms when the weapon appears\u002Fdisappears · duration = animation length in ms · customs = per-weapon animations\nConfig.WeaponHolsterAnims = {\n\tdefault = {\n\t\tholster = { enable = true, dict = 'reaction@intimidation@1h', anim = 'outro', flag = 50, swapAt = 1800, duration = 1900 },\n\t\tdraw = { enable = true, dict = 'reaction@intimidation@1h', anim = 'intro', flag = 50, swapAt = 800, duration = 2600 },\n\t},\n\tcustoms = {\n\t\t['WEAPON_SWITCHBLADE'] = {\n\t\t\tholster = { enable = true, dict = 'anim@melee@switchblade@holster', anim = 'holster', flag = 50, swapAt = 1400, duration = 1900 },\n\t\t\tdraw = { enable = true, dict = 'anim@melee@switchblade@holster', anim = 'unholster', flag = 50, swapAt = 200, duration = 2000 },\n\t\t},\n\t},\n}\n",1792316315005]