Config File
Config = {}
Config.TestMode = true -- Set to true to allow self-proposal for testing
Config.Debug = false -- Set to true for debug prints
-- Integration with envi-forever-rings -- Download Here: https://envi-scripts.tebex.io/package/6545241
Config.EnviForeverRings = true
Config.RemoveDivorcePapersAfterUse = true -- NEW: Set to true to remove divorce papers after a divorce has been finalized
Config.PlayProposalAnimation = true -- NEW: Uses the PlayProposalAnimation function in client/client_open.lua. Edit that as you wish
Config.StartCeremonyCommand = 'startCeremony' -- NEW: Command to start the ceremony used by the minister
-- When enabled:
-- - Ring configurations will be imported from envi-forever-rings
-- - This ensures consistent ring models/textures between both resources
-- - The engagement rings in Config.Rings below will be ignored if this is enabled
Config.Rings = { -- you will need to set clothing numbers to match your server's clothing layouts
-- if using rings provided in envi-forever-rings, the component numbers will be 10 and the models should be towards the end of 'Decals' section
Male = { -- NOTE: This needs to exactly match (spelling and casing) the gender translations in Lang.lua
Engagement = {
['simple_diamond'] = {
name = 'Diamond Engagement Ring',
component = 10,
model = 197,
texture = 0,
description = 'A beautiful engagement ring'
},
},
Wedding = {
['gold_band'] = {
name = 'Gold Wedding Band',
component = 10,
model = 196,
texture = 0,
description = 'A beautiful wedding ring'
}
}
},
Female = { -- NOTE: This needs to exactly match (spelling and casing) the gender translations in Lang.lua
Engagement = {
['simple_diamond'] = {
name = 'Diamond Engagement Ring',
component = 10,
model = 197,
texture = 0,
description = 'A beautiful engagement ring'
},
},
Wedding = {
['gold_band'] = {
name = 'Gold Wedding Band',
component = 10,
model = 196,
texture = 0,
description = 'A beautiful wedding ring'
},
}
}
}
Config.WeddingLocations = {
['BEACH'] = {
label = 'Beach Venue',
coords = vector3(1300.9360, 6606.3979, 2.2333),
effects = {
confetti = {
dict = 'scr_xs_celebration',
effect = 'scr_xs_confetti_burst',
duration = 60000, -- time in ms effect lasts
locations = { -- will loop through these locations and set off confetti at end of ceremony!
{
coords = vector3(1314.2679, 6617.8608, 2.00),
size = 2.0,
},
{
coords = vector3(1317.0389, 6617.8555, 2.00),
size = 2.0,
},
{
coords = vector3(1316.5802, 6612.3066, 2.00),
size = 2.0,
},
{
coords = vector3(1313.7825, 6612.4546, 2.00),
size = 2.0,
},
}
}
},
zones = {
guestBook = {
coords = vector3(1300.9360, 6606.3979, 2.2333),
radius = 2.0,
label = 'Guest Book',
description = 'Initial check-in location'
},
altar = {
coords = vector3(1315.8501, 6619.9023, 2.1275),
radius = 3.0,
label = 'Altar',
description = 'Final check-in location'
},
bridalEntry = {
coords = vector3(1351.0010, 6572.8740, 11.5543),
radius = 4.0,
label = 'Bridal Entry',
description = 'Bridal preparation area'
},
bar = {
coords = vec3(1299.66, 6597.62, 2.24),
radius = 2.0,
label = 'Open Bar',
description = 'Grab something to drink!'
},
music = {
coords = vec3(1325.6455, 6614.9902, 2.3442),
radius = 3.0,
label = 'DJ Booth',
description = 'Control the wedding music',
defaultSong = {
name = 'Wedding Music',
url = 'https://www.youtube.com/watch?v=lgh9XTkQTDI',
volume = 1.0,
position = vec3(1322.5869, 6610.7554, 2.1380)
},
playlist = {
maxSongs = 10,
}
},
}
},
}
Config.Roles = {
minister = {
label = 'Minister',
description = 'Officiates the ceremony',
required = true,
appointedBy = {'bride', 'groom', 'planner'},
checkInStages = {
{zone = 'altar', label = 'At Altar'}
}
},
bestMan = {
label = 'Best Man',
description = 'Stands with the groom',
required = false,
appointedBy = {'groom', 'planner'},
},
maidOfHonor = {
label = 'Maid of Honor',
description = 'Stands with the bride',
required = false,
appointedBy = {'bride', 'planner'},
},
planner = {
label = 'Wedding Planner',
description = 'Helps with the planning of the wedding and assinging of Roles',
required = false,
appointedBy = {'bride', 'groom'},
},
usher = {
label = 'Usher',
description = 'Helps with the ceremony',
required = false,
appointedBy = {'bride', 'groom', 'planner'},
},
bride = {
label = 'Bride',
description = 'The bride',
required = true,
checkInStages = {
{zone = 'bridalEntry', label = 'Ready to Walk'},
{zone = 'altar', label = 'At Altar'}
}
},
groom = {
label = 'Groom',
description = 'The groom',
required = true,
checkInStages = {
{zone = 'altar', label = 'Waiting at Altar'},
{zone = 'altar', label = 'Final Position'}
}
},
dj = {
label = 'DJ',
description = 'Controls the music for the ceremony',
required = false,
appointedBy = {'bride', 'groom', 'planner'}
}
}
Config.OpenBar = {
items = {
{ itemName = 'beer', label = 'Beer', price = 10, },
{ itemName = 'wine', label = 'Wine', price = 10, },
}
}
Config.AfterPartyTime = 30 -- Time in minutes that the wedding will still be active after the ceremony (bar, dj booth etc)
Config.TutorialNotify = {
enabled = true,
reminderInterval = 20000, -- 20 seconds
messages = {
setup = {
needMinister = "A minister needs to be assigned. Visit the Guest Book to appoint one.",
needBestMan = "You can assign a Best Man at the Guest Book.",
ministerNeeded = "Waiting for the minister to arrive at the altar to begin.",
ministerReady = "The minister is ready. Groom should proceed to the altar.",
groomNeeded = "Waiting for the groom to take position at the altar.",
groomFirstPosition = "Groom needs to take final position at the altar.",
groomReady = "The groom is ready. Bride can proceed to the entry point.",
brideEntry = "Bride should check in at the entry point when ready.",
brideFinalWalk = "The bride can now proceed to the altar.",
readyToStart = "All participants are in position. The ceremony will soon begin."
},
roleSpecific = {
minister = {
initial = "Head to the altar to begin ceremony preparations.",
atAltar = "Wait for the groom to arrive at the altar.",
readyToStart = "When everyone is in position, use /startCeremony to begin the wedding."
},
groom = {
initial = "Wait for the minister to arrive at the altar.",
afterMinister = "Proceed to the altar for your initial position.",
finalPosition = "Take your final position at the altar.",
waitingBride = "Wait for the bride to arrive."
},
bride = {
initial = "Wait for the groom to take position at the altar.",
readyToWalk = "Proceed to the bridal entry point when ready.",
finalWalk = "You may now walk to the altar.",
inPosition = "The ceremony will begin shortly."
}
}
}
}
-- Forever Rings Integration
CreateThread(function()
if not Config.EnviForeverRings then
return
end
local timeoutForForeverRingsStartup = 15000
while not GetResourceState('envi-forever-rings') == 'started' do
if timeoutForForeverRingsStartup <= 0 then
print('[envi-weddings] Timed out waiting for Forever Rings to start')
break
end
timeoutForForeverRingsStartup = timeoutForForeverRingsStartup - 100
Wait(100)
end
if GetResourceState('envi-forever-rings') == 'started' then
local ringConfigs = exports['envi-forever-rings']:GetRingConfigs()
if ringConfigs then
Config.Rings.Male.Engagement = {}
Config.Rings.Female.Engagement = {}
for key, ring in pairs(ringConfigs.Male) do
Config.Rings.Male.Engagement[key] = {
name = ring.name .. ' Engagement Ring',
model = ring.model,
texture = ring.texture,
component = ring.component,
description = 'A beautiful ' .. ring.name .. ' engagement ring',
image = ring.image,
cost = ring.cost
}
end
for key, ring in pairs(ringConfigs.Female) do
Config.Rings.Female.Engagement[key] = {
name = ring.name .. ' Engagement Ring',
model = ring.model,
texture = ring.texture,
component = ring.component,
description = 'A beautiful ' .. ring.name .. ' engagement ring',
image = ring.image,
cost = ring.cost
}
end
end
if Config.Debug then
print('[envi-weddings] Finished loading Forever Rings integration')
print(json.encode(Config.Rings, {indent = true}))
end
end
end)
Last updated