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.1 by root, Fri Dec 15 19:29:18 2006 UTC vs.
Revision 1.9 by root, Tue May 4 21:45:42 2010 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines