# KeyRota: rotazioni avanzate (KRC), documentazione

Fonte: https://keyrota.app/documentation/it/advanced (Aggiornato il 18/10/2026). JSON Schema: https://keyrota.app/documentation/keyrota-rotation.schema.json. Indice per agenti IA: https://keyrota.app/documentation/llms.txt.

---

<!-- https://keyrota.app/documentation/it/advanced -->

## Rotazioni avanzate (KRC)

> [!TIP] Ti consigliamo di creare le rotazioni con un agente IA
> È molto più rapido e comodo che configurare una rotazione a mano. Più l'agente IA è avanzato, più la rotazione corrisponde alle tue esigenze già al primo tentativo. Ti consigliamo i modelli più recenti di Anthropic e OpenAI con il livello di ragionamento «Extra (xhigh)». Come fare: [Creare con un agente IA](https://keyrota.app/documentation/it/ai).

Una rotazione avanzata è il tuo elenco di regole: quale abilità premere e quando. In combattimento KeyRota controlla le regole e preme il primo pulsante adatto. Il formato e il motore di queste rotazioni si chiamano **KRC** (KeyRota Customization).

### Base o avanzata

| | Blizzard (base) | Avanzata (KRC) |
|---|---|---|
| Chi sceglie il pulsante | Il gioco: il suggerimento di Blizzard | Le tue regole |
| Configurazione | Nessuna | Slot, aure e regole: nell'editor o da file |
| Specializzazioni | Qualsiasi specializzazione da danno (DPS in mischia e a distanza) e da tank | Quella per cui è scritta la rotazione |
| Burst e modalità bersagli | Non usati | I pulsanti Burst e Bersagli; il loro significato lo decidono le regole |
| Quando sceglierla | Per iniziare subito con qualsiasi personaggio | Ti serve una priorità precisa: DoT, accumulo di risorse, tempi di recupero in una finestra di burst, una tua logica per più bersagli |

Nel blocco Rotazione dell'app il profilo Blizzard è il primo; sotto, in «Rotazioni personali», ci sono le tue rotazioni. Puoi cambiare profilo in qualsiasi momento, mentre la rotazione è arrestata.

### Di cosa è fatta una rotazione

| Parte | Cos'è | Quantità |
|---|---|---|
| **Slot** | I pulsanti della rotazione. Lo slot N della rotazione è lo slot N del profilo di Better Assistant. | fino a 12 |
| **Aure** | I tuoi benefici e le tue penalità sul bersaglio, per ID dell'incantesimo. L'aura N della rotazione è l'aura N dell'elenco di Better Assistant. | fino a 12 |
| **Risorse** | La salute del giocatore e del bersaglio e le risorse della specializzazione: energia, punti combo, rabbia, mana e altre. Tutti i valori sono in percentuale. | in base alla specializzazione |
| **Combattimento** | Il numero di nemici vicini e la distanza dal bersaglio. | 2 |
| **Interruttori** | I pulsanti del pannello delle impostazioni rapide: modalità bersagli (due flag nelle regole: `aoe` e `st`), Burst, Cure / difesa, A terra, Movimento. | 6 |
| **Regole** | Quale slot premere e a quali condizioni. L'ordine delle regole è la priorità. | illimitate |

Una regola è composta da gruppi di condizioni. Una regola è soddisfatta quando lo è **almeno uno** dei suoi gruppi (O), e un gruppo è soddisfatto quando lo sono **tutte** le sue condizioni (E). Una regola senza gruppi è sempre soddisfatta.

*Testo KRC:*

```text
use Envenom when  # Affondo Venefico
	Combo_Points >= 70 and Envenom_Buff.down  # 5+ punti combo, nessun beneficio
	or
	Combo_Points >= 70 and Energy >= 70  # 5+ punti combo, molta energia
```

*JSON:*

```json
{
  "use": "Envenom",
  "name": "Affondo Venefico",
  "when": [
    {"all": ["Combo_Points >= 70", "Envenom_Buff.down"], "comment": "5+ punti combo, nessun beneficio"},
    {"all": ["Combo_Points >= 70", "Energy >= 70"], "comment": "5+ punti combo, molta energia"}
  ]
}
```


Si legge così: «Premi Affondo Venefico se ci sono 5 o più punti combo e manca il beneficio di Affondo Venefico, **oppure** se ci sono 5 o più punti combo e almeno il 70% di energia». Il motivo per cui 5 punti combo corrispondono a `70` è spiegato in [Risorse](https://keyrota.app/documentation/it/conditions#resources).

### Come KeyRota sceglie un pulsante

1. Le regole vengono controllate **dall'alto in basso**, nell'ordine dell'elenco.
2. Per ogni regola vengono controllati i suoi gruppi. Se nessuno è soddisfatto, KeyRota passa alla regola successiva.
3. Se la regola è soddisfatta ma il suo incantesimo in quel momento **non si può usare** (tempo di recupero, risorsa insufficiente, bersaglio troppo lontano, nessun bersaglio, incantesimo non appreso), KeyRota passa comunque alla regola successiva. Non serve una condizione sulla disponibilità dello slot stesso.
4. Viene **scelta** la prima regola soddisfatta il cui incantesimo si può usare. Il tempo di recupero globale (GCD) non cambia la scelta: una regola che attende la fine del GCD resta scelta e le regole sottostanti non la scavalcano.
5. Se nessuna regola è adatta: con «Ignora l'icona principale» attivo, KeyRota attende; se è disattivo, preme il suggerimento del gioco.

L'attesa è normale. Una rotazione che accumula energia, per esempio, spesso non preme nulla per mezzo secondo o un secondo, finché non c'è abbastanza energia per una regola più in alto.

### Un valore sconosciuto non abilita mai una regola

A volte KeyRota non conosce un valore: un'aura non viene letta (il suo ID non è nel profilo di Better Assistant), non c'è un bersaglio (la salute e la distanza del bersaglio sono sconosciute), i nemici non sono stati contati. Una condizione che legge un valore sconosciuto è **falsa**: sia `X.up` sia `X.down`, sia `TargetHP >= 50` sia `TargetHP < 50`. Un valore sconosciuto può solo bloccare una regola, mai abilitarla: meglio saltare una pressione che premere il tasto sbagliato.

> [!TIP]
> Se una regola non scatta mai, controlla prima di tutto che ogni aura che legge sia nel profilo di Better Assistant con l'ID corretto. Maggiori dettagli in [Domande frequenti e risoluzione dei problemi](https://keyrota.app/documentation/it/faq#never-fires).

### Quando viene premuto un pulsante

- **Un incantesimo normale** (sul GCD) viene premuto nella finestra di coda degli incantesimi, proprio alla fine del GCD: il gioco lo lancia non appena il GCD termina.
- **I flag degli slot** modificano questo comportamento: «Solo manuale (M)», «Canalizzazione (C)», «Fuori GCD (O)», «Nella finestra di coda (Q)». Cosa fa ciascuno e come combinarli è spiegato in [Flag degli slot](https://keyrota.app/documentation/it/rotation-json#flags).
- **Canalizzazioni.** Durante una canalizzazione KeyRota non preme nulla, per non interromperla. Durante un **lancio** KeyRota attende che resti solo la finestra di coda.
- **Le tue pressioni.** Quando premi tu il tasto di un'abilità, KeyRota si fa da parte e non ti ostacola.

### Avvio rapido

Se KeyRota non è ancora installata, inizia dai [primi passi](https://keyrota.app/documentation/it/start).

1. In KeyRota apri Rotazione — Nuovo — Nell'editor….
2. Nella pagina Generale scegli la specializzazione e dai un nome alla rotazione.
3. Nella pagina Slot aggiungi i pulsanti con i rispettivi ID degli incantesimi; nella pagina Aure, i benefici e le penalità che le regole leggeranno.
4. Nella pagina Regole aggiungi le regole in ordine di priorità.
5. Nella pagina Generale fai clic su «Crea da slot e aure», poi su «Copia». Nel gioco: `/ba` — scheda Profile — incolla la stringa — Apply.
6. Metti gli incantesimi degli slot sulle barre delle azioni e assegna loro dei tasti (va bene anche una macro con `#showtooltip`).
7. Fai clic su Salva, scegli il profilo nell'elenco e avvia la rotazione con F1 (su macOS, ⌃⇧Space).

Tutti i pulsanti, con un esempio completo, sono descritti in [Editor della rotazione](https://keyrota.app/documentation/it/editor).

### In questa sezione

- [Editor della rotazione](https://keyrota.app/documentation/it/editor) — ogni pagina e ogni pulsante della finestra, e una rotazione creata passo dopo passo.
- [JSON della rotazione](https://keyrota.app/documentation/it/rotation-json) — tutti i campi del formato, i flag degli slot, i nomi, i limiti, gli errori e il testo KRC.
- [Condizioni](https://keyrota.app/documentation/it/conditions) — tutti i tipi di condizione, gli operatori, le percentuali e i valori sconosciuti.
- [Schemi di esempio](https://keyrota.app/documentation/it/patterns) — DoT, accumulo, generatore e consumo, AoE, Burst, difese e altri modelli.
- [Creare con un agente IA](https://keyrota.app/documentation/it/ai) — un modello di prompt, l'analisi dei log e la verifica del risultato.
- [Domande frequenti e risoluzione dei problemi](https://keyrota.app/documentation/it/faq) — perché una regola non scatta, preme troppo presto o troppo tardi, interrompe una canalizzazione.

---

<!-- https://keyrota.app/documentation/it/editor -->

## Editor della rotazione

L'editor della rotazione è la finestra di KeyRota in cui componi una rotazione avanzata senza scriverla a mano: slot con flag, aure, regole, con accanto il testo KRC e il JSON. La documentazione vale sia per Windows sia per macOS; le schermate sono state acquisite su Windows e mostrano la rotazione di Assassinio per le incursioni presa dagli [esempi](https://keyrota.app/documentation/it/patterns#example-files).

### Aprire l'editor

- **La tua rotazione.** Seleziona il profilo nel blocco Rotazione della finestra principale e fai clic su Configura.
- **Una nuova rotazione.** Nuovo — Nell'editor…. La specializzazione viene presa dal gioco o dal profilo corrente. La rotazione diventa un profilo al primo salvataggio.
- **Da file o dagli appunti.** Nuovo — Da file… accetta il testo KRC (`.txt`), il JSON di una rotazione e un file di profilo di KeyRota; Nuovo — Dagli appunti prende gli stessi contenuti dagli appunti. Apri il nuovo profilo nell'editor con Configura.

![Una nuova rotazione nell'editor: la pagina Generale, ancora senza slot né regole](https://keyrota.app/documentation/img/it/editor-new.png)

Per un **profilo Blizzard** l'editor mostra solo il nome e il ritardo dei tasti: il pulsante principale lo sceglie il gioco. «Crea una rotazione personale» crea un nuovo profilo con una rotazione avanzata; il profilo Blizzard resta nell'elenco.

![Un profilo Blizzard nell'editor: il nome del profilo, il ritardo dei tasti e «Crea una rotazione personale»](https://keyrota.app/documentation/img/it/editor-blizzard.png)

#### La finestra

- **A sinistra**, le pagine: Generale, Slot, Aure, Regole (con il numero di regole), Testo e JSON. Sopra di esse, «Rotazione personale» e la specializzazione scelta.
- **A destra**, la pagina selezionata.
- **In basso**, la barra di stato: se la rotazione è valida («Rotazione valida: 15 regole, 11 slot, 10 aure»), se ci sono modifiche non salvate e, in caso di errore, dove si trova e un pulsante Mostra. A destra, Chiudi e Salva.

Non viene applicato nulla finché non fai clic su Salva (su Windows anche Ctrl+S).

### Generale

![La pagina Generale: profilo, specializzazione, nome della rotazione, Ignora l'icona principale, ritardo dei tasti](https://keyrota.app/documentation/img/it/editor-general.png)

| Controllo | Cosa fa |
|---|---|
| **Nome del profilo** | Il nome del profilo nell'elenco delle rotazioni della finestra principale. |
| **Specializzazione** | Determina le risorse della rotazione (energia, punti combo, rabbia…) e la classe e la specializzazione del profilo di Better Assistant. Se la cambi, le risorse vengono sostituite, a meno che le regole non leggano le risorse della specializzazione precedente (la salute non conta). |
| **Nome della rotazione** | La prima riga del testo KRC (`rotation "…"`), mostrata nel registro di KeyRota. Senza virgolette doppie. È un buon posto per la versione: «Assassinio v1.3». |
| **Ignora l'icona principale** | Attivo: KeyRota preme solo secondo le regole; se nessuna regola è soddisfatta, attende. Disattivo: in quel caso preme il suggerimento del gioco. Per le rotazioni personali di solito è attivo: l'attesa (per esempio, per accumulare energia) è normale. |
| **Ritardo dei tasti** | Una pausa prima di ogni pressione, come farebbe una persona: Nessuno, Fisso (un intervallo di 0–1000 ms) o Casuale (un minimo e un massimo tra 0 e 1000 ms). «Anche per interruzioni e difesa» applica la stessa pausa anche a queste. |

![La pagina Generale più in basso: il blocco Better Assistant, il raggio del contatore dei nemici, Solo nemici in combattimento e la descrizione](https://keyrota.app/documentation/img/it/editor-general-ba.png)

| Controllo | Cosa fa |
|---|---|
| **Profilo: …** | Un riepilogo della stringa del profilo di Better Assistant: specializzazione, numero di incantesimi e di aure. |
| **Crea da slot e aure** | Crea la stringa del profilo di Better Assistant a partire dagli ID degli incantesimi degli slot, dall'impostazione «Visibile in Better Assistant» di ogni slot, dalle aure in ordine, dalla specializzazione, dal raggio e da Solo nemici in combattimento. Se è già stato incollato un profilo della stessa specializzazione, le sue altre impostazioni vengono mantenute. |
| **Dagli appunti** | Incolla una stringa di profilo già pronta. La sua specializzazione deve coincidere con quella della rotazione. |
| **Copia** | Copia la stringa per incollarla nel gioco. |
| **Raggio del contatore dei nemici, metri** | Da 1 a 100, 8 per impostazione predefinita. Usato dalla condizione «Nemici vicini» (`enemies`). |
| **Solo nemici in combattimento** | Attivo per impostazione predefinita: i nemici non ancora in combattimento non vengono contati. |
| **Descrizione** | Note sulla rotazione: le righe che iniziano con `#` nel testo KRC. Non influiscono sul funzionamento della rotazione. |

Sotto i pulsanti compaiono degli avvisi: quali slot usati nelle regole non hanno l'ID dell'incantesimo (non saranno nel profilo di Better Assistant) e cosa, in un profilo già incollato, non corrisponde alla rotazione.

> [!IMPORTANT]
> Nel profilo di Better Assistant le aure vanno in fila, a partire dalla prima. Se l'aura 3 non ha un ID e l'aura 4 sì, il profilo non viene creato: «L'aura 3 non ha il numero dell'incantesimo». Inserisci l'ID o rinumera le aure.

#### Il profilo di Better Assistant nel gioco

Lo slot N della rotazione è lo slot N di Better Assistant, l'aura N è l'aura N del suo elenco. La stringa del profilo inserisce lì i tuoi slot e le tue aure nell'ordine giusto.

1. Nella pagina Generale fai clic su «Crea da slot e aure», poi su «Copia».
2. Nel gioco digita `/ba`, apri la scheda **Profile**, incolla la stringa, fai clic su **Apply** e conferma.
3. Dopo ogni modifica a slot o aure (ID, ordine, Con bersaglio / In combattimento) crea e incolla di nuovo il profilo.

### Slot

![La pagina Slot: i 12 posti a sinistra, a destra lo slot 10 selezionato, Sparizione con ID 1856](https://keyrota.app/documentation/img/it/editor-slots.png)

A sinistra ci sono i 12 posti: numero, nome, ID dell'incantesimo, flag («fuori GCD, in coda») e «non usato» quando lo slot non compare in nessuna regola. Un posto vuoto riporta «Vuoto»: selezionalo per far comparire il pulsante «Aggiungi slot».

| Controllo | Cosa fa |
|---|---|
| **Nome** | Il nome dell'incantesimo nel gioco. Visibile nell'elenco delle regole e nel registro. |
| **ID incantesimo** | Il numero nel link di Wowhead: in `wowhead.com/spell=1856/vanish` è `1856`. Better Assistant lo usa per mettere l'incantesimo in questo slot. |
| **Visibile in Better Assistant** | Con bersaglio o In combattimento. Lo slot è pronto solo quando Better Assistant lo mostra. In combattimento serve per cure e difese che devono funzionare senza bersaglio. |
| **Come premere** | Quattro interruttori per i flag: vedi la tabella più sotto. |
| **Nome nel testo** | Il nome dello slot nelle regole e nel testo KRC: lettere, cifre e `_`, senza spazi. |
| **Commento** | Un commento alla fine della riga di dichiarazione nel testo. |
| **Compare nelle regole** | Le regole che premono o leggono lo slot. «Rimuovi slot» è disponibile solo quando lo slot non è usato. |

Perché KeyRota possa premere uno slot, il suo incantesimo deve trovarsi su una barra delle azioni nel gioco, con un tasto assegnato: KeyRota prende il tasto dalle tue barre. Va bene anche una macro con `#showtooltip Nome`. Uno slot senza tasto non viene mai premuto.

#### Come premere: i flag

![Gli interruttori Come premere dello slot Sparizione: Fuori GCD (O) e Nella finestra di coda (Q) sono attivi](https://keyrota.app/documentation/img/it/editor-slot-flags.png)

| Interruttore | Cosa fa | Quando usarlo |
|---|---|---|
| nessun flag | Lo slot viene premuto come un incantesimo normale: alla fine del tempo di recupero globale, nella finestra di coda. | Quasi tutti gli incantesimi sul GCD. |
| **Solo manuale (M)** | KeyRota non preme mai questo slot da sola e ne salta le regole. Se premi tu il suo tasto, la rotazione va in pausa. | Abilità che vuoi premere solo tu. |
| **Canalizzazione (C)** | Mentre questo incantesimo è in canalizzazione, KeyRota non preme nulla e non lo interrompe. | Incantesimi canalizzati come Furia Omicida. |
| **Fuori GCD (O)** | Non attende il tempo di recupero globale: viene premuto subito, anche a metà del GCD. | Incantesimi fuori GCD come Roulette Eterna. |
| **Nella finestra di coda (Q)** | Solo insieme a Fuori GCD: viene premuto proprio alla fine del GCD, nella finestra di coda degli incantesimi. | Macro con la seconda riga sul GCD (Scarica d'Adrenalina + Furia Omicida) e pulsanti che richiedono l'esito del colpo precedente (Sparizione dopo Rovina dei Re). |

Tutte le combinazioni di flag e il relativo JSON sono in [Flag degli slot](https://keyrota.app/documentation/it/rotation-json#flags).

### Aure

![La pagina Aure: aura 1 «Garrota sul bersaglio [703]», ID 703, nome nel testo Garrote_DoT, compare nelle regole 3, 4, 5, 7, 8, 10](https://keyrota.app/documentation/img/it/editor-auras.png)

Le aure sono i tuoi benefici e le tue penalità sul bersaglio che le regole leggono. L'aura N della rotazione è l'aura N dell'elenco di Better Assistant.

| Controllo | Cosa fa |
|---|---|
| **Nome** | Il nome dell'aura; visibile nelle regole. Comodo con l'ID tra parentesi: «Garrota sul bersaglio [703]». |
| **ID incantesimo** | Il numero dell'aura su Wowhead. Better Assistant la cerca tra i tuoi benefici e le tue penalità sul bersaglio. |
| **Nome nel testo**, **Commento** | Come per gli slot. |
| **Compare nelle regole** | Dove viene letta l'aura. «Rimuovi aura» funziona solo per un'aura non usata. |

> [!NOTE]
> L'ID di un'aura e l'ID dell'incantesimo che la applica possono essere diversi. L'incantesimo Sparizione è `1856`, il beneficio che concede è `11327`; Furtività è `1784`, Furtività con il talento Sotterfugio è `115191`. Su Wowhead controlla l'ID del beneficio o della penalità vera e propria.

Sono visibili solo le **tue** aure: i benefici che applichi a te stesso e le penalità che applichi al bersaglio. Le regole non vedono i benefici di altri giocatori né le penalità di altri giocatori sul bersaglio.

### Regole

![La pagina Regole: 15 regole a sinistra, a destra la regola 4, Stigma Letale, con il suo gruppo di condizioni](https://keyrota.app/documentation/img/it/editor-rules.png)

Le regole vengono controllate dall'alto in basso: KeyRota preme la prima soddisfatta il cui incantesimo si può lanciare; se non si può (tempo di recupero, risorsa, portata), passa alla successiva.

**La barra degli strumenti sopra l'elenco:**

| Pulsante | Cosa fa |
|---|---|
| **+** | Una nuova regola sotto quella selezionata. Preme il primo slot e non ha ancora condizioni. |
| **Copia regola** | Una copia della regola, inserita sotto di essa. |
| **Cestino** | Elimina la regola. |
| **Su**, **Giù** | Sposta la regola in alto (viene controllata prima) o in basso (viene controllata dopo). |

Ogni regola dell'elenco mostra il numero (la priorità), lo slot, il nome e il numero di gruppi; una regola con un errore ha un segno rosso.

**La regola selezionata:**

| Controllo | Cosa fa |
|---|---|
| **Premere** | Quale slot premere quando la regola è soddisfatta. |
| **Nome** | Visibile nel registro quando la regola scatta. |
| **Descrizione** | Note sopra la regola nel testo KRC. |
| **Quando premere** | Gruppi di condizioni: la regola è soddisfatta quando lo è almeno un gruppo (O); un gruppo, quando lo sono tutte le sue condizioni (E). |

![I gruppi di condizioni della regola Perforazione: il gruppo 1 e il gruppo 2 separati da O](https://keyrota.app/documentation/img/it/editor-rule-groups.png)

Ogni gruppo ha l'intestazione «Gruppo N», una casella «Commento del gruppo» e i pulsanti Copia gruppo ed Elimina gruppo. Una riga di condizione contiene **cosa controllare**, la **proprietà**, il **confronto** e il **numero**; la croce rimuove la condizione. «+ Condizione» aggiunge una condizione al gruppo, «+ Gruppo (O)» un nuovo gruppo. Un gruppo contiene fino a 16 condizioni e una regola fino a 16 gruppi: al limite i pulsanti vengono disattivati. Una regola senza gruppi riporta «Senza condizioni: la regola scatta sempre quando l'incantesimo si può lanciare».

| Cosa controllare | Proprietà | Nel testo KRC |
|---|---|---|
| **Aure** (ogni aura della rotazione) | presente, assente, rimanente %, cumuli | `Garrote_DoT.up`, `.down`, `.duration <= 30`, `.stacks >= 3` |
| **Slot** (ogni slot) | pronto, in recupero, recupero %, cariche, illuminato, non illuminato | `Kingsbane.ready`, `.oncd`, `.cd <= 3`, `.charges >= 2`, `.glow`, `.noglow` |
| **Risorse** | salute del giocatore e del bersaglio, risorse della specializzazione, % | `PlayerHP <= 40`, `Energy >= 70` |
| **Combattimento**: Nemici vicini | un numero | `enemies >= 3` |
| **Combattimento**: Distanza dal bersaglio | metri | `target.distance <= 8` |
| **Pannello delle impostazioni rapide** | attivo, disattivo | `aoe == 1`, `st == 1`, `cd == 1`, `defensives == 1`, `ground_spells == 1`, `movement == 1` |

Confronti: `<`, `≤`, `=`, `≥`, `>`; il numero va da 0 a 100. Una nuova condizione parte come «presente» per la prima aura; quando cambi cosa controllare, la proprietà e il numero tornano ai valori predefiniti (`≥ 50` per una risorsa, `≥ 2` per i nemici, `≤ 8` per la distanza). Tutte le condizioni nel dettaglio: [Condizioni](https://keyrota.app/documentation/it/conditions).

### Errori e barra di stato

![Un errore nella regola 9: il gruppo 1 senza condizioni ha il bordo rosso; la barra di stato riporta «Regola 9, gruppo 1: il gruppo non ha condizioni» con Mostra](https://keyrota.app/documentation/img/it/editor-problem.png)

- **Verde**: «Rotazione valida: …». Nessun errore, puoi salvare.
- **Rosso**: indica il punto, per esempio «Regola 9, gruppo 1: il gruppo non ha condizioni». Mostra apre quel punto. La regola è segnalata nell'elenco e il gruppo ha il bordo rosso.
- Una rotazione con un errore non viene salvata: «Una rotazione con errori non viene salvata: correggi quanto segnalato in basso».
- Mentre la rotazione è in esecuzione non puoi salvare: «Arresta la rotazione per salvare».

### Testo e JSON

![La pagina Testo e JSON in modalità testo KRC: l'inizio del testo della rotazione con la descrizione e le dichiarazioni da buff1 a buff7](https://keyrota.app/documentation/img/it/editor-text.png)

![La pagina Testo e JSON in modalità JSON: l'inizio del JSON della rotazione con format, version, title, specID, ignoreMainIcon, enemies e notes](https://keyrota.app/documentation/img/it/editor-json.png)

| Controllo | Cosa fa |
|---|---|
| **Testo KRC / JSON** | Cambia la visualizzazione. |
| **Copia** | Copia tutto il testo o tutto il JSON. |
| **Incolla** | Sostituisce la rotazione con il contenuto degli appunti: testo KRC, JSON di una rotazione o un profilo di KeyRota. |
| **Apri…** | Carica una rotazione da un file `.txt` o `.json`. |
| **Salva…** | Salva la visualizzazione corrente in un file: il testo come `.txt`, il JSON come `.json`. |

Una modifica nella casella si applica subito se non contiene errori; un errore viene mostrato sotto la casella e le altre pagine mantengono l'ultima versione valida.

**Cosa conserva il testo e cosa solo il JSON.** Il testo KRC non contiene gli ID degli incantesimi, i flag degli slot, Con bersaglio / In combattimento, la specializzazione, Ignora l'icona principale né le impostazioni del contatore dei nemici. Quando modifichi il testo, questi dati restano associati agli slot e alle aure con lo stesso numero. Il JSON conserva tutto. Quando incolli o apri una nuova versione della rotazione, gli slot e le aure con lo stesso numero mantengono ID, visibilità e flag se la nuova versione non li specifica.

### Salvare e chiudere

- Salva (su Windows anche Ctrl+S) scrive la rotazione nel profilo; il pulsante mostra per un attimo Salvato. Una nuova rotazione diventa un profilo e viene selezionata nell'elenco.
- Se chiudi con modifiche non salvate, compare la domanda «Salvare le modifiche?»: Salva, Non salvare o Annulla. Lo stesso avviene quando chiudi KeyRota.
- Esporta, nella finestra principale, salva il profilo con la sua rotazione come JSON; Importa accetta sia un profilo di KeyRota sia il solo JSON di una rotazione.

### Esempio: una rotazione da zero

Creiamo una piccola rotazione di Assassinio: due DoT (Garrota e Perforazione), un generatore (Mutilazione), un consumo (Affondo Venefico), una difesa (Fiala Cremisi con la salute al 40% o meno) e un tempo di recupero sul pulsante Burst (Stigma Letale).

**1. Nuovo profilo.** Rotazione — Nuovo — Nell'editor….

**2. Generale.** Nome del profilo: «Assassinio: esempio». Specializzazione: Assassinio (le risorse diventano `PlayerHP`, `TargetHP`, `Energy`, `Combo_Points`). Nome della rotazione: «Assassinio: esempio v1». Ignora l'icona principale: attivo.

**3. Slot.** Per ogni riga della tabella: seleziona il posto a sinistra, fai clic su «Aggiungi slot», compila Nome, ID incantesimo e Nome nel testo; per Fiala Cremisi scegli In combattimento. Non servono flag.

| Slot | Nome | ID | Nome nel testo | Visibile in Better Assistant |
|---|---|---|---|---|
| 1 | Garrota | 703 | `Garrote` | Con bersaglio |
| 2 | Perforazione | 1943 | `Rupture` | Con bersaglio |
| 3 | Affondo Venefico | 32645 | `Envenom` | Con bersaglio |
| 4 | Mutilazione | 1329 | `Mutilate` | Con bersaglio |
| 5 | Stigma Letale | 360194 | `Deathmark` | Con bersaglio |
| 6 | Fiala Cremisi | 185311 | `Crimson_Vial` | In combattimento |

**4. Aure.** Lo stesso nella pagina Aure:

| Aura | Nome | ID | Nome nel testo |
|---|---|---|---|
| 1 | Garrota sul bersaglio [703] | 703 | `Garrote_DoT` |
| 2 | Perforazione sul bersaglio [1943] | 1943 | `Rupture_DoT` |
| 3 | Affondo Venefico [32645] | 32645 | `Envenom_Buff` |
| 4 | Stigma Letale sul bersaglio [360194] | 360194 | `Deathmark_DoT` |

**5. Regole.** Nella pagina Regole fai clic su «+», scegli lo slot in Premere e scrivi il Nome. «+ Gruppo (O)» aggiunge un gruppo con una condizione predefinita: cambia cosa controllare, la proprietà, il confronto e il numero. «+ Condizione» aggiunge la condizione successiva allo stesso gruppo. Le regole, in quest'ordine:

| # | Premere | Gruppi (O), condizioni di un gruppo (E) |
|---|---|---|
| 1 | Fiala Cremisi | Cure / difesa attivo, Salute del giocatore ≤ 40 |
| 2 | Stigma Letale | Burst attivo, Garrota sul bersaglio presente, Perforazione sul bersaglio presente, Affondo Venefico presente |
| 3 | Garrota | (1) Garrota sul bersaglio assente; (2) Garrota sul bersaglio presente, rimanente ≤ 30% |
| 4 | Perforazione | (1) Punti combo ≥ 70, Perforazione sul bersaglio assente; (2) Punti combo ≥ 70, Perforazione sul bersaglio presente, rimanente ≤ 30% |
| 5 | Affondo Venefico | (1) Punti combo ≥ 70, Affondo Venefico assente; (2) Punti combo ≥ 70, Affondo Venefico presente, rimanente ≤ 20%; (3) Punti combo ≥ 70, Energia ≥ 70; (4) Punti combo ≥ 70, Stigma Letale sul bersaglio presente |
| 6 | Mutilazione | Punti combo < 70 |

Perché:
- **Prima la difesa**: con poca salute Fiala Cremisi conta più del danno. Scatta solo quando Cure / difesa è attivo nel pannello delle impostazioni rapide.
- **Stigma Letale su Burst**: `cd == 1` è il pulsante Burst (F3 su Windows, ⌃⇧B su macOS), non il tempo di recupero dell'incantesimo. Se disattivi Burst, Stigma Letale resta in attesa.
- **DoT con la finestra di pandemia**: un'aura assente ha 0 rimanente, quindi per il rinnovo servono due gruppi: «nessun DoT» e «DoT presente con il 30% o meno rimanente».
- **5 punti combo = 70**: su 7 punti combo, 5 corrispondono al 71%; la soglia `70` funziona con qualsiasi arrotondamento. La tabella è in [Risorse](https://keyrota.app/documentation/it/conditions#resources).
- **Mutilazione per ultima** e solo sotto i 5 punti combo, così non si spreca energia mentre Affondo Venefico attende le sue condizioni.

**6. Verifica.** La barra di stato dovrebbe riportare «Rotazione valida: 6 regole, 6 slot, 4 aure». Apri Testo e JSON per vedere lo stesso contenuto riportato qui sotto.

**7. Il profilo di Better Assistant.** Generale — «Crea da slot e aure» — «Copia»; nel gioco `/ba` — Profile — incolla — Apply.

**8. Tasti.** Metti i sei incantesimi sulle barre delle azioni e assegna loro dei tasti.

**9. Avvio.** Salva, chiudi la finestra, scegli il profilo «Assassinio: esempio» e avvia la rotazione (F1 su Windows, ⌃⇧Space su macOS). Nel pannello delle impostazioni rapide attiva Cure / difesa se vuoi Fiala Cremisi; il pulsante Burst attiva e disattiva Stigma Letale.

*Testo KRC:*

```text
rotation "Assassinio: esempio v1"

# Esempio dalla documentazione di KeyRota: due sanguinamenti, un generatore, un consumo con accumulo di energia,
# una difesa con poca salute e Stigma Letale sul tasto Burst.
# Punti combo in percentuale di 7: 5 punti = 71%, soglia 70 = 5+.

buff1	Garrote_DoT = "Garrota sul bersaglio [703]"
buff2	Rupture_DoT = "Perforazione sul bersaglio [1943]"
buff3	Envenom_Buff = "Affondo Venefico [32645]"
buff4	Deathmark_DoT = "Stigma Letale sul bersaglio [360194]"
slot1	Garrote = "Garrota"
slot2	Rupture = "Perforazione"
slot3	Envenom = "Affondo Venefico"
slot4	Mutilate = "Mutilazione"
slot5	Deathmark = "Stigma Letale"
slot6	Crimson_Vial = "Fiala Cremisi"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

# --- Difesa: solo con «Cure / difesa» attivo ---
use Crimson_Vial when  # Fiala Cremisi
	defensives == 1 and PlayerHP <= 40  # salute al 40% o meno

# --- Tempo di recupero: solo con Burst attivo ---
use Deathmark when  # Stigma Letale
	cd == 1 and Garrote_DoT.up and Rupture_DoT.up and Envenom_Buff.up  # Burst attivo, sanguinamenti e Affondo Venefico attivi

# --- Sanguinamenti ---
use Garrote when  # Garrota
	Garrote_DoT.down  # nessun sanguinamento
	or
	Garrote_DoT.up and Garrote_DoT.duration <= 30  # finestra di pandemia: resta il 30% o meno

use Rupture when  # Perforazione
	Combo_Points >= 70 and Rupture_DoT.down  # 5+ punti combo, nessun sanguinamento
	or
	Combo_Points >= 70 and Rupture_DoT.up and Rupture_DoT.duration <= 30  # 5+ punti combo, finestra di pandemia

# --- Consumo: 5+ punti combo, accumulando energia ---
use Envenom when  # Affondo Venefico
	Combo_Points >= 70 and Envenom_Buff.down  # nessun beneficio
	or
	Combo_Points >= 70 and Envenom_Buff.up and Envenom_Buff.duration <= 20  # il beneficio sta finendo
	or
	Combo_Points >= 70 and Energy >= 70  # non sprecare energia al massimo
	or
	Combo_Points >= 70 and Deathmark_DoT.up  # Stigma Letale sul bersaglio

# --- Generatore: meno di 5 punti combo ---
use Mutilate when  # Mutilazione
	Combo_Points < 70  # meno di 5 punti combo
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "Assassinio: esempio v1",
  "specID": 259,
  "ignoreMainIcon": true,
  "enemies": {"range": 8, "combatOnly": true},
  "notes": [
    "Esempio dalla documentazione di KeyRota: due sanguinamenti, un generatore, un consumo con accumulo di energia,",
    "una difesa con poca salute e Stigma Letale sul tasto Burst.",
    "Punti combo in percentuale di 7: 5 punti = 71%, soglia 70 = 5+."
  ],
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "auras": [
    {"n": 1, "alias": "Garrote_DoT", "label": "Garrota sul bersaglio [703]", "spell": 703},
    {"n": 2, "alias": "Rupture_DoT", "label": "Perforazione sul bersaglio [1943]", "spell": 1943},
    {"n": 3, "alias": "Envenom_Buff", "label": "Affondo Venefico [32645]", "spell": 32645},
    {"n": 4, "alias": "Deathmark_DoT", "label": "Stigma Letale sul bersaglio [360194]", "spell": 360194}
  ],
  "slots": [
    {"n": 1, "alias": "Garrote", "label": "Garrota", "spell": 703, "show": "target"},
    {"n": 2, "alias": "Rupture", "label": "Perforazione", "spell": 1943, "show": "target"},
    {"n": 3, "alias": "Envenom", "label": "Affondo Venefico", "spell": 32645, "show": "target"},
    {"n": 4, "alias": "Mutilate", "label": "Mutilazione", "spell": 1329, "show": "target"},
    {"n": 5, "alias": "Deathmark", "label": "Stigma Letale", "spell": 360194, "show": "target"},
    {"n": 6, "alias": "Crimson_Vial", "label": "Fiala Cremisi", "spell": 185311, "show": "combat"}
  ],
  "rules": [
    {
      "use": "Crimson_Vial",
      "name": "Fiala Cremisi",
      "note": ["--- Difesa: solo con «Cure / difesa» attivo ---"],
      "when": [{"all": ["defensives == 1", "PlayerHP <= 40"], "comment": "salute al 40% o meno"}]
    },
    {
      "use": "Deathmark",
      "name": "Stigma Letale",
      "note": ["--- Tempo di recupero: solo con Burst attivo ---"],
      "when": [
        {
          "all": ["cd == 1", "Garrote_DoT.up", "Rupture_DoT.up", "Envenom_Buff.up"],
          "comment": "Burst attivo, sanguinamenti e Affondo Venefico attivi"
        }
      ]
    },
    {
      "use": "Garrote",
      "name": "Garrota",
      "note": ["--- Sanguinamenti ---"],
      "when": [
        {"all": ["Garrote_DoT.down"], "comment": "nessun sanguinamento"},
        {
          "all": ["Garrote_DoT.up", "Garrote_DoT.duration <= 30"],
          "comment": "finestra di pandemia: resta il 30% o meno"
        }
      ]
    },
    {
      "use": "Rupture",
      "name": "Perforazione",
      "when": [
        {"all": ["Combo_Points >= 70", "Rupture_DoT.down"], "comment": "5+ punti combo, nessun sanguinamento"},
        {
          "all": ["Combo_Points >= 70", "Rupture_DoT.up", "Rupture_DoT.duration <= 30"],
          "comment": "5+ punti combo, finestra di pandemia"
        }
      ]
    },
    {
      "use": "Envenom",
      "name": "Affondo Venefico",
      "note": ["--- Consumo: 5+ punti combo, accumulando energia ---"],
      "when": [
        {"all": ["Combo_Points >= 70", "Envenom_Buff.down"], "comment": "nessun beneficio"},
        {
          "all": ["Combo_Points >= 70", "Envenom_Buff.up", "Envenom_Buff.duration <= 20"],
          "comment": "il beneficio sta finendo"
        },
        {"all": ["Combo_Points >= 70", "Energy >= 70"], "comment": "non sprecare energia al massimo"},
        {"all": ["Combo_Points >= 70", "Deathmark_DoT.up"], "comment": "Stigma Letale sul bersaglio"}
      ]
    },
    {
      "use": "Mutilate",
      "name": "Mutilazione",
      "note": ["--- Generatore: meno di 5 punti combo ---"],
      "when": [{"all": ["Combo_Points < 70"], "comment": "meno di 5 punti combo"}]
    }
  ]
}
```


Scarica questo esempio: [JSON](https://keyrota.app/documentation/examples/starter-assassination.it.json), [testo KRC](https://keyrota.app/documentation/examples/starter-assassination.it.txt). Aprilo con Apri… nella pagina Testo e JSON oppure con Nuovo — Da file….

---

<!-- https://keyrota.app/documentation/it/rotation-json -->

## JSON della rotazione

Il JSON è la descrizione completa di una rotazione avanzata: tutto ciò che contiene il testo KRC, più gli ID degli incantesimi, i flag degli slot e le impostazioni del profilo. L'editor lo mostra nella pagina Testo e JSON e KeyRota lo accetta come file (Nuovo — Da file…, Importa). Il formato si chiama `keyrota-rotation`, versione 1. Per verificarlo c'è uno [schema JSON](#schema).

### File di esempio

La rotazione utile più breve: Perforazione con 5+ punti combo quando non è sul bersaglio, altrimenti Mutilazione.

*minimal.json:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "Assassinio: minimo",
  "specID": 259,
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "auras": [{"n": 1, "alias": "Rupture_DoT", "label": "Perforazione sul bersaglio [1943]", "spell": 1943}],
  "slots": [
    {"n": 2, "alias": "Rupture", "label": "Perforazione", "spell": 1943},
    {"n": 4, "alias": "Mutilate", "label": "Mutilazione", "spell": 1329}
  ],
  "rules": [
    {
      "use": "Rupture",
      "name": "Perforazione",
      "when": [{"all": ["Combo_Points >= 70", "Rupture_DoT.down"], "comment": "5+ punti combo, nessun sanguinamento"}]
    },
    {"use": "Mutilate", "name": "Mutilazione"}
  ]
}
```


Tutto ciò che il file omette assume il valore predefinito: gli slot vengono mostrati Con bersaglio e non hanno flag, il contatore dei nemici è di 8 metri e conta solo i nemici in combattimento. Una regola senza `when` è sempre soddisfatta.

### Campi di primo livello

| Campo | Tipo | Obbligatorio | Predefinito | Cos'è |
|---|---|---|---|---|
| `format` | stringa | sì | — | Sempre `"keyrota-rotation"`. |
| `version` | intero | sì | — | Sempre `1`. Una versione più recente viene rifiutata: «aggiornala». |
| `title` | stringa | no | `""` | Nome della rotazione: la prima riga del testo, il nome nel registro. Senza virgolette doppie. |
| `specID` | intero 0–100000 | no | `0` | Specializzazione di WoW, `0` = qualsiasi. Serve per il profilo di Better Assistant. |
| `ignoreMainIcon` | true / false | no | `true` | Attivo: preme solo secondo le regole. Disattivo: quando nessuna regola è soddisfatta, preme il suggerimento del gioco. |
| `enemies` | oggetto | no | `{"range": 8, "combatOnly": true}` | Il contatore dei nemici per la condizione `enemies`. |
| `notes` | stringa o elenco di stringhe | no | `[]` | Descrizione: le righe `#` all'inizio del testo. |
| `resources` | elenco di stringhe e `null` | no | `[]` | Nomi di `resource1…N`, in ordine. |
| `auras` | elenco | no | `[]` | Aure `buff1…12`. |
| `slots` | elenco | no | `[]` | Slot `slot1…12`. |
| `rules` | elenco | no | `[]` | Regole in ordine di priorità. |
| `footer` | stringa o elenco di stringhe | no | `[]` | Commenti dopo l'ultima regola. |

Qualsiasi altro campo è un errore, «campo superfluo»: gli errori di battitura non passano inosservati. Per questo non aggiungere `"$schema"` al file: collega lo schema nel tuo editor o validatore.

Quasi ovunque al posto di un valore puoi usare `null`, che equivale a omettere il campo.

### format e version

`"format": "keyrota-rotation"` e `"version": 1` sono obbligatori. Se `version` è maggiore di 1, KeyRota rifiuta il file: «la versione 2 è più recente di quanto supporti questa KeyRota: aggiornala». Senza `version`: «serve la versione 1».

### title

Una stringa senza virgolette doppie `"`. Gli a capo diventano spazi. Nel testo KRC è `rotation "…"`. È un buon posto per la versione: `"Assassinio v1.3"`.

### specID

L'ID della specializzazione nel gioco. Determina le risorse della rotazione (quando viene creata nell'editor) e la classe e la specializzazione nel profilo di Better Assistant. `0` significa qualsiasi specializzazione: la rotazione funziona, ma il profilo di Better Assistant non viene creato («Scegli una specializzazione: serve al profilo di Better Assistant»).

| Classe | Specializzazione | specID | Risorse della specializzazione (`resource3`…) |
|---|---|---|---|
| Guerriero | Armi | 71 | `Rage` |
| Guerriero | Furia | 72 | `Rage` |
| Guerriero | Protezione | 73 | `Rage` |
| Paladino | Sacro | 65 | `Mana`, `Holy_Power` |
| Paladino | Protezione | 66 | `Mana`, `Holy_Power` |
| Paladino | Castigo | 70 | `Mana`, `Holy_Power` |
| Cacciatore | Affinità Animale | 253 | `Focus` |
| Cacciatore | Precisione di Tiro | 254 | `Focus` |
| Cacciatore | Sopravvivenza | 255 | `Focus` |
| Ladro | Assassinio | 259 | `Energy`, `Combo_Points` |
| Ladro | Fuorilegge | 260 | `Energy`, `Combo_Points` |
| Ladro | Scaltrezza | 261 | `Energy`, `Combo_Points` |
| Sacerdote | Disciplina | 256 | `Mana`, `Insanity` |
| Sacerdote | Sacro | 257 | `Mana`, `Insanity` |
| Sacerdote | Ombra | 258 | `Mana`, `Insanity` |
| Cavaliere della Morte | Sangue | 250 | `Runes`, `Runic_Power` |
| Cavaliere della Morte | Gelo | 251 | `Runes`, `Runic_Power` |
| Cavaliere della Morte | Empietà | 252 | `Runes`, `Runic_Power` |
| Sciamano | Elementale | 262 | `Mana`, `Maelstrom` |
| Sciamano | Potenziamento | 263 | `Mana`, `Maelstrom` |
| Sciamano | Rigenerazione | 264 | `Mana`, `Maelstrom` |
| Mago | Arcano | 62 | `Mana`, `Arcane_Charges` |
| Mago | Fuoco | 63 | `Mana`, `Arcane_Charges` |
| Mago | Gelo | 64 | `Mana`, `Arcane_Charges` |
| Stregone | Afflizione | 265 | `Mana`, `Soul_Shards` |
| Stregone | Demonologia | 266 | `Mana`, `Soul_Shards` |
| Stregone | Distruzione | 267 | `Mana`, `Soul_Shards` |
| Monaco | Mastro Birraio | 268 | `Energy`, `Stagger` |
| Monaco | Misticismo | 270 | `Mana` |
| Monaco | Impeto | 269 | `Energy`, `Chi` |
| Druido | Equilibrio | 102 | `Mana`, `Astral_Power` |
| Druido | Aggressore Ferino | 103 | `Energy`, `Combo_Points` |
| Druido | Guardiano Ferino | 104 | `Rage` |
| Druido | Rigenerazione | 105 | `Mana`, `Astral_Power` |
| Cacciatore di Demoni | Rovina | 577 | `Fury` |
| Cacciatore di Demoni | Vendetta | 581 | `Fury` |
| Cacciatore di Demoni | Divoratore | 1480 | `Fury` |
| Evocatore | Devastazione | 1467 | `Mana`, `Essence` |
| Evocatore | Conservazione | 1468 | `Mana`, `Essence` |
| Evocatore | Fortificazione | 1473 | `Mana`, `Essence` |

### ignoreMainIcon

`true` (predefinito): KeyRota preme solo secondo le regole; quando nessuna è soddisfatta, attende. `false`: in quel caso preme il suggerimento del gioco, come il profilo Blizzard. Il suggerimento è l'ultima risorsa dopo tutte le regole: non scavalca mai una regola.

### enemies

```json
"enemies": {"range": 8, "combatOnly": true}
```


| Campo | Tipo | Predefinito | Cos'è |
|---|---|---|---|
| `range` | intero 1–100 | `8` | Il raggio del contatore dei nemici, in metri. |
| `combatOnly` | true / false | `true` | Conta solo i nemici già in combattimento. |

La condizione `enemies` legge questo contatore (vedi [Nemici vicini](https://keyrota.app/documentation/it/conditions#enemies)). Nell'editor corrispondono a «Raggio del contatore dei nemici, metri» e «Solo nemici in combattimento» nella pagina Generale. I valori finiscono anche nel profilo di Better Assistant.

### notes e footer

La descrizione della rotazione (`notes`) e i commenti dopo l'ultima regola (`footer`). Un elenco di stringhe oppure una sola stringa con `\n`. Una stringa vuota `""` è una riga vuota nel testo. Le righe vuote all'inizio e alla fine vengono eliminate.

```json
"notes": ["Basata su una guida e sui migliori log, patch 12.1", "", "v1.1: Affondo Venefico prima con 4+ bersagli"]
```


Nel testo KRC sono le righe `# …` prima delle dichiarazioni. Non influiscono sul funzionamento della rotazione.

### resources

I nomi delle risorse in ordine: il primo elemento è `resource1`, il secondo `resource2` e così via. **È il numero a determinare la risorsa**; il nome è solo il modo in cui la scrivi nelle condizioni:

- `resource1` è la salute del giocatore, `resource2` la salute del bersaglio;
- da `resource3` in poi ci sono le risorse della specializzazione, nell'ordine della [tabella degli specID](#spec-id): per un ladro `resource3` è l'energia, `resource4` i punti combo.

```json
"resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"]
```


Usa i nomi standard della tabella: l'editor li mostra a parole («Salute del giocatore», «Energia») e altre persone e agenti IA capiscono subito le condizioni. `null` salta un numero: `["PlayerHP", null, "Energy"]` dichiara solo `resource1` e `resource3`. Una risorsa non dichiarata non si può leggere: «resource2 non dichiarato».

Tutte le risorse sono **percentuali** del massimo, da 0 a 100. Come convertire in percentuale punti combo, energia e rune: [Risorse](https://keyrota.app/documentation/it/conditions#resources) nella pagina Condizioni.

### auras

Le aure sono i tuoi benefici e le tue penalità sul bersaglio. L'aura `n` della rotazione è l'aura `n` dell'elenco di Better Assistant.

| Campo | Tipo | Obbligatorio | Predefinito | Cos'è |
|---|---|---|---|---|
| `n` | intero 1–12 | sì | — | Numero dell'aura (`buffN`). Ogni numero una sola volta. |
| `alias` | stringa | no | da `label` | Il nome nelle condizioni. Vedi [Nomi](#aliases). |
| `label` | stringa | no | `""` | Nome visualizzato. Senza virgolette doppie `"`. Comodo con l'ID tra parentesi: `"Garrota sul bersaglio [703]"`. |
| `spell` | intero 0–100000000 | no | `0` | L'ID dell'aura su Wowhead. `0` = non impostato: l'aura non sarà nel profilo di Better Assistant e sarà sconosciuta. |
| `note` | stringa | no | `""` | Un commento alla fine della riga di dichiarazione. |

```json
"auras": [
  {"n": 1, "alias": "Garrote_DoT", "label": "Garrota sul bersaglio [703]", "spell": 703},
  {"n": 2, "alias": "Rupture_DoT", "label": "Perforazione sul bersaglio [1943]", "spell": 1943}
]
```


Conta `n`, non l'ordine nell'elenco. I numeri possono avere dei buchi, ma per il profilo di Better Assistant le aure con ID devono andare in fila a partire dalla prima.

### slots

Gli slot sono i pulsanti della rotazione. Lo slot `n` della rotazione è lo slot `n` di Better Assistant.

| Campo | Tipo | Obbligatorio | Predefinito | Cos'è |
|---|---|---|---|---|
| `n` | intero 1–12 | sì | — | Numero dello slot (`slotN`). |
| `alias` | stringa | no | da `label` | Il nome nelle regole e nelle condizioni. |
| `label` | stringa | no | `""` | Il nome dell'incantesimo. Senza virgolette doppie `"`. |
| `spell` | intero 0–100000000 | no | `0` | L'ID dell'incantesimo su Wowhead. Better Assistant lo usa per mettere l'incantesimo nello slot. |
| `note` | stringa | no | `""` | Un commento alla fine della riga di dichiarazione. |
| `show` | `"target"` / `"combat"` | no | `"target"` | Quando Better Assistant mostra lo slot. |
| `manual` | true / false | no | `false` | Flag **M**. |
| `channel` | true / false | no | `false` | Flag **C**. |
| `offGcd` | true / false | no | `false` | Flag **O**. |
| `queue` | true / false | no | `false` | Flag **Q**, solo con `offGcd`. |

#### show

- `"target"`: lo slot viene mostrato quando hai un bersaglio. Vale per quasi tutti gli attacchi.
- `"combat"`: lo slot viene mostrato in combattimento anche senza bersaglio. Per cure e difese: Fiala Cremisi deve funzionare anche quando non c'è un bersaglio.

Uno slot è pronto solo quando Better Assistant lo mostra. Uno slot `"target"` senza bersaglio non è pronto e le sue regole vengono saltate.

### Flag degli slot

I flag indicano **come** premere uno slot una volta scelta la sua regola. Nell'editor corrispondono agli interruttori Come premere.

| Flag | Nel JSON | Come viene premuto | Esempio |
|---|---|---|---|
| nessuno | tutti `false` | Nella finestra di coda alla fine del GCD: l'incantesimo parte non appena il GCD termina. | Mutilazione, Affondo Venefico |
| **M** | `"manual": true` | Mai. Le regole dello slot vengono saltate. Se premi tu il suo tasto, la rotazione va in pausa. | Un'abilità che premi tu |
| **C** | `"channel": true` | Come un incantesimo normale; mentre la canalizzazione è in corso, non viene premuto nulla. Dopo la pressione lo slot non viene premuto di nuovo finché la canalizzazione non inizia. | Furia Omicida (51690) |
| **O** | `"offGcd": true` | Subito, anche a metà del GCD. | Roulette Eterna (381989) |
| **O + Q** | `"offGcd": true, "queue": true` | Fuori GCD, ma solo nella finestra di coda alla fine del GCD. | La macro Scarica d'Adrenalina + Furia Omicida (13750); Sparizione (1856) dopo Rovina dei Re |
| **C + O** | `"channel": true, "offGcd": true` | Una canalizzazione che parte fuori GCD: subito, poi nulla finché la canalizzazione non termina. | Raro |
| **C + O + Q** | tutti e tre | Come sopra, nella finestra di coda. | Raro |
| **Q** senza O | `"queue": true` | Errore: «queue va solo insieme a offGcd». | — |
| **M** + altri | `"manual": true, …` | Prevale M: lo slot non viene premuto, gli altri flag non contano. | — |

Perché **O + Q** e non solo **O**: un pulsante con il solo flag O viene premuto subito, a metà del GCD, prima che il colpo precedente sia andato a segno. Con il solo flag O, Sparizione dopo Rovina dei Re verrebbe premuta prima che arrivino i punti combo di Rovina dei Re, e la regola di Sparizione (`Combo_Points < 65`) controllerebbe il valore vecchio. Con Q il pulsante attende la fine del GCD.

Priorità rigorosa: una regola fuori GCD più in basso nell'elenco **non scavalca** una regola più in alto che attende il GCD.

```json
"slots": [
  {"n": 1, "alias": "Adrenaline_Rush", "label": "Scarica d'Adrenalina (macro con Furia Omicida)", "spell": 13750, "offGcd": true, "queue": true},
  {"n": 4, "alias": "Keep_It_Rolling", "label": "Roulette Eterna", "spell": 381989, "offGcd": true},
  {"n": 8, "alias": "Killing_Spree", "label": "Furia Omicida", "spell": 51690, "channel": true},
  {"n": 11, "alias": "Crimson_Vial", "label": "Fiala Cremisi", "spell": 185311, "show": "combat"}
]
```


### rules

Le regole in ordine di priorità: la prima dell'elenco viene controllata per prima.

| Campo | Tipo | Obbligatorio | Predefinito | Cos'è |
|---|---|---|---|---|
| `use` | stringa | sì | — | Lo slot da premere: il suo `alias` o `slotN`. |
| `name` | stringa | no | `""` | Il nome dell'azione, mostrato nel registro. Nel testo è il commento sulla riga `use`. |
| `note` | stringa o elenco di stringhe | no | `[]` | Note sopra la regola (righe `#` prima di `use`). |
| `when` | elenco di gruppi | no | `[]` | Gruppi OR. Vuoto o assente: una regola senza condizioni, premuta ogni volta che l'incantesimo si può usare. |

#### when: gruppi e condizioni

| Campo | Tipo | Obbligatorio | Cos'è |
|---|---|---|---|
| `all` | elenco non vuoto di stringhe | sì | Le condizioni del gruppo: devono essere tutte vere (AND). |
| `comment` | stringa | no | Il commento del gruppo (nel testo, alla fine della sua riga). |

```json
{
  "use": "Garrote",
  "name": "Garrota",
  "note": ["Rinnovo nella finestra di pandemia"],
  "when": [
    {"all": ["Garrote_DoT.down"], "comment": "nessun DoT"},
    {"all": ["Garrote_DoT.up", "Garrote_DoT.duration <= 30"], "comment": "resta il 30% o meno"}
  ]
}
```


Uno slot può comparire in più regole: per esempio Garrota dalla furtività in alto nell'elenco e il normale mantenimento di Garrota più in basso.

#### Condizioni nel JSON

Ogni condizione è una stringa con la sintassi KRC: `Garrote_DoT.down`, `Rupture_DoT.duration <= 25`, `Kingsbane.cd <= 3`, `Combo_Points >= 70`, `enemies >= 2`, `target.distance <= 8`, `cd == 1`. L'elenco completo è in [Condizioni](https://keyrota.app/documentation/it/conditions).

- Fai riferimento per nome (`Garrote_DoT`) o per numero: `buff1`, `slot3`, `resource4`.
- ` and ` all'interno di una stringa la divide in due condizioni: `"Combo_Points >= 70 and Energy >= 70"` sono due condizioni, ed entrambe contano per il limite di 16.
- Niente `#` né a capo in una stringa.
- Le condizioni vengono lette dal motore di KeyRota stesso, quindi il JSON e il testo hanno sempre lo stesso significato.

### Nomi

Un nome (`alias`) è il modo in cui aure, slot e risorse vengono chiamati nelle condizioni e in `use`.

- Il primo carattere è una lettera (di qualsiasi alfabeto) o `_`; poi lettere, cifre `0–9` e `_`. Le lettere accentate e di altri alfabeti vanno bene; spazi, trattini e punti no: `Fan_of_Knives`, non `Fan-of-Knives`.
- Un nome è unico tra tutte le aure, gli slot e le risorse.
- Riservati: `use`, `when`, `and`, `or`, `rotation`, `gcd`, `enemies`, `target`, `aoe`, `st`, `cd`, `defensives`, `ground_spells`, `movement` e i nomi come `buffN`, `slotN`, `resourceN`.
- Le parole chiave vanno solo in minuscolo: `use`, `or`, `.up`. `Use`, `OR` e `.UP` sono errori.

**Un nome dall'etichetta.** Senza `alias`, KeyRota ne crea uno da `label`: le parentesi quadre e il loro contenuto vengono eliminati, lettere e cifre restano, tutto il resto diventa `_`. Per esempio, `"Garrota sul bersaglio [703]"` diventa `Garrota_sul_bersaglio`. Un nome vuoto o inutilizzabile diventa `Aura_N` o `Slot_N`; un nome già usato riceve `_2`, `_3`. Se una regola fa riferimento a `buffN` o `slotN` assenti dagli elenchi, vengono dichiarati automaticamente come `Aura_N` e `Slot_N`.

### Campi obbligatori e valori predefiniti

| Dove | Obbligatori | Valori predefiniti |
|---|---|---|
| File | `format`, `version` | `title` `""`, `specID` `0`, `ignoreMainIcon` `true`, `enemies` `{"range": 8, "combatOnly": true}`, elenchi vuoti |
| Aura | `n` | `alias` da `label`, `label` `""`, `spell` `0` |
| Slot | `n` | `show` `"target"`, tutti i flag `false`, `spell` `0` |
| Regola | `use` | `name` `""`, `note` `[]`, `when` `[]` (nessuna condizione) |
| Gruppo | `all` (non vuoto) | `comment` `""` |

### Limiti

| Cosa | Limite |
|---|---|
| Aure | 12 (`n` 1–12) |
| Slot | 12 (`n` 1–12) |
| Gruppi OR in una regola | 16 |
| Condizioni AND in un gruppo | 16 |
| Regole | illimitate |
| Numero in una condizione | intero 0–100 |
| `enemies.range` | 1–100 |
| `spell` | 0–100000000 |
| `specID` | 0–100000 |
| Risorse | fino a 99 |

Esattamente 16 gruppi da 16 condizioni va bene; 17 è un errore.

### Errori

Una rotazione con un errore non viene caricata affatto: non esiste un'esecuzione parziale. Un errore indica sempre il punto. Nel JSON è un percorso: `rules[3].when[1]: nome sconosciuto Foo` (numerazione da zero). Nell'editor: «Regola 4, gruppo 2: nome sconosciuto Foo» (numerazione da uno). Nel testo KRC, un numero di riga.

**Struttura del JSON:**

| Messaggio | Causa |
|---|---|
| `campo superfluo «offgcd»` | Un campo scritto male o sconosciuto (le maiuscole contano: `offGcd`). |
| `manca il campo «format»` | Manca un campo obbligatorio. |
| `format: atteso «keyrota-rotation»` | Un altro valore di `format`. |
| `version: serve la versione 1` | Manca `version` oppure è minore di 1. |
| `slots[0]: manca il numero n (1–12)` | Uno slot o un'aura senza `n`. |
| `slots[2].n: numero fuori da 1..12` | `n` fuori intervallo. |
| `slots[3]: il numero 4 è già occupato` | Due slot (o due aure) con lo stesso `n`. |
| `slots[1].show: atteso «target» o «combat»` | Un altro valore di `show`. |
| `slots[0]: queue va solo insieme a offGcd` | `queue: true` senza `offGcd: true`. |
| `rules[2].use: non esiste lo slot «Garotte»` | `use` fa riferimento a uno slot che non esiste. |
| `rules[0].when[1].all: serve un elenco di condizioni non vuoto` | Un gruppo vuoto o senza `all`. |
| `rules[0].when[0].all[2]: condizione vuota o con # o a capo` | Una stringa di condizione vuota, o con `#`. |
| `….spell: atteso un numero intero` | Tipo sbagliato: una stringa invece di un numero, `true` invece di un numero e così via. |

**Condizioni e dichiarazioni** (come nel testo KRC):

| Codice | Esempio di messaggio | Causa |
|---|---|---|
| `unknown_ref` | `nome sconosciuto Foo` | Nessuna aura, slot o risorsa con quel nome. |
| `unknown_ref` | `resource5 non dichiarato` | La risorsa non è dichiarata in `resources`. |
| `wrong_kind` | `Garrote è di tipo slot, ma serve buff` | Una proprietà da aura su uno slot (`Garrote.up`) o viceversa. |
| `bad_condition` | `condizione non interpretabile "Energy => 50"` | Un errore di battitura nella condizione o nell'operatore. |
| `bad_condition` | `"Garrote.distance <= 8": distance esiste solo per target` | Solo il bersaglio ha una distanza. |
| `value_range` | `il valore 120 è fuori da 0..100` | Un numero maggiore di 100. Non esistono numeri negativi o decimali. |
| `toggle_value` | `"cd >= 1": un interruttore accetta solo == 0 o == 1` | Un interruttore si confronta solo con `==` e 0 o 1. |
| `bad_alias` | `nome non consentito Fan-of-Knives` | Caratteri non validi in un nome. |
| `reserved_alias` | `il nome cd è riservato` | Un nome riservato. |
| `duplicate_alias` | `il nome Garrote è già dichiarato` | Due aure, slot o risorse con lo stesso nome. |
| `index_range` | `buff13: numero fuori da 1..12` | Un riferimento a un numero maggiore di 12. |
| `too_many_groups` | `più di 16 gruppi OR` | Più di 16 gruppi in una regola. |
| `too_many_conditions` | `17 condizioni nel gruppo (massimo 16)` | Più di 16 condizioni in un gruppo. |

L'editor segnala anche «il gruppo non ha condizioni» (un gruppo vuoto), «nessuno slot selezionato» e «il nome non può contenere virgolette».

### Testo KRC

Il testo KRC è la stessa rotazione scritta in righe. La pagina Testo e JSON lo mostra e puoi conservarlo in un file `.txt`. Testo e JSON si convertono l'uno nell'altro senza perdere significato.

*Testo KRC:*

```text
rotation "Assassinio: minimo"

buff1	Rupture_DoT = "Perforazione sul bersaglio [1943]"
slot2	Rupture = "Perforazione"
slot4	Mutilate = "Mutilazione"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Rupture when  # Perforazione
	Combo_Points >= 70 and Rupture_DoT.down  # 5+ punti combo, nessun sanguinamento

use Mutilate when  # Mutilazione
```


#### Righe

- `#` fuori dalle virgolette doppie inizia un commento che arriva fino alla fine della riga. All'interno di un `"label"`, `#` è un carattere normale.
- Le righe vuote e quelle con solo un commento vengono saltate: è così che si scrivono descrizioni e separatori.
- Ogni altra riga è una dichiarazione, `use`, `or` o una riga di condizioni. Altrimenti è un errore `stray_line`: «riga fuori da una regola: "…" (il testo libero deve iniziare con #)».
- Tra le parti puoi mettere spazi e tabulazioni a piacere. La forma canonica usa una tabulazione dopo `buffN`/`slotN` e all'inizio delle righe di condizioni.

#### Dichiarazioni

Solo prima del primo `use`:

```text
rotation "Nome"                    # facoltativo, al massimo una volta
buff1	Garrote_DoT = "Garrota sul bersaglio [703]"   # aura 1
slot1	Garrote = "Garrota"                         # slot 1
resource1	PlayerHP                               # risorsa 1
```


`buffN` e `slotN` vanno da 1 a 12, `resourceN` da 1 a 99. L'etichetta tra virgolette può essere vuota: `slot5	Filler = ""`. Una dichiarazione dopo il primo `use` è un errore `late_declaration`.

#### Regole

```text
use Rupture when  # Perforazione
	Combo_Points >= 70 and Rupture_DoT.down  # nessun DoT
	or
	Combo_Points >= 70 and Rupture_DoT.up and Rupture_DoT.duration <= 30  # pandemia
```


- `use Slot when` apre una regola; un commento su questa riga è il nome dell'azione.
- Ogni riga di condizioni è un gruppo (condizioni unite con `and`). I gruppi sono separati da una riga con la sola parola `or`.
- Una regola senza righe di condizioni non ha condizioni.
- Due righe di condizioni di fila senza `or` sono un errore `split_group`; `or` all'inizio, alla fine o due volte di fila è `empty_group`.

#### Testo e JSON: le corrispondenze

| Nel testo | Nel JSON |
|---|---|
| `rotation "…"` | `title` |
| Righe `# …` prima del primo `use` | `notes` |
| Un commento alla fine di una riga `buffN` / `slotN` | Il `note` dell'aura / dello slot |
| Righe `# …` subito prima di `use` (e tra i gruppi della regola) | Il `note` della regola |
| Un commento sulla riga `use` | Il `name` della regola |
| Un commento alla fine di una riga di condizioni | Il `comment` del gruppo |
| Righe `# …` dopo l'ultima regola | `footer` |
| — (non presente nel testo) | `specID`, `ignoreMainIcon`, `enemies`, `spell`, `show`, flag |

Le righe vuote all'inizio e alla fine dei blocchi di commento vengono eliminate; quelle interne restano come `""`.

### Importazione e archiviazione

- KeyRota conserva la rotazione all'interno del profilo. Esporta, nella finestra principale, salva il profilo di KeyRota (JSON) con la sua rotazione; Importa accetta un profilo di KeyRota e il solo JSON di una rotazione.
- Nuovo — Da file… accetta un `.txt` con testo KRC, il JSON di una rotazione e un profilo di KeyRota; Nuovo — Dagli appunti, gli stessi contenuti dagli appunti.
- Nell'editor: Testo e JSON — Incolla o Apri… sostituiscono la rotazione; gli slot e le aure con lo stesso numero mantengono ID, Con bersaglio / In combattimento e flag se la nuova versione non li specifica.
- Una rotazione in formato testo (senza JSON) prende gli ID e la visibilità degli slot dal profilo di Better Assistant già salvato nel profilo di KeyRota, e gli ID delle aure anche dai contrassegni come `[703]` nelle loro etichette.

### Il profilo di Better Assistant dal JSON

«Crea da slot e aure» nell'editor genera la stringa del profilo di Better Assistant dal JSON della rotazione:

- **12 slot**: lo slot N è `slots[n = N].spell`, mostrato secondo `show`. Uno slot senza ID resta vuoto.
- **Aure** in ordine a partire dalla prima: `auras[n = 1].spell`, `auras[n = 2].spell`… Un'aura senza ID nel mezzo è un errore.
- **Classe e specializzazione** da `specID`.
- **Contatore dei nemici** da `enemies.range` e `enemies.combatOnly`.
- Se il profilo di KeyRota contiene già un profilo di Better Assistant della stessa specializzazione, le sue altre impostazioni e gli slot e le aure corrispondenti vengono mantenuti.

Nel gioco: `/ba` — Profile — incolla — Apply.

### Schema JSON

Lo schema del formato: [keyrota-rotation.schema.json](https://keyrota.app/documentation/keyrota-rotation.schema.json) (draft 2020-12). Verifica campi, tipi, intervalli, `queue` senza `offGcd` e la forma delle stringhe di condizione. Non verifica che `n` e i nomi siano unici, che i nomi usati nelle condizioni esistano, né il limite di 16 dopo la divisione delle stringhe in corrispondenza di ` and `: lo fa KeyRota al caricamento.

Per verificare un file:

```text
npx ajv-cli validate --spec=draft2020 -s keyrota-rotation.schema.json -d my-rotation.json
```


Non inserire un campo `"$schema"` in un file di rotazione: KeyRota lo considera un campo superfluo.

---

<!-- https://keyrota.app/documentation/it/conditions -->

## Condizioni

Una condizione è un singolo controllo: «Garrota è sul bersaglio», «l'energia è almeno al 70%», «Burst è attivo». Le condizioni formano i gruppi (AND), i gruppi formano una regola (OR). Nell'editor scegli una condizione da elenchi; nel testo KRC e nel JSON si scrive come stringa, ed è questa la forma usata negli esempi.

### Sintassi

| Tipo | Forma | Esempio |
|---|---|---|
| Aura: presente / assente | `Aura.up`, `Aura.down` | `Garrote_DoT.down` |
| Aura: durata rimanente, cumuli | `Aura.duration op N`, `Aura.stacks op N` | `Rupture_DoT.duration <= 30` |
| Slot: pronto / non pronto | `Slot.ready`, `Slot.oncd` | `Kingsbane.ready` |
| Slot: tempo di recupero, cariche | `Slot.cd op N`, `Slot.charges op N` | `Deathmark.cd <= 3` |
| Slot: illuminazione | `Slot.glow`, `Slot.noglow` | `Ambush.glow` |
| Risorsa | `Risorsa op N` | `Combo_Points >= 70` |
| Nemici vicini | `enemies op N` | `enemies >= 3` |
| Distanza dal bersaglio | `target.distance op N` | `target.distance <= 8` |
| Interruttore | `aoe`, `st`, `cd`, `defensives`, `ground_spells`, `movement` `== 0` o `== 1` | `cd == 1` |

**Operatori:** `<`, `<=`, `==`, `=` (uguale a `==`), `>=`, `>`. Non esiste «diverso da».

**Il numero** `N` è un intero da 0 a 100. Niente numeri negativi o decimali e niente oltre 100: `il valore 120 è fuori da 0..100`.

**Gli spazi** intorno all'operatore sono facoltativi: `Energy>=70` ed `Energy >= 70` sono la stessa cosa. Niente spazi all'interno di un nome o tra un nome e la sua proprietà: `Garrote_DoT.up`, non `Garrote_DoT .up`.

**I riferimenti** si fanno per nome (`Garrote_DoT`) o per numero: `buff1`, `slot3`, `resource4`. Le parole chiave sono in minuscolo.

### Aure

Un'aura è un tuo beneficio o una tua penalità sul bersaglio, dichiarata nell'elenco delle aure con il suo ID. I benefici e le penalità di altri giocatori non sono visibili.

#### .up e .down

`Envenom_Buff.up`: l'aura è presente. `Envenom_Buff.down`: è assente. Se l'aura è sconosciuta (non letta), sono false entrambe.

```text
use Garrote when  # Garrota: applicala quando manca
	Garrote_DoT.down
```


#### .duration: durata rimanente in percentuale

`Rupture_DoT.duration <= 30`: rimane al massimo il 30% della durata **totale** dell'aura. La durata totale è quella dell'applicazione in corso: Perforazione con 5 punti combo dura 24 s, con 7 dura 32 s, quindi il 30% corrisponde a 7,2 s e a 9,6 s.

> [!IMPORTANT]
> Un'aura assente ha **0** rimanente. Quindi `Rupture_DoT.duration <= 30` è vera anche quando Perforazione non c'è affatto. Per rinnovare solo un'aura presente, scrivi `Rupture_DoT.up and Rupture_DoT.duration <= 30` e gestisci il caso «l'aura manca» con un gruppo separato con `Rupture_DoT.down`.

In WoW la finestra di pandemia è il 30% della durata: rinnovare un effetto al suo interno non fa perdere nulla. Da qui la soglia abituale `<= 30`.

*Testo KRC:*

```text
use Rupture when  # Perforazione
	Combo_Points >= 70 and Rupture_DoT.down  # nessun DoT
	or
	Combo_Points >= 70 and Rupture_DoT.up and Rupture_DoT.duration <= 30  # pandemia
```

*JSON:*

```json
{
  "use": "Rupture",
  "name": "Perforazione",
  "when": [
    {"all": ["Combo_Points >= 70", "Rupture_DoT.down"], "comment": "nessun DoT"},
    {"all": ["Combo_Points >= 70", "Rupture_DoT.up", "Rupture_DoT.duration <= 30"], "comment": "pandemia"}
  ]
}
```


Da secondi a percentuale: `percentuale = secondi / durata totale × 100`. Garrota dura 18 s: «restano 14 s» è `<= 78`, «restano 5,4 s» è `<= 30`.

**Un'aura senza durata** (Furtività e simili) risulta sempre con **1** rimanente. Per queste aure usa solo `.up` e `.down`.

#### .stacks: numero di cumuli

`Opportunity.stacks >= 6`: l'aura ha 6 cumuli o più. Un'aura assente ha 0 cumuli.

> [!NOTE]
> Il conteggio dei cumuli parte da due: un'aura con un solo cumulo risulta **0**, come un'aura senza contatore. Per verificare che un'aura sia presente usa `.up`; usa `.stacks` per soglie da 2 in su.

```text
use Pistol_Shot when  # Colpo di Pistola con 6 cumuli di Opportunità
	Opportunity.stacks >= 6 and Combo_Points < 80
```


### Slot

Le condizioni sugli slot leggono lo stato di **un altro** pulsante: «premi Affondo Venefico solo finché Stigma Letale non è ancora pronto» e simili. Lo slot della regola stessa viene controllato automaticamente: se il suo incantesimo non si può usare, KeyRota passa semplicemente alla regola successiva.

#### .ready e .oncd

`Kingsbane.ready`: l'incantesimo dello slot si può usare, senza contare il tempo di recupero globale. Devono valere tutte queste condizioni:

- l'incantesimo è appreso (il talento è preso);
- la risorsa è sufficiente;
- il bersaglio è a portata, se serve;
- il tempo di recupero è inferiore a 0,2 s oppure è disponibile una carica;
- Better Assistant mostra lo slot (Con bersaglio: hai un bersaglio; In combattimento: sei in combattimento).

`Kingsbane.oncd`: lo slot **non è pronto** per uno qualsiasi di questi motivi, non solo per il tempo di recupero. Se lo stato è sconosciuto, sono false entrambe.

```text
use Preparation when  # Preparazione quando Scarica d'Adrenalina, In Mezzo agli Occhi e Furia Omicida sono in recupero
	Adrenaline_Rush.oncd and Between_the_Eyes.oncd and Killing_Spree.oncd
```


#### .cd: tempo di recupero rimanente in percentuale

`Deathmark.cd <= 3`: rimane al massimo il 3% del tempo di recupero totale. `0` significa pronto, `100` appena usato. Il tempo di recupero globale non è incluso. Per un incantesimo con cariche `.cd` è la ricarica della carica **successiva**, quindi l'incantesimo può essere pronto con `cd > 0`.

| Tempo di recupero | 1% = | Esempio |
|---|---|---|
| 30 s | 0,3 s | `X.cd <= 10`: restano ≤ 3 s |
| 1 min | 0,6 s | `Kingsbane.cd <= 3`: restano ≤ 1,8 s |
| 2 min | 1,2 s | `Deathmark.cd <= 3`: restano ≤ 3,6 s; `Deathmark.cd >= 44`: mancano ancora ≥ 52 s |
| 3 min | 1,8 s | `X.cd >= 50`: mancano ancora ≥ 90 s |

Un uso tipico è «tenerlo per un grande tempo di recupero»: non spendere Rovina dei Re se Stigma Letale sta per tornare disponibile, spenderla se Stigma Letale è ancora lontano.

```text
use Kingsbane when  # Rovina dei Re
	cd == 1 and Deathmark_DoT.up  # sotto Stigma Letale
	or
	cd == 1 and Deathmark.cd >= 44  # Stigma Letale a più di 52 s
```


#### .charges

`Barbed_Shot.charges >= 2`: l'incantesimo ha 2 cariche o più. Gli incantesimi senza cariche ne hanno 0. Uno schema tipico evita che le cariche arrivino al massimo:

```text
use Barbed_Shot when  # Tiro Lacerante
	Barbed_Shot.charges >= 2  # entrambe le cariche: non sprecare la ricarica
	or
	Barbed_Shot.charges == 1 and Barbed_Shot.cd <= 20  # la seconda è quasi pronta
```


#### .glow e .noglow: il pulsante è illuminato

`Ambush.glow`: il gioco evidenzia il pulsante di questo incantesimo (la stessa illuminazione che vedi sulla barra delle azioni quando si attiva un proc). `Ambush.noglow`: non lo evidenzia. Usa `.glow` solo se il pulsante di questo incantesimo si illumina davvero nel gioco; se non sei sicuro, controlla invece il beneficio del proc: `Blindside.up`.

### Risorse

`Energy >= 70`: almeno il 70% dell'energia massima. **Tutte le risorse sono in percentuale**, da 0 a 100: salute, energia, mana, rabbia, rune, punti combo.

| Risorsa | Numero | Esempio |
|---|---|---|
| Salute del giocatore | `resource1` (`PlayerHP`) | `PlayerHP <= 40`: salute al 40% o meno |
| Salute del bersaglio | `resource2` (`TargetHP`) | `TargetHP >= 50`: il bersaglio non è ancora a metà. Sconosciuta senza bersaglio |
| Risorse della specializzazione | da `resource3` in poi | `Energy >= 70`, `Combo_Points >= 70`, `Rage >= 40` |

**In percentuale:** `percentuale = valore / massimo × 100`. Con 250 di energia massima, 175 di energia sono il 70%. L'energia massima e le altre risorse cambiano con i talenti, quindi le soglie in percentuale si trasferiscono tra personaggi meglio dei valori assoluti.

**Punti combo.** Con un massimo di 7 punti combo, un punto vale circa il 14,3%. Il valore viene arrotondato a un numero intero e, a seconda dell'arrotondamento, 2 punti risultano 28 o 29, 3 risultano 42 o 43, 6 risultano 85 o 86. Per questo metti la soglia **a metà tra un gradino e l'altro**: così è corretta con qualsiasi arrotondamento.

| Punti combo | % | «almeno N» | «al massimo N» |
|---|---|---|---|
| 0 | 0 | — | `< 7` |
| 1 | 14 | `>= 7` | `< 20` |
| 2 | 28–29 | `>= 20` | `< 35` |
| 3 | 42–43 | `>= 35` | `< 50` |
| 4 | 57 | `>= 50` | `< 65` |
| 5 | 71 | `>= 65` (`>= 70`) | `< 80` |
| 6 | 85–86 | `>= 80` | `< 95` |
| 7 | 100 | `>= 95` | — |

Con un altro massimo, «almeno N» è `(N − 0,5) / massimo × 100`. Con 5 punti combo, «almeno 4» è `>= 70` e «almeno 5» è `>= 90`.

### Nemici vicini

`enemies >= 3`: 3 o più nemici entro il raggio del contatore. Il raggio e «Solo nemici in combattimento» si impostano nella pagina Generale (`enemies.range` ed `enemies.combatOnly` nel JSON). Se il numero è sconosciuto, la condizione è falsa.

- Perché i nemici vengano contati, nel gioco devono essere attive le barre delle unità nemiche (tasto V per impostazione predefinita), senza nascondere le unità minori.
- Scegli il raggio in base alle tue abilità: Ventaglio di Lame colpisce entro 8 metri, quindi 8 è il raggio corretto per «Ventaglio di Lame o Mutilazione».
- Per un singolo bersaglio `enemies <= 1` è più sicuro di `enemies == 1`: la regola continua a funzionare anche se il nemico non viene contato.

### Distanza dal bersaglio

`target.distance <= 8`: il bersaglio si trova a 8 metri o meno. Senza bersaglio la distanza è sconosciuta e la condizione è falsa. La distanza è approssimativa: la condizione è vera solo quando la distanza rispetta sicuramente la soglia; nei casi limite è falsa.

```text
use Pistol_Shot when  # il bersaglio è fuori dalla mischia ma entro 20 metri
	target.distance >= 10 and target.distance <= 20
```


### Interruttori del pannello

Gli interruttori sono i pulsanti del pannello delle impostazioni rapide sopra il gioco, più i tasti rapidi. Il loro significato lo decide la rotazione.

| Condizione | Pulsante del pannello | Tasto: Windows, macOS | Significato abituale |
|---|---|---|---|
| `aoe == 1` | Bersagli: Molti | F2, ⌃⇧T, a rotazione | Forzare la modalità a più bersagli |
| `st == 1` | Bersagli: Uno | F2, ⌃⇧T, a rotazione | Forzare un bersaglio singolo |
| `aoe == 0 and st == 0` | Bersagli: Auto | F2, ⌃⇧T, a rotazione | Decidono le regole, di solito in base a `enemies` |
| `cd == 1` | Burst | F3, ⌃⇧B | Grandi tempi di recupero: usarli ora o tenerli |
| `defensives == 1` | Cure / difesa | — | Cure e abilità difensive |
| `ground_spells == 1` | A terra | — | Incantesimi con bersaglio a terra |
| `movement == 1` | Movimento | — | Azioni in movimento |

- Confronta solo con `== 0` o `== 1`.
- **`cd == 1` è il pulsante Burst, non il tempo di recupero di un incantesimo.** Il tempo di recupero di uno slot è `Slot.cd`.
- `aoe` e `st` non valgono mai 1 contemporaneamente. Il tasto della modalità bersagli passa a rotazione tra Auto, Uno e Molti.
- Per impostazione predefinita Burst è attivo, la modalità bersagli è Auto e gli altri pulsanti sono disattivi. KeyRota ne ricorda lo stato.
- Un pulsante del pannello è attivo solo se la rotazione legge quell'interruttore; con il profilo Blizzard sono tutti attenuati.
- Gli interruttori non sono mai sconosciuti.

### Come vengono valutate le condizioni

| Condizione | Valore presente | Aura assente | Sconosciuto |
|---|---|---|---|
| `X.up` | vera | falsa | **falsa** |
| `X.down` | falsa | vera | **falsa** |
| `X.duration op N`, `X.stacks op N` | confronto | confronto con **0** | **falsa** |
| `X.ready` / `X.oncd` | in base alla disponibilità | — | **falsa** (entrambe) |
| `X.glow` / `X.noglow` | in base all'illuminazione | — | **falsa** (entrambe) |
| `X.cd`, `X.charges`, una risorsa, `enemies`, `target.distance` | confronto | — | **falsa** |
| un interruttore | confronto | — | mai |

Un gruppo è vero quando tutte le sue condizioni sono vere. Una regola è soddisfatta quando almeno un gruppo è vero, oppure quando non ha alcun gruppo.

### «Non», parentesi e OR all'interno di un gruppo

KRC non ha `not`, `!=` né parentesi. Tutto si esprime con i gruppi:

- **«Non»** è la condizione opposta: il contrario di `.up` è `.down`, di `.ready` è `.oncd`, di `.glow` è `.noglow`; per i numeri si usa l'operatore inverso: il contrario di `>= 70` è `< 70`.
- **(A o B) e C** sono due gruppi: `A and C`, `B and C`.
- **A e non (B e C)** sono due gruppi: `A and non-B`, `A and non-C`.
- **La stessa condizione in ogni gruppo** (come la protezione della canalizzazione) va ripetuta in ciascun gruppo.

```text
use Fan_of_Knives when  # Ventaglio di Lame: (modalità Molti OPPURE Auto e 2+ nemici) E meno di 5 punti combo
	aoe == 1 and Combo_Points < 70
	or
	st == 0 and enemies >= 2 and Combo_Points < 70
```


### Riepilogo

| Condizione | Significato |
|---|---|
| `X.up` / `X.down` | aura presente / assente |
| `X.duration <= 30` | rimane ≤ 30% (un'aura assente ha 0) |
| `X.up and X.duration <= 30` | presente e da rinnovare |
| `X.stacks >= 2` | 2 cumuli o più (1 cumulo risulta 0) |
| `X.ready` / `X.oncd` | slot pronto / non pronto per un motivo qualsiasi |
| `X.cd <= 3` | rimane ≤ 3% del tempo di recupero |
| `X.charges >= 2` | 2 cariche o più |
| `X.glow` / `X.noglow` | pulsante illuminato / non illuminato |
| `PlayerHP <= 40` | la tua salute ≤ 40% |
| `TargetHP >= 50` | il bersaglio ≥ 50% (falsa senza bersaglio) |
| `Combo_Points >= 70` | 5+ punti combo su 7 |
| `Energy >= 70` | energia ≥ 70% |
| `enemies >= 3` | 3+ nemici nel raggio |
| `target.distance <= 8` | il bersaglio entro 8 metri (falsa senza bersaglio) |
| `aoe == 1` / `st == 1` | modalità Molti / Uno |
| `aoe == 0 and st == 0` | modalità Auto |
| `cd == 1` | Burst attivo |
| `defensives == 1` | Cure / difesa attivo |
| `ground_spells == 1` | A terra attivo |
| `movement == 1` | Movimento attivo |

---

<!-- https://keyrota.app/documentation/it/patterns -->

## Schemi di esempio

Ogni schema è una rotazione piccola ma completa: a sinistra il testo KRC, a destra lo stesso JSON. Incollalo nell'editor (Testo e JSON — Incolla) per vedere come appare nelle pagine Slot e Regole. Gli ID degli incantesimi sono reali, presi da Wowhead. Alla fine trovi le [rotazioni complete](#example-files).

### Un DoT rinnovato nella finestra di pandemia

Applica un DoT quando manca e rinnovalo quando ne rimane il 30% o meno: rinnovarlo in questa finestra non fa perdere nulla. Un'aura assente ha 0 rimanente, quindi il rinnovo è un gruppo separato con `.up`.

*Testo KRC:*

```text
rotation "Schema: DoT con la finestra di pandemia"

buff1	Garrote_DoT = "Garrota sul bersaglio [703]"
slot1	Garrote = "Garrota"
slot4	Mutilate = "Mutilazione"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Garrote when  # Garrota
	Garrote_DoT.down  # nessun DoT
	or
	Garrote_DoT.up and Garrote_DoT.duration <= 30  # pandemia

use Mutilate when  # Mutilazione
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "Schema: DoT con la finestra di pandemia",
  "specID": 259,
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "auras": [
    {"n": 1, "alias": "Garrote_DoT", "label": "Garrota sul bersaglio [703]", "spell": 703}
  ],
  "slots": [
    {"n": 1, "alias": "Garrote", "label": "Garrota", "spell": 703},
    {"n": 4, "alias": "Mutilate", "label": "Mutilazione", "spell": 1329}
  ],
  "rules": [
    {"use": "Garrote", "name": "Garrota", "when": [
      {"all": ["Garrote_DoT.down"], "comment": "nessun DoT"},
      {"all": ["Garrote_DoT.up", "Garrote_DoT.duration <= 30"], "comment": "pandemia"}
    ]},
    {"use": "Mutilate", "name": "Mutilazione"}
  ]
}
```


- Per non applicare un nuovo DoT a un bersaglio che sta per morire quando ci sono 3+ bersagli, aggiungi `TargetHP >= 50` al gruppo «nessun DoT» e un gruppo separato `Garrote_DoT.down and enemies <= 2` per uno o due bersagli.
- Un DoT lungo con durata variabile (Perforazione: 4 s + 4 s per punto combo) funziona allo stesso modo: le percentuali si riferiscono alla durata di quella specifica applicazione.

### Generatore e consumo in base ai punti combo

Spendi con 5+ punti combo su 7, genera al di sotto. Le soglie stanno a metà tra un gradino e l'altro: vedi la [tabella dei punti combo](https://keyrota.app/documentation/it/conditions#resources).

*Testo KRC:*

```text
rotation "Schema: generatore e consumo"

slot3	Envenom = "Affondo Venefico"
slot4	Mutilate = "Mutilazione"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Envenom when  # Affondo Venefico
	Combo_Points >= 70  # 5+ punti combo

use Mutilate when  # Mutilazione
	Combo_Points < 70  # meno di 5 punti combo
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "Schema: generatore e consumo",
  "specID": 259,
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "slots": [
    {"n": 3, "alias": "Envenom", "label": "Affondo Venefico", "spell": 32645},
    {"n": 4, "alias": "Mutilate", "label": "Mutilazione", "spell": 1329}
  ],
  "rules": [
    {"use": "Envenom", "name": "Affondo Venefico", "when": [
      {"all": ["Combo_Points >= 70"], "comment": "5+ punti combo"}
    ]},
    {"use": "Mutilate", "name": "Mutilazione", "when": [
      {"all": ["Combo_Points < 70"], "comment": "meno di 5 punti combo"}
    ]}
  ]
}
```


Un generatore con `Combo_Points < 70` non fa traboccare i punti combo: con 5+ punti resta in silenzio anche se il consumo non è ancora pronto (energia insufficiente), e KeyRota attende.

### Accumulo di risorse

Non spendere subito: mantieni attivo il beneficio e accumula energia. Affondo Venefico quando il suo beneficio sta per finire, sotto Stigma Letale o quando l'energia è alta. Per il resto del tempo, con 5+ punti combo nessuna regola è adatta e KeyRota attende di avere più energia: questo è l'accumulo.

*Testo KRC:*

```text
rotation "Schema: accumulo di energia"

buff3	Envenom_Buff = "Affondo Venefico [32645]"
buff4	Deathmark_DoT = "Stigma Letale sul bersaglio [360194]"
slot3	Envenom = "Affondo Venefico"
slot4	Mutilate = "Mutilazione"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Envenom when  # Affondo Venefico
	Combo_Points >= 70 and Envenom_Buff.down  # nessun beneficio
	or
	Combo_Points >= 70 and Envenom_Buff.duration <= 20  # il beneficio sta finendo
	or
	Combo_Points >= 70 and Deathmark_DoT.up  # sotto Stigma Letale
	or
	Combo_Points >= 70 and Energy >= 70  # non arrivare al massimo di energia

use Mutilate when  # Mutilazione
	Combo_Points < 70
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "Schema: accumulo di energia",
  "specID": 259,
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "auras": [
    {"n": 3, "alias": "Envenom_Buff", "label": "Affondo Venefico [32645]", "spell": 32645},
    {"n": 4, "alias": "Deathmark_DoT", "label": "Stigma Letale sul bersaglio [360194]", "spell": 360194}
  ],
  "slots": [
    {"n": 3, "alias": "Envenom", "label": "Affondo Venefico", "spell": 32645},
    {"n": 4, "alias": "Mutilate", "label": "Mutilazione", "spell": 1329}
  ],
  "rules": [
    {"use": "Envenom", "name": "Affondo Venefico", "when": [
      {"all": ["Combo_Points >= 70", "Envenom_Buff.down"], "comment": "nessun beneficio"},
      {"all": ["Combo_Points >= 70", "Envenom_Buff.duration <= 20"], "comment": "il beneficio sta finendo"},
      {"all": ["Combo_Points >= 70", "Deathmark_DoT.up"], "comment": "sotto Stigma Letale"},
      {"all": ["Combo_Points >= 70", "Energy >= 70"], "comment": "non arrivare al massimo di energia"}
    ]},
    {"use": "Mutilate", "name": "Mutilazione", "when": [
      {"all": ["Combo_Points < 70"]}
    ]}
  ]
}
```


- La soglia `Energy >= 70` evita che l'energia arrivi al massimo.
- Il gruppo `Envenom_Buff.duration <= 20` scatta anche senza il beneficio (0 rimanente); il gruppo `.down` c'è per chiarezza.
- Per regolare l'accumulo cambia solo la soglia di energia: più bassa spende prima, più alta accumula più a lungo.

### Bersaglio singolo e più bersagli

Il giocatore imposta la modalità bersagli con il relativo tasto (passa a rotazione tra Auto, Uno e Molti); in Auto decidono le regole in base al numero di nemici. Ogni regola AoE ha due gruppi, «modalità Molti» e «Auto con 2+ nemici»; la regola per il bersaglio singolo ha «modalità Uno» e «Auto con al massimo un nemico».

*Testo KRC:*

```text
rotation "Schema: bersaglio singolo e più bersagli"

slot3	Envenom = "Affondo Venefico"
slot4	Mutilate = "Mutilazione"
slot6	Fan_of_Knives = "Ventaglio di Lame"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Envenom when  # Affondo Venefico
	Combo_Points >= 70

use Fan_of_Knives when  # Ventaglio di Lame: 2+ bersagli
	aoe == 1 and Combo_Points < 70  # modalità Molti
	or
	st == 0 and enemies >= 2 and Combo_Points < 70  # modalità Auto, 2+ nemici

use Mutilate when  # Mutilazione: bersaglio singolo
	st == 1 and Combo_Points < 70  # modalità Uno
	or
	aoe == 0 and enemies <= 1 and Combo_Points < 70  # modalità Auto, un nemico
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "Schema: bersaglio singolo e più bersagli",
  "specID": 259,
  "enemies": {"range": 8, "combatOnly": true},
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "slots": [
    {"n": 3, "alias": "Envenom", "label": "Affondo Venefico", "spell": 32645},
    {"n": 4, "alias": "Mutilate", "label": "Mutilazione", "spell": 1329},
    {"n": 6, "alias": "Fan_of_Knives", "label": "Ventaglio di Lame", "spell": 51723}
  ],
  "rules": [
    {"use": "Envenom", "name": "Affondo Venefico", "when": [
      {"all": ["Combo_Points >= 70"]}
    ]},
    {"use": "Fan_of_Knives", "name": "Ventaglio di Lame: 2+ bersagli", "when": [
      {"all": ["aoe == 1", "Combo_Points < 70"], "comment": "modalità Molti"},
      {"all": ["st == 0", "enemies >= 2", "Combo_Points < 70"], "comment": "modalità Auto, 2+ nemici"}
    ]},
    {"use": "Mutilate", "name": "Mutilazione: bersaglio singolo", "when": [
      {"all": ["st == 1", "Combo_Points < 70"], "comment": "modalità Uno"},
      {"all": ["aoe == 0", "enemies <= 1", "Combo_Points < 70"], "comment": "modalità Auto, un nemico"}
    ]}
  ]
}
```


- `st == 0 and enemies >= 2` significa «non in modalità Uno»: in modalità Molti la regola scatta comunque tramite il primo gruppo.
- `enemies <= 1` è più sicuro di `enemies == 1`: con un singolo bersaglio il nemico potrebbe non essere contato.
- Prendi il raggio del contatore (`enemies.range`) dalla tua abilità AoE: Ventaglio di Lame colpisce entro 8 metri.

### Tempi di recupero su Burst e «solo sotto il tempo di recupero»

`cd == 1` è il pulsante Burst. Un grande tempo di recupero viene premuto solo mentre Burst è attivo, e puoi tenerlo da parte disattivando Burst, per esempio prima di una fase in cui il boss è immune. Ciò che potenzia la finestra del tempo di recupero viene premuto solo al suo interno: qui Sparizione solo mentre Stigma Letale è sul bersaglio, e Rovina dei Re sotto Stigma Letale oppure quando Stigma Letale è ancora lontano.

*Testo KRC:*

```text
rotation "Schema: Burst"

buff1	Garrote_DoT = "Garrota sul bersaglio [703]"
buff2	Rupture_DoT = "Perforazione sul bersaglio [1943]"
buff4	Deathmark_DoT = "Stigma Letale sul bersaglio [360194]"
buff10	Vanish_Buff = "Sparizione [11327]"
slot1	Garrote = "Garrota"
slot4	Mutilate = "Mutilazione"
slot8	Deathmark = "Stigma Letale"
slot9	Kingsbane = "Rovina dei Re"
slot10	Vanish = "Sparizione"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Garrote when  # Garrota dalla furtività
	Vanish_Buff.up

use Deathmark when  # Stigma Letale
	cd == 1 and Garrote_DoT.up and Rupture_DoT.up  # Burst attivo, DoT presenti

use Kingsbane when  # Rovina dei Re
	cd == 1 and Deathmark_DoT.up and Combo_Points < 50  # sotto Stigma Letale, 0-3 punti combo
	or
	cd == 1 and Deathmark.cd >= 44 and Combo_Points < 50  # Stigma Letale a più di 52 s

use Vanish when  # Sparizione
	Deathmark_DoT.up and Combo_Points < 65  # sotto Stigma Letale, 0-4 punti combo

use Mutilate when  # Mutilazione
	Combo_Points < 70
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "Schema: Burst",
  "specID": 259,
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "auras": [
    {"n": 1, "alias": "Garrote_DoT", "label": "Garrota sul bersaglio [703]", "spell": 703},
    {"n": 2, "alias": "Rupture_DoT", "label": "Perforazione sul bersaglio [1943]", "spell": 1943},
    {"n": 4, "alias": "Deathmark_DoT", "label": "Stigma Letale sul bersaglio [360194]", "spell": 360194},
    {"n": 10, "alias": "Vanish_Buff", "label": "Sparizione [11327]", "spell": 11327}
  ],
  "slots": [
    {"n": 1, "alias": "Garrote", "label": "Garrota", "spell": 703},
    {"n": 4, "alias": "Mutilate", "label": "Mutilazione", "spell": 1329},
    {"n": 8, "alias": "Deathmark", "label": "Stigma Letale", "spell": 360194},
    {"n": 9, "alias": "Kingsbane", "label": "Rovina dei Re", "spell": 385627},
    {"n": 10, "alias": "Vanish", "label": "Sparizione", "spell": 1856, "offGcd": true, "queue": true}
  ],
  "rules": [
    {"use": "Garrote", "name": "Garrota dalla furtività", "when": [
      {"all": ["Vanish_Buff.up"]}
    ]},
    {"use": "Deathmark", "name": "Stigma Letale", "when": [
      {"all": ["cd == 1", "Garrote_DoT.up", "Rupture_DoT.up"], "comment": "Burst attivo, DoT presenti"}
    ]},
    {"use": "Kingsbane", "name": "Rovina dei Re", "when": [
      {"all": ["cd == 1", "Deathmark_DoT.up", "Combo_Points < 50"], "comment": "sotto Stigma Letale, 0-3 punti combo"},
      {"all": ["cd == 1", "Deathmark.cd >= 44", "Combo_Points < 50"], "comment": "Stigma Letale a più di 52 s"}
    ]},
    {"use": "Vanish", "name": "Sparizione", "when": [
      {"all": ["Deathmark_DoT.up", "Combo_Points < 65"], "comment": "sotto Stigma Letale, 0-4 punti combo"}
    ]},
    {"use": "Mutilate", "name": "Mutilazione", "when": [
      {"all": ["Combo_Points < 70"]}
    ]}
  ]
}
```


- Sparizione è fuori GCD, ma ha anche Nella finestra di coda (**O + Q**): altrimenti verrebbe premuta a metà del GCD subito dopo Rovina dei Re, prima che arrivino i punti combo di Rovina dei Re, e controllerebbe il valore vecchio.
- Se disattivi Burst, Stigma Letale e Rovina dei Re restano in attesa; Sparizione attende Stigma Letale.
- Rovina dei Re con 0–3 punti combo: dopo di essa ne arrivano altri 5 e nessuno va sprecato.

### Protezione della canalizzazione

Il gioco termina alcune canalizzazioni poco prima dell'ultimo colpo, e la pressione successiva le interrompe. La protezione è l'aura della canalizzazione stessa: finché ne rimane più dell'8%, nessuna regola è soddisfatta. La condizione va in **ogni** gruppo di ogni regola. Il flag **C** sullo slot della canalizzazione evita che venga premuto due volte all'inizio.

*Testo KRC:*

```text
rotation "Schema: protezione della canalizzazione"

buff10	Killing_Spree_Buff = "Furia Omicida, canalizzazione [51690]"
slot8	Killing_Spree = "Furia Omicida"
slot9	Dispatch = "Eliminazione"
slot11	Sinister_Strike = "Assalto Funesto"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Killing_Spree when  # Furia Omicida
	Combo_Points >= 80 and Killing_Spree_Buff.duration <= 8

use Dispatch when  # Eliminazione
	Combo_Points >= 80 and Killing_Spree_Buff.duration <= 8

use Sinister_Strike when  # Assalto Funesto
	Combo_Points < 80 and Killing_Spree_Buff.duration <= 8
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "Schema: protezione della canalizzazione",
  "specID": 260,
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "auras": [
    {"n": 10, "alias": "Killing_Spree_Buff", "label": "Furia Omicida, canalizzazione [51690]", "spell": 51690}
  ],
  "slots": [
    {"n": 8, "alias": "Killing_Spree", "label": "Furia Omicida", "spell": 51690, "channel": true},
    {"n": 9, "alias": "Dispatch", "label": "Eliminazione", "spell": 2098},
    {"n": 11, "alias": "Sinister_Strike", "label": "Assalto Funesto", "spell": 193315}
  ],
  "rules": [
    {"use": "Killing_Spree", "name": "Furia Omicida", "when": [
      {"all": ["Combo_Points >= 80", "Killing_Spree_Buff.duration <= 8"]}
    ]},
    {"use": "Dispatch", "name": "Eliminazione", "when": [
      {"all": ["Combo_Points >= 80", "Killing_Spree_Buff.duration <= 8"]}
    ]},
    {"use": "Sinister_Strike", "name": "Assalto Funesto", "when": [
      {"all": ["Combo_Points < 80", "Killing_Spree_Buff.duration <= 8"]}
    ]}
  ]
}
```


- Perché `<= 8` e non `.down`: senza canalizzazione l'aura ha 0 rimanente e la condizione è vera; durante la canalizzazione attende solo l'ultimo 8%, senza frazioni di secondo in più dopo la fine.
- Se l'aura non viene letta, la condizione è falsa in tutte le regole e KeyRota non preme nulla: meglio saltare una pressione che interrompere la canalizzazione. Per questo l'aura della canalizzazione deve essere nel profilo di Better Assistant.

### Una macro fuori GCD nella finestra di coda

Ci sono due tipi di «fuori GCD»:
- **O**: il pulsante viene premuto subito, anche a metà del GCD. È così che Roulette Eterna (che prolunga Roulette Assassina) non fa perdere tempo.
- **O + Q**: il pulsante è fuori GCD, ma la sua macro o il suo risultato dipendono dal GCD. La macro di Scarica d'Adrenalina con Furia Omicida nella seconda riga (Furia Omicida è sul GCD) viene premuta nella finestra di coda alla fine del GCD, e Furia Omicida parte subito dopo Scarica d'Adrenalina.

*La macro nel gioco (slot 1):*

```text
#showtooltip Scarica d'Adrenalina
/cast Scarica d'Adrenalina
/cast Furia Omicida
```


*Testo KRC:*

```text
rotation "Schema: fuori GCD"

buff2	Triple_Threat = "Roulette Assassina, livello 3 [1214935]"
buff3	Jackpot = "Roulette Assassina, livello 4 [1214937]"
buff6	Adrenaline_Rush_Buff = "Scarica d'Adrenalina [13750]"
slot1	Adrenaline_Rush = "Scarica d'Adrenalina + Furia Omicida (macro)"
slot4	Keep_It_Rolling = "Roulette Eterna"
slot11	Sinister_Strike = "Assalto Funesto"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Adrenaline_Rush when  # Scarica d'Adrenalina (+ Furia Omicida con la macro)
	Adrenaline_Rush_Buff.down and Combo_Points >= 7 and Combo_Points < 80  # 1-5 punti combo: a 0 la Furia Omicida della macro non parte

use Keep_It_Rolling when  # Roulette Eterna
	Triple_Threat.up
	or
	Jackpot.up

use Sinister_Strike when  # Assalto Funesto
	Combo_Points < 80
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "Schema: fuori GCD",
  "specID": 260,
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "auras": [
    {"n": 2, "alias": "Triple_Threat", "label": "Roulette Assassina, livello 3 [1214935]", "spell": 1214935},
    {"n": 3, "alias": "Jackpot", "label": "Roulette Assassina, livello 4 [1214937]", "spell": 1214937},
    {"n": 6, "alias": "Adrenaline_Rush_Buff", "label": "Scarica d'Adrenalina [13750]", "spell": 13750}
  ],
  "slots": [
    {"n": 1, "alias": "Adrenaline_Rush", "label": "Scarica d'Adrenalina + Furia Omicida (macro)", "spell": 13750, "offGcd": true, "queue": true},
    {"n": 4, "alias": "Keep_It_Rolling", "label": "Roulette Eterna", "spell": 381989, "offGcd": true},
    {"n": 11, "alias": "Sinister_Strike", "label": "Assalto Funesto", "spell": 193315}
  ],
  "rules": [
    {"use": "Adrenaline_Rush", "name": "Scarica d'Adrenalina (+ Furia Omicida con la macro)", "when": [
      {"all": ["Adrenaline_Rush_Buff.down", "Combo_Points >= 7", "Combo_Points < 80"], "comment": "1-5 punti combo: a 0 la Furia Omicida della macro non parte"}
    ]},
    {"use": "Keep_It_Rolling", "name": "Roulette Eterna", "when": [
      {"all": ["Triple_Threat.up"]},
      {"all": ["Jackpot.up"]}
    ]},
    {"use": "Sinister_Strike", "name": "Assalto Funesto", "when": [
      {"all": ["Combo_Points < 80"]}
    ]}
  ]
}
```


L'ID di uno slot con una macro è l'ID dell'incantesimo principale della macro (Scarica d'Adrenalina, 13750): Better Assistant lo usa per mettere l'incantesimo della macro nello slot, e KeyRota prende il tasto dal pulsante della macro sulla tua barra.

### Una difesa in base alla salute

Una cura o una difesa sotto una soglia di salute, solo quando Cure / difesa è attivo nel pannello. Lo slot viene mostrato **in combattimento** (In combattimento, `"show": "combat"`), così funziona anche senza bersaglio. La regola va per prima: con poca salute conta più del danno.

*Testo KRC:*

```text
rotation "Schema: una difesa in base alla salute"

slot4	Mutilate = "Mutilazione"
slot11	Crimson_Vial = "Fiala Cremisi"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Crimson_Vial when  # Fiala Cremisi
	defensives == 1 and PlayerHP <= 40  # salute al 40% o meno

use Mutilate when  # Mutilazione
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "Schema: una difesa in base alla salute",
  "specID": 259,
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "slots": [
    {"n": 4, "alias": "Mutilate", "label": "Mutilazione", "spell": 1329},
    {"n": 11, "alias": "Crimson_Vial", "label": "Fiala Cremisi", "spell": 185311, "show": "combat"}
  ],
  "rules": [
    {"use": "Crimson_Vial", "name": "Fiala Cremisi", "when": [
      {"all": ["defensives == 1", "PlayerHP <= 40"], "comment": "salute al 40% o meno"}
    ]},
    {"use": "Mutilate", "name": "Mutilazione"}
  ]
}
```


Cure / difesa è disattivo per impostazione predefinita: attivalo nel pannello delle impostazioni rapide quando vuoi le difese automatiche.

### Proc: tramite il beneficio o l'illuminazione

Controlla un proc tramite il suo beneficio: nella rotazione di Assassinio per le incursioni il beneficio di Lato Cieco (`Blindside.up`) abilita la regola di Imboscata. Se il gioco evidenzia il pulsante quando si attiva un proc, una regola può leggere l'illuminazione (`Ambush.glow`), ma solo se vedi davvero quell'illuminazione sulla tua barra.

*Testo KRC:*

```text
rotation "Schema: un proc"

buff7	Blindside = "Lato Cieco [121153]"
slot4	Mutilate = "Mutilazione"
slot5	Ambush = "Imboscata"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Ambush when  # Imboscata (Lato Cieco)
	Blindside.up and Combo_Points < 70

use Mutilate when  # Mutilazione
	Combo_Points < 70
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "Schema: un proc",
  "specID": 259,
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "auras": [
    {"n": 7, "alias": "Blindside", "label": "Lato Cieco [121153]", "spell": 121153}
  ],
  "slots": [
    {"n": 4, "alias": "Mutilate", "label": "Mutilazione", "spell": 1329},
    {"n": 5, "alias": "Ambush", "label": "Imboscata", "spell": 8676}
  ],
  "rules": [
    {"use": "Ambush", "name": "Imboscata (Lato Cieco)", "when": [
      {"all": ["Blindside.up", "Combo_Points < 70"]}
    ]},
    {"use": "Mutilate", "name": "Mutilazione", "when": [
      {"all": ["Combo_Points < 70"]}
    ]}
  ]
}
```


### Cariche

Un incantesimo con cariche viene premuto quando ha due cariche o quando la seconda è quasi pronta, così la ricarica non resta mai ferma. Esempio: Tiro Lacerante del cacciatore (2 cariche).

*Testo KRC:*

```text
rotation "Schema: cariche"

slot1	Barbed_Shot = "Tiro Lacerante"
slot2	Kill_Command = "Ordine di Morte"
resource1	PlayerHP
resource2	TargetHP
resource3	Focus

use Barbed_Shot when  # Tiro Lacerante
	Barbed_Shot.charges >= 2  # entrambe le cariche
	or
	Barbed_Shot.charges == 1 and Barbed_Shot.cd <= 20  # la seconda è quasi pronta

use Kill_Command when  # Ordine di Morte
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "Schema: cariche",
  "specID": 253,
  "resources": ["PlayerHP", "TargetHP", "Focus"],
  "slots": [
    {"n": 1, "alias": "Barbed_Shot", "label": "Tiro Lacerante", "spell": 217200},
    {"n": 2, "alias": "Kill_Command", "label": "Ordine di Morte", "spell": 34026}
  ],
  "rules": [
    {"use": "Barbed_Shot", "name": "Tiro Lacerante", "when": [
      {"all": ["Barbed_Shot.charges >= 2"], "comment": "entrambe le cariche"},
      {"all": ["Barbed_Shot.charges == 1", "Barbed_Shot.cd <= 20"], "comment": "la seconda è quasi pronta"}
    ]},
    {"use": "Kill_Command", "name": "Ordine di Morte"}
  ]
}
```


Per un incantesimo con cariche `.cd` è la ricarica della carica successiva: `Barbed_Shot.cd <= 20` significa che rimane al massimo il 20% della sua ricarica.

### Distanza dal bersaglio

Quando il bersaglio è fuori dalla portata in mischia ma entro la portata di un'abilità a distanza, premi quest'ultima invece di restare fermo. Senza bersaglio la distanza è sconosciuta e la regola resta in silenzio.

*Testo KRC:*

```text
rotation "Schema: distanza"

slot10	Pistol_Shot = "Colpo di Pistola"
slot11	Sinister_Strike = "Assalto Funesto"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Pistol_Shot when  # Colpo di Pistola: il bersaglio è lontano
	target.distance >= 10 and target.distance <= 20 and Combo_Points < 80

use Sinister_Strike when  # Assalto Funesto
	Combo_Points < 80
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "Schema: distanza",
  "specID": 260,
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "slots": [
    {"n": 10, "alias": "Pistol_Shot", "label": "Colpo di Pistola", "spell": 185763},
    {"n": 11, "alias": "Sinister_Strike", "label": "Assalto Funesto", "spell": 193315}
  ],
  "rules": [
    {"use": "Pistol_Shot", "name": "Colpo di Pistola: il bersaglio è lontano", "when": [
      {"all": ["target.distance >= 10", "target.distance <= 20", "Combo_Points < 80"]}
    ]},
    {"use": "Sinister_Strike", "name": "Assalto Funesto", "when": [
      {"all": ["Combo_Points < 80"]}
    ]}
  ]
}
```


Una regola in mischia non ha bisogno di controllare la distanza: se il bersaglio è troppo lontano, l'incantesimo non si può usare e KeyRota passa da sola alla regola successiva.

### Movimento

Il pulsante Movimento del pannello è il tuo segnale alla rotazione: «adesso dovrò correre». Cosa fare lo decide la rotazione, per esempio passare a un'abilità a distanza.

*Testo KRC:*

```text
rotation "Schema: movimento"

slot10	Pistol_Shot = "Colpo di Pistola"
slot11	Sinister_Strike = "Assalto Funesto"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Pistol_Shot when  # Colpo di Pistola in movimento
	movement == 1 and Combo_Points < 80

use Sinister_Strike when  # Assalto Funesto
	movement == 0 and Combo_Points < 80
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "Schema: movimento",
  "specID": 260,
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "slots": [
    {"n": 10, "alias": "Pistol_Shot", "label": "Colpo di Pistola", "spell": 185763},
    {"n": 11, "alias": "Sinister_Strike", "label": "Assalto Funesto", "spell": 193315}
  ],
  "rules": [
    {"use": "Pistol_Shot", "name": "Colpo di Pistola in movimento", "when": [
      {"all": ["movement == 1", "Combo_Points < 80"]}
    ]},
    {"use": "Sinister_Strike", "name": "Assalto Funesto", "when": [
      {"all": ["movement == 0", "Combo_Points < 80"]}
    ]}
  ]
}
```


### Incantesimi con bersaglio a terra

Il pulsante A terra abilita gli incantesimi che si posizionano sul terreno. KeyRota si limita a premere un tasto, quindi è la macro a stabilire il punto: `[@player]` ai tuoi piedi, `[@cursor]` sotto il cursore.

*La macro nel gioco:*

```text
#showtooltip Morte e Distruzione
/cast [@player] Morte e Distruzione
```


*Testo KRC:*

```text
rotation "Schema: incantesimi a terra"

slot1	Death_and_Decay = "Morte e Distruzione (macro @player)"
resource1	PlayerHP
resource2	TargetHP
resource3	Runes
resource4	Runic_Power

use Death_and_Decay when  # Morte e Distruzione
	ground_spells == 1 and enemies >= 2  # A terra attivo, 2+ nemici
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "Schema: incantesimi a terra",
  "specID": 250,
  "resources": ["PlayerHP", "TargetHP", "Runes", "Runic_Power"],
  "slots": [
    {"n": 1, "alias": "Death_and_Decay", "label": "Morte e Distruzione (macro @player)", "spell": 43265}
  ],
  "rules": [
    {"use": "Death_and_Decay", "name": "Morte e Distruzione", "when": [
      {"all": ["ground_spells == 1", "enemies >= 2"], "comment": "A terra attivo, 2+ nemici"}
    ]}
  ]
}
```


### La rotazione iniziale completa

La rotazione dell'[esempio dell'editor](https://keyrota.app/documentation/it/editor#walkthrough): due DoT, un generatore, un consumo con accumulo, una difesa e Stigma Letale su Burst.

*Testo KRC:*

```text
rotation "Assassinio: esempio v1"

# Esempio dalla documentazione di KeyRota: due sanguinamenti, un generatore, un consumo con accumulo di energia,
# una difesa con poca salute e Stigma Letale sul tasto Burst.
# Punti combo in percentuale di 7: 5 punti = 71%, soglia 70 = 5+.

buff1	Garrote_DoT = "Garrota sul bersaglio [703]"
buff2	Rupture_DoT = "Perforazione sul bersaglio [1943]"
buff3	Envenom_Buff = "Affondo Venefico [32645]"
buff4	Deathmark_DoT = "Stigma Letale sul bersaglio [360194]"
slot1	Garrote = "Garrota"
slot2	Rupture = "Perforazione"
slot3	Envenom = "Affondo Venefico"
slot4	Mutilate = "Mutilazione"
slot5	Deathmark = "Stigma Letale"
slot6	Crimson_Vial = "Fiala Cremisi"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

# --- Difesa: solo con «Cure / difesa» attivo ---
use Crimson_Vial when  # Fiala Cremisi
	defensives == 1 and PlayerHP <= 40  # salute al 40% o meno

# --- Tempo di recupero: solo con Burst attivo ---
use Deathmark when  # Stigma Letale
	cd == 1 and Garrote_DoT.up and Rupture_DoT.up and Envenom_Buff.up  # Burst attivo, sanguinamenti e Affondo Venefico attivi

# --- Sanguinamenti ---
use Garrote when  # Garrota
	Garrote_DoT.down  # nessun sanguinamento
	or
	Garrote_DoT.up and Garrote_DoT.duration <= 30  # finestra di pandemia: resta il 30% o meno

use Rupture when  # Perforazione
	Combo_Points >= 70 and Rupture_DoT.down  # 5+ punti combo, nessun sanguinamento
	or
	Combo_Points >= 70 and Rupture_DoT.up and Rupture_DoT.duration <= 30  # 5+ punti combo, finestra di pandemia

# --- Consumo: 5+ punti combo, accumulando energia ---
use Envenom when  # Affondo Venefico
	Combo_Points >= 70 and Envenom_Buff.down  # nessun beneficio
	or
	Combo_Points >= 70 and Envenom_Buff.up and Envenom_Buff.duration <= 20  # il beneficio sta finendo
	or
	Combo_Points >= 70 and Energy >= 70  # non sprecare energia al massimo
	or
	Combo_Points >= 70 and Deathmark_DoT.up  # Stigma Letale sul bersaglio

# --- Generatore: meno di 5 punti combo ---
use Mutilate when  # Mutilazione
	Combo_Points < 70  # meno di 5 punti combo
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "Assassinio: esempio v1",
  "specID": 259,
  "ignoreMainIcon": true,
  "enemies": {"range": 8, "combatOnly": true},
  "notes": [
    "Esempio dalla documentazione di KeyRota: due sanguinamenti, un generatore, un consumo con accumulo di energia,",
    "una difesa con poca salute e Stigma Letale sul tasto Burst.",
    "Punti combo in percentuale di 7: 5 punti = 71%, soglia 70 = 5+."
  ],
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "auras": [
    {"n": 1, "alias": "Garrote_DoT", "label": "Garrota sul bersaglio [703]", "spell": 703},
    {"n": 2, "alias": "Rupture_DoT", "label": "Perforazione sul bersaglio [1943]", "spell": 1943},
    {"n": 3, "alias": "Envenom_Buff", "label": "Affondo Venefico [32645]", "spell": 32645},
    {"n": 4, "alias": "Deathmark_DoT", "label": "Stigma Letale sul bersaglio [360194]", "spell": 360194}
  ],
  "slots": [
    {"n": 1, "alias": "Garrote", "label": "Garrota", "spell": 703, "show": "target"},
    {"n": 2, "alias": "Rupture", "label": "Perforazione", "spell": 1943, "show": "target"},
    {"n": 3, "alias": "Envenom", "label": "Affondo Venefico", "spell": 32645, "show": "target"},
    {"n": 4, "alias": "Mutilate", "label": "Mutilazione", "spell": 1329, "show": "target"},
    {"n": 5, "alias": "Deathmark", "label": "Stigma Letale", "spell": 360194, "show": "target"},
    {"n": 6, "alias": "Crimson_Vial", "label": "Fiala Cremisi", "spell": 185311, "show": "combat"}
  ],
  "rules": [
    {
      "use": "Crimson_Vial",
      "name": "Fiala Cremisi",
      "note": ["--- Difesa: solo con «Cure / difesa» attivo ---"],
      "when": [{"all": ["defensives == 1", "PlayerHP <= 40"], "comment": "salute al 40% o meno"}]
    },
    {
      "use": "Deathmark",
      "name": "Stigma Letale",
      "note": ["--- Tempo di recupero: solo con Burst attivo ---"],
      "when": [
        {
          "all": ["cd == 1", "Garrote_DoT.up", "Rupture_DoT.up", "Envenom_Buff.up"],
          "comment": "Burst attivo, sanguinamenti e Affondo Venefico attivi"
        }
      ]
    },
    {
      "use": "Garrote",
      "name": "Garrota",
      "note": ["--- Sanguinamenti ---"],
      "when": [
        {"all": ["Garrote_DoT.down"], "comment": "nessun sanguinamento"},
        {
          "all": ["Garrote_DoT.up", "Garrote_DoT.duration <= 30"],
          "comment": "finestra di pandemia: resta il 30% o meno"
        }
      ]
    },
    {
      "use": "Rupture",
      "name": "Perforazione",
      "when": [
        {"all": ["Combo_Points >= 70", "Rupture_DoT.down"], "comment": "5+ punti combo, nessun sanguinamento"},
        {
          "all": ["Combo_Points >= 70", "Rupture_DoT.up", "Rupture_DoT.duration <= 30"],
          "comment": "5+ punti combo, finestra di pandemia"
        }
      ]
    },
    {
      "use": "Envenom",
      "name": "Affondo Venefico",
      "note": ["--- Consumo: 5+ punti combo, accumulando energia ---"],
      "when": [
        {"all": ["Combo_Points >= 70", "Envenom_Buff.down"], "comment": "nessun beneficio"},
        {
          "all": ["Combo_Points >= 70", "Envenom_Buff.up", "Envenom_Buff.duration <= 20"],
          "comment": "il beneficio sta finendo"
        },
        {"all": ["Combo_Points >= 70", "Energy >= 70"], "comment": "non sprecare energia al massimo"},
        {"all": ["Combo_Points >= 70", "Deathmark_DoT.up"], "comment": "Stigma Letale sul bersaglio"}
      ]
    },
    {
      "use": "Mutilate",
      "name": "Mutilazione",
      "note": ["--- Generatore: meno di 5 punti combo ---"],
      "when": [{"all": ["Combo_Points < 70"], "comment": "meno di 5 punti combo"}]
    }
  ]
}
```


### Una rotazione completa per le incursioni

Una vera rotazione di Assassinio per le incursioni (Fatebound): 15 regole, Burst, Sparizione sotto Stigma Letale, copia dei DoT con Tempesta Cremisi, AoE e bersaglio singolo, accumulo di energia.

**Testo KRC: Assassinio, incursione**
*Testo KRC:*

```text
rotation "Assassinio, incursione v2.8: tasto Burst, Method 12.1, SimulationCraft, migliori log"

# Assassinio, incursione. Base: la guida di Method (patch 12.1), la lista di azioni di SimulationCraft e i migliori giocatori di Warcraft Logs.
# Ignora l'icona principale: attivo. Stigma Letale e Rovina dei Re solo con Burst attivo; Sparizione solo finché Stigma Letale è sul bersaglio.
# Punti combo in percentuale di 7: 3 = 43%, 4 = 57%, 5 = 71%, 6 = 86%, 7 = 100%.

# v2.4: Rovina dei Re solo con 0–3 punti combo (Assalti Implacabili poi ne danno 5), Sparizione con 0–4 (Garrota dalla furtività ne dà 3).
# v2.5: Tempesta Cremisi solo quando è fresco uno solo dei due sanguinamenti; prima veniva premuta più volte di fila.
# v2.6: con Burst attivo e Stigma Letale pronto o già sul bersaglio, Garrota e Perforazione vanno su un bersaglio con qualsiasi salute.
# v2.7 e v2.8: nuovo bersaglio senza sanguinamenti, Burst attivo, Stigma Letale pronto, 2+ nemici vicini: prima Tempesta Cremisi copia i sanguinamenti (con qualsiasi numero di punti combo), poi Stigma Letale.

buff1	Garrote_DoT = "Garrota sul bersaglio [703]"
buff2	Rupture_DoT = "Perforazione sul bersaglio [1943]"
buff3	Envenom_Buff = "Affondo Venefico [32645]"
buff4	Deathmark_DoT = "Stigma Letale sul bersaglio [360194]"
buff5	Improved_Garrote = "Garrota Migliorata [392401]"
buff6	Darkest_Night = "Notte Cupa [457280]"
buff7	Blindside = "Lato Cieco [121153]"
buff8	Stealth_Buff = "Furtività [1784]"
buff9	Stealth_Sub = "Furtività (Sotterfugio) [115191]"
buff10	Vanish_Buff = "Sparizione [11327]"
slot1	Garrote = "Garrota"
slot2	Rupture = "Perforazione"
slot3	Envenom = "Affondo Venefico"
slot4	Mutilate = "Mutilazione"
slot5	Ambush = "Imboscata"
slot6	Fan_of_Knives = "Ventaglio di Lame"
slot7	Crimson_Tempest = "Tempesta Cremisi"
slot8	Deathmark = "Stigma Letale"
slot9	Kingsbane = "Rovina dei Re"
slot10	Vanish = "Sparizione"
slot11	Crimson_Vial = "Fiala Cremisi"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

# --- Difesa: solo con «Cure / difesa» attivo ---
use Crimson_Vial when  # Fiala Cremisi
	defensives == 1 and PlayerHP <= 40  # salute al 40% o meno

# === Furtività ===
use Garrote when  # Garrota dalla furtività
	Stealth_Buff.up  # in furtività
	or
	Stealth_Sub.up  # in furtività (Sotterfugio)
	or
	Vanish_Buff.up  # subito dopo Sparizione

use Garrote when  # Garrota: finestra di Garrota Migliorata
	Improved_Garrote.up and Garrote_DoT.down  # finestra aperta, nessuna Garrota sul bersaglio
	or
	Improved_Garrote.up and Garrote_DoT.duration <= 78  # SimulationCraft: rinnovare quando restano 14 secondi su 18

# === Tempi di recupero (tasto Burst) ===
use Deathmark when  # Stigma Letale
	cd == 1 and Garrote_DoT.up and Rupture_DoT.up and Kingsbane.cd <= 3 and Envenom_Buff.duration >= 35 and Stealth_Buff.down and Stealth_Sub.down  # Burst attivo, sanguinamenti attivi, Rovina dei Re pronta, Affondo Venefico ancora 2+ s

use Kingsbane when  # Rovina dei Re
	cd == 1 and Garrote_DoT.up and Rupture_DoT.up and Envenom_Buff.up and Deathmark_DoT.up and Combo_Points < 50 and Stealth_Buff.down and Stealth_Sub.down  # Burst attivo, Stigma Letale sul bersaglio, 0–3 punti combo
	or
	cd == 1 and Garrote_DoT.up and Rupture_DoT.up and Envenom_Buff.up and Deathmark.cd >= 44 and Combo_Points < 50 and Stealth_Buff.down and Stealth_Sub.down  # Burst attivo, Stigma Letale tra più di 52 s, 0–3 punti combo

use Vanish when  # Sparizione
	Deathmark_DoT.up and Improved_Garrote.down and Combo_Points < 65 and Stealth_Buff.down and Stealth_Sub.down  # Stigma Letale sul bersaglio, 0–4 punti combo (Garrota dalla furtività ne dà 3)

# === Sanguinamenti ===
use Crimson_Tempest when  # Tempesta Cremisi: copiare i sanguinamenti su un nuovo bersaglio per Stigma Letale
	cd == 1 and Deathmark.cd <= 3 and Garrote_DoT.down and Rupture_DoT.down and Envenom_Buff.up and enemies >= 2  # i punti combo non contano

# Nessun nuovo sanguinamento su add quasi morti (come «il bersaglio vive ancora 12+ s» di SimulationCraft): con 1–2 bersagli e in modalità «Uno», sempre;
# con 3+ bersagli, solo se il bersaglio ha il 50%+ di salute, o con Burst attivo e Stigma Letale pronto, o se Stigma Letale è già sul bersaglio.
use Garrote when  # Garrota: mantenimento
	Garrote_DoT.down and Combo_Points < 95 and enemies <= 2
	or
	Garrote_DoT.down and Combo_Points < 95 and st == 1
	or
	Garrote_DoT.down and Combo_Points < 95 and TargetHP >= 50  # 3+ bersagli: solo un bersaglio che resiste
	or
	Garrote_DoT.down and Combo_Points < 95 and cd == 1 and Deathmark.cd <= 3  # Burst attivo e Stigma Letale pronto: la salute non conta
	or
	Garrote_DoT.down and Combo_Points < 95 and Deathmark_DoT.up  # Stigma Letale sul bersaglio (sanguinamenti copiati)
	or
	Garrote_DoT.up and Garrote_DoT.duration <= 30 and Combo_Points < 95  # finestra di pandemia (già attivo)

use Rupture when  # Perforazione
	Combo_Points >= 70 and Rupture_DoT.down and enemies <= 2
	or
	Combo_Points >= 70 and Rupture_DoT.down and st == 1
	or
	Combo_Points >= 70 and Rupture_DoT.down and TargetHP >= 50  # 3+ bersagli: solo un bersaglio che resiste
	or
	Combo_Points >= 70 and Rupture_DoT.down and cd == 1 and Deathmark.cd <= 3  # Burst attivo e Stigma Letale pronto
	or
	Combo_Points >= 70 and Rupture_DoT.down and Deathmark_DoT.up  # Stigma Letale sul bersaglio
	or
	Combo_Points >= 70 and Rupture_DoT.up and Rupture_DoT.duration <= 25 and Darkest_Night.down  # rinnovo; non spenderci i 7 punti combo di Notte Cupa

# === Generatori: fino a 5 punti combo, fino a 7 con Notte Cupa ===

# Tempesta Cremisi una volta subito dopo una Perforazione fresca (con 4+ bersagli anche dopo una Garrota fresca); altrimenti Ventaglio di Lame.
# Solo uno dei due deve essere fresco (94%+): subito dopo Tempesta Cremisi lo sono entrambi, quindi la successiva aspetta.
use Crimson_Tempest when  # Tempesta Cremisi: diffondere i sanguinamenti subito dopo una Perforazione o una Garrota fresca
	aoe == 1 and Darkest_Night.down and Combo_Points < 70 and Garrote_DoT.up and Rupture_DoT.up and Rupture_DoT.duration >= 94 and Garrote_DoT.duration < 94
	or
	aoe == 1 and Darkest_Night.down and Combo_Points < 70 and Garrote_DoT.up and Rupture_DoT.up and Garrote_DoT.duration >= 94 and Rupture_DoT.duration < 94
	or
	aoe == 1 and Darkest_Night.up and Combo_Points < 95 and Garrote_DoT.up and Rupture_DoT.up and Rupture_DoT.duration >= 94 and Garrote_DoT.duration < 94
	or
	aoe == 1 and Darkest_Night.up and Combo_Points < 95 and Garrote_DoT.up and Rupture_DoT.up and Garrote_DoT.duration >= 94 and Rupture_DoT.duration < 94
	or
	st == 0 and enemies >= 4 and Darkest_Night.down and Combo_Points < 70 and Garrote_DoT.up and Rupture_DoT.up and Rupture_DoT.duration >= 94 and Garrote_DoT.duration < 94
	or
	st == 0 and enemies >= 4 and Darkest_Night.down and Combo_Points < 70 and Garrote_DoT.up and Rupture_DoT.up and Garrote_DoT.duration >= 94 and Rupture_DoT.duration < 94
	or
	st == 0 and enemies >= 4 and Darkest_Night.up and Combo_Points < 95 and Garrote_DoT.up and Rupture_DoT.up and Rupture_DoT.duration >= 94 and Garrote_DoT.duration < 94
	or
	st == 0 and enemies >= 4 and Darkest_Night.up and Combo_Points < 95 and Garrote_DoT.up and Rupture_DoT.up and Garrote_DoT.duration >= 94 and Rupture_DoT.duration < 94
	or
	st == 0 and enemies >= 2 and enemies <= 3 and Darkest_Night.down and Combo_Points < 70 and Garrote_DoT.up and Rupture_DoT.up and Rupture_DoT.duration >= 94 and Garrote_DoT.duration < 94  # 2–3 bersagli: solo dopo una Perforazione fresca
	or
	st == 0 and enemies >= 2 and enemies <= 3 and Darkest_Night.up and Combo_Points < 95 and Garrote_DoT.up and Rupture_DoT.up and Rupture_DoT.duration >= 94 and Garrote_DoT.duration < 94  # 2–3 bersagli: solo dopo una Perforazione fresca

use Fan_of_Knives when  # Ventaglio di Lame: bersaglio singolo, Notte Cupa, manca un punto combo
	st == 1 and Darkest_Night.up and Combo_Points >= 80 and Combo_Points < 95
	or
	aoe == 0 and enemies <= 1 and Darkest_Night.up and Combo_Points >= 80 and Combo_Points < 95

use Fan_of_Knives when  # Ventaglio di Lame: 2+ bersagli
	aoe == 1 and Darkest_Night.down and Combo_Points < 70
	or
	aoe == 1 and Darkest_Night.up and Combo_Points < 95
	or
	st == 0 and enemies >= 2 and Darkest_Night.down and Combo_Points < 70
	or
	st == 0 and enemies >= 2 and Darkest_Night.up and Combo_Points < 95

use Ambush when  # Imboscata (Lato Cieco)
	Blindside.up and st == 1 and Darkest_Night.down and Combo_Points < 70
	or
	Blindside.up and st == 1 and Darkest_Night.up and Combo_Points < 95
	or
	Blindside.up and aoe == 0 and enemies <= 1 and Darkest_Night.down and Combo_Points < 70
	or
	Blindside.up and aoe == 0 and enemies <= 1 and Darkest_Night.up and Combo_Points < 95

use Mutilate when  # Mutilazione
	st == 1 and Darkest_Night.down and Combo_Points < 70
	or
	st == 1 and Darkest_Night.up and Combo_Points < 95
	or
	aoe == 0 and enemies <= 1 and Darkest_Night.down and Combo_Points < 70
	or
	aoe == 0 and enemies <= 1 and Darkest_Night.up and Combo_Points < 95

# === Consumo: 5+ punti combo (7 con Notte Cupa) ===
# SimulationCraft: non premerlo subito ma tenere Affondo Venefico sempre attivo: nell'ultimo secondo del beneficio, finché Stigma Letale è sul bersaglio, prima di riempire l'energia, prima con 4+ bersagli.
use Envenom when  # Affondo Venefico
	Darkest_Night.down and Combo_Points >= 70 and Envenom_Buff.down
	or
	Darkest_Night.down and Combo_Points >= 70 and Envenom_Buff.duration <= 20  # resta circa 1 s
	or
	Darkest_Night.down and Combo_Points >= 70 and Deathmark_DoT.up
	or
	Darkest_Night.down and Combo_Points >= 70 and Energy >= 70  # non sprecare energia al massimo
	or
	Darkest_Night.down and Combo_Points >= 70 and Energy >= 30 and enemies >= 4
	or
	Darkest_Night.up and Combo_Points >= 95 and Envenom_Buff.down
	or
	Darkest_Night.up and Combo_Points >= 95 and Envenom_Buff.duration <= 20
	or
	Darkest_Night.up and Combo_Points >= 95 and Deathmark_DoT.up
	or
	Darkest_Night.up and Combo_Points >= 95 and Energy >= 70
	or
	Darkest_Night.up and Combo_Points >= 95 and Energy >= 30 and enemies >= 4
```


Il suo JSON è nei file qui sotto. La seconda rotazione è Fuorilegge (Trickster) con la macro di Scarica d'Adrenalina (**O + Q**), Roulette Eterna (**O**), Furia Omicida (**C**) e la protezione della canalizzazione in ogni regola.

### File di esempio

| Esempio | File |
|---|---|
| La rotazione iniziale di Assassinio dell'esempio dell'editor | [JSON](https://keyrota.app/documentation/examples/starter-assassination.it.json), [testo KRC](https://keyrota.app/documentation/examples/starter-assassination.it.txt) |
| Assassinio, incursione: 15 regole | [JSON](https://keyrota.app/documentation/examples/assassination-raid.it.json), [testo KRC](https://keyrota.app/documentation/examples/assassination-raid.it.txt) |
| Fuorilegge, incursione e Mitica+: 13 regole, flag O, OQ, C | [JSON](https://keyrota.app/documentation/examples/outlaw-raid.it.json), [testo KRC](https://keyrota.app/documentation/examples/outlaw-raid.it.txt) |
| La rotazione utile più breve | [JSON](https://keyrota.app/documentation/examples/minimal.it.json), [testo KRC](https://keyrota.app/documentation/examples/minimal.it.txt) |
| Un campione della sintassi: tutte le condizioni e tutti i flag (senza ID, non per il combattimento) | [JSON](https://keyrota.app/documentation/examples/syntax-every-condition.it.json), [testo KRC](https://keyrota.app/documentation/examples/syntax-every-condition.it.txt) |

Ogni esempio esiste in tutte le lingue del sito: etichette, regole e commenti sono tradotti, mentre condizioni, ID degli incantesimi e flag sono gli stessi. La lingua è indicata nel nome del file: `.en`, `.ru`, `.de`, `.fr`, `.es`, `.it`, `.pt`, `.ko`, `.zh`, `.zh-TW`.

Per aprire un file: Nuovo — Da file… nella finestra principale, oppure Apri… nella pagina Testo e JSON dell'editor.

---

<!-- https://keyrota.app/documentation/it/ai -->

## Creare una rotazione con un agente IA

> [!TIP] Basta il link a questa pagina
> Puoi semplicemente dare al tuo agente IA il link a questa pagina: capirà tutto da solo e, se necessario, ti chiederà i dati mancanti.

Un agente IA con accesso al web e ai file può creare per te una rotazione KRC: studiare i log dei migliori giocatori della tua specializzazione, le guide e la lista di azioni di SimulationCraft, confrontarli con i tuoi talenti e i tuoi log e consegnarti un JSON pronto. Qui trovi cosa fornirgli, un prompt pronto e come verificare il risultato.

### Cosa ti serve

**Un agente** in grado di aprire siti web (Warcraft Logs, Raider.IO, Wowhead, GitHub) e leggere file. Se non ha accesso al web, forniscigli la documentazione e gli estratti dei log come file.

**La documentazione per l'agente** (i link sono già nel prompt):

| Link | Contenuto |
|---|---|
| [llms.txt](https://keyrota.app/documentation/llms.txt) | L'indice della documentazione per gli agenti IA: tutte le lingue, i file e gli esempi |
| [krc-guide.it.md](https://keyrota.app/documentation/krc-guide.it.md) | L'intera documentazione in un unico file Markdown in questa lingua; in inglese: [krc-guide.en.md](https://keyrota.app/documentation/krc-guide.en.md) |
| [keyrota-rotation.schema.json](https://keyrota.app/documentation/keyrota-rotation.schema.json) | Lo schema JSON per verificare la risposta |
| [Assassinio, incursione](https://keyrota.app/documentation/examples/assassination-raid.it.json), [Fuorilegge, incursione e Mitica+](https://keyrota.app/documentation/examples/outlaw-raid.it.json) | Rotazioni reali per le incursioni, come modello |

**I tuoi dati** (i segnaposto nel prompt):

| Segnaposto | Cosa inserire | Esempio |
|---|---|---|
| `{CLASS}` | Classe | Ladro |
| `{SPEC}` | Specializzazione | Assassinio |
| `{HERO_TALENTS}` | Talenti eroici | Fatebound |
| `{TALENT_STRING}` | La stringa di esportazione dei talenti dal gioco (finestra dei talenti, Condividi) | `CMQAAAAA…` |
| `{CONTENT}` | Incursione o Mitica+ | incursione |
| `{RAID_OR_DUNGEONS}` | L'incursione o un elenco di spedizioni | The Venomous Abyss |
| `{DIFFICULTY}` | Difficoltà o livello della chiave | eroica |
| `{BOSSES}` | I boss per cui serve la rotazione | tutti |
| `{ITEM_LEVEL}` | Livello degli oggetti | 328 |
| `{MY_LOGS}` | Un link al tuo personaggio o a un tuo report su Warcraft Logs | `https://www.warcraftlogs.com/character/eu/<realm>/<name>` |
| `{COMBAT_LOG_FILE}` | Il file del registro di combattimento che alleghi | `WoWCombatLog-101726_214449.txt` |
| `{PREFERENCES}` | Le tue preferenze | «tempi di recupero solo sul pulsante Burst, niente difese» |

### Il prompt

L'agente raccoglie i dati da solo, li confronta con i tuoi e spiega ogni regola. Compila le parentesi graffe e allega un registro di combattimento, se ne hai uno.

*Prompt:*

```text
Sei un esperto di World of Warcraft e un autore di rotazioni per KeyRota. Crea per me una rotazione avanzata di KeyRota: un JSON nel formato keyrota-rotation, versione 1.

IL MIO PERSONAGGIO
- Classe e specializzazione: {CLASS}, {SPEC}. Talenti eroici: {HERO_TALENTS}.
- Stringa dei talenti dal gioco: {TALENT_STRING}
- Contenuto: {CONTENT}: {RAID_OR_DUNGEONS}. Difficoltà o livelli delle chiavi: {DIFFICULTY}. Boss: {BOSSES}.
- Livello degli oggetti: {ITEM_LEVEL}.
- I miei log su Warcraft Logs: {MY_LOGS}
- Registro di combattimento (allegato): {COMBAT_LOG_FILE}
- Preferenze: {PREFERENCES}

PASSO 1. STUDIA IL FORMATO DI KEYROTA
- https://keyrota.app/documentation/llms.txt e https://keyrota.app/documentation/krc-guide.en.md: slot (fino a 12), aure (fino a 12, solo i miei benefici e le mie penalità sul bersaglio), risorse in percentuale, tutte le condizioni, i flag degli slot, gli interruttori del pannello aoe, st, cd, defensives, ground_spells, movement, regole controllate dall'alto in basso, gruppi OR di condizioni AND, limiti di 16 gruppi da 16 condizioni, un valore sconosciuto rende falsa una condizione.
- Schema JSON: https://keyrota.app/documentation/keyrota-rotation.schema.json
- Modelli: https://keyrota.app/documentation/examples/assassination-raid.en.json e https://keyrota.app/documentation/examples/outlaw-raid.en.json

PASSO 2. RACCOGLI I DATI
1. Warcraft Logs: classifiche dei danni di {CLASS} ({SPEC}) per ogni boss ({CONTENT}, {DIFFICULTY}); per la Mitica+, per ogni spedizione e livello di chiave. Prendi i 5-10 log migliori con i talenti eroici {HERO_TALENTS}.
2. Confronta i loro talenti con la mia stringa. Annota le differenze che cambiano la priorità e dimmi se dovrei prenderle.
3. Dai migliori log raccogli: l'apertura e l'ordine dei lanci; l'uptime dei benefici e delle penalità importanti; le risorse al momento dei lanci (punti combo o equivalente alle mosse finali, energia o equivalente prima di spendere, risorse perse per aver raggiunto il massimo); quando e insieme a cosa vengono usati i grandi tempi di recupero e come sono allineati con le fasi; quando e con quanta salute vengono usate le difese; da quanti bersagli si passa all'AoE; lanci al minuto e tempo senza lanci.
4. Per la Mitica+: Raider.IO (la meta, le migliori run, i talenti per spedizione).
5. Guide (Wowhead, Method, il Discord della classe) e la lista di azioni (APL) di SimulationCraft per {SPEC} nel ramo dell'espansione attuale: usala come priorità di base e verificala con i log.
6. I miei log e il mio registro di combattimento: dove i miei uptime, le risorse ai consumi, i tempi di recupero e il ritmo differiscono da quelli dei migliori giocatori.

PASSO 3. SCRIVI LA ROTAZIONE
- "format": "keyrota-rotation", "version": 1, lo specID della mia specializzazione, le risorse dalla tabella delle specializzazioni della documentazione (resource1 PlayerHP, resource2 TargetHP, poi le risorse della specializzazione), "ignoreMainIcon": true.
- Slot: ID reali degli incantesimi di Wowhead (il campo spell). "show": "combat" per cure e difese. Flag: offGcd per gli incantesimi fuori GCD; offGcd e queue per le macro con la seconda riga sul GCD e per i pulsanti che richiedono l'esito del colpo precedente; channel per le canalizzazioni; manual per ciò che premo io. Per uno slot con una macro, scrivi il testo della macro (#showtooltip e /cast).
- Aure: gli ID dei benefici e delle penalità veri e propri, non degli incantesimi che li applicano. Solo le mie aure.
- Regole in ordine di priorità. Prima le difese, e solo con defensives == 1. I grandi tempi di recupero solo con cd == 1 (il pulsante Burst, non il tempo di recupero di un incantesimo); ciò che potenzia la finestra del tempo di recupero solo al suo interno. Bersaglio singolo e AoE: un gruppo aoe == 1 e un gruppo st == 0 and enemies >= N per l'AoE; un gruppo st == 1 e un gruppo aoe == 0 and enemies <= 1 per il bersaglio singolo. DoT: un gruppo X.down e un gruppo X.up and X.duration <= 30. Risorse in percentuale, soglie a metà tra un gradino e l'altro (punti combo su 7: «almeno 5» è Combo_Points >= 70, «al massimo 3» è Combo_Points < 50). Se il pulsante successivo interrompe una canalizzazione, aggiungi X.duration <= 8 per l'aura della canalizzazione a ogni gruppo di ogni regola.
- KRC non ha not, != né parentesi: usa le coppie up/down, ready/oncd, glow/noglow, gli operatori inversi e più gruppi.
- Scrivi le etichette (label), i nomi delle regole e i commenti in italiano, e i nomi usati nelle condizioni (alias) in lettere latine senza accenti.
- Dai un nome a ogni regola e un breve commento a ogni gruppo: cosa e perché.
- Alla fine verifica: il JSON supera lo schema; ogni nome usato nelle condizioni è dichiarato; non più di 16 condizioni in un gruppo e 16 gruppi in una regola; gli ID esistono su Wowhead per la patch attuale.

RISPOSTA
1. L'intero JSON della rotazione in un unico blocco.
2. I testi delle macro per gli slot con macro.
3. Una tabella: regola, cosa fa, da dove viene (quale log, guida o riga dell'APL).
4. Cosa attivare nel gioco: i pulsanti del pannello delle impostazioni rapide, il raggio del contatore dei nemici, cosa mettere sulle barre delle azioni.
5. Un piano di test: un manichino da addestramento, poi un registro di combattimento confrontato con i migliori log; quali numeri confrontare.
```


### Un prompt compilato

Lo stesso prompt per intero, compilato per Assassinio in un'incursione eroica:

*Prompt: Assassinio, incursione eroica:*

```text
Sei un esperto di World of Warcraft e un autore di rotazioni per KeyRota. Crea per me una rotazione avanzata di KeyRota: un JSON nel formato keyrota-rotation, versione 1.

IL MIO PERSONAGGIO
- Classe e specializzazione: Ladro, Assassinio. Talenti eroici: Fatebound.
- Stringa dei talenti dal gioco: CMQAAAAAAAAAAAAAAAAAAAAAAYmlZmFDGAAAAAYWGsNDAAAAAILzMzMzMjxyMzMbzsMzMPgZMzYMMzYMAGYBmxoxsBYbAbGAMzMGD
- Contenuto: incursione: The Venomous Abyss. Difficoltà: eroica. Boss: tutti; presta particolare attenzione a Ula'tek (finestre di danno sul Cuore).
- Livello degli oggetti: 328.
- I miei log su Warcraft Logs: https://www.warcraftlogs.com/character/eu/<realm>/<name>
- Registro di combattimento (allegato): WoWCombatLog-101726_214449.txt, 5 minuti su un manichino da addestramento, bersaglio singolo.
- Preferenze: Stigma Letale e Rovina dei Re solo sul pulsante Burst; Sparizione solo sotto Stigma Letale; Fiala Cremisi con la salute al 40% o meno; accumulo di energia come in SimulationCraft.

PASSO 1. STUDIA IL FORMATO DI KEYROTA
- https://keyrota.app/documentation/llms.txt e https://keyrota.app/documentation/krc-guide.en.md: slot (fino a 12), aure (fino a 12, solo i miei benefici e le mie penalità sul bersaglio), risorse in percentuale, tutte le condizioni, i flag degli slot, gli interruttori del pannello aoe, st, cd, defensives, ground_spells, movement, regole controllate dall'alto in basso, gruppi OR di condizioni AND, limiti di 16 gruppi da 16 condizioni, un valore sconosciuto rende falsa una condizione.
- Schema JSON: https://keyrota.app/documentation/keyrota-rotation.schema.json
- Modelli: https://keyrota.app/documentation/examples/assassination-raid.en.json e https://keyrota.app/documentation/examples/outlaw-raid.en.json

PASSO 2. RACCOGLI I DATI
1. Warcraft Logs: classifiche dei danni di Ladro (Assassinio) per ogni boss (incursione The Venomous Abyss, difficoltà eroica). Prendi i 5-10 log migliori con i talenti eroici Fatebound.
2. Confronta i loro talenti con la mia stringa. Annota le differenze che cambiano la priorità e dimmi se dovrei prenderle.
3. Dai migliori log raccogli: l'apertura e l'ordine dei lanci; l'uptime di Garrota, Perforazione e del beneficio di Affondo Venefico; i punti combo ad Affondo Venefico, Perforazione, Rovina dei Re e Sparizione, l'energia prima di Affondo Venefico, l'energia e i punti combo persi per aver raggiunto il massimo; quando e insieme a cosa vengono usati Stigma Letale e Rovina dei Re e come sono allineati con le fasi (soprattutto con il Cuore su Ula'tek); quando e con quanta salute vengono usate Fiala Cremisi e le altre difese; da quanti bersagli si passa a Ventaglio di Lame e Tempesta Cremisi; lanci al minuto e tempo senza lanci.
4. Guide (Wowhead, Method, il Discord dei ladri) e la lista di azioni (APL) di SimulationCraft per Assassinio nel ramo dell'espansione attuale: usala come priorità di base e verificala con i log.
5. I miei log e il mio registro di combattimento: dove i miei uptime, i punti combo ai consumi, i tempi di recupero e il ritmo differiscono da quelli dei migliori giocatori.

PASSO 3. SCRIVI LA ROTAZIONE
- "format": "keyrota-rotation", "version": 1, "specID": 259, "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"], "ignoreMainIcon": true.
- Slot: ID reali degli incantesimi di Wowhead (il campo spell). "show": "combat" per Fiala Cremisi. Flag: offGcd per gli incantesimi fuori GCD; offGcd e queue per Sparizione (le servono i punti combo del colpo precedente); channel per le canalizzazioni, se ce ne sono; manual per ciò che premo io. Per uno slot con una macro, scrivi il testo della macro (#showtooltip e /cast).
- Aure: gli ID dei benefici e delle penalità veri e propri, non degli incantesimi che li applicano (per esempio, il beneficio di Sparizione non ha lo stesso ID dell'incantesimo). Solo le mie aure.
- Regole in ordine di priorità. Prima Fiala Cremisi, e solo con defensives == 1 e la salute al 40% o meno. Stigma Letale e Rovina dei Re solo con cd == 1 (il pulsante Burst, non il tempo di recupero di un incantesimo); Sparizione solo mentre Stigma Letale è sul bersaglio. Bersaglio singolo e AoE: un gruppo aoe == 1 e un gruppo st == 0 and enemies >= 2 per Ventaglio di Lame; un gruppo st == 1 e un gruppo aoe == 0 and enemies <= 1 per Mutilazione. Garrota e Perforazione: un gruppo X.down e un gruppo X.up and X.duration <= 30. Punti combo su 7 in percentuale, soglie a metà tra un gradino e l'altro: «almeno 5» è Combo_Points >= 70, «al massimo 3» è Combo_Points < 50. Accumulo di energia: Affondo Venefico con 5+ punti combo quando il beneficio sta per finire, sotto Stigma Letale o con Energy >= 70.
- KRC non ha not, != né parentesi: usa le coppie up/down, ready/oncd, glow/noglow, gli operatori inversi e più gruppi.
- Scrivi le etichette (label), i nomi delle regole e i commenti in italiano, e i nomi usati nelle condizioni (alias) in lettere latine senza accenti.
- Dai un nome a ogni regola e un breve commento a ogni gruppo: cosa e perché.
- Alla fine verifica: il JSON supera lo schema; ogni nome usato nelle condizioni è dichiarato; non più di 16 condizioni in un gruppo e 16 gruppi in una regola; gli ID esistono su Wowhead per la patch attuale.

RISPOSTA
1. L'intero JSON della rotazione in un unico blocco.
2. I testi delle macro per gli slot con macro.
3. Una tabella: regola, cosa fa, da dove viene (quale log, guida o riga dell'APL).
4. Cosa attivare nel gioco: i pulsanti del pannello delle impostazioni rapide, il raggio del contatore dei nemici, cosa mettere sulle barre delle azioni.
5. Un piano di test: un manichino da addestramento, poi un registro di combattimento confrontato con i migliori log; quali numeri confrontare.
```


### Come analizzare i log

Suggerimenti per l'agente e per te: dove trovare i dati e cosa confrontare.

**Warcraft Logs**
- Classifiche: `https://www.warcraftlogs.com/zone/rankings/<zone id>?boss=<boss id>&class=<Class>&spec=<Spec>&difficulty=<3|4|5>&metric=dps` (3 normale, 4 eroica, 5 mitica). Le classifiche della Mitica+ sono suddivise per livello di chiave.
- Nel report di un giocatore: la scheda Casts (ordine e tempi dei lanci), Buffs e Debuffs (uptime), Resources (risorse e risorse sprecate al massimo), Damage Done (per abilità e bersaglio), Deaths.
- Talenti da un log: il riepilogo del giocatore contiene la stringa di esportazione dei talenti; aprila nel calcolatore di talenti di Wowhead.
- Confronta il comportamento, non i DPS: uptime di DoT e benefici, risorse ai consumi, lanci al minuto, tempo senza lanci, tempistica dei grandi tempi di recupero rispetto alle fasi del combattimento.

**Raider.IO** (Mitica+)
- Le migliori run di una spedizione: `https://raider.io/api/v1/mythic-plus/runs?season=<season>&region=world&dungeon=<slug>&page=0`; stagioni e spedizioni: `https://raider.io/api/v1/mythic-plus/static-data?expansion_id=<id>`.
- La meta cambia di settimana in settimana: usa dati recenti, non vecchie conclusioni.

**SimulationCraft**
- La lista di azioni (APL) di una specializzazione si trova nel repository `simulationcraft/simc` su GitHub, nel ramo dell'espansione attuale, nella cartella `ActionPriorityLists`.
- Come convertire un'APL in KRC:

| APL di SimulationCraft | KRC |
|---|---|
| righe `actions`, dall'alto in basso | regole, dall'alto in basso |
| `buff.X.up` | `X.up` |
| `dot.X.remains`, `buff.X.remains` | `X.duration` in percentuale |
| `cooldown.X.remains` | `X.cd` in percentuale |
| `combo_points`, `energy` | risorse in percentuale |
| `active_enemies` | `enemies` |
| `target.time_to_die`, secondi esatti | non esistono; il sostituto più vicino, per esempio «il bersaglio vivrà ancora 12 secondi», è `TargetHP >= 50` con 3+ bersagli |

**Il registro di combattimento**
- Con la cronologia di combattimento avanzata ogni `SPELL_CAST_SUCCESS` riporta le risorse di chi lancia (tipo, valore attuale, massimo); l'energia è il tipo 3.
- `SPELL_AURA_APPLIED`, `SPELL_AURA_REFRESH`, `SPELL_AURA_REMOVED`: uptime e rinnovi delle aure; `SPELL_ENERGIZE`: risorse guadagnate; `SPELL_CAST_FAILED`: pressioni rifiutate dal gioco.
- Conta: lanci al minuto, intervalli tra i GCD, uptime dei DoT, punti combo alle mosse finali, energia sprecata al massimo, tempistica dei grandi tempi di recupero.

### Come creare un registro di combattimento

1. Nelle impostazioni del gioco, sezione Rete, attiva «Cronologia di combattimento avanzata». Senza di essa il registro non contiene risorse né posizioni.
2. Prima del pull digita `/combatlog` in chat: la registrazione inizia. Dopo il combattimento digita di nuovo `/combatlog`: la registrazione si interrompe.
3. Il file si trova nella cartella del gioco: `World of Warcraft\_retail_\Logs\WoWCombatLog-MMGGAA_HHMMSS.txt`. Il gioco lo scrive con un certo ritardo: dopo aver interrotto la registrazione attendi un minuto.
4. Il programma di caricamento di Warcraft Logs può svuotare il file dopo il caricamento: copialo prima.

Fai i primi test su un manichino da addestramento: 2–3 minuti su un singolo bersaglio, poi su un gruppo di manichini per l'AoE.

### Test e iterazioni

1. Carica la rotazione (vedi sotto), crea e incolla il profilo di Better Assistant, metti gli incantesimi degli slot sulle barre con i relativi tasti.
2. Prova su un manichino. Il Registro nella finestra principale mostra cosa viene premuto. Il file di registro di KeyRota (pulsante della cartella accanto a Registro) riporta, per ogni GCD, la regola scelta e il motivo per cui le regole sopra sono state saltate: condizioni, non pronto, sconosciuto, manuale.
3. Dai all'agente il JSON della rotazione, un registro di combattimento recente e, se serve, il registro di KeyRota. Chiedigli di confrontarli con i migliori log: uptime, risorse ai consumi, tempi di recupero, tempi morti.
4. Cambia una regola alla volta e indica la versione nel nome della rotazione («v1.3»). Conserva le versioni precedenti: Esporta nella finestra principale oppure Testo e JSON — Salva….
5. Dopo l'incursione o la chiave, confronta di nuovo con Warcraft Logs.

### Caricare il risultato

- **Come file:** salva il JSON della risposta in un file `.json`, poi Rotazione — Nuovo — Da file….
- **Dagli appunti:** copia il JSON, poi Nuovo — Dagli appunti.
- **In una rotazione aperta:** editor — Testo e JSON — JSON — Incolla. Gli slot con lo stesso numero mantengono ID, flag e visibilità se il nuovo JSON non li specifica.

La barra di stato dell'editor dovrebbe riportare «Rotazione valida». Se c'è un errore, ne viene indicato il punto: riportalo all'agente parola per parola. Poi Generale — «Crea da slot e aure» — «Copia», nel gioco `/ba` — Profile — incolla — Apply. Crea nel gioco le macro della risposta e mettile sulle barre.

---

<!-- https://keyrota.app/documentation/it/faq -->

## Domande frequenti e risoluzione dei problemi

### Una regola non scatta mai

Controlla in quest'ordine:

1. **Una regola più in alto vince sempre.** Le regole vengono controllate dall'alto in basso: se una regola più in alto è soddisfatta e il suo incantesimo si può usare, alla tua non arriva mai il turno. Sposta la tua regola più in alto o restringi le condizioni di quella sopra.
2. **Un valore sconosciuto.** Una condizione su un valore sconosciuto è falsa, perfino `.down`. Un'aura è sconosciuta quando non è nel profilo di Better Assistant o ha un ID sbagliato. Crea di nuovo il profilo («Crea da slot e aure») e incollalo nel gioco.
3. **L'ID dell'aura, non quello dell'incantesimo.** Un beneficio può avere un ID diverso dall'incantesimo che lo applica: Sparizione è `1856`, il suo beneficio `11327`. Inoltre le regole vedono solo le tue aure, non i benefici di altri giocatori.
4. **Lo slot non è pronto.** Risorsa insufficiente, bersaglio troppo lontano, un tempo di recupero, talento non preso. Una regola del genere viene saltata senza errori.
5. **Better Assistant non mostra lo slot.** Uno slot Con bersaglio non è pronto senza bersaglio. Per cure e difese usa In combattimento.
6. **Nessun tasto.** L'incantesimo dello slot deve trovarsi su una barra delle azioni con un tasto assegnato (oppure una macro con `#showtooltip`).
7. **Un interruttore è disattivo.** Cure / difesa è disattivo per impostazione predefinita, Burst potrebbe essere stato disattivato con il tasto Burst (F3 su Windows, ⌃⇧B su macOS), la modalità bersagli potrebbe essere ancora su Uno o Molti.
8. **Percentuali.** 5 punti combo corrispondono a `70`, non a `5`. Vedi [Risorse](https://keyrota.app/documentation/it/conditions#resources).
9. **Cumuli.** Un singolo cumulo risulta 0: `X.stacks >= 1` non distingue un cumulo dall'assenza dell'aura; usa `.up`.
10. **Un'aura senza durata.** Furtività e simili risultano sempre con 1 rimanente: `.duration` non funziona per queste aure.

Il file di registro di KeyRota mostra quale regola è stata scelta e perché quelle sopra sono state saltate: pulsante della cartella accanto a Registro nella finestra principale.

### Preme troppo presto o troppo tardi

| Cosa vedi | Causa | Cosa fare |
|---|---|---|
| Un incantesimo fuori GCD attende la fine del GCD | Manca il flag O | Attiva Fuori GCD (O). |
| Un pulsante fuori GCD viene premuto prima che arrivi l'esito del colpo precedente | Il flag O preme subito, a metà del GCD | Aggiungi Nella finestra di coda (Q): O + Q. |
| Una macro con la seconda riga sul GCD non viene eseguita per intero | La macro è stata premuta a metà del GCD | O + Q: la macro viene premuta alla fine del GCD. |
| Una regola fuori GCD più in basso non scavalca una più in alto | È voluto: priorità rigorosa | Sposta la regola più in alto. |
| Dopo aver speso, la rotazione «resta ferma» | Accumulo di risorse: nessuna regola è soddisfatta | È normale; per spendere prima, abbassa la soglia di energia. |
| La rotazione non preme nulla mentre premi i tuoi pulsanti | KeyRota si fa da parte quando premi le tue abilità | È normale. |

### Una canalizzazione viene interrotta

- Attiva Canalizzazione (C) per lo slot: durante la canalizzazione KeyRota non preme nulla e non preme lo slot due volte all'inizio.
- Il gioco termina alcune canalizzazioni poco prima dell'ultimo colpo, e una pressione subito dopo la fine della canalizzazione la interrompe. Aggiungi l'aura della canalizzazione alle aure della rotazione e la condizione `Channel_aura.duration <= 8` a **ogni gruppo di ogni regola**. Esempio: [Protezione della canalizzazione](https://keyrota.app/documentation/it/patterns#channel).

### Non passa all'AoE

1. La modalità bersagli è Auto (F2 su Windows, ⌃⇧T su macOS, a rotazione tra Auto, Uno e Molti)? In modalità Uno le regole con `st == 0` restano in silenzio.
2. Le barre delle unità nemiche sono attive nel gioco (V), senza nascondere le unità minori?
3. Il raggio del contatore nella pagina Generale è almeno pari al raggio della tua abilità AoE?
4. Solo nemici in combattimento: i nemici non ancora in combattimento non vengono contati. Con gruppi di nemici che arrivano uno alla volta, il conteggio può essere più basso.
5. La soglia della regola: `enemies >= 2` o `>= 3`?
6. Dopo aver cambiato il raggio, crea e incolla di nuovo il profilo di Better Assistant.

### Burst non scatta o scatta al momento sbagliato

- `cd == 1` è **il pulsante Burst** (F3 su Windows, ⌃⇧B su macOS, il pulsante Burst del pannello), non il tempo di recupero di un incantesimo. Il tempo di recupero di un incantesimo è `Slot.cd`.
- Burst è attivo per impostazione predefinita. Disattivalo prima di un momento in cui il tempo di recupero non va speso (immunità, cambio di fase) e riattivalo quando è il momento.
- Se un grande tempo di recupero dipende dalle aure (DoT sul bersaglio), le attende. Controlla nel registro di KeyRota quale condizione della regola non è soddisfatta.
- Per ciò che deve partire solo sotto il tempo di recupero, controlla l'aura del tempo di recupero (`Deathmark_DoT.up`), non il pulsante Burst.

### Come calcolare le percentuali

- **Risorse e salute:** `valore / massimo × 100`. 175 di energia su 250 sono `70`.
- **Punti combo su 7:** metti la soglia a metà tra un gradino e l'altro: «almeno 5» è `>= 70`, «al massimo 3» è `< 50`. [La tabella](https://keyrota.app/documentation/it/conditions#resources).
- **Durata rimanente di un'aura:** una percentuale della durata di quella specifica applicazione. Il 30% è la finestra di pandemia.
- **Tempo di recupero:** una percentuale del tempo di recupero totale, senza il GCD. Per un tempo di recupero di 2 minuti, l'1% è 1,2 s.

### «Una rotazione con errori non viene salvata»

L'editor non salva una rotazione con un errore: KeyRota non esegue mai una rotazione in parte. La barra di stato indica il punto, per esempio «Regola 9, gruppo 1: il gruppo non ha condizioni». Fai clic su Mostra per aprire la regola. Cause comuni:

| Messaggio | Cosa fare |
|---|---|
| il gruppo non ha condizioni | Aggiungi una condizione o elimina il gruppo vuoto. |
| nessuno slot selezionato | Scegli uno slot in Premere. |
| il flag Q va solo insieme a O | Attiva Fuori GCD (O) o disattiva Q. |
| nome sconosciuto … | Un nome in una condizione non corrisponde a nessuna aura, slot o risorsa: controlla Nome nel testo. |
| … è di tipo slot, ma serve buff | Una proprietà da aura (`.up`, `.duration`) su uno slot, o una proprietà da slot (`.ready`, `.cd`) su un'aura. |
| il nome non può contenere virgolette | Rimuovi `"` dal nome della rotazione, dello slot o dell'aura. |

Tutti i messaggi sono in [Errori](https://keyrota.app/documentation/it/rotation-json#errors).

### Che differenza c'è tra `.oncd` e `.cd > 0`

`X.oncd`: lo slot non è pronto per **un motivo qualsiasi**: un tempo di recupero, risorsa insufficiente, bersaglio troppo lontano, slot non mostrato. `X.cd > 0`: è in corso un tempo di recupero. Per un incantesimo con cariche `.cd > 0` è possibile anche quando lo slot è pronto: una carica è disponibile, la successiva si sta ricaricando.

### Come scrivere «non» e le parentesi

KRC non ha `not`, `!=` né parentesi. «Non» si esprime con la condizione opposta (`up`/`down`, `ready`/`oncd`, `glow`/`noglow`) o con l'operatore inverso (invece di «non `>= 70`» scrivi `< 70`). «(A o B) e C» sono due gruppi: `A and C`, `B and C`. Per saperne di più: [«Non», parentesi e OR](https://keyrota.app/documentation/it/conditions#logic).

### Più di 12 slot o aure?

No: una rotazione ha al massimo 12 slot e 12 aure, come il profilo di Better Assistant. Le macro aiutano a risparmiare spazio (un pulsante, più incantesimi), e uno slot può comparire in più regole. Il numero di regole è illimitato.

### Una rotazione con un talento che non hai

Se un talento non è preso, l'incantesimo non è appreso, lo slot non è pronto e le sue regole vengono semplicemente saltate. Una stessa rotazione può funzionare con configurazioni di talenti diverse: le regole degli incantesimi mancanti restano in silenzio.

### Spostare o condividere una rotazione

- Esporta, nella finestra principale, salva il profilo con la sua rotazione; Importa lo carica su un altro computer.
- Nell'editor, Testo e JSON — Salva… salva la rotazione come `.json` o `.txt`; per aprirla, Nuovo — Da file….
- Il profilo di Better Assistant viene ricreato dagli slot e dalle aure della rotazione: non serve passarlo a parte.

### Perché a volte KeyRota non preme nulla

Con Ignora l'icona principale attivo, quando nessuna regola è adatta KeyRota attende. Nelle rotazioni che accumulano energia è normale: con 5+ punti combo il consumo attende la sua condizione e il generatore resta in silenzio. Se l'attesa ti sembra sbagliata, controlla nel registro di KeyRota quali regole sono state saltate e perché.
