HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /*
  2. Visit: www.das-irren-haus.com for more information
  3. */
  4.  
  5. #include <amxmodx>
  6. #include <amxmisc>
  7. #include <engine>
  8. #include <fakemeta>
  9. #include <vault>
  10.  
  11.  
  12. #define PLUGIN "Karaoke Mod"
  13. #define VERSION "0.3"
  14. #define AUTHOR "TeddyDesTodes"
  15.  
  16. #define MENU_EXIT -3
  17. #define MENU_BACK -2
  18. #define MENU_MORE -1
  19.  
  20. new g_ConfDir[128]
  21. new g_sync_lrcdisplay
  22. new g_sync_lrcdisplay2
  23. new g_Lyr_lenght
  24. new g_Lyr_menu
  25. new g_Song_menu
  26. new g_Nom_menu
  27. new g_Vote_menu
  28. new g_Votes[2] = 0
  29. new g_Nom_Song[64]
  30. new g_Block_Spam[33] = 0
  31. new g_karaoke_running = 0
  32.  
  33. public plugin_precache(){
  34. get_configsdir(g_ConfDir,128)
  35. load_config()
  36. }
  37.  
  38. public plugin_init() {
  39. register_plugin(PLUGIN, VERSION, AUTHOR)
  40. register_cvar("karaoke_version", VERSION, FCVAR_SERVER);
  41. register_clcmd("say /karaokemenu","view_menu",ADMIN_RESERVATION);
  42. register_clcmd("say /silence","mp3_stop");
  43. register_clcmd("say /nominate","nom_menu");
  44. register_clcmd("amx_karaoke","view_menu",ADMIN_RESERVATION,"opens the karaoke menu");
  45. register_cvar("kar_enable", "0")
  46. g_sync_lrcdisplay = CreateHudSyncObj()
  47. g_sync_lrcdisplay2 = CreateHudSyncObj()
  48. g_Lyr_menu = menu_create("Karaoke Menu","kar_handle")
  49. menu_additem(g_Lyr_menu, "start Karaoke", "0")
  50. menu_additem(g_Lyr_menu, "stop Karaoke", "1")
  51. menu_additem(g_Lyr_menu, "Karaoke engedelyeseze(precache)", "2")
  52. menu_additem(g_Lyr_menu, "Karaoke letiltasa(precache)", "3")
  53. }
  54. //AMXX wiki new menu sys tutorial
  55. public song_handle(id , menu, item){
  56. if( item < 0 ) return PLUGIN_CONTINUE
  57. new cmd[64]
  58. new access, callback
  59. menu_item_getinfo(menu, item, access, cmd,63,_,_, callback)
  60. start_it(cmd)
  61. return PLUGIN_HANDLED
  62. }
  63. public kar_handle(id , menu, item){
  64. if( item < 0 ) return PLUGIN_CONTINUE
  65. new cmd[3]
  66. new access, callback
  67. menu_item_getinfo(menu, item, access, cmd,2,_,_, callback)
  68. new choice = str_to_num(cmd)
  69. if(choice == 0){
  70. menu_display(id,g_Song_menu,0)
  71. }else if(choice == 1){
  72. stop_it()
  73. }else if(choice == 2){
  74. set_cvar_num("kar_enable",1)
  75. }else{
  76. set_cvar_num("kar_enable",0)
  77. }
  78. return PLUGIN_HANDLED
  79. }
  80. public nom_handle(id , menu, item){
  81. if( item < 0 ) return PLUGIN_CONTINUE
  82. if(!equal(g_Nom_Song,"")){
  83. client_print(id,print_chat,"Sajnaljuk, egy masik szavazas meg nem zarult le!");
  84. return PLUGIN_CONTINUE
  85. }
  86. new cmd[64]
  87. new access, callback
  88. menu_item_getinfo(menu, item, access, cmd,63,_,_, callback)
  89. g_Nom_Song = cmd
  90. start_vote(id,cmd)
  91. g_Block_Spam[id] = 1
  92. set_task(30.0,"block_spam",id+1024);
  93. return PLUGIN_HANDLED
  94. }
  95. public vote_handle(id,menu,item){
  96. if( item < 0 ) return PLUGIN_CONTINUE
  97. new cmd[3]
  98. new access, callback
  99. menu_item_getinfo(menu, item, access, cmd,2,_,_, callback)
  100. new choice = str_to_num(cmd)
  101. g_Votes[choice]++
  102. new name[33]
  103. get_user_name(id,name,32);
  104. if(choice == 0){
  105. client_print(0,print_chat,"%s Szavazas:",name)
  106. }else{
  107. client_print(0,print_chat,"%s Szavazas:",name)
  108. }
  109. return PLUGIN_CONTINUE
  110. }
  111. public block_spam(id){
  112. id = id-1024
  113. g_Block_Spam[id] = 0
  114. }
  115. public view_menu(id){
  116. if ((get_user_flags(id) & ADMIN_RCON) || (get_user_flags(id) & ADMIN_LEVEL_A))
  117. {
  118. menu_display(id,g_Lyr_menu,0)
  119. return PLUGIN_HANDLED
  120. }
  121. return PLUGIN_HANDLED
  122.  
  123. }
  124. public nom_menu(id){
  125. if(g_Block_Spam[id] == 1){
  126. client_print(id,print_chat,"Sajnaljuk! Varnod kell egy kicsit amig elindul egy masik zene!");
  127. return PLUGIN_CONTINUE
  128. }
  129. if(get_cvar_num("kar_enable")==0){
  130. client_print(id,print_chat,"Sajnaljuk, a karaoke nincs engedelyezve. Szolj egy adminnak!");
  131. return PLUGIN_CONTINUE
  132. }
  133. if(g_karaoke_running == 1){
  134. client_print(id,print_chat,"Sajnaljuk, most egy masik zene megy!");
  135. return PLUGIN_CONTINUE
  136. }
  137. menu_display(id,g_Nom_menu,0)
  138. return PLUGIN_CONTINUE
  139. }
  140. public start_vote(id,const sng[]){
  141.  
  142. new name[33]
  143. get_user_name(id,name,32);
  144. new head[128]
  145. format(head,127,"%s want to sing %s",name,sng);
  146. g_Vote_menu = menu_create(head,"vote_handle")
  147. menu_additem(g_Vote_menu,"Okay...","0");
  148. menu_additem(g_Vote_menu,"No way!!!!","1");
  149. new num,players[32]
  150. get_players(players,num,"h")
  151. for(new i = 0;i < num;i++){
  152. menu_display(players[i],g_Vote_menu,0);
  153. }
  154. set_task(10.0,"end_vote")
  155. }
  156.  
  157. public end_vote(){
  158. if(g_Votes[0]>g_Votes[1]){
  159. start_it(g_Nom_Song);
  160. client_print(0,print_chat,"A szavazas sikeresen lezarult! [FOR : %d AGAINST: %d]",g_Votes[0],g_Votes[1]);
  161. }else{
  162. client_print(0,print_chat,"Sikertelen szavazas!! [FOR : %d AGAINST: %d]",g_Votes[0],g_Votes[1]);
  163. }
  164. g_Nom_Song = ""
  165. g_Votes[0] = 0
  166. g_Votes[1] = 0
  167. menu_destroy(g_Vote_menu);
  168. }
  169. public load_config(){
  170. new loadfile[128]
  171. format(loadfile,127,"%s/karaoke.cfg",g_ConfDir)
  172. new file = fopen(loadfile,"r")
  173. g_Song_menu = menu_create("Wich song?","song_handle")
  174. g_Nom_menu = menu_create("wich song?","nom_handle")
  175. if ( !file_exists(loadfile) ){
  176. log_amx("Karaoke Plugin: Nem talalhatok beallitasok a karaoke.cfg-ben")
  177. menu_additem(g_Song_menu, "keine Dateien", "-3")
  178. return
  179. }
  180. new data[128]
  181. while(!feof(file)){
  182. fgets(file,data,127)
  183. new f[128],key[64]
  184. trim(data)
  185. if(equal(data,"")) continue
  186. strbreak(data,key,63,f,127);
  187. replace_all ( f, 127, "^"", "" )
  188. replace_all ( key, 63, "^"", "" )
  189. set_vaultdata(key,f);
  190. log_amx("Karaoke Plugin: Loaded %s as %s",f,key)
  191. if(get_cvar_num("kar_enable")==1)
  192. engfunc(EngFunc_PrecacheGeneric,f)
  193. menu_additem(g_Song_menu, key, key)
  194. menu_additem(g_Nom_menu, key, key)
  195.  
  196. }
  197. }
  198. public mp3_stop(id){
  199. client_cmd(id,"mp3 stop");
  200. }
  201. public get_kar_run(){
  202. return g_karaoke_running
  203. }
  204. public announce(id){
  205. id = id -2048
  206. if(g_karaoke_running == 0) return PLUGIN_CONTINUE
  207.  
  208. set_hudmessage(255, 255, 255, -1.0, 0.65, 0, 6.0, 5.0)
  209. if(id == 0){
  210. ShowSyncHudMsg(0, g_sync_lrcdisplay, "OK, nyomjad a szoveget!!!!!!!!")
  211. }else if( id == 1){
  212. ShowSyncHudMsg(0, g_sync_lrcdisplay, "Figyelem a KARAOKE %d masodperc mulva kezdodik!",id)
  213. }else{
  214. ShowSyncHudMsg(0, g_sync_lrcdisplay, "Figyelem a KARAOKE %d masodperc mulva kezdodik!",id)
  215. }
  216. return PLUGIN_CONTINUE
  217. }
  218. public start_karaoke(str[]){
  219. if(g_karaoke_running == 1){
  220. new text[128]
  221. DecodeText( str[0], text, 127 )
  222. new file[128]
  223. load_lyrics(text)
  224. get_vaultdata(text,file,127)
  225. client_cmd(0,"mp3 play %s",file)
  226. }
  227. }
  228. public stop_it(){
  229. g_karaoke_running = 0
  230. client_cmd(0,"mp3 stop")
  231. for(new i = 0; i <g_Lyr_lenght;i++){
  232. remove_task(i)
  233. }
  234. for(new i = 0;i < 17;i++){
  235. remove_task(i+2048)
  236. }
  237. set_hudmessage(255, 255, 255, -1.0, 0.65, 0, 6.0, 5.0)
  238. ShowSyncHudMsg(0, g_sync_lrcdisplay, "Karaoke megszakadt!!!")
  239.  
  240. }
  241. public start_it(const str[]){
  242. stop_it()
  243. g_karaoke_running = 1
  244. new param[ 1 ]
  245. param[ 0 ] = EncodeText( str )
  246. set_task(15.0,"start_karaoke",16+2048,param,1);
  247. set_task(15.0,"announce",0+2048)
  248. set_task(14.0,"announce",1+2048)
  249. set_task(13.0,"announce",2+2048)
  250. set_task(12.0,"announce",3+2048)
  251. set_task(11.0,"announce",4+2048)
  252. set_task(10.0,"announce",5+2048)
  253. set_task(5.0,"announce",10+2048)
  254. announce(15+2048)
  255. set_hudmessage(255, 255, 255, -1.0, 0.6, _, 0.2, 13.0,1.0,1.0)
  256. ShowSyncHudMsg(0, g_sync_lrcdisplay2, "Lied: %s",str)
  257. }
  258.  
  259. public load_lyrics(const lfile[]){
  260. new loadfile[128]
  261. format(loadfile,128,"%s/lyrics/%s.lrc",g_ConfDir,lfile)
  262. log_amx("Karaoke Plugin: Lyrics file %s",loadfile)
  263. new file = fopen(loadfile,"rt")
  264. if ( !file_exists(loadfile) ){
  265. log_amx("Karaoke Plugin: Nem talalhato dalszoveg")
  266. return
  267. }
  268. new data[128]
  269. g_Lyr_lenght = 0
  270. while(!feof(file)){
  271. fgets(file,data,127)
  272. trim(data)
  273. new tme[10], text[128]
  274. if(containi(data,"[") == -1)
  275. continue
  276. if(containi(data,"[]") != -1)
  277. continue
  278. strtok(data,tme,9,text,127,']')
  279. new minu[4], sec[6]
  280. strtok(tme,minu,3,sec,5,':')
  281. new Float:t = str_to_float(sec)
  282. new dummy[2]
  283. strtok(minu,dummy,1,minu,3,'[')
  284. new Float:m = str_to_float(minu)
  285. m = m * 60
  286. t = t+m
  287. trim(text)
  288. //server_cmd("say time = %f",t);
  289. new param[ 2 ]
  290. param[ 0 ] = EncodeText( text )
  291. param[ 1 ] = g_Lyr_lenght
  292. set_task(t,"show_Lyric",g_Lyr_lenght,param, 2)
  293. g_Lyr_lenght++
  294.  
  295. }
  296. }
  297. public show_Lyric(const param[ 2 ]){
  298.  
  299. new text[128]
  300. DecodeText( param[0], text, 127 )
  301. if(param[1]%2 == 0){
  302. set_hudmessage(255, 255, 255, -1.0, 0.65, _, 0.2, 5.0,1.0,1.0)
  303. ShowSyncHudMsg(0, g_sync_lrcdisplay, "%s",text)
  304. }else{
  305. set_hudmessage(255, 255, 255, -1.0, 0.6, _, 0.2, 5.0,1.0,1.0)
  306. ShowSyncHudMsg(0, g_sync_lrcdisplay2, "%s",text)
  307. }
  308. if(param[1] == g_Lyr_lenght-1)
  309. g_karaoke_running = 0
  310. }
  311. //http://forums.alliedmods.net/showpost.php?p=538299&postcount=14
  312. EncodeText( const text[] )
  313. {
  314. return engfunc( EngFunc_AllocString, text )
  315. }
  316.  
  317. DecodeText( const text, string[], const length )
  318. {
  319. global_get( glb_pStringBase, text, string, length )
  320. }
  321.