NAME
NetHack::NAOdash - Analyze NetHack xlogfiles and extract statistics
SYNOPSIS
use NetHack::NAOdash;
my $stats = naodash_user 'mgv'; # Retrieve and analyze mgv's xlogfile from alt.org
my @checks = @{$stats->{checks}}; # List of 'achievements' obtained by mgv
my %checks = map { $_ => 1 } @checks;
say 'mgv has ascended an orcish rogue' if $checks{combo_rog_orc_cha};
say 'mgv has ascended an atheist character' if $checks{conduct_atheist};
my %numbers = %{$stats->{numbers}};
say "mgv has ascended $numbers{ascensions} out of $numbers{games} games";
say "mgv has spent $numbers{totalrealtime} seconds playing NetHack on NAO";
$stats = naodash_user {include_versions => ['3.6.0']}, 'mgv';
say 'mgv has ascended an orcish rogue in 3.6.0' if $checks{combo_rog_orc_cha};
$stats = naodash_user {exclude_versions => ['3.6.0']}, 'mgv';
say 'mgv has ascended an atheist character pre-3.6.0' if $checks{conduct_atheist};
use File::Slurp;
$stats = naodash_xlog read_file 'path/to/my/xlogfile';
%checks = map { $_ => 1 } @{$stats->{checks}};
say 'I have ascended a survivor' if $checks{uconduct_survivor};
DESCRIPTION
NetHack::NAOdash analyzes a NetHack xlogfile and reports statistics. There are two types of statistics: checks, which are flags (booleans) and numbers which are integers.
The checks are tracked across all games. That is, a check will be true in the statistics if it is true in at least one game. Except for checks in the Achievements category, only games that end in an ascension are considered for awarding a check.
The checks, sorted by category, are:
- Achievements
-
These start with
achieve_
and represent significant milestones in a game. They are usually relevant only for users who never ascended, as a game that ends in an ascension generally meets all of them.achieve_sokoban achieve_luckstone achieve_medusa achieve_bell achieve_gehennom achieve_candelabrum achieve_book achieve_invocation achieve_amulet achieve_endgame achieve_astral achieve_ascended
- Starting Combos
-
These look like
combo_role_race_alignment
and represent role/race/alignment combinations in ascended games. The starting alignment, not the alignment at the end of the game is considered. For example,cav_gno_neu
is true if the user ascended at least one gnomish caveman. - Conducts
-
These start with
conduct_
and represent the 12 officially tracked conducts.conduct_foodless conduct_vegan conduct_vegetarian conduct_atheist conduct_weaponless conduct_pacifist conduct_illiterate conduct_genocideless conduct_polypileless conduct_polyselfless conduct_wishless conduct_artiwishless
- Unofficial Conducts
-
These start with
uconduct_
and represent conducts that are not officially tracked by the game.uconduct_survivor uconduct_bones uconduct_minscore
The numbers are:
- totalrealtime
-
The total time spent playing NetHack on NAO, in seconds.
- games
-
The number of games played.
- ascensions
-
The number of games played that ended in an ascension.
- maxhp
-
The highest maxHP at the end of an ascension.
- maxpoints
-
The highest score obtained at the end of an ascension.
- maxconducts
-
The maximum number of conducts at the end of an ascension.
- minturns
-
The minimum turns across ascended games.
- minrealtime
-
The minimum realtime across ascended games, in seconds.
This module exports two functions:
- naodash_xlog([\%args], @lines)
- naodash_xlog([\%args], $xlog)
-
Takes an optional hashref followed by the contents of an xlogfile and returns the results of the analysis. The contents are joined together then split by the newline character, so they can be specified as a single string, as a list of lines, or as a combination thereof.
The following keys are recognised in the optional hashref:
- include_versions
-
The associated value is an arrayref of NetHack versions that should be considered. Any game that was played on a version that is not in this arrayref will be ignored. If this key is not present or the value is an empty arrayref, all versions are considered.
- exclude_versions
-
The associated value is an arrayref of NetHack versions that should not be considered. Any game that was played on a version that is in this arrayref will be ignored. If a version is both included and excluded at the same time, it will not be considered (in other words, exclude_versions overrides include_versions).
The return value is of the following form:
{ checks => ['achieve_sokoban', 'achieve_luckstone', ...], numbers => {totalrealtime => 12345, games => 2, ...} }
In other words,
@{$result->{checks}}
is an array of checks that are true and%{$result->{numbers}}
is a hash of numbers. - naodash_user([\%args], $nao_username)
-
Retrieves the xlogfile of a user from NAO and gives it to naodash_xlog. Dies if no xlogfile is found or if the server cannot be contacted.
An optional hashref can be passed as a first argument. In this case it will be supplied as a first argument to naodash_xlog, see that function's documentation for an explanation of useful keys.
This method caches the downloaded xlogfiles for one day in the directory named by the NAODASH_CACHE environment variable.
ENVIRONMENT
- NAODASH_CACHE
-
Path to a directory that should be used to cache xlogfiles downloaded from NAO, or the special value 'none' (case-insensitive) to disable caching.
By default a directory named 'naodash' in the default temporary directory (
File::Spec->tmpdir
) is used.
SEE ALSO
App::NAOdash, App::Web::NAOdash, http://alt.org/nethack/
AUTHOR
Marius Gavrilescu, <marius@ieval.ro>
COPYRIGHT AND LICENSE
Copyright (C) 2015 by Marius Gavrilescu
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.20.2 or, at your option, any later version of Perl 5 you may have available.