Config builder

X3D Daily Login config

Change values in the form, then copy one topic or the whole file into your server.

Download with my settings
v1.4.3
💡 Already changed your config? Paste it to continue from it. Keys new in this version get ★.

General

Docs ↗
Config.Framework

Framework: 'auto' (ESX if present, otherwise standalone) | 'esx' | 'standalone'

Config.Locale

UI and message language: 'th' | 'en'

Config.Command

Command that opens the panel (/dailylogin)

Config.Key

Key that opens the panel ('' = no key bound)

Config.AdminAce

Admin ACE permission (used by /dailyreset)

Config.TimezoneOffset

Day boundary: seconds added to UTC time (Thailand GMT+7 = 7 * 3600)

Config.ResetOnMiss

Reset the streak to 1 after a missed day (false = keep counting)

Config.AutoClaim

Claim automatically on join (true = no window needed, only a notification)

Config.AutoOpen

Open the panel automatically when there is something to claim (separate from AutoClaim, it only shows the calendar)

Skipped while the player is dead or in the pause menu (client side check via Framework.IsBusy)

'always' = open the calendar on every join (first spawn of the session) even with nothing to claim

Config.AutoDelay

Milliseconds after spawning before the auto-claim/auto-open runs (lets the HUD and bag load first)

Config.AutoNotify

Notify each auto-claimed reward (reward name + track and day)

Config.Mailbox

Send items/money to a mailbox instead of the bag, so a full bag never loses a reward

resource = the mailbox script ('' = straight to the bag) · see Reward.ToMailbox in addons/reward/server.lua

box = target box ('safe' = x3d_mailbox's non-expiring safe) · sender = sender name on the mail

resource
box
sender
Config.BackClaim

Back-claim: after missing several days the player can still collect the missed days

enabled = false (default) means one press pays only today's reward, the missed days are gone

enabled = true means one day per press, oldest reachable day first, up to today

the streak stays continuous because days are consumed one at a time

maxDays = how far back the player may collect (3 = after missing 5 days only the last 3 can be collected)

enabled
maxDays
Config.HoldWhenFull

Bag full at claim time: keep the reward as a "pending reward" for that player

and let them claim it later when there is room (the streak continues, no day lost)

false = the day is not consumed, the player clears the bag and claims again

Config.MaxPending

Maximum pending rewards held per player (clear old ones before more are accepted)

weapon = { { name = 'WEAPON_PISTOL', ammo = 30 } }

Docs ↗
Config.Rewards

weapon = { { name = 'WEAPON_PISTOL', ammo = 30 } }

Reward table: day 1..N of the streak

weapon = { { name = 'WEAPON_PISTOL', ammo = 30 } }

e.g. [8] = { items = { { item = 'bread', count = 2 } } }

weapon = { { name = 'WEAPON_PISTOL', ammo = 30 } } · 7 rows
#Name= { { account = 'bank', amount = 500 } }money= reward name shown on the calendar (optional)labelOptions
1[1]
2[2]
3[3]
4[4]
5[5]
6[6]
7[7]

Day 8 loops back to day 1's reward (false = days past the table give nothing) and 1 more

Docs ↗
Config.LoopRewards

Day 8 loops back to day 1's reward (false = days past the table give nothing)

Config.Tracks

Several reward tracks at once (e.g. the normal calendar + a limited launch event), each with its own streak/calendar

nil (default) = Config.Rewards above is used as the single track 'default', nothing changes for old configs

If you set this and still want the original track, add id = 'default' with rewards = Config.Rewards yourself

enabled = false = track fully off, hidden and not claimable

from/to = os.time() window when the track is open (unix, nil = unlimited), outside it the track is hidden and locked

rewards = reward table of this track (same format as Config.Rewards)

Config.Tracks = {

[1] = { items = { { item = 'bread', count = 5 } } },

[2] = { money = { { account = 'bank', amount = 3000 } } },

} },

}

Playtime bonus: playing N hours today (counted from join, offline time excluded) unlocks a reward to claim

Docs ↗
Config.PlaytimeBonusHours

Playtime bonus: playing N hours today (counted from join, offline time excluded) unlocks a reward to claim

key = number of hours; claimed by hand (never automatic), once per tier per day, resets on the same day boundary as check-in

Playtime bonus: playing N hours today (counted from join, offline time excluded) unlocks a reward to claim · 2 rows
#NamemoneylabelOptions
1[2]
2[5]

How often (seconds) playtime is checked and counted and 1 more

Docs ↗
Config.PlaytimeTickSeconds

How often (seconds) playtime is checked and counted

Config.PlaytimeMode

What the playtime bonus gives

'reward' = each tier unlocks its Config.PlaytimeBonusHours reward to claim by hand

'extra_day' = each tier instantly claims the next day of every active track (no waiting for tomorrow)

Item names to show (optional, the raw key is shown when missing)

Docs ↗
Config.ItemLabels

Item names to show (optional, the raw key is shown when missing)

Money account names to show

Docs ↗
Config.AccountLabels

Money account names to show

money
bank
black_money

Token/currency names to show (key = kind in a token reward), the raw kind is shown when missing

Docs ↗
Config.TokenLabels🔒 kept on this device only

Token/currency names to show (key = kind in a token reward), the raw kind is shown when missing

Weapon names to show (optional, the raw key is shown when missing)

Docs ↗
Config.WeaponLabels

Weapon names to show (optional, the raw key is shown when missing)

Item image on the calendar: image path of your inventory ({item} = item name) and 2 more

Docs ↗
Config.ItemImage

Item image on the calendar: image path of your inventory ({item} = item name)

'' = no image, only the item name is shown

Config.CanCarryExport

Check the bag can take the reward before paying; set it only when the server runs its own inventory

(x3d_inventory/ox_inventory etc.), because ESX's own weight numbers go stale when another inventory

controls the bag and rewards get refused as "bag full" on an empty bag

Empty = ESX canCarryItem if available, otherwise the check passes

resource
method
Config.Storage

JSON file that holds the data, and how often it is saved (seconds)

File
FlushSeconds