MintDev Docs
Documentazione ufficiale · MintDev

Dolcetto o Scherzetto

Grazie per aver scelto uno script MintDev! Qui trovi tutto per installare, configurare e gestire l'evento di Halloween sul tuo server FiveM.

v1.0.0ESX LegacyQBCoreQboxox_inventoryqb-inventory

01Introduzione

Dolcetto o Scherzetto trasforma il tuo server in un quartiere di Halloween. I giocatori bussano alle porte, raccolgono caramelle e le scambiano alla Bottega delle Caramelle con soldi, cibo a tema, pozioni e oggetti.

Dolcetto

Un residente apre la porta e regala 2–5 caramelle. A volte esce la rarissima Caramella d'Oro.

Scherzetto

5 scherzetti: spavento, allucinazione, maledizione, inseguimento di uno zombie e furto di caramelle.

Bottega delle Caramelle

Interfaccia a tema con cibo, pozioni, oggetti, scambio caramelle → soldi e classifica dei giocatori.

Cibo con effetti

11 cibi e bevande con fame, sete ed effetti speciali, più zucche posizionabili e scatola misteriosa.

02Requisiti

ComponenteSupporto
FrameworkESX Legacy, QBCore o Qbox (rilevato in automatico)
Inventarioox_inventory oppure l'inventario del framework (inventario ESX, qb-inventory, ps-inventory, lj-inventory)
Fame e seteesx_status su ESX, metadata hunger / thirst / stress su QBCore e Qbox
OneSyncObbligatorio (attivo di default con txAdmin): il server verifica la posizione dei giocatori (anti-exploit)
Licenza CfxLo script è protetto con Cfx Asset Escrow: funziona sui server con la sv_licenseKey dell'account Cfx che l'ha acquistato
Dipendenze extraNessuna: non servono ox_lib, ox_target o altre risorse. I prop 3D sono già inclusi

03Contenuto del pacchetto

hw_dolcetto_scherzetto/
├── config.lua              impostazioni (commentate)
├── fxmanifest.lua
├── shared/lang.lua         tutti i testi del gioco
├── bridge/server.lua       collegamento a framework, soldi e inventario
├── client/  server/        logica dello script
├── html/                   interfaccia della bottega e popup
├── stream/                 11 prop 3D (.ydr) + hw_halloween_props.ytyp
├── install/
│   ├── ox_inventory_items.lua
│   ├── qb-core_items.lua
│   ├── esx_items.sql
│   └── immagini_inventario/   16 icone PNG
├── data/                   dati salvati dallo script
├── DOCUMENTAZIONE.html     questa documentazione, offline
└── LICENZA.txt

Tutto è in un'unica risorsa: script, interfaccia, prop e file di installazione. Con Cfx Asset Escrow una parte dei file è protetta, mentre quelli che servono per personalizzare lo script restano aperti:

File apertiCosa contengono
config.luaTutte le impostazioni: case, scherzetti, bottega, oggetti, effetti, zucche, notifiche
shared/lang.luaTutti i testi del gioco
bridge/server.luaCollegamento a framework, soldi e inventario (per adattarlo a sistemi diversi)
install/Oggetti da registrare nell'inventario e relative immagini
html/Interfaccia (HTML, CSS e JavaScript)

04Installazione

  1. Scarica la risorsaDopo l'acquisto la trovi su portal.cfx.re → Assets → Granted Assets. Usa lo stesso account Cfx della sv_licenseKey del tuo server.
  2. Copia la risorsaEstrai lo zip e metti la cartella hw_dolcetto_scherzetto dentro resources/. Non rinominare le sottocartelle.
  3. Avviala dopo framework e inventarioNel server.cfg l'ordine è importante: lo script riconosce il framework all'avvio.
    ensure es_extended        # oppure qb-core / qbx_core
    ensure ox_inventory       # solo se lo usi
    ensure hw_dolcetto_scherzetto
  4. Registra gli oggettiScegli il file giusto per il tuo inventario:

    Vale per ESX + ox_inventory, QBCore + ox_inventory e Qbox. Copia il contenuto di install/ox_inventory_items.lua dentro ox_inventory/data/items.lua, all'interno della tabella return { ... }:

    ['hw_caramella'] = {
        label = 'Caramella di Halloween',
        weight = 5,
        stack = true,
        close = true,
        description = 'La moneta di Halloween. Scambiala alla Bottega delle Caramelle!',
    },
    -- ...e gli altri 15 oggetti del file

    Copia le righe di install/qb-core_items.lua dentro qb-core/shared/items.lua, nella tabella QBShared.Items:

    hw_caramella = { name = 'hw_caramella', label = 'Caramella di Halloween', weight = 5, type = 'item', image = 'hw_caramella.png', unique = false, useable = true, shouldClose = true, description = 'La moneta di Halloween.' },
    -- ...e gli altri 15 oggetti del file

    Esegui install/esx_items.sql nel database del server (HeidiSQL, phpMyAdmin...). Le caramelle hanno peso 0, così non riempiono l'inventario.

    INSERT INTO `items` (`name`, `label`, `weight`, `rare`, `can_remove`) VALUES
        ('hw_caramella', 'Caramella di Halloween', 0, 0, 1),
        -- ...
    ON DUPLICATE KEY UPDATE `label` = VALUES(`label`), `weight` = VALUES(`weight`);
  5. Copia le immaginiLe 16 icone sono in install/immagini_inventario/:
    • ox_inventory → ox_inventory/web/images/
    • qb-inventory → qb-inventory/html/images/
    • altri inventari → la cartella immagini del tuo inventario
  6. Dai i permessi adminAggiungi l'ace nel server.cfg (dettagli in Permessi):
    add_ace group.admin hw_dolcetto.admin allow
  7. Riavvia e controlla la consoleAll'avvio deve comparire una riga come questa:
    [hw_dolcetto] Dolcetto o Scherzetto by MintDev.eu | framework: esx | inventario: ox_inventory
    Se leggi Nessun framework trovato, la risorsa parte prima del framework: sistema l'ordine degli ensure.

05Primo avvio

Lo script è subito utilizzabile, ma le case e la posizione della bottega le decidi tu. In 5 minuti:

  1. Posiziona la BottegaVai dove vuoi il punto di scambio, guarda nella direzione in cui deve guardare il venditore e scrivi /hwnegozio. Di base è a Legion Square.
  2. Crea il quartiereMettiti davanti a una porta, a circa 1,5 metri, guardando la porta, e scrivi /hwcasa aggiungi Via delle Zucche 1. Ripeti per tutte le case dell'evento.
  3. ControllaCon /hwcasa debug vedi tutte le case con il loro ID. Accanto alle porte compare una zucca illuminata.
  4. Avvia l'evento/hwevento on avvisa tutti i giocatori. A fine evento usa /hwevento off.
Consiglio

Raggruppa 15–30 case nella stessa zona (es. Mirror Park o Vinewood Hills): i giocatori si muovono in gruppo e l'evento sembra più vivo.


06Configurazione · Generale

Tutte le impostazioni sono in config.lua, commentate. Dopo una modifica riavvia la risorsa con ensure hw_dolcetto_scherzetto.

Config.Framework = 'auto'   -- 'auto' | 'esx' | 'qb' | 'qbx'
Config.Inventory = 'auto'   -- 'auto' | 'ox' | 'framework'

Config.AdminAce = 'hw_dolcetto.admin'
Config.AdminGroups = { 'admin', 'superadmin', 'god' }

Config.InteractKey = 38         -- E
Config.InteractKeyLabel = 'E'
Config.CancelKey = 73           -- X
Config.SoundVolume = 0.35
Config.Notifications = 'auto'   -- 'auto' | 'esx' | 'qb' | 'qbx' | 'ox' | 'nui' | 'custom'
Config.CustomNotify = function(msg, kind)
    TriggerEvent('chat:addMessage', { args = { 'Dolcetto o Scherzetto', msg } })
end
Config.PreferCustomProps = true

Config.CandyItem = 'hw_caramella'
Config.GoldCandyItem = 'hw_caramella_oro'
Config.GoldScore = 10
OpzioneDescrizione
FrameworkLascia 'auto': riconosce da solo ESX, QBCore o Qbox. Forzalo solo se hai un framework rinominato.
Inventory'auto' usa ox_inventory se è avviato, altrimenti l'inventario del framework.
AdminAce / AdminGroupsChi può usare i comandi admin (vedi Permessi).
InteractKey / CancelKeyTasti per interagire e per annullare un'azione in corso (lista dei controlli).
SoundVolumeVolume degli effetti sonori dell'interfaccia, da 0.0 a 1.0.
NotificationsSistema usato per i messaggi brevi ("Hai comprato...", "Sei troppo lontano", avvisi dell'evento). 'auto' usa quello del framework: ESX.ShowNotification su ESX, QBCore.Functions.Notify su QBCore, le notifiche di qbx_core su Qbox. In alternativa 'ox' (ox_lib), 'nui' (notifiche a tema dello script) o 'custom'. I popup DOLCETTO! / SCHERZETTO!, la barra di avanzamento e la bottega restano sempre a tema.
CustomNotifyLa tua funzione di notifica, usata con Notifications = 'custom' (okokNotify, mythic_notify, ecc.). Gira sul client; kind è 'success', 'error' o 'info'.
PreferCustomPropstrue usa i prop di Halloween inclusi nello script, false i prop originali di GTA.
CandyItem / GoldCandyItemNomi degli oggetti usati come moneta dell'evento.
GoldScoreQuanti punti vale una Caramella d'Oro nella classifica.

07Configurazione · Evento

Config.Event = {
    ActiveOnStart = true,   -- l'evento parte già attivo
    OnlyAtNight = false,    -- true = si bussa solo di notte (ora di gioco)
    NightStart = 19,
    NightEnd = 6,
}

Con ActiveOnStart = false l'evento resta spento finché un admin non scrive /hwevento on. Utile per lanciarlo a un orario preciso con un annuncio.

08Configurazione · Dolcetto o scherzetto

Config.TrickOrTreat = {
    RequireBucket = false,      -- serve il Secchiello Zucca per bussare
    KnockTime = 3500,           -- durata del "toc toc" (ms)
    InteractDistance = 1.6,
    HouseCooldown = 30 * 60,    -- secondi prima di ribussare alla stessa casa
    KnockSpam = 6,              -- secondi minimi tra due bussate

    DecorateDoors = true,
    DoorMarker = true,
    ShowBlips = false,

    Chances = { treat = 62, rare = 8, trick = 30 },   -- la somma deve fare 100
    Treat = { min = 2, max = 5 },
    Rare = { gold = 1, candies = { min = 4, max = 8 } },

    Tricks = {
        { id = 'spavento',      weight = 30 },
        { id = 'allucinazione', weight = 20 },
        { id = 'maledizione',   weight = 20 },
        { id = 'inseguimento',  weight = 18 },
        { id = 'furto',         weight = 12, steal = { min = 1, max = 3 } },
    },
    -- ...
}
OpzioneDescrizione
RequireBucketSe true serve il Secchiello Zucca. In quel caso metti il suo prezzo a 0 nel catalogo, così tutti possono prenderlo.
HouseCooldownIl cooldown vale per giocatore e per casa: ogni giocatore può ribussare alla stessa porta dopo questo tempo.
KnockSpamPausa minima tra due bussate qualsiasi, contro chi corre da una porta all'altra.
DecorateDoorsZucca illuminata accanto a ogni porta creata con /hwcasa. Si spegne quando hai già bussato.
ChancesProbabilità in percentuale di dolcetto, dolcetto d'oro e scherzetto.
TricksGli scherzetti possibili. weight indica quanto spesso escono; per disattivarne uno toglilo dalla lista.
HallucinationTime, CurseTime, ChaseTimeDurata in secondi di allucinazione, maledizione e inseguimento.
ResidentPeds / MonsterPedsModelli dei personaggi che aprono la porta (dolcetto / scherzetto).
ChaserPed / ThiefPedLo zombie dell'inseguimento e la scimmia ladra.

09Configurazione · Case

Il modo consigliato è crearle in gioco con /hwcasa aggiungi: vengono salvate in data/luoghi.json e funzionano subito, senza riavvio. Puoi anche scriverle nel config:

Config.Houses = {
    { x = -14.87, y = -1441.18, z = 31.19, label = 'Forum Drive' },          -- punto = porta
    { x = 123.45, y = -678.90, z = 30.10, h = 90.0, label = 'La mia casa' },  -- punto = chi bussa (esempio)
}

10Configurazione · Bottega delle Caramelle

Config.Shop = {
    Name = 'Bottega delle Caramelle',
    Coords = vec4(195.17, -933.77, 29.7, 144.5),   -- oppure /hwnegozio in gioco
    Ped = 'u_m_y_zombie_01',
    PedScenario = 'WORLD_HUMAN_STAND_IMPATIENT',
    Distance = 2.2,
    MaxQuantity = 50,
    MoneyAccount = 'cash',                         -- 'cash' oppure 'bank'
    Blip = { Enabled = true, Sprite = 52, Color = 17, Scale = 0.9 },
    Decorations = true,
    -- ...
}

Catalogo

Ogni voce è un oggetto acquistabile con le caramelle. category decide la scheda: 'cibo', 'bevande' o 'oggetti'.

Catalog = {
    { item = 'hw_burger_mostro',  price = 10, category = 'cibo' },
    { item = 'hw_pozione_strega', price = 12, category = 'bevande' },
    { item = 'hw_zucca_lanterna', price = 15, category = 'oggetti' },
    -- puoi vendere anche oggetti di altri script:
    { item = 'lockpick',          price = 30, category = 'oggetti' },
},
Oggetti esterni

Se vendi un oggetto che non è dello script, aggiungi anche label e description in Config.Items (con type = 'currency' se non deve essere usabile) così la bottega mostra nome e descrizione corretti. Ricorda di mettere la sua immagine in html/img/.

Scambi

Exchanges = {
    { id = 'caramelle_soldi', give = 'hw_caramella',     giveAmount = 1, money = 25 },
    { id = 'oro_soldi',       give = 'hw_caramella_oro', giveAmount = 1, money = 350 },
    { id = 'oro_caramelle',   give = 'hw_caramella_oro', giveAmount = 1, item = 'hw_caramella', itemAmount = 12 },
},

give è l'oggetto che il giocatore consegna. Con money riceve soldi sul conto MoneyAccount, con item + itemAmount riceve un oggetto. Il pulsante "Tutte" scambia tutto in una volta (fino a MaxQuantity).

11Configurazione · Oggetti e cibo

hw_torta_zucca = {
    label = 'Torta di Zucca',
    description = 'Una fetta di torta di zucca con panna montata.',
    type = 'food',          -- 'food' | 'drink' | 'currency' | 'placeable' | 'bucket' | 'box'
    time = 5000,            -- durata dell'animazione (ms)
    hunger = 35,            -- 0-100
    -- thirst = 10, stress = -15, heal = 25, effect = 'velocita'
    prop = { custom = 'hw_prop_torta_zucca', base = 'prop_sandwich_01' },
},
CampoDescrizione
hunger / thirstQuanto riempie, in percentuale (0–100).
stressValore negativo per togliere stress (QBCore e Qbox).
healPunti vita recuperati.
effect'velocita' super velocità · 'fantasma' giocatore trasparente (lo vedono tutti) · 'ipnosi' effetto visivo · 'vampiro' lampo rosso.
prop.custom / prop.baseProp personalizzato e prop originale di GTA usato se il personalizzato non c'è.
prop.placement / prop.customPlacement{ x, y, z, rotX, rotY, rotZ } per sistemare il prop in mano (prova con /hwprova).

Aggiungere un nuovo cibo

  1. Registra l'oggetto nel tuo inventario (come in Installazione) e aggiungi la sua icona.
  2. Aggiungilo in Config.Items con type = 'food' o 'drink': diventa usabile da solo.
  3. Se vuoi venderlo, aggiungilo a Config.Shop.Catalog e metti l'icona anche in html/img/.

12Configurazione · Animazioni ed effetti

Config.Anims = {
    food  = { dict = 'mp_player_inteat@burger', anim = 'mp_player_int_eat_burger', flag = 49, bone = 18905,
              placement = { 0.13, 0.05, 0.02, -50.0, 16.0, 60.0 } },
    drink = { dict = 'mp_player_intdrink', anim = 'loop_bottle', flag = 49, bone = 18905,
              placement = { 0.12, 0.008, 0.03, 240.0, -60.0, 0.0 } },
}

Config.Effects = {
    SpeedMultiplier = 1.25,  -- Pozione della Strega (massimo 1.49)
    SpeedTime = 60,
    GhostAlpha = 110,        -- Cupcake Fantasma (0 invisibile, 255 normale)
    GhostTime = 45,
    HypnosisTime = 8,        -- Lecca-Lecca Ipnotico
}
Anticheat

Alcuni anticheat segnalano i moltiplicatori di velocità. Se il tuo lo fa, abbassa SpeedMultiplier o aggiungi un'eccezione.

13Zucche, secchiello e scatola misteriosa

Config.Pumpkins = {
    Item = 'hw_zucca_lanterna',
    MaxPerPlayer = 3,
    Persist = true,          -- restano dopo un riavvio (data/zucche.json)
    Light = { color = { 255, 110, 20 }, range = 3.5, intensity = 5.0, height = 0.35, flicker = true },
}

Config.MysteryBox = {
    Item = 'hw_scatola_misteriosa',
    OpenTime = 3000,
    Rewards = {
        { type = 'candies', weight = 35, min = 4, max = 12 },
        { type = 'gold',    weight = 10, amount = 1 },
        { type = 'food',    weight = 30 },                 -- un cibo a caso del catalogo
        { type = 'money',   weight = 15, min = 200, max = 800 },
        { type = 'trick',   weight = 10 },
    },
}

Il secchiello (Config.Bucket) si prende in mano usandolo dall'inventario. Con Bone e BasePlacement / CustomPlacement puoi spostarlo nell'altra mano o correggerne la posizione.


14Come si gioca

Bussare alle porte

Vicino a una casa dell'evento compare una freccia arancione sopra la porta. A meno di 1,6 metri appare il suggerimento [E] Bussa: parte l'animazione e dopo il "toc toc" qualcuno apre. Con X si annulla.

Scherzetti

ScherzettoCosa succede
SpaventoUn mostro (zombie, clown, alieno, Bigfoot...) apre la porta tra il fumo: urlo e il giocatore cade a terra.
AllucinazioneSchermo distorto e tre clown che compaiono intorno al giocatore per 25 secondi.
MaledizioneCamminata da ubriaco e telecamera che ondeggia per 40 secondi.
InseguimentoUno zombie esce e insegue il giocatore. Se lo raggiunge, il giocatore cade.
FurtoUna scimmia ruba 1–3 caramelle e scappa. Senza caramelle diventa uno spavento.

Bottega, cibo e oggetti

15Comandi admin

ComandoDescrizione
/hwcasa aggiungi [nome]Aggiunge la casa davanti a te (salvata subito).
/hwcasa rimuoviRimuove la casa più vicina entro 3 metri.
/hwcasa debugMostra o nasconde tutte le case con il loro ID.
/hwnegozioSposta la bottega nella tua posizione. /hwnegozio reset torna alle coordinate del config.
/hwevento on|offAvvia o ferma l'evento con un avviso a tutti i giocatori.
/hwdai [id] [quantità] [oro]Dà caramelle a un giocatore (aggiungi oro per le caramelle d'oro).
/hwreset [id]Azzera i cooldown delle case di tutti o di un solo giocatore.
/hwprova [oggetto]Mostra il prop in mano per 10 secondi, per sistemarne la posizione.

/hwevento, /hwdai e /hwreset funzionano anche dalla console del server (senza la /).

16Permessi

Un giocatore è admin per lo script se vale almeno una di queste condizioni:

add_ace group.admin hw_dolcetto.admin allow
# oppure per un singolo giocatore:
add_principal identifier.license:xxxxxxxx group.admin

17Prop 3D

Lo script include 11 prop 3D originali, già pronti nella cartella stream/ e caricati in automatico: non devi convertire o installare nulla.

PropUsato per
hw_prop_zucca_lanternaZucca intagliata da posizionare (con luce)
hw_prop_secchielloSecchiello zucca per le caramelle
hw_prop_caramella, hw_prop_torta_zucca, hw_prop_mela_caramellata, hw_prop_cupcake_fantasma, hw_prop_biscotto_teschio, hw_prop_lecca_lecca, hw_prop_candy_cornDolci in mano mentre si mangia
hw_prop_sangue_vampiro, hw_prop_pozione_stregaBevande in mano mentre si beve

Il file hw_halloween_props.ytyp viene caricato da fxmanifest.lua con la riga data_file 'DLC_ITYP_REQUEST'. Puoi usare i prop anche in altri script con il loro nome (es. `hw_prop_zucca_lanterna`), finché hw_dolcetto_scherzetto è avviato.

18Testi e traduzioni

Tutti i testi (notifiche, suggerimenti, popup) sono in shared/lang.lua. Per tradurre lo script basta cambiare i valori, lasciando uguali le chiavi e i segnaposto %s / %d:

Lang = {
    prompt_knock    = 'Knock: trick or treat?',
    res_treat_title = 'TREAT!',
    res_treat_text  = 'You got %d candies',
    -- ...
}

I nomi e le descrizioni degli oggetti sono in Config.Items, i testi fissi della bottega in html/index.html e html/script.js.

19Dati salvati

FileContenuto
data/luoghi.jsonCase create con /hwcasa e posizione della bottega impostata con /hwnegozio.
data/zucche.jsonZucche intagliate posizionate dai giocatori.
data/classifica.jsonClassifica: caramelle, caramelle d'oro e case visitate per personaggio.

Per azzerare la classifica a fine evento: ferma la risorsa, cancella classifica.json e riavviala. I cooldown delle case sono in memoria e si azzerano al riavvio (o con /hwreset).

20Compatibilità e integrazioni


21Risoluzione problemi

In console compare "Nessun framework trovato"

La risorsa parte prima del framework. Nel server.cfg metti ensure hw_dolcetto_scherzetto dopo es_extended / qb-core / qbx_core e dopo ox_inventory.

Gli oggetti non si possono usare o non compaiono

Controlla di aver registrato tutti i 16 oggetti nel file giusto per il tuo inventario (vedi Installazione) e di aver riavviato l'inventario. Su qb-inventory gli oggetti devono avere useable = true.

Le icone degli oggetti non si vedono

Copia le immagini di install/immagini_inventario/ nella cartella immagini del tuo inventario. Il nome del file deve essere identico al nome dell'oggetto (es. hw_caramella.png).

Vicino alle porte non succede niente

Verifica che l'evento sia attivo (/hwevento on), che OnlyAtNight non sia attivo di giorno e di essere entro 1,6 metri dal punto della casa (/hwcasa debug lo mostra). Se hai già bussato, il suggerimento indica quanto manca al cooldown.

Non trovo la bottega

Ha un blip arancione sulla mappa. Se l'hai spostata con /hwnegozio la posizione è salvata in data/luoghi.json: per tornare a quella del config usa /hwnegozio reset.

Il prop in mano è storto o fluttua

Usa /hwprova nome_oggetto e correggi placement (prop di GTA) o customPlacement (prop personalizzati) in Config.Items o Config.Anims.

In console compare "You lack the required entitlement"

La sv_licenseKey del server appartiene a un account Cfx diverso da quello che ha acquistato lo script. Usa una chiave creata con lo stesso account (portal.cfx.re → Server Management) oppure riscarica la risorsa con l'account giusto.

I prop di Halloween non si vedono

Controlla che la cartella stream/ contenga gli 11 file .ydr e hw_halloween_props.ytyp, che in fxmanifest.lua ci sia la riga data_file e che Config.PreferCustomProps sia true. Dopo aver aggiornato la risorsa svuota la cache del server (cache/) e riavvia.

Il server dice "Sei troppo lontano" anche quando sono vicino

Succede se il punto della casa è stato salvato male (ad esempio da un piano diverso). Rimuovi la casa con /hwcasa rimuovi e ricreala stando davanti alla porta.

22Supporto

Hai un problema o vuoi una modifica su misura? Apri un ticket sul Discord di MintDev. Indica la versione dello script, il framework e l'inventario che usi e, se c'è, l'errore della console F8 o del server.

23Changelog

v1.0.0 · Prima versione

24Licenza

© 2026 MintDev.eu — Tutti i diritti riservati. Lo script è concesso in licenza per l'uso sul server dell'acquirente. Non è consentito rivenderlo, ridistribuirlo o ripubblicarlo, in tutto o in parte, né rimuovere le indicazioni di copyright. I termini completi sono nel file LICENZA.txt incluso nello script.

© 2026 MintDev · Dolcetto o Scherzetto v1.0.0 Pagina dello script · mintdev.eu