summaryrefslogtreecommitdiff
path: root/npc/custom/events/disguise.txt
blob: fde5e544afe7e5f39a773ff17fbc32b3e4de74c5 (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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
//===== Hercules Script ======================================
//= Disguise Event
//===== By: ==================================================
//= GmOcean
//===== Current Version: =====================================
//= 5.1
//===== Additional Comments: =================================
//= Note: This script requires PCRE to run properly.
//= 5.0 Last update by GmOcean.
//= 5.1 Cleaned and standardized, mostly. [Euphy]
//= 5.2 Fix a bug that causes this event run indefinitely [AnnieRuru]
//============================================================

prontera,160,155,4	script	Disguise Event	4_M_NFDEADMAN,{

	// Currently set to run every two hours.
	// To change times, edit the OnClock labels below.

	set .@GMLevel,60;	// GM level required to access NPC.
	set .@n$,"[^0000FFDisguise NPC^000000]";

	if (getgmlevel()>=.@GMLevel) {
		mes .@n$;
		mes "Select an option.";
		next;
		switch(select("Turn ON/OFF Event", "Event Settings")) {
		case 1:
			mes .@n$;
			if (.EventON) {
				mes "The Event is currently: [^0000FFON^000000]";
				mes "Would you like to turn it OFF?";
			} else {
				mes "The Event is currently: [^FF0000OFF^000000]";
				mes "Would you like to turn it ON?";
			}
			if(select("Yes", "No")==2) close;
			if (.EventON) {
				set .EventON,0; set .Timer,0;
				setnpctimer 0; stopnpctimer;
				announce "A GM has decided to turn the Disguise Event off. As a result no further prizes will be given.",bc_map | bc_blue;
				deletepset 1;
				setnpcdisplay "Disguise Event", 4_M_NFDEADMAN;
				close;
			}
			set .EventON,1; set .Timer,1; setnpctimer 0; initnpctimer;
			set .ResetCounter,.ResetCounter+1;
			announce "The Disguise Event will begin in 3 minutes.",bc_all | bc_blue;
			announce "The Event is being held in Prontera.",bc_all | bc_blue;
			close;
		case 2:
			mes .@n$;
			mes "Pick a setting to modify.";
			next;
			switch(select("Monster Display", "Number of Rounds", "Prize Settings")) {
			case 1:
				setarray .@r$[0],"Disguise as all monsters.","Disguise as MVPs only.";
				mes .@n$;
				mes "Choose a disguise rule.";
				next;
				set .Rule, select(implode(.@r$,":"));
				mes .@n$;
				mes "The Disguise Rule has been set:";
				mes "  > ^0055FF"+.@r$[.Rule-1]+"^000000";
				close;
			case 2:
				mes .@n$;
				mes "Input the number of rounds you want the event to last.";
				mes "Current number: [^0000FF"+.Rounds+"^000000]";
				next;
				input .@Rounds;
				set .Rounds,.@Rounds;
				mes .@n$;
				mes "The number of rounds has been changed to "+.Rounds+".";
				close;
			case 3:
				mes .@n$;
				mes "Input the Item ID of the prize given each round.";
				mes "Current item: [^0000FF"+getitemname(.Prize)+"^000000] (ID #"+.Prize+")";
				next;
				input .@Prize;
				mes .@n$;
				if (getitemname(.@Prize)=="" || getitemname(.@Prize)=="null") {
					mes "That item does not exist. Please try again.";
					close;
				}
				set .Prize,.@Prize;
				mes "Input the amount to be given.";
				next;
				input .@amount;
				mes .@n$;
				if (.@amount<=0 || .@amount>=10000) {
					mes "That amount is invalid. Using default ammount of 1.";
					set .@amount,1;
					next;
					mes .@n$;
				}
				set .PrizeAmt,.@amount;
				mes "The Prize has been changed successfully.";
				mes "Prize: "+.PrizeAmt+"x [^0000FF"+getitemname(.Prize)+"^000000]";
				close;
			}
		}
	}
	if (.EventON) end;
	mes .@n$;
	mes "Welcome.";
	mes "How may I be of assistance?";
	if(select("Information", "Nothing, just passing through.")==2) close;
	next;
	mes .@n$;
	mes "This event is quite simple.";
	mes "At the start of the event, I will";
	mes "disguise myself as a random";
	mes "monster. You have to shout";
	mes "that monter's name out loud.";
	next;
	mes "If you are correct, you will receive";
	mes "a prize. If not, keep trying!";
	mes "That's all that there is to this event.";
	close;

OnInit:
	set .EventON,0;
	set .Wait,0;
	set .Winner,0;
	set .ResetCounter,0;
	set .Rounds,10;
	set .Prize,512;
	set .PrizeAmt,1;
	set .Rule,1;
	setarray .MVP[0], OSIRIS, BAPHOMET, DOPPELGANGER, MISTRESS, GOLDEN_BUG, ORK_HERO, DRAKE, EDDGA, MAYA, MOONLIGHT,
		PHARAOH, PHREEONI, ORC_LORD, KNIGHT_OF_WINDSTORM, GARM, DARK_LORD, TURTLE_GENERAL, LORD_OF_DEATH, DRACULA, EVENT_BAPHO,
		DARK_SNAKE_LORD, INCANTATION_SAMURAI, PORING_V, AMON_RA, TAO_GUNKA, RSX_0806, BACSOJIN_, B_SEYREN, B_EREMES, B_HARWORD,
		B_MAGALETA, B_SHECIL, B_KATRINN, B_YGNIZEM, APOCALIPS_H, LADY_TANEE, THANATOS, DETALE, KIEL_, RANDGRIS,
		GLOOMUNDERNIGHT, KTULLANUX, ATROCE, G_MAGALETA_, IFRIT, FALLINGBISHOP, BEELZEBUB_, GOPINICH, MOROCC_, KUBLIN,
		S_NYDHOG, BOITATA;
	if (RENEWAL){
		setarray .MVP[getarraysize(.MVP)], QUEEN_SCARABA, LOST_DRAGON, LEAK, I_QUEEN_SCARABA;
	}
	set .Blacklist$, "1003,1006,1017,1021,1022,1027,1043,1075,1136,1137,1168," +
	    "1171,1172,1173,1181,1187,1210,1217,1218,1222,1223,1224,1225,1226,1227,1228," +
	    "1233,1284,1407,1411,1414,1495,1501,1900,1996,2000,2001,2002,2003,2004," +
	    "2005,2006,2007,2011,2012,2025,2028,2029,2030,2031,2032,2033,2034,2035," +
	    "2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049," +
	    "2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063," +
	    "2064,2065,2066,2067,2075,2076,2077,2078,2079,2080,2081,2083,2084,2085," +
	    "2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099," +
	    "2100,2101,2012,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113," +
	    "2114,2115,2116,2117,2118,2119,2120,2121,2123,2124,2125,1496,";
	end;
OnClock0000:
OnClock0200:
OnClock0400:
OnClock0600:
OnClock0800:
OnClock1000:
OnClock1200:
OnClock1400:
OnClock1600:
OnClock1800:
OnClock2000:
OnClock2200:
	set .ResetCounter,.ResetCounter+1;
	set .EventON,1;
	set .Timer,1;
	set .Wait,1;
	announce "The Disguise Event will begin in 3 minutes.",bc_all | bc_blue;
	announce "The Event is being held in Prontera.",bc_all | bc_blue;
	setnpctimer 0;
	initnpctimer;
	end;
OnTimer10000:
	if (.Timer || .Change) end;
	set .Wait,0;
	goto iDisguise;
	end;
OnTimer30000:
	if (.Timer) end;
	set .Change,0;
	setnpcdisplay "Disguise Event", 4_M_NFDEADMAN;
	npctalk "You took too long to guess what I was. Please wait 10 seconds while I disguise again.";
	specialeffect EF_DETECT2;
	set $MonsterName$,"";
	deletepset 1;
	stopnpctimer;
	setnpctimer 0;
	++.RoundCount;
	if (.RoundCount >= .Rounds) {
		setnpcdisplay "Disguise Event", 4_M_NFDEADMAN;
		.RoundCount = 0;
		.Change = 0;
		.EventON = 0;
		npctalk "Thank you all for playing. That was the last round of the Disguise Event. Come play again later.";
		end;
	}
	initnpctimer;
	end;
OnTimer60000:
	if (.Timer!=1) end;
	announce "The Disguise Event will begin in 2 minutes.",bc_all | bc_blue;
	announce "The Event is being held in Prontera.",bc_all | bc_blue;
	end;
OnTimer120000:
	if (.Timer!=1) end;
	announce "The Disguise Event will begin 1 minute.",bc_all | bc_blue;
	announce "The Event is being held in Prontera.",bc_all | bc_blue;
	end;
OnTimer180000:
	if (.Timer!=1) end;
	announce "The Disguise Event has begun!",bc_all | bc_blue;
	announce "The Event is being held in Prontera.",bc_all | bc_blue;
	set .Timer,0; stopnpctimer;
	setnpctimer 0; initnpctimer;
iDisguise:
	if (.Rule==1) {
		set .Winner,0;
		set .@monster, rand(SCORPION, PINGUICULA);
		if (compare(","+.Blacklist$+"," , ","+.@monster+",")) goto iDisguise;
		if (.@monster==.LastMonster) goto iDisguise;
		set .LastMonster,.@monster;
		set $MonsterName$,getmonsterinfo(.@monster,0);
	}
	if (.Rule==2) {
		set .Winner,0;
		set .@monster, rand(getarraysize(.MVP));
		set $MonsterName$,getmonsterinfo(.MVP[.@monster],0);
	}
	deletepset 1;
	defpattern 1,"([^:]+):.\\s*"+$MonsterName$+".*", "iCorrect";
	activatepset 1;
	if (.Rule==1) setnpcdisplay "Disguise Event",.@monster;
	if (.Rule==2) setnpcdisplay "Disguise Event",.MVP[.@monster];
	set .Change,1;
	setnpctimer 0;
	end;
iCorrect:
	if (.Winner) {
		dispbottom "Someone has already won this round.";
		end;
	}
	set .Winner,1;
	set .RoundCount,.RoundCount+1;
	deletepset 1;
	activatepset 1;
	getitem .Prize,.PrizeAmt;
	announce strcharinfo(PC_NAME)+" is correct! I was disguised as: "+$MonsterName$+"",bc_map | bc_blue;
	if (.RoundCount>=.Rounds) {
		setnpcdisplay "Disguise Event", 4_M_NFDEADMAN;
		set .RoundCount,0; set .Change,0; set .EventON,0;
		setnpctimer 0; stopnpctimer;
		npctalk "Thank you all for playing. That was the last round of the Disguise Event. Come play again later.";
		end;
	}
	setnpcdisplay "Disguise Event", 4_M_NFDEADMAN;
	set .Change,0;
	setnpctimer 0;
	end;
}