Detection picks the first known resource it finds running. If you run two of the same kind at once (two inventories, or two dispatch scripts), the choice is unpredictable. Set the value yourself in config/main.lua:
Lab stashes, and furniture marked as a stash, open through OpenStash(customData, uniq) in client/custom/inventory/<inventory>.lua. Each stash has a unique id per lab and per piece of furniture, so its contents stay in that lab.
Street corner deals can alert the police (Config.PoliceCallChance). The alert is sent by PoliceDispatch(alert) in client/custom/dispatch/<dispatch>.lua, where you can change the jobs that receive it, the blip and the text. Without a supported dispatch, nothing is sent.
The wardrobe point in a lab calls OpenClotheMenu() from client/custom/wardrobe/<clothing>.lua. Inside a shell, WeatherSyncEvent pauses your weather script so the interior stays clear, and resumes it when you leave.
With qs-inventory running, six quests are created for every player. Their titles, rewards and required levels are in server/custom/missions.lua.
A whole framework is added the same way: copy custom/qb/ or custom/esx/ and fill in its functions: player data, money, items, jobs, admin check and usable items.
41 translations ship in locales/: ar, bg, bn, ca, cs, da, de, el, en, es, et, fa, fi, fr, he, hi, hr, hu, id, it, ja, ko, lt, lv, ms, nl, no, pl, pt, ro, ru, sk, sl, sv, sw, th, tr, uk, ur, vi and zh. Choose one with Config.Locale. The same texts are used by the interface.
To add a language, copy en.json to a new file, such as xx.json, translate the values (keep the {{placeholders}}) and set Config.Locale = 'xx'. Any key missing from your file falls back to English, with a warning in the console.