46 lines
1.3 KiB
Perl
46 lines
1.3 KiB
Perl
package LasTres::Controller::Websocket::InputPacket::ExecuteAction;
|
|
|
|
use v5.36.0;
|
|
use strict;
|
|
use warnings;
|
|
use utf8;
|
|
|
|
use Moo;
|
|
use List::AllUtils;
|
|
|
|
sub identifier {
|
|
return 'execute_action';
|
|
}
|
|
|
|
sub handle ( $self, $ws, $session, $data ) {
|
|
if ( ref $data ne 'HASH' ) {
|
|
return $ws->send( to_json( { error => "Data should be a hashref." } ) );
|
|
}
|
|
if ( !defined $session->{pj} ) {
|
|
return $ws->send(
|
|
to_json( { error => 'The pj for this session does not exist.' } ) );
|
|
}
|
|
$session->{pj} = $session->{pj}->get_from_storage;
|
|
my $pj = $session->{pj};
|
|
my $action_id = $data->{action};
|
|
if ( !defined $action_id ) {
|
|
return $ws->send( to_json( { error => 'No action set.' } ) );
|
|
}
|
|
my @actions = $pj->actions->@*;
|
|
my ($action) = List::AllUtils::onlyres { $_->identifier eq $action_id && $_ } @actions;
|
|
if (!defined $action) {
|
|
return $ws->send( to_json( { error => "Could not find action $action_id." } ) );
|
|
}
|
|
if ( $action->is_disabled($pj) ) {
|
|
return $ws->send( to_json( { error => "@{[$action->identifier]} is disabled." } ) );
|
|
}
|
|
$action->callback($pj);
|
|
my $team = $pj->team;
|
|
for my $member ( $team->combat_members->@* ) {
|
|
$member->update_team_sprites;
|
|
$member->update_location;
|
|
$member->update_actions;
|
|
}
|
|
}
|
|
1;
|