ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/ext/bonus.ext
(Generate patch)

Comparing deliantra/server/ext/bonus.ext (file contents):
Revision 1.3 by root, Thu Jan 4 00:53:53 2007 UTC vs.
Revision 1.4 by elmex, Mon Feb 5 11:48:43 2007 UTC

1#!perl 1#!perl
2use List::Util qw/min/; 2use List::Util qw/min/;
3 3
4my $WC_BASE_VALUE = 15 * 5000; # 15r 4my $WC_BASE_VALUE = 15 * 5000; # 15r
5my $AC_BASE_VALUE = 40 * 5000; # 40r 5my $AC_BASE_VALUE = 40 * 5000; # 40r
6my $DAM_BASE_VALUE = 200; # 25p 6my $DAM_BASE_VALUE = 200; # 3.6p
7my $MAGIC_BASE_VALUE = 100 * 5000; # 100r 7my $MAGIC_BASE_VALUE = 100 * 5000; # 100r
8 8
9my $MAX_LEVEL = cf::settings->max_level; 9my $MAX_LEVEL = cf::settings->max_level;
10 10
11# maximum values of additions at $MAX_LEVEL difficulty 11# maximum values of additions at $MAX_LEVEL difficulty
12my $MAX_ADD_WC = 15; 12my $MAX_ADD_WC = 15;
13my $MAX_ADD_AC = 5; # weapons should rather give wc than ac 13my $MAX_ADD_AC = 5; # weapons should rather give wc than ac
14my $MAX_ADD_DAM = 50; 14my $MAX_ADD_DAM = 70;
15my $MAX_ADD_MAGIC = 5; 15my $MAX_ADD_MAGIC = 5;
16 16
17# TODO: should become part of some stdlib 17# TODO: should become part of some stdlib
18sub rand_range($$) { 18sub rand_range($$) {
19 $_[0] + ($_[1] - $_[0]) * rand 19 $_[0] + ($_[1] - $_[0]) * rand
31 31
32 my $magic_diff = $weapon->magic - $clone->magic; 32 my $magic_diff = $weapon->magic - $clone->magic;
33 33
34 if ($wc_diff > 0) { $value += $WC_BASE_VALUE * 1.5 * $wc_diff * rand_range .5, 1 } 34 if ($wc_diff > 0) { $value += $WC_BASE_VALUE * 1.5 * $wc_diff * rand_range .5, 1 }
35 if ($ac_diff > 0) { $value += $AC_BASE_VALUE * 1.5 * $ac_diff * rand_range .5, 1 } 35 if ($ac_diff > 0) { $value += $AC_BASE_VALUE * 1.5 * $ac_diff * rand_range .5, 1 }
36 if ($dam_diff > 0) { $value += $DAM_BASE_VALUE * ($dam_diff ** 2.4) * rand_range .5, 1 } 36 if ($dam_diff > 0) { $value += $DAM_BASE_VALUE * ($dam_diff ** 2.1) * rand_range .7, 1 }
37 if ($magic_diff > 0) { $value += $MAGIC_BASE_VALUE * 1.5 * $magic_diff * rand_range .5, 1 } 37 if ($magic_diff > 0) { $value += $MAGIC_BASE_VALUE * 1.5 * $magic_diff * rand_range .5, 1 }
38 38
39# warn sprintf "WC DIFF: %3d, %3d, %3d, %3d | %10d = %10.3f r\n", 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 40 # $dam_diff, $wc_diff, $ac_diff, $magic_diff, $value, $value / 5000
41# if $cf::CFG{ext_bonus_debug}; 41 # if $cf::CFG{ext_bonus_debug};
42 42
43 $weapon->value ($value); 43 $weapon->value ($value);
44} 44}
45 45
46cf::object->attach ( 46cf::object->attach (
49 my ($item, $creator, $diff, $max_magic, $flags) = @_; 49 my ($item, $creator, $diff, $max_magic, $flags) = @_;
50 return if $flags || !$creator; 50 return if $flags || !$creator;
51 51
52 $diff /= $MAX_LEVEL; 52 $diff /= $MAX_LEVEL;
53 53
54 $item->stats->wc ($item->stats->wc + int $MAX_ADD_WC * (1 + rand) * $diff * rand_range .5, 1) if rand() <= 0.35; 54 $item->stats->wc ($item->stats->wc + int $MAX_ADD_WC * (1 + rand) * $diff * rand_range .5, 1) if rand() <= 0.2;
55 $item->stats->ac ($item->stats->ac + int $MAX_ADD_AC * (1 + rand) * $diff * rand_range .5, 1) if rand() <= 0.2; 55 $item->stats->ac ($item->stats->ac + int $MAX_ADD_AC * (1 + rand) * $diff * rand_range .5, 1) if rand() <= 0.15;
56 $item->stats->dam ($item->stats->dam + int $MAX_ADD_DAM * (1 + rand) * $diff * rand_range .5, 1) if rand() <= 0.7; 56 $item->stats->dam ($item->stats->dam + int $MAX_ADD_DAM * (1 + rand) * $diff * rand_range .5, 1) if rand() <= 0.85;
57 $item->magic ($item->magic + int $MAX_ADD_MAGIC * $diff * rand_range .5, 1) if rand() <= 0.2; 57 $item->magic ($item->magic + int $MAX_ADD_MAGIC * $diff * rand_range .5, 1) if rand() <= 0.1;
58 58
59 determine_weapon_value $item; 59 determine_weapon_value $item;
60 60
61 cf::override; 61 cf::override;
62 }, 62 },

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines