Guest User

Untitled

a guest
Sep 7th, 2020
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.40 KB | None | 0 0
  1. //========================================================================================
  2. //Title: Ghost's PvP System (Multi-announcer + Ladder)
  3. //Version: 1.3
  4. //Author: Ghost
  5. //Created: 12/27/2011
  6. //Released: 01/31/2012
  7. //Compatibility: rAthena | eAthena
  8. //Support: TXT & SQL
  9. //rAthena Topic: http://rathena.org/board/topic/58222-ghosts-scripts/
  10. //Required File:
  11. // SQL Table: http://pastebin.com/dEqrkczy
  12. // Wav Files: http://www.mediafire.com/?i3uutvdp00jw4r8
  13. //References:
  14. // http://www.wowwiki.com/Defense_of_the_Ancients:_Allstars
  15. // http://honwiki.net/wiki/Kill_Streak
  16. // http://honwiki.net/wiki/Multi_Kill
  17. // http://honwiki.net/wiki/Patch_2.0.0#Nemesis_and_Payback
  18. // http://igamepros.com/viewtopic.php?f=62&t=4342
  19. //Additional Note:
  20. // Multiple kill timer is set to Heroes of Newerth's 18 seconds.
  21. // KDR Algorithm is originally written by me, Ghost.
  22. // If you like this PvP System, say thanks at my rAthena topic.
  23. //Glossary:
  24. // KDR: Kill Death Ratio
  25. // SK: Streak Kill
  26. // MK: Multi Kill
  27. //Credits:
  28. // Thank you to the Athena community.
  29. //Changelog:
  30. // v1.3 = Fixed .PvPMap$[0] settings [Ghost]
  31. // = Added .GMLevel at configuration [Ghost]
  32. // = Change SK Hex Color to ^00FF00 for visibility [Ghost]
  33. // = Fixed Streak Kill ended broadcast [Ghost]
  34. // = Typographical error (Ms. Pudding to Flamboyant) on Announcer Setting corrected [Ghost]
  35. // = Changed Top 10 Players ranking from KDR to Kills [Ghost]
  36. // v1.2 = Fixed obfuscation at PvP Statistics [Ghost]
  37. // v1.1 = KDR Algorithm update for undefined calculation check [Lighta]
  38. // = Fixed obfuscation at Nemesis Kill [Lighta]
  39. // v1.0 = Initial release
  40. //©2011-2012 Ghost
  41. //========================================================================================
  42. - script Versus -1,{
  43. OnInit:
  44. //--Configuration
  45. set .System, 1; //Toggle PvP System (0:Disable|1:Enable)
  46. set .ServerType, 1; //Are you using TXT or SQL? (0:TXT|1:SQL)
  47. set .GMLevel, 100; //GM levels above or equal this level will be ignored by the system
  48. setarray .PvPMap$[0], "guild_vs2", "pvp_y_1-1"; //List all pvp maps here (Index 0:"All" to enable all maps)
  49.  
  50. //PvP Ladder
  51. set .Top, 10; //What is the length of the list?
  52. set .Reset, 0; //Allow players to reset their PvP statistics? (0:Disable|1:Zeny|2:pvppoint|3:Skull)
  53. set .ZenyFee, 0; //How much zeny you want to charge to reset their pvp stat?
  54. set .pvppointFee, 1000; //How much pvppoint you want to charge to reset their pvp stat?
  55. set .SkullFee, 0; //How much skull you want to charge to reset their pvp stat?
  56. set .AnnouncerFee, 0; //How much pvppoint per announcer? (DotA announcer is set as default)
  57.  
  58. //Reward Setting (Every Kill)
  59. set .MaxZeny, 2000000000; //What is the max zeny of the server?
  60. set .Zeny, 0; //Earn zeny each kill? (0:Disable)
  61. set .pvppoint, 1; //How much #PVPPOINT every kill? (0:Disable)
  62. set .Skull, 0; //Collect player's skull each kill? (0:Disable|1:Enable)
  63. setarray .ItemID[0], 0; //Get items each kill? (0:Disable)
  64. setarray .Amount[0], 0; //How many items per kill?
  65.  
  66. //Penalty Setting
  67. set .Feed, 10; //How many kills before feeding is called? (10:Recommended)
  68. set .Penalty, 1; //What is the penalty for the feedee? (0:Disable|1:Kill Rollback|2:Server Kick|3:Server Block)
  69. set .Kick, 0; //Who to kick? (0:Feedee|1:Feeder|2:Both)
  70. set .Rollback, 10; //How many times should the kill count rollback when feeding is called? (10:Recommended)
  71.  
  72. //Announcer Setting
  73. set .Broadcast, 1; //Where do you want to broadcast? (0:bc_all|1:bc_map)
  74. set .Streak, 1; //Show number of killing streak in broadcast? e.g. Ghost is Beyond Godlike(8)
  75. set .Multiple, 1; //Show number of multiple kill in broadcast? e.g. Makizushi just got an Ownage(5)
  76. set .Nemesis, 1; //Show number of nemesis in broadcast? e.g. Epoque is owning Jguy(9)
  77. set .Feeder, 1; //Show number of feed in broadcast? e.g. Cookies is feeding `KeiKun(10)
  78. set .RandomKillWord, 1; //Randomize the kill words? e.g. Arcenciel "Kill Word" jTynne (0:Disable|Default:"pwned")
  79. setarray .KillWord$[0], "Humilhou", "Eliminou", "Desintegrou", "Neutralizou"; //Enable above setting for this to work
  80.  
  81. //Broadcast Color | See HexTable: http://johncfish.com/bggallery/otherchart/hextable.gif
  82. set .KColor$, "0xFFFF00"; //Kill Broadcast Color | e.g. Jguy pwned Mercurial
  83. set .KSColor$, "0xFFFF00"; //Killing Streak Broadcast Color | e.g. jTynne is on a Killing Spree
  84. set .MKColor$, "0x33FF00"; //Multiple Kill Broadcast Color | e.g. Mercurial just got a Double Kill
  85. set .ESColor$, "0xFF0000"; //End Streak Broadcast Color | e.g. BrianL just ended Jguy's Killing Spree
  86. set .NMColor$, "0x0099FF"; //Nemesis Broadcast Color | e.g. Xazax is owning Cookies
  87. set .PBColor$, "0xFF0000"; //Payback Broadcast Color | e.g. Makizushi just have a payback againts lilcooldude69
  88. set .FDColor$, "0xFF00CC"; //Feeder Broadcast Color | e.g. Cookies is feeding Z3R0
  89.  
  90. //--Warning: Critical Setting | Killing Streaks and Multiple Kills Announcer
  91. setarray .KSDotA$[0], "Está em Killing Spree", "Está Dominando", "Fez um Mega-Kill", "Está Imparável", "Está Insano", "Fez um Monster Kill", "Está Divino", "Está invencível";
  92. setarray .KSHoN$[0], "É um Serial Killer", "É um Grande Guerreiro", "Se tornou Lendário", "Está em um Massacre!", "Está Insano", "Está Dominando", "Fez um Banho de Sangue", "Está Imortal"; //Took out #9. Champion of Newearth
  93. setarray .MKDotA$[0], "Conseguiu um Double Kill", "Conseguiu um Triple Kill", "Conseguiu um Ultra Kill", "Fez um Massacre", "Está humilhando todos os inimigos";
  94. setarray .MKHoN$[0], "Conseguiu um Double Tap", "Conseguiu um Hat Trick", "Conseguiu um Quad Kill", "Aniquilou seus Inimigos", "Conseguiu um Genocídio";
  95. setarray .ESDotA$[0], "Killing Spree", "Dominando", "Mega-Kill", "Imparável", "Insano", "Monster Kill", "Está Divino", "Está invencível";
  96. setarray .ESHoN$[0], "Serial Killer", "Grande Guerreiro", "Lendário", "Massacre", "Insano", "Dominando", "Banho de Sangue", "Immortal"; //Took out #9. Champion of Newearth
  97. setarray .EMDotA$[0], "Double Kill", "Triple Kill", "Ultra Kill", "Massacre", "Humilhou";
  98. setarray .EMHoN$[0], "Double Tap", "Hat Trick", "Quad Kill", "Aniquilação", "Genocídio";
  99.  
  100. //--Warning: Fail Safe | Do Not Touch
  101. if(.System > 1){ set .System, 1; }
  102. if(.System < 0){ set .System, 0; }
  103. if(.ServerType > 1){ set .ServerType, 1; }
  104. if(.ServerType < 0){ set .ServerType, 0; }
  105. if(.GMLevel > 99){ set .GMLevel, 100; }
  106. if(.GMLevel < 0){ set .GMLevel, 0; }
  107. if((.PvPMap$[0] == "ALL")||(.PvPMap$[0] == "ALl")||(.PvPMap$[0] == "AlL")||(.PvPMap$[0] == "aLL")||(.PvPMap$[0] == "aLl") || (.PvPMap$[0] == "alL")){ setarray .PvPMap$[0], "All"; }
  108. if(.Ladder > 1){ set .Ladder, 1; }
  109. if(.Ladder < 0){ set .Ladder, 0; }
  110. if(.Top < 0){ set .Top, 0; }
  111. if(.Reset > 3){ set .Reset, 0; }
  112. if(.Reset < 0){ set .Reset, 0; }
  113. if((.Reset == 1)&&(.ZenyFee <= 0)){ set .Reset, 0; }
  114. if((.Reset == 1)&&(.ZenyFee >= .MaxZeny)){ set .Reset, 0; }
  115. if((.Reset == 2)&&(.pvppointFee <= 0)){ set .Reset, 0; }
  116. if((.Reset == 3)&&(.SkullFee <= 0)){ set .Reset, 0; }
  117. if(.Zeny > .MaxZeny){ set .Zeny, 0; }
  118. if(.Zeny < 0){ set .Zeny, 0; }
  119. if(.pvppoint < 0){ set .pvppoint, 0; }
  120. if(.Broadcast > 1){ set .Broadcast, 1; }
  121. if(.Broadcast < 0){ set .Broadcast, 0; }
  122. if(.Feed < 1){ set .Feed, 0; }
  123. if(.Penalty > 3){ set .Penalty, 3; }
  124. if(.Penalty < 1){ set .Penalty, 0; }
  125. if(.Rollback < 1){ set .Rollback, 0; }
  126. if(.Streak > 1){ set .Streak, 1; }
  127. if(.Streak < 1){ set .Streak, 0; }
  128. if(.Multiple > 1){ set .Multiple, 1; }
  129. if(.Multiple < 1){ set .Multiple, 0; }
  130. if(.Nemesis > 1){ set .Nemesis, 1; }
  131. if(.Nemesis < 0){ set .Nemesis, 0; }
  132. if(.Feeder > 1){ set .Feeder, 1; }
  133. if(.Feeder < 1){ set .Feeder, 0; }
  134. if(.RandomKillWord > 1){ set .RandomKillWord, 1; }
  135. if(.RandomKillWord < 0){ set .RandomKillWord, 0; }
  136. end;
  137.  
  138. OnPCKillEvent:
  139. if(.System){
  140. if(getgmlevel() >= .GMLevel){ end; }
  141. if(.PvPMap$[0] != "All"){
  142. for(set .@i, 0; .@i < (getarraysize(.PvPMap$) - 1); set .@i, .@i + 1){
  143. if(strcharinfo(3) != .PvPMap$[.@i]){ end; }
  144. }
  145. }
  146. if((@nm == .Feed) && (.Penalty)){
  147. callsub OnClearData;
  148. switch(.Penalty){
  149. case 0: break;
  150. case 1: callsub OnRollback; break;
  151. case 2: callsub OnRollback;
  152. if(.Kick == 0){ atcommand "@kick "+strcharinfo(0); }
  153. if(.Kick == 1){ atcommand "@kick "+rid2name(killedrid); }
  154. if(.Kick == 2){ atcommand "@kick "+strcharinfo(0); atcommand "@kick "+rid2name(killedrid); }
  155. break;
  156. case 3: callsub OnRollback;
  157. if(.Kick == 0){ atcommand "@block "+strcharinfo(0); }
  158. if(.Kick == 1){ atcommand "@block "+rid2name(killedrid); }
  159. if(.Kick == 2){ atcommand "@block "+strcharinfo(0); atcommand "@block "+rid2name(killedrid); }
  160. break;
  161. default: break;
  162. }
  163. }
  164. if(@nm < .Feed){
  165. if(.Zeny && ((Zeny + .Zeny) < .MaxZeny)){ set Zeny, Zeny + .Zeny; }
  166. if(.pvppoint){ dispbottom "[Point System] +1 Kill Point"; set #PVPPOINT, #PVPPOINT + .pvppoint; }
  167. if(.Skull){ getnameditem 7420, rid2name(killedrid); }
  168. for(set .@i, 0; .@i < getarraysize(.ItemID); set .@i, .@i + 1){ if(.ItemID){ getitem .ItemID[.@i], .Amount[.@i]; }}
  169. }
  170. if(.RandomKillWord){ mapannounce "guild_vs2", strcharinfo(0)+" "+.KillWord$[rand(0, getarraysize(.KillWord$) - 1)]+" "+rid2name(killedrid)+"", ((.Broadcast)?bc_all:bc_map), .KColor$; }
  171. else { mapannounce "guild_vs2", strcharinfo(0)+" humilhou "+rid2name(killedrid)+"", ((.Broadcast)?bc_all:bc_map), .KColor$; }
  172. set Kill, Kill + 1;
  173. if(@ks < 10){ set @ks, @ks + 1; }
  174. if(@mk < 6){ set @mk, @mk + 1; }
  175. if(!NemesisKilled){ set NemesisKilled, killedrid; }
  176. if(NemesisKilled == killedrid){ set @nm, @nm + 1; }
  177. deltimer "Versus::OnMKReset";
  178. addtimer 10000, "Versus::OnMKReset";
  179. callsub OnRecordStreak;
  180. callsub OnAnnounce;
  181. end;
  182. } end;
  183.  
  184. OnPCDieEvent:
  185. if(.System){
  186. if(getgmlevel() >= .GMLevel){ end; }
  187. if(.PvPMap$[0] != "All"){
  188. for(set .@i, 0; .@i < (getarraysize(.PvPMap$) - 1); set .@i, .@i + 1){
  189. if(strcharinfo(3) != .PvPMap$[.@i]){ end; }
  190. }
  191. }
  192. set Death, Death + 1;
  193. callsub OnDeath;
  194. } end;
  195.  
  196. OnPCLogoutEvent:
  197. if(.System){
  198. if(getgmlevel() >= .GMLevel){ end; }
  199. if((.ServerType) && (Kill)){ query_sql("REPLACE INTO `pvp_rank` (`char_id`, `account_id`, `char`, `kill`, `death`, `kdr`, `killingstreak`, `multikill`, `nemesiskill`, `feedcount`,`killingspree`, `dominating`, `megakill`, `unstoppable`, `wickedsick`, `monsterkill`, `godlike`, `beyondgodlike`, `doublekill`, `triplekill`, `ultrakill`, `rampage`, `ownage`) VALUES ("+getcharid(0)+","+getcharid(3)+", '"+rid2name(getcharid(3))+"', "+Kill+", "+Death+", '"+callfunc("KDR_Calc", Kill, Death)+"', "+KillingStreak+", "+MultiKill+", "+NemesisKill+", "+FeedCount+", "+KillingSpree+", "+Dominating+", "+MegaKill+", "+Unstoppable+", "+WickedSick+", "+MonsterKill+", "+Godlike+", "+BeyondGodlike+", "+DoubleKill+", "+TripleKill+", "+UltraKill+", "+Rampage+", "+Ownage+")"); }
  200. if(.PvPMap$[0] != "All"){
  201. for(set .@i, 0; .@i < (getarraysize(.PvPMap$) - 1); set .@i, .@i + 1){
  202. if(strcharinfo(3) != .PvPMap$[.@i]){ end; }
  203. }
  204. }
  205. callsub OnClearData;
  206. deltimer "Versus::OnMKReset";
  207. } end;
  208.  
  209. OnRecordStreak:
  210. if(@ks > 2){
  211. set KillingStreak, KillingStreak + 1;
  212. switch(@ks){
  213. case 0: case 1: case 2: break;
  214. case 3: set KillingSpree, KillingSpree + 1; break;
  215. case 4: set Dominating, Dominating + 1; break;
  216. case 5: set MegaKill, MegaKill + 1; break;
  217. case 6: set Unstoppable, Unstoppable + 1; break;
  218. case 7: set WickedSick, WickedSick + 1; break;
  219. case 8: set MonsterKill, MonsterKill + 1; break;
  220. case 9: set Godlike, Godlike + 1; break;
  221. case 10: set BeyondGodlike, BeyondGodlike + 1; break;
  222. default: break;
  223. }
  224. }
  225. if(@mk > 1){
  226. set MultiKill, MultiKill + 1;
  227. switch(@mk){
  228. case 0: case 1: break;
  229. case 2: set DoubleKill, DoubleKill + 1; break;
  230. case 3: set TripleKill, TripleKill + 1; break;
  231. case 4: set UltraKill, UltraKill + 1; break;
  232. case 5: set Rampage, Rampage + 1; break;
  233. case 6: set Ownage, Ownage + 1; break;
  234. default: break;
  235. }
  236. }
  237. if((@nm > 3) && (@nm < .Feed)){ set NemesisKill, NemesisKill + 1; }
  238. if(@nm >= .Feed){
  239. set FeedCount, FeedCount + 1;
  240. }
  241. return;
  242.  
  243. OnAnnounce:
  244. if(@ks == 1){
  245. if(#Announcer == 0){ mapannounce "guild_vs2", strcharinfo(0)+" Conseguiu um First Blood", ((.Broadcast)?bc_all:bc_map), .KSColor$; }
  246. if(#Announcer > 1){ mapannounce "guild_vs2", strcharinfo(0)+" Tem Sede de Sangue", ((.Broadcast)?bc_all:bc_map), .KSColor$; }
  247. soundeffectall ""+#Announcer+"_KS"+1+".wav", 0, strcharinfo(3);
  248. }
  249. if(@ks > 2){
  250. if(#Announcer == 0){ mapannounce "guild_vs2", strcharinfo(0)+" "+.KSDotA$[@ks - 3]+" "+((.Streak)?"("+@ks+")":"")+"", ((.Broadcast)?bc_all:bc_map), .KSColor$; }
  251. if(#Announcer > 1){ mapannounce "guild_vs2", strcharinfo(0)+" "+.KSHoN$[@ks - 3]+" "+((.Streak)?"("+@ks+")":"")+"", ((.Broadcast)?bc_all:bc_map), .KSColor$; }
  252. soundeffectall ""+#Announcer+"_KS"+@ks+".wav", 0, strcharinfo(3);
  253. }
  254. if(@mk > 1){
  255. if(#Announcer == 0){ mapannounce "guild_vs2", strcharinfo(0)+" "+.MKDotA$[@mk - 2]+" "+((.Multiple)?"("+@mk+")":"")+"", ((.Broadcast)?bc_all:bc_map), .MKColor$; }
  256. if(#Announcer > 1){ mapannounce "guild_vs2", strcharinfo(0)+" "+.MKHoN$[@mk - 2]+" "+((.Multiple)?"("+@mk+")":"")+"", ((.Broadcast)?bc_all:bc_map), .MKColor$; }
  257. sleep2 1500;
  258. soundeffectall ""+#Announcer+"_MK"+@mk+".wav", 0, strcharinfo(3);
  259. }
  260. if((@nm > 3) && (@nm < .Feed)){
  261. mapannounce "guild_vs2", strcharinfo(0)+" Está humilhando "+rid2name(NemesisKilled)+" "+((.Nemesis)?"("+@nm+")":"")+"", ((.Broadcast)?bc_all:bc_map), .NMColor$;
  262. sleep2 2000;
  263. if(#Announcer > 0){ soundeffectall #Announcer+"_Nemesis.wav", 0, strcharinfo(3); } else { soundeffectall "1_Nemesis.wav", 0;}
  264. }
  265. if(@nm >= .Feed){
  266. announce rid2name(NemesisKilled)+" Está Feedando "+strcharinfo(0)+" "+((.Feeder)?"("+@nm+")":"")+"", ((.Broadcast)?bc_all:bc_map), .FDColor$;
  267. sleep2 1500;
  268. soundeffectall "Feeder.wav", 0, strcharinfo(3);
  269. } return;
  270.  
  271. OnDeath:
  272. if(@ks > 2){
  273. if(#Announcer == 0){ announce rid2name(killedrid)+" just ended "+strcharinfo(0)+"'s "+.ESDotA$[@ks - 3]+" "+((.Streak)?"("+@ks+")":"")+"", ((.Broadcast)?bc_all:bc_map), .ESColor$; }
  274. if(#Announcer > 1){ announce rid2name(killedrid)+" just ended "+strcharinfo(0)+"'s "+.ESHoN$[@ks - 3]+" "+((.Streak)?"("+@ks+")":"")+"", ((.Broadcast)?bc_all:bc_map), .ESColor$; }
  275. }
  276. if(killerrid == NemesisKilled && @nm > 4){
  277. soundeffectall #Announcer+"_Payback.wav", 0, rid2name(killedrid);
  278. announce rid2name(killedrid)+" just got a payback againts "+strcharinfo(0)+" "+((.Nemesis)?"("+@nm+")":"")+"", ((.Broadcast)?bc_all:bc_map), .PBColor$;
  279. }
  280. callsub OnClearData;
  281. return;
  282.  
  283. OnMKReset: set @mk, 0; end;
  284. OnClearData: sleep2 3000; set NemesisKilled, 0; set @ks, 0; set @mk, 0; set @nm, 0; return;
  285.  
  286. OnRollback:
  287. if(.Zeny){ set Zeny, Zeny - (.Zeny * .Rollback); }
  288. if(.pvppoint){ dispbottom "[Point System] -"+(.pvppoint * .Rollback)+" Kill Point"; set #PVPPOINT, #PVPPOINT - (.pvppoint * .Rollback); }
  289. if(.Skull){ delitem 7420, .Rollback; }
  290. for(set .@i, 0; .@i < getarraysize(.ItemID); set .@i, .@i + 1){ if(.ItemID){ delitem .ItemID[.@i], .Amount[.@i] * .Rollback; }}
  291. if((Kill - .Rollback) > 0){ set Kill, Kill - .Rollback; } else { set Kill, 0; }
  292. if((KillingSpree - 1) > 0){ set KillingSpree, KillingSpree - 1; } else { set KillingSpree, 0; }
  293. if((Dominating - 1) > 0){ set Dominating, Dominating - 1; } else { set Dominating, 0; }
  294. if((MegaKill - 1) > 0){ set MegaKill, MegaKill - 1; } else { set MegaKill, 0; }
  295. if((Unstoppable - 1) > 0){ set Unstoppable, Unstoppable - 1; } else { set Unstoppable, 0; }
  296. if((WickedSick - 1) > 0){ set WickedSick, WickedSick - 1; } else { set WickedSick, 0; }
  297. if((MonsterKill - 1) > 0){ set MonsterKill, MonsterKill - 1; } else { set MonsterKill, 0; }
  298. if((Godlike - 1) > 0){ set Godlike, Godlike - 1; } else { set Godlike, 0; }
  299. if((BeyondGodlike - 1) > 0){ set BeyondGodlike, BeyondGodlike - 1; } else { set BeyondGodlike, 0; }
  300. if((DoubleKill - 1) > 0){ set DoubleKill, DoubleKill - 1; } else { set DoubleKill, 0; }
  301. if((TripleKill - 1) > 0){ set TripleKill, TripleKill - 1; } else { set TripleKill, 0; }
  302. if((UltraKill - 1) > 0){ set UltraKill, UltraKill - 1; } else { set UltraKill, 0; }
  303. if((Rampage - 1) > 0){ set Rampage, Rampage - 1; } else { set Rampage, 0; }
  304. if((Ownage - 1) > 0){ set Ownage, Ownage - 1; } else { set Ownage, 0; }
  305. if((NemesisKill - (.Rollback - 3)) > 0){ set NemesisKill, NemesisKill - (.Rollback - 3); } else { set NemesisKill, 0; }
  306. announce "[Anti-Feed] Your kill count has been rollbacked "+.Rollback+" times.",bc_self,0xFF0000;
  307. return;
  308. }
  309.  
  310. - script Arena PvP -1,{
  311. mes "^FF7F00[ Arena PvP ]^000000"; mes "O que deseja fazer hoje?";
  312. if (#PVPPOINT) {
  313. mes "Você possui ^008aff" + #PVPPOINT + " ponto(s)^000000.";
  314. }
  315. pvp567:
  316. next;
  317. switch(select("Entrar na Arena:Ver o Ranking PvP")){
  318. case 1: //PvP Statistic
  319. mes "^FF7F00[ Arena PvP ]^000000"; mes "Por favor, escolha em qual Arena Ranqueada você deseja entrar:";
  320. switch(select("PvP ^0000ffcom Redenção^000000:PvP ^FF0000sem Redenção^000000")){
  321. case 1: //PvP Statistic
  322. if (BaseLevel < 300) {
  323. mes "^FF7F00[ Arena PvP ]^000000";
  324. mes "Somente jogadores de nível 300 podem entrar na Arena PvP";
  325. goto pvp567;
  326. }
  327. mes "^FF7F00[ Arena PvP ]^000000";
  328. mes "Boa Sorte!";
  329. next;
  330. warp "pvp_n_5-5",0,0;
  331. announce ""+strcharinfo(0)+" entrou na Arena PvP, digite @pvp1 e venha desafiá-l"+(Sex?"o":"a")+"!",8;
  332. end;
  333. case 2: //PvP Statistic
  334. if (BaseLevel < 300) {
  335. mes "^FF7F00[ Arena PvP ]^000000";
  336. mes "Somente jogadores de nível 300 podem entrar na Arena PvP";
  337. goto pvp567;
  338. }
  339. mes "^FF7F00[ Arena PvP ]^000000";
  340. mes "Boa Sorte!";
  341. next;
  342. warp "guild_vs2",0,0;
  343. announce ""+strcharinfo(0)+" entrou na Arena PvP, digite @pvp2 e venha desafiá-l"+(Sex?"o":"a")+"!",8;
  344. end;
  345. }
  346. case 2: //Player Ranking
  347. if(getvariableofnpc(.ServerType, "Versus")){
  348. mes "^FF7F00[ Top "+getvariableofnpc(.Top, "Versus")+" PvP Ranking ]^000000";
  349. mes "^0000FFKill^000000 | ^FF0000Death^000000 | ^FF22FFKDR^000000 | ^00FF00SK^000000 | ^666666MK^000000";
  350. query_sql "SELECT `char`, `kill`, `death`, `kdr`, `killingstreak`, `multikill` FROM `pvp_rank` ORDER BY `pvp_rank`.`kill` DESC LIMIT "+getvariableofnpc(.Top, "Versus")+"", .@char$, .@kill, .@death, .@kdr$, .@sk, .@mk;
  351. for(set .@i, 0; .@i < getarraysize(.@char$); set .@i, .@i + 1){
  352. mes .@i+1+". "+.@char$[.@i]+" ^0000FF"+.@kill[.@i]+"^000000 ^FF0000"+.@death[.@i]+"^000000 ^FF22FF"+.@kdr$[.@i]+"^000000 ^00FF00"+.@sk[.@i]+"^000000 ^666666"+.@mk[.@i]+"^000000 ";
  353. }
  354. close;
  355. } else {
  356. mes "Top "+getvariableofnpc(.Top, "Versus")+" ranking is not yet implemented for this server type.";
  357. }
  358. close;
  359. }
  360. close;
  361.  
  362. OnPvPReset:
  363. set Kill, 0;
  364. set Death, 0;
  365. set KillingStreak, 0;
  366. set MultiKill, 0;
  367. set KillingSpree, 0;
  368. set Dominating, 0;
  369. set MegaKill, 0;
  370. set Unstoppable, 0;
  371. set WickedSick, 0;
  372. set MonsterKill, 0;
  373. set Godlike, 0;
  374. set BeyondGodlike, 0;
  375. set DoubleKill, 0;
  376. set TripleKill, 0;
  377. set UltraKill, 0;
  378. set Rampage, 0;
  379. set Ownage, 0;
  380. set NemesisKill, 0;
  381. set FeedCount, 0;
  382. return;
  383. //==================================
  384. OnHour00: //-- Monthly Rewards
  385. //==================================
  386.  
  387. if(gettime(5) == 1) {
  388. query_sql "SELECT `char_id`, `char`, `kill`, `death`, `kdr`, `killingstreak`, `multikill` FROM `pvp_rank` ORDER BY `pvp_rank`.`kill` DESC LIMIT "+getvariableofnpc(.Top, "Versus")+"", .@charid, .@charname$, .@kill, .@death, .@kdr$, .@sk, .@mk;
  389.  
  390. .sender$ = "ZeiyanRO";
  391. .title$ = "Monthly PVP Reward";
  392. setarray .zeny, 100000000,90000000,80000000,70000000,60000000,50000000,40000000,30000000,20000000,10000000;
  393. setarray .mailitem[0], 30027, 14232, 14004; // Cdrop, ygg box, edp box
  394. setarray .mailamount[0], 3, 10, 10;
  395.  
  396. for(set .@i, 0; .@i < getarraysize(.@charid); set .@i, .@i + 1) {
  397. mail .@charid[.@i], .sender$, .title$, "Congratulations! You have placed #"+(.@i+1)+" in this month's PvP Ranking [ Your reward is attached. ]", .zeny[.@i], .mailitem, .mailamount;
  398. announce "Congratulations to "+.@charname$[.@i]+" for being acknowledged as Top "+(.@i+1)+" for this month's PVP ranking",0;
  399. }
  400. announce "PVP Rankings will now be reset...",0;
  401. query_sql "TRUNCATE TABLE `pvp_rank`";
  402. query_sql "DELETE FROM `char_reg_num` WHERE `char_reg_num`.`key` = 'Kill' ";
  403. query_sql "DELETE FROM `char_reg_num` WHERE `char_reg_num`.`key` = 'Death' ";
  404. query_sql "DELETE FROM `char_reg_num` WHERE `char_reg_num`.`key` = 'KillingStreak' ";
  405. query_sql "DELETE FROM `char_reg_num` WHERE `char_reg_num`.`key` = 'MultiKill' ";
  406. query_sql "DELETE FROM `char_reg_num` WHERE `char_reg_num`.`key` = 'KillingSpree' ";
  407. query_sql "DELETE FROM `char_reg_num` WHERE `char_reg_num`.`key` = 'Dominating' ";
  408. query_sql "DELETE FROM `char_reg_num` WHERE `char_reg_num`.`key` = 'MegaKill' ";
  409. query_sql "DELETE FROM `char_reg_num` WHERE `char_reg_num`.`key` = 'Unstoppable' ";
  410. query_sql "DELETE FROM `char_reg_num` WHERE `char_reg_num`.`key` = 'WickedSick' ";
  411. query_sql "DELETE FROM `char_reg_num` WHERE `char_reg_num`.`key` = 'MonsterKill' ";
  412. query_sql "DELETE FROM `char_reg_num` WHERE `char_reg_num`.`key` = 'Godlike' ";
  413. query_sql "DELETE FROM `char_reg_num` WHERE `char_reg_num`.`key` = 'BeyondGodlike' ";
  414. query_sql "DELETE FROM `char_reg_num` WHERE `char_reg_num`.`key` = 'DoubleKill' ";
  415. query_sql "DELETE FROM `char_reg_num` WHERE `char_reg_num`.`key` = 'TripleKill' ";
  416. query_sql "DELETE FROM `char_reg_num` WHERE `char_reg_num`.`key` = 'UltraKill' ";
  417. query_sql "DELETE FROM `char_reg_num` WHERE `char_reg_num`.`key` = 'Rampage' ";
  418. query_sql "DELETE FROM `char_reg_num` WHERE `char_reg_num`.`key` = 'Ownage' ";
  419. query_sql "DELETE FROM `char_reg_num` WHERE `char_reg_num`.`key` = 'NemesisKill' ";
  420. query_sql "DELETE FROM `char_reg_num` WHERE `char_reg_num`.`key` = 'FeedCount' ";
  421. end;
  422. }
  423. end;
  424.  
  425.  
  426. OnInit:
  427. setarray $WOT$[0],"pvp_n_5-5","guild_vs2"; // NOME DO MAPA QUE SERÁ MONITORADO EM TEMPO REAL
  428. waitingroom "",0;
  429.  
  430. OnTimer5000:
  431. setarray .@MSG$,"["+getmapusers($WOT$[0])+"] PvP com Redenção","["+getmapusers($WOT$[0])+"] PvP sem Redenção"; // MENSAGEM QUE SERÁ EXIBIDA PELA PLACA
  432. delwaitingroom;
  433. waitingroom .@MSG$[rand(0,1)],0;
  434. initnpctimer;
  435. end;
  436. }
  437.  
  438. //Ghost's KDR Algorithm
  439. function script KDR_Calc {
  440. if(!getarg(1)) { debugmes "Error in KDR function, getarg(1) invalid value"; return 0; } // [Lighta]
  441. if(getarg(0) >= getarg(1)){
  442. if(getarg(1)){
  443. set .@i, getarg(0)/getarg(1);
  444. if((getarg(0)%getarg(1)) == 0){ return .@i+".00"; }
  445. set .@j, (getarg(0)%getarg(1))*100/getarg(1);
  446. return .@i+"."+.@j;
  447. } else {
  448. return getarg(0)+".00";
  449. }
  450. }
  451. if(getarg(0) < getarg(1)){
  452. if(getarg(0)){
  453. set .@i, (getarg(0)*10)/getarg(1);
  454. set .@j, ((getarg(0)*10)%getarg(1))*10/getarg(1);
  455. return "0."+.@i +.@j;
  456. } else {
  457. return "0.00";
  458. }
  459. }
  460. }
  461.  
Add Comment
Please, Sign In to add comment