> For the complete documentation index, see [llms.txt](https://izaap-studios.gitbook.io/izaap-scripts/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://izaap-studios.gitbook.io/izaap-scripts/multicharacter/config-files.md).

# Config Files

{% tabs %}
{% tab title="config.lua" %}

```lua
Config = Config or {}

------------------------------------------------------------
-- Core Settings
------------------------------------------------------------

Config.Framework = 'auto' -- auto, qb, qbx, esx

Config.Command = 'characters'
Config.CommandEnabled = true
Config.AutoOpenOnJoin = true

Config.Locale = 'en' -- en, es

Config.MaxCharacters = 4

Config.CharacterSlots = {
    Enabled = true,

    -- Default slots for every player that is not in the DB list.
    DefaultCharacters = 1,

    -- Safety cap for the admin panel.
    MaxGrantCharacters = 5,

    -- Command to open the slots admin NUI.
    Command = 'listmulticharacter',

    -- Only these licenses can open/use the command.
    -- You can use full license or raw value, both work:
    -- 'license:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    -- 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    AllowedLicense = {
        -- 'license:YOUR_LICENSE_HERE'
        'license:c70da7d1b951554d2f69aae6632823642b0fa939'
    }
}

Config.AllowDelete = true
Config.Debug = false

Config.SocialLinks = {
    discord = 'https://discord.gg/your-invite',
    youtube = 'https://www.youtube.com/@your-channel'
}

------------------------------------------------------------
-- Theme
------------------------------------------------------------

-- Main UI color.
-- Use a single HEX for a solid color:
-- Config.PrimaryColor = '#f8c82c'
--
-- Or two HEX colors for a linear gradient:
-- Config.PrimaryColor = { '#f8c82c', '#d4a80f' }
Config.PrimaryColor = '#002bec'

------------------------------------------------------------
-- Intro Cinematic / Welcome Overlay
------------------------------------------------------------

Config.IntroCinematic = Config.IntroCinematic or {}

Config.IntroCinematic.welcome = {
    logo = './assets/logo.png'
}

------------------------------------------------------------
-- Camera
------------------------------------------------------------

Config.Camera = {
    mode = 'player',
    fov = 38.0,

    intro = {
        enabled = true,
        duration = 3400,
        renderDuration = 900
    },

    dof = {
        enabled = true,
        near = 0.35,
        far = 18.0,
        strength = 0.42
    }
}

------------------------------------------------------------
-- Weather / Time
------------------------------------------------------------

Config.WeatherAndTime = {
    enable = true,

    weather = 'EXTRASUNNY',

    hour = 20,
    minute = 0,

    filter = '',

    handler = function(active)
        -- You can disable/enable your weather sync here.
        -- Example:
        -- if active then
        --     TriggerEvent('qb-weathersync:client:DisableSync')
        -- else
        --     TriggerEvent('qb-weathersync:client:EnableSync')
        -- end
    end
}

------------------------------------------------------------
-- Player Load State
------------------------------------------------------------

Config.PlayerLoadState = {
    enabled = true,

    stateName = 'izaap_multicharacter',

    useIsLoggedInState = true,

    triggerFrameworkUnloadEvents = true,

    unloadEvents = {
        'QBCore:Client:OnPlayerUnload',
        'qbx_core:client:onPlayerUnload',
        'esx:onPlayerLogout',
        'esx:playerLogout'
    },

    customUnloadEvents = {
        'izaap_multicharacter:client:preloadStarted'
    },

    customLoadEvents = {
        'izaap_multicharacter:client:preloadFinished'
    }
}

------------------------------------------------------------
-- Entrance Effects
------------------------------------------------------------

Config.Effects = {
    useEffects = true,
    -- Use 'primary' to match Config.PrimaryColor, or set RGB manually:
    -- sphereColor = { 248, 200, 44 },
    sphereColor = 'primary'
}

Config.CreateCountries = {
    'United States',
    'Ecuador',
    'Colombia',
    'Mexico',
    'Spain',
    'Argentina',
    'Chile',
    'Peru',
    'Venezuela',
    'Brazil',
    'Dominican Republic',
    'Puerto Rico',
    'Canada',
    'France',
    'Germany',
    'Italy',
    'United Kingdom',
    'Japan'
}

-- Optional. If empty/nil, the first country from Config.CreateCountries is used.
Config.DefaultCountry = 'United States'

```

{% endtab %}

{% tab title="config\_features.lua" %}

```lua
Config = Config or {}

------------------------------------------------------------
-- Partner / Friend System
------------------------------------------------------------

Config.PartnerSystem = {
    enabled = true,

    DiscordBotToken = 'YOUR_DISCORD_BOT_TOKEN',

    DefaultAvatar = 'https://cdn.discordapp.com/embed/avatars/0.png',

    RefreshPreviewOnAccept = true,
    RefreshPreviewOnRemove = true,

    OnePartnerOnly = true,

    CoupleCinematic = {
        enabled = true,
        PlayOnAccept = false,


    }
}

------------------------------------------------------------
-- Spawn Selector
------------------------------------------------------------

Config.SpawnSelector = {
    enabled = true,

    provider = 'izaap',

    useForExistingCharacters = true,
    onlyLastLocationNoSpawnMenu = false,

    apartmentStart = true,
    apartmentProvider = 'qbx_properties',

    apartmentLocation = {
        enabled = true,
        id = 'apartment',
        label = _L('spawn.apartment'),
        description = _L('spawn.apartmentDescription'),
        tag = _L('spawn.apartmentTag'),
        icon = _L('spawn.apartmentIcon'),
        image = 'https://img.gta5-mods.com/q95/images/beach-apartment/69814f-GTA5%202016-03-06%2023-11-04-76.png'
    },

    maxCards = 4,

    lastLocation = {
        enabled = true
    },

    locations = {
        {
            id = 'airport',
            label = _L('spawn.airport'),
            description = _L('spawn.airportDescription'),
            tag = _L('spawn.airportTag'),
            icon = _L('spawn.airportIcon'),
            image = 'https://forum-cfx-re.akamaized.net/optimized/5X/5/c/b/4/5cb48490e609bb71d943f9bda1ccde1d33aea67d_2_690x409.jpeg',
            coords = vec4(-1037.8403, -2738.0122, 20.1693, 330.3495)
        },

        {
            id = 'legion',
            label = _L('spawn.legion'),
            description = _L('spawn.legionDescription'),
            tag = _L('spawn.legionTag'),
            icon = _L('spawn.legionIcon'),
            image = 'https://forum-cfx-re.akamaized.net/optimized/4X/e/f/c/efce2d98ca29d3ce593ce51652f9a5d73638311b_2_690x378.jpeg',
            coords = vec4(195.17, -933.77, 30.69, 144.0)
        },

        {
            id = 'sandy',
            label = _L('spawn.sandy'),
            description = _L('spawn.sandyDescription'),
            tag = _L('spawn.sandyTag'),
            icon = _L('spawn.sandyIcon'),
            image = 'https://sandyshores.sadoj.com/wp-content/uploads/2021/01/9425753_orig-1.jpg',
            coords = vec4(1850.85, 3675.54, 33.76, 210.0)
        }
    }
}

------------------------------------------------------------
-- Starting Items
------------------------------------------------------------

Config.StartingItems = {
    enabled = true,

    Budget = 6500,

    GiveRemainingCash = false,
    MoneyAccount = 'cash',

    Inventory = 'auto',

    AllowEmptyPurchase = true,

    MaxDifferentItems = 20,

    DefaultGarage = 'pillboxgarage',

    Title = _L('starter.title'),
    Subtitle = _L('starter.subtitle'),
    PurchaseText = _L('starter.purchase'),

    Items = {
        {
            id = 'sandwich',
            type = 'item',
            name = 'sandwich',
            label = _L('starter.items.sandwich'),
            price = 500,
            max = 3,
            image = 'https://h1.overflow5m.com/creator/images/7b57df8d-3891-4fe8-9c89-a6592b7da832.png'
        },

        {
            id = 'water_bottle',
            type = 'item',
            name = 'water_bottle',
            label = _L('starter.items.water'),
            price = 250,
            max = 4,
            image = 'https://h1.overflow5m.com/creator/images/12592408-9b90-4c1c-850a-bb10c17858f6.png'
        },

        {
            id = 'phone',
            type = 'item',
            name = 'phone',
            label = _L('starter.items.phone'),
            price = 1500,
            max = 1,
            image = 'https://h1.overflow5m.com/creator/images/d53fd32a-3351-43aa-a607-88095be1c8b2.png'
        },

        {
            id = 'blista',
            type = 'vehicle',
            model = 'blista',
            label = _L('starter.items.blista'),
            price = 2000,
            max = 1,
            garage = 'pillboxgarage',
            image = 'https://h1.overflow5m.com/creator/images/04c76cc7-c8aa-4ebc-84e6-58acf8ae1174.png'
        },

        {
            id = 'bmx',
            type = 'vehicle',
            model = 'bmx',
            label = _L('starter.items.bmx'),
            price = 800,
            max = 1,
            garage = 'pillboxgarage',
            image = 'https://h1.overflow5m.com/creator/images/7bdf3453-03a2-461c-868e-dea3a44b663a.png'
        }
    }
}

------------------------------------------------------------
-- Clothing
------------------------------------------------------------

Config.Clothing = {
    enabled = true,

    provider = 'illenium',

    coords = vec4(-154.9357, -598.4401, 167.0003, 301.9366),

    forceDefaultModel = false,

    resetNewCharacterPed = true,

    openDelay = 6500,

    saveCurrentOnCancel = false,

    illenium = {
        ped = true,
        headBlend = true,
        faceFeatures = true,
        headOverlays = true,

        components = true,
        componentConfig = {
            masks = true,
            upperBody = true,
            lowerBody = true,
            bags = true,
            shoes = true,
            scarfAndChains = true,
            bodyArmor = true,
            shirts = true,
            decals = true,
            jackets = true
        },

        props = true,
        propConfig = {
            hats = true,
            glasses = true,
            ear = true,
            watches = true,
            bracelets = true
        },

        tattoos = true,
        enableExit = true,
        automaticFade = false
    }
}

------------------------------------------------------------
-- Music
------------------------------------------------------------

Config.Music = {
    enabled = true,

    url = 'https://r2.fivemanage.com/eDqO9cilMKCMzsiyN4KCx/ytmp3free.cc_powerful-trap-beat-extreme-car-type-instrumental-free-no-copyright-music-alexproductions-youtubemp3free.org.mp3',

    title = _L('music.selectorMusic'),
    defaultVolume = 35
}

```

{% endtab %}

{% tab title="config\_logs.lua" %}

```lua
Config = Config or {}

Config.LogWebhooks = {
    -- Used when a player creates a character.
    characterCreated = '',

    -- Used when an admin gives/updates/deletes character slots.
    slots = '',

    -- Optional fallback webhook.
    all = '',
    default = ''
}

Config.LogColors = {
    characterCreated = 5763719,
    slotsSaved = 3447003,
    slotsDeleted = 15158332,
    default = 9807270
}

Config.LogTexts = {
    Username = 'iZaap Multicharacter',
    Footer = 'iZaap Multicharacter',
    DefaultTitle = 'Log',
    Fallback = 'N/A',
    Console = 'Console',
    UnknownPlayer = 'Unknown',

    DebugFailed = '[%s:logs] Discord webhook failed. type=%s status=%s',

    Titles = {
        characterCreated = 'Personaje creado',
        slotsSaved = 'Slots asignados',
        slotsDeleted = 'Slots eliminados'
    },

    Fields = {
        characterCreated = {
            player = 'Jugador',
            character = 'Personaje',
            cid = 'Slot / CID',
            citizenid = 'Citizen ID',
            nationality = 'Nacionalidad',
            birthdate = 'Fecha nacimiento',
            gender = 'Género',
            license = 'Licencia',
            discord = 'Discord'
        },

        slotsSaved = {
            admin = 'Admin',
            slots = 'Slots',
            previousSlots = 'Antes',
            identifier = 'Identifier destino',
            adminLicense = 'Licencia admin',
            adminDiscord = 'Discord admin'
        },

        slotsDeleted = {
            admin = 'Admin',
            previousSlots = 'Slots anteriores',
            identifier = 'Identifier destino',
            adminLicense = 'Licencia admin',
            adminDiscord = 'Discord admin'
        }
    }
}
```

{% endtab %}

{% tab title="locales.lua" %}

```lua
Config = Config or {}
Config.Locale = Config.Locale or 'en'

Locales = Locales or {}

Locales.en = {
    general = {
        newStory = 'NEW STORY',
        unknown = 'Unknown',
        none = 'None',
        resourceTitle = 'iZaap Multicharacter',
        player = 'Player',
        partner = 'Partner',
        friend = 'Friend',
        relation = 'Relation',
        civilian = 'Civilian',
        unemployed = 'Unemployed',
        character = 'Character',
        close = 'Close',
        back = 'Back',
        create = 'Create',
        creating = 'Creating...',
        clear = 'Clear',
        refresh = 'Refresh',
        loading = 'Loading...',
        search = 'Search',
        accept = 'Accept',
        reject = 'Reject',
        remove = 'Remove',
        cancel = 'Cancel',
        play = 'Play',
        done = 'Done',
        saved = 'Saved',
        stopped = 'Stopped',
        nowPlaying = 'Now Playing',
        notAvailable = 'NOT AVAILABLE',
        id = 'ID'
    },

    ui = {
        settings = 'Settings',
        partnerSystem = 'Partner System',
        discord = 'Discord',
        youtube = 'YouTube',
        characterSelection = 'Character Selection',
        noCharacters = 'No Characters',
        noCharactersDesc = 'You do not have any characters yet. Create your first character to begin your story and start building your path inside the city with a new identity.',
        defaultDescription = '{name} is ready to continue the story in the city. Every decision, every contact, and every opportunity can change the future, so choose this character and keep building a new chapter with your own path.',
        createCharacter = 'Create Character',
        startStory = 'Start story',
        startJourney = 'Start journey',
        deleteCharacter = 'Delete Character'
    },

    welcome = {
        badge = 'iZaap Studios',
        title = 'WELCOME TO IZAAP SCRIPTS',
        highlight = 'IZAAP SCRIPTS',
        subtitle = 'Your new story is about to begin. Get ready for a unique experience.',
        logoAlt = 'iZaap Logo'
    },

    entrance = {
        welcome = 'WELCOME,',
        storyBegins = 'WHERE YOUR STORY BEGINS'
    },

    preview = {
        default = 'Default Preview',
        fallbackCouple = 'Fallback Couple Cinematic',
        scenes = {
            delPerroPierSunset = 'Del Perro Pier Sunset',
            galileoObservatoryView = 'Galileo Observatory View',
            vespucciBeachWalk = 'Vespucci Beach Walk',
            elGordoLighthouse = 'El Gordo Lighthouse',
            mirrorParkLake = 'Mirror Park Lake',
            bahamaMamasNight = 'Bahama Mamas Night',
            tequilaLaVinewood = 'Tequi-la-la Vinewood',
            vinewoodWineView = 'Vinewood Wine View',
            izaapFreeCamera = 'iZaap Free Camera',
            izaapFreeCamera2 = 'iZaap Free Camera 2',
            vehicleDrivingCinematic = 'Vehicle Driving Cinematic'
        }
    },

    create = {
        kicker = 'New Identity',
        title = 'Create Character',
        subtitle = 'Fill in your character details to begin your story.',
        firstName = 'First Name',
        lastName = 'Last Name',
        height = 'Height (cm)',
        birthday = 'Birthday',
        nationality = 'Nationality',
        gender = 'Gender',
        male = 'Male',
        female = 'Female',
        backstory = 'Backstory',
        backstoryPlaceholder = 'Write a short story for your character...',
        preparingSlot = 'Preparing slot',
        slot = 'Slot {slot}',
        clear = 'Clear',
        today = 'Today',
        invalidData = 'Please check your character data.',
        createFailed = 'Could not create character.',
        checkConsole = 'If not loading, check F8 console or server logs.',
        invalidName = 'Invalid first or last name.',
        invalidBirthday = 'Birthday must be between {min} and {max}.',
        datePlaceholder = 'MM/DD/YYYY',
        months = {
            january = 'January',
            february = 'February',
            march = 'March',
            april = 'April',
            may = 'May',
            june = 'June',
            july = 'July',
            august = 'August',
            september = 'September',
            october = 'October',
            november = 'November',
            december = 'December'
        },
        weekdays = {
            sunday = 'Su',
            monday = 'Mo',
            tuesday = 'Tu',
            wednesday = 'We',
            thursday = 'Th',
            friday = 'Fr',
            saturday = 'Sa'
        }
    },

    settings = {
        musicTab = 'Music',
        weatherTab = 'Weather',
        filterTab = 'Filter',
        preferences = 'Preferences',
        close = 'Close',
        musicTitle = 'MUSIC SETTINGS',
        musicSubtitle = 'Customize your audio experience. Volume preferences are saved automatically.',
        weatherTitle = 'WEATHER SETTINGS',
        weatherSubtitle = 'Choose a weather type and change it instantly. The full settings card now fits better on the right.',
        filterTitle = 'FILTER SETTINGS',
        filterSubtitle = 'Choose a native GTA filter and preview it instantly with a smooth cinematic transition.',
        resetDefault = 'Reset Default'
    },

    music = {
        noMusicLoaded = 'No music loaded',
        selectorMusic = 'Selector Music',
        music = 'Music',
        waitingConfig = 'Waiting for config...',
        waitingMp3 = 'Waiting for MP3 config...',
        noUrl = 'No MP3 URL configured.',
        abortError = 'Audio loading aborted.',
        networkError = 'Network error loading MP3.',
        decodeError = 'Audio decode error. Check the MP3 file.',
        formatError = 'Audio format not supported or URL is not direct.',
        unknownError = 'Unknown audio error.'
    },

    weather = {
        refresh = 'Refresh',
        weather = 'Weather',
        custom = 'Custom weather type.',
        choose = 'CHOOSE WEATHER',
        clockTime = 'CLOCK TIME',
        hour = 'Hour',
        minute = 'Minute',
        presets = {
            EXTRASUNNY = { label = 'Extra Sunny', desc = 'Bright cinematic sunlight.' },
            CLEAR = { label = 'Clear', desc = 'Clean natural lighting.' },
            CLOUDS = { label = 'Clouds', desc = 'Soft cloudy ambience.' },
            SMOG = { label = 'Smog', desc = 'Urban hazy atmosphere.' },
            FOGGY = { label = 'Foggy', desc = 'Dense atmospheric fog.' },
            OVERCAST = { label = 'Overcast', desc = 'Muted dark daylight.' },
            RAIN = { label = 'Rain', desc = 'Smooth rainy preview.' },
            THUNDER = { label = 'Thunder', desc = 'Heavy storm ambience.' },
            CLEARING = { label = 'Clearing', desc = 'Rain fading away.' },
            NEUTRAL = { label = 'Neutral', desc = 'Default neutral sky.' },
            SNOW = { label = 'Snow', desc = 'Cold snow weather.' },
            BLIZZARD = { label = 'Blizzard', desc = 'Heavy snow storm.' },
            SNOWLIGHT = { label = 'Light Snow', desc = 'Soft snow ambience.' },
            XMAS = { label = 'Xmas', desc = 'Christmas snow mode.' },
            HALLOWEEN = { label = 'Halloween', desc = 'Dark spooky ambience.' }
        }
    },

    filter = {
        none = 'None',
        refresh = 'Refresh',
        clear = 'Clear',
        intensity = 'Intensity',
        choose = 'CHOOSE FILTER',
        intensityTitle = 'FILTER INTENSITY',
        strength = 'Strength',
        items = {
            none = { label = 'None', desc = 'Default GTA look.' },
            cinema = { label = 'Cinema', desc = 'Classic cinematic look.' },
            NG_filmic01 = { label = 'Filmic 01', desc = 'Soft film contrast.' },
            NG_filmic02 = { label = 'Filmic 02', desc = 'Clean warm tone.' },
            NG_filmic03 = { label = 'Filmic 03', desc = 'Deeper movie shadows.' },
            NG_filmic04 = { label = 'Filmic 04', desc = 'Neutral cinematic grade.' },
            NG_filmic05 = { label = 'Filmic 05', desc = 'High contrast preview.' },
            NG_filmic06 = { label = 'Filmic 06', desc = 'Muted soft colors.' },
            NG_filmic07 = { label = 'Filmic 07', desc = 'Bright film grade.' },
            NG_filmic08 = { label = 'Filmic 08', desc = 'Cool cinematic color.' },
            NG_filmic09 = { label = 'Filmic 09', desc = 'Warm dramatic tone.' },
            NG_filmic10 = { label = 'Filmic 10', desc = 'Soft dark contrast.' },
            spectator1 = { label = 'Spectator 1', desc = 'Clean spectator tone.' },
            spectator2 = { label = 'Spectator 2', desc = 'Darker spectator tone.' },
            phone_cam = { label = 'Phone Cam', desc = 'Native phone camera.' },
            BarryFadeOut = { label = 'Barry', desc = 'Soft faded effect.' },
            Bloom = { label = 'Bloom', desc = 'Extra bright glow.' },
            rply_saturation = { label = 'Saturation', desc = 'More intense colors.' },
            rply_saturation_neg = { label = 'Desaturate', desc = 'Reduced color style.' },
            rply_vignette = { label = 'Vignette', desc = 'Dark edge effect.' }
        }
    },

    starter = {
        title = 'Starting Items',
        subtitle = 'Select items for the start of your roleplay journey.',
        purchase = 'Purchase',
        budget = 'Your Budget',
        orderSummary = 'Order Summary',
        total = 'Total',
        remaining = 'Remaining',
        selectedItems = 'Selected Items',
        itemType = 'Item',
        vehicleType = 'Vehicle',
        notEnoughBudget = 'You do not have enough budget.',
        purchaseFailed = 'Could not purchase starting items.',
        purchaseFailedLua = 'Could not complete the purchase.',
        notOpen = 'Starting Items is not open.',
        disabled = 'Starting Items is disabled.',
        noPendingCharacter = 'There is no pending new character.',
        selectAtLeastOne = 'You must select at least one item.',
        updated = 'Starting items updated.',
        items = {
            sandwich = 'Sandwich',
            water = 'Water Bottle',
            phone = 'Phone',
            blista = 'Blista',
            bmx = 'BMX'
        }
    },

    partner = {
        title = 'Partner System',
        subtitle = 'Connect with other players.',
        selfId = 'Your ID: {id}',
        tabs = {
            search = 'Search',
            incoming = 'Incoming',
            sent = 'Sent'
        },
        currentPartner = 'Current Partner',
        currentFriend = 'Current Friend',
        removePartner = 'Remove partner',
        removeRelation = 'Remove {type}',
        locked = 'You already have a <strong>{type}</strong>. Remove it first to search players or create a new partner/friend.',
        sendPartnerRequest = 'Send partner request',
        sendFriendRequest = 'Send friend request',
        searchPlaceholder = 'Search connected players',
        searching = 'Searching...',
        noPlayers = 'No connected players found.',
        incomingRequest = 'Incoming {type}',
        noIncoming = 'No incoming requests.',
        pendingRequest = 'Pending {type}',
        friendConnected = 'Friend connected',
        noSent = 'No sent requests yet.',
        loading = 'Loading partner system...',
        searchFailed = 'Search failed.',
        loadFailed = 'Could not load partner system.',
        lockedNotice = 'Remove your current partner or friend before creating another relation.',
        sendFailed = 'Could not send request.',
        requestSent = '{type} request sent.',
        updateFailed = 'Could not update request.',
        accepted = 'Request accepted.',
        rejected = 'Request rejected.',
        removeFailed = 'Could not remove relation.',
        partnerConnected = 'Partner connected',
        friendConnectedTitle = 'Friend connected',
        cinematics = {
            romanticHug = 'Romantic Hug'
        },
        disabled = 'Partner System is disabled.',
        onlineRequired = 'Player is not online.',
        selfRequest = 'You cannot send this to yourself.',
        alreadyHaveRelation = 'You already have a partner or friend. Remove it before creating another relation.',
        targetHasRelation = 'This player already has a partner or friend.',
        oneAlreadyPartner = 'One of the players already has a partner.',
        duplicateRequest = 'There is already a relation or request.',
        invalidRequest = 'Invalid request.',
        requestNotFound = 'Request not found.',
        invalidRelation = 'Invalid relation.',
        relationNotFound = 'Relation not found.',
        unknownAction = 'Unknown partner action.'
    },

    slots = {
        title = 'Character Slots',
        subtitle = 'Manage custom character limits by identifier.',
        command = 'Command',
        defaultSlots = 'Default slots',
        identifier = 'Identifier',
        identifierPlaceholder = 'license:xxxxxxxxxxxxxxxxxxxxxxxx',
        slots = 'Slots',
        addOrUpdate = 'Add / Update',
        refresh = 'Refresh',
        search = 'Search',
        searchPlaceholder = 'Search identifier...',
        listTitle = 'Custom slots list',
        noRows = 'No custom slots have been added yet.',
        addedBy = 'Added by',
        updatedAt = 'Updated at',
        delete = 'Delete',
        close = 'Close',
        saved = 'Slots saved successfully.',
        deleted = 'Slots deleted successfully.',
        invalidIdentifier = 'Invalid identifier.',
        invalidSlots = 'Invalid slots amount.',
        noPermission = 'You do not have permission to use this command.',
        loadFailed = 'Could not load slots list.',
        saveFailed = 'Could not save slots.',
        deleteFailed = 'Could not delete slots.',
        totalEntries = '{count} entries',
        maxGrant = 'Max grant: {max}',
        hint = 'The value here replaces the default limit only for this identifier.'
    },

    spawn = {
        title = 'Choose Spawn',
        subtitle = 'Select where your character will start.',
        button = 'SPAWN',
        select = 'SELECT',
        selected = 'SELECTED',
        location = 'Location {index}',
        noLocations = 'No spawn locations available.',
        noSavedLocation = 'No saved location available.',
        lastLocation = 'Last Location',
        lastLocationDescription = 'Continue from your last saved position.',
        lastLocationTag = 'LAST',
        apartment = 'Apartment',
        apartmentDescription = 'Choose your first apartment.',
        apartmentTag = 'HOME',
        apartmentIcon = 'APT',
        airport = 'Airport',
        airportDescription = 'Los Santos International Airport.',
        airportTag = 'CITY',
        airportIcon = 'AIR',
        legion = 'Legion Square',
        legionDescription = 'Main central zone of Los Santos.',
        legionTag = 'CENTER',
        legionIcon = 'LS',
        sandy = 'Sandy Shores',
        sandyDescription = 'Blaine County desert area.',
        sandyTag = 'NORTH',
        sandyIcon = 'SS'
    },

    errors = {
        createFailed = 'Could not create character.',
        noSlots = 'You do not have available slots.',
        loadCharacterFailed = 'Could not load the character. Check F8 or server console.',
        createCheckConsole = 'Could not create the character. Check F8 or server console.',
        invalidWeather = 'Invalid weather',
        clothingOpenFailed = 'Could not open clothing menu: {error}',
        startingItemsGiveFailed = 'Could not give starting items: {error}',
        freemodeModelLoadFailed = 'Could not load freemode model: {model}',
        vehicleLoadFailed = 'Could not load vehicle: {model}',
        invalidVehicleModel = 'Invalid vehicle model: {model}',
        passengerModelLoadFailed = 'Could not load passenger model: {model}',
        missingCitizenidStartingItems = 'Cannot open Starting Items without citizenid.'
    }
}

Locales.es = {
    general = {
        newStory = 'NUEVA HISTORIA',
        unknown = 'Desconocido',
        none = 'Ninguno',
        resourceTitle = 'iZaap Multicharacter',
        player = 'Jugador',
        partner = 'Pareja',
        friend = 'Amigo',
        relation = 'Relacion',
        civilian = 'Civil',
        unemployed = 'Desempleado',
        character = 'Personaje',
        close = 'Cerrar',
        back = 'Atras',
        create = 'Crear',
        creating = 'Creando...',
        clear = 'Limpiar',
        refresh = 'Actualizar',
        loading = 'Cargando...',
        search = 'Buscar',
        accept = 'Aceptar',
        reject = 'Rechazar',
        remove = 'Eliminar',
        cancel = 'Cancelar',
        play = 'Jugar',
        done = 'Listo',
        saved = 'Guardado',
        stopped = 'Detenido',
        nowPlaying = 'Reproduciendo',
        notAvailable = 'NO DISPONIBLE',
        id = 'ID'
    },

    ui = {
        settings = 'Ajustes',
        partnerSystem = 'Sistema de pareja',
        discord = 'Discord',
        youtube = 'YouTube',
        characterSelection = 'Seleccion de personaje',
        noCharacters = 'Sin personajes',
        noCharactersDesc = 'Aun no tienes personajes. Crea tu primer personaje para comenzar tu historia y construir una nueva identidad en la ciudad.',
        defaultDescription = '{name} esta listo para continuar su historia en la ciudad. Cada decision, cada contacto y cada oportunidad puede cambiar el futuro; elige este personaje y sigue construyendo un nuevo capitulo por tu propio camino.',
        createCharacter = 'Crear personaje',
        startStory = 'Comenzar historia',
        startJourney = 'Iniciar viaje',
        deleteCharacter = 'Eliminar personaje'
    },

    welcome = {
        badge = 'iZaap Studios',
        title = 'BIENVENIDO A IZAAP SCRIPTS',
        highlight = 'IZAAP SCRIPTS',
        subtitle = 'Tu nueva historia esta por comenzar. Preparate para entrar a una experiencia unica.',
        logoAlt = 'Logo de iZaap'
    },

    entrance = {
        welcome = 'BIENVENIDO,',
        storyBegins = 'DONDE COMIENZA TU HISTORIA'
    },

    preview = {
        default = 'Vista previa por defecto',
        fallbackCouple = 'Cinematica de pareja por defecto',
        scenes = {
            delPerroPierSunset = 'Atardecer en Del Perro Pier',
            galileoObservatoryView = 'Vista del Observatorio Galileo',
            vespucciBeachWalk = 'Paseo por Vespucci Beach',
            elGordoLighthouse = 'Faro El Gordo',
            mirrorParkLake = 'Lago de Mirror Park',
            bahamaMamasNight = 'Noche en Bahama Mamas',
            tequilaLaVinewood = 'Tequi-la-la Vinewood',
            vinewoodWineView = 'Vista de vino en Vinewood',
            izaapFreeCamera = 'Camara libre iZaap',
            izaapFreeCamera2 = 'Camara libre iZaap 2',
            vehicleDrivingCinematic = 'Cinematica conduciendo vehiculo'
        }
    },

    create = {
        kicker = 'Nueva identidad',
        title = 'Crear personaje',
        subtitle = 'Completa los datos de tu personaje para comenzar tu historia.',
        firstName = 'Nombre',
        lastName = 'Apellido',
        height = 'Altura (cm)',
        birthday = 'Fecha de nacimiento',
        nationality = 'Nacionalidad',
        gender = 'Genero',
        male = 'Masculino',
        female = 'Femenino',
        backstory = 'Historia',
        backstoryPlaceholder = 'Escribe una historia corta para tu personaje...',
        preparingSlot = 'Preparando slot',
        slot = 'Slot {slot}',
        clear = 'Limpiar',
        today = 'Hoy',
        invalidData = 'Revisa los datos de tu personaje.',
        createFailed = 'No se pudo crear el personaje.',
        checkConsole = 'Si no carga, revisa la consola F8 o los logs del servidor.',
        invalidName = 'Nombre o apellido invalido.',
        invalidBirthday = 'La fecha de nacimiento debe estar entre {min} y {max}.',
        datePlaceholder = 'DD/MM/YYYY',
        months = {
            january = 'Enero',
            february = 'Febrero',
            march = 'Marzo',
            april = 'Abril',
            may = 'Mayo',
            june = 'Junio',
            july = 'Julio',
            august = 'Agosto',
            september = 'Septiembre',
            october = 'Octubre',
            november = 'Noviembre',
            december = 'Diciembre'
        },
        weekdays = {
            sunday = 'Do',
            monday = 'Lu',
            tuesday = 'Ma',
            wednesday = 'Mi',
            thursday = 'Ju',
            friday = 'Vi',
            saturday = 'Sa'
        }
    },

    settings = {
        musicTab = 'Musica',
        weatherTab = 'Clima',
        filterTab = 'Filtro',
        preferences = 'Preferencias',
        close = 'Cerrar',
        musicTitle = 'AJUSTES DE MUSICA',
        musicSubtitle = 'Personaliza tu experiencia de audio. Las preferencias de volumen se guardan automaticamente.',
        weatherTitle = 'AJUSTES DE CLIMA',
        weatherSubtitle = 'Elige un tipo de clima y cambialo al instante. La tarjeta de ajustes ahora encaja mejor a la derecha.',
        filterTitle = 'AJUSTES DE FILTRO',
        filterSubtitle = 'Elige un filtro nativo de GTA y previsualizalo con una transicion cinematica suave.',
        resetDefault = 'Restablecer'
    },

    music = {
        noMusicLoaded = 'No hay musica cargada',
        selectorMusic = 'Musica del selector',
        music = 'Musica',
        waitingConfig = 'Esperando configuracion...',
        waitingMp3 = 'Esperando configuracion MP3...',
        noUrl = 'No hay URL MP3 configurada.',
        abortError = 'Carga de audio cancelada.',
        networkError = 'Error de red cargando el MP3.',
        decodeError = 'Error al decodificar el audio. Revisa el archivo MP3.',
        formatError = 'Formato de audio no soportado o la URL no es directa.',
        unknownError = 'Error de audio desconocido.'
    },

    weather = {
        refresh = 'Actualizar',
        weather = 'Clima',
        custom = 'Tipo de clima personalizado.',
        choose = 'ELIGE CLIMA',
        clockTime = 'HORA',
        hour = 'Hora',
        minute = 'Minuto',
        presets = {
            EXTRASUNNY = { label = 'Extra soleado', desc = 'Luz solar cinematica brillante.' },
            CLEAR = { label = 'Despejado', desc = 'Iluminacion natural limpia.' },
            CLOUDS = { label = 'Nublado', desc = 'Ambiente suave con nubes.' },
            SMOG = { label = 'Smog', desc = 'Atmosfera urbana con neblina.' },
            FOGGY = { label = 'Neblina', desc = 'Niebla atmosferica densa.' },
            OVERCAST = { label = 'Cubierto', desc = 'Luz diurna oscura y apagada.' },
            RAIN = { label = 'Lluvia', desc = 'Vista previa con lluvia suave.' },
            THUNDER = { label = 'Tormenta', desc = 'Ambiente de tormenta fuerte.' },
            CLEARING = { label = 'Aclarando', desc = 'La lluvia se esta disipando.' },
            NEUTRAL = { label = 'Neutral', desc = 'Cielo neutral por defecto.' },
            SNOW = { label = 'Nieve', desc = 'Clima frio con nieve.' },
            BLIZZARD = { label = 'Ventisca', desc = 'Tormenta fuerte de nieve.' },
            SNOWLIGHT = { label = 'Nieve ligera', desc = 'Ambiente suave de nieve.' },
            XMAS = { label = 'Navidad', desc = 'Modo nieve navideno.' },
            HALLOWEEN = { label = 'Halloween', desc = 'Ambiente oscuro y tenebroso.' }
        }
    },

    filter = {
        none = 'Ninguno',
        refresh = 'Actualizar',
        clear = 'Limpiar',
        intensity = 'Intensidad',
        choose = 'ELIGE FILTRO',
        intensityTitle = 'INTENSIDAD DEL FILTRO',
        strength = 'Intensidad',
        items = {
            none = { label = 'Ninguno', desc = 'Aspecto GTA por defecto.' },
            cinema = { label = 'Cine', desc = 'Aspecto cinematografico clasico.' },
            NG_filmic01 = { label = 'Filmico 01', desc = 'Contraste suave de pelicula.' },
            NG_filmic02 = { label = 'Filmico 02', desc = 'Tono calido y limpio.' },
            NG_filmic03 = { label = 'Filmico 03', desc = 'Sombras mas profundas.' },
            NG_filmic04 = { label = 'Filmico 04', desc = 'Grado cinematico neutral.' },
            NG_filmic05 = { label = 'Filmico 05', desc = 'Vista previa de alto contraste.' },
            NG_filmic06 = { label = 'Filmico 06', desc = 'Colores suaves y apagados.' },
            NG_filmic07 = { label = 'Filmico 07', desc = 'Grado de pelicula brillante.' },
            NG_filmic08 = { label = 'Filmico 08', desc = 'Color cinematico frio.' },
            NG_filmic09 = { label = 'Filmico 09', desc = 'Tono dramatico calido.' },
            NG_filmic10 = { label = 'Filmico 10', desc = 'Contraste oscuro suave.' },
            spectator1 = { label = 'Espectador 1', desc = 'Tono limpio de espectador.' },
            spectator2 = { label = 'Espectador 2', desc = 'Tono de espectador mas oscuro.' },
            phone_cam = { label = 'Camara movil', desc = 'Camara nativa del telefono.' },
            BarryFadeOut = { label = 'Barry', desc = 'Efecto desvanecido suave.' },
            Bloom = { label = 'Bloom', desc = 'Brillo extra intenso.' },
            rply_saturation = { label = 'Saturacion', desc = 'Colores mas intensos.' },
            rply_saturation_neg = { label = 'Desaturar', desc = 'Estilo con color reducido.' },
            rply_vignette = { label = 'Vineta', desc = 'Efecto de bordes oscuros.' }
        }
    },

    starter = {
        title = 'Items iniciales',
        subtitle = 'Selecciona items para iniciar tu historia de rol.',
        purchase = 'Comprar',
        budget = 'Tu presupuesto',
        orderSummary = 'Resumen',
        total = 'Total',
        remaining = 'Restante',
        selectedItems = 'Items seleccionados',
        itemType = 'Item',
        vehicleType = 'Vehiculo',
        notEnoughBudget = 'No tienes suficiente presupuesto.',
        purchaseFailed = 'No se pudieron comprar los items iniciales.',
        purchaseFailedLua = 'No se pudo completar la compra.',
        notOpen = 'Starting Items no esta abierto.',
        disabled = 'Starting Items esta desactivado.',
        noPendingCharacter = 'No hay un personaje nuevo pendiente.',
        selectAtLeastOne = 'Debes seleccionar al menos un objeto.',
        updated = 'Starting items actualizados.',
        items = {
            sandwich = 'Sandwich',
            water = 'Botella de agua',
            phone = 'Telefono',
            blista = 'Blista',
            bmx = 'BMX'
        }
    },


    slots = {
        title = 'Slots de personajes',
        subtitle = 'Gestiona limites personalizados por identifier.',
        command = 'Comando',
        defaultSlots = 'Slots por defecto',
        identifier = 'Identifier',
        identifierPlaceholder = 'license:xxxxxxxxxxxxxxxxxxxxxxxx',
        slots = 'Slots',
        addOrUpdate = 'Añadir / Actualizar',
        refresh = 'Actualizar',
        search = 'Buscar',
        searchPlaceholder = 'Buscar identifier...',
        listTitle = 'Lista de slots personalizados',
        noRows = 'Todavia no hay slots personalizados añadidos.',
        addedBy = 'Añadido por',
        updatedAt = 'Actualizado',
        delete = 'Eliminar',
        close = 'Cerrar',
        saved = 'Slots guardados correctamente.',
        deleted = 'Slots eliminados correctamente.',
        invalidIdentifier = 'Identifier invalido.',
        invalidSlots = 'Cantidad de slots invalida.',
        noPermission = 'No tienes permiso para usar este comando.',
        loadFailed = 'No se pudo cargar la lista de slots.',
        saveFailed = 'No se pudieron guardar los slots.',
        deleteFailed = 'No se pudieron eliminar los slots.',
        totalEntries = '{count} registros',
        maxGrant = 'Maximo permitido: {max}',
        hint = 'Este valor reemplaza el limite por defecto solo para este identifier.'
    },

    partner = {
        title = 'Sistema de pareja',
        subtitle = 'Conecta con otros jugadores.',
        selfId = 'Tu ID: {id}',
        tabs = {
            search = 'Buscar',
            incoming = 'Entrantes',
            sent = 'Enviadas'
        },
        currentPartner = 'Pareja actual',
        currentFriend = 'Amigo actual',
        removePartner = 'Eliminar pareja',
        removeRelation = 'Eliminar {type}',
        locked = 'Ya tienes <strong>{type}</strong>. Eliminalo primero para buscar jugadores o crear una nueva relacion.',
        sendPartnerRequest = 'Enviar solicitud de pareja',
        sendFriendRequest = 'Enviar solicitud de amistad',
        searchPlaceholder = 'Buscar jugadores conectados',
        searching = 'Buscando...',
        noPlayers = 'No se encontraron jugadores conectados.',
        incomingRequest = 'Solicitud entrante de {type}',
        noIncoming = 'No hay solicitudes entrantes.',
        pendingRequest = 'Solicitud pendiente de {type}',
        friendConnected = 'Amigo conectado',
        noSent = 'Aun no hay solicitudes enviadas.',
        loading = 'Cargando sistema de pareja...',
        searchFailed = 'La busqueda fallo.',
        loadFailed = 'No se pudo cargar el sistema de pareja.',
        lockedNotice = 'Elimina tu pareja o amigo actual antes de crear otra relacion.',
        sendFailed = 'No se pudo enviar la solicitud.',
        requestSent = 'Solicitud de {type} enviada.',
        updateFailed = 'No se pudo actualizar la solicitud.',
        accepted = 'Solicitud aceptada.',
        rejected = 'Solicitud rechazada.',
        removeFailed = 'No se pudo eliminar la relacion.',
        partnerConnected = 'Pareja conectada',
        friendConnectedTitle = 'Amigo conectado',
        cinematics = {
            romanticHug = 'Abrazo romantico'
        },
        disabled = 'El sistema de pareja esta desactivado.',
        onlineRequired = 'El jugador no esta conectado.',
        selfRequest = 'No puedes enviarte esto a ti mismo.',
        alreadyHaveRelation = 'Ya tienes pareja o amigo. Eliminalo antes de crear otra relacion.',
        targetHasRelation = 'Este jugador ya tiene pareja o amigo.',
        oneAlreadyPartner = 'Uno de los jugadores ya tiene pareja.',
        duplicateRequest = 'Ya existe una relacion o solicitud.',
        invalidRequest = 'Solicitud invalida.',
        requestNotFound = 'Solicitud no encontrada.',
        invalidRelation = 'Relacion invalida.',
        relationNotFound = 'Relacion no encontrada.',
        unknownAction = 'Accion de pareja desconocida.'
    },

    spawn = {
        title = 'Elige spawn',
        subtitle = 'Selecciona donde empezara tu personaje.',
        button = 'SPAWN',
        select = 'SELECCIONAR',
        selected = 'SELECCIONADO',
        location = 'Ubicacion {index}',
        noLocations = 'No hay ubicaciones de spawn disponibles.',
        noSavedLocation = 'No hay ubicacion guardada disponible.',
        lastLocation = 'Ultima ubicacion',
        lastLocationDescription = 'Continua desde tu ultima posicion guardada.',
        lastLocationTag = 'ULTIMA',
        apartment = 'Apartamento',
        apartmentDescription = 'Elige tu primer apartamento.',
        apartmentTag = 'CASA',
        apartmentIcon = 'APT',
        airport = 'Aeropuerto',
        airportDescription = 'Aeropuerto Internacional de Los Santos.',
        airportTag = 'CIUDAD',
        airportIcon = 'AIR',
        legion = 'Legion Square',
        legionDescription = 'Zona central principal de Los Santos.',
        legionTag = 'CENTRO',
        legionIcon = 'LS',
        sandy = 'Sandy Shores',
        sandyDescription = 'Zona desertica de Blaine County.',
        sandyTag = 'NORTE',
        sandyIcon = 'SS'
    },

    errors = {
        createFailed = 'No se pudo crear el personaje.',
        noSlots = 'No tienes slots disponibles.',
        loadCharacterFailed = 'No se pudo cargar el personaje. Revisa F8 o consola del servidor.',
        createCheckConsole = 'No se pudo crear el personaje. Revisa F8 o consola del servidor.',
        invalidWeather = 'Clima invalido',
        clothingOpenFailed = 'No se pudo abrir el menu de ropa: {error}',
        startingItemsGiveFailed = 'No se pudieron entregar los items iniciales: {error}',
        freemodeModelLoadFailed = 'No se pudo cargar el modelo freemode: {model}',
        vehicleLoadFailed = 'No se pudo cargar el vehiculo: {model}',
        invalidVehicleModel = 'Modelo de vehiculo invalido: {model}',
        passengerModelLoadFailed = 'No se pudo cargar el modelo de pasajero: {model}',
        missingCitizenidStartingItems = 'No se puede abrir Starting Items sin citizenid.'
    }
}
```

{% endtab %}
{% endtabs %}
