Level 1
Strength: 2D
Dexterity: 4D
Intelligence: 3D
Charisma: 3D
{ | |
"characters": [ | |
{ | |
"ascendancy": 5, | |
"hardcore": false, | |
"items": [ | |
{ | |
"corrupted": false, | |
"mods": [ | |
{ |
{ | |
"challenges": { | |
"league_challenges": { | |
"challenges": [ | |
{ | |
"complete": false, | |
"goal": 188, | |
"progress": 164, | |
"text": "Kill Rare Monsters" | |
}, |
Abilities have two parts: a cost and an effect. The cost represents the cost in ability points the character must expend to use the ability, and the effect is a description of what happens when the skill is used.
Many abilities have a section listed "Alternate Flavors". This section is used to list names of similar abilities that will help better align the ability's effects with the fantasy of a particular character, or give a player or GM ideas for slight variations on the ability that they can use instead.
Cost: 2 ability points
html { | |
font-family: helvetica, arial, sans-serif; | |
font-size: 22px; | |
color: seashell; | |
background-color: black; | |
opacity: 0.9; | |
} | |
header { | |
position: fixed; |
from pathlib import Path | |
from typing import Dict, Iterable, List, Tuple | |
import csv | |
def rows_from_csv(filename: Path) -> Iterable[Dict[str, str]]: | |
rows = [] | |
with open(filename, newline='') as csvfile: | |
reader = csv.DictReader(csvfile) | |
for row in reader: |
{ | |
"users": [ | |
{ | |
"joinedClassroomIds": [], | |
"streak": 5, | |
"motivation": "none", | |
"picture": "//duolingo-images.s3.amazonaws.com/avatars/1421889/rB1lIOc7RU", | |
"learningLanguage": "zh", | |
"hasFacebookId": true, | |
"liveOpsFeatures": [], |
{ | |
"practiceReminderSettings": { | |
"ja": { | |
"timeInMinutes": 1200, | |
"pushEnabled": true, | |
"emailEnabled": true | |
}, | |
"it": { | |
"timeInMinutes": 1200, | |
"pushEnabled": true, |
Fields like "timestamp" on xp events and "creation_date" on accounts are stored as unix time. That means "seconds since the Unix epoch".
It's accurate down to the second, and they're all in the same "timezone" which is UTC (like GMT but doesn't change for daylight savings or anything).
You can combine this with an account's (or a browser's) timezone and/or timezone_offset value to display the time in their local timezone.