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
138
139
140
141
|
// TMW2 scripts.
// Authors:
// The Mana World Team
// Jesusalva
// Description:
// Cindy Cave core logic. You must flip 5 switches to free Cindy, and kill every
// Yeti to leave the Yeti's King Throne Room. Each passing minute, a new Yeti will
// spawn. Amount relies on how long this has been dragging on.
// Flipping switches creates yetis on the other switches.
// You must try flip all 5 switches at once. Once all switches are flipped, there'll
// be various waves of Yetis. More time passing = more penalty Yetis, with a safety
// check to abort script after a hour. If this happen, everyone inside the cave
// will be banned for cheating. This should not be possible without @monsterignore anyway :<
// Switches
function script CindySwitch_Check_214 {
.@st1=getvariableofnpc(.lifetime, "#CindySwitch_06")-gettimetick(2);
.@st2=getvariableofnpc(.lifetime, "#CindySwitch_07")-gettimetick(2);
.@st3=getvariableofnpc(.lifetime, "#CindySwitch_08")-gettimetick(2);
.@st4=getvariableofnpc(.lifetime, "#CindySwitch_09")-gettimetick(2);
.@st5=getvariableofnpc(.lifetime, "#CindySwitch_10")-gettimetick(2);
.@i=0;
if (.@st1 > 0) .@i++;
if (.@st2 > 0) .@i++;
if (.@st3 > 0) .@i++;
if (.@st4 > 0) .@i++;
if (.@st5 > 0) .@i++;
return .@i;
}
021-4,101,33,0 duplicate(#CindySwitch_01) #CindySwitch_06 NPC_SWITCH_OFFLINE
021-4,90,79,0 duplicate(#CindySwitch_01) #CindySwitch_07 NPC_SWITCH_OFFLINE
021-4,49,65,0 duplicate(#CindySwitch_01) #CindySwitch_08 NPC_SWITCH_OFFLINE
021-4,47,21,0 duplicate(#CindySwitch_01) #CindySwitch_09 NPC_SWITCH_OFFLINE
021-4,80,49,0 duplicate(#CindySwitch_01) #CindySwitch_10 NPC_SWITCH_OFFLINE
// Cindy
// Global Variable: $@CINDY_STATE
021-4,66,49,0 script Cindy#Outside NPC_CINDY_CAGE,{
if (getq(NivalisQuest_Cindy) < 4)
goto L_Cheat;
if ($@CINDY_STATE > 150000) goto L_Reset;
if ($@CINDY_STATE % 2 == 0) goto L_Start;
// Victory check missing
if (CindySwitch_Check_214() == 5) {
// Gate open must advance
setnpcdisplay .name$, NPC_CINDY_UNCAGE;
.@pl = getmapusers("021-4")+1;
areamonster "021-4", 20, 20, 100, 80, "Yeti", Yeti, (.@pl/2)+rand(2,6), "Cindy#Outside::OnPetDeath";
}
hello; end;
L_Cheat:
warp "Save", 0, 0; atcommand "@jail "+strcharinfo(0); dispbottom l("Cheater detected.");
end;
L_Reset:
$@CINDY_STATE=0;
npctalk l("*beeep*");
end;
L_Start:
mesn;
mesq l("Have you came here to rescue me?");
mes ""; mes "";
mesc l(".:: WARNING ::."), 1;
mesc l("Once you decide to rescue Cindy, nobody else will be able to enter or leave this room."), 1;
mesc l("The blame of failure will be over you, but so will be the glory of success. There's no death penalty for others."), 1;
mes "";
select
l("Not yet, I'm waiting for friends"),
l("Yes. Let me try to open this."),
l("No, I'll let you there to the Yeti's mercy.");
if (@menu == 2 && $@CINDY_STATE % 2 == 0) {
$@CINDY_STATE+=1;
$@CINDY_HERO=strcharinfo(0);
goto L_Begin;
}
close;
L_Begin:
initnpctimer;
enablenpc "#CindySwitch_06";
enablenpc "#CindySwitch_07";
enablenpc "#CindySwitch_08";
enablenpc "#CindySwitch_09";
enablenpc "#CindySwitch_10";
.@pl = getmapusers("021-4");
areamonster "021-4", 20, 20, 100, 80, "Yeti", Yeti, .@pl, "Cindy#Outside::OnPetDeath";
monster "021-4", 66, 49, "Yeti", Yeti, 1, "Cindy#Outside::OnPetDeath";
close;
OnPetDeath:
end;
OnReward:
if (ispcdead()) {
recovery();
warp "Save", 0, 0;
end;
}
getexp 10000, 0;
end;
L_CleanUp:
.lifetime=0;
$@CINDY_HERO="";
disablenpc "#CindySwitch_06";
disablenpc "#CindySwitch_07";
disablenpc "#CindySwitch_08";
disablenpc "#CindySwitch_09";
disablenpc "#CindySwitch_10";
setnpcdisplay .name$, NPC_CINDY_CAGE;
end;
OnTimer1000:
.@y=mobcount("021-4", "Cindy#Outside::OnPetDeath");
.@v=CindySwitch_Check_214();
if (.@y == 0 && .@v >= 5) {
mapannounce "021-4", "You won.",0;
areatimer "021-4", 20, 20, 100, 80, 10, "Cindy#Outside::OnReward";
goto L_CleanUp;
}
end;
OnInit:
.distance=5;
.lifetime=0; // Controls Yeti Wave
$@CINDY_HERO="";
disablenpc "#CindySwitch_06";
disablenpc "#CindySwitch_07";
disablenpc "#CindySwitch_08";
disablenpc "#CindySwitch_09";
disablenpc "#CindySwitch_10";
end;
}
|