summaryrefslogtreecommitdiff
path: root/npc/008-1/master.txt
blob: 9d4e61efd0291b4db9100d34dff0fdb6c0a8dc19 (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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// TMW-2 Script
// Author:
//  Jesusalva
// Description:
//  This NPC is a work on progress. It measures all players equal.

008-1,48,117,0	script	First Dungeon Master	NPC_BRGUARD_SWORD,{
    mesn;
    if (getcharid(1) <= 0) {
        mesq l("Leaving your party? LAME.");
        warp "SavePoint",0,0;
    }
    if (mobcount("008-1", "First Dungeon Master::OnBossDeath") > 0) {
        npctalk3 l("What are you doing? Fight!");
        end;
    }

    mesq l("Compliments reaching this far, @@ from the @@ party!", strcharinfo(0), getpartyname(getcharid(1)));
    next;

    mesn;
    mesq l("I can summon the BOSS for the level 0~20 area.");
    next;
    if (strcharinfo(0) != getpartyleader(getcharid(1))) goto L_NotYou;
    mesn;
    mesq l("He is strong though, so keep your party togheter!");
    next;
    // Get info about your party, and backup it
    getpartymember(getcharid(1));
	.@count = $@partymembercount;
	copyarray(.@name$[0], $@partymembername$[0], $@partymembercount);
	copyarray(.@aid[0], $@partymemberaid[0], $@partymembercount);
	copyarray(.@cid[0], $@partymembercid[0], $@partymembercount);
    .@count_online=0;

    if (.@count < 3 && !$@GM_OVERRIDE) goto L_TooSmall;
    mesn;
    mesc l("Are you and your party ready?"), 1;
    if (askyesno() != ASK_YES)
        close;

    // Loop though party to see if you can start
	for (.@i = 0; .@i < .@count; ++.@i) {
        // Online?
		if (isloggedin(.@aid[.@i], .@cid[.@i])) {
            getmapxy(.@m$, .@x, .@y, 0, .@name$[.@i]);
            // Here?
            if (.@m$ == .map$)
    			.@count_online++;
        }
    }

    // How many are logged in and here?
    if (.@count_online < 3 && !$@GM_OVERRIDE) goto L_TooSmall;

    // TODO: Query if exp sharing is enabled
    // TODO: Instance for party
    // TODO: Second Floor
    npctalk l("@@: Fight!", getpartyname(getcharid(1)));
    monster "008-1", rand(37,54), rand(109,122), "First Dungeon Boss", Sarracenus, 1, "First Dungeon Master::OnBossDeath";
    close;










// Only the party leader can start this. But you can rejoin, as long map leader is on 008-2+
L_NotYou:
    getmapxy(.@m$, .@x, .@y, 0, getpartyleader(getcharid(1)));
    if (.@m$ ~= "008-*" &&
        .@m$ != "008-0" &&
        .@m$ != "008-1" &&
        BaseLevel > 20 &&
        mobcount("008-1", "First Dungeon Master::OnBossDeath") == 0 &&
        @pmloop) {
        mesn;
        mesq l("Go and follow @@, your party leader!", getpartyleader(getcharid(1)));
        warp "008-1", 176, 20; // 008-2
    } else if (BaseLevel > 20) {
        mesn;
        mesq l("If you bring me @@, your party leader, and the boss is defeated, I can let you in.", getpartyleader(getcharid(1)));
    } else {
        mesn;
        mesq l("I cannot let you pass, because you are only level @@.", BaseLevel);
        mesc l("Newbies can only get past their limits once, with their party leader level help! If they die, they can't rejoin!");
        // I thought it would be better this way. There was at least three different ways to prevent that.
    }
    close;

// Minimum 3 players
L_TooSmall:
    mesn;
    mesq l("However, I need to see at least three volunteers here, to allow you in.");
    close;

// Second Floor special monsters
OnMobTime:
    getmapxy(.@m$, .@x, .@y, 0);
    areatimer(.@m$, .@x-4, .@y-4, .@x+4, .@y+4, 10, "Party Master::OnAddTime");
    end;

OnReward:
    Zeny=Zeny+200;
    getexp 200, 20;
    dispbottom l("Reward: 200 GP, 200 XP");
OnAddTime:
    @pmloop=60;
    end;

OnBossDeath:
    // Give every party member in map a reward
    partytimer("008-1", 200, "First Dungeon Master::OnReward", getcharid(1));

    // Warp everyone and add timers
    warpparty("008-1", 176, 20, getcharid(1), "008-1", true);

    // Bonus Monsters
    monster("008-1", 90, 69, "Time Bonus", Scorpion, 1, "Party Master::OnMobTime");

    // Four Chests
    monster("008-1", 38, 104, "Mysterious Chest", any(BronzeChest, BronzeMimic), 1);
    monster("008-1", 41, 104, "Mysterious Chest", any(BronzeChest, BronzeMimic), 1);
    monster("008-1", 44, 104, "Mysterious Chest", any(BronzeChest, BronzeMimic), 1);
    monster("008-1", 47, 104, "Mysterious Chest", any(BronzeChest, BronzeMimic), 1);
    end;

OnInit:
    .sex = G_MALE;
    .distance = 5;
    end;
}