Advertisement
Emistry

[RO] Fabre Punch Event - SQL - Point Rate

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