API: Objet

Il existe plusieurs types d'objets utilisés dans l'API Roll20. Voici une liste rapide de chaque type, de ce que c'est et des propriétés qu'il contient (avec leurs valeurs par défaut). En règle générale, les propriétés qui commencent par un trait de soulignement (_) sonten lecture seuleet ne peuvent pas être modifiées. Vous devez accéder aux propriétés des objets en utilisantobj.get("property")et définir de nouvelles valeurs en utilisantobj.set("property", newvalue)ouobj.set({property: newvalue, property2: newvalue2}).

Note :La propriétéidd'un objet est un identifiant unique à l'échelle mondiale : aucun objet ne doit avoir le même, même s'il s'agit d'un type d'objet différent. En outre, étant donné que l'identifiant d'un objet est fréquemment utilisé et qu'il ne change jamais, il existe un raccourci permettant d'y accéder en utilisantobj.idau lieu deobj.get("_id")si vous le souhaitez (l'un ou l'autre fonctionnera).


Voie:

Propriété Valeur par défaut Notes
_id  

Un identifiant unique pour cet objet. Unique à l'échelle mondiale parmi tous les objets
dans ce jeu. Lecture seule.

_type "voie" Peut être utilisé pour identifier le type d'objet ou rechercher l'objet
. Lecture seule.
_pageid    ID de la page dans laquelle l'objet se trouve. Lecture seule.
_path    A JSON string describing the lines in the path. Read-only, except when creating a new path. See the section on Paths for more information.
fill "transparent" Fill color. Use the string "transparent" or a hex color as a string, for example "#000000"
stroke "#000000" Stroke (border) color.
rotation 0 Rotation (in degrees).
layer "" Current layer, one of "gmlayer", "objects", "map", or "walls". The walls layer is used for dynamic lighting, and paths on the walls layer will block light.
stroke_width 5  
width 0  
height 0  
top 0 Y-coordinate for the center of the path
actuelle 0 X-coordinate pour le centre du chemin
scaleX 1  
scaleY 1  
controlledby ""

Liste des identifiants des joueurs séparés par des virgules qui peuvent contrôler le chemin. Les joueurs qui ont le contrôle peuvent supprimer le chemin. Si le chemin a été créé par un joueur, ce joueur est automatiquement inclus dans la liste.

Tous les joueurs est représenté en ayant 'all' dans la liste.

barrierType "mur"

Les options de type de barrière d'éclairage dynamique incluent "mur", "un sens", et "transparent"

un sens inversé faux

booléen

Pour plus d'informations sur le format de_pathdonnées, consultez la section sur les chemins.

 


Fenêtre

Remarque : Les fenêtres et les portes utilisent un axe inversé par rapport à d'autres types d'objets. Par exemple, une variable top qui serait 100 pour un autre objet est y -100 pour une fenêtre ou une porte.

Propriété Valeur par défaut Notes
_id   Un identifiant unique pour cet objet. Globalement unique à travers tous les objets de ce jeu. Lecture seule.
_type "fenêtre" Lecture seule.
couleur   Une couleur hexadécimale du chemin.
x 0 Centre de coordonnées de la porte sur l'axe x.
y 0 Centre de coordonnées de la porte sur l'axe y.
isOpen false Détermine si un joueur peut passer à travers cette fenêtre.
isLocked false Empêche les joueurs d'interagir avec la fenêtre.
path   Représenté par deux poignées (poignée0 et poignée1) chacune avec des coordonnées x et y.

Example

on('chat:message', function(msg) {
    if (msg.type === 'api' && msg.content === '!cw') {
        const currentPageID = Campaign().get('playerpageid');
        const win = createObj('window', {
            x: 70,
            y: -70,
            pageid: currentPageID,
            path: {
		        handle0: {
        			x: -70,
        			y: 0,
        		},
        		handle1: {
        			x: 35,
        			y: 0,
        		},
        	},
            color: '#000000'
        });
    }

    if (msg.type === 'api' && msg.content === '!mw') {
        const win = getObj('window', '-NG38yUgghBBoV8YR0y1');
        win.set({
           x: 240,
           y: -139
        });
    }

    if (msg.type === 'api' && msg.content === '!dw') {
        const win = getObj('window', '-NG38yUgghBBoV8YR0y1');
        win.remove();
    }
});

Portes

Note: Les fenêtres et les portes utilisent un axe inversé par rapport aux autres types d'objets. Par exemple, une variable supérieure qui serait de 100 pour un autre objet est y -100 pour une fenêtre ou une porte.

Propriété

Valeur par défaut

Notes

_id

 

Un identifiant unique pour cet objet. Unique à l'échelle globale parmi tous les objets de ce jeu. Lecture seule.

_type

“door”

Lecture seule.

color

 

Une couleur hexadécimale du chemin.

x

0

Coordonnée du centre de la porte sur l'axe des x.

y

0

Coordonnée du centre de la porte sur l'axe des y.

isOpen

false

Détermine si un joueur peut passer à travers cette porte.

isLocked

faux

Empêche les joueurs de pouvoir interagir avec la porte.

isSecret

faux

Supprime une icône de porte de la vue du joueur et fonctionne comme une barrière.

chemin

 

Représenté comme deux poignées (handle0 et handle1) chacune avec les coordonnées x et y.


Texte

Propriété Valeur par défaut Notes
_id   Un identifiant unique pour cet objet. Unique dans l'ensemble des objets de ce jeu. En lecture seule.
type "texte" Peut être utilisé pour identifier le type d'objet ou rechercher l'objet. En lecture seule.
pageid   ID de la page dans laquelle se trouve l'objet. En lecture seule.
sommet 0  
gauche 0  
largeur 0  
hauteur 0  
texte ""  
taille_de_police 16 Pour de meilleurs résultats, respectez les tailles prédéfinies dans le menu d'édition : 8, 10, 12, 14, 16, 18, 20, 22, 26, 32, 40, 56, 72, 100, 200, 300.
rotation 0  
couleur "rgb(0, 0, 0)"  
famille_de_polices "Arial Si ce paramètre n'est pas défini, lorsque la valeur de la propriété "text" sera modifiée ultérieurement, la taille de la police sera ramenée à 8. Valeurs possibles (la casse n'est pas importante) : "Arial", "Patrick Hand", "Contrail One", "Shadows Into Light" et "Candal". Spécifier un nom invalide entraîne l'utilisation d'une police de caractères sans nom, en serif monospace.
calque "" "gmlayer", "objects", "map" ou "walls".
controlledby "" Liste séparée par des virgules des identifiants des joueurs pouvant contrôler le texte. Les joueurs contrôlants peuvent supprimer le texte. Si le texte a été créé par un joueur, ce joueur est automatiquement inclus dans la liste.

Tous les joueurs sont représentés en ajoutant 'all' à la liste.


Graphique (Jetons/Carte/Plateau/Etc.)

Propriété Valeur par défaut Notes
_id   Un identifiant unique pour cet objet. Unique dans tous les objets de ce jeu. Lecture seule.
_type "graphique" Peut être utilisé pour identifier le type d'objet ou rechercher l'objet. Lecture seule.
_subtype "jeton" Peut être "token" (pour les jetons et les cartes) ou "card" (pour les cartes). Lecture seule.
_cardid   Défini à un identifiant si le graphique est une carte. Lecture seule.
_pageid   Identifiant de la page dans laquelle se trouve l'objet. Lecture seule.
imgsrc   L'URL de l'image du graphique. Voir la note sur imgsrc et les restrictions d'avatar ci-dessous.
bar1_link   Défini comme un ID si la barre 1 est liée à un personnage.
bar2_link    
bar3_link    
représente   ID du personnage que ce jeton représente.
gauche 0 Nombre de pixels entre le bord gauche de la carte et le centre du graphique.
sommet 0 Nombre de pixels entre le bord supérieur de la carte et le centre du graphique.
largeur 0 Largeur de la graphique, en pixels.
hauteur 0 Hauteur de la graphique, en pixels.
rotation 0 L'orientation du jeton en degrés.
calque "" "gmlayer", "objects", "map", ou "walls".
isdrawing faux Cette propriété est modifiée à partir du menu contextuel Avancé.
flipv false Inversion verticale.
fliph false Inversion horizontale.
name "" Le nom du jeton.
gmnotes "" Notes sur le jeton uniquement visibles par le MJ.
controlledby "" Comma-delimited list of player IDs who can control the graphic. Controlling players may delete the graphic. If the graphic was created by a player, that player is automatically included in the list.

All Players is represented by having 'all' in the list.

bar1_value "" Valeur actuelle de la Barre 1. Cela peut être un nombre ou du texte.
bar2_value ""  
bar3_value ""  
bar1_max "" Valeur maximale de la Barre 1. Si _value et _max sont tous les deux définis, une barre peut être affichée au-dessus du jeton montrant le pourcentage de la Barre 1.
bar2_max ""  
bar3_max ""  
aura1_radius "" Rayon de l'aura, en utilisant les unités définies dans les paramètres de la page. Peut être un entier ou un nombre à virgule. Défini sur une chaîne vide pour effacer l'aura.
aura2_radius ""  
aura1_color "#FFFF99" Une couleur hexadécimale ou l'aura.
aura2_color "#59E594"  
aura1_square faux L'aura est-elle un cercle ou un carré?
aura2_square faux  
tint_color "transparente" Couleur hexadécimale, ou "transparente". Teintera la couleur du graphique.
statusmarkers "" Une liste séparée par des virgules des statusmarkers actuellement actifs. Voir les notes ci-dessous pour plus d’informations.
token_markers "" Un tableau JSON crypté contenant un objet pour chaque marqueur de jeton actuellement dans le jeu:. Vous trouverez ci-dessous un exemple.
showname false Indique si le nom du jeton est affiché.
showplayers_name false Affiche la plaque signalétique à tous les joueurs.
showplayers_bar1 false Affiche la Barre 1 à tous les joueurs.
Afficher/Masquer la Barre de joueurs 2 false  
Afficher/Masquer la Barre de joueurs 3 false  
Afficher/Masquer l'Aura N°1 aux joueurs. false Afficher l'Aura N°1 à tous les joueurs.
Afficher/Masquer l'Aura N°2 aux joueurs. false  
Modifier le nom des joueurs true Autoriser les joueurs contrôlants à modifier le nom du pion. Affiche également la plaque signalétique aux joueurs contrôlants, même si showplayers_name est faux.
playersedit_bar1 true Autoriser les joueurs contrôlants à modifier la Barre 1 du pion. Affiche également la Barre 1 aux joueurs contrôlants, même si showplayers_bar1 est faux.
playersedit_bar2 true  
playersedit_bar3 true  
playersedit_aura1 vrai Permet aux joueurs qui le contrôlent de modifier l'Aura du jeton 1. Montre également l'Aura 1 aux joueurs qui contrôlent, même si showplayers_aura1 est faux.
playersedit_aura2 vrai  
rayon_lumière "" Rayon d'éclairage dynamique.
light_dimradius "" Début du rayon d'éclairage faible. Si light_dimradius est une chaîne vide, le jeton émettra une lumière vive jusqu'à la distance light_radius. Si light_dimradius a une valeur, le jeton émettra une lumière vive jusqu'à la valeur light_dimradius, et une lumière tamisée de là jusqu'à la valeur light_radius.
light_otherplayers faux Affichez la lumière du jeton à tous les joueurs.
light_hassight faux La lumière possède un "sight" pour les joueurs contrôlants aux fins du paramètre "Enforce Line of Sight".
light_angle "360" Angle (in degrees) of the light's angle. For example, "180" means the light would show only for the front "half" of the "field of vision".
light_losangle "360" Angle (in degrees) of the field of vision of the graphic (assuming that light_hassight is set to true)
lastmove "" The last move of the token. It's a comma-delimited list of coordinates. For example, "300,400" would mean that the token started its last move at left=300, top=400. It's always assumed that the current top + left values of the token are the "ending point" of the last move. Les points de passage sont indiqués par plusieurs ensembles de coordonnées. Par exemple, "300,400,350,450,400,500" indiquerait que le jeton a commencé à gauche=300, en haut=400, puis a défini un point de passage à gauche=350, en haut=450, un autre point de passage à gauche=400, en haut=500, puis a terminé le déplacement à ses coordonnées actuelles (haut + gauche).
light_multiplier "1" Multiplicateur de l'efficacité des sources de lumière. Un multiplicateur de deux permettrait au jeton de voir deux fois plus loin qu'un jeton avec un multiplicateur de un, avec la même source de lumière.
adv_fow_view_distance "" The radius around a token where Advanced Fog of War is revealed.
light_sensitivity_multiplier 100 Multiplier on the effectiveness of light sources. A multiplier of 200 would allow the token to see twice as far as a token with a multiplier of 100, with the same light source.
night_vision_effect
  Changes the Night Vision Effect. Other options include “Dimming” and “Nocturnal”
bar_location   Adjusts the location of the token bars. Les options incluent 'overlap_top', 'overlap_bottom','bottom'
compact_bar
  Ajuste si la barre est compacte ou non. Une autre option est compacte.
lockMovement false Une option pour verrouiller un graphique en place. Valeur booléenne true ou false

Icônes de jeton Example

{
          "id":59, // l'id de la base de données pour le
          "name":"Bane", // le nom (non-unique) du marqueur
          "tag":"Bane::59", // comment le jeton est référencé
          // cela inclura l'id pour les marqueurs personnalisés, mais pas
          // pour les marqueurs par défaut.
          "url":"https://s3.amazonaws.com/files.d20.io/images/59/yFnKXmhLTtbMtaq-Did1Yg/icon.png?1575153187"
// ^l'url de l'image du marqueur de jeton }

Notes importantes sur les personnages et les jetons liés

Notez que pour les jetons liés aux personnages, le champcontrolledby sur le jeton est remplacé par le champcontrolledby du personnage.

Pour les barres de jetons (par exemplebar1_valueetbar1_max) dont le jeton est lié à un attribut (par exemplebar1_linkest défini), la définition d'une valeur pour la barre mettra automatiquement à jour les valeurscurrentet/oumaxde l'attribut sous-jacent, de sorte que vous n'aurez pas à définir les deux manuellement.

En outre, lorsque l'attribut (ou la barre de jetons) est modifié(e) dans le jeu, vous entendrez un événementchange:attribute(et une propriété spécifique, par exemplechange:attribute:current), suivi d'un événementchange:graphic(etchange:graphic:bar1_value). Vous pouvez choisir de répondre à l'un ou l'autre événement, mais les valeurs de la barre sous-jacente ne seront pas encore mises à jour lorsque l'événement d'attribut se déclenche, car il se déclenche en premier.

Notes importantes sur les marqueurs de statut

À partir du 6 août 2013, la manière dont les marqueurs de statut sur les jetons sont gérés a changé. La propriété "statusmarkers" de l'objet Graphique est désormais une liste de tous les couleurs/icônes de marqueurs de statut qui doivent être actifs sur le jeton, séparée par des virgules. Le format est le suivant :

//Séparé par des virgules (utilisez join pour créer ou split pour transformer en tableau). 
//Si une icône/couleur de statut est suivie d'un symbole "@", le nombre après
//"@" sera affiché comme badge sur l'icône statusmarkers = "rouge,bleu,crâne,mort,marron@2,vert@6"

Bien que vous puissiez accéder directement à la propriétéstatusmarkers, nous fournissons un ensemble de propriétés "virtuelles" sur l'objet que vous pouvez définir/obtenir pour travailler avec les marqueurs d'état, afin de maintenir la compatibilité ascendante avec les scripts existants et de fournir un moyen facile de travailler avec les marqueurs d'état sans avoir besoin d'écrire du code pour gérer la division et l'analyse de la chaîne de caractères vous-même. Chaque marqueur d'état a une propriété "status_<markername>" . Par exemple :

obj.get("status_red"); // Renvoie false si le marqueur n'est pas actif, true sinon, et une chaîne (i.e. "2" ou "5") si un badge est actuellement défini sur le marqueur
obj.get('status_bluemarker'); // Est encore pris en charge pour la compatibilité ascendante, et est équivalent à faire obj.get("status_blue");
obj.set("status_red", false); // retirerait le marqueur
obj.set("status_skull", "2"); // définitrait un badge "2" sur l'icône tête de mort et l'ajouterait au jeton s'il n'est pas déjà actif.

Notez que ces propriétés virtuelles n'ont pas d'événements, vous devez donc utiliserchange:graphic:statusmarkerspour écouter les changements des marqueurs d'état d'un jeton, et par exemplechange:graphic:status_redn'est PAS un événement valide et ne se déclenchera jamais.

Voici la liste complète des marqueurs d'état disponibles (dans le même ordre qu'ils apparaissent dans le plateau de marqueurs) :

"rouge", "bleu", "vert", "brun", "violet", "rose", "jaune", "mort", "crâne", "endormi", "demi-cœur", "demi-folie", "interdiction", "escargot", "hélice foudroyante", "clé à molette", "cœur enchaîné", "boulon chimique", "zone de mort", "buvez-moi", "fissure du bord", "masque de ninja", "chronomètre", "filet de pêche", "surmultipliée", "forte", "poing", "cadenas", "trois feuilles", "aile duveteuse", "pilonné", "piétiné", "fléché", "aura", "mal de dos", "drapeau noir", "oeil saignant", "bouclier à boulons", "coeur brisé", "toile d'araignée", "bouclier brisé", "drapeau volant", "radioactif", "trophée", "crâne brisé", "orbe gelé", "bombe roulante", "tour blanche", "saisir", "crier", "grenade", "fusil de sentinelle", "tout pour un", "tenue d'ange", "cible de tir à l'arc"

Page

Propriété Valeur par défaut Notes
_id   Un identifiant unique pour cet objet. Unique au monde pour tous les objets de ce jeu. En lecture seule.
type "page" Peut être utilisé pour identifier le type d'objet ou rechercher l'objet. Lecture seule.
_zorder "" Liste des ID séparés par des virgules spécifiant l'ordre des objets sur la page. vers l'avant et vers l'arrière (et leurs éléments de menu contextuel associés) peuvent réorganiser cette liste. Lecture seule.
name "" Titre de la page.
showgrid true Afficher la grille sur la carte.
showdarkness false Afficher le brouillard de guerre sur la carte.
showlighting false Utiliser l'éclairage dynamique.
width 25 Largeur en unités.
height 25 Taille en unités.
incrément_capture 1 Taille de l'espace de la grille en unités.
opacité de la grille 0.5 Opacité des lignes de la grille.
opacité_brouillard 0.35 Opacité du brouillard de guerre pour le GM.
couleur_de_fond "#FFFFFF" Couleur hexadécimale de l'arrière-plan de la carte.
couleur de la grille "#C0C0C0" Couleur hexadécimale des lignes de la grille.
type de grille "carré" L'un des choix suivants : "square", "hex" ou "hexr". (hex correspond à Hex(V), et hexr correspond à Hex(H))
numéro d'échelle 5 La distance d'une unité.
unités_échelle "ft" Le type d'unités à utiliser pour l'échelle.
gridlabels false Afficher les étiquettes de la grille pour une grille hexagonale.
diagonaltype "foure" L'un des "foure", "pythagorean" (Euclidienne), "threefive" ou "manhattan".
archived false Si la page a été archivée.
lumièreupdatedrop faux Ne mettre à jour l'éclairage dynamique que lorsqu'un objet est déposé.
lightenforcelos faux Faire respecter la ligne de visée des objets.
légertrestrictmove faux Ne permettez pas aux objets qui ont une vue de se déplacer à travers les murs de l'éclairage dynamique.
lightglobalillum faux Si c'est vrai, partout où un jeton peut "voir", on suppose qu'il y a une lumière vive.
gâchette du juke-box   Contrôle la lecture de la page au chargement. Options include ‘nonestopall’ or the id-of-the-track

Campagne

Propriété Valeur par défaut Notes
_id "root" A unique ID for this object. Globally unique across all objects in this game. Read-only.
_type "campaign" Can be used to identify the object type or search for the object — however, note that there is only one Campaign object, and it can be accessed via Campaign(). Joueur:
ordre de tour "" Une chaîne JSON de l'ordre de tour Voir ci-dessous.
page d'initiative false ID de la page utilisée pour le suivi lorsque la fenêtre de l'ordre de tour est ouverte. Lorsque défini surfaux, la fenêtre de l'ordre de tour se ferme.
IDpagejoueur false ID de la page sur laquelle le signet du joueur est défini. Les joueurs voient cette page par défaut, à moins d'être remplacée par des pages spécifiques aux joueurs ci-dessous.
pages spécifiques aux joueurs false Un objet (PAS UNE CHAÎNE JSON) du format : {"player1_id": "page_id", "player2_id": "page_id" ... } Tout joueur réglé sur une page dans cet objet remplacera l'identifiant de page joueur.
_dossierjournal "" Une chaîne JSON qui contient des données sur la structure des dossiers du jeu. En lecture seule.
_dossiermp3 "" Une chaîne JSON qui contient des données sur la structure des listes de lecture du jukebox du jeu. Lecture seule.

 Ordre de tour

L'ordre de tour est une chaîne JSON représentant la liste de l'ordre de tour actuel. Il s'agit d'un tableau d'objets. Actuellement, l'ordre de tour ne peut contenir que des objets d'une seule page à la fois - l'ID de page actuelle pour l'ordre de tour est l'attribut "initiativepage". Assurez-vous de les maintenir tous les deux synchronisés, sinon vous pourriez obtenir des résultats étranges.

Pour travailler avec l'ordre de tour, vous voudrez utiliserJSON.parse()pour obtenir un objet représentant l'état actuel de l'ordre de tour (REMARQUE: Vérifiez d'abord qu'il ne s'agit pas d'une chaîne vide""... s'il l'est, initialisez-le vous-même avec un tableau vide). Voici un exemple d'objet d'ordre de tour:

[
    {
     "id":"36CA8D77-CF43-48D1-8682-FA2F5DFD495F", //L'ID de l'objet graphique. Si cela est défini, la liste de l'ordre de tour récupérera automatiquement le nom et l'icône de la liste en fonction de l'objet graphique sur la table.
     "pr":"0", //La valeur actuelle de l'élément dans la liste. Peut être un nombre ou du texte.
     "custom":"" //Titre personnalisé pour l'élément. Sera ignoré si l'ID est défini sur une valeur autre que "-1".
    },
    {
     "id":"-1", //Pour les éléments personnalisés, l'ID DOIT être défini sur "-1" (notez que c'est une CHAÎNE, pas un NOMBRE.
     "pr":"12",
     "custom":"Test Custom" //Le nom à afficher pour les éléments personnalisés.
    }
]

Pour modifier l'ordre de passage, modifiez l'objet "ordre de passage" actuel, puis utilisezJSON.stringify()pour modifier l'attribut de la campagne. Notez que l'ordre des tours dans la liste est le même que l'ordre du tableau. Par exemple,push()ajoute un élément à la fin de la liste,unshift()l'ajoute au début, etc.

var turnorder;
if(Campaign().get("turnorder") == "") turnorder = []; //NOTE: We check to make sure that the turnorder isn't just an empty string first. If it is treat it like an empty array.
else turnorder = JSON.parse(Campaign().get("turnorder"));

//Add a new custom entry to the end of the turn order.
turnorder.push({
    id: "-1",
    pr: "15",
    custom: "Turn Counter"
});
Campaign().set("turnorder", JSON.stringify(turnorder));
 

Player

Propriété Valeur par défaut Notes
_id   A unique ID for this object. Globally unique across all objects in this game. Read-only.
_type "joueur" Peut être utilisé pour identifier le type d'objet ou rechercher l'objet. En lecture seule.
_d20userid   ID de l'utilisateur - pour l'ensemble du site. Par exemple, la page utilisateur du joueur sur le wiki est /User :ID, où ID est la même valeur que celle stockée dans _d20userid. En lecture seule.
Nom d'affichage "" Nom d'affichage actuel du joueur. Peut être modifié à partir de la page des paramètres de l'utilisateur. En lecture seule.
en ligne faux En lecture seule.
page d'accueil "" L'identifiant de la dernière page consultée par le joueur en tant que MJ. Cette propriété n'est pas mise à jour pour les joueurs ou les MJ qui se sont inscrits en tant que joueurs. En lecture seule.
Macrobar "" Chaîne de macros délimitée par des virgules dans la barre de macros du lecteur. En lecture seule.
parlercomme "" L'ID du joueur ou du personnage que le joueur a sélectionné dans la liste déroulante "En tant que". Lorsque réglé sur une chaîne vide, le joueur parle en son nom propre. Lorsque réglé sur un personnage, la valeur est "character|ID", où ID est l'ID du personnage. Lorsque le MJ parle au nom d'un autre joueur, la valeur est "player|ID", où ID est l'ID du joueur.
couleur "#13B9F0" La couleur du carré à côté du nom du joueur, ainsi que la couleur de ses mesures sur la carte, de ses cercles de ping, etc.
affichermacrobarre faux Afficher ou non la barre de macro du joueur.

Macro

Propriété Valeur par défaut Notes
_id   Un identifiant unique pour cet objet. Unique à l'échelle mondiale parmi tous les objets de ce jeu. Lecture seule.
_type "macro" Peut être utilisé pour identifier le type d'objet ou rechercher l'objet. Lecture seule.
_playerid   L'ID du joueur qui a créé cette macro. En lecture seule.
nom "" Nom de la macro.
action "" Le texte de la macro.
visible pour "" Liste délimitée par des virgules d'ID de joueurs qui peuvent visualiser la macro en plus du joueur qui l'a créée.

Tous les joueursest représenté par "tous" dans la liste.

istokenaction faux Est-ce que cette macro est une action de jeton qui devrait s'afficher lorsque des jetons sont sélectionnés?

 


Table lancable

Propriété Valeur par défaut Notes
_id   Un identifiant unique pour cet objet. Un identifiant unique dans tous les objets de ce jeu. Lecture seule.
_type "rollabletable" Peut être utilisé pour identifier le type d'objet ou rechercher l'objet. Lecture seule.
nom "nouvelle-table"  
afficherjoueurs vrai  

Élément de Table 

Propriété Valeur par défaut Notes
_id   Un identifiant unique pour cet objet. Unique à l'échelle mondiale pour tous les objets de ce jeu. Lecture seule.
_type "objetdetable" Peut être utilisé pour identifier le type d'objet ou rechercher l'objet. Lecture seule.
_rollabletableid "" ID de la table à laquelle cet élément appartient. Lecture seule.
avatar "" URL vers une image utilisée pour l'élément de table. Voir la note sur les restrictions de l'avatar et de imgsrc ci-dessous.
nom ""  
poids 1 Poids de l'élément de table par rapport aux autres éléments de la même table. Simply put, an item with weight 3 is three times more likely to be selected when rolling on the table than an item with weight 1.

Caractère

Propriété Valeur par défaut Notes
_id   Un identifiant unique pour cet objet. Unique dans tous les objets de ce jeu. Lecture seule.
_type "character" Peut être utilisé pour identifier le type d'objet ou rechercher l'objet. Lecture seule.
avatar "" URL vers une image utilisée pour le personnage. Voir la note ci-dessous concernant les restrictions d'avatar et d'imgsrc.
nom ""  
approche "" La biographie du personnage. Voir la note ci-dessous concernant l'accès aux champs Notes, GMNotes et bio.
GMNotes "" Notes sur le personnage visibles uniquement par le MJ. Voir la note ci-dessous concernant l'accès aux champs Notes, GMNotes et bio.
archivé faux  
inplayerjournals "" Liste de joueurs séparés par des virgules qui peuvent voir ce personnage. Utilisez "all" pour donner à tous les joueurs la possibilité de voir.

Tous les joueurssont représentés en ayant 'all' dans la liste.

controlledby "" Liste de joueurs séparés par des virgules qui peuvent contrôler et modifier ce personnage. Utilisez "all" pour donner à tous les joueurs la possibilité de modifier.

Tous les joueurssont représentés en ayant 'all' dans la liste.

_defaulttoken "" Une chaîne JSON contenant les données du jeton par défaut du personnage si un tel jeton est défini. Notez que ceci est un "blob" similaire à "bio" et "notes", donc vous devez passer une fonction de rappel à get(). Lecture seule.

Attribut

Propriété Valeur par défaut Notes
_id   Un ID unique pour cet objet. Unique à travers tous les objets de ce jeu. Lecture seule.
_type "attribut" Peut être utilisé pour identifier le type d'objet ou rechercher l'objet. Lecture seule.
_characterid "" ID du personnage auquel appartient cet attribut. En lecture seule. Obligatoire lors de l'utilisation decreateObj.
name "Sans titre  
actuel "" La valeur actuelle de l'attribut est accessible dans le chat et les macros avec la syntaxe@{Character Name|Attribute Name}ou dans les capacités avec la syntaxe@{Attribute Name}.
max "" La valeur maximale de l'attribut est accessible dans le chat et les macros avec la syntaxe@{Character Name|Attribute Name|max}ou dans les capacités avec la syntaxe@{Attribute Name|max}.

 Important : Voir la note ci-dessous sur l'utilisation des feuilles de caractères pour savoir comment les valeurs par défaut des feuilles de caractères affectent l'utilisation des attributs.


Capacité

Propriété Valeur par défaut Notes
_id   Un identifiant unique pour cet objet. Unique au monde pour tous les objets de ce jeu. En lecture seule.
type "capacité" Peut être utilisé pour identifier le type d'objet ou rechercher l'objet. En lecture seule.
Caractère "" Le personnage à qui appartient cette capacité. En lecture seule. Obligatoire lors de l'utilisation decreateObj.
nom "Untitled_Ability"  
description "" La description n'apparaît pas dans l'interface de la feuille de personnage.
action "" Le texte de la capacité.
istokenaction faux Cette capacité est-elle une action de jeton qui doit apparaître lorsque des jetons liés à son personnage parent sont sélectionnés ?

Document à distribuer

Propriété Valeur par défaut Notes
_id   Un identifiant unique pour cet objet. Unique au monde pour tous les objets de ce jeu. En lecture seule.
type "polycopié" Peut être utilisé pour identifier le type d'objet ou rechercher l'objet. En lecture seule.
avatar "" URL d'une image utilisée pour le polycopié. Voir la note sur les restrictions relatives aux avatars et aux imgsrc ci-dessous.
nom "Note mystérieuse  
notes "" Contient le texte du polycopié. Voir la note ci-dessous concernant l'utilisation de Notes et de GMNotes.
gmnotes "" Contient le texte du document que seul le MJ voit. Voir la note ci-dessous concernant l'utilisation de Notes et de GMNotes.
journaux inplayer "" Liste délimitée par des virgules des identifiants des joueurs qui peuvent voir ce document. Utilisez "tous" pour afficher tous les joueurs.

Tous les joueursest représenté par "tous" dans la liste.

archivé faux  
contrôlé par "" Liste délimitée par des virgules des identifiants des joueurs qui peuvent contrôler et modifier ce document.

Tous les joueursest représenté par "tous" dans la liste.

Remarque :L'API n'a pas accès à la hiérarchie des dossiers. Les documents créés par l'API seront placés au niveau de la racine.


Pont

Notez qu'il existe des méthodes API d'assistance pour "tirer", "distribuer" ou "mélanger" les cartes du jeu. VoirAPI Update forum post from March 2018.

Propriété Valeur par défaut Notes
_id "" Identité du pont
type "pont"  
nom "" nom du jeu
pont en cours "" une liste de cartes délimitée par des virgules qui se trouvent actuellement dans le jeu (y compris celles qui ont été jouées sur la table ou dans les mains). Change lorsque le jeu est mélangé.
Indice actuel -1 l'indice actuel de notre place dans le jeu, "quelle carte sera tirée ensuite ?
Carte actuelle affichée vrai afficher la carte actuelle sur le dessus du jeu
showplayers vrai montrer le jeu aux joueurs
joueurscandraw vrai les joueurs peuvent-ils tirer des cartes ?
avatar "" le "dos" des cartes de ce jeu
montré faux afficher la pioche sur le plateau de jeu (la pioche est-elle actuellement visible ?)
joueurs_seenumcards vrai Les joueurs peuvent-ils voir le nombre de cartes dans les mains des autres joueurs ?
joueurs_seefrontofcards faux Les joueurs peuvent-ils voir le recto des cartes lorsqu'ils regardent les mains des autres joueurs ?
gm_seenumcards vrai Le GM peut-il voir le nombre de cartes dans la main de chaque joueur ?
gm_seefrontofcards faux Le GM peut-il voir le recto des cartes lorsqu'il regarde la main de chaque joueur ?
cartes infinies faux y a-t-il un nombre 'infini' de cartes dans ce deck ?
_cardSequencer -1 utilisé en interne pour faire avancer le deck lors de la distribution des cartes.
cartesjouées "facevisible" comment les cartes de ce deck sont-elles jouées sur la table ? 'facevisible' ou 'retourner'.
hauteurdéfaut "" quelle hauteur défaut pour les cartes jouées sur la table ?
largeur par défaut ""  
mode de rejet du profil "aucun" Quel est le type de pile de défausse de ce jeu ? 'none' = pas de pile de défausse, 'choosebacks' = permettre aux joueurs de voir le dos des cartes et d'en choisir une, 'choosefronts' = voir le devant des cartes et choisir, 'drawtop' = tirer la carte la plus récemment défaussée, 'drawbottom' = tirer la carte la plus anciennement défaussée.
pile de rejets "" Le jeu est un jeu d'enfant, c'est un jeu d'enfant, c'est un jeu d'enfant. liste de cartes délimitée par des virgules. Il s'agit de cartes qui ont été retirées du jeu et qui ne seront pas remises dans le jeu lors d'un mélange jusqu'à ce qu'un rappel soit effectué.

Carte

Propriété Valeur par défaut Notes
nom "" Nom de la carte
avatar "" Face de la carte
_deckid "" ID du deck
_type "carte"  
_id ""  

Man

Notez que chaque joueur ne devrait avoir QU'UNE seule main.

Propriété Valeur par défaut Notes
currentHand "" liste séparée par des virgules des cartes actuellement dans la main. Notez que ceci n'est plus en lecture seule. Idéalement, cela devrait seulement être ajusté à l'aide des fonctions de jeu de cartes.
_type "hand"  
_parentid "" ID du joueur à qui appartient la main
_id ""  
currentView "bydeck" quand le joueur ouvre la main, est la vue 'par deck' ou 'par carte'?

Piste de jukebox

Propriété Valeur par défaut Notes
_id   Un identifiant unique pour cet objet. Unique à l'échelle globale dans tous les objets de ce jeu. Lecture seule.
_type "jukeboxtrack" Peut être utilisé pour identifier le type d'objet ou rechercher l'objet. Lecture seule.
joue à faux Boolean utilisé pour déterminer si la piste est en lecture ou non. Définir ceci sur "true" et softstop sur "false" joue une piste.
softstop faux Boolean utilisé pour déterminer si une piste non bouclée s'est terminée au moins une fois. Ceci doit être défini sur "false" pour s'assurer qu'une piste sera lue.
titre "" L'étiquette visible de la piste dans l'onglet jukebox.
volume 30 Le niveau de volume de la piste. Notez qu'il doit s'agir d'un entier (et non d'une chaîne), sous peine d'interrompre la fonctionnalité. Valeurs de 0 à 100 (pourcentage).
boucle faux La piste doit-elle être bouclée ? Si c'est le cas, la valeur est fixée à true.

Custom FX

Propriété Valeur par défaut Notes
_id   Un identifiant unique pour cet objet. Unique au monde pour tous les objets de ce jeu. En lecture seule.
type "custfx" Peut être utilisé pour identifier le type d'objet ou rechercher l'objet. En lecture seule.
nom "" Le nom visible de la bourse dans la liste des bourses.
définition {} Objet Javascript décrivant le FX.

restrictions des propriétés imgsrc et avatar

Bien que vous puissiez désormais modifier les propriétésimgsrcetavatar, nous avons mis en place les restrictions suivantes pour ces propriétés afin d'assurer la sécurité de tous les utilisateurs de Roll20 :

  • Vous devez utiliser un fichier image téléchargé dans votre bibliothèque Roll20 - pas un site externe (comme Imgur) et pas le Marché Roll20. Il commencera par 'https://s3.amazonaws.com/files.d20.io/images/' pour les images téléchargées vers le serveur principal, ou 'https://s3.amazonaws.com/files.staging.d20.io/images/' pour les images téléchargées vers le serveur de développement. Vous pouvez consulter l'URL source d'une image en utilisant les outils de développement de votre navigateur.


À l'avenir, nous pourrions ajouter un outil pour permettre le téléchargement d'images spécifiquement pour une utilisation avec les scripts API, mais pour l'instant, utilisez simplement des images téléchargées dans votre propre bibliothèque. Notez que si vous supprimez une image de votre bibliothèque, elle sera supprimée de tous les jeux qui utilisent cette image, y compris les jeux utilisant vos scripts API.


Utilisation des champs Notes, GMNotes et Bio de manière asynchrone

Pour accéder aux champs "notes", "gmnotes" ou "bio" des personnages et des documents, vous devez passer une fonction de rappel en tant que deuxième argument de la fonction get(). Voici un exemple:

var character = getObj("character", "-JMGkBaMgMWiQdNDwjjS");
character.get("bio", function(bio) {
    log(bio); //do something with the character bio here.
});

Vous pouvez définir la valeur de ces champs normalement. Notez qu'il existe actuellement (au 09/05/2016) un bug avec ces champs asynchrones, où les définir en passant des valeurs à createObj échoue silencieusement, laissant l'objet dans un état étrange. Vous ne devriez définir ces valeurs qu'en utilisant .set jusqu'à ce que ce problème soit résolu. Détails sur leForum. Il y a aussi un bug (à partir du 05/11/2016) où essayer de définir à la fois les propriétés notes et gmnotes dans le même appel set() entraîne la définition erronée de la deuxième propriété dans l'appel. Détails sur leForum.


Travailler avec des fiches de personnage

La fonctionnalité des fiches de personnage affecte l'utilisation du type d'objet Attributs, car les fiches ont la possibilité de spécifier une valeur par défaut pour chaque attribut sur la fiche. Cependant, si l'attribut est défini sur la valeur par défaut, il n'existe pas encore d'objet Attribut réel créé dans le jeu pour ce personnage. Nous fournissons une fonction de commodité qui masque cette complexité pour vous. Vous devriez utiliser cette fonction pour obtenir la valeur d'un attribut à l'avenir, surtout si vous savez qu'un jeu utilise une fiche de personnage.

getAttrByName(character_id, attribute_name, value_type)

Il suffit de spécifier l'ID du caractère, le nom(et non l'ID) de l'attribut (par exemple "HP" ou "Str"), puis de préciser si vous souhaitez "current" ou "max" pour value_type. Voici un exemple :

var character = getObj("character", "-JMGkBaMgMWiQdNDwjjS");
getAttrByName(character.id, "str"); // la valeur actuelle de For, par exemple "12"
getAttrByName(character.id, "str", "max"); // la valeur max de For, par exemple "[[floor(@{STR}/2-5)]]"


Notez que les champs ayant des valeurs calculées automatiquement renverront la formule au lieu du résultat de la valeur. Vous pouvez ensuite transmettre cette formule à sendChat() pour utiliser le moteur de dés afin de calculer automatiquement le résultat pour vous.

Consultez également la documentation de la feuille de personnagepour plus d'informations sur la façon dont les feuilles de personnage interagissent avec l'API.

getAttrByNamen'obtiendra quela valeur de l'attribut, et non l'objet attribut lui-même. Si vous souhaitez vous référer à d'autres propriétés de l'attribut que "actuelle" ou "max", ou si vous souhaitez modifier des propriétés de l'attribut, vous devez utiliser l'une des autres fonctions ci-dessus, comme findObjs.

Dans le cas où l'attribut demandé n'existe pas,getAttrByName()renverraundefined.


Création d'objets

createObj(type, attributs)

Note : Vous pouvez actuellement créer des objets 'graphiques', 'texte', 'chemin', 'personnage', 'faculté', 'attribut', 'aide', 'tablederoll', 'élémentdetable' et 'macro'.

Vous pouvez créer un nouvel objet dans le jeu en utilisant la fonctioncreateObj. Vous devez indiquer le type de l'objet (l'une des propriétés valides_typede la liste des objets ci-dessus), ainsi qu'un objetattributscontenant une liste de propriétés pour l'objet. Notez que si l'objet a un objet parent (par exemple, les attributs et les facultés appartiennent aux personnages, les graphiques, les textes et les chemins appartiennent aux pages, etc.), vous devez spécifier dans la liste des propriétés l'ID du parent (par exemple, vous devez inclure la propriétécharacteridlors de la création d'un attribut). Notez également que même lors de la création de nouveaux objets, vous ne pouvez pas définir des propriétés en lecture seule, elles seront automatiquement définies sur leur valeur par défaut. La seule exception à cette règle est lors de la création d'un chemin, vous devez inclure la propriété 'path', mais elle ne peut pas être modifiée une fois que le chemin est créé initialement.

createObj retournera le nouvel objet, de sorte que vous pouvez continuer à travailler avec lui.

//Crée un nouvel attribut "Strength" sur tous les personnages ajoutés au jeu.
on("add:character", function(obj) {
    createObj("attribute", {
        name: "Strength",
        current: 0,
        max: 30,
        characterid: obj.id
    });
});

Supprimer des objets

object.remove()

Remarque : actuellement, vous pouvez supprimer des objets 'graphic', 'text', 'path', 'character', 'ability', 'attribute', 'handout', 'rollabletable', 'tableitem' et 'macro'.

Vous pouvez supprimer les objets de jeu existants en utilisant la fonction remove().remove(). La fonction .remove() fonctionne sur tous les objets que vous pouvez créer avec la fonction createObj. Vous appelez la fonction directement sur l'objet. Par exemple,mycharacter.remove();.


Objets Globaux

Il existe plusieurs objets disponibles globalement n'importe où dans votre script.

Campagne() (fonction)

Une fonction qui renvoie l'objetCampaign. Étant donné qu'il n'y a qu'une seule campagne, cette variable globale pointe toujours vers la seule campagne du jeu. Utile pour des choses comme vérifier si un objet est sur la page active en utilisantCampaign().get("playerpageid").


État

La variablestateest un objet global accessible à tous les scripts du jeu. Vous pouvez accéder à l'objetstatedepuis n'importe quelle fonction ou callback à tout moment en utilisant la variable globale nomméestate. En outre, l'objetstateest conservé entre les exécutions deSandbox, de sorte que vous pouvez l'utiliser pour stocker des informations dont vous souhaitez disposer lors des prochaines exécutions de votre script.

Note :Vous devez utiliser l'objet state pour stocker les informations dont l'API a seulement besoin, car elles ne sont pas envoyées aux ordinateurs des joueurs et ne rendent pas votre fichier de jeu plus volumineux. Stockez les valeurs nécessaires en jeu dans les propriétés des objets Roll20.

Types stockables

L'objetstaten'est capable de conserver que des types de données simples, comme le prévoit la normeJSON.

Stéréotype Exemples Description
Booléen vrai faux La valeur vrai ou faux.
Nombre 123,5 10 1,23e20 Tout format de nombre pris en charge par Javascript. Nombre flottant ou entier.
Chaîne de caractères 'Bonjour le monde fantastique' "oh, et le Monde" Une chaîne de caractères standard.
Tableau [ 1, 2, 3, 4 ] [ 'A','B','C'][1, 2, ['bob', 3], 10, 2.5] Une collection ordonnée de n'importe quel type, y compris d'autres tableaux.
Objectif  { key: 1, value: 'roll20' } Un objet clé/valeur simple avec des clés de chaîne et n'importe quel type comme valeur, y compris d'autres objets.

Attention :Si les fonctions semblent fonctionner lorsqu'elles sont stockées initialement dans l'état, elles disparaissent la première fois que l'étatest restauré à partir de la persistance, par exemple lors d'un redémarrage du bac à sable.

  • Note :Cela inclut les objets Roll20 que vous obtenez à partir d'événements ou des fonctionsfindObjs(),getObj(),filterObjs(),createObj(), etc.

Rappels Importants

L'objetstateest partagé par tous les scripts d'un bac à sable. Pour éviter de casser d'autres scripts, il est important de suivre quelques directives simples :

  • Ne jamaisassigner directement à l'objet racinestate.
state = { break: 'all the things' }; // NE JAMAIS FAIRE CELA !!!

 

  • Évitezd'utiliser des variables locales nomméesstatedans vos scripts. Bien que cela fonctionne, cela sera déroutant pour les utilisateurs ultérieurs de vos scripts et pourrait causer des problèmes si le code est modifié sans précaution.
function turn(){
    var state = Campaign().get('turnorder');  // Mauvaise pratique, à éviter !
    // ...
}

 

  • Toujoursplacer vos propriétés sous au moins une propriété d'espace de noms. Assurez-vous d'utiliser une propriété d'espace de noms suffisamment descriptive. Évitez les noms comme script ou settings. Il est préférable d'utiliser le nom de votre module ou votre propre nom ou pseudonyme.
if( ! state.MyModuleNamespace ) {
    state.MyModuleNamespace = { module: 'mon module', ok: 'c'est bien !', count: 0 };
}
state.MyModuleNamespace.count++;

Exemple d'utilisation

Il s'agit d'un exemple pratique qui utilise l'objetstatede manière appropriée.

on('ready',function() {
    "use strict" ;

    // Vérifier si la propriété namespaced existe, la créer si ce n'est pas le cas
    if( ! state.MyModuleNS ) {
        state.MyModuleNS = {
            version : 1.0,
            config : {
                color1: '#ff0000',
                color2: '#0000ff'
            },
            count : 0
        } ;
    }

    // Utilisation des propriétés de l'état pour configurer un message pour le chat. 
    sendChat(
        'Test Module',
        '<span style="color: '+state.MyModuleNS.config.color1+';">'+
            'State test'+
        '</span> '+
        '<span style="color: '+state.MyModuleNS.config.color2+';">'+
            'Script v'+state.MyModuleNS.version+' démarré '+(++state.MyModuleNS.count)+' fois!'+
        '</span>'
    ) ;
}) ;

Recherche/filtrage d'objets

L'API fournit plusieurs fonctions d'aide qui peuvent être utilisées pour trouver des objets.

getObj(type, id)
Cette fonction obtient un seul objet si le _type de l'objet et l'_id sont passés. Il est préférable d'utiliser cette fonction plutôt que les autres fonctions de recherche chaque fois que possible, car c'est la seule qui ne doit pas parcourir l'ensemble de la collection d'objets.

on("change:graphic:represents", function(obj) {
    Si(obj.get("represents") != "") {
       var personnage = getObj("character", obj.get("represents"));
    }
});

 


findObjs(attrs)

Transmettez cette fonction une liste d'attributs, et elle renverra tous les objets correspondants sous forme de tableau. Notez que cela s'applique à tous les objets de tous les types sur toutes les pages - donc vous voudrez probablement inclure au moins un filtre pour _type et _pageid si vous travaillez avec des objets de jeu de rôle.

var personnagesPageCourante = findObjs({                              
  _pageid: Campaign().get("playerpageid"),                              
  _type: "graphic",                          
});
_.each(personnagesPageCourante, function(obj) {    
  //Faites quelque chose avec obj, qui est sur la page actuelle et qui est un graphique.
});

Vous pouvez également passer un deuxième argument facultatif qui contient un objet avec une liste d'options, y compris :

  • caseInsensitive(true/false) : Si vrai, les propriétés des chaînes de caractères seront comparées sans tenir compte de la casse de la chaîne.
var targetTokens = findObjs({
    name : "target"
}, {caseInsensitive: true}) ;
/Retourne tous les tokens dont le nom est "target", "Target", "TARGET", etc.

filterObjs(callback)

Exécute la fonction de rappel fournie sur chaque objet et, si la fonction de rappel renvoie un résultat positif, l'objet est inclus dans le tableau de résultats. Actuellement, il est déconseillé d'utiliser filterObjs() dans la plupart des cas - étant donné que findObjs() dispose d'un index intégré pour améliorer la vitesse d'exécution, il est presque toujours préférable d'utiliser findObjs() pour obtenir d'abord les objets du type souhaité, puis de les filtrer à l'aide de la méthode native .filter() pour les tableaux.

var results = filterObjs(function(obj) {    
  if(obj.get("left") < 200 && obj.get("top") < 200) return true ;    
  else return false ;
}) ;
//Results is an array of all objects that are in the top-left corner of the tabletop.

getAllObjs()

Renvoie un tableau de tous les objets du jeu (tous types confondus). Cela équivaut à appeler filterObjs et à renvoyertruepour chaque objet.


getAttrByName(character_id, attribute_name, value_type)

Obtient la valeur d'un attribut, en utilisant la valeur par défaut de la feuille de caractères si l'attribut n'est pas présent. value_typeest un paramètre facultatif, que vous pouvez utiliser pour spécifier "current" ou "max".

getAttrByNamen'obtiendra quela valeur de l'attribut, et non l'objet attribut lui-même. Si vous souhaitez référencer des propriétés de l'attribut autres que "current" ou "max", ou si vous souhaitez modifier des propriétés de l'attribut, vous devez utiliser l'une des autres fonctions ci-dessus, telles quefindObjs.

Pour les sections répétitives, vous pouvez utiliser le formatrepeating_section_$n_attribute, oùnest le numéro de ligne répétitive (en commençant par zéro). Par exemple,repeating_spells_$2_nameretournera la valeur denamede la troisième ligne derepeating_spells.

Vous pouvez obtenir le même comportement quegetAttrByNameavec ce qui suit :

// current and max are completely dependent on the attribute and game system
// in question; there is no function available for determining them automatically
function myGetAttrByName(character_id,
                         attribute_name,
                         attribute_default_current,
                         attribute_default_max,
                         value_type) {
    attribute_default_current = attribute_default_current || '';
    attribute_default_max = attribute_default_max || '';
    value_type = value_type || 'current';

    var attribute = findObjs({
        type: 'attribute',
        characterid: character_id,
        name: attribute_name
    }, {caseInsensitive: true})[0];
    if (!attribute) {
        attribute = createObj('attribute', {
            characterid: character_id,
            name: attribute_name,
            current: attribute_default_current,
            max: attribute_default_max
        });
    }

    if (value_type == 'max') {
        return attribute.get('max');
    } else {
        return attribute.get('current');
    }
}
Cet article vous a-t-il été utile ?
Utilisateurs qui ont trouvé cela utile : 19 sur 21