Advertisement
Guest User

Untitled

a guest
Aug 30th, 2015
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 25.04 KB | None | 0 0
  1.  
  2.  
  3. // ==============================================================================================
  4. // P v P S Y S T E M
  5. // ==============================================================================================
  6. // Created by Eradicate [ sro.eradicate@live.ca ]
  7. // ==============================================================================================
  8. // Current Version: 1.6
  9. // ==============================================================================================
  10. // Version 1.0+
  11. // ----------------------------------------------------------------------------------------------
  12. // - Kills, deaths, streaks ladder (script & SQL)
  13. // Sorted by kills, deaths, then streaks
  14. // - In-Game Ranker
  15. // - Point System (w/ streaks, dota sounds)
  16. // - Rewards Shop
  17. // - Double/Triple/Etc Kill
  18. // ----------------------------------------------------------------------------------------------
  19. // Version 1.5+
  20. // ----------------------------------------------------------------------------------------------
  21. // - Anti Cheat
  22. // - Level Restriction
  23. // ==============================================================================================
  24.  
  25. // Anti-Cheat Announcement. (Should match up with the maps in "setarray .maptrigger$[0]" in the Config)
  26. // <mapname>%TAB%mapflag%TAB%loadevent
  27. pvp_y_2-2 mapflag loadevent
  28.  
  29. prtg_cas01 mapflag loadevent
  30. prtg_cas02 mapflag loadevent
  31. prtg_cas03 mapflag loadevent
  32. prtg_cas04 mapflag loadevent
  33. payg_cas05 mapflag loadevent
  34.  
  35. aldeg_cas05 mapflag loadevent
  36. payg_cas04 mapflag loadevent
  37.  
  38. gefg_cas01 mapflag loadevent
  39. gefg_cas02 mapflag loadevent
  40. gefg_cas03 mapflag loadevent
  41. gefg_cas04 mapflag loadevent
  42. gefg_cas05 mapflag loadevent
  43.  
  44. - script PVPladder -1,{
  45.  
  46. OnInit:
  47. // --- C O N F I G ------------------------------------------------------------------------------------------------
  48. // Is the points character or account wide? (0=Character, 1=Account) [Default: Character]
  49. set $@pvptype, 0;
  50. // How many points does the player recieve on a regular kill? (0=Disable) [Default: 10]
  51. set .regpoints, 1;
  52. // How many points loss when player dies? (0=Disable) [Default: 2]
  53. set .losepoints, 0;
  54. // How many bonus points per increase in streak? (2-10+)
  55. // Streaks: 2 3 4 5 6 7 8 9 10 10+
  56. setarray .streakbonus[2], 2, 4, 6, 8, 10, 12, 14, 16, 18, 22;
  57. // How many seconds till player has to kill another to increase in Mutliple Kills? [Default: 5]
  58. set .killtime, 5;
  59. // How many bonus points per increase in Multiple Kill? (2-10+)
  60. setarray .multikill$[2], "Double", "TRIPLE", "QUADRUPLE", "QUINTUPLE";
  61. setarray .multikillbonus[2], 5, 6, 8, 10;
  62. // Does this PvP System only happen in certain maps? (0=No, 1=Yes) [Default: 0]
  63. set .maprestrict, 1;
  64. // If above is Yes (.maprestrict = 1). Which maps can it happen too?
  65. setarray .maptrigger$[0], "pvp_y_2-2","prtg_cas01","prtg_cas02","prtg_cas03","prtg_cas04","prtg_cas05","aldeg_cas05","payg_cas04","gefg_cas01","gefg_cas02","gefg_cas03","gefg_cas04","gefg_cas05";
  66. // What level does the player killed have to be in range of the player who is killing? (0=Disable) [Default: 0]
  67. // Eg. If set to 10. A lv80 player will only get announcements & points if kills a level 70-90 player
  68. set .lvrange, 0;
  69. // How many players to show on the Top PvP Ladder? [Default: 10]
  70. set .players, 10;
  71. // Rewards Shop: Item ID
  72. setarray $@reward_item[1], 12424,12903,12904,12905,12906,12907,12908,12912,12917,7088,7089,7090,7091,7092,7077,7086,29050,29051,29052,29053,29054,29055;
  73. // Rewards Shop: Item Cost
  74. setarray $@reward_cost[1], 20,20,20,20,20,20,20,20,20,2000,2000,2000,2000,2000,2000,2000,100,100,100,100,100;
  75. // Rewards Shop: Redundant.. but basically its itemid1,cost1,itemid2,cost2 .. etc
  76. npcshopitem "pvprewardshop", 12424,20,14145,20,12903,20,12904,20,12905,20,12906,20,12907,20,12908,20,12912,20,12917,20,7088,2000,7089,2000,7090,2000,7091,2000,7092,2000,7077,2000,7086,2000,29050,100,29051,100,29052,100,29053,100,2904,100,29055,100;
  77.  
  78. // --- Version 1.5 ------------------------------------------------------------------------------------------------
  79. // How many times does a player have to kill the same person until penalized?
  80. set .penkill, 5;
  81. // How many points lost when a player kills the same person several times (.penkill) in one minute?
  82. set .penlose, 2;
  83. // What is the minimum level before they gain/lose points?
  84. set .minlevel, 90;
  85. // Edit the mapflags at the beginning of this script for the anti-cheat announcement.
  86.  
  87. // --- End of Config ----------------------------------------------------------- Do Not Edit Below This Line ------
  88. setarray .multikillsound$[2], "doublekill.wav", "triplekill.wav", "triplekill.wav", "triplekill.wav";
  89. end;
  90.  
  91.  
  92. OnSun2155:
  93. for ( .@i = 5; .@i > 0; .@i-- ) {
  94. announce "Top 3 PVP Rewards will be given in "+.@i+" minutes, please login your characters to get the auto assigned rewards.",bc_all;
  95. sleep 60000;
  96. }
  97.  
  98. // item id reward for top 3 pvp
  99. setarray .@itemid,
  100. 7179,
  101. 7227,
  102. 7539;
  103.  
  104. // item quantity reward for top 3 pvp
  105. setarray .@itemid_qty,
  106. 1,
  107. 20,
  108. 20;
  109. .@itemid_size = getarraysize( .@itemid );
  110.  
  111. query_sql ( "SELECT c.`account_id`,c.`char_id` FROM `pvpladder` pvp INNER JOIN `char` c ON c.`char_id` = pvp.`char_id` WHERE pvp.`kills` > 0 ORDER BY pvp.`kills` DESC,pvp.`deaths` LIMIT "+.@itemid_size ,.@aid,.@cid );
  112. .@cid_size = getarraysize( .@cid );
  113.  
  114. for ( .@i = 0; .@i < .@cid_size; .@i++ )
  115. if ( .@aid[.@i] && isloggedin( .@aid[.@i],.@cid[.@i] ) ) {
  116. attachrid( .@aid[.@i] );
  117. announce "Top "+( .@i+1 )+" PVP Rewards - "+strcharinfo(0)+" obtained "+.@itemid_qty[.@i]+"x "+getitemname( .@itemid[.@i] ),bc_all;
  118. }
  119. detachrid;
  120. query_sql( "TRUNCATE `pvpladder`" );
  121. announce "PVP Ladder completely reset.",bc_all;
  122. end;
  123.  
  124.  
  125. OnPCKillEvent:
  126. // if(getgmlevel() >= 20 || killerrid == killedrid) end;
  127.  
  128. if(.maprestrict){
  129. getmapxy .@m$,.@x,.@y,0;
  130. for(set .@i, 0; .@i < getarraysize(.maptrigger$); set .@i,.@i+1) {
  131. if(.@m$ == .maptrigger$[.@i]) break;
  132. }
  133. if (.@i == getarraysize(.maptrigger$)) end;
  134. }
  135.  
  136. set @KillStreak, @KillStreak +1;
  137. set .@Killer$, strcharinfo(0);
  138. set .@Level, BaseLevel;
  139.  
  140. attachrid(killedrid);
  141. if(@Killed$ == strcharinfo(0))
  142. set .@anticheat, 1;
  143. set @Killed$, strcharinfo(0);
  144.  
  145. if(((BaseLevel < (.@Level - .lvrange) || BaseLevel > (.@Level + .lvrange)) && .lvrange != 0) || (BaseLevel < .minlevel)) end;
  146.  
  147. if (@KillStreak==3)
  148. announce ""+@Killed$+"'s killing spree has been ended by "+.@Killer$+" !!",bc_self;
  149. if (@KillStreak==4)
  150. announce ""+@Killed$+"'s dominating streak has been ended by "+.@Killer$+" !!",bc_self;
  151. if (@KillStreak==5)
  152. announce ""+@Killed$+"'s mega kill streak has been ended by "+.@Killer$+" !!",bc_self;
  153. if (@KillStreak==6)
  154. announce ""+@Killed$+"'s wicked sick streak has been ended by "+.@Killer$+" !!",bc_self;
  155. if (@KillStreak==7)
  156. announce ""+@Killed$+"'s monster kill streak has been ended by "+.@Killer$+" !!",bc_self;
  157. if (@KillStreak==8)
  158. announce ""+@Killed$+"'s unstoppable streak has been ended by "+.@Killer$+" !!",bc_self;
  159. if (@KillStreak==9)
  160. announce ""+@Killed$+"'s godlike has been ended by "+.@Killer$+" !!",bc_self;
  161. if (@KillStreak>=10)
  162. announce ""+@Killed$+"'s beyond godlike streak has been ended by "+.@Killer$+" !!",bc_self;
  163. set @KillStreak, 0;
  164.  
  165. query_sql "SELECT `char_id` FROM `pvpladder` WHERE `char_id` = '"+getcharid(0)+"'", .@Exist;
  166. if(.@Exist)
  167. query_sql "UPDATE pvpladder SET deaths = deaths + 1 WHERE char_id = "+getcharid(0)+"";
  168. else
  169. query_sql "INSERT INTO `pvpladder` (`char_id`, `name`, `kills`, `deaths`, `streaks`) VALUES ('"+getcharid(0)+"', '"+strcharinfo(0)+"', '0', '1', '0')";
  170. setd ""+(($@pvptype == 0)?"":"#")+"pvppoints", getd(""+(($@pvptype == 0)?"":"#")+"pvppoints") - .losepoints;
  171.  
  172. if(getd(""+(($@pvptype == 0)?"":"#")+"pvppoints") < 0)
  173. setd ""+(($@pvptype == 0)?"":"#")+"pvppoints", 0;
  174.  
  175. attachrid(killerrid);
  176. if(BaseLevel < .minlevel) end;
  177.  
  178. if(.@anticheat)
  179. set @anticheat, @anticheat + 1;
  180.  
  181. if(@anticheat < .penkill){
  182. if (@KillStreak==3) {
  183. soundeffectall "killingspree.wav",0,.@m$;
  184. announce ""+.@Killer$+" is on a killing spree !! ["+@KillStreak+"]",bc_self;
  185. }
  186. if (@KillStreak==4) {
  187. soundeffectall "dominating.wav",0,.@m$;
  188. announce ""+.@Killer$+" is dominating !! ["+@KillStreak+"]",bc_self;
  189. }
  190. if (@KillStreak==5) {
  191. soundeffectall "megakill.wav",0,.@m$;
  192. announce ""+.@Killer$+" has a mega kill !! ["+@KillStreak+"]",bc_self;
  193. }
  194. if (@KillStreak==6) {
  195. soundeffectall "wickedsick.wav",0,.@m$;
  196. announce ""+.@Killer$+" is wicked sick !! ["+@KillStreak+"]",bc_self;
  197. }
  198. if (@KillStreak==7) {
  199. soundeffectall "monsterkill.wav",0,.@m$;
  200. announce ""+.@Killer$+" has a monster kill !! ["+@KillStreak+"]",bc_self;
  201. }
  202. if (@KillStreak==8) {
  203. soundeffectall "unstoppable.wav",0,.@m$;
  204. announce ""+.@Killer$+" is unstoppable !! ["+@KillStreak+"]",bc_self;
  205. }
  206. if (@KillStreak==9) {
  207. soundeffectall "godlike.wav",0,.@m$;
  208. announce ""+.@Killer$+" is godlike !! ["+@KillStreak+"]",bc_self;
  209. }
  210. if (@KillStreak>=10) {
  211. soundeffectall "holyshit.wav",0,.@m$;
  212. announce ""+.@Killer$+" is beyond godlike !! Somebody kill him! ["+@KillStreak+"]",bc_self;
  213. }
  214.  
  215. query_sql "SELECT `char_id`, `streaks` FROM `pvpladder` WHERE `char_id` = '"+getcharid(0)+"'", .@Exist, .@Streak;
  216. if(.@Exist){
  217. query_sql "UPDATE pvpladder SET kills = kills + 1 WHERE char_id = "+getcharid(0)+"";
  218. if(.@Streak < @KillStreak)
  219. query_sql "UPDATE pvpladder SET streaks = "+@KillStreak+" WHERE char_id = "+getcharid(0)+"";
  220. }
  221. else
  222. query_sql "INSERT INTO `pvpladder` (`char_id`, `name`, `kills`, `deaths`, `streaks`) VALUES ('"+getcharid(0)+"', '"+strcharinfo(0)+"', '1', '0', '1')";
  223.  
  224. if(@KillStreak > 10)
  225. set .@streak, 10;
  226. else
  227. set .@streak, @KillStreak;
  228.  
  229. set @mkill, @mkill + 1;
  230. deltimer "PVPladder::OnMKillReset";
  231. addtimer (.killtime*1000),"PVPladder::OnMKillReset";
  232. if(@mkill >= 6)
  233. set @mkill, 5;
  234.  
  235. setd ""+(($@pvptype == 0)?"":"#")+"pvppoints", getd(""+(($@pvptype == 0)?"":"#")+"pvppoints") + .regpoints + .streakbonus[.@streak] + .multikillbonus[@mkill];
  236.  
  237. sleep2 1500;
  238. if(@mkill >= 2){
  239. announce ""+.@Killer$+"'s just got a "+.multikill$[@mkill]+" Kill !!",bc_self;
  240. soundeffectall .multikillsound$[@mkill],0,.@m$;
  241. }
  242. }
  243. else {
  244. setd ""+(($@pvptype == 0)?"":"#")+"pvppoints", getd(""+(($@pvptype == 0)?"":"#")+"pvppoints") - .penlose;
  245. if(getd(""+(($@pvptype == 0)?"":"#")+"pvppoints") < 0) setd ""+(($@pvptype == 0)?"":"#")+"pvppoints", 0;
  246. }
  247. end;
  248.  
  249. OnMKillReset:
  250. set @mkill, 0;
  251. end;
  252.  
  253. OnPenReset:
  254. set @anticheat, 0;
  255. deltimer "PVPladder::OnPenReset";
  256. addtimer 60000,"PVPladder::OnPenReset";
  257. end;
  258.  
  259. OnPCLoadMapEvent:
  260. getmapxy .@m$,.@x,.@y,0;
  261. if(.maprestrict){
  262. for(set .@i, 0; .@i < getarraysize(.maptrigger$); set .@i,.@i+1) {
  263. if(.@m$ == .maptrigger$[.@i]) break;
  264. }
  265. if (.@i == getarraysize(.maptrigger$)) end;
  266. }
  267. if(BaseLevel >= .minlevel){
  268. //mapannounce .@m$,"Anti Cheat protection is ON! Killing the same player more than "+.penkill+" times per minute will result in you losing points and the kills being disregarded!",bc_self;
  269. deltimer "PVPladder::OnPenReset";
  270. addtimer 60000,"PVPladder::OnPenReset";
  271. }
  272. end;
  273. }
  274.  
  275. prontera,143,198,3 script PVP LADDER 110,{
  276. L_Ladder:
  277. query_sql "SELECT name, kills, deaths, streaks FROM pvpladder ORDER BY kills DESC, deaths ASC, streaks DESC LIMIT "+getvariableofnpc(.players,"PVPladder")+"", .@name$, .@kills, .@deaths, .@streaks;
  278. mes "[^0065DFTop "+getvariableofnpc(.players,"PVPladder")+" PvP Players^000000]";
  279. mes "(Name [Kills - Deaths - Streaks])";
  280. for(set .@i, 0; .@i < getarraysize(.@name$); set .@i, .@i + 1){
  281. mes .@i+1+". "+.@name$[.@i]+" [ ^312EE8"+.@kills[.@i]+"^000000 - ^fb0000"+.@deaths[.@i]+"^000000 - ^312EE8"+.@streaks[.@i]+"^000000 ]";
  282. }
  283. next;
  284. if(select("Check My Stats:Close")==2) close;
  285. query_sql "SELECT kills, deaths, streaks FROM pvpladder WHERE char_id = "+getcharid(0)+"", .@kills1, .@deaths1, .@streaks1;
  286. mes "[^0065DFPvP Stats^000000]";
  287. mes "Kills: "+.@kills1;
  288. mes "Deaths: "+.@deaths1;
  289. mes "Highest Streak: "+.@streaks1;
  290. next;
  291. if(select("Check PvP Ladder:Close")==2) close;
  292. goto L_Ladder;
  293. }
  294.  
  295. - shop pvprewardshop -1,501:50
  296.  
  297. prontera,142,188,5 script GvG/PvP Reward 835,{
  298. cleararray @bought_nameid[0],0,128;
  299. cleararray @bought_quantity[0],0,128;
  300. mes "[^0066CC PvP Rewards Shop ^000000]";
  301. mes "Your GvG/PvP Points: "+getd(""+(($@pvptype == 0)?"":"#")+"pvppoints")+"";
  302. mes " ";
  303. mes "Please note:";
  304. mes "- It takes GvG/PvP Points, not Zeny.";
  305. mes "- Listed price is actual. Discount does not work.";
  306. next;
  307. callshop "pvprewardshop",1;
  308. npcshopattach "pvprewardshop";
  309. end;
  310.  
  311. OnBuyItem:
  312. mes "[^0066CC PvP Rewards Shop ^000000]";
  313. for(set .@i, 0; .@i < getarraysize(@bought_nameid); set .@i, .@i + 1){
  314. if(@bought_quantity[.@i] <= 0){
  315. mes "omgh4x!";
  316. close;
  317. }
  318. for(set .@z, 0; .@z < getarraysize($@reward_item); set .@z, .@z + 1)
  319. if($@reward_item[.@z] == @bought_nameid[.@i])
  320. set .@totalprice, .@totalprice + ($@reward_cost[.@z] * @bought_quantity[.@i]);
  321. }
  322.  
  323. if(getd(""+(($@pvptype == 0)?"":"#")+"pvppoints") < .@totalprice){
  324. mes "Sorry, but you have insufficient PvP Points. The transaction has failed.";
  325. deletearray @bought_quantity, getarraysize(@bought_quantity);
  326. deletearray @bought_nameid, getarraysize(@bought_nameid);
  327. close;
  328. }
  329. else if(.@totalprice <= 0){
  330. mes "omgh4x!";
  331. close;
  332. }
  333.  
  334. setd ""+(($@pvptype == 0)?"":"#")+"pvppoints", getd(""+(($@pvptype == 0)?"":"#")+"pvppoints") - .@totalprice;
  335. for(set .@i,0; .@i < getarraysize(@bought_nameid); set .@i, .@i + 1)
  336. getitem @bought_nameid[.@i], @bought_quantity[.@i];
  337.  
  338. deletearray @bought_quantity, getarraysize(@bought_quantity);
  339. deletearray @bought_nameid, getarraysize(@bought_nameid);
  340.  
  341. mes "Exchange completed.";
  342. close;
  343.  
  344.  
  345. }
  346.  
  347.  
  348. - script DOTAPVP -1,{
  349. OnInit:
  350. // Config
  351. set .sound, 1; // soundeffect : 0 - disable, 1 - play soundeffect to all players on map, 2 - play soundeffect to an area around the killer, 3 - play soundeffect to killer only
  352. set .ownage, 2; // ownage announcement : 0 - disable, 1 - party owns, 2 - guild owns
  353. set .announce, 1; // make announce to : 0 - global, 1 - map
  354. set .announcemap, 1; // announce the map name in the announcement ? : 0 - off, 1 - on
  355.  
  356. set .announcekill, 1; // announce who pawn who's head : 0 - off, 1- on
  357. set .msg_die, 0; // show message who kill you when die : 0 - off, 1- on
  358. set .msg_kill, 0; // show message you kill who when killed someone : 0 - off, 1- on
  359.  
  360. set .gmnokill, 0; // GMs are not suppose to kill players. A GM with <this number> level or higher will do nothing. IF set to 60, GM60 and above kill any player will not get anything : 0 - off
  361.  
  362. set .killingspree, 3;
  363. set .dominating, 4;
  364. set .megakill, 5;
  365. set .unstoppable, 6;
  366. set .wickedsick, 7;
  367. set .monsterkill, 8;
  368. set .godlike, 9;
  369. set .holyshit, 10;
  370. set .continue, 1; // after beyond-godlike, every <this number> kills will make announcement again
  371.  
  372. set .owned, 5; // how many times the party/guild has to kill to announce ownage
  373. set .owncontinue, 1; // after ownage, every <this number> party/guild cumulative kills will make ownage announce again
  374.  
  375. setarray .maptrigger$, // only these maps will trigger this script
  376. "all", // comment this line to only trigger this script on these listed maps
  377. "pvp_y_2-2",
  378. //"Coliseum",
  379. "prtg_cas01",
  380. "prtg_cas02",
  381. "prtg_cas03",
  382. "prtg_cas04",
  383. "prtg_cas05",
  384. "aldeg_cas05",
  385. "payg_cas04";
  386.  
  387. // anti-sit-killer system
  388. // a player must kill another player with this minimum <this number> level to get the announcement and in the ladder.
  389. // Otherwise only have streak ended announcement and killed player's streak reset.
  390. // Its possible for a level 1 novice to kill a level 55 player and he/she will still get in the ladder
  391. // but a level 55 kill a level 1 player will get nothing
  392. // 0 - off this system ( default is 55, pk setting )
  393. set .lvltokill, 0;
  394.  
  395. // when a player kill another same player <this number> times in a row, the player is warp back to save point.
  396. // and the player's streak and ownage count will deduct accordingly
  397. // 0 - off this system
  398. set .counttopunish, 6;
  399.  
  400. // minimum level range to kill another player
  401. // eg. when set to 20, player level 99 needs to kill another player with minimum level of 79 to get announcement and increase the kill rank.
  402. // but a player with base level 50 kills a level 99 will also get the announcement
  403. // higher base level cannot kill lower level, but lower level can kill higher level
  404. // 0 - off this system
  405. set .minlvlrange, 0;
  406.  
  407. // Config ends ------------------------------------------------------------------------------------------
  408.  
  409. // to prevent bug happen
  410. if ( .ownage < 0 || .ownage > 2 ) set .ownage, 0;
  411. if ( .announce < 0 || .announce > 1 ) set .announce,0;
  412. if ( .continue < 1 ) set .continue, 1;
  413. if ( .owncontinue < 1 ) set .owncontinue, 1;
  414. if ( .gmnokill <= 0 ) set .gmnokill, 100;
  415. if ( .lvltokill <= 1 ) set .lvltokill, 0;
  416. if ( .counttopunish <= 1 ) set .counttopunish, 0;
  417. set .maptriggersize, getarraysize(.maptrigger$);
  418. end;
  419.  
  420. // script start
  421. OnPCKillEvent:
  422. if ( getgmlevel() >= .gmnokill ) end;
  423. getmapxy .@map$, .@x, .@y, 0;
  424. if ( .maptrigger$ != "all" ) {
  425. for ( set .@i, 0; .@i < .maptriggersize; set .@i, .@i +1 ) {
  426. if ( .@map$ == .maptrigger$[.@i] ) break;
  427. }
  428. if ( .@i == .maptriggersize ) end;
  429. }
  430. attachrid killedrid;
  431. if ( killerrid != getcharid(3) && ( .msg_die || .msg_kill ) ) {
  432. if ( .msg_die ) message strcharinfo(0),"You have been killed by "+ rid2name(killerrid);
  433. if ( .msg_kill ) message rid2name(killerrid),"You just killed "+ strcharinfo(0);
  434. }
  435. if ( @PlayersKilledStreak >= .holyshit )
  436. set .@streakname$,"Beyond Godlike";
  437. else if ( @PlayersKilledStreak >= .godlike )
  438. set .@streakname$,"Godlike";
  439. else if ( @PlayersKilledStreak >= .monsterkill )
  440. set .@streakname$,"Monster Kill";
  441. else if ( @PlayersKilledStreak >= .wickedsick )
  442. set .@streakname$,"Wicked Sick";
  443. else if ( @PlayersKilledStreak >= .unstoppable )
  444. set .@streakname$,"Unstoppable";
  445. else if ( @PlayersKilledStreak >= .megakill )
  446. set .@streakname$,"Mega-kill";
  447. else if ( @PlayersKilledStreak >= .dominating )
  448. set .@streakname$,"Dominating";
  449. else if ( @PlayersKilledStreak >= .killingspree )
  450. set .@streakname$,"Killing Spree";
  451. if ( @PlayersKilledStreak >= .killingspree && killerrid == getcharid(3) )
  452. announce strcharinfo(0) +" has ended "+( (sex)?"him":"her" )+" own "+ .@streakname$ +"["+ @PlayersKilledStreak +"] streak "+( (.announcemap)?("at "+ .@map$):""),16|.announce;
  453. else if ( @PlayersKilledStreak >= .killingspree )
  454. announce rid2name(killerrid) +" has ended "+ strcharinfo(0) +"'s "+ .@streakname$ +"["+ @PlayersKilledStreak +"] streak "+( (.announcemap)?("at "+ .@map$):""),16|.announce;
  455. else if ( .announcekill && killerrid != getcharid(3) )
  456. announce rid2name(killerrid) +" has pawned "+ strcharinfo(0) +"'s head "+( (.announcemap)?("at "+ .@map$):""),16|.announce;
  457. set @PlayersKilledStreak,0;
  458. set @dota_multikills,0;
  459. if ( .ownage && getcharid(.ownage) ) {
  460. setd ".dotaown_"+ getcharid(.ownage), 0;
  461. set .@killedgroup, getcharid(.ownage);
  462. }
  463. if ( killerrid == getcharid(3) || baselevel < .lvltokill ) end;
  464. if ( .minlvlrange ) set .@killedlvl, baselevel;
  465. attachrid killerrid;
  466. if ( .minlvlrange && .@killedlvl + .minlvlrange < baselevel ) end;
  467. if ( .counttopunish ) {
  468. if ( @sitkillminute != gettime(2) ) {
  469. deletearray @sitkillid, 128;
  470. deletearray @sitkilltimes, 128;
  471. set @sitkillminute, gettime(2);
  472. }
  473. set .@sitkillsize, getarraysize(@sitkillid);
  474. for ( set .@i,0; .@i < .@sitkillsize; set .@i, .@i +1 ) {
  475. if ( @sitkillid[.@i] != killedrid ) continue;
  476. else {
  477. set @sitkilltimes[.@i], @sitkilltimes[.@i] +1 ;
  478. if ( @sitkilltimes[.@i] >= .counttopunish ) {
  479. warp "SavePoint",0,0;
  480. announce strcharinfo(0) +" , Stop killing "+ rid2name(killedrid) + " !!!",0;
  481. debugmes strcharinfo(0) +" is sit-killing "+ rid2name(killedrid) +" for "+ @sitkilltimes[.@i] + " times";
  482. logmes "is sit-killing "+ rid2name(killedrid) +" for "+ @sitkilltimes[.@i] +" times";
  483. set @PlayersKilledStreak, @PlayersKilledStreak +1 - .counttopunish;
  484. set PlayersKilled, PlayersKilled +1 - .counttopunish;
  485. if ( .ownage && getcharid(.ownage) )
  486. setd ".dotaown_"+ getcharid(.ownage), getd(".dotaown_"+ getcharid(.ownage) ) +1 - .counttopunish;
  487. end;
  488. }
  489. break;
  490. }
  491. }
  492. if ( .@i == .@sitkillsize ) {
  493. set @sitkillid[.@i], killedrid;
  494. set @sitkilltimes[.@i], 1;
  495. }
  496. }
  497. set @PlayersKilledStreak, @PlayersKilledStreak + 1;
  498. set PlayersKilled, PlayersKilled + 1;
  499. if ( @PlayersKilledStreak == .killingspree )
  500. setarray .@streakname$,"killingspree.wav","is on a KILLING SPREE","!";
  501. else if ( @PlayersKilledStreak == .dominating )
  502. setarray .@streakname$,"dominating.wav","is DOMINATING","!";
  503. else if ( @PlayersKilledStreak == .megakill )
  504. setarray .@streakname$,"megakill.wav","has a MEGA KILL","!";
  505. else if ( @PlayersKilledStreak == .unstoppable )
  506. setarray .@streakname$,"unstoppable.wav","is UNSTOPPABLE","!!";
  507. else if ( @PlayersKilledStreak == .wickedsick )
  508. setarray .@streakname$,"wickedsick.wav","is WICKED SICK","!!";
  509. else if ( @PlayersKilledStreak == .monsterkill )
  510. setarray .@streakname$,"monsterkill.wav","has a MONSTER KILL","!!";
  511. else if ( @PlayersKilledStreak == .godlike )
  512. setarray .@streakname$,"godlike.wav","is GODLIKE","!!!";
  513. else if ( @PlayersKilledStreak >= .holyshit && ( (@PlayersKilledStreak - .holyshit) % .continue == 0 ) )
  514. setarray .@streakname$,"holyshit.wav","is BEYOND GODLIKE",". Someone KILL "+( (sex)?"HIM":"HER" ) +"!!!!!!";
  515. if ( .@streakname$[1] != "" ) {
  516. announce strcharinfo(0) +" "+ .@streakname$[1] +"["+ @PlayersKilledStreak +"] "+( (.announcemap)?("at "+ .@map$):"") + .@streakname$[2],16|.announce;
  517. if ( .sound == 1 ) soundeffectall .@streakname$[0],0,.@map$;
  518. else if ( .sound == 2 ) soundeffectall .@streakname$[0],0;
  519. else if ( .sound == 3 ) soundeffect .@streakname$[0],0;
  520. }
  521. set @dota_multikills, @dota_multikills + 1;
  522. deltimer "DOTAPVP::OnStreakReset";
  523. addtimer 18000,"DOTAPVP::OnStreakReset";
  524. if ( .ownage ) {
  525. set .@sideid, getcharid(.ownage);
  526. if ( .@sideid != .@killedgroup ) setd ".dotaown_"+ .@sideid, getd(".dotaown_"+ .@sideid ) + 1;
  527. }
  528. set .@dota_multikills, @dota_multikills;
  529. set .@origin, getcharid(3);
  530. sleep 1500;
  531. if ( .@sideid && .ownage && .@sideid != .@killedgroup && getd(".dotaown_"+ .@sideid) >= .owned && ( ( getd(".dotaown_"+ .@sideid) - .owned ) % .owncontinue == 0 ) ) {
  532. if ( .announce ) mapannounce .@map$, "The "+( (.ownage == 1)?"party":"guild" )+" ["+( (.ownage == 1)?getpartyname(.@sideid):getguildname(.@sideid) )+"] is OWNING["+ getd(".dotaown_"+ .@sideid) +"] !!!",16;
  533. else announce "The "+( (.ownage == 1)?"party":"guild" )+" ["+( (.ownage == 1)?getpartyname(.@sideid):getguildname(.@sideid) )+"] is OWNING["+ getd(".dotaown_"+ .@sideid) +"] !!!",16;
  534. if ( .sound == 1 ) soundeffectall "ownage.wav",0,.@map$;
  535. else if ( .sound == 2 ) soundeffectall "ownage.wav",0;
  536. else if ( .sound == 3 && attachrid(.@origin) ) soundeffect "ownage.wav",0;
  537. }
  538. sleep 1250;
  539. if ( !attachrid(.@origin) ) end;
  540. if ( .@dota_multikills == 2 ) {
  541. if ( .announce ) mapannounce .@map$, strcharinfo(0) +" just got a Double Kill !",16;
  542. else announce strcharinfo(0) +" just got a Double Kill !",16;
  543. if ( .sound == 1 ) soundeffectall "doublekill.wav",0,.@map$;
  544. else if ( .sound == 2 ) soundeffectall "doublekill.wav",0;
  545. else if ( .sound == 3 ) soundeffect "doublekill.wav",0;
  546. }
  547. else if ( .@dota_multikills == 3 ) {
  548. if ( .announce ) mapannounce .@map$, strcharinfo(0) +" just got a Triple Kill !!!",16;
  549. else announce strcharinfo(0) +" just got a Triple Kill !!!",16;
  550. if ( .sound == 1 ) soundeffectall "triplekill.wav",0,.@map$;
  551. else if ( .sound == 2 ) soundeffectall "triplekill.wav",0;
  552. else if ( .sound == 3 ) soundeffect "triplekill.wav",0;
  553. }
  554. else if ( .@dota_multikills == 4 ) {
  555. if ( .announce ) mapannounce .@map$, strcharinfo(0) +" just got a Ultra Kill !!!",16;
  556. else announce strcharinfo(0) +" just got a Ultra Kill !!!",16;
  557. if ( .sound == 1 ) soundeffectall "ultrakill.wav",0,.@map$;
  558. else if ( .sound == 2 ) soundeffectall "ultrakill.wav",0;
  559. else if ( .sound == 3 ) soundeffect "ultrakill.wav",0;
  560. }
  561. else if ( .@dota_multikills >= 5 ) {
  562. if ( .announce ) mapannounce .@map$, strcharinfo(0) +" is on a Rampage !!!",16;
  563. else announce strcharinfo(0) +" is on a Rampage !!!",16;
  564. if ( .sound == 1 ) soundeffectall "rampage.wav",0,.@map$;
  565. else if ( .sound == 2 ) soundeffectall "rampage.wav",0;
  566. else if ( .sound == 3 ) soundeffect "rampage.wav",0;
  567. }
  568. end;
  569. OnWhisperGlobal:
  570. dispbottom "Your current Streak : "+ @PlayersKilledStreak;
  571. dispbottom "Your total Kills : "+ PlayersKilled;
  572. if ( .ownage && getcharid(.ownage) )
  573. dispbottom "Your "+( (.ownage ==1)?"party":"guild" )+" Own : "+ getd(".dotaown_"+ getcharid(.ownage) );
  574. end;
  575. OnStreakReset:
  576. set @dota_multikills, 0;
  577. end;
  578. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement