Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2018
289
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 26.19 KB | None | 0 0
  1. //
  2. //Alterações nas tabelas MYSQL - NECESSÁRIO
  3. //
  4. //ALTER TABLE `char` ADD `Kills` INT( 11 ) NOT NULL DEFAULT '0';
  5. //ALTER TABLE `char` ADD `Mortes` INT( 11 ) NOT NULL DEFAULT '0';
  6. //ALTER TABLE `char` ADD `Ratio` INT( 11 ) NOT NULL DEFAULT '0';
  7. //ALTER TABLE `guild` ADD `Kills` INT( 11 ) NOT NULL DEFAULT '0';
  8. //ALTER TABLE `guild` ADD `Mortes` INT( 11 ) NOT NULL DEFAULT '0';
  9. //ALTER TABLE `guild` ADD `Ratio` INT( 11 ) NOT NULL DEFAULT '0';
  10. //CREATE TABLE `kill_log` (
  11. //`Assassino` VARCHAR( 32 ) NOT NULL ,
  12. //`Alvo` VARCHAR( 32 ) NOT NULL ,
  13. //`Data` VARCHAR( 32 ) NOT NULL ,
  14. //`ID` INT( 11 ) NOT NULL AUTO_INCREMENT ,
  15. //PRIMARY KEY ( `ID` )
  16. //) ENGINE = MYISAM
  17. //
  18. //Nota - Todas as configurações com dois asteriscos são obrigatórias.
  19. //
  20. //===== Cronus Script ========================================
  21. //= PvP & GvG / Ranking
  22. //===== Por: =================================================
  23. //= Christian / Hunter1577 [chris.k.andrade@hotmail.com]
  24. //===== Versão Atual: ========================================
  25. //= 4.6
  26. //===== Compatível Com: ======================================
  27. //= Cronus & eAthena
  28. //===== Changelog: ===========================================
  29. //= 1.0 NPC Criado [Eu]
  30. //= 1.1 Mudado o sistema de Anúncio [idéia: Mooka]
  31. //= 2.0 Sistema consertado [Eu]
  32. //= 2.1 Novas configurações inseridas (veja // Configuração) [Eu]
  33. //= 2.2 Checagem de itens, Pvp Baby etc... adicionados [Eu]
  34. //= 2.5 Corrigido vários bugs, variáveis passadas para globais [Eu]
  35. //= 2.5 Checagem de itens em apenas alguns mapas adicionada [Eu]
  36. //= 2.6 Adicionada checagem de levem em mapa X,Y,...
  37. //= 3.0 Script Optimizado [Eu / Algumas idéias MidNight]
  38. //= 3.0 Adicionada Opção de mostrar Tipo de zona [Eu]
  39. //= 3.0 Adicionada a Opção de por Gvg ou PvP nos mapas [Eu]
  40. //= 3.1 Adicionada Opção de nível mínimo de GM para resetar o Ranking [Eu]
  41. //= 3.5 Adicionado sistema de pontuação GvG [Eu]
  42. //= 3.5 Adicionado Ranking GvG [Eu]
  43. //= 3.6 Adicionado Sons ao matar [Eu]
  44. //= 3.7 Adicionada opção que checa se o personagem tem amuleto de Ziegfried [Eu]
  45. //= 4.0 Adicionado sistema de invervalo entre kills [Eu - Idéia By: Puncker]
  46. //= 4.1 Adicionada checagem de clã em GvG [Eu]
  47. //= 4.2 Adicionada opção de custom função [Eu]
  48. //= 4.3 Adicionada opção de mostrar líderes PvP e GvG [Eu]
  49. //= 4.4 Adicionada opção de setar um limite de players nas arenas [Eu]
  50. //= 4.5 Adicionada opção de bloquear a entrada e GMs nas arenas [Eu]
  51. //= 4.6 Adicionado Log de Kills [Eu]
  52. //============================================================
  53. - script PvPConfs -1,{
  54.  
  55. // Configurações -
  56. //0: Nome do PvP
  57. //1: Nome das arenas ["Mapa 1","Blabla",...] **
  58. //2: Mapa de cada arena ["map1","map2",...] **
  59. //3: Tipo de arena [0 = PvP, 1 = GvG] [Depende da opção (4)] **
  60. //4: O npc colocará os mapas em PvP automaticamente [0 = Não, 1 = Sim] **
  61. //5: Apenas conta pontos se o usuário estiver nos mapas PvPs(impede ganhar pontos com @duel,etc.) [0 = Não, 1 = Sim]
  62. //6: Anuncia para o servidor que o jogador X entrou na sala Y [0 = Não, 1 = Sim]
  63. //7: Mostra o número de jogadores na zoa de batalha X [0 = Não, 1 = Sim]
  64. //8: Anuncia o número de kills do jogador em um padrão(setado abaixo) [0 = Não, 1 = Sim]
  65. //9: Padrão de intervalo do anúncio entre Kills (Ex: a cada 25 kills será anunciado o número de kills do Jogador Y) [Valor de intervalo]
  66. //10: Ativa a função para resetar o Ranking e os pontos Kills e Mortes [0 = Não, 1 = Sim]
  67. //11: Número de dias para resetar (Ex: 30 dias = +- 1 mês -> a cada mês o ranking será resetado) [Só funcionára com o número 9 ativado]
  68. //12: Anuncia que X matou Y para o mapa [0 = Não, 1 = Sim]
  69. //13: Ativa a função de colocar o mapflag X,Y,Z.... nos mapas pvps [0 = Não, 1 = Sim]
  70. //14: Os Mapflags da função anterior [mf_mapflag,mf_mapflag2,...] Exemplo: "mf_clouds","mf_nowarp","mf_nosave"; [Setará esses mapflags nos mapas pvps]
  71. //15: Ativa a opção pvp para babys apenas [0 = Não, 1 = Sim]
  72. //16: Nome dos mapas babys, de acordo com a array $@MapsP$[]
  73. //17: Quando o jogador morre ele é ou não teleportado para seu ponto salvo automaticamente ? [Anti-Free Kill] [0 = Não, 1 = Sim]
  74. //18: Ativa Proibição de Itens [0 = Não, 1 = Sim]
  75. //19: ID dos itens proibidos [ID,ID,ID,ID,...]
  76. //20: Ativa a proibição dos itens em apenas alguns mapas do pvp [0 = Não, 1 = Sim]
  77. //21: Mapas onde os itens X serão bloqueados ["mapa1,"mapa2",...]
  78. //22: Ativa a limitação de lével para certa arena [0 = Não, 1 = Sim]
  79. //23: Limite de level (Min e Max) ["mapa1",LvLMin,LvLMax,"mapa2",LvLMin,LvLMax,...]
  80. //24: Mostra o tipo de Zona ao lado da opção no menu (Ou ao lado do número de combatentes, caso a opção (7) esteja ativada) [0 = Não, 1 = Sim]
  81. //25: Level de GM MÍNIMO para resetar o ranking manualmente [Padrão: 90]
  82. //26: Ativa a opção de Sons ao matar ( God Like, etc..) [0 = Não, 1 = Sim] [Ver sessão de Sons logo abaixo]
  83. //27: Número de pessoas que serão mostradas no Ranking (não passe de 120)
  84. //28: Mostra a sala de espera em cima do npc [0 = Não, 1 = Sim] [Ver sessões de Chat logo abaixo]
  85. //29: Mensagens que apareceram no chat ["msg","msg2",...]
  86. //30: Ativa o sistema de intervalo de pontos [0 = Não, 1 = Sim]
  87. //31: Número de SEGUNDOS para que o usuário possa matar novamente o jogador morto (de acordo com a opção (30) [Segundos]
  88. //32: Ativa a opção de que se o jogador morrer e tiver um amuleto de ziegfried, ele não voltará automaticamente ao seu ponto salvo [0 = Não, 1 = Sim]
  89. //33: Ativa as customs funções [0 = Não, 1 = Sim]
  90. //34: Custom funções ["mapa","nomedafunção","mapa2","nomedafunção2",...] [Olhe o exemplo da função "disguisepvp"]
  91. //35: Ativa a opção de mostrar o líder do PvP e GvG [0 = Não, 1 = Sim]
  92. //36: Ativa a opção de limitar o número de Jogadores em alguma arena [0 = Não, 1 = Sim]
  93. //37: Limite de usuários nas arenas X ["mapa1",MaxPlayers1,"mapa2",MaxPlayers2]
  94. //38: Configuração para bloquear GM no PvP [0 ou 1,Level Minimo de Bloqueio, Level Máximo] Ex: [1,20,80] Gms entre level 20 e 80 não entrarão
  95. //39: Registrar Kills ?(Log de Kills) [0 = Não, 1 = Sim]
  96. OnInit:
  97.  
  98. // Não mexa aqui.
  99. deletearray $@MapNames$;
  100. deletearray $@MapsP$;
  101. deletearray $@FlagList$;
  102. deletearray $@ForList;
  103. deletearray $@BabyMaps$;
  104. deletearray $@ForItemMapsList$;
  105. deletearray $@ForLevelList$;
  106. deletearray $@MapsType;
  107. deletearray $@ChatMsgs$;
  108. deletearray $@CustomFuncoesList$;
  109. deletearray $@Lideres$;
  110. deletearray $@MaxPlayers$;
  111.  
  112. // Pode mexer aqui.
  113. set $@PvPName$,"[^FF0000PvP^000000]"; // 0
  114. setarray $@MapNames$[0],"Zona de Guerra 1","Zona de conflítos","Zona Baby","Zona disguise"; // 1 **
  115. setarray $@MapsP$[0],"pvp_n_1-5","guild_vs1","guild_vs2","pvp_2vs2"; // 2 **
  116. setarray $@MapsType[0],0,1,0,0; // 3 **
  117. set $@PvPOn,1; // 4 **
  118. set $@MapCheck,1; // 5
  119. set $@AnnounceEntrada,1; // 6
  120. set $@NLutadores,1; // 7
  121. set $@AnnounceKills,1; // 8
  122. set $@AIntVal,50; // 9
  123. set $@NReset,0; // 10
  124. set $@NResetDay,30; // 11
  125. set $@AnnounceQuem,1; // 12
  126. set $@MapFlags,1; // 13
  127. setarray $@FlagList$[0],mf_nosave,mf_nowarpto,mf_nomemo,mf_nowarp,mf_pvp_noguild,mf_nobranch;// 14 - Mantenha sem aspas
  128. set $@PvPBaby,1; // 15
  129. setarray $@BabyMaps$[0],"guild_vs2"; // 16
  130. set $@DieTeleport,1; // 17
  131. set $@ForItens,0; // 18
  132. setarray $@ForList[0],607,678; // 19
  133. set $@ForItemMaps,0; // 20
  134. setarray $@ForItemMapsList$[0],"geffen"; // 21
  135. set $@ForLevel,1; // 22
  136. setarray $@ForLevelList$[0],"pvp_n_1-5",350,600,"guild_vs3",350,600,"guild_vs2",350,600,"pvp_2vs2",350,600; // 23
  137. set $@ShowType,1; // 24
  138. set $@GMLvL,90; // 25
  139. set $@SoundOn,1; // 26
  140. set $@MaxRank,50; // 27
  141. set $@ChatOn,1; // 28
  142. setarray $@ChatMsgs$[0],"PvP & Gvg aqui mesmo !","Venha batalhar no PvP !","Mostre que seu clã é o mais forte !"; // 29
  143. set $@PvPInt,0; // 30
  144. set $@SecondInt,10; // 31
  145. set $@ZiegAmul,1; // 32
  146. set $@CustomFuncoes,1; // 33
  147. setarray $@CustomFuncoesList$[0],"pvp_2vs2","disguisepvp"; // 34
  148. setarray $@Lideres$,1,1,"ratio","ratio"; // 35 [PvP,GvG,Coluna PvP, Coluna GvG]
  149. set $@LimP,0; // 36
  150. setarray $@MaxPlayers$,"pvp_n_1-5",2,"guild_vs2",10; // 37
  151. setarray $@BlockGM[0],1,30,80; // 38
  152. set $@LogKill,1; // 39
  153.  
  154. // Sons - Sinta-se livre para mexer nas opções abaixo, mas não terão efeito se o item (26) não estiver ligado
  155. // Configure abaixo os sons que tocarão do seguinte modo:
  156. // $@Sounds$[Pontos sem morrer],"Nome do arquivo musical";
  157. // Nota: Não é preciso por .wav no nome do arquivo, o próprio script ja o faz
  158.  
  159. if(!$@SoundOn) end;
  160. deletearray $@Sounds$;
  161. setarray $@Sounds$[1],"First Blood";
  162. setarray $@Sounds$[2],"Double Kill";
  163. setarray $@Sounds$[3],"Triple Kill";
  164. setarray $@Sounds$[4],"Mega Kill";
  165. setarray $@Sounds$[5],"Ultra Kill";
  166. setarray $@Sounds$[6],"Killing Spree";
  167. setarray $@Sounds$[7],"Ownage";
  168. setarray $@Sounds$[8],"Holy Shit";
  169. setarray $@Sounds$[9],"Dominating";
  170. setarray $@Sounds$[10],"Unstoppable";
  171. setarray $@Sounds$[11],"Monster Kill";
  172. setarray $@Sounds$[12],"God Like";
  173.  
  174. end;
  175.  
  176. }
  177. // Não Mude nada daqui para baixo.
  178. ayothaya,152,117,5 script PvP::PM_source 967,{
  179.  
  180. mes $@PvPName$;
  181. mes "Olá "+strcharinfo(0);
  182. mes "Sou o gerenciador PvP do servidor. Posso te levar à alguma zona de batalha ou então posso mostrar quem são os melhores, com o ranking.";
  183. mes "O que me diz ?";
  184. mes " ";
  185. set @MyMenu$,"Quero entrar na Batalha:Gostaria de ver o Ranking:Não Obrigado:"+((getgmlevel()>$@GMLvL)?"Resetar Ranking":"");
  186. switch(select(@MyMenu$)){
  187.  
  188. case 1:
  189. next;
  190. mes $@PvPName$;
  191. mes "As seguintes zonas estão disponíveis:";
  192. mes " ";
  193. if(atoi($@Lideres$[0]))
  194. {
  195. query_sql "SELECT `name` FROM `char` ORDER BY `"+$@Lideres$[2]+"` DESC LIMIT 1",@liderP$;
  196. mes "Líder PvP: ^0000FF"+@liderP$+"^000000";
  197. }
  198. if(atoi($@Lideres$[1]))
  199. {
  200. query_sql "SELECT `name` FROM `guild` ORDER BY `"+$@Lideres$[3]+"` DESC LIMIT 1",@liderG$;
  201. mes "Líder GvG: ^0000FF"+@liderG$+"^000000";
  202. }
  203. deletearray @MaxP;
  204. for(set @i,0;@i<getarraysize($@MapNames$);set @i,@i+1)
  205. {
  206. if($@LimP)
  207. {
  208. set @MaxP,0;
  209. for(set @a,0;@a<getarraysize($@MaxPlayers$); set @a,@a+2)
  210. if($@MaxPlayers$[@a]==$@MapsP$[@i]) set @MaxP,$@MaxPlayers$[@a+1];
  211. }
  212. set @Tot$,((getmapusers($@MapsP$[@i])>=@MaxP)?"^FF0000":"^00FF00")+getmapusers($@MapsP$[@i])+((@MaxP>0)?"^000000/^FF0000"+@MaxP:"");
  213. set .@menu$,.@menu$+"- "+$@MapNames$[@i]+" "+(($@NLutadores)?"["+@Tot$+"^000000]":"")+(($@ShowType)?" - ^0000FF"+(($@MapsType[@i])?"GvG":"PvP")+"^000000":"")+":";
  214. }
  215.  
  216. select(.@menu$);
  217. next;
  218. if($@BlockGM[0]) callfunc "BlockGM",0;
  219. if($@PvPBaby) callfunc "CheckBabyPvP",0;
  220. if($@ForItens) callfunc "CheckItemPvP",0;
  221. if($@ForLevel) callfunc "CheckLevelPvP",0;
  222. if($@LimP)
  223. for(set @i,0;@i<getarraysize($@MaxPlayers$);set @i,@i+2)
  224. if($@MapsP$[@menu-1]==$@MaxPlayers$[@i])
  225. if(getmapusers($@MapsP$[@menu-1])>=atoi($@MaxPlayers$[@i+1]))
  226. {
  227. mes $@PvPName$;
  228. mes "O limite de jogadores nesta arena foi atingido.";
  229. mes "Limite: ^FF0000"+$@MaxPlayers$[@i+1]+"^000000";
  230. close;
  231. }
  232. if($@MapsType[@menu-1] && (!getcharid(2)))
  233. {
  234. mes $@PvPName$;
  235. show "Você não está em nenhum clã, logo não posso te levar a uma zona GvG";
  236. close;
  237. }
  238. if($@CustomFuncoes)
  239. for(set @i,0;@i<getarraysize($@CustomFuncoesList$);set @i,@i+2)
  240. if($@MapsP$[@menu-1]==$@CustomFuncoesList$[@i]) callfunc $@CustomFuncoesList$[@i+1];
  241. mes "Ok, vou te teleportar até a zona: "+$@MapNames$[@menu-1];
  242. next;
  243. if($@AnnounceEntrada) Announce "["+(($@MapsType[@menu-1])?"GvG":"PvP")+"] "+strcharinfo(0)+" entrou na zona de batalha: "+$@MapNames$[@menu-1],9;
  244. warp $@MapsP$[@menu-1],0,0;
  245. end;
  246.  
  247. case 2:
  248. next;
  249. mes $@PvPName$;
  250. mes "Gostaria de ver qual ranking ?";
  251. select("Kills","Mortes","Ratio","Sair");
  252. deletearray @Type$;
  253. setarray @Type$[1],"Kills","Mortes","Ratio";
  254. set @oldm,@menu;
  255. switch(@menu)
  256. {
  257.  
  258. case 1:
  259. case 2:
  260. case 3:
  261. next;
  262. mes $@PvPName$;
  263. mes "Deseja ver qual tipo de Ranking de ^FF0000"+@Type$[@oldm]+"^000000?";
  264. select("Jogadores","Clãs");
  265. deletearray @Rank$;
  266. setarray @Rank$[1],"char","guild";
  267. deletearray @ChosenN$;
  268. deletearray @ChosenP;
  269. query_sql "SELECT `name`,`"+@Type$[@oldm]+"` FROM `"+@Rank$[@menu]+"` ORDER BY `"+@Rank$[@menu]+"`.`"+@Type$[@oldm]+"` DESC LIMIT "+$@MaxRank+"",@ChosenN$,@ChosenP;
  270. break;
  271.  
  272. case 4:
  273. next;
  274. mes $@PvPName$;
  275. mes "Tenha um bom dia";
  276. close;
  277. }
  278. next;
  279. mes $@PvPName$;
  280. mes "Posição Nome Pontos";
  281. mes " ";
  282. for(set @i,0;@i<getarraysize(@ChosenN$);set @i,@i+1)
  283. mes "["+(@i+1)+"] "+@ChosenN$[@i]+" - ^FF0000"+@ChosenP[@i]+"^000000";
  284. close;
  285.  
  286. case 3:
  287. next;
  288. mes $@PvPName$;
  289. mes "Tenha um bom dia";
  290. close;
  291.  
  292. case 4:
  293. if(getgmlevel()<$@GMLvL) close;
  294. next;
  295. mes $@PvPName$;
  296. mes "O ranking foi resetado com sucesso.";
  297. goto ResetManual;
  298.  
  299. }
  300.  
  301.  
  302. OnHour00:
  303. if($@NReset)
  304. {
  305. set $DP,$DP+1;
  306. if($DP>=NResetDay)
  307. {
  308. ResetManual:
  309. announce "[PvP] O Ranking PvP e GvG foi resetado.",9;
  310. query_sql "UPDATE `char` set `Kills` = '0'";
  311. query_sql "UPDATE `char` set `Mortes` = '0'";
  312. query_sql "UPDATE `char` set `Ratio` = '0'";
  313. query_sql "UPDATE `guild` set `Kills` = '0'";
  314. query_sql "UPDATE `guild` set `Mortes` = '0'";
  315. query_sql "UPDATE `guild` set `Mortes` = '0'";
  316. set $DP,0;
  317. }
  318. }else{
  319. set $DP,0;
  320. }
  321. close2;
  322. end;
  323.  
  324. OnInit:
  325. if($@ChatOn)
  326. {
  327. if(getarraysize($@ChatMsgs$)<2)
  328. {waitingroom $@ChatMsgs$[0],0;end;}
  329. else{
  330. set .ChatC,0;
  331. waitingroom $@ChatMsgs$[.ChatC],0;
  332. }
  333. }
  334. // Edite o número após OnTimer para alterar o tempo em que o chat muda - [Tempo = segundos * 1000]
  335. OnTimer4000:
  336. if($@ChatOn)
  337. {
  338. delwaitingroom;
  339. if(.ChatC==(getarraysize($@ChatMsgs$)-1)) set .ChatC,0;
  340. else
  341. set .ChatC,.ChatC+1;
  342. waitingroom $@ChatMsgs$[.ChatC],0;
  343. }
  344.  
  345. initnpctimer;
  346.  
  347.  
  348. }
  349.  
  350. // Controle do PvP, não mexa neste NPC
  351. - script PvPControl -1,{
  352.  
  353. OnPcKillEvent:
  354. getmapxy @map$,@x,@y,strcharinfo(0);
  355. if($@MapCheck)
  356. {
  357. set .@Cont,0;
  358. for(set .@a,0;.@a<getarraysize($@MapNames$);set .@a,.@a+1)
  359. if(@map$!=$@MapsP$[.@a]) set .@Cont,.@Cont+1;
  360. if(.@Cont>=getarraysize($@MapNames$)) end;
  361. }
  362. set @Killer,getcharid(0);
  363. set @Morto$,rid2name(killedrid);
  364. set @Killed,getcharid(0,rid2name(killedrid));
  365. if(@Killed==@Killer) end;
  366. if($@PvPInt) callfunc "CheckIntervalo";
  367. if($@LogKill) callfunc "LogKill";
  368. set @WD,@WD+1;
  369. if($@Sounds$[@WD]!="") set @Tocar$,$@Sounds$[@WD];
  370. else set @Tocar$,"";
  371. if($@AnnounceQuem) mapannounce @map$,"["+strcharinfo(0)+"] "+((getmapflag(@map$,9))?"do clã ["+getguildname(getcharid(2))+"]":"")+" matou ["+@Morto$+"]"+(($@SoundOn && @Tocar$!="")?" | ["+@Tocar$+"]":""),bc_map;
  372. if($@SoundOn)
  373. if($@Sounds$[@WD]!="") soundeffectall $@Sounds$[@WD]+".wav",0;
  374. set @Table$,(getmapflag(@map$,9))?"guild":"char";
  375. set @RID,(getmapflag(@map$,9))?getcharid(2):getcharid(0);
  376. query_sql "UPDATE `"+@Table$+"` SET `Kills` = `Kills` + 1 WHERE `"+@Table$+"_id` = '"+@RID+"'";
  377. query_sql "UPDATE `"+@Table$+"` SET `Ratio` = `Kills` - `Mortes` WHERE `"+@Table$+"_id` = '"+@RID+"'";
  378. query_sql "SELECT `Kills`,`Ratio` FROM `"+@Table$+"` WHERE `"+@Table$+"_id` = '"+@RID+"'",@PvPPoints,@Ratio;
  379. dispbottom ((getmapflag(@map$,9))?"Clã - ":"") +"Pontos PvP: "+@PvPPoints;
  380. dispbottom ((getmapflag(@map$,9))?"Clã - ":"") +"Pontos Ratio: "+@Ratio;
  381. if($@AnnounceKills)
  382. {
  383. if(@PvPPoints==1) set NextAnnc,1;
  384. if(@PvPPoints < NextAnnc) end;
  385. Announce ((getmapflag(@map$,9))?"O clã "+ getguildname(getcharid(2))+" matou "+ @PvPPoints+" Players!":strcharinfo(0)+" | Matou "+@PvPPoints+" Players!"),bc_all,0xFF7F50;
  386. set NextAnnc,NextAnnc+$@AIntVal;
  387. }
  388. if((getmapflag(@map$,9) && atoi($@Lideres$[1])) || (getmapflag(@map$,6) && atoi($@Lideres$[0])))
  389. {
  390. if(getmapflag(@map$,9)){ set @ID,getcharid(2);set @VarC,3;} else { set @ID,getcharid(0); set @VarC,2;}
  391. query_sql "SELECT `name`,`"+$@Lideres$[@VarC]+"` FROM `"+@Table$+"` ORDER BY `"+$@Lideres$[@VarC]+"` DESC LIMIT 1",@liderP$,@Pts;
  392. if(@liderP$==strcharinfo(0)) end;
  393. query_sql "SELECT `"+$@Lideres$[@VarC]+"` FROM `"+@Table$+"` WHERE `"+@Table$+"_id` = '"+@ID+"'",@MPts;
  394. if(@Pts<=@MPts) Announce ((getmapflag(@map$,9))?"O clã "+strcharinfo(2):strcharinfo(0))+" é "+((!Sex)?"a nova":"o novo")+" líder "+((getmapflag(@map$,9))?"da GvG":"do PvP"),bc_all;
  395. }
  396. end;
  397.  
  398.  
  399. OnPcDieEvent:
  400. getmapxy @map$,@x,@y,strcharinfo(0);
  401. if($@MapCheck)
  402. {
  403. set .@Cont2,0;
  404. for(set .@a2,0;.@a2<getarraysize($@MapNames$);set .@a2,.@a2+1)
  405. if(@map$!=$@MapsP$[.@a2]) set .@Cont2,.@Cont2+1;
  406. if(.@Cont2>=getarraysize($@MapNames$)) end;
  407. }
  408. set @WD,0;
  409. set @Table$,(getmapflag(@map$,9))?"guild":"char";
  410. set @RID,(getmapflag(@map$,9))?getcharid(2):getcharid(0);
  411. query_sql "UPDATE `"+@Table$+"` SET `Mortes` = `Mortes` + 1 WHERE `"+@Table$+"_id` = '"+@RID+"'";
  412. query_sql "SELECT `Mortes` FROM `"+@Table$+"` WHERE `"+@Table$+"_id` = '"+@RID+"'",@Mortes;
  413. dispbottom ((getmapflag(@map$,9))?"Clã - ":"") +"Mortes: "+@Mortes;
  414. if($@DieTeleport)
  415. {
  416. if($@ZiegAmul && countitem(7621)>=1) end;
  417. sleep2 1000;warp "SavePoint",0,0;
  418.  
  419. }
  420. end;
  421.  
  422. OnPCLoadMapEvent:
  423. getmapxy @map$,@x,@y,strcharinfo(0);
  424. for(set @o,0; @o<getarraysize($@MapsP$); set @o,@o+1)
  425. if(@map$==$@MapsP$[@o])
  426. {
  427. if($@BlockGM[0]) callfunc "BlockGM",1;
  428. if($@PvPBaby) callfunc "CheckBabyPvP",1;
  429. if($@ForLevel) callfunc "CheckLevelPvP",1;
  430. if($@ForItens) callfunc "CheckItemPvP",1;
  431. }
  432. end;
  433.  
  434. OnInit:
  435. if($@PvPOn)
  436. for(set .@i,0;.@i<getarraysize($@MapNames$);set .@i,.@i+1)
  437. if(!getmapflag($@MapsP$[.@i],($@MapsType[.@i])?9:6)) setmapflag $@MapsP$[.@i],($@MapsType[.@i])?9:6; //Mapflag 6 = mf_pvp = PvP / 9 = mf_gvg = GvG
  438.  
  439. if($@PvPBaby)
  440. for(set .@i,0;.@i<getarraysize($@BabyMaps$);set .@i,.@i+1)
  441. if(!getmapflag($@BabyMaps$[.@i],42)) setmapflag $@BabyMaps$[.@i],42; //Mapflag 42 = mf_loadevent = Load Event para ninguem entrar nos pvp babys
  442.  
  443. if($@ForItens)
  444. for(set .@i,0;.@i<getarraysize(($@ForItemMaps)?$@ForItemMapsList:$@MapNames$);set .@i,.@i+1)
  445. if(!getmapflag($@MapsP$[.@i],42)) setmapflag $@MapsP$[.@i],42; //Mapflag 42 = mf_loadevent = Load Event para ninguem entrar com os itens proibidos
  446.  
  447. if($@ForLevel)
  448. for(set .@i,0;.@i<getarraysize($@ForLevelList$);set .@i,.@i+3)
  449. if(!getmapflag($@ForLevelList$[.@i],42)) setmapflag $@ForLevelList$[.@i],42; //Mapflag 42 = mf_loadevent = Load Event para ninguem entrar com os level restrito
  450.  
  451. if($@MapFlags)
  452. for(set .@i,0;.@i<getarraysize($@MapNames$);set .@i,.@i+1)
  453. for(set .@i2,0;.@i2<getarraysize($@FlagList$);set .@i2,.@i2+1)
  454. setmapflag $@MapsP$[.@i],$@FlagList$[.@i2];
  455. end;
  456.  
  457. }
  458.  
  459. // Função que checa os itens de acordo com a váriavel no npc de PvP
  460. function script CheckItemPvP {
  461.  
  462. getmapxy @map$,@x,@y,strcharinfo(0);
  463. for(set @a,0;@a<getarraysize(($@ForItemMaps)?$@ForItemMapsList$:$@MapsP$);set @a,@a+1)
  464. {
  465. if(!getArg(0)) set @map$,$@MapsP$[@menu-1];
  466. if(@map$==(($@ForItemMaps)?$@ForItemMapsList$[@a]:$@MapsP$[@a]))
  467. for(set @i,0;@i<getarraysize($@ForList);set @i,@i+1)
  468. if(countitem($@ForList[@i]))
  469. {
  470. if(getArg(0)==1) callfunc "PvPProibido",0;
  471. else{
  472. mes $@PvPName$;
  473. mes "Me desculpe, mas alguns itens estão proibidos nas Zonas de Guerra. Itens Como:";
  474. mes " ";
  475. for(set @i2,0;@i2<getarraysize($@ForList);set @i2,@i2+1) mes "^FF0000"+getitemname($@ForList[@i2])+"^000000";
  476. mes " ";
  477. mes "Sendo assim, você não tem permissão para entrar.";
  478. close;
  479. }
  480. }
  481. }
  482. return;
  483. }
  484.  
  485. function script CheckLevelPvP {
  486.  
  487. getmapxy @map$,@x,@y,strcharinfo(0);
  488. for(set @a,0;@a<getarraysize($@ForLevelList$);set @a,@a+3)
  489. {
  490. if(!getArg(0)) set @map$,$@MapsP$[@menu-1];
  491. if(@map$==$@ForLevelList$[@a])
  492. if(BaseLevel<atoi($@ForLevelList$[@a+1]) || BaseLevel>atoi($@ForLevelList$[@a+2]))
  493. {
  494. if(getArg(0)==1) callfunc "PvPProibido",0;
  495. else{
  496. mes $@PvPName$;
  497. mes "Me desculpe, mas existe uma restrição de léveis em certas Zonas de Guerra.";
  498. mes "No caso da zona: "+@MapNames$[@menu-1]+" as restrições são as seguintes:";
  499. mes " ";
  500. mes "Lével Mínimo: "+$@ForLevelList$[@a+1];
  501. mes "Lével Máximo: "+$@ForLevelList$[@a+2];
  502. mes " ";
  503. mes "Sendo assim, você não tem permissão para entrar.";
  504. close;
  505. }
  506. }
  507. }
  508. return;
  509. }
  510.  
  511. function script CheckBabyPvP {
  512.  
  513. getmapxy @map$,@x,@y,strcharinfo(0);
  514. if(!getArg(0)) set @map$,$@MapsP$[@menu-1];
  515. for(set .@i,0;.@i<getarraysize($@BabyMaps$);set .@i,.@i+1)
  516. if(@map$==$@BabyMaps$[.@i] && (Class<4023 || Class>4045))
  517. {
  518. if(getArg(0)) callfunc "PvPProibido",1;
  519. else{
  520. mes $@PvPName$;
  521. mes "Me perdoe, mas esta Zona é apenas para Babys";
  522. close;
  523. }
  524. }
  525. return;
  526. }
  527.  
  528. function script BlockGM {
  529.  
  530. getmapxy @map$,@x,@y,strcharinfo(0);
  531. if(getgmlevel()>=$@BlockGM[1] && getgmlevel()<=$@BlockGM[2])
  532. if(!GetArg(0))
  533. {
  534. mes $@PvPName$;
  535. mes "A entrada de Membros da Equipe do servidor está bloqueada no PvP.";
  536. close;
  537. } else
  538. callfunc "PvPProibido",2;
  539. return;
  540.  
  541. }
  542.  
  543. function script CheckIntervalo {
  544.  
  545.  
  546. for(set @c,0; @c<getarraysize($@IntKilled$); set @c,@c+1)
  547. if(@Morto$==getd("$@IntKilled$["+@c+"]"))
  548. {
  549. attachrid(getcharid(3,getd("$@IntKilled$["+@c+"]")));
  550. set @Table$,(getmapflag(@map$,9))?"guild":"char";
  551. set @RID,(getmapflag(@map$,9))?getcharid(2):getcharid(0);
  552. query_sql "UPDATE `"+@Table$+"` SET `Mortes` = `Mortes` - 1 WHERE `"+@Table$+"_id` = '"+@RID+"'";
  553. query_sql "SELECT `Mortes` FROM `"+@Table$+"` WHERE `"+@Table$+"_id` = '"+@RID+"'",@Mortes;
  554. dispbottom "Um ponto de morte foi descontado de você, pois quem te matou não esperou o tempo necessário.";
  555. dispbottom ((getmapflag(@map$,9))?"*Clã - ":"*") +"Mortes: "+@Mortes;
  556. attachrid(getcharid(3,getd("$@IntChar$["+@c+"]")));
  557. set @Table$,(getmapflag(@map$,9))?"guild":"char";
  558. set @RID,(getmapflag(@map$,9))?getcharid(2):getcharid(0);
  559. query_sql "SELECT `Kills`,`Ratio` FROM `"+@Table$+"` WHERE `"+@Table$+"_id` = '"+@RID+"'",@PvPPoints,@Ratio;
  560. dispbottom "Você não esperou o tempo necessário para matar este jogador, foi descontado um ponto de PvP.";
  561. dispbottom ((getmapflag(@map$,9))?"*Clã - ":"*") +"Kills: "+@PvPPoints;
  562. dispbottom ((getmapflag(@map$,9))?"*Clã - ":"*") +"Ratio: "+@Ratio;
  563. end;
  564.  
  565. }
  566. setd "$@IntChar$["+getarraysize($@IntChar$)+"]",strcharinfo(0);
  567. setd "$@IntKilled$["+getarraysize($@IntKilled$)+"]",@Morto$;
  568. setd "$@IntTime["+getarraysize($@IntTime)+"]",($@SecondInt*1000);
  569.  
  570. return;
  571.  
  572.  
  573. }
  574.  
  575. // Função para quem entrar nos mapas PvPs com restrições, exemplo: Jogador X entra no mapa por @warp com yggdrasils, estas estão bloqueadas na zona em que ele está
  576. // O que acontecerá com ele ? Case 0 - Morre -- Case 1 - É teleportado para o savepoint
  577. // Novos cases podem ser criados, modifique como quiser
  578. function script PvPProibido {
  579.  
  580. switch(getArg(0))
  581. {
  582. case 0:
  583. // Mata a personagem ao entrar com as restrições
  584. percentheal -100,100;
  585. return;
  586.  
  587. case 1:
  588. // Teleporta a personagem para seu ponto salvo ao entrar com as restrições
  589. warp "SavePoint",0,0;
  590. return;
  591.  
  592. case 2:
  593. // Da hide e petrifica e teleporta para o ponto salvo
  594. atcommand "@option 1 0 64";
  595. warp "SavePoint",0,0;
  596. return;
  597.  
  598. }
  599.  
  600. }
  601.  
  602. // Npc tempo do intervalo de kills
  603. prontera,1,1,1 script IntTimeNpc -1,{
  604.  
  605. OnInit:
  606. initnpctimer;
  607. end;
  608.  
  609. OnTimer1000:
  610. for(set .Uou,0;.Uou<getarraysize($@IntTime); set .Uou,.Uou+1)
  611. {
  612. if($@IntTime[.Uou]>1000) setarray $@IntTime[.Uou],$@IntTime[.Uou]-1000;
  613. if($@IntTime[.Uou]<=1000)
  614. {
  615. if(isloggedin(getcharid(3,$@IntChar$[.Uou])))
  616. {
  617. attachrid(getcharid(3,$@IntChar$[.Uou]));
  618. dispbottom "Você já está autorizado a matar o jogador: "+$@IntKilled$[.Uou];
  619. }
  620.  
  621. if(isloggedin(getcharid(3,$@IntKilled$[.Uou])))
  622. {
  623. attachrid(getcharid(3,$@IntKilled$[.Uou]));
  624. dispbottom "Você já pode ser morto pelo jogador: "+$@IntChar$[.Uou];
  625. }
  626. detachrid;
  627. deletearray $@IntChar$[.Uou],1;
  628. deletearray $@IntKilled$[.Uou],1;
  629. deletearray $@IntTime[.Uou],1;
  630. }
  631. }
  632. stopnpctimer;
  633. setnpctimer 0;
  634. initnpctimer;
  635.  
  636. }
  637.  
  638. // Registrar os kills de todos, para admins.
  639.  
  640. function script LogKill {
  641.  
  642. set @hora$,gettime(5)+"/"+gettime(6)+"/"+gettime(7)+" - "+gettime(3)+":"+gettime(2)+":"+gettime(1);
  643. query_sql "INSERT INTO `kill_log` (`Assassino`, `Alvo`, `Data`) VALUES ('"+escape_sql(strcharinfo(0))+"', '"+escape_sql(@Morto$)+"', '"+@hora$+"')";
  644. return;
  645.  
  646. }
  647. /////////////////////////////
  648. // Custom funcoes
  649. /////////////////////////////
  650. // PvP com disguise sorteado
  651. function script disguisepvp {
  652.  
  653. set @mobmax,1960; // ID máximo de monstro
  654. disguise rand(1002,@mobmax);
  655. return;
  656.  
  657. }
  658. // Para tirar o disguise ao morrer
  659. - script DisguiseDie -1,{
  660.  
  661. OnPcDieEvent:
  662. getmapxy @map$,@x,@y,strcharinfo(0);
  663. if($@CustomFuncoes)
  664. for(set @i,0;@i<getarraysize($@CustomFuncoesList$);set @i,@i+2)
  665. if(@map$==$@CustomFuncoesList$[@i]) undisguise;
  666. end;
  667.  
  668. }
  669. //////////////////////////////
  670. //////////////////////////////
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement