X3D Daily Login config
Change values in the form, then copy one topic or the whole file into your server.
Download with my settingsGeneral
Docs ↗Config.FrameworkFramework: 'auto' (ESX if present, otherwise standalone) | 'esx' | 'standalone'
Config.LocaleUI and message language: 'th' | 'en'
Config.CommandCommand that opens the panel (/dailylogin)
Config.KeyKey that opens the panel ('' = no key bound)
Config.AdminAceAdmin ACE permission (used by /dailyreset)
Config.TimezoneOffsetDay boundary: seconds added to UTC time (Thailand GMT+7 = 7 * 3600)
Config.ResetOnMissReset the streak to 1 after a missed day (false = keep counting)
Config.AutoClaimClaim automatically on join (true = no window needed, only a notification)
Config.AutoOpenOpen 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.AutoDelayMilliseconds after spawning before the auto-claim/auto-open runs (lets the HUD and bag load first)
Config.AutoNotifyNotify each auto-claimed reward (reward name + track and day)
Config.MailboxSend 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
resourceboxsenderConfig.BackClaimBack-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)
enabledmaxDaysConfig.HoldWhenFullBag 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.MaxPendingMaximum pending rewards held per player (clear old ones before more are accepted)
weapon = { { name = 'WEAPON_PISTOL', ammo = 30 } }
Docs ↗Config.Rewardsweapon = { { 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 } } }
| # | Name | = { { account = 'bank', amount = 500 } }money | = reward name shown on the calendar (optional)label | Options |
|---|---|---|---|---|
| 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.LoopRewardsDay 8 loops back to day 1's reward (false = days past the table give nothing)
Config.TracksSeveral 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.PlaytimeBonusHoursPlaytime 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
| # | Name | money | label | Options |
|---|---|---|---|---|
| 1 | [2] | |||
| 2 | [5] |
How often (seconds) playtime is checked and counted and 1 more
Docs ↗Config.PlaytimeTickSecondsHow often (seconds) playtime is checked and counted
Config.PlaytimeModeWhat 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.ItemLabelsItem names to show (optional, the raw key is shown when missing)
Money account names to show
Docs ↗Config.AccountLabelsMoney account names to show
moneybankblack_moneyToken/currency names to show (key = kind in a token reward), the raw kind is shown when missing
Docs ↗Config.TokenLabels🔒 kept on this device onlyToken/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.WeaponLabelsWeapon 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.ItemImageItem image on the calendar: image path of your inventory ({item} = item name)
'' = no image, only the item name is shown
Config.CanCarryExportCheck 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
resourcemethodConfig.StorageJSON file that holds the data, and how often it is saved (seconds)
FileFlushSeconds