ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/maps/perl/bonus.ext
Revision: 1.1
Committed: Mon Dec 11 15:59:08 2006 UTC (17 years, 5 months ago) by elmex
Branch: MAIN
Log Message:
added bonus.ext which gives weapons reasonable stats

File Contents

# User Rev Content
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     };