[PAID] vsLifeInvader 📰 [ESX & QBcore]

A script by VibeScripts

No reviews yet.
[PAID] vsLifeInvader 📰 [ESX & QBcore] main image

Full Description

[PAID] vsLifeInvader :newspaper: [ESX & QBcore]

:newspaper: vsLifeInvader – The ultimate in-game advertising network for your FiveM server

Bring a dynamic, price-controlled advertising system into your city!
vsLifeInvader is a fully integrated in-game ad platform that allows players to post advertisements in a controlled, transparent, and cost-based way — perfect for roleplay, business promotions, events, and server-wide announcements.


Showcase

Link to the Showcase Video


:white_check_mark: Why this system?

Every structured roleplay server needs a way for players to publicly advertise services, events, job offers, or marketplace listings.
vsLifeInvader provides exactly that — a customizable interface that brings realistic, cost-based advertising into your RP environment.

Price-controlled. Location-bound. Customizable. Logged.


:star: Key Features

  • :computer: Modern Dark UI using the characteristic LifeInvader color palette (Red/Blue)
  • :moneybag: Flexible Pricing Model:
    • Static price
    • OR price per character
  • :memo: Adjustable Post Length: Up to 150 characters per advertisement
  • :lock: Post Modes:
    • Public (name & phone visible)
    • Private (anonymous posting)
  • :no_entry_sign: Blacklist System: Automatically blocks unwanted words (e.g., “adolf”)
  • :stopwatch: Cooldown System: Prevents spam (30-minute delay between posts)
  • :link: Discord Webhook Logging:
    • AdminLogs (detailed internal logs)
    • PublicLogs (public announcement logs)
  • :fire: Supports ESX & QBCore
  • :round_pushpin: Location-based Access: Interact via marker at configurable coordinates
    (default: x = −1082.18, y = −247.70, z = 37.76)

vsLifeInvader brings a realistic, balanced and fully immersive advertisement system to your FiveM server — professional, configurable and RP-friendly.

Config

Config = {}
Config.Framework = 'esx' -- select your framework: 'esx' or 'qbcore'

Config.Locale = 'en'

Config.Notify = function(message, type)
    if Config.Framework == 'esx' then
        TriggerEvent('esx:showNotification', message)
    elseif Config.Framework == 'qbcore' then
        TriggerEvent('QBCore:Notify', message, type or 'primary')
    end
end

Config.HelpNotification = function(message)
    if Config.Framework == 'esx' then
        ESX.ShowHelpNotification(message)
    elseif Config.Framework == 'qbcore' then
        exports['qb-core']:DrawText(message, 'left')
    end
end

Config.TestCommand = false -- test notify (command: /testlv)

Config.Lifeinvader = {
    ['Coords'] = {
        ['x'] = -1082.18,
        ['y'] = -247.70,
        ['z'] = 37.76
    },
    ['Distance'] = 5,
    ['MarkerDistance'] = 1.5,
    ['OpenKey'] = 'E',
    ['DefaultPostMethode'] = 'public', --[[
        - public: Everyone can see the name and phonenumber of the person who posted the ad
        - private: No one can see the name and phonenumber of the person who posted the ad
    ]]
    ['MaxLetters'] = 150,
    ['Price'] = {
        ['static'] = false,
        ['static_price'] = 2500,
        ['price_per_letter'] = 10,
        ['Letter'] = '$',
        ['LetterPosition'] = 'left' --[[
            - left: $100
            - right: 100$
        ]]
    },
    ['Format'] = '.', --[[
        - .: 100.000
        - ,: 100,000
    ]]
    ['Notify_Timeout'] = 10, --seconds
    ['Cooldown'] = 30, -- minutes
}

Config.Marker = {
    ['Type'] = 21,
    ['Size'] = vector3(1.0, 1.0, 1.0),
    ['ColorB'] = vector3(0, 255, 0),
    ['Opacity'] = 150,
    ['FaceCamera'] = true,
    ['Rotate'] = false,
    ['Bounce'] = false,
    ['TextureDict'] = nil,
    ['TextureName'] = nil,
    ['Color'] = { -- https://g.co/kgs/95WiQLB
        ['r'] = 255,
        ['g'] = 0,
        ['b'] = 0,
    }
}

Config.Blip = {
    ['Enabled'] = true,
    ['Sprite'] = 459,
    ['Color'] = 2,
    ['Scale'] = 0.8,
    ['Display'] = 4,
    ['ShortRange'] = true,
    ['Name'] = 'Lifeinvader'
}

Config.BlacklistedWords = {
    'adolf',
}

Config.Sounds = {
    ["Lifeinvader"] = {
        mp3 = false, -- false to use gta sounds
        url = "",
        volume = 0.5, -- Works perfectly fine!
        gta = {
            audioName = "ATM_WINDOW",
            audioRef = "HUD_FRONTEND_DEFAULT_SOUNDSET"
        }
    },
}

Config.Language = {
    ['de'] = {
        ['access'] = 'Drücke ~INPUT_CONTEXT~ um Lifeinvader zu öffnen',
        ['info_text'] = 'Lifeinvader ist ein soziales Netzwerk, das in Los Santos sehr beliebt ist. Hier kannst du mit deinen Freunden chatten, Bilder posten und vieles mehr.',
        ['info_header'] = 'INFORMATIONEN',
        ['send'] = 'SENDEN',
        ['close'] = 'ABBRECHEN',
        ['price'] = 'Preis',
        ['current_ads'] = 'Werbungen',
        ['placeholder'] = 'Gebe deinen Text ein',
        ['post_public'] = 'Öffentlich',
        ['post_private'] = 'Privater Post',
        ['not_enough_money'] = 'Du hast nicht genug Geld!',
        ['blacklisted_word'] = 'Du kannst diese Nachricht so nicht abschicken!',
        ['cooldown'] = 'Du musst noch %s Minuten warten!',
        ['DiscordLogs'] = {
            ['Title'] = 'Neue Werbung!',
            ['Footer'] = 'Werbung geschaltet am %s um %s Uhr',
            ['Source'] = 'Quelle:',
            ['Group'] = 'Gruppe:',
            ['Discord'] = 'Discord:',
            ['LifeinvaderData'] = 'Lifeinvader Daten:',
            ['Name'] = 'Name:',
            ['Phone'] = 'Telefon:',
            ['Time'] = 'Zeit:',
            ['Text'] = 'Text:',
            ['Price'] = 'Preis:',
            ['PostMethode'] = 'Post Methode:',
            ['Identifiers'] = 'Identifikatoren:'
        }
    },
    ['en'] = {
        ['access'] = 'Press ~INPUT_CONTEXT~ to access Lifeinvader',
        ['info_text'] = 'Lifeinvader is a social network that is very popular in Los Santos. Here you can chat with your friends, post pictures and much more.',
        ['info_header'] = 'INFORMATION',
        ['send'] = 'SEND',
        ['close'] = 'CANCEL',
        ['price'] = 'Price',
        ['current_ads'] = 'Advertisements',
        ['placeholder'] = 'Enter your text',
        ['post_public'] = 'Public',
        ['post_private'] = 'Private Post',
        ['not_enough_money'] = 'You do not have enough money!',
        ['blacklisted_word'] = 'You cannot send this message!',
        ['cooldown'] = 'You have to wait %s minutes!',
        ['DiscordLogs'] = {
            ['Title'] = 'New Advertisement!',
            ['Footer'] = 'Advertisement placed on %s at %s',
            ['Source'] = 'Source:',
            ['Group'] = 'Group:',
            ['Discord'] = 'Discord:',
            ['LifeinvaderData'] = 'Lifeinvader Data:',
            ['Name'] = 'Name:',
            ['Phone'] = 'Phone:',
            ['Time'] = 'Time:',
            ['Text'] = 'Text:',
            ['Price'] = 'Price:',
            ['PostMethode'] = 'Post Methode:',
            ['Identifiers'] = 'Identifiers:'
        }
    }
}

Server_Config

Config_S = {}

Config_S.GetPhonenumber = function(identifier)
    local phone = promise.new()

    if Config.Framework == 'esx' then
        MySQL.Async.fetchAll('SELECT phone_number FROM users WHERE identifier = @identifier', {
            ['@identifier'] = identifier
        }, function(result)
            if result[1] ~= nil then
                phone:resolve(result[1].phone_number)
            else
                phone:resolve(nil)
            end
        end)
    elseif Config.Framework == 'qbcore' then
        MySQL.Async.fetchAll('SELECT charinfo FROM players WHERE citizenid = @identifier', {
            ['@identifier'] = identifier
        }, function(result)
            if result[1] ~= nil and result[1].charinfo then
                local charinfo = json.decode(result[1].charinfo)
                if charinfo and charinfo.phone then
                    phone:resolve(charinfo.phone)
                else
                    phone:resolve(nil)
                end
            else
                phone:resolve(nil)
            end
        end)
    end

    Citizen.Await(phone)

    return phone.value
end

Config_S.AdminLogs = {
    ["enabled"] = false,
    ["username"] = "VibeScripts | Logs",
    ["title"] = "vsLifeInvader",
    ["color"] = 16711680,
    ["avatar_url"] = "https://cdn.discordapp.com/attachments/973004306875809822/1017893622189928538/vllogo.png?ex=65fde94f&is=65eb744f&hm=6d5730de584e606269214a3b3dceeb1b0ff8aa1d437a4ec9919f496fac83afe9&",
    ["icon_url"] = "https://cdn.discordapp.com/attachments/973004306875809822/1017893622189928538/vllogo.png?ex=65fde94f&is=65eb744f&hm=6d5730de584e606269214a3b3dceeb1b0ff8aa1d437a4ec9919f496fac83afe9&",
    ["webhook"] = "YOUR WEBHOOK HERE",
}

Config_S.PublicLogs = {
    ["enabled"] = false,
    ["username"] = "vsLifeInvader",
    ["title"] = "New Message from Lifeinvader!",
    ["color"] = 16711680,
    ["avatar_url"] = "https://cdn.discordapp.com/attachments/973004306875809822/1017893622189928538/vllogo.png?ex=65fde94f&is=65eb744f&hm=6d5730de584e606269214a3b3dceeb1b0ff8aa1d437a4ec9919f496fac83afe9&",
    ["icon_url"] = "https://cdn.discordapp.com/attachments/973004306875809822/1017893622189928538/vllogo.png?ex=65fde94f&is=65eb744f&hm=6d5730de584e606269214a3b3dceeb1b0ff8aa1d437a4ec9919f496fac83afe9&",
    ["webhook"] = "YOUR WEBHOOK HERE",
}

CSS_Config

:root {
    /* Lifeinvader */
    
    --color-background: rgba(8, 9, 16, 0.99);
    
    --color-blur1: #FF334B;
    --color-blur2: #C5DCFF;
    --color-blur3: #336CFF;
    --color-blur4: #FF0000;

    --color-header-text1: radial-gradient(76.32% 76.32% at 50% 50%, #FF334B 0%, rgba(255, 51, 75, 0.00) 100%);
    --color-header-text1-stroke: 0.7px #FF334B;

    --color-header-text2: #ffffff;

    --color-input-box: rgba(0, 0, 0, 0.26);
    --color-textinput: rgba(255, 255, 255, 0.25);
    --color-textinput-placeholder: rgba(255, 255, 255, 0.25);

    --color-textcounter-box: radial-gradient(95.65% 95.65% at 50% 50%, #FF334B 0%, rgba(255, 51, 75, 0.00) 100%);
    --color-textcounter-box-shadow: rgba(255, 51, 75, 0.55);
    --color-textcounter-count: #ffffff;

    --color-post-icon: #FF334B;

    --color-lines: linear-gradient(90deg, rgba(255, 255, 255, 0.15) -1.5%, rgba(255, 255, 255, 0.00) 102.63%);

    --color-time-icon: #ffffff;
    --color-number-icon: #ffffff;

    --color-information-box: rgba(51, 120, 255, 0.05);
    --color-information-box-border: 1px solid #3378FF;
}

Optimization

  • IDLE: 0.00ms
  • Running: 0.00ms

Further Information

SHOP: vsLifeInvader

This resource is using the FiveM Asset Escrow system

Code is accessible No
Subscription-based No
Lines (approximately) 2500
Requirements ESX & QBcore
Support Yes
Config Merger
Have you tried Config Merger? Merge your configs easily