I forgot to commit the created actions.
This commit is contained in:
parent
80ae5ddb39
commit
48874c57c1
57
lib/LasTres/PJAction.pm
Normal file
57
lib/LasTres/PJAction.pm
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
package LasTres::PJAction;
|
||||||
|
|
||||||
|
use v5.36.0;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use feature 'signatures';
|
||||||
|
|
||||||
|
use Moo::Role;
|
||||||
|
|
||||||
|
requires( 'identifier', 'callback', 'name' );
|
||||||
|
|
||||||
|
## OVERRIDE
|
||||||
|
# This should be a square icon, ideally of 400x400px
|
||||||
|
# If not set the frontend should attempt to show the
|
||||||
|
# action with as much dignity as possible.
|
||||||
|
#
|
||||||
|
# Should return nothing or a string that is a absolute url
|
||||||
|
# to the resource.
|
||||||
|
sub icon ( $self, $pj ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
## OVERRIDE
|
||||||
|
# This function is called when a user is supposed
|
||||||
|
# to see that something is possible to be done, but they cannot because
|
||||||
|
# some prerequisite is missing.
|
||||||
|
# If you do not want the possible action to be showed do not list it,
|
||||||
|
# do not use this function in this case.
|
||||||
|
#
|
||||||
|
# Should return a true or falsy value that is not undef.
|
||||||
|
sub is_disabled ( $self, $pj ) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
## OVERRIDE
|
||||||
|
# This function should return a text explanation about why
|
||||||
|
# the pj cannot use this action but they still see it as
|
||||||
|
# something possible to be done.
|
||||||
|
#
|
||||||
|
# Should return nothing if the pj can do the action and a string
|
||||||
|
# with the reason otherwise.
|
||||||
|
sub disabled_reason ( $self, $pj ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
## DO NOT EXTEND NOT SUPPORTED.
|
||||||
|
sub hash ( $self, $pj ) {
|
||||||
|
return {
|
||||||
|
identifier => $self->identifier,
|
||||||
|
icon => $self->icon,
|
||||||
|
name => $self->name,
|
||||||
|
is_disabled => $self->is_disabled,
|
||||||
|
disabled_reason => $self->disabled_reason,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
1;
|
84
lib/LasTres/PJAction/DefaultHeal.pm
Normal file
84
lib/LasTres/PJAction/DefaultHeal.pm
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
package LasTres::PJAction::DefaultHeal;
|
||||||
|
|
||||||
|
use v5.36.0;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use Moo;
|
||||||
|
|
||||||
|
with 'LasTres::PJAction';
|
||||||
|
|
||||||
|
## OVERRIDE
|
||||||
|
sub name {
|
||||||
|
return 'Dormir aquí.';
|
||||||
|
}
|
||||||
|
|
||||||
|
## OVERRIDE
|
||||||
|
sub identifier {
|
||||||
|
return 'dormir';
|
||||||
|
}
|
||||||
|
|
||||||
|
## OVERRIDE (Always use $self->SUPER::is_disabled.)
|
||||||
|
sub is_disabled($self, $pj) {
|
||||||
|
my $team = $pj->team;
|
||||||
|
if (!$team->leader->uuid eq $pj->uuid) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (!$self->_check_if_someone_needs_to_restore($pj)) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
## OVERRIDE (Always use $self->SUPER::disabled_reason($self, $pj).)
|
||||||
|
sub disabled_reason($self, $pj) {
|
||||||
|
my $team = $pj->team;
|
||||||
|
if (!$team->leader->uuid eq $pj->uuid) {
|
||||||
|
return 'No eres el líder del equipo.';
|
||||||
|
}
|
||||||
|
if (!$self->_check_if_someone_needs_to_restore($pj)) {
|
||||||
|
return 'Todo tu equipo esta lleno de vitalidad y listo para la aventura.';
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub _check_if_someone_needs_to_restore($self, $pj) {
|
||||||
|
my $team = $pj->team;
|
||||||
|
for my $member ($team->combat_members->@*) {
|
||||||
|
if ($member->health < $member->max_health) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if ($member->mana < $member->max_mana) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
## OVERRIDE (Always use $self->SUPER::callback($self, $pj).)
|
||||||
|
# Possibly for all the healing actions you would want to
|
||||||
|
# extend this Action, if you want something special in the callback
|
||||||
|
# remember to call super.
|
||||||
|
sub callback($self, $pj) {
|
||||||
|
my $team = $pj->team;
|
||||||
|
for my $member ($team->combat_members->@*) {
|
||||||
|
$member->health($member->max_health);
|
||||||
|
$member->mana($member->max_mana);
|
||||||
|
$member->update;
|
||||||
|
$member->update_team_sprites;
|
||||||
|
}
|
||||||
|
if (Scalar::Util::blessed($self) eq __PACKAGE__) {
|
||||||
|
$self->_callback_unique_sleep($pj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub _callback_unique_sleep($self, $pj) {
|
||||||
|
my $team = $pj->team;
|
||||||
|
$team->append_log_line([
|
||||||
|
{
|
||||||
|
text => 'Tras dormir os sentís mucho mejor, a por más aventuras.'
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
1;
|
102
lib/LasTres/PJAction/GolpearArbolCentralTribuDeLaLima.pm
Normal file
102
lib/LasTres/PJAction/GolpearArbolCentralTribuDeLaLima.pm
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
package LasTres::Action::GolpearArbolCentralTribuDeLaLima;
|
||||||
|
|
||||||
|
use v5.36.0;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use feature 'signatures';
|
||||||
|
|
||||||
|
use Moo;
|
||||||
|
|
||||||
|
with 'LasTres::PJAction';
|
||||||
|
|
||||||
|
## DO NOT EXTEND NOT SUPPORTED.
|
||||||
|
|
||||||
|
sub name {
|
||||||
|
return 'Golpear el árbol.';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub identifier {
|
||||||
|
return 'golpear_arbol_central_tribu_de_la_lima';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub is_disabled ( $self, $pj ) {
|
||||||
|
if ($pj->health < 1) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub disabled_reason ( $self, $pj ) {
|
||||||
|
if ($pj->health < 1) {
|
||||||
|
return "Estás debilitado.";
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub _chance_enemy ( $self, $pj ) {
|
||||||
|
if ( $pj->level > 20 ) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if ( $pj->level > 10 ) {
|
||||||
|
return 25;
|
||||||
|
}
|
||||||
|
return 50;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub callback ( $self, $pj ) {
|
||||||
|
$pj = $pj->get_from_storage;
|
||||||
|
my $damage_for_hitting_the_tree = int( $pj->health / 10 );
|
||||||
|
my $current_health = int( $pj->health - $damage_for_hitting_the_tree );
|
||||||
|
# We do not let the player die. That would be problematic out of combat.
|
||||||
|
$pj->health($current_health);
|
||||||
|
$pj->update;
|
||||||
|
my $team = $pj->team;
|
||||||
|
$team->append_log_line(
|
||||||
|
[
|
||||||
|
{
|
||||||
|
text => $pj->nick,
|
||||||
|
color => 'green',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text => ' golpeó el árbol y se hizo '
|
||||||
|
. $damage_for_hitting_the_tree
|
||||||
|
. ' de daño. '
|
||||||
|
. $pj->health . '/'
|
||||||
|
. $pj->max_health . '.'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
);
|
||||||
|
if ($team->is_defeated) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( LasTres::Util::rand_range_int( 0, 100 ) <= $self->_chance_enemy($pj) )
|
||||||
|
{
|
||||||
|
$self->_start_battle($pj);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub _start_battle ( $self, $pj ) {
|
||||||
|
require LasTres::EnemyArea;
|
||||||
|
require LasTres::Battle;
|
||||||
|
require LasTres::Util;
|
||||||
|
my $team = $pj->team;
|
||||||
|
$team->append_log_line([
|
||||||
|
{
|
||||||
|
text => 'Una criatura que vive en el árbol se ha molestado, preparate para luchar...'
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
|
||||||
|
my $battle = LasTres::Battle->start_battle_machine($team,
|
||||||
|
[
|
||||||
|
LasTres::EnemyArea->new(
|
||||||
|
race => 'conejo',
|
||||||
|
nick => 'Conejo territorial.',
|
||||||
|
level => LasTres::Util::rand_range_int(1,3),
|
||||||
|
)
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
1;
|
42
lib/LasTres/PJActions.pm
Normal file
42
lib/LasTres/PJActions.pm
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
package LasTres::PJActions;
|
||||||
|
|
||||||
|
use v5.36.0;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use Moo;
|
||||||
|
|
||||||
|
use Module::Pluggable search_path => ['LasTres::PJAction'],
|
||||||
|
instantiate => 'new',
|
||||||
|
on_require_error => sub ($plugin, $error) {
|
||||||
|
die $error;
|
||||||
|
};
|
||||||
|
|
||||||
|
has hash => (
|
||||||
|
is => 'rw',
|
||||||
|
lazy => 1,
|
||||||
|
builder => \&_build_hash,
|
||||||
|
);
|
||||||
|
|
||||||
|
sub _build_hash($self) {
|
||||||
|
my @actions = $self->plugins();
|
||||||
|
my %hash;
|
||||||
|
for my $action (@actions) {
|
||||||
|
my $set_success = 0;
|
||||||
|
if (exists $hash{$action->identifier}) {
|
||||||
|
warn "$action could not be added because a action with the "
|
||||||
|
. "identifier @{[$action->identifier]} already exists.";
|
||||||
|
}
|
||||||
|
eval {
|
||||||
|
if ($action->does('LasTres::PJAction')) {
|
||||||
|
$hash{$action->identifier} = $action;
|
||||||
|
$set_success = 1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if (!$set_success) {
|
||||||
|
warn "$action does not implement the role LasTres::PJAction.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return \%hash;
|
||||||
|
}
|
||||||
|
1;
|
Loading…
Reference in New Issue
Block a user