Four parts that run by themselves from December to Epiphany or whenever an admin switches them on: a white Christmas with trees, lights and bells; an advent calendar with 24 doors and gifts hidden across the map every day; a Christmas market with vendors, Santa's sleigh dropping gifts on parachutes and Santa players with a gift bag; and a snowball fight with two teams, prizes and a live display. Everything that gives money or items is decided and booked once by the server and written to a ledger first: a restart or a database error does not pay twice, missing reward rows are written again, and a booking whose result is not known is listed for an admin instead of being guessed.
Escrow edition. The game code is protected with Cfx.re Asset Escrow. The config, the language files, the framework bridge, the hooks and the item definitions stay readable, so you can change settings, texts, rewards and integrations. If you want to edit the game code itself, choose the Source Access edition.
Snow and decoration
- White Christmas: the server keeps snow weather in a period you set. Works with your own weather script through a hook, with qb-weathersync, or the clients show the snow themselves.
- Big Christmas trees, small trees, snowmen and single lights wherever you place them. Everything is local and only drawn nearby; props are removed when players leave or the resource stops.
- Coloured lights around every tree that slowly change colour, limited to the closest ones so the frame rate stays where it is.
- Little bells ring at the big tree: a synthetic sound made in the browser, no sound files.
Advent calendar and hidden gifts
- 24 doors in a Christmas-style calendar window, one per character and day. The content of every day is yours to set: money, items, or one of a list rolled by the server. Optionally missed doors can be caught up.
- Every day of the season the server hides a set of gift boxes on the map (20 by default, from 60 hiding spots or your own). Each box only once, first come, at most five per character and day. The hiding spots stay on the server (server-only settings file); clients only learn about boxes near them; the box sparkles, a blip shows when you are close.
- A gift item to unwrap: three seconds of unwrapping, then the server rolls the content by weights you set. Exactly one gift is removed, and only when the unwrapping is done.
- Leaderboard "gifts found" per season in the overview menu.
Christmas market and Santa
- Seven stalls around a centre you place: mulled wine, cocoa and tea, gingerbread, candy canes, roasted almonds, punch and cookies, and an info stall. Open at the hours you set; then vendors stand at the stalls and it glows warm.
- Buying through a target menu. Prices come only from the config, the server checks stall, goods, count, distance and opening hours. Takings optionally go to a society account (esx_addonaccount, qb-banking, Renewed-Banking, qb-management or your own through a hook).
- Santa's gift rain on a date you set (24 December 18:00 by default, once per season) or on command: an announcement, Santa's sleigh with a glowing trail and sleigh bells flies over the city, thirty gifts fall on parachutes, each a few metres beside a hiding spot (never on one, and never near today's hidden gifts). The exact place of a falling gift is only sent to players near it. Landed gifts sparkle and can be taken, each once, at most three per character. A small particle firework rises at the market when the sleigh has gone (no explosions).
- Santa players: give a player a gift bag for an hour; he hands gifts to players nearby, one per recipient and season (also when he is named again).
- Nine items with their own pictures and ready-made definitions for ox_inventory, qb-inventory and the ESX standard inventory, with optional consumable entries for qb-smallresources and esx_basicneeds. Use your own item names instead if you already have Christmas items.
Snowball fight
- Daily at the times you set, with a sign-up announcement, or started by an admin. Two balanced teams in an arena you place, rounds of six minutes, late joining allowed.
- The snowball weapon is given to the ped for the round only: not an inventory item, so nothing can be kept, traded or stored. With ox_inventory the weapon wheel lock for mini games is used; hooks for other inventories.
- Every hit is checked by the server: both in the round, different teams, distance, thrower rate, a cap per pair, the thrower actually holding a snowball and not frozen himself, at most three players per throw. The server also sees throws itself and cancels their damage, so nobody gets hurt and no invincibility is needed.
- Prizes through the ledger: a gift for everybody in the winning team (only with hits of its own, so a round nobody played pays nothing), money for the best thrower, which only counts hits the server saw, needs enough players on both sides who are still in at the end and is paid at most three times per character and season. Offline players are paid on their next login. Honest limit: a cheat client with an aimbot cannot be told apart from good aim, so keep that money small; a thrower with an unusually high rate of hits the server saw (all hits, however many opponents) gets a log line for an admin.
- A small display with teams, score, time left, snowballs and an arena warning. Leaving the arena, going down or disconnecting puts you out.
Safe money and items
- Every reward is a row with a unique reference and a state. The claim (door opened, box taken, round finished) is written before the reward rows; after a restart missing rows are granted again, existing ones are skipped.
- One booking per reward through the framework bridge; whether it was booked is decided by the balance or item count before and after, never by trying a second way. Right after each booking the player is saved: on ESX, and on QBCore / Qbox with ox_inventory, money and items go into the database in one write that has to be confirmed before a reward counts as paid; with qb-inventory the framework stores the items itself a moment later (no confirmation).
- Nothing is paid to a player who is leaving; the reward waits for the next login. A full inventory keeps the item owed and retries later.
- A crash in the middle of unwrapping or buying is never guessed: the case is listed for an admin (
/xmasadmin unclear) to decide. A database error does not lose a reward: missing rows are written again every minute, and at every start and every ten minutes they are checked against the claims of the whole season (advent doors included).
For server owners
- Admin commands: season on, off or by date; snow; lay out today's gifts again; start and stop the gift rain; name Santa players; start, run, stop or cancel the snowball fight; place and remove points; list and resolve unclear cases; a status line with everything at a glance.
- Placement mode for trees, snowmen, lights, hiding spots, the market centre, single stalls and the arena. No coordinates to copy; the resource ships with rough starting points on the base map so it works from the first start.
- Event coordination: while the gift rain or the snowball fight runs, a GlobalState key tells other event scripts; a hook and GlobalState keys let this resource wait for yours.
- Hooks for announcements (your broadcast or phone script), your weather script, your medical script, logs, notifications, your own inventory and your own banking script.
- Admin rights through ACE or your framework's groups. Logs in the console and to Discord webhooks, with an optional separate channel for money.
- Target: ox_target, qb-target or a built-in help text with key E. Notifications through ox_lib, your framework or the GTA feed.
- Database tables are created automatically.
Frameworks and languages
- ESX Legacy, QBCore and Qbox, detected automatically.
- English and German included. Add your own language in the locales folder; the calendar and the display take their texts from the same file.
- Documentation in English and German.
Requirements
- ESX Legacy, QBCore or Qbox
- oxmysql
- ox_lib
- OneSync
- An inventory: ox_inventory, qb-inventory or the ESX standard inventory (others through a hook)
- Optional: ox_target or qb-target; qb-weathersync or your own weather script
- Game build: the sleigh and some gift and snowman models come from newer game updates (The Chop Shop and the winter update 2025). Set
sv_enforceGameBuildto a build that has them; without them base-game models or lights are used. - Escrow: the server's license key must belong to the Cfx.re account that bought the script.
Installation
- Download
novus_christmasfrom your Cfx.re Keymaster (Granted Assets) and put the folder into your resources. - Add
ensure novus_christmasto your server.cfg after oxmysql, ox_lib, your framework and your inventory. - Add the nine items from the
installfolder to your inventory (ready-made files for ox_inventory, qb-inventory and ESX) and copy the pictures. - Start the server. The database tables are created on the first start. Set the language in
config.luaand place your trees, hiding spots, market and arena in game with/xmasadmin place.
Support
Questions or a bug? Join the Novus Scripts Discord: https://discord.gg/xUbffz5b8J. Please have your Tebex transaction ID ready.