File Coverage

blib/lib/WWW/ARDB/CLI/Cmd/Quest.pm
Criterion Covered Total %
statement 9 65 13.8
branch 0 24 0.0
condition 0 29 0.0
subroutine 3 4 75.0
pod 0 1 0.0
total 12 123 9.7


line stmt bran cond sub pod time code
1             package WWW::ARDB::CLI::Cmd::Quest;
2             our $AUTHORITY = 'cpan:GETTY';
3              
4             # ABSTRACT: Show quest details command
5              
6 2     2   2848 use Moo;
  2         4  
  2         14  
7 2     2   928 use MooX::Cmd;
  2         5  
  2         13  
8 2     2   6059 use JSON::MaybeXS;
  2         4  
  2         1725  
9              
10             our $VERSION = '0.002';
11              
12              
13             sub execute {
14 0     0 0   my ($self, $args, $chain) = @_;
15 0           my $app = $chain->[0];
16              
17 0           my $id = $args->[0];
18 0 0         unless ($id) {
19 0           print "Usage: ardb quest \n";
20 0           print "Example: ardb quest picking_up_the_pieces\n";
21 0           return;
22             }
23              
24 0           my $quest = $app->api->quest($id);
25              
26 0 0         unless ($quest) {
27 0           print "Quest not found: $id\n";
28 0           return;
29             }
30              
31 0 0         if ($app->json) {
32 0           print JSON::MaybeXS->new(utf8 => 1, pretty => 1)->encode($quest->_raw);
33 0           return;
34             }
35              
36 0           print "=" x 60 . "\n";
37 0           print $quest->title . "\n";
38 0           print "=" x 60 . "\n\n";
39              
40 0           print "ID: " . $quest->id . "\n";
41              
42 0 0         if ($quest->trader) {
43 0           print "Trader: " . $quest->trader_name;
44 0 0         print " (" . $quest->trader_type . ")" if $quest->trader_type;
45 0           print "\n";
46             }
47              
48 0   0       print "XP: " . ($quest->xp_reward // 0) . "\n";
49              
50 0 0         if ($quest->description) {
51 0           print "\nDescription:\n";
52 0           print " " . $quest->description . "\n";
53             }
54              
55 0 0         if (@{$quest->steps}) {
  0            
56 0           print "\nObjectives:\n";
57 0           for my $step (@{$quest->steps}) {
  0            
58 0 0 0       if ($step->{amount} && $step->{amount} > 1) {
59 0           printf " [ ] %s (x%d)\n", $step->{title}, $step->{amount};
60             } else {
61 0           print " [ ] " . $step->{title} . "\n";
62             }
63             }
64             }
65              
66 0 0         if (@{$quest->maps}) {
  0            
67 0           print "\nAvailable Maps:\n";
68 0           for my $map (@{$quest->maps}) {
  0            
69 0           print " - " . $map->{name} . "\n";
70             }
71             }
72              
73 0 0         if (@{$quest->required_items}) {
  0            
74 0           print "\nRequired Items:\n";
75 0           for my $req (@{$quest->required_items}) {
  0            
76 0   0       my $item = $req->{item} // $req;
77             printf " - %dx %s\n",
78             $req->{amount} // 1,
79 0   0       $item->{name} // $req->{name} // $req->{id};
      0        
      0        
80             }
81             }
82              
83 0 0         if (@{$quest->rewards}) {
  0            
84 0           print "\nRewards:\n";
85 0           for my $reward (@{$quest->rewards}) {
  0            
86 0   0       my $item = $reward->{item} // $reward;
87 0 0         my $note = $reward->{grantedOnAccept} ? ' (on accept)' : '';
88             printf " - %dx %s%s\n",
89             $reward->{amount} // 1,
90             $item->{name} // $reward->{name} // $reward->{id},
91 0   0       $note;
      0        
      0        
92             }
93             }
94              
95 0   0       print "\nLast Updated: " . ($quest->updated_at // 'unknown') . "\n";
96             }
97              
98             1;
99              
100             __END__