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
|
// TMW 2 Script
// Author:
// Jesusalva
// Micksha
// Description:
// Basement Boss Fight
042-2,41,22,0 script #KDoor0422 NPC_HIDDEN,0,0,{
function kdoor0422Spawn;
end;
OnTouch:
.@label$=instance_npcname(.name$)+"::OnKillBoss";
.@g=getcharid(2);
if (($KAMELOT_QUEST[.@g] & 4) && !mobcount(getmap(), .@label$)) {
warp "042-2@"+.@g, 58, 139;
} else {
dispbottom l("Powerful magic repels you!");
percentheal -5, -5;
slide 38, 28;
}
end;
OnArrival:
.@g=getcharid(2);
if (.@g < 1)
percentheal -100, -100;
if (getmap() != "042-2@"+.@g)
end;
if ($@KAMELOT_WAVE[.@g] != 3)
end;
$@KAMELOT_WAVE[.@g]+=1;
initnpctimer;
//if ($@KAMELOT_WAVE == 0)
// goto OnKillMob;
// TODO: Fire dialog
// TODO: Stun yourself for cutscene
// ...
end;
OnTimer1000:
.@m$=instance_mapname("042-2");
.@n$=instance_npcname(.name$);
mapannounce .@m$, "??? : Where's Micksha? WHRE IS ARTHUR MICKSHA", 0;
// 2 is meaningless, as we're not using their acc ids, but sounded faster
getguildmember(.@g, 2);
.@gcount=$@guildmembercount;
kdoor0422Spawn(.@gcount*2, 20, 24, 59, 59);
end;
OnKillMob:
if (!playerattached()) end;
.@g=getcharid(2);
if (.@g < 1) percentheal -100, -100;
getexp $KAMELOT_MX[.@g]*5, $KAMELOT_MX[.@g]*2;
end;
OnKillBoss:
.@g=getcharid(2);
dispbottom l("This is all in KAMELOT for now.");
$KAMELOT_QUEST[.@g]=$KAMELOT_QUEST[.@g]|4; // FIXME
// Player Reward for completing this stage
getitem GuildCoin, min(1, $KAMELOT_MX[.@g]/20);
getexp $KAMELOT_MX[.@g]*50, $KAMELOT_MX[.@g]*10;
// Guild Reward for completing this stage
.@ggp=300+$KAMELOT_MX[.@g]*5;
.@gxp=$KAMELOT_MX[.@g]*10;
$GUILD_BANK[.@g]+=.@ggp;
guildgetexp(.@gxp); // 5xp per player average level (max 500/750)
// Announce
mapannounce getmap(), strcharinfo(0)+" has defeated Krukan!", 0;
// Guild Master Notification
.@gm$=getguildmaster(.@g);
if (!getcharid(3, .@gm$)) end;
.@gma=getcharid(3, .@gm$);
.@gmb=getcharid(0, .@gm$);
if (!isloggedin(.@gma, .@gmb)) end;
message .@gm$, strcharinfo(0)+" defeated Krukan: Guild GP +"+.@ggp+" Guild XP +"+.@gxp;
// TODO: maptimer to give EXP to helpers/survivors
end;
function kdoor0422Spawn {
.@label$=instance_npcname(.name$)+"::OnKillMob";
.@gcount=getarg(0);
.@x1=getarg(1);
.@y1=getarg(2);
.@x2=getarg(3);
.@y2=getarg(4);
.@g=getcharid(2);
if (.@g < 1) percentheal -100, -100;
.@avg=$KAMELOT_MX[.@g];
.@m$=getmap();
freeloop(true);
for (.@i=0; .@i < .@gcount; .@i++) {
.@mobId=any(CursedSoldier, CursedArcher); // 50-50 ratio
.@mob=areamonster(.@m$, 21, 24, 59, 99, strmobinfo(1, .@mobId), .@mobId, 1, .@label$);
// Reconfigure the monster
setunitdata(.@mob, UDT_LEVEL, .@avg);
setunitdata(.@mob, UDT_STR, 1+.@avg/4);
setunitdata(.@mob, UDT_AGI, 1+.@avg/4);
setunitdata(.@mob, UDT_VIT, 1+.@avg/4);
setunitdata(.@mob, UDT_INT, 1+.@avg/4);
setunitdata(.@mob, UDT_DEX, 1+.@avg/4);
setunitdata(.@mob, UDT_LUK, 1+.@avg/4);
setunitdata(.@mob, UDT_ADELAY, 1672);
setunitdata(.@mob, UDT_ATKRANGE, (.@mobId == CursedArcher ? any(6,7) : any(1,2)));
// Battle Status
setunitdata(.@mob, UDT_MAXHP, .@avg*33);
setunitdata(.@mob, UDT_HP, .@avg*33);
setunitdata(.@mob, UDT_ATKMIN, .@avg*45/10);
setunitdata(.@mob, UDT_ATKMAX, .@avg*65/10);
setunitdata(.@mob, UDT_DEF, 1+.@avg*9/10);
setunitdata(.@mob, UDT_MDEF, 1+.@avg*5/10);
setunitdata(.@mob, UDT_HIT, .@avg*4); // Advised: x3
setunitdata(.@mob, UDT_FLEE, .@avg*35/10); // Advised: x4
// Critical calculation
.@min=2;
.@max=max(.@min, min(25, .@avg/5));
setunitdata(.@mob, UDT_CRIT, rand2(.@min, .@max));
// Loop through
}
freeloop(false);
return;
}
// Script end
}
|