Changelog — ns-illegal
1.3.0 — 2026-10-23
Added
- ns-storerobbery link: two new activities,
store_robbery(every robber who got cash, XP by the store tier: low ×1.0, mid ×1.4, high ×1.8) andstore_safe(the one who emptied the safe). ns-storerobbery is allowed to report them by default (Config.Integrations.activityReporters); nothing to configure.
1.2.0 — 2026-10-22
Added
- Location editor (
/illegal locations, admins, #44): every position of the script on a map and a list: contacts, parking spots, vehicle drop-offs, house doors, contract drop points, interior entries / exits / search spots. Teleport, set the GPS, move (walk there, a live preview follows you, E saves; you face the heading), add, switch off / on, reset to the file value, delete added points; contact radius, drop point name and radius, house interior. World view (markers, labels, ghost peds and cars) and map blips. Changes apply at once, survive restarts (new tablens_illegal_points) and are audited. Running jobs keep their positions. - ns-locksmith vehicle spots as theft parking spots (#45):
Config.VehicleTheft.locksmithSpots = 'add'('replace',false). ns-locksmith'sdata/locations.jsonis only read. - A parking spot with a vehicle or a player on it is skipped (
Config.VehicleTheft.spotClearRadius).
Changed
- Empty
spots/dropoffs/houseslists are a start warning instead of an error (fill them in game). - A house whose interior has fewer search spots than
minSearchedis not given out (it could not be completed). - Database schema v2 (
ns_illegal_points): automatic withautoMigrate, otherwise importsql/ns-illegal.sqlagain. - Default positions of 7 contacts (
data/locations.lua) and both contract drop points (config.lua) updated to the spots placed in game with the editor.
Confirmed in game (2026-10-22).
1.1.1 — 2026-10-22
Fixed
- A theft contract car that someone else hotwired first no longer fails the contract: when the owner gets in and twists the hanging wires, ns-carthief hands it over and the contract moves on to the drop-off. Twisting wires someone else pulled out never counts as a street theft.
- The contract car only counts as yours when you hotwire it from the driver seat.
- While ns-carthief opens the contract car, the job notice and a "Check the lock" option at the car say how to open it (lockpick, then hotwire from the driver seat).
- An ns-carthief tier name longer than 16 characters gives normal XP instead of being refused.
- Other resources asking about a player (
GetCareer,AtContact) no longer create a career row for players who never used the Dark Tablet. Config.Integrations.houserobbery = falsenow also stops ns-houserobbery from accepting its offers at the house contacts.
Confirmed in game (2026-10-22).
1.1.0
Added
- Works with ns-carthief and ns-houserobbery (optional, automatic,
Config.Integrations.carthief / houserobbery):- theft contract vehicles are opened with the ns-carthief lockpick + hotwire while it runs (the progress-bar break-in is off); delivery XP scales with the ns-carthief vehicle tier;
- every other hotwired vehicle is a street theft (new activity
vehicle_hotwire, 40 XP, 20 per day; over the limit the theft still works, it just gives no XP); - house contacts open the ns-houserobbery contract offers; its finished contracts count as
house_robbery(XP by house tier, missions keep counting) and the safe cracker getshouse_safe.
ReportActivityaccepts a tier label (data.tier);Config.Activities[x].tierMultiplierturns it into an XP multiplier (unknown label = 1). New exportsReportHotwire(ns-carthief) andAtContact(ns-houserobbery).- English
README.mdandARCHITECTURE.md.
Fixed
- A completion inside an activity's cooldown (recorded with 0 XP) no longer restarts the cooldown or uses up the daily
cap: both now count only rewarded completions. Career results say why XP was 0 (
cappedBy = 'cooldown' | 'daily'). core/matches ns-core 1.0.1 again (the Turkish-letter fix is now part of ns-core, sons-checkno longer reports it as hand-edited).
Nothing of the ns-carthief / ns-houserobbery link has been tested in game yet (offline tests only).
Changed
- New Dark Tablet look: rugged burner-device casing (bumpers, screws, tape, barcode sticker), phosphor terminal screen (scanlines, grid, corner-bracket cards, monospace labels), night-vision location maps, contract ids, completion stamps on objectives, a burner-phone contact panel and a terminal-style progress HUD.
- The page sets its
langfrom the server locale, so uppercase labels keep Turkish letters (İ, not I).
1.0.0
Added
- Dark Tablet item: server-checked opening (framework usable item or ox_inventory export), item re-check on every tablet action and while open, first-use username registration (unique, case-insensitive, atomic).
- Career progression: level 0-30 from XP, tiers at levels 10 / 20 / 30 (Kingpin), reputation -100..100 with seven ranks (Snitch … Known Figure), one server-authoritative progression service with an idempotent ledger.
- Police arrest integration: allow-listed
ReportArrest/ReportArrestByIdentifierexports, repeat penalties, incident deduplication, offline arrests, audit trail. - Tablet sections: Dashboard (career overview, career path, recent events, operations, searchable player directory), Missions (automatic one-time / daily / weekly objectives), Locations (blurred clue cards, purchase, GPS), Anonymous (global contracts with a single first-finisher winner, admin publishing / cancel / reward retry).
- Activities: vehicle theft, house robbery (private routing buckets), vehicle dismantling, cultivation (persistent batches), buyers and suppliers at unlocked contacts.
- GTA-style progress HUD: animated XP bar, multi-level crossing, level-up / tier / Kingpin / standing banners.
- Integration exports for other resources (
ReportActivity,GetCareer,CanDoActivity,GetItemCategory). - Admin command
/illegal(profile, XP / reputation correction, username reset, contracts, test arrest, config validation), player command/illegalcancel. - English and Turkish locales, automatic database migrations, configuration validation on start.
- Built on ns-core 1.0.1 (Turkish letters are kept by text sanitising under every server locale).