summaryrefslogtreecommitdiff
path: root/npc/functions/mob_points.txt
blob: cecf645eaf77599e84fdc91b832659be024d9551 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
// TMW2 Scripts
// Author: Crazyfefe
//         Jesusalva
// Desc:   Mob Points for Aidan & Ishi. You will gain MONSTER-LEVEL mob points.

// fix_mobkill(mobID) → Manual fix for scripted mobs
function	script	fix_mobkill	{
    killedrid=getarg(0);
    doevent "#mobptsys::OnNPCKillEvent";
    return;
}

function	script	MobPoints	{
    $MONSTERS_KILLED+=1;
    MONSTERS_KILLED+=1;

    if (MPQUEST) {
        .@moblv=strmobinfo(3,killedrid);

        // You get MobLv + 20% as MobPoints.
        // So a level 100 monster gives you 120 MobPt. Slimes gives no bonus.
        if (compare("slime", strtolower(strmobinfo(1, killedrid))))
            .@addval=.@moblv;
        else
            .@addval=.@moblv*12/10;

        // Penalty/Bonus
        .@base=(.@moblv-BaseLevel);

        if (BaseLevel < .@moblv) {
            // Target is stronger, +3% per monster level, capped at +75%
            .@addval = .@addval * limit(100, 100+(.@base*3), 175) / 100;
        } else if (BaseLevel > .@moblv) {
            // Target is weaker, -1% per monster level, capped at -50%
            .@addval = .@addval * limit(50, 101+.@base, 100) / 100;
        }

        // Sanitization
        .@addval=max(0, .@addval);

        // Grant you the Monster Points
        Mobpt+=.@addval;
    }

    callfunc "ValonCount";
    if (((QL_VALON >= 2) && (QL_VALON < 6)) && (@mobId == $@ValonMob[@valon_mob]))
        goto L_ValonMobKill;
    goto L_NatureKarma;

L_ValonMobKill:
    callfunc "AddValonCntMask";
    goto L_NatureKarma;

L_NatureKarma:
    if ((@mobId == 1003) || (@mobId == 1004) || (@mobId == 1009) || (@mobId == 1057)
        || (@mobId == 1104) || (@mobId == 1105) || (@mobId == 1106) || (@mobId == 1107))
            goto L_Good;

    // Attitude adjustment for the witch (can we refactor this to another function?  Not sure about max. recursion depth)

    @value = 0;
    if (@mobId == 1018)
        @value = 3;

    if (@mobId == 1020)
        @value = 3;
    if (@mobId == 1027)
        @value = 3;
    if (@mobId == 1028)
        @value = 4;
    if (@mobId == 1038)
        @value = 2;
    if (@mobId == 1094)
        @value = 3;
    if (@mobId == 1112)
        @value = 3;
    if (@mobId == 1113)
        @value = 3;

    if (@value == 0)
        goto L_Celestia;

    callfunc "QuestSagathaAnnoy";
    goto L_Celestia;

L_Good:
    @value = 1;
    callfunc "QuestSagathaHappy";
    goto L_Celestia;

L_Celestia:
    if (QL_CELESTIA < 5 || QL_CELESTIA >= 205 || @mobId != 1072) goto L_Return;
    QL_CELESTIA = QL_CELESTIA + 1;
    if (QL_CELESTIA == 205)
        message strcharinfo(0), "Yeti : ##3This should be enough yetis killed to please Celestia.";
    goto L_Return;

L_Return:
    @value = 0;
    return;
}