Script di mod: Chat

La presente pagina illustra i dettagli relativi agli script di mod per quanto riguarda le funzioni di chat.

Eventi in chat

chat:messaggio

Viene attivato ogni volta che viene ricevuto un nuovo messaggio in chat. Si noti che, se il messaggio è di tipo rollresult, gmrollresult, secretrollresult o supersecretrollresult, sarà necessario richiamare la funzione JSON.parse() sul contenuto del messaggio per ottenere un oggetto contenente le informazioni relative ai risultati del tiro.

Se un giocatore inserisce un messaggio nella chat che inizia con !, tale messaggio è di tipo "api" e non viene visualizzato nella chat. Gli script utilizzano quel tipo per i comandi. La funzione sendChat() attiva anche l'evento chat:message, e tali messaggi hanno come playerid "API".

Parametro di callback:

Immobile Valore predefinito Note
chi "" Il nome mostrato del giocatore o del personaggio che ha inviato il messaggio. Per un GM, ciò si conclude con (GM). Se non desidera che il suffisso compaia nel nome pubblicato, lo rimuova prima di passare il parametro "who" alla funzione " sendChat ".
ID giocatore L'ID del giocatore che ha inviato il messaggio. I messaggi creati tramite sendChat() utilizzano l’“API”.
tipo "informazioni generali" Uno tra: general, rollresult, gmrollresult, secretrollresult, supersecretrollresult, emote, sussurro, desc, direct o api.
contenuti "" Il contenuto del messaggio di chat. Se il tipo è “rollresult”, “gmrollresult”, “secretrollresult” o “supersecretrollresult”, si tratterà di una stringa JSON contenente i dati relativi al tiro.
origRoll (solo tipi di tiro) Il testo originale del tiro, ad esempio: 2d10+5 danni da fuoco quando il giocatore digita /r 2d10+5 danni da fuoco. Ciò equivale all'utilizzo di contenuti nei messaggi di tipo diverso da quelli relativi ai risultati dei tiri.
rulli per pattini in linea Da visualizzare quando il contenuto presenta elenchi a rullino incorporati. In un messaggio "api" i ruoli compaiono nel contenuto come $[[0]], $[[1]] e così via, e questo array contiene i ruoli analizzati in tale ordine. Una voce può includere " secret: true".
modello di rotolo (il contenuto comprende esclusivamente uno o più template di tiro) Il nome del template specificato.
obiettivo (digitare sussurro ) L'ID del giocatore a cui viene inviato il sussurro. Se il sussurro è stato inviato al GM senza utilizzare il suo nome mostrato (ad esempio, /w gm testo invece di /w Riley testo quando Riley è il GM), oppure se il sussurro è stato inviato a un personaggio senza alcun giocatore che lo controlli, il valore sarà gm.
nome_destinazione (digitare sussurro ) Il nome mostrato del giocatore o del personaggio a cui è stato inviato il sussurro.
selezionato Visualizzare i comandi "api" del lettore quando viene selezionato un elemento. Ogni voce è un oggetto semplice {_id, _type}, non un oggetto Roll20. Viene omesso quando il messaggio proviene da sendChat().
segreto false Ciò vale per i lanci di dadi e i messaggi segreti e ultra-segreti.
riservatezza "pubblica" "pubblico", "segreto" o "super".

I ruoli "segreti" e "super-segreti" utilizzano questi comandi (disponibili in entrambe le versioni sandbox):

  • /secretroll o /sr — il tipo è "secretrollresult", "secret" è vero, "secrecy" è "secret".
  • /supersecretroll o /ssr — il tipo è "supersecretrollresult", il segreto è vero, il livello di segretezza è "super".
  • /secret o /s seguito da un messaggio (ad esempio /secret [[1d6]]) — il tipo rimane "generale", "secret" è vero, il livello di riservatezza è "segreto". Forma segreta e sintetica di un tiro “sussurrato al GM”: il GM vede il risultato; chi effettua il tiro vede che è stato effettuato un tiro segreto.
  • /supersecret o /ss seguito da un messaggio — il tipo rimane "generale", il livello di segretezza è "vero", la riservatezza è "super".

/sr e /ssr sono comandi di rotazione. Non lo sono affatto ! comandi. Un messaggio che inizia con ! è di tipo "api".

Nota: Probabilmente non le occorrono tutte queste informazioni. Nella maggior parte dei casi, Le interesserà solo il risultato complessivo del lancio (vedere in fondo al primo esempio). Tuttavia, tutto ciò è disponibile se si desidera approfondire ulteriormente i risultati di un lancio.

Struttura dei risultati del lancio Es. 1

Dopo aver richiamato il metodo JSON.parse sulla proprietà "content" di un messaggio di tipo rollresult, gmrollresult, secretrollresult o supersecretrollresult, otterrà un oggetto con il seguente formato (questo è il risultato del comando /roll {2d6}+5+1t[weather] Attack!)


  "type":"V", //"V" = "Validated Roll" (al momento sarà sempre "V")
  "rolls": [
    {
      "type":"G", //"G" indica un roll raggruppato. Un gruppo può essere considerato come una serie di "sottogruppi" all'interno di un gruppo.
      "rolls": [
        [
          {
            "type":"R", //"R" = "Roll"
            "dice":2, // Numero di dadi lanciati (2dX significa 2 dadi)
            "sides":6, //Numero di facce del dado (Xd6 significa 6 facce)
            "mods":{},
            "results": [ //Una serie di risultati di ogni lancio.
              {
                "v":1 // Abbiamo ottenuto un 1 con il nostro primo lancio di 2d6
              },
              {
                "v":5 // Abbiamo ottenuto un 5 con il nostro secondo lancio di 2d6
              }
            ]
          }
        ]
      ],
      "mods":{},
      "resultType":"sum", //Il risultato è una somma (anziché una verifica di esito positivo)
      "results": [
        {
          "v":6 // In questo caso, il risultato complessivo (totale) del gruppo.
        }
      ]
    },
    {
      "type":"M", //"M" = Espressione matematica
      "expr":"+5+"
    },
    {
      "type":"R", //"R" = Tiro
      "dice":1,
      "table":"weather", //La proprietà table è impostata sul nome della tabella utilizzata se questo tiro è stato effettuato rispetto a una tabella
      "mods":{},
      "sides":2, //È possibile ignorare questa impostazione per i tiri da tavolo.
      "risultati": [
        {
          "v":0, //Il "valore" dell'articolo della tabella ottenuto. Per le tabelle di testo questo valore è sempre 0.
          "tableidx":1, //L'indice dell'articolo nella tabella che è stato rullato.
          "tableItem": { //Una copia dell'oggetto dell'articolo della tabella così come era presente al momento della creazione della tabella.
            "name":"rainy",
            "avatar":"", //Questo sarà l’URL di un’immagine qualora la tabella a scorrimento utilizzi icone grafiche
            "weight":1,
            "id":"-IpzPx2j_9piP09ceyOv"
          }
        }
      ]
    },
    {
      "type":"C", // "C" = Commento
      "text":" Attacco!"
    
  ],
  "resultType":"sum", //Il tipo di risultato complessivo dell'intero roll
  "total":11 // Il totale complessivo dell'intero roll (compresi tutti i sottogruppi)
}

Struttura dei risultati del lancio Es. 2

Una struttura annotata relativa al risultato di /roll {1d6!!>5}>6 (che mostra le modifiche da esplosione e i successi sul bersaglio):

{
  "type":"V",
  "rolls": [
    {
      "type":"G",
      "rolls": [
        [
          {
            "type":"R",
            "dice":1,
            "sides":6,
            "mods": { //Modifiche al lancio
              "compounding": { //"compounding" = "Esplosione composta (!!)"
                "comp":">=", //Tipo di confronto
                "point":5 //Punto di confronto
              }
            },
            "results": [
              {
                "v":13 //Risultato complessivo dei dadi. Si prega di notare che, poiché si tratta di un effetto cumulativo, è previsto un solo risultato del dado.
              }
            ]
          }
        ]
      ],
      "mods": {
        "success": {
          "comp":">=",
          "point":6
        }
      },
      "resultType":"sum",
      "results": [
        {
          "v":13
        }
      ]
    }
  ],
  "resultType":"success", // In questo caso, il risultato è un conteggio dei successi
  "total":1 //Numero totale di successi
}

Esempio di evento di chat (implementazione di un tipo di lancio personalizzato)

on("chat:message", function(msg) {
  // I giocatori digitano !d6 3 per lanciare quel numero di d6 con un obiettivo di 4.
  if (msg.type !== "api" || msg.content.indexOf("!d6 ") !== 0) return;
  var numdice = parseInt(msg.content.substring(4), 10);
  if (!numdice || numdice < 1) return;
  var who = msg.who.replace(/ \(GM\)$/, "");
  sendChat(who, "/roll " + numdice + "d6>4");
});

sendChat(speakingAs, input [,callback [, options]] )

È possibile utilizzare questa funzione per inviare un messaggio di chat.

parlando come può essere uno dei seguenti:

  • Qualsiasi stringa, che verrà utilizzata come nome della persona che ha inviato il messaggio. Ad esempio. "Riley"
  • L'ID di un giocatore, nel formato "player|-Abc123", dove -Abc123 rappresenta l'ID del giocatore. Se lo farete, verranno utilizzati automaticamente l'avatar del giocatore e il nome del giocatore.
  • L'ID di un personaggio, nel formato "personaggio|-Abc123". Se procedete in questo modo, verranno utilizzati automaticamente l'avatar e il nome del personaggio.

input deve essere un'espressione valida, proprio come quelle utilizzate nell'app Roll20. È possibile digitare del testo per inviare un messaggio semplice oppure utilizzare comandi con la barra, quali /roll, /em, /w, /secretroll (/sr), /supersecretroll (/ssr), /secret (/s), /supersecret (/ss), ecc. Inoltre:

  • È possibile utilizzare gli attributi dei caratteri nel formato @{CharacterName|AttributeName}.
  • È possibile utilizzare le abilità dei personaggi nel seguente formato: %{CharacterName|AbilityName}.
  • Non è possibile richiamare le macro da sendChat nel modo in cui un giocatore digita #NomeMacro. Quando si fa clic su un pulsante, è possibile eseguire una macro: [Nome](!&#13;#MacroName).
  • @{selected|...} non viene espanso all'interno di sendChat. Legga invece ` msg.selected ` nel gestore ` chat:message `.
  • I messaggi normali e i sussurri possono contenere i tag HTML riportati di seguito. /direct <msg> invia il messaggio senza Markdown e senza collegamento automatico degli URL, e consente di utilizzare gli stessi tag:
<codice><span><div><label><a><br><br /><p><b><i><del><strike><u><img>
<blockquote><mark><cite><small><ul><ol><li><hr><dl><dt><dd><sup>
<sub><big><pre><figure><figcaption><strong><em><table><tr><td><th>
<tbody><thead><tfoot><h1><h2><h3><h4><h5><h6>

callback è un terzo parametro facoltativo costituito da una funzione di callback alla quale verranno passati i risultati della chiamata a sendChat(), anziché inviare i comandi al gioco. L'utilizzo della funzione sendChat() in questo modo è asincrono. Il risultato del comando sendChat() sarà un ARRAY di operazioni e ogni singolo oggetto sarà identico a un oggetto ricevuto durante un evento chat:message (vedi sopra).

È possibile utilizzare questa funzione, ad esempio, per eseguire un tiro utilizzando il motore di tiro Roll20 e ottenere immediatamente i risultati del tiro. È quindi possibile apportare ulteriori modifiche al tiro prima di inviarlo ai giocatori nel gioco.

sendChat("Riley", "/roll 1d20+4", function(ops) {
  // ops sarà un ARRAY contenente i risultati del comando.
  var rollresult = ops[0];
  //Ora utilizzi rollresult, proprio come farebbe durante un evento "chat:message"...
});

opzioni è un quarto parametro facoltativo che consente di impostare le opzioni relative alla gestione del messaggio. Le opzioni vengono specificate come oggetto JavaScript le cui proprietà corrispondono ai nomi delle opzioni da impostare e i cui valori rappresentano le relative impostazioni; in genere sono impostate su "true", poiché il valore predefinito è "false".

Opzioni disponibili:

  • noarchive – impostare questo parametro su "true" per impedire che il messaggio venga salvato nell'storico della chat. Ciò risulta particolarmente utile per le informazioni che non fanno parte della trama, come i menu dei pulsanti degli script di mod e le informazioni sullo stato.
  • use3d – Ora è possibile generare lanci di dadi 3D utilizzando la funzione sendChat(). La sintassi è molto semplice: sendChat("Nome", "Lancio [[3d6]]", null, {use3d: true}); Se si passa un ID giocatore al parametro "nome", ad esempio sendChat("player|-ABC123",...), per i dadi verrà utilizzato il colore del giocatore. In caso contrario, verrà utilizzato il colore bianco predefinito.

Nota: i client possono visualizzare solo il risultato di un roll 3D alla volta, pertanto non è utile creare una serie di roll 3D separati in sequenza. Si noti inoltre che l'utilizzo dei roll 3D comporta un carico leggermente maggiore sul server Quantum Roll; vi invitiamo quindi a usare il buon senso ed evitare di eseguire 100 roll 3D nell'arco di un secondo. Utilizzate i tiri in 3D quando il risultato del tiro è rilevante per il giocatore e ha un impatto sul gioco.

Se desidera modificare queste opzioni ma non intende utilizzare un parametro di callback (terzo parametro – vedi sopra), può semplicemente passare `null` al suo posto:

sendChat("Stato", "Tutti i giocatori sono connessi.", null, {noarchive:true});

Pulsanti di comando dello script di mod

La formattazione della chat testuale, nei messaggi dello script Mod, nelle macro e nelle abilità, può generare pulsanti di comando nella chat.

Per farlo utilizzando la formattazione Markdown:

[Tiro per attaccare](!attackroll)

Il testo tra parentesi quadre apparirà nel pulsante, mentre la parte tra parentesi tonde rappresenta il comando da eseguire. È possibile includere qualsiasi elemento in un normale roll (macro, abilità, query, ecc.), ma si prega di tenere presente che il comando stesso verrà eseguito dal giocatore che fa clic su di esso. Ad esempio, non includa @{Character|AC} se tutti coloro che possono vedere il messaggio non hanno accesso a quel personaggio. Invece, si prega di includere il valore effettivo così come era al momento dell'invio del comando, inserendolo manualmente prima di inviare il messaggio di chat. Questi pulsanti funzionano nei messaggi generici, nei messaggi privati e nei sussurri inviati al GM. Il clic viene eseguito dal giocatore che lo effettua, con l’ID giocatore di tale giocatore e il giocatore stesso selezionato.

/direct ignora il Markdown, pertanto [Tiro di attacco](!attackroll) non verrà trasformato in un pulsante.

Inserimento dei pulsanti dello script del mod nella chat

È inoltre possibile digitare nella chat i pulsanti "Mod Script" con sintassi Markdown affinché gli altri possano utilizzarli. Poiché saranno interpretati dal parser della chat, se si desidera che gli attributi, le query e i roll vengano espansi quando si fa clic sul pulsante, è necessario inserire parti del comando con una sintassi speciale (entità HTML):

Personaggio Sostituzione
% &37;
) &N. 41;
? &N. 63;
@ &64;
[ &#91; oppure &lbrack;
] &#93; oppure &rbrack;
{ &#123;
} &#125;
| &#124;
, &#44;

Questo pulsante di esempio ne utilizza alcuni:

[Tiro per attaccare](!attackroll &#64;{target|token_id} &#91;[1d6+&#63;{Bonus|0}]&#93;)

È infatti possibile utilizzare i pulsanti dello script di mod per attivare macro o abilità.

Personaggio Sostituzione
<carriage return> &N. 13;

Per farlo, è sufficiente iniziare la parte relativa al comando con il codice speciale !&#13; quindi aggiungere la chiamata alla macro con # oppure la chiamata alla funzione con &#37; (%):

[Macro](!&#13;#MacroName)

[Abilità] (!&#13;&#37;{CharName|AbilityName})

Nota: Al momento, la riapertura di una macro salvata nella scheda "Collezioni" della barra laterale comporta il ripristino delle entità HTML in essa contenute; se la macro viene successivamente salvata, anche tali ripristini vengono salvati. Tale comportamento non si riscontra all’interno di Abilità né nei pulsanti di comando delle abilità.

Per i pulsanti di abilità, se l’abilità che crea il pulsante e l’abilità a cui fa riferimento si trovano entrambe su una stessa scheda, la sintassi è molto semplice:

[Abilità] (~AbilityName)

Questo articolo ti è stato utile?
Utenti che ritengono sia utile: 17 su 26