AndMetal |
11-15-2008 07:12 PM |
Quote:
Originally Posted by paaco
(Post 160034)
Only thing in the quest that does not work correctly is all of the nested if statements up top, rest works perfectly.
|
What is sounds like you're trying to do is a string of ORs, not nested IFs. If you were trying to nest IF statements, you could also do it by using a bunch of AND statements:
Code:
if ((($ulevel <= 8) && ($mlevel + 3 >= $ulevel) )
&& (($ulevel == 9) && ($mlevel + 4 >= $ulevel))
&& (($ulevel == 10) && ($mlevel + 5 >= $ulevel))
&& (($ulevel == 11) && ($mlevel + 5 >= $ulevel))
&& (($ulevel == 12) && ($mlevel + 5 >= $ulevel))
&& (($ulevel == 13) && ($mlevel + 6 >= $ulevel))
&& (($ulevel == 14) && ($mlevel + 6 >= $ulevel))
&& (($ulevel == 15) && ($mlevel + 6 >= $ulevel))
&& (($ulevel == 16) && ($mlevel + 6 >= $ulevel))
&& (($ulevel == 17) && ($mlevel + 7 >= $ulevel))
&& (($ulevel == 18) && ($mlevel + 7 >= $ulevel))
&& (($ulevel == 19) && ($mlevel + 7 >= $ulevel))
&& (($ulevel == 20) && ($mlevel + 7 >= $ulevel))
&& (($ulevel == 21) && ($mlevel + 8 >= $ulevel))
&& (($ulevel == 22) && ($mlevel + 8 >= $ulevel))
&& (($ulevel == 23) && ($mlevel + 8 >= $ulevel))
&& (($ulevel == 24) && ($mlevel + 8 >= $ulevel))
&& (($ulevel == 25) && ($mlevel + 9 >= $ulevel))
&& (($ulevel == 26) && ($mlevel + 9 >= $ulevel))
&& (($ulevel == 27) && ($mlevel + 9 >= $ulevel))
&& (($ulevel == 28) && ($mlevel + 10 >= $ulevel))
&& (($ulevel == 29) && ($mlevel + 10 >= $ulevel))
&& (($ulevel == 30) && ($mlevel + 10 >= $ulevel))
&& (($ulevel == 31) && ($mlevel + 11 >= $ulevel))
&& (($ulevel == 32) && ($mlevel + 11 >= $ulevel))
&& (($ulevel == 33) && ($mlevel + 12 >= $ulevel))
&& (($ulevel == 34) && ($mlevel + 12 >= $ulevel))
&& (($ulevel == 35) && ($mlevel + 12 >= $ulevel))
&& (($ulevel == 36) && ($mlevel + 12 >= $ulevel))
&& (($ulevel == 37) && ($mlevel + 13 >= $ulevel))
&& (($ulevel == 38) && ($mlevel + 13 >= $ulevel))
&& (($ulevel == 39) && ($mlevel + 13 >= $ulevel))
&& (($ulevel == 40) && ($mlevel + 13 >= $ulevel))
&& (($ulevel == 41) && ($mlevel + 14 >= $ulevel))
&& (($ulevel == 42) && ($mlevel + 15 >= $ulevel))
&& (($ulevel == 43) && ($mlevel + 15 >= $ulevel))
&& (($ulevel == 44) && ($mlevel + 15 >= $ulevel))
&& (($ulevel == 45) && ($mlevel + 16 >= $ulevel))
&& (($ulevel == 46) && ($mlevel + 16 >= $ulevel))
&& (($ulevel == 47) && ($mlevel + 16 >= $ulevel))
&& (($ulevel == 48) && ($mlevel + 16 >= $ulevel))
&& (($ulevel == 49) && ($mlevel + 17 >= $ulevel))
&& (($ulevel == 50) && ($mlevel + 17 >= $ulevel))
) {
But that's not going to work, because you're never going to be all levels 50 and below at the same time. However, if you changed all of the &&'s to ||'s, it would do what you're looking for.
Quote:
Originally Posted by AndMetal
(Post 160033)
There's a lot of things I can think of that would trim the script down a LOT, but I think it would be better to understand where we're trying to get first.
|
Here's a thought on the whole if part...
I'm not sure if this will actually work (unable to test syntax, etc), but it should work in theory:
Code:
sub EVENT_KILLED_MERIT {
# $level_diff{level} == difference
my %level_diff = (
1, 3,
2, 3,
3, 3,
4, 3,
5, 3,
6, 3,
7, 3,
8, 3,
9, 4,
10, 5,
11, 5,
12, 5,
13, 6,
14, 6,
15, 6,
16, 6,
17, 7,
18, 7,
19, 7,
20, 7,
21, 8,
22, 8,
23, 8,
24, 8,
25, 9,
26, 9,
27, 9,
28, 10,
29, 10,
30, 10,
31, 11,
32, 11,
33, 12,
34, 12,
35, 12,
36, 12,
37, 13,
38, 13,
39, 13,
40, 13,
41, 14,
42, 15,
43, 15,
44, 15,
45, 16,
46, 16,
47, 16,
48, 16,
49, 17,
50, 17,
)
if ($mlevel + $level_diff{$ulevel} >= $ulevel) {
#whatever
}
}
Although this is a little more dynamic, since it accounts any values over 50:
Code:
sub EVENT_KILLED_MERIT {
if ((($ulevel <= 8) && ($mlevel + 3 >= $ulevel) )
|| (($ulevel == 9) && ($mlevel + 4 >= $ulevel))
|| (($ulevel >= 10 && $ulevel <= 12) && ($mlevel + 5 >= $ulevel))
|| (($ulevel >= 13 && $ulevel <= 16) && ($mlevel + 6 >= $ulevel))
|| (($ulevel >= 17 && $ulevel <= 20) && ($mlevel + 7 >= $ulevel))
|| (($ulevel >= 21 && $ulevel <= 24) && ($mlevel + 8 >= $ulevel))
|| (($ulevel >= 25 && $ulevel <= 27) && ($mlevel + 9 >= $ulevel))
|| (($ulevel >= 28 && $ulevel <= 30) && ($mlevel + 10 >= $ulevel))
|| (($ulevel >= 31 && $ulevel <= 32) && ($mlevel + 11 >= $ulevel))
|| (($ulevel >= 33 && $ulevel <= 36) && ($mlevel + 12 >= $ulevel))
|| (($ulevel >= 37 && $ulevel <= 40) && ($mlevel + 13 >= $ulevel))
|| (($ulevel == 41) && ($mlevel + 14 >= $ulevel))
|| (($ulevel >= 42 && $ulevel <= 44) && ($mlevel + 15 >= $ulevel))
|| (($ulevel >= 45 && $ulevel <= 48) && ($mlevel + 16 >= $ulevel))
|| (($ulevel >= 49) && ($mlevel + 17 >= $ulevel))
) {
#whatever
}
}
|