Violet

Login

On this page

Use core.login from on_tick(stage) while stage == core.stage.LOGIN to inspect the login flow and manage characters from the character-selection screen.

Character actions are live

Reordering, deletion, and restoration affect the account's character list. A true result means the action was submitted, not that it has completed. Re-read the character list before sending another action.

Login Steps

StepMeaning
1World and channel selection
2Character selection
3New-character setup
4New-character name entry

Other values may appear during transitions.

Character Structure

get_characters() returns one record per created character:

PropertyTypeDescription
idnumberStable character ID
indexnumberZero-based display position
namestringCharacter name
levelnumberCharacter level
jobnumberJob ID
ghostbooleanWhether deletion is pending
delete_deadlinenumberDeletion eligibility time as a Unix timestamp, or 0
deletion_readybooleanWhether permanent deletion is currently eligible

Character actions accept a returned character record, a character ID, or a zero-based display index. Prefer passing the complete record; numeric values are resolved as IDs first and then as indices.

Functions

core.login.get_step() -> number | nil

Returns the current login step, or nil when the login interface is unavailable.


core.login.get_char_count() -> number | nil

Returns the number of created characters during character selection.


core.login.get_total_slot_count() -> number | nil

Returns the account's total available character slots during character selection.


core.login.get_empty_slot_count() -> number | nil

Returns the number of unoccupied character slots during character selection.


core.login.get_characters() -> table<login_character> | nil

Returns the current character list during character selection.


core.login.move_character_to_front(character: login_character | number) -> boolean

Moves the selected character to the front of the displayed character order.


core.login.soft_delete_character(character: login_character | number) -> boolean

Starts the deletion waiting period for an active character that is not already pending deletion.


core.login.hard_delete_character(character: login_character | number) -> boolean

Permanently deletes a character whose deletion waiting period has completed.


core.login.restore_character(character: login_character | number) -> boolean

Restores a character that is pending deletion.

lua
function on_tick(stage)
    if stage ~= core.stage.LOGIN then return end

    if core.login.get_step() ~= 2 then
        return
    end

    for _, character in ipairs(core.login.get_characters() or {}) do
        if character.ghost and not character.deletion_ready then
            core.login.restore_character(character)
            break
        end
    end
end