Can't find what you're looking for? Join the OZY STUDIO Discord Server for product support, installation help and troubleshooting. Join Discord →
Maps · OZY STUDIO Documents
Golden Dragon – Chinese Restaurant MLO
Resource
ozystudio-chinese
Version
2.6.3
Size
24 MB
Location
Little Seoul, Los Santos vector3(-663.77, -1217.96, 11.81) (side entrance)
Requirements
No scripts, no dependencies. Works with any framework (QBX, QBCore, ESX, standalone).
OneSync is not required.
Protected with Cfx.re Asset Escrow.
Game build: works on the default build. Tested on build 3407.
Installation
Download the resource from the Cfx.re Portal → Assets → Granted Assets.
Put the ozystudio-chinese folder in your resources folder.
Add this line to your server.cfg:
ensure ozystudio-chinese
Fully restart the server.restart ozystudio-chinese or refresh is not enough, because the game keeps the old interior in memory until the server restarts.
Layout
Room
What's inside
Tea room
Entrance tea salon with windows to the street
Service wing
Kitchen, 2 restrooms, staff passage, bar corridor
Main hall
Two-level pagoda atrium lobby and the main dining hall
Banquet hall
Large round tables for events and parties
VIP
3 private dining rooms
All rooms use the base-game V_Solomons timecycle, so no extra timecycle file is needed.
Doors
The restaurant has 18 door leaves. They swing open when you push them and are not locked.
Model
Count
Where
ozystudio_cn_d_main
4
Entrances (double doors)
ozystudio_cn_d_kit
2
Kitchen
ozystudio_cn_d_wc
2
Restroom entrances
ozystudio_cn_d_stall
4
Restroom stalls
ozystudio_cn_d_vip
6
VIP rooms (3 double doors)
Door locking is not included. If your server uses a doorlock resource, add these doors using the model names above.
Replaced base-game files
The map edits the original S.HO building to remove the old signs, doors and invisible walls. Any other resource that streams one of these files will conflict:
kt1_15_rest_01.ydr – building shell (old signs, door leaves, window panels removed)
kt1_15_detail_01.ydr – fence piece that went through the tea room wall
kt1_15_0.ybn, hi@kt1_15_0.ybn – collision (solid blocks that caused invisible walls)
hei_kt1_occl_00.ymap – occluders inside the building (stops the interior from popping in and out when you look through the windows)
Performance
5 rooms, 14 portals. Rooms you can't see are not rendered.
Pergola with string lights, patio tables, full collision
The salon uses the included ozy_sugarbloom timecycle (bright and warm); the kitchen, storage and restroom use ozy_sugarbloom_back. Both are loaded from ozystudio_cafe_timecycle.xml, so you don't need to do anything.
Doors
The café has 11 door leaves. They swing open when you push them and are not locked.
Model
Count
Where
ozystudio_cf_d_french
6
Street entrances (3 French double doors)
ozystudio_cf_d_kit
1
Kitchen
ozystudio_cf_d_depot
2
Storage and staff room
ozystudio_cf_d_wc
2
Restroom
Replaced base-game files
Any other resource that streams one of these files will conflict:
vb_38_build01.ydr – building shell (old door leaves and green awnings removed)
vb_38_build01_em.ydr – night-time window glow of the old shop
vb_38_2.ybn, hi@vb_38_2.ybn – collision (blocks that closed the doorways)
vb_38_strm_1.ymap, vb_38_strm_2.ymap and their hei_ versions – base-game terrace props removed to make room for the new terrace
Front salon about 99k triangles, back area about 180k. The total for all custom models, props and the facade together is about 334k.
One shared texture dictionary of 7.8 MB (mostly 256² and 512², one 2048²).
Maps · OZY STUDIO Documents
Mariner Coffee – Pier Café MLO
Resource
ozystudio-mariner
Version
1.8.4
Size
18.1 MB
Location
Del Perro Pier, Los Santos (former Out Of Towners building) vector3(-1655.65, -999.59, 13.02)
Requirements
No scripts, no dependencies. Works with any framework (QBX, QBCore, ESX, standalone).
OneSync is not required.
Protected with Cfx.re Asset Escrow.
Game build 2802 or newer. The café uses props from the Los Santos Drug Wars update. Add this line to your server.cfg (use a higher number if you already run one):
sv_enforceGameBuild 2802
Tested on build 3407.
Installation
Download the resource from the Cfx.re Portal → Assets → Granted Assets.
Put the ozystudio-mariner folder in your resources folder.
Add this line to your server.cfg:
ensure ozystudio-mariner
Fully restart the server.restart ozystudio-mariner or refresh is not enough, because the game keeps the old interior in memory until the server restarts.
Layout
Room
What's inside
Upper floor (pier level)
Main hall with the coffee bar, espresso machine, pastry display and menu boards, built-in booths, side section, back area with a sloped ceiling
Staff annex
Staff room with lockers, kitchen counter and notice board
Lower floor (beach level)
Reserve bar with pour-over and siphon brewers, coffee roaster with cooling tray, lounge area, 2 restrooms, staff office and storage
Terrace (outside)
Pier terrace with green parasols and an A-frame board
The two floors are connected by an open staircase. All rooms use the included ozy_mariner_wh timecycle, a copy of the base-game WAREHOUSE timecycle. It is loaded from ozystudio_mariner_timecycle.xml, so you don't need to do anything.
Doors
The café has 16 door leaves. They swing open when you push them and are not locked.
Model
Count
Where
ozystudio_mr_d_front
6
Main entrance on the pier (3 double doors)
ozystudio_mr_d_left
2
Side entrance, upper floor
ozystudio_mr_d_staff
1
Staff room
ozystudio_mr_d_annex
1
Staff room outside door
ozystudio_mr_d_ldoor
1
Lower floor side entrance
ozystudio_mr_d_bdoor
2
Lower floor back entrance (double door)
ozystudio_mr_d_store
1
Storage
ozystudio_mr_d_wc
2
Restrooms
Door locking is not included. If your server uses a doorlock resource, add these doors using the model names above.
Replaced base-game files
The map edits the original pier building to remove the old shop, signs, doors and invisible walls. Any other resource that streams one of these files will conflict:
sm_22_build_01.ydr – building shell (window glass, door leaves, striped awnings and "Out Of Towners" signs removed)
sm_22_emissive_1.ydr – night-time window glow of the old shop
sm_22_oot_alpha.ydr, sm_22_oot_alpha_n.ydr – old neon signs in the windows
sm_22_pier_railing3.ydr, sm_22_pier_section_006.ydr – pier railing and curb pieces that ran through the building
sm_22_2.ybn, hei_sm_22_2.ybn, hi@sm_22_0.ybn, hi@hei_sm_22_0.ybn – collision (blocks that closed the doorways and filled the building)
sm_22_strm_2.ymap, sm_22_strm_3.ymap and their hei_ versions – work barriers and traffic cones in front of the building
sm_occl_00.ymap, hei_sm_occl_00.ymap – occluders inside the building (stops the outside from popping in and out when you look through the windows)
Performance
3 rooms, 21 portals (doors, windows, the staircase and 2 restroom mirrors). Rooms you can't see are not rendered.
284 entities: 21 custom models (room meshes and doors), 263 base-game props. Furniture, plants, cups and kitchen items are base-game props with their own LODs, so they add nothing to the download.
Upper floor about 85k triangles, lower floor about 190k, staff annex about 5k. The total for all custom models and the facade together is about 302k.
One shared texture dictionary of 8.9 MB (mostly 256² and 512², largest 2048×1024).
Maps · OZY STUDIO Documents
Dark Academia – Café · Library · Bar MLO
Resource
ozystudio-darkacademia
Version
1.4.3
Size
17 MB
Location
Del Perro Pier, Los Santos (former carousel building) vector3(-1569.20, -958.85, 12.62) (building centre)
Requirements
No scripts, no dependencies. Works with any framework (QBX, QBCore, ESX, standalone).
OneSync is not required.
Protected with Cfx.re Asset Escrow.
Game build 2545 or newer. The club uses props from The Contract update. Add this line to your server.cfg (use a higher number if you already run one):
sv_enforceGameBuild 2545
Tested on build 3407.
Installation
Download the resource from the Cfx.re Portal → Assets → Granted Assets.
Put the ozystudio-darkacademia folder in your resources folder.
Add this line to your server.cfg:
ensure ozystudio-darkacademia
Fully restart the server.restart ozystudio-darkacademia or refresh is not enough, because the game keeps the old interior in memory until the server restarts.
Using Mariner Coffee too? Both maps are on Del Perro Pier and include the same edited pier collision and occluder files. The files are identical in both resources, so you can run both maps together in any order.
Layout
Room
What's inside
Entrance hall
Checkerboard marble floor, coffered ceiling, chandelier and two busts
Long bar with backlit bottle shelves and beer taps, jazz stage with grand piano, velvet club chairs, crystal chandeliers
Library
Restaurant with back-to-back booths and served tables, bookshelves, paintings, crystal chandelier
Fireside lounge
Marble fireplace with a real fire effect, Chesterfield seating
VIP room
Private dining room behind a curtain, opening off the lounge
Lavatory
Marble vanity with a working mirror
Terrace (outside)
Stone terrace facing the ocean with fire bowls, long served tables and planters, full collision
The rooms use the included ozy_darkacademia timecycle (a warm, dim club look); the cloakroom and lavatory use ozy_darkacademia_svc. Both are loaded from ozystudio_darkacademia_timecycle.xml, so you don't need to do anything.
Doors
The club has 7 door leaves. They swing open when you push them and are not locked.
Model
Count
Where
ozystudio_da_d_main
2
Main entrance (double door)
ozystudio_da_d_ter
4
Terrace doors on the sea side (2 double doors)
ozystudio_da_d_wc
1
Lavatory
Door locking is not included. If your server uses a doorlock resource, add these doors using the model names above.
Replaced base-game files
The map removes the old carousel building on the pier without editing its map file. Any other resource that streams one of these files will conflict (Mariner Coffee is the exception, see above):
sm_22_build0x.ydr, sm_22_build_railing.ydr, sm_22_build_railing1.ydr, sm_22_emissive_2b.ydr, sm_22_alpha_01x.ydr, sm_22_extras_08.ydr, sm_22_sm1_22_glue_03.ydr – the old building, its railings, night glow and decals
sm_22_slod1b_children.ydd, sm_22_emissive_slod_children.ydd, sm_lod_slod2_22_children.ydd, sm_lod_slod3_children.ydd, sm_lod_emissive_22_children.ydd, sm_lod_sm_emissive_slod_children.ydd – distant versions of the old building (stops it from appearing when you look from far away)
Room meshes are 2k–45k triangles each (about 140k together); the facade is about 35k.
One shared texture dictionary of 5.7 MB.
Scripts · OZY STUDIO Documents
Vampire Village – Social Deduction Game
A social deduction game for 4 to 15 players on its own floating village: 21 roles, a night in which every player walks alone, a day vote at the stake, and bots that can fill empty seats.
Routing buckets. Any current server has it: +set onesync on
ox_lib
Required
Shared library
ozystudio-vampirevillage
Required (in the bundle)
The village map: 15 houses and the game props
ozystudio-jelly
Required (in the bundle)
The jelly characters and their wardrobe
pma-voice
Recommended
The game runs without it (a warning is printed), but the vampires' night whisper, the ghosts' channel and the voice ranges need it
Framework: Qbox, QBCore, ESX or none (standalone). A framework is only used for the player's name and the optional money reward; the game itself runs on plain FiveM.
Works out of the box with:illenium-appearance, fivem-appearance, qb-clothing, esx_skin + skinchanger, ox_inventory, qb-weathersync, Renewed-Weathersync. For anything else (your HUD, another clothing script, an anticheat) see Your other scripts below.
Installation
Download the bundle from the Cfx.re Portal → Assets → Granted Assets.
Put the three folders in your resources folder. Do not rename them (or change Config.MapResource / Config.PedResource if you do).
Add these lines to your server.cfg, in this order:
Fully restart the server. The map and the characters are streamed assets, so ensure on a running server is not enough the first time.
The server console tells you at start if something the game needs is missing (OneSync, the map, the characters, pma-voice, Debug left on).
Playing
/vampirevillage (or /vv), or E at the marker in the city, opens the main menu.
Create Lobby → pick a colour (your colour is your house) → invite players → Start Game. The host can fill empty seats with bots: they plan, act at night, talk and vote.
In a game: F6 opens the village board, ESC opens the game's own menu (role guide, leave).
The game asks every player once for the microphone (the box at the top right: F8 → Allow). It is used for the night voice changer only. Set Config.Night.voiceChanger.requireMic = false to let a game start without it.
One round, with the default timers:
Phase
Default
What happens
Dusk
15 s
Everyone walks home
Plan
25 s
Each player picks a target on the board on their own wall
Evening
35 s
First half of the night: the helping roles go out
Midnight
40 s
After the bell: the attackers go out
Dawn
10 s
The night's deaths are revealed
Day
90 s
Discussion at the campfire
Vote
30 s
Vote on the notice column in the square
Last words, burning
10 s + 8 s
The condemned speaks at the stake
At night nobody shares the street: every player outside walks a street of their own, looks like a grey stranger with a changed voice, and meets others only inside houses. A game ends in a draw after 12 days (Config.MaxDays).
Roles
21 roles in three teams. The host builds the role list in the lobby, or lets the game pick one for the number of players.
Role
Team
What it does
Villager
Village
No night power. Finds the vampires by day.
Healer
Village
Leaves a medkit in someone's house: no attack kills them that night.
Seer
Village
Looks through a door and learns the owner is one of two roles.
Watcher
Village
Watches a door and learns everyone who came there that night.
Tracker
Village
Dusts a doorstep and learns every house that player went to.
Guardian
Village
Hides in someone's house and fights the first attacker who comes in.
Warden
Village
Guards a door: whoever tries to leave that house is knocked out.
Jailer
Village
Locks a player in their house for the night and can execute them.
Hunter
Village
One bullet for the whole game.
Medium
Village
Lights a candle to see and talk to the ghosts.
Mayor
Village
Reveals by day; the vote counts twice.
Lunatic
Village
Believes to be the Seer, but what it sees is not always true.
Vampire
Vampires
After the midnight bell, sneaks into its prey's house and bites.
Vampire Lord
Vampires
Leads the pack; can turn a villager for every vampire lost.
Vampire Watcher, Seer, Warden, Tracker
Vampires
Four vampires with a village power: each night either use it or hunt.
Jester
Neutral
Wants to be burned at the stake, then haunts one villager.
Werewolf
Neutral
Hunts alone; vampire bites do nothing to it. Wins as the last one standing.
Survivor
Neutral
Two shields per game. Wins by being alive at the end.
Every player can read the full guide for their own role in the game's menu (ESC).
Settings
Everything is in config.lua, with a comment on every line. The ones most servers change:
Setting
Default
What it does
Config.Locale
'en'
Language of the whole game: en, de, fr, es, pt-br, it, pl, nl, tr
Config.Command, Config.CommandAliases
vampirevillage, vv
The chat command. Change the alias if another script already uses /vv.
Config.EntryPoints
Legion Square
Places in the city where the menu opens with E. Empty list = command only.
Config.MinPlayers, Config.MaxPlayers
4, 15
The village has 15 houses: never more than 15.
Config.Bots
on
Lets the host fill empty seats with bots. Games with bots give no reward.
Config.Timers, Config.TimerLimits
see Playing
Phase lengths, and the range the host may change them to in the lobby.
Config.NightLook
How dark the night is on the street and inside a house.
Config.Rewards
off
Money for the winning side through your framework: account ('cash' or 'bank') and win (500).
Config.BucketBase
7100
First routing bucket the game uses (32 per running game). Change it only if another script uses buckets from 7100 on.
Sections marked TIED TO THE MAP in config.lua are measurements of the village and the characters. Leave them as they are.
Adding a language: copy locales/en.json to locales/<code>.json, translate it and set Config.Locale = '<code>'. Anything missing from a language is shown in English.
Voice
Night voice changer: a stranger's voice is pitch-shifted for the others in the house, with a new pitch every night. Players without the microphone permission get a radio filter instead.
Pack and ghosts (needs pma-voice): the living vampires hear each other at night, the dead hear each other all game. Config.Night.packVoice, ghostVoice.
Ranges:houseVoiceRange (14 m) makes a whole room hear each other at night. squareVoiceRange is 0 by default, which leaves your server's own proximity setting alone by day; set it to e.g. 40 to let everyone on the square hear everyone.
Your other scripts
A player in a game is moved to the village (far out over the sea, 800 m up), gets another character model, is made invincible and is put in a routing bucket of the game.
Anticheat: if yours watches for teleports, model changes, invincibility or routing buckets, exempt players whose vampirevillage state is true.
State bag:LocalPlayer.state.vampirevillage is true while a player is in a game. On the server: Player(src).state.vampirevillage.
Config.Hooks (client side, at the end of config.lua): your own code when a player enters or leaves a game, and to give the player their look back with a clothing script the game does not know.
Escrow: the code is protected with Cfx.re Asset Escrow. Open files:config.lua, bridge/client.lua, bridge/server.lua and locales/*.json are not encrypted. The framework, clothing, inventory and weather calls are all in the two bridge files.
Testing alone
Set Config.Debug = true: one player can start a game, the lobby gets an Add Bot button, and F10 (or /vvtest) opens the test panel (roles, phases, scenes).
Keep it off on a live server. With it on, the night log shows everyone's role in the F8 console.
Admins can open the test panel with Debug off:
add_ace group.admin vampirevillage.debug allow
The map and the characters
ozystudio-vampirevillage: a cartoon village floating in the sky, map only. 15 houses in a circle around the square, their doors facing it; all 15 interiors are the same and only the door colour and the number above the door differ. There is an invisible wall around the edges, so nobody falls off the island.
ozystudio-jelly: 17 ped models, 16 colours and the grey, faceless night stranger (listed in models.txt). They are built on the human skeleton, so every human animation works on them. The mouth moves when a player talks on voice, and hats, glasses, clothes and expressions are ped components set from the game's wardrobe menu.
You can try a character outside the game with your server's "set my ped model" command, e.g. ozystudio_jelly_mavi.
Troubleshooting
Problem
What to check
The island or the characters are missing
Restart the whole server, not just the resources. Check the start order in server.cfg and the server console warnings.
The game does not start, a seat shows a microphone
That player has not allowed the microphone (F8 → Allow). Or set voiceChanger.requireMic = false.
/vv opens something else
Another script uses it. Change Config.CommandAliases.
Players are kicked or flagged in a game
Your anticheat. Exempt players with the vampirevillage state.
Your HUD shows over the game, or the player's outfit does not come back
Use Config.Hooks (onEnter, onLeave, restoreAppearance).
Vampires or ghosts cannot hear each other
pma-voice must be running and started before the game.
A player is stuck on the island after a crash
The game sends them back to where they joined from, or to Config.FallbackSpawn.
Sounds and music are CC0 recordings (ui/sounds/CREDITS.txt); the fonts are under the SIL Open Font License (ui/fonts).
Scripts · OZY STUDIO Documents
Bowling Alley – MLO + Bowling & 8-Ball Pool Script
A neon bowling alley in the Burton mall and a script that makes it playable: turn based bowling with real 10-frame scoring, team matches and live scoreboards on the lane monitors, plus 8-ball pool on every vanilla pool table, against players or the computer.
Fully restart the server the first time. The interior is loaded at server start, so ensure on a running server is not enough.
The lanes of the map are already set in config.lua. Nothing else to configure.
Playing bowling
Walk to a lane, press E and choose Open Table: pick 5 or 10 frames, then Solo or Team Match.
Other players walk to the lane and choose Join Table (up to 6). In team matches players are split automatically.
The host chooses Start Game; the line-up is locked and turns begin.
On your turn take a ball from the ball return next to your lane (E), walk to the foul line and press E again.
ENTER locks the aim, ENTER locks the power, ENTER throws with hook. BACKSPACE cancels; you keep the ball.
Everyone sees the throw and the camera follows the ball. Scores, the next player and the standing pins are on the lane's monitor; at the end it shows the podium. Leaving before the game starts refunds your fee; if the host closes the table everyone is refunded.
Tip for players: the yellow zone on the power bar is the sweet spot. Harder is not better; hook is what gets the ball into the pocket.
Playing 8-ball pool
Works on every vanilla pool table in the game (prop_pooltable_3b and prop_pooltable_02). Walk up, press E, choose Play vs Player or Play vs Computer (easy, normal, hard).
Key
What it does
Mouse or A / D
Aim (hold SHIFT for fine aim)
SPACE (hold)
Build power, release to shoot · BACKSPACE cancels
Arrow keys
Spin: follow, draw, left, right
C
Top view
W A S D + ENTER
Ball in hand: move and place the cue ball
E
Leave the game (forfeit)
Standard 8-ball rules: break, open table, solids and stripes, fouls give the opponent ball in hand, pot your group and then the 8. The computer plays with its own character at the table.
Placing pool tables
Put a pool table anywhere in the world from inside the game. Give the permission in your server.cfg:
A see-through table follows the spot you look at. Arrow left / right rotate (hold SHIFT for fine steps), G switches the felt (green / pink), ENTER places it, BACKSPACE or ESC cancels.
/pooltable remove
Deletes the placed table you stand next to (refused while a game is running on it).
Placed tables are saved in data/pool_tables.json, survive restarts and play exactly like the tables of the map. Each player's game creates them only within Config.Pool.placement.drawDistance. If your admin group is not group.admin (for example superadmin), use that group's name in the line above.
Settings
Everything is in ozystudio-bowling/config.lua, commented. The ones most servers change:
Setting
What it does
Config.Locale
Language of the script: 'en', 'de', 'tr'... Only this resource changes. 'auto' follows ox_lib (setr ox:locale).
Config.Framework
'auto', or force 'qbx', 'qb', 'esx', 'standalone'
Config.Prices.game / perPlayer
Price for the host / for each player who joins
Config.MoneyType
'cash' or 'bank'
Config.Game.frameOptions, maxPlayers
Game lengths the host can pick, players per table
Config.Game.turnTimeout
Seconds a player has to take a ball and throw (AFK protection)
Config.Throw.*
Difficulty: meter speeds, ideal power band, hook strength
Config.Screen.mode
'auto' (map monitors when the map runs), 'monitor', 'floating'
Config.Pool.enabled, price, bot.*
Pool on / off, table fee, the computer opponent
Config.Protect.*
While a player bowls or aims a pool shot, others cannot punch, push or knock them over. On by default; weapon damage is not blocked unless blockGuns = true
Escrow: the code is protected with Cfx.re Asset Escrow. Open files:config.lua, bridge/client.lua, bridge/server.lua, locales/*.json and data/lanes.json are not encrypted. Money, player names and character switching are only in the two bridge files.
Adding a language: copy locales/en.json to locales/<code>.json, translate it and set Config.Locale = '<code>'. Anything missing is shown in English.
The map
Area
What's inside
Entrance
Neon sign and glass double doors on the mall's east side
Reception
Counter, shoe rental, giant pin
Lanes
8 lanes, ball returns with balls, a monitor over every lane showing the live scoreboard
Cocktail bar
Brick wall, bottle shelves, beer taps, bar stools
Lounges
Sofa lounges behind the lanes and high tables
Arcade & pool
The game's own arcade cabinets and pool tables (playable with the script)
The interior uses the base-game AP1_01_B_IntRefRange timecycle, so no extra timecycle file is needed. The two entrance door leaves (ozystudio_bowling_door) swing open when you push them and are not locked.
Replaced base-game files
The map opens the mall's facade for the entrance. Any other resource that streams one of these files will conflict:
bt1_04_shop3.ydr, bt1_04_mall02.ydr – facade pieces cut where the entrance is
bt1_04_0.ybn – collision (the solid blocks in front of the entrance)
apa_ss1_occl_00.ymap – occluders around the building (stops the interior from popping in and out)
Performance
1 room. 312 entities inside: the hall, our own models (doors, balls, sign, pool lamps) and base-game props.
The hall model is about 146k triangles in 46 parts. Total stream size 9.8 MB.
Other maps
The script works without our map. Set Config.Screen.mode = 'floating' (each scoreboard floats above its lane) and save the lanes in game:
/bowlingpoint <lane> stand -- middle of the foul line
/bowlingpoint <lane> pin -- where the head pin stands
/bowlingpoint clear <lane|all>
They are written to data/lanes.json; then restart ozystudio-bowling. The command needs add_ace group.admin command.bowlingpoint allow.
Troubleshooting
Problem
What to check
The alley is empty or the walls are missing
Restart the whole server, not just the resources.
The arcade cabinets are missing
Game build 2060 or newer: set sv_enforceGameBuild 2060
No prompt at a lane
Run /bowlingcheck and look at the F8 console (distance to each lane, floor height).
Scores do not show on the monitors
Both resources must be running. Config.Screen.mode should be 'auto' or 'monitor'.
Money is not taken
Check which framework the server console reports at start, or set Config.Framework.
The game state lives on the server (turns, pins, scores, pool physics and rules), so results cannot be faked from a client.
Scripts · OZY STUDIO Documents
Photo Booth – Walk-In Photo Booth Script
A walk-in photo booth: up to three players squeeze inside, pick a pose for every shot, put on accessories and get a printed photo strip with the real in-game photos. The strip slides out of the machine and ends up in everyone's inventory.
The server checks who is inside the booth. On by default on current servers.
screenshot-basic
Required
Takes the photos. Most servers already have it.
Inventory with item metadata
Recommended
Stores the photo strip as an item: ox_inventory, qs-inventory, qb-inventory (1.x / 2.x), ps-inventory or lj-inventory. ESX's default inventory can't store item metadata. Without one of these the booth still works, everyone sees the strip after the shoot, but no item is given.
ESX, QBCore or Qbox
Optional
Money for the shoot. Without one the booth is free.
ox_lib
Optional
Nicer notifications; QBCore, ESX or GTA notifications are used otherwise.
Installation
Download the resource from the Cfx.re Portal → Assets → Granted Assets.
Put the ozystudio-photobooth folder in your resources folder. Don't rename the folder: the ox_inventory item calls the export ozystudio-photobooth.useStrip.
Add these lines to your server.cfg, after screenshot-basic, your framework and your inventory:
Copy install/ozystudio_photostrip.png into your inventory's image folder.
Restart the server and reconnect.
The ox_inventory item looks like this:
['ozystudio_photostrip'] = {
label = 'Photo Strip',
weight = 10,
stack = false,
close = true,
description = 'A photo strip from the photo booth.',
client = { export = 'ozystudio-photobooth.useStrip' },
},
Placing booths
The two booths in config.lua (Legion Square and Del Perro Pier) are examples. To place your own, stand in game where the centre of the booth should be, face the direction the door should face and type pbpos in the F8 console. Paste the printed line into Config.Booths:
Add as many booths as you like. A booth needs about 2.2 m width × 1.8 m depth × 3.1 m height. Booths are local props, spawned when a player gets close (Config.SpawnDistance), so they add no network load.
Taking photos
In front of the booth press E: the velvet curtain opens (everyone sees it) and closes by itself a few seconds after you step in. It never closes on someone standing in the doorway.
Inside, press E for the menu. Pick Sitting or Standing and a filter.
Pick a pose for each of the 4 shots. Female and male characters have their own poses; the others inside pick theirs at the same time (20 seconds, random if they don't).
Optionally pick up to 3 accessories, one per spot (hat, eyes, face, hair clip).
The curtain closes, a 3-2-1 countdown and a flash for every shot. Automatic framing fits everyone in the picture.
The strip prints out of the slot on the front of the booth and everyone in the photo receives a Photo Strip item.
Key
Where
What it does
E
In front of the booth
Open the curtain
E
Inside
Photo menu
G
Inside
Open / close the curtain
H
Inside
Sit on / stand up from the bench
Using the item opens the photo; the character holds the strip and nearby players see the photo in their hand. Show to nearby player sends it to the closest player.
Settings
Everything is in config.lua, commented. The ones most servers change:
Setting
What it does
Config.Locale
'en', 'tr', 'de', 'fr', 'es', 'pt', 'pl', 'it', 'nl', 'ru'. Item names use this language.
Config.UseGameLanguage
true = every player sees the menu and messages in their own GTA language when it's available
Config.Framework / Inventory / Notify
'auto', or force a system
Config.Price, Config.MoneyType
Price per shoot (0 = free), 'cash' or 'bank'
Config.Shots, CountdownSeconds, MaxPeople
Frames on the strip, countdown length, people per photo
Config.Filters, DefaultFilter, DefaultPose
Menu defaults
Config.Keys
E / G / H (GTA control ids)
Config.Poses
Female / male poses. legs adds a full-body stance when standing, seated replaces the move when sitting, phase is the frozen moment of the animation (0-1).
Config.Accessories
Remove a line to remove an accessory; an empty list skips the accessory step
Config.Cooldown
Seconds between two shoots by the same player
Config.Debug
true enables the tuning commands pbpose, pbacc, pbhand (keep false on a live server)
Escrow: the code is protected with Cfx.re Asset Escrow. Open files:config.lua, bridge/client.lua, bridge/server.lua and locales/*.lua are not encrypted. Money, player names and the photo strip item are only in bridge/server.lua; to support another inventory change Bridge.AddItem, Bridge.HasPhoto and the usable item at the bottom of that file.
Adding a language: copy locales/en.lua, rename it (for example cs.lua), change Config.Locales.en to Config.Locales.cs, translate it and set Config.Locale = 'cs'. Anything missing is shown in English.
Photos
Strips are saved in photos/ inside the resource, one file per strip (about 300-500 KB). No paid image host is needed. Keep this folder when updating: old photo items can't be opened without it. A player can only open photos that are in their own inventory.
Updating
Back up the photos folder.
Delete the old folder and put the new one in its place (no old files left in stream).
Restart the server and reconnect. restart ozystudio-photobooth alone keeps the old models in the game's memory.
Troubleshooting
Problem
What to check
The booth is not visible
Is the stream folder complete? Look for [ozystudio-photobooth] model not found in F8. Restart the server and reconnect.
"screenshot-basic resource not found"
Install screenshot-basic and ensure it before this resource.
No item after the shoot
Check the item definition (installation step 4) and the server console line [ozystudio-photobooth] framework: ..., inventory: ...
Using the item does nothing (ox_inventory)
The folder must be named ozystudio-photobooth and the item needs client = { export = 'ozystudio-photobooth.useStrip' }.
Money is not taken
Check which framework the server console reports at start, or set Config.Framework.
Scripts · OZY STUDIO Documents
Vending Machines – Drink & Food Vending Script
Glass-front drink and food vending machines with no menu: walk up, press E and type the code on the machine's own keypad. The item is pushed off the shelf, falls behind the glass, and your character takes it from the tray. Drinking and eating restore thirst and hunger.
The server checks that the buyer stands at the machine, and machine events only go to nearby players. Without OneSync both checks are skipped (a warning is printed); everything else works.
Qbox, QBCore, ESX or ox_core
Optional
Money and thirst / hunger. ESX needs esx_status. Standalone: purchases are free by default; connect your own system at the top of bridge/server.lua.
Inventory
Optional
ox_inventory, qs-inventory, qb-inventory (old and new), ps-inventory, lj-inventory or ESX's inventory. Without one the item is consumed right after you take it from the tray.
Installation
Download the resource from the Cfx.re Portal → Assets → Granted Assets.
Put the ozystudio-vending folder in your resources folder. Don't rename the folder: the ox_inventory items call the export ozystudio-vending.useDrink.
Add this line to your server.cfg, after your framework and inventory:
ensure ox_inventory
ensure ozystudio-vending
Add the items (names must match item in config.lua). The definitions are in install/:
Type /vending in game. A ghost machine follows where you aim:
Key
What it does
Left / Right arrow
Rotate (hold Shift to rotate slowly)
G
Switch between the drink and the food machine
Enter
Place the machine
ESC / Backspace
Cancel
/vending remove deletes the placed machine you stand next to. Placed machines are saved in data/machines.json and appear for everyone immediately. Machines can also be written in Config.Machines; /vendingpos prints a config line for the spot in front of you. A machine can sell only some products (products = { 'cola', 'water' }); the other codes show SOLD OUT.
Using a machine
In front of the machine press E. The camera moves to the keypad.
Type the code shown under the product (10-29) with the mouse or the keyboard and press OK, or tap the card reader.
The server checks the price, your money, the distance and your inventory space. The item is pushed off the shelf, falls behind the glass, and your character bends down, opens the tray flap and takes it.
Use the item from your inventory to drink or eat it. X stops, and the item is not used up.
Key
On the keypad
Enter
OK
C / Delete
Clear
Backspace
Delete the last digit
ESC
Leave the keypad
Products
Machine
Product
Item
Default price
Restores
Cold Drinks
eCola
ecola
$8
Thirst 30
Cold Drinks
Orang-O-Tang
orangotang
$7
Thirst 30
Cold Drinks
Junk Energy
junk_energy
$12
Thirst 20 + stamina
Cold Drinks
Flow Water
flow_water
$5
Thirst 40
Snacks & Food
Dark Royale
dark_royale
$6
Hunger 25 + stamina
Snacks & Food
Duo Crunch
duo_crunch
$5
Hunger 25
Snacks & Food
Sugar Bombz
sugar_bombz
$4
Hunger 15
Snacks & Food
Phat Chips
phat_chips
$5
Hunger 25
Prices and values are in Config.Products. Only the server's price is used; the client never sends a price.
Settings
Everything is in config.lua, commented. The ones most servers change:
true = every player sees the texts in their own GTA language when it's available
Config.Account, Config.Currency
'cash' or 'bank'; the symbol on the machine's screen
Config.Products
Price, thirst / hunger, stamina, and consumable (set to false if another script already uses that item)
Config.Machines
Machines from config, with an optional products list per machine
Config.Admin
Placement command name, ace permission and framework groups
Config.PurchaseCooldown, Config.RefillTime
Time between two purchases (checked on the server) and until an emptied slot refills
Config.SpawnDistance, Config.ProductDistance
Machines and shelf products are only created within these distances (performance)
Config.Keys
E / X (GTA control ids)
Escrow: the code is protected with Cfx.re Asset Escrow. Open files:config.lua, bridge/*.lua, locales/*.lua and install/*.lua are not encrypted. Money, items and thirst / hunger are only in bridge/server.lua.
Languages and the GTA font: texts drawn with the game's own font (the E prompt, the placement help, the machine's screen) avoid letters the font does not have. In Arabic they stay in English; on the Russian machine screen they stay in English.
Performance
Machines, flaps and shelf products are local objects, created only near the player and deleted when you leave. Loading runs in its own thread, so the E prompt never stalls.
The main loop runs once a second when far away, every 300 ms near a machine, and every frame only within E distance or on the keypad.
Drink machine: 15.6k triangles, 571 KB. Food machine: 13.4k triangles, 669 KB.
Updating
Back up data/machines.json (your placed machines).
Delete the old folder and put the new one in its place, then copy data/machines.json back.
Restart the server and reconnect. If the old look remains, clear the FiveM cache (FiveM Application Data\data\cache\priv).
Troubleshooting
Problem
What to check
The machine is not visible
Look for "Model could not be loaded" in F8. Is the stream folder complete and are both ytyp lines in fxmanifest.lua? Reconnect.
Keys and screen don't match the model
The game still has the old models loaded (F8 says the models are an old version). Delete the old folder, restart, quit the game fully and reconnect.
Using the item does nothing (ox_inventory)
The folder must be named ozystudio-vending and the item needs client.export = 'ozystudio-vending.useDrink'.
Using the item does nothing (other inventories)
The item name must match item in config.lua.
"running standalone" but you have a framework
Start ozystudio-vending after your framework, or set Config.Framework.
/vending says no permission
Add the ace line from installation step 5, or put your group in Config.Admin.groups.
Scripts · OZY STUDIO Documents
Taco Truck – Walk-In Food Truck Job Script
A walk-in taco truck job. Buy or rent your own truck at the dealer, stock it up, park it on any corner and open the shop. You walk into the truck, cook every taco yourself on the griddle and hand it out of the window to NPC customers and to players who order on the truck's tablet. The money goes into your truck's till.
Resources
ozystudio-tacotruck · v1.0.1
Size
4.5 MB (4.1 MB streamed: the walk-in truck, kitchen screens and 13 food props)
Frameworks
Qbox, QBCore, ESX, ox_core or standalone (detected automatically)
Interaction
ox_target, qb-target or the E key (detected automatically)
Callbacks, the screens on the truck (DUI) and the language files.
OneSync
Required
The truck is a networked vehicle and the shop's state (open, queue, menu, stock) lives in state bags.
Qbox, QBCore, ESX or ox_core
Optional
Money (Config.Account: cash or bank) and hunger when a player eats the order. Standalone: everything is free by default; connect your own money at the top of bridge/server.lua.
ox_target / qb-target
Optional
Used when running; otherwise the E key.
Vehicle keys, fuel
Optional
Keys: qbx_vehiclekeys, qb-vehiclekeys, wasabi_carlock, MrNewbVehicleKeys. Fuel: ox_fuel, LegacyFuel, cdn-fuel. Others go in bridge.
No inventory items are needed: the stock lives in the truck.
Installation
Download the resource from the Cfx.re Portal → Assets → Granted Assets.
Put the ozystudio-tacotruck folder in your resources folder and keep the folder name.
Add it to your server.cfg, after ox_lib and your framework:
Framework groups in Config.Admin.groups (admin, god) are allowed too.
Restart the server and reconnect.
How it works
Dealer (blip "Taco Truck Dealer"): buy a truck, or rent one for Config.Truck.rent.minutes. Take it out: it waits on the street next to the dealer, with keys and a full tank.
Supplies: at the dealer, pick how many packs of tortillas, meat, onion & cilantro, salsa, limes and baskets you want. You get a box in your hands; carry it to your truck and press E next to it to load it. A dropped box waits at the dealer.
Open the shop: park, get out and open the shop at the back of the truck. The rear doors open, the steps fold down and the serving hatch opens; the truck is frozen while it is open. Another open truck may not stand closer than Config.Truck.openMinDistance.
Cook: step to the griddle and choose Cook. The order ticket on the left lists every step.
Serve: carry the basket to the window (G), then E to hand it out. The result card shows the score (0-100), the price and the tip.
Player orders: players order 1-3 tacos on the tablet outside the window. The server holds the money and pays it when you serve; not served within Config.Menu.playerOrderMinutes, or the shop closes, the player is refunded.
Till & menu (inside, by the window): set the truck name, the taco price and the screen colour, and take the money.
Close the shop from inside: you are put outside behind the truck and the customers leave.
The truck goes back to the dealer (stock and till are kept) when its owner logs out or stays farther than Config.Truck.returnWhenAway.distance from it for minutes. A rented truck goes back when the rent runs out.
Cooking controls
Input
What it does
Left mouse (hold)
Take and drag: trays, tortillas, meat, onion, limes, baskets
Left mouse (click)
Flip a tortilla / stir the meat; with the salsa bottle in hand, pour over a basket
Right mouse
Flip what you hold / take the last thing off a basket / put the bottle back
G
Carry the basket you point at
Right mouse (hold) + move
Turn the camera
WASD · Mouse wheel
Move along the counter · zoom
Backspace
Step back
Raw meat cooks on the griddle in Config.Cook.meatSeconds if you stir it; without stirring for longer than stirEvery seconds the bottom starts to burn. A tortilla needs tortillaSeconds on each side. One tray of meat gives scoopsPerTray scoops.
Admin commands
Command
What it does
/tacoadmin stock
Fill your truck's stock
/tacoadmin customer
Send the next NPC customer now
Settings
Everything is in config.lua, commented. The ones most servers change:
Setting
What it does
Config.Framework, Config.Account
'auto', or force a framework · 'cash' or 'bank'
Config.Locale
'auto' follows ox_lib's language (setr ox:locale de), or force one: 'en', 'tr', 'de', 'fr', 'es', 'pt-br', 'it', 'nl', 'pl', 'ru', 'cs', 'da', 'sv', 'ro', 'ar', 'ja'
Config.Dealer
Position, ped, scenario, blip, where the truck is spawned and returned
The dealer's list, pack sizes and prices, how much a truck holds, the box model and carry animation
Config.Menu
minPrice (the lowest taco price; every truck starts at it), maxPrice, max tip, screen colours, player order time
Config.Cook
Cooking times, scoops per tray, tacos per basket, salsa squeeze time
Config.Customers
How often NPCs come, one at a time or a queue, patience, models, sales per hour, the spots at the window (in the truck's own space, so they follow the truck), walk-in and walk-off points
Config.Interaction
'auto', 'target' or 'key'
Escrow: the code is protected with Cfx.re Asset Escrow. Open files:config.lua, bridge/*.lua and locales/*.json are not encrypted. Money, hunger, keys and fuel are only in bridge.
Saved data: truck records (owner, stock, till, menu) are in data/trucks.json.
Languages and the GTA font: the dealer's map blip is drawn with the game's own font, which has no Arabic or Japanese letters; in those two it stays in English.
Performance
One shared loop runs everything that needs every frame, and only while you are near a truck or cooking. Far from every truck and the dealer the script only checks once a second.
The kitchen props and screens exist only within Config.Truck.propsDistance of a truck. Only the screens on your side of the truck are drawn: the kitchen display and the till inside, the menu board and the tablet outside.
NPC customers are shown only within Config.Customers.showDistance.
Updating
Back up data/trucks.json (players' trucks).
Delete the old folder and put the new one in its place, then copy data/trucks.json back.
Restart the server and reconnect. If the old look remains, clear the FiveM cache (FiveM Application Data\data\cache\priv).
Troubleshooting
Problem
What to check
The truck is invisible or "model not found"
Is the stream folder complete and are both DLC_ITYP_REQUEST lines in fxmanifest.lua? Reconnect.
"framework: standalone" but you have a framework
Start ozystudio-tacotruck after your framework, or set Config.Framework.
No keys for the truck
Add your key script to Bridge.GiveKeys in bridge/server.lua or bridge/client.lua.
No customers come
The shop must be open and Config.Customers.enabled = true; there is a gap of Config.Customers.every seconds between customers.
Texts show as keys (p_open...)
Check Config.Locale: the file locales/<code>.json must exist.
The checkout process is owned & operated by Tebex Limited, who handle product fulfilment, billing support and refunds.