ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/maps/perl/bonus.ext
Revision: 1.2
Committed: Mon Dec 11 18:16:02 2006 UTC (17 years, 5 months ago) by root
Branch: MAIN
Changes since 1.1: +27 -35 lines
Log Message:
tried to understand the code, some formatting changes etc.

File Contents

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