Sélectionner une révision Git
-
Loris TICHADOU a rédigéLoris TICHADOU a rédigé
Action.pm 18,91 Kio
package Irpg::Action;
use strict;
use warnings;
use Irpg::Utils qw(:text);
use Irpg::Irc qw(:interaction);
use Exporter qw(import);
our @EXPORT = qw(&choose_action &itemsum
&challenge_opp &collision_action &team_battle);
our @EXPORT_OK = qw(itemsum new_action);
my $primnick_ref;
my $opts;
my $rps;
=head1 FUNCTION init_pkg
This function sets the references to
options and players hashes.
=over
=item SCALAR (ref) - reference to the options hash
=item SCALAR (ref) - reference to the players hash
=cut
sub init_pkg {
($opts, $rps, $primnick_ref) = @_;
}
sub fisher_yates_shuffle {
my $array = shift;
my $i;
for ($i = @$array; --$i; ) {
my $j = int rand ($i+1);
next if $i == $j;
@$array[$i,$j] = @$array[$j,$i];
}
}
sub itemsum {
my $user = shift;
# is this for a battle? if so, good users get a 10% boost and evil users get
# a 10% detriment
my $battle = shift;
return -1 unless defined $user;
my $sum = 0;
if ($user eq $$primnick_ref) {
for my $u (keys(%$rps)) {
$sum = itemsum($u) if $sum < itemsum($u);
}
return $sum+1;
}
if (!exists($rps->{$user})) { return -1; }
#$sum += int($rps->{$user}{item}{$_}) for keys(%{$rps->{$user}{item}});
$sum += int foreach map { m/(\d+)\D?/ } values(%{$rps->{$user}{item}});
if ($battle) {
$sum = $rps->{$user}{alignment} eq 'Evil' ? int(0.5+$sum*.9) :
$rps->{$user}{alignment} eq 'Good' ? int(0.5+$sum*1.1) :
$sum;
return int(0.5 + $rps->{$user}{class}->real_sum($sum));
}
return $sum;
}
sub choose_action {
my $user = shift;
my $phy_score = $rps->{$user}{class}->str() + $rps->{$user}{class}->con();
my $mys_score = $rps->{$user}{class}->wis() + $rps->{$user}{class}->int();
my $stl_score = $rps->{$user}{class}->cha() + $rps->{$user}{class}->dex();
my $score = int(rand($phy_score+$mys_score+$stl_score));
return 'fight' if ($score < $phy_score);
return 'mystic' if ($score < $phy_score+$mys_score);
return 'steal';