Advertisement
Emistry

[RO] Fabre Punch Event

Dec 21st, 2016
721
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.92 KB | None | 0 0
  1. // https://rathena.org/board/topic/73323-fabre-punch-event/
  2.  
  3. /*
  4. CREATE TABLE IF NOT EXISTS `e_fabre_punch_rank` (
  5. `cid` INT(11) UNSIGNED NOT NULL DEFAULT '0',
  6. `name` NVARCHAR(30) NOT NULL DEFAULT '',
  7. `point` INT(11) SIGNED NOT NULL DEFAULT '0',
  8. `rank` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
  9. PRIMARY KEY (`cid`)
  10. ) ENGINE=MyISAM;
  11. */
  12.  
  13. prontera,129,204,5 script Fabre Punch Event 4_M_MOC_SOLDIER,{
  14. doevent "fabre_punch_main::OnTalk";
  15. }
  16.  
  17. pvp_n_1-2,100,100,5 script Fabre Punch Ranking 4_M_MOC_SOLDIER,{
  18. doevent "fabre_punch_main::OnViewRank";
  19. }
  20.  
  21. pvp_n_1-2,0,0,0,0 monster 1 Point 1007,60,0,60000,"fabre_punch_main::OnKill_1"
  22. pvp_n_1-2,0,0,0,0 monster 10 Points 1008,30,0,60000,"fabre_punch_main::OnKill_2"
  23. pvp_n_1-2,0,0,0,0 monster -20 Points 1002,50,0,300000,"fabre_punch_main::OnKill_3"
  24.  
  25. - script fabre_punch_main -1,{
  26.  
  27. OnInit:
  28. .map$ = "pvp_n_1-2";
  29.  
  30. .npc_name$ = strnpcinfo(3);
  31. setmapflag .map$, mf_noskill;
  32. setmapflag .map$, mf_nodrop;
  33. setmapflag .map$, mf_nomobloot;
  34. setmapflag .map$, mf_nomvploot;
  35. setmapflag .map$, mf_nosave;
  36. setmapflag .map$, mf_noteleport;
  37. setmapflag .map$, mf_nowarpto;
  38. setmapflag .map$, mf_nobranch;
  39.  
  40. mapwarp .map$, "prontera",155,181;
  41. end;
  42.  
  43. OnViewRank:
  44. switch ( select(
  45. "My Current Score",
  46. "Top List Puncher",
  47. "Nevermind"
  48. )) {
  49. case 1:
  50. query_sql( "SELECT `point` FROM `e_fabre_punch_rank` WHERE `cid` = "+getcharid(0)+" LIMIT 1",.@current_score );
  51. mes "My Current Score: " + .@current_score;
  52. break;
  53. case 2:
  54. query_sql( "SELECT `name`,`point` FROM `e_fabre_punch_rank` ORDER BY `point` DESC LIMIT 10",.@name$,.@point );
  55. .@size = getarraysize( .@name$ );
  56. mes "Ranking";
  57. for ( .@i = 0; .@i < .@size; .@i++ ) {
  58. mes .@name$[.@i] +" - "+.@point[.@i]+" Point";
  59. }
  60. break;
  61. default:
  62. break;
  63. }
  64. close;
  65.  
  66. OnTalk:
  67. .@cid = getcharid(0);
  68. .@is_gm = ( getgmlevel() > 0 );
  69.  
  70. switch ( select(
  71. "Join Event",
  72. "Get Reward",
  73. ( .@is_gm && !.status ) ? "[GM] Start Event" : "",
  74. ( .@is_gm && .status == 1 ) ? "[GM] Stop Event" : "",
  75. "Nevermind"
  76. )) {
  77. case 1:
  78. getinventorylist;
  79. if ( @inventorylist_count > 0 ) {
  80. mes "Please remove all your inventory items.";
  81. }
  82. else if ( checkcart() ) {
  83. mes "Please remove your cart as well.";
  84. }
  85. else {
  86. switch ( .status ) {
  87. case 1:
  88. warp .map$,0,0;
  89. break;
  90. case 2:
  91. mes "Too late, event started.";
  92. break;
  93. case 3:
  94. mes "Event ending, try again next time.";
  95. break;
  96. default:
  97. mes "Event isn't running, try again next time.";
  98. break;
  99. }
  100. }
  101. break;
  102. case 2:
  103. query_sql( "SELECT `rank` FROM `e_fabre_punch_rank` WHERE `cid` = "+.@cid+" LIMIT 1",.@rank );
  104. switch ( .@rank ) {
  105. case 1: // top 1
  106. query_sql( "UPDATE `e_fabre_punch_rank` SET `rank` = 0 WHERE `cid` = "+.@cid+" LIMIT 1" );
  107. // rewards
  108. getitem 512,1;
  109. getitem 512,2;
  110. getitem 512,3;
  111. mes "You gained rewards";
  112. break;
  113. case 2: // top 2
  114. query_sql( "UPDATE `e_fabre_punch_rank` SET `rank` = 0 WHERE `cid` = "+.@cid+" LIMIT 1" );
  115. // rewards
  116. getitem 512,1;
  117. getitem 512,2;
  118. getitem 512,3;
  119. mes "You gained rewards";
  120. break;
  121. case 3: // top 3
  122. query_sql( "UPDATE `e_fabre_punch_rank` SET `rank` = 0 WHERE `cid` = "+.@cid+" LIMIT 1" );
  123. // rewards
  124. getitem 512,1;
  125. getitem 512,2;
  126. getitem 512,3;
  127. mes "You gained rewards";
  128. break;
  129. default:
  130. mes "No reward.";
  131. break;
  132. }
  133. break;
  134. case 3:
  135. mes "Event will be starting soon.";
  136. close2;
  137. donpcevent .npc_name$+"::OnStart";
  138. end;
  139. case 4:
  140. mes "Event will be ended soon.";
  141. close2;
  142. donpcevent .npc_name$+"::OnEnd";
  143. end;
  144. default:
  145. break;
  146. }
  147. close;
  148.  
  149. OnMinute30:
  150. OnStart:
  151. if ( !.status ) {
  152. .status = 1;
  153. query_sql( "TRUNCATE `e_fabre_punch_rank`" );
  154. for ( .@i = 1; .@i > 0 && .status == 1; .@i-- ) {
  155. announce "<Fabre Punch Event> Start in "+.@i+" minute(s).",bc_all;
  156. sleep 6000;
  157. }
  158. announce "<Fabre Punch Event> Started.",bc_all;
  159.  
  160. for ( .@i = 5; .@i > 0 && .status == 1; .@i-- ) {
  161. mapannounce .map$,"<Fabre Punch Event> Start in "+.@i+" second(s).",bc_all;
  162. sleep 1000;
  163. }
  164.  
  165. if ( .status == 1 ) {
  166. .status = 2;
  167. for ( .@i = 15; .@i > 0; .@i -= 5 ) {
  168. mapannounce .map$,"<Fabre Punch Event> Time Left "+.@i+" Minute(s).",bc_all;
  169. sleep ( 5 * 6000 );
  170. }
  171. query_sql( "SELECT `cid`,`name`,`point` FROM `e_fabre_punch_rank` WHERE `point` > 0 ORDER BY `point` DESC LIMIT 3",.@cid,.@name$,.@point );
  172. .@size = getarraysize( .@cid );
  173. for ( .@i = 0; .@i < .@size; .@i++ ) {
  174. query_sql( "UPDATE `e_fabre_punch_rank` SET `rank` = "+( .@i + 1 )+" WHERE `cid` = "+.@cid[.@i]+" LIMIT 1" );
  175. mapannounce .map$,"<Fabre Punch Event> Winner "+( .@i + 1 )+" - '"+.@name$[.@i]+"' with "+.@point[.@i]+" Points.",bc_all;
  176. }
  177.  
  178. mapannounce .map$,"<Fabre Punch Event> Ended. Total "+.@size+" winners.",bc_all;
  179. .status = 0;
  180.  
  181. sleep 5000;
  182. mapwarp .map$, "prontera",155,181;
  183. }
  184. }
  185. end;
  186.  
  187. OnEnd:
  188. if ( .status == 2 )
  189. awake .npc_name$;
  190. end;
  191.  
  192. OnKill_1:
  193. callsub( L_Point,1 ); // Fabre = 1 Point
  194. end;
  195.  
  196. OnKill_2:
  197. callsub( L_Point,10 ); // Pupa = 10 Point
  198. end;
  199.  
  200. OnKill_3:
  201. callsub( L_Point,-20 ); // Poring = -20 Point
  202. end;
  203.  
  204. L_Point:
  205. if ( .status == 2 ) {
  206. .@value = getarg( 0,0 );
  207.  
  208. query_sql( "INSERT INTO `e_fabre_punch_rank` (`cid`, `name`, `point`) VALUES ( "+getcharid(0)+", '"+escape_sql( strcharinfo(0) )+"', "+.@value+" ) ON DUPLICATE KEY UPDATE `point` = `point` + "+.@value );
  209. dispbottom "<Fabre Punch Event> Gained " + .@value + " Point.";
  210. }
  211. else if ( .status == 0 ) {
  212. dispbottom "Event not yet start, please wait.";
  213. }
  214. return;
  215. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement