· 8 years ago · Aug 03, 2018, 04:18 AM
1//===== Cronus Script ==================================================================|
2//= Aluguel de sala PvP |
3//===== Por: ===========================================================================|
4//= Ansen |
5//===== Descrição: =====================================================================|
6//= Sala PvP de aluguel com número máximo de players e tempo |
7//= configurados pelo próprio jogador. |
8//= Mapa, preços, número mÃnimo e máximo de jogadores configuráveis. |
9//======================================================================================|
10//==== Versão ==========================================================================|
11//== 1.1 ===============================================================================|
12//= Feitas algumas correções no npc. |
13//= Adicionado opção para apenas vips alugarem salas. |
14//= Adicionado configuração de tempo máximo para se alugar uma sala. |
15//= Adicionado opção de colocar senha nas salas. |
16//== 1.2 ===============================================================================|
17//= Adicionada opção de múltiplas salas, podem ter até 127, configuráveis no script. |
18//= Corrigido verificação de personagens no mapa. |
19//== 1.3 ===============================================================================|
20//= Mapflags no final do script retirados. |
21//= Setmapflags adicionados. |
22//= Tabelas adicionadas. |
23//= Comandos por PM adicionados. |
24//== 1.4 ===============================================================================|
25//= Alguns erros no script corrigidos. |
26//= Novas opções por PM, para Administradores, adicionadas: |
27//= Adicionar sala: !addroom |
28//= Deletar sala: !delroom |
29//= Para saber os comandos basta mandar uma mensagem para npc:aluguel |
30//= Otimização em algumas partes do script. |
31//== 1.5 ===============================================================================|
32//= Erros no script corrigidos. |
33//== 1.6 ===============================================================================|
34//= Adicionado o comando !time#segundos, para poder comprar mais tempo na sala. |
35//= Pequena otimização no input. |
36//======================== Tabela ======================================================|
37
38/* Tabela
39CREATE TABLE IF NOT EXISTS `aluguel_sala` (
40`name` varchar(255) NOT NULL default '0',
41`kill` int(11) unsigned NOT NULL default '0',
42`death` int(11) unsigned NOT NULL default '0',
43`ratio` int(11) NOT NULL default '0',
44`vezes` int(11) NOT NULL default '0',
45`usando` int(11) NOT NULL default '0',
46KEY `kill` (`kill`),
47KEY `death` (`death`)
48) ENGINE=MyISAM DEFAULT CHARSET=latin1;
49*/
50
51
52//====================== InÃcio do npc =======================
53
54- script config -1,{
55OnInit:
56
57//================================================================ Configurações ==============================================================|
58// | |
59set $@npc_name_aluguel$,"[ ^ff0000Alugador^000000 ]"; // |Nome do npc. |
60// | |
61//---------------------------------------------------------------------------------------------------------------------------------------------|
62// | |
63setarray $salasalug$[0],"Sala 1","Sala 2","Sala 3"; // |Salas, podem ter 127 salas, lembre-se de configurar o warp na ordem. |
64// | |
65//---------------------------------------------------------------------------------------------------------------------------------------------|
66// | |
67setarray $warpsmapa$[0],"pvp_y_1-1","pvp_y_2-1","pvp_y_3-1"; // |Mapas do pvp, a quantidade de mapas deve ser a quantidade de salas. |
68// | |
69//---------------------------------------------------------------------------------------------------------------------------------------------|
70// | |
71set $@preco,500000; // |Preço para criar a arena. |
72// | |
73//---------------------------------------------------------------------------------------------------------------------------------------------|
74// | |
75set $@preco2,10000; // |Preço para os outros entrarem na arena depois de alugadas. |
76// | |
77//---------------------------------------------------------------------------------------------------------------------------------------------|
78// | |
79set $@minplay,2; // |MÃnimo de jogadores aceitáveis para alugar uma sala. |
80// | |
81//---------------------------------------------------------------------------------------------------------------------------------------------|
82// | |
83set $@maxplay,10; // |Máximo de jogadores permitido para alugar uma sala. |
84// | |
85//---------------------------------------------------------------------------------------------------------------------------------------------|
86// | |
87set $@minviplev,1; // |Level mÃnimo de vip para alugar uma sala. Coloque 0 para todos. |
88// | |
89//---------------------------------------------------------------------------------------------------------------------------------------------|
90// | |
91set $@maxsecs,600; // |Tempo máximo, em segundos, em que o player poderá alugar a sala. |
92// | |
93//---------------------------------------------------------------------------------------------------------------------------------------------|
94// | |
95set $@maxrank,50; // |Quantas pessoas o rank mostrará. O máximo é 127. |
96// | |
97//---------------------------------------------------------------------------------------------------------------------------------------------|
98// |Quanto vai custar cada segundo extra comprado para ficar na sala com o|
99set $@extratimepreco,1000; // |comando !time#segundos. |
100// | |
101//============================================== Fim das configurações === InÃcio do Script ===================================================|
102end;
103}
104
105prontera,150,150,5 script PvP Aluguel 989,{
106
107function exit;
108if($@roomstatus)
109 exit "As salas estão fechadas.";
110
111mes $@npc_name_aluguel$;
112mes "Olá "+strcharinfo(0)+", o que deseja?";
113next;
114 switch(select("Alugar uma sala:Acessar o rank:Cancelar")){
115
116case 1:
117
118mes $@npc_name_aluguel$;
119mes "Escolha sua sala:";
120next;
121 for(set .@a,0; .@a < getarraysize($warpsmapa$); set .@a, .@a+1)
122 {
123 set .@menu$, .@menu$ + $salasalug$[.@a];
124 set .@menu$, .@menu$ + ":";
125 }
126 set @choice, select(.@menu$)-1;
127 if($@usando[@choice] == 1)
128 {
129 mes $@npc_name_aluguel$;
130 mes "Esta sala já está alugada, para entrar nela você precisa de "+$@preco2+"z.";
131 mes "Deseja continuar?";
132 next;
133 if(select("Sim","Não") == 2) close;
134 if($@compass[@choice])
135 {
136 mes $@npc_name_aluguel$;
137 mes "Digite a senha para entrar na sala:";
138 next;
139 input $@passin$;
140 if($@passin$ != $@senharoom$[@choice])
141 exit "Senha incorreta.";
142 if(getmapusers($warpsmapa$[@choice]) >= $@maxplayer[@choice])
143 exit "Infelizmente a sala está com sua capacidade máxima.";
144 if(zeny < $@preco2)
145 exit "Você não possui a quantidade de zeny necessária.";
146 set zeny, zeny - $@preco2;
147 warp $warpsmapa$[@choice],0,0;
148 end;
149 }
150 if(getmapusers($warpsmapa$[@choice]) >= $@maxplayer[@choice])
151 exit "Infelizmente a sala está com sua capacidade máxima.";
152 if(zeny < $@preco2)
153 exit "Você não possui a quantidade de zeny necessária.";
154 set zeny, zeny - $@preco2;
155 warp $warpsmapa$[@choice],0,0;
156 end;
157 }
158 mes $@npc_name_aluguel$;
159 mes "Digite o número máximo de pessoas que poderão entrar na sala. Não poderá ser maior do que "+$@maxplay+" e menor do que "+$@minplay+".";
160 next;
161 if(input($@maxplayer[@choice],$@minplay,$@maxplay))
162 exit "Eu disse que você não poderia criar esse tipo de sala.";
163 mes $@npc_name_aluguel$;
164 mes "Digite o tempo que você quer ficar na sala em segundos. Não poderá ser maior do que "+$@maxsecs+" segundos ou menor do que 60 segundos.";
165 next;
166 if(input($@maxtimes[@choice],60,$@maxsecs))
167 exit "Eu disse que você não poderia criar esse tipo de sala.";
168 set $@preco_d[@choice],$@preco*$@maxtimes[@choice]/60;
169 mes $@npc_name_aluguel$;
170 mes "Coloque a senha da sua sala. Se não quiser senha coloque: nulo.";
171 input $@senharoom$[@choice];
172 next;
173 if(zeny < $@preco_d[@choice])
174 exit "Você não possui zeny o suficiente para alugar uma sala.";
175 mes $@npc_name_aluguel$;
176 mes "Muito bem, as configurações já estão prontas, vou anunciar para todas sobre a sua sala e te teletransportar imediatamente.";
177 close2;
178 if(getmapusers($warpsmapa$[@choice]))
179 exit "Infelizmente você demorou para configurar a sala e outra pessoa o fez.";
180 set $@timeon[@choice],$@maxtimes[@choice]*1000;
181 set zeny, zeny - $@preco_d[@choice];
182 if($@senharoom$[@choice] != "nulo")
183 {
184 set $@compass[@choice],1;
185 announce "O jogador "+strcharinfo(0)+" alugou a sala "+$salasalug$[@choice]+" de PvP por "+$@maxtimes[@choice]+" segundos. A sala está com senha e o número máximo de pessoas para entrar na sala é "+$@maxplayer[@choice]+".",bc_all;
186 }
187 set @name$,"";
188 query_sql "SELECT `name`,`vezes`,`usando` FROM `aluguel_sala` WHERE `name` = '"+strcharinfo(0)+"'",@name$,@vezes,@use;
189 if(@name$ == "")
190 query_sql "INSERT INTO `aluguel_sala` (`vezes`,`name`,`usando`) VALUES (0,'"+strcharinfo(0)+"',0)";
191 query_sql "UPDATE `aluguel_sala` SET `vezes` = `vezes`+1 AND `usando`='1' WHERE `name` = '"+strcharinfo(0)+"'";
192 set $@usando[@choice],1;
193 if($@senharoom$[@choice] == "nulo")
194 announce "O jogador "+strcharinfo(0)+" alugou a sala "+$salasalug$[@choice]+" de PvP por "+$@maxtimes[@choice]+" segundos. A sala está sem senha e o número máximo de pessoas para entrar na sala é "+$@maxplayer[@choice]+".",bc_all;
195 set $@name$[@choice],strcharinfo(0);
196 warp $warpsmapa$[@choice],0,0;
197 sleep2 $@timeon[@choice];
198 while($@extratime[@choice]>0)
199 {
200 sleep2 1000;
201 set $@extratime[@choice],$@extratime[@choice]-1;
202 if($@extratime[@choice]<0) set $@extratime[@choice],0;
203 }
204 query_sql "UPDATE `aluguel_sala` SET `usando`='0' WHERE `name` = '"+$@name$[@choice]+"'";
205 mapwarp $warpsmapa$[@choice],"prontera",150,150;
206 set $@usando[@choice],0;
207 set $@compass[@choice],0;
208 end;
209
210case 2:
211 mes $@npc_name_aluguel$;
212 mes "Qual rank deseja acessar?";
213 next;
214 switch(select("Kills:Death:Ratio:Alugou:Cancelar"))
215 {
216 case 1:
217 mes "Nome ---- Kills";
218 callfunc("Alug_func","See_R","kill");
219
220 case 2:
221 mes "Nome ---- Deaths";
222 callfunc("Alug_func","See_R","death");
223
224 case 3:
225 mes "Nome ---- Ratio";
226 callfunc("Alug_func","See_R","ratio");
227
228 case 4:
229 mes "Nome ---- Alugou";
230 callfunc("Alug_func","See_R","vezes");
231
232 case 5:
233 close;
234 }
235
236case 3:
237 close;
238}
239
240OnInit:
241/*------------Map Flags-------------*/
242 for(set .@p,0; getarraysize($@warpmapa$); set .@p, .@p + 1)
243 {
244 setmapflag $@warpmapa$[.@p],mf_nosave;
245 setmapflag $@warpmapa$[.@p],mf_nowarp;
246 setmapflag $@warpmapa$[.@p],mf_nowarpto;
247 setmapflag $@warpmapa$[.@p],mf_nomemo;
248 setmapflag $@warpmapa$[.@p],mf_noteleport;
249 setmapflag $@warpmapa$[.@p],mf_nopenalty;
250 setmapflag $@warpmapa$[.@p],mf_noreturn;
251 }
252/*------------Map Flags-------------*/
253end;
254
255function exit {
256
257mes $@npc_name_aluguel$;
258mes getarg(0);
259close;
260}
261}
262
263- script killdeath -1,{
264end;
265OnPcDieEvent:
266 for(set @w, 0; @w < getarraysize($warpsmapa$); set @w, @w + 1)
267 if(strcharinfo(3) == $warpsmapa$[@w])
268 callfunc("Alug_func","pvp","death");
269 end;
270
271OnPcKillEvent:
272 for(set @w, 0; @w < getarraysize($warpsmapa$); set @w, @w + 1)
273 if(strcharinfo(3) == $warpsmapa$[@w])
274 callfunc("Alug_func","pvp","kill");
275 end;
276}
277
278function script Alug_func {
279
280 if(getarg(0) == "pvp")
281 {
282 if(rid2name(getcharid(3))==rid2name(killedrid)) end;
283 set @name$,"";
284 query_sql "select name from aluguel_sala where name='"+strcharinfo(0)+"'",@name$;
285 if(@name$ == "")
286 query_sql "insert into aluguel_sala (`name`, "+getarg(1)+", `ratio`) values ('"+strcharinfo(0)+"',1,0)";
287 else
288 query_sql "update aluguel_sala set `"+getarg(1)+"` = `"+getarg(1)+"`+1, ratio = ratio+1 where name = '"+strcharinfo(0)+"'";
289 if(getarg(1)=="death")
290 {
291 query_sql "update aluguel_sala set `ratio`=`ratio`-2 where name = '"+strcharinfo(0)+"'";
292 callsub Warp_s;
293 }
294 end;
295 }
296 if(getarg(0) == "See_R")
297 {
298 set @name$,"";
299 set @arg,0;
300 query_sql "select name,`"+getarg(1)+"` from aluguel_sala order by `"+getarg(1)+"` desc limit "+$@maxrank,@name$,@arg;
301 for(set @h,0; @h < $@maxrank; set @h, @h + 1)
302 mes ""+(@h+1)+" - ^191970"+@name$[@h]+"^000000 -- ^006400"+@arg[@h]+"^000000";
303 close;
304 }
305 end;
306
307Warp_s:
308 warp $warpsmapa$[@choice],0,0;
309 sleep2 2000;
310 atcommand "@raise";
311 end;
312}
313
314- script aluguel -1,{
315
316OnWhisperGlobal:
317
318if(getgmlevel() == 99)
319{
320 if(compare(@whispervar0$,"!closeall"))
321 {
322 set $@roomstatus, 1;
323 announce "As arenas de aluguéis foram fechadas para manutenção!",bc_all;
324 for(set .@o, 0; .@o < getarraysize($warpsmapa$); set .@o, .@o + 1) mapwarp $warpsmapa$[.@o],"prontera",150,150;
325 end;
326 } else
327 if(compare(@whispervar0$,"!openall"))
328 {
329 set $@roomstatus, 0;
330 announce "As arenas de aluguéis foram abertas!",bc_all;
331 end;
332 }else
333 if(compare(@whispervar0$,"!addroom"))
334 {
335 dispbottom "Digite o nome da nova sala:";
336 input $@N_Room$;
337 dispbottom "Digite o mapa que a sala ficará:";
338 input $@M_Room$;
339 announce "A sala "+$@N_Room$+" foi adicionada na arena de aluguel!",bc_all;
340 if($warpsmapa$ == "")
341 {
342 setarray $warpsmapa$[0],$@M_Room$;
343 setarray $salasalug$[0],$@N_Room$;
344 end;
345 }
346 set $warpsmapa$[getarraysize($warpsmapa$)],$@M_Room$;
347 set $salasalug$[getarraysize($salasalug$)],$@N_Room$;
348 end;
349 } else
350 if(compare(@whispervar0$,"!delroom"))
351 {
352 dispbottom "Digite o número da sala:";
353 input .@R_N;
354 deletearray $warpmapa$[.@R_N - 1], 1;
355 deletearray $salalug$[.@R_N - 1], 1;
356 end;
357 } else
358 dispbottom "[ Esses são os comandos que você pode usar neste npc: ]";
359 dispbottom "";
360 dispbottom "[ !closeall = Fecha o acesso de todas as salas e retira os usuários de dentro delas. ]";
361 dispbottom "[ !openall = Libera o acesso às salas. ]";
362 dispbottom "[ !addroom = Adiciona uma nova sala. ]";
363 dispbottom "[ !delroom = Deleta uma sala. ]";
364 end;
365}
366
367set @use,0;
368query_sql "SELECT `usando` FROM `aluguel_sala` WHERE `name`='"+strcharinfo(0)+"'",@use;
369 for(set @k, 0; @k < getarraysize($warpsmapa$); set @k, @k + 1)
370 if(strcharinfo(3) != $warpsmapa$[@k]) callsub not_map; else
371 if(compare(@whispervar0$,"!tele"))
372 {
373 if(@gh <= 5){ dispbottom "Você precisa esperar 5 segundos para poder usar esta opção novamente."; end; }
374 set @gh,gettimetick(1)+5;
375 getmapxy(@mapname$,@mapx,@mapy,0);
376 warp @mapname$,0,0;
377 end;
378 } else
379 if(compare(@whispervar0$,"!exit"))
380 {
381 warp "prontera",150,150;
382 end;
383 } else
384 if(compare(@whispervar0$,"!call"))
385 {
386 if(@gj <= 10){ dispbottom "Você precisa esperar 10 segundos para poder usar esta opção novamente."; end; }
387 set @gj,gettimetick(1)+10;
388 if(!@use) end;
389 getmapxy(@mapname$,@mapx,@mapy,0);
390 mapwarp @mapname$,@mapname$,@mapx,@mapy;
391 end;
392 } else
393 if(compare(@whispervar0$,"!out"))
394 {
395 if(!@use) end;
396 getmapxy(@mapname$,@mapx,@mapy,0);
397 mapwarp @mapname$,"prontera",150,150;
398 end;
399 } else
400 if(compare(@whispervar0$,"!talk"))
401 {
402 if(@gl <= 20){ dispbottom "Você precisa esperar 20 segundos para poder usar esta opção novamente."; end; }
403 set @gl,gettimetick(1)+20;
404 if(!@use) end;
405 input @msg$;
406 announce @msg$,bc_map;
407 end;
408 } else
409 if(compare(@whispervar0$,"!time"))
410 {
411 if(!@use) end;
412 set @whisper,atoi(@whispervar1$);
413 if(zeny<$@extratimepreco*@whisper)
414 {
415 dispbottom "Você não possui zeny suficiente para comprar essa quantia de tempo.";
416 end;
417 }
418 set zeny,zeny-$@extratimepreco*@whisper;
419 set $@extratime[@choice],$@extratime[@choice]+@whisper;
420 end;
421 }
422 else callsub not_map;
423
424not_map:
425
426 if (@use)
427 {
428 dispbottom "[ Estes são os comandos que você pode utilizar nas salas alugadas de PvP: ]";
429 dispbottom "";
430 dispbottom "[ !time#segundos = Aumenta o tempo que você vai ficar na sala. Cada segundo extra custa "+$@extratimepreco+"z. ]";
431 dispbottom "";
432 dispbottom "[ !call = Teletransportará todos os usuários da sala até você. ]";
433 dispbottom "";
434 dispbottom "[ !talk = Permite enviar uma mensagem para todos os usuários da sala. ]";
435 dispbottom "";
436 dispbottom "[ !out = Retira todos os usuários da sua sala, inclusive você. ]";
437 dispbottom "";
438 }
439 dispbottom "[ !tele = Teletransportará para um ponto aleatório do mapa. ]";
440 dispbottom "";
441 dispbottom "[ !exit = Retira você e o resto dos usuários da sala. ]";
442 end;
443}