Violet

Activities

On this page

Use core.activities to read the current character's boss clear limits and daily and weekly content progress: runs left, reset times, entry requirements and costs, and anything blocking a run right now.

Every function returns nil, error_message when there is no current character.

  • Counts come from what the game has recorded for this character and account, so they change as soon as the game records a run. Returned tables don't update afterwards; call again to refresh.
  • Boss limits and get_resets() follow the game's server clock: daily limits reset at the start of the server day, weekly limits on Thursday and monthly limits on the 1st. Content resets on its own schedule, given by its resets_in.
  • Boss clears are counted per difficulty the way the game counts them, and some bosses share one clear across their difficulties.

Boss Activity Structure

core.activities.get_bosses() and core.activities.get_boss() return boss difficulties:

PropertyTypeDescription
idnumberBoss ID
namestringBoss name
difficultystring"easy", "normal", "hard", "chaos" or "extreme"
periodstringHow often the clear limit resets: "daily", "weekly" or "monthly"
clearsnumberClears counted this period, never more than max_clears
max_clearsnumberClears allowed per period
remainingnumberClears left this period, never negative
resets_innumberSeconds until the period resets
min_levelnumberMinimum level to enter
map_idnumber?Map where the boss is entered; nil when none
required_itemnumber?Item needed to enter (the entry cost); nil when none
party_limitnumberLargest party allowed
solo_onlybooleanWhether the boss must be fought alone
blockerstable<string>Why it can't be run right now (see Blockers); empty when nothing blocks it
blocking_questnumber?A prerequisite quest the character still needs, set only when blockers contains "quest"; nil when the requirement isn't a single quest

Content Activity Structure

core.activities.get_contents() returns daily and weekly content:

PropertyTypeDescription
namestringContent name, e.g. "Monster Park"
periodstring"daily" or "weekly"
countnumberProgress this period: runs, clears or stages, depending on the content
limitnumberProgress that completes the period
remainingnumberlimit - count, never negative; 0 once completed
completedbooleanWhether the period's limit is reached; weekly content can also be completed by a weekly cap on that kind of content, as with Epic Dungeons
resets_innumber?Seconds until progress resets; nil when it doesn't reset
min_levelnumberMinimum level
required_questnumber?Quest that must be completed first; nil when none
map_idnumber?Content map; nil when none
sharedstringWhose runs count toward the progress (see Shared progress)
blockerstable<string>As for bosses

Shared progress

sharedProgress is shared by
"character"This character only
"world"The account's characters in the current world, e.g. Monster Park, Monster Park Extreme and Maple Tour
"account"Every character on the account, across worlds, e.g. Epic Dungeons

Reset Times Structure

core.activities.get_resets() returns:

PropertyTypeDescription
dailynumberSeconds until the next daily reset
weeklynumberSeconds until the next weekly reset (Thursday)
monthlynumberSeconds until the next monthly reset (the 1st of the month)

Blockers

blockers lists every reason a boss or content can't be run right now:

BlockerMeaning
"level"The character is below the level requirement
"quest"A prerequisite quest is not complete
"item"Bosses only: the entry item is not in the inventory
"limit"No clears left, or the content is completed this period
"unknown"Bosses only: the game can't check this right now, such as in the Cash Shop, during a map change, or before this character's boss clears have loaded. Treat it as not available and call again later

Functions

core.activities.get_bosses() -> table<boss_activity> | nil, string?

Returns every boss difficulty that has a clear limit, in the game's boss list order, with each boss's easiest difficulty first.


core.activities.get_boss(boss: number | string, difficulty: string | number) -> boss_activity | nil, string?

Returns one boss difficulty. boss is a boss ID or a boss name in any letter case, such as "Lucid". difficulty is "easy", "normal", "hard", "chaos" or "extreme" in any letter case, or 0 to 4 in that order.

Returns nil, "no such boss difficulty" when that boss has no such difficulty with a clear limit. Raises an error when boss is not a number or a string, or difficulty is not one of those values.


core.activities.get_contents() -> table<content_activity> | nil, string?

Returns the daily and weekly content the game tracks progress for, such as Monster Park, Monster Park Extreme, Hyperspace Cube, Maple Tour, Epic Dungeons and the Arcane River weekly content like Erda Spectrum. Daily entries come first.


core.activities.get_resets() -> reset_times | nil, string?

Returns the seconds until the next daily, weekly and monthly reset.

Example

lua
for _, content in ipairs(core.activities.get_contents() or {}) do
    if content.name == "Monster Park" and content.remaining > 0 then
        core.log(("Monster Park: %d runs left"):format(content.remaining))
    end
end

local lucid = core.activities.get_boss("Lucid", "hard")
if lucid and #lucid.blockers == 0 then
    core.log("Hard Lucid is available")
end