1 |
elmex |
1.1 |
#!perl |
2 |
|
|
|
3 |
|
|
our $DEBUG = 1; |
4 |
|
|
our $ENABLED = 0; |
5 |
|
|
|
6 |
|
|
$ENABLED or return; |
7 |
|
|
|
8 |
|
|
my $WC_BASE_VALUE = 15 * 5000; # 15r |
9 |
|
|
my $AC_BASE_VALUE = 40 * 5000; # 40r |
10 |
|
|
my $DAM_BASE_VALUE = 100; # 20p |
11 |
|
|
my $MAGIC_BASE_VALUE = 100 * 5000; # 100r |
12 |
|
|
|
13 |
|
|
my $MAX_LEVEL = 115; |
14 |
|
|
# maximum values of additions at $MAX_LEVEL difficulty |
15 |
|
|
my $MAX_ADD_WC = 15; |
16 |
|
|
my $MAX_ADD_AC = 5; # weapons should rather give wc than ac |
17 |
|
|
my $MAX_ADD_DAM = 50; |
18 |
|
|
my $MAX_ADD_MAGIC = 5; |
19 |
|
|
|
20 |
|
|
sub rand_half($) { |
21 |
|
|
(($_[0] / 2) * rand) + ($_[0] / 2) |
22 |
|
|
} |
23 |
|
|
|
24 |
|
|
sub determine_weapon_value { |
25 |
|
|
my ($weapon) = @_; |
26 |
|
|
my $clone = $weapon->arch->clone; |
27 |
|
|
my $value = $clone->value; |
28 |
|
|
|
29 |
|
|
my $wc_diff = $weapon->stats->wc - $clone->stats->wc; |
30 |
|
|
my $ac_diff = $weapon->stats->ac - $clone->stats->ac; |
31 |
|
|
my $dam_diff = $weapon->stats->dam - $clone->stats->dam; |
32 |
|
|
my $magic_diff = $weapon->magic - $clone->magic; |
33 |
|
|
|
34 |
|
|
if ($wc_diff > 0) { $value += rand_half ($WC_BASE_VALUE * 1.5) * $wc_diff } |
35 |
|
|
if ($ac_diff > 0) { $value += rand_half ($AC_BASE_VALUE * 1.5) * $ac_diff } |
36 |
|
|
if ($dam_diff > 0) { $value += rand_half ($DAM_BASE_VALUE * 1.5) * $dam_diff } |
37 |
|
|
if ($magic_diff > 0) { $value += rand_half ($MAGIC_BASE_VALUE * 1.5) * $magic_diff } |
38 |
|
|
if ($DEBUG) { |
39 |
|
|
warn sprintf "WC DIFF: %3d, %3d, %3d, %3d | %10d = %10.3f r\n", |
40 |
|
|
$dam_diff, $wc_diff, $ac_diff, $magic_diff, $value, $value / 5000; |
41 |
|
|
} |
42 |
|
|
|
43 |
|
|
$weapon->value ($value); |
44 |
|
|
} |
45 |
|
|
|
46 |
|
|
cf::attach_to_type cf::WEAPON, 0, |
47 |
|
|
on_add_bonus => sub { |
48 |
|
|
my ($item, $creator, $diff, $max_magic, $flags) = @_; |
49 |
|
|
return if $flags != 0 || !$creator; |
50 |
|
|
|
51 |
|
|
$diff = $diff / $MAX_LEVEL; |
52 |
|
|
|
53 |
|
|
$item->stats->wc ( |
54 |
|
|
$item->stats->wc + int ((rand_half $MAX_ADD_WC) * (1+rand) * $diff)) |
55 |
|
|
if rand() <= 0.35; |
56 |
|
|
|
57 |
|
|
$item->stats->ac ( |
58 |
|
|
$item->stats->ac + int ((rand_half $MAX_ADD_AC) * (1+rand) * $diff)) |
59 |
|
|
if rand() <= 0.2; |
60 |
|
|
|
61 |
|
|
$item->stats->dam ( |
62 |
|
|
$item->stats->dam + int ((rand_half $MAX_ADD_DAM) * (1+rand) * $diff)) |
63 |
|
|
if rand() <= 0.7; |
64 |
|
|
|
65 |
|
|
$item->magic ( |
66 |
|
|
$item->magic + int ((rand_half $MAX_ADD_MAGIC) * $diff)) |
67 |
|
|
if rand() <= 0.2; |
68 |
|
|
|
69 |
|
|
determine_weapon_value ($item); |
70 |
|
|
|
71 |
|
|
cf::override; |
72 |
|
|
}; |