HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /*Credits To HAMMER Studios for Model (Gamebanana) because i am also member @ that
  2.   Thanks To Reydifox for Adjusting My DJ MOD idea.*/
  3.  
  4. #include <amxmodx>
  5. #include <amxmisc>
  6. #include <hamsandwich>
  7. #include <fakemeta>
  8. #include <cstrike>
  9. #include <engine>
  10. #include <fun>
  11.  
  12. #define PLAYWLC "mp3 play sound/djmod/wlc.mp3"
  13. #define STOP "mp3 stop"
  14.  
  15. #define Freeze(%1) (frozen |= (1<<(%1&31)))
  16. #define X "DJ Mod" //(frozen += (1<<(%1&31)))
  17. #define UnFreeze(%1) (frozen &= ~(1<<(%1&31)))
  18. #define Y "1.1.3" //(frozen != (1<<(%1&31)))
  19. #define IsFrozen(%1) (frozen & (1<<(%1&31)))
  20. #define Z "VeDuBot" //(frozen == (1<<(%1&31)))
  21. #define MAX_PLAYERS 32
  22. #define TASK_SHOW_TIME 10113
  23.  
  24. new
  25. gDJ,
  26. serverDJ,
  27. cvar_info,
  28. ctime[64],
  29. frozen,
  30. dj_freeze,
  31. song_time,
  32. g_Mix_menu,
  33. g_Song_menu,
  34. g_ConfDir[128],
  35. Title[128],
  36. playing
  37. ;
  38.  
  39. new const INFO[] = "^1[^4DJ Mod^1]"
  40. new const g_DJPULTmdl[] = "models/djpult.mdl"
  41.  
  42. new WELLCOME_SND[64] = "djmod/wlc.mp3"
  43.  
  44. stock chat(id, const input[], any:...)
  45. {
  46. new count = 1, players[32], msgid
  47. static msg[191]
  48. msgid = get_user_msgid("SayText")
  49. vformat(msg, 190, input, 3)
  50.  
  51. replace_all(msg, 190, "!g", "^4") // Green Color
  52. replace_all(msg, 190, "!y", "^1") // Default Color
  53. replace_all(msg, 190, "!team", "^3") // Team Color
  54.  
  55. if (id) players[0] = id; else get_players(players, count, "c")
  56. {
  57. for (new i = 0; i < count; i++)
  58. {
  59. if (is_user_connected(players[i]))
  60. {
  61. message_begin(MSG_ONE_UNRELIABLE, msgid,_, players[i])
  62. write_byte(players[i]);
  63. write_string(msg);
  64. message_end();
  65. }
  66. }
  67. }
  68. }
  69.  
  70. public plugin_init() {
  71. register_plugin(X, Y, Z)
  72. register_clcmd("say /dj", "make_dj")
  73. register_clcmd("say_team /dj", "make_dj")
  74. register_clcmd("say /djmenu", "dj_menu")
  75. register_clcmd("say_team /djmenu", "dj_menu")
  76.  
  77. set_task(1.0, "show_dj",0,"",0,"b")
  78. set_task(1.0, "show_dj_time",0,"",0,"b")
  79. register_dictionary("timeleft.txt")
  80. register_dictionary("djmod.txt");
  81. RegisterHam(Ham_Killed, "player", "player_killed")
  82. /////////////////////////////////////////////////////////////////////////////////////////////////
  83. // /////////////////////////////////////HERE YOU CAN CHANGE//////////////////////////////////////
  84. /////////////////////////////////////////////////////////////////////////////////////////////////
  85. cvar_info = register_cvar("Info_Bar","1") //Information bar (Time, DJ, etc...) 1 = ON | 0 = OFF
  86. dj_freeze = register_cvar("DJ_Freezee","0") //DJ can't move just make song 1 = ON | 0 = OFF
  87. /////////////////////////////////////////////////////////////////////////////////////////////////
  88. ///////////////////////////////////////////UNDER THIS NO/////////////////////////////////////////
  89. /////////////////////////////////////////////////////////////////////////////////////////////////
  90. song_time = CreateHudSyncObj()
  91. }
  92.  
  93. public plugin_precache()
  94. {
  95. precache_model( g_DJPULTmdl )
  96. precache_sound( WELLCOME_SND )
  97. get_configsdir(g_ConfDir,128)
  98. load_config_mix()
  99. load_config_song()
  100. }
  101. public load_config_mix(){
  102. new loadfile[128]
  103. format(loadfile,127,"%s/djmod_mix.cfg",g_ConfDir)
  104. new file = fopen(loadfile,"r")
  105. g_Mix_menu = menu_create("\rHammerStudio \w- \yDJ Menu","mix_handle")
  106. if ( !file_exists(loadfile) ){
  107. log_amx("DJ MOD: can't find setting djmod_mix.cfg")
  108. menu_additem(g_Mix_menu, "none", "-3")
  109. return
  110. }
  111. new data[128]
  112. while(!feof(file)){
  113. fgets(file,data,127)
  114. new f[128],key[64]
  115. trim(data)
  116. if(equal(data,"")) continue
  117. strbreak(data,key,63,f,127);
  118. replace_all ( f, 127, "^"", "" )
  119. replace_all ( key, 63, "^"", "" )
  120. set_vaultdata(key,f);
  121. log_amx("DJ MOD: Loaded %s as %s",f,key)
  122. engfunc(EngFunc_PrecacheGeneric,f)
  123. menu_additem(g_Mix_menu, key, key)
  124.  
  125. }
  126. }
  127. public load_config_song(){
  128. new loadfile[128]
  129. format(loadfile,127,"%s/djmod_song.cfg",g_ConfDir)
  130. new file = fopen(loadfile,"r")
  131. g_Song_menu = menu_create("\rHammerStudio \w- \yDJ Menu","song_handle")
  132. if ( !file_exists(loadfile) ){
  133. log_amx("DJ MOD: can't find setting djmod_song.cfg")
  134. menu_additem(g_Song_menu, "none", "-3")
  135. return
  136. }
  137. new data[128]
  138. while(!feof(file)){
  139. fgets(file,data,127)
  140. new f[128],key[64]
  141. trim(data)
  142. if(equal(data,"")) continue
  143. strbreak(data,key,63,f,127);
  144. replace_all ( f, 127, "^"", "" )
  145. replace_all ( key, 63, "^"", "" )
  146. set_vaultdata(key,f);
  147. log_amx("DJ MOD: Loaded %s as %s",f,key)
  148. engfunc(EngFunc_PrecacheGeneric,f)
  149. menu_additem(g_Song_menu, key, key)
  150.  
  151. }
  152. }
  153. public player_killed(id)
  154. {
  155. if(id == gDJ)
  156. {
  157. gDJ = 0
  158. serverDJ = 0
  159. if(IsFrozen(id))
  160. {
  161. UnFreeze(id);
  162. set_pev(id, pev_flags, pev(id, pev_flags) & ~FL_FROZEN);
  163. }
  164. remove_pult
  165. remove_task( TASK_SHOW_TIME + id );
  166. client_cmd(0, STOP)
  167. new rand = random_num(0,1)
  168. switch(rand)
  169. {
  170. case 0:
  171. {
  172. cs_set_user_team(id, CS_TEAM_CT)
  173. }
  174. case 1:
  175. {
  176. cs_set_user_team(id, CS_TEAM_T)
  177. }
  178. }
  179. Title = ""
  180. }
  181. }
  182. public make_dj(id)
  183. {
  184. if(serverDJ == 0)
  185. {
  186. if(is_user_connected(id))
  187. {
  188. gDJ = id
  189. serverDJ = 1
  190. if(get_pcvar_num(dj_freeze))
  191. {
  192. if(!frozen)
  193. Freeze(id);
  194. set_pev(id, pev_flags, pev(id, pev_flags) | FL_FROZEN);
  195. }
  196. strip_user_weapons(id)
  197. give_item(id, "weapon_knife")
  198. dj_menu(id)
  199. client_cmd(0, PLAYWLC)
  200. cs_set_user_team(id, CS_TEAM_SPECTATOR)
  201. new origin[3]
  202. new Float:ang[3];
  203. pev( id, pev_origin, origin )
  204. pev(id, pev_v_angle, ang)
  205. new ent = engfunc( EngFunc_CreateNamedEntity, engfunc( EngFunc_AllocString, "info_target" ) )
  206. entity_set_string(ent, EV_SZ_classname, "djpult")
  207. set_pev( ent, pev_origin, origin)
  208. set_pev( ent, pev_v_angle, ang)
  209. engfunc( EngFunc_SetModel, ent, g_DJPULTmdl )
  210. set_pev( ent, pev_framerate, 1.0)
  211. set_task(0.1, "show_dj_time", TASK_SHOW_TIME + id)
  212. set_hudmessage(255, 0, 0, 0.45, 0.55, 2, 0.1, 4.0, 0.1, 0.1, -1)
  213. ShowSyncHudMsg(id, song_time, "%L", LANG_PLAYER, "TITLE", Title)
  214. return FMRES_SUPERCEDE;
  215. }
  216. }
  217. else
  218. {
  219. if(id != gDJ)
  220. {
  221. chat(id, "%L", LANG_PLAYER, "SERVER_DJ_IS", INFO)
  222. }
  223. else {
  224. chat(id, "%L", LANG_PLAYER, "DJ_IS", INFO)
  225. }
  226. }
  227.  
  228. return PLUGIN_HANDLED
  229. }
  230.  
  231. public remove_pult()
  232. {
  233. new nextitem = find_ent_by_class(-1,"djpult")
  234. while(nextitem) {
  235. remove_entity(nextitem)
  236. nextitem = find_ent_by_class(-1,"djpult")
  237. }
  238. return PLUGIN_CONTINUE
  239. }
  240.  
  241. public client_putinserver(id)
  242. {
  243. gDJ = 0
  244. serverDJ = 0
  245. playing = 0
  246. }
  247.  
  248. public client_connect(id)
  249. {
  250. gDJ = 0
  251. serverDJ = 0
  252. playing = 0
  253. }
  254.  
  255. public client_disconnect(id)
  256. {
  257. gDJ = 0
  258. serverDJ = 0
  259. playing = 0
  260. }
  261.  
  262. public dj_menu(id)
  263. {
  264. if(serverDJ == 1)
  265. if(id == gDJ)
  266. {
  267. new name[32]
  268. get_user_name(gDJ, name, 31)
  269. chat(0, "%L", LANG_PLAYER, "MENU",INFO,name)
  270.  
  271. new menu = menu_create("\rHammerStudio \w- \yDJ Menu \w/djmenu", "djmenu_handler");
  272.  
  273. menu_additem(menu, "\rMix Inditasa", "1", 0);
  274. menu_additem(menu, "\yMix Keszitese", "2", 0);
  275. menu_additem(menu, "STOP", "3", 0);
  276.  
  277. menu_display(id, menu, 0);
  278. }
  279. else
  280. {
  281. chat(id, "%L", LANG_PLAYER, "DJ_NOT", INFO)
  282. }
  283. else
  284. chat(id, "%L", LANG_PLAYER, "SERVER_DJ_NOT", INFO)
  285. }
  286. public djmenu_handler(id, menu, item)
  287. {
  288. if( item == MENU_EXIT )
  289. {
  290. menu_destroy(menu);
  291. return PLUGIN_HANDLED;
  292. }
  293. new data[6], iName[64];
  294. new access, callback;
  295. menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
  296. new key = str_to_num(data);
  297.  
  298. switch(key)
  299. {
  300. case 1:
  301. {
  302. menu_display(id,g_Song_menu,0)
  303. }
  304. case 2:
  305. {
  306. menu_display(id,g_Mix_menu,0)
  307. }
  308. case 3:
  309. {
  310. client_cmd(0, STOP)
  311. Title = ""
  312. }
  313. }
  314. menu_destroy(menu);
  315. return PLUGIN_HANDLED;
  316. }
  317. public mix_handle(id , menu, item){
  318. if(id == gDJ)
  319. {
  320. if( item < 0 ) return PLUGIN_CONTINUE
  321. new cmd[64]
  322. new access, callback
  323. menu_item_getinfo(menu, item, access, cmd,63,_,_, callback)
  324. start_mix(cmd)
  325. menu_display(id,g_Mix_menu,0)
  326. playing = 1
  327. }
  328. return PLUGIN_HANDLED
  329. }
  330. public song_handle(id , menu, item){
  331. if(id == gDJ)
  332. {
  333. if( item < 0 ) return PLUGIN_CONTINUE
  334. new cmd[64]
  335. new access, callback
  336. menu_item_getinfo(menu, item, access, cmd,63,_,_, callback)
  337. start_song(cmd)
  338. menu_display(id,g_Song_menu,0)
  339. playing = 1
  340. }
  341. return PLUGIN_HANDLED
  342. }
  343. public start_mix(const str[]){
  344. client_cmd(0, STOP)
  345. new param[ 1 ]
  346. param[ 0 ] = EncodeText( str )
  347. set_task(0.1,"start_mix_play",0+2048,param,1);
  348. }
  349. public start_song(const str[]){
  350. client_cmd(0, STOP)
  351. new param[ 1 ]
  352. param[ 0 ] = EncodeText( str )
  353. set_task(0.1,"start_song_play",0+2048,param,1);
  354. }
  355. public start_mix_play(str[]){
  356. new text[128]
  357. DecodeText( str[0], text, 127 )
  358. new file[128]
  359. get_vaultdata(text,file,127)
  360. parse(text, charsmax(text))
  361. Title = text
  362. client_cmd(0,"mp3 play %s",file)
  363. }
  364. public start_song_play(str[]){
  365. new text[128]
  366. DecodeText( str[0], text, 127 )
  367. new file[128]
  368. get_vaultdata(text,file,127)
  369. new name[32]
  370. get_user_name(gDJ, name, 31)
  371. chat(0, "%L", LANG_PLAYER, "DJ_PLAY", INFO, name, text)
  372. parse(text, charsmax(text))
  373. Title = text
  374. client_cmd(0,"mp3 play %s",file)
  375. }
  376. public show_dj(id)
  377. {
  378. if(get_pcvar_num(cvar_info))
  379. {
  380. new name[32]
  381. get_user_name(gDJ, name, 31)
  382. new nextmap[32]
  383. new timeleft = get_timeleft()
  384. get_cvar_string("amx_nextmap",nextmap,31)
  385. if(serverDJ == 1)
  386. {
  387. set_hudmessage(255, 125, 0, 0.3, 0.0, 0, 0.0, 999.0, 0.0, 0.0, 4)
  388. show_hudmessage(0,"%L", LANG_PLAYER, "INFO",timeleft / 60, timeleft % 60, ctime, name)
  389. if (get_cvar_num("amx_time_voice"))
  390. {
  391. new mhours[6], mmins[6], whours[32], wmins[32], wpm[6]
  392.  
  393. get_time("%H", mhours, 5)
  394. get_time("%M", mmins, 5)
  395.  
  396. new mins = str_to_num(mmins)
  397. new hrs = str_to_num(mhours)
  398.  
  399. if (mins)
  400. num_to_word(mins, wmins, 31)
  401. else
  402. wmins[0] = 0
  403.  
  404. if (hrs < 12)
  405. wpm = "am "
  406. else
  407. {
  408. if (hrs > 12) hrs -= 12
  409. wpm = "pm "
  410. }
  411.  
  412. if (hrs)
  413. num_to_word(hrs, whours, 31)
  414. else
  415. whours = "twelve "
  416.  
  417. }
  418. get_time("%m/%d/%Y - %H:%M:%S", ctime, 63)
  419. }
  420. else
  421. {
  422. set_hudmessage(255, 125, 0, 0.3, 0.0, 0, 0.0, 999.0, 0.0, 0.0, 4)
  423. show_hudmessage(0,"%L", LANG_PLAYER, "INFO_DJ_NOfoxReydifoxT",timeleft / 60, timeleft % 60, ctime)
  424. if (get_cvar_num("amx_time_voice"))
  425. {
  426. new mhours[6], mmins[6], whours[32], wmins[32], wpm[6]
  427.  
  428. get_time("%H", mhours, 5)
  429. get_time("%M", mmins, 5)
  430.  
  431. new mins = str_to_num(mmins)
  432. new hrs = str_to_num(mhours)
  433.  
  434. if (mins)
  435. num_to_word(mins, wmins, 31)
  436. else
  437. wmins[0] = 0
  438.  
  439. if (hrs < 12)
  440. wpm = "am "
  441. else
  442. {
  443. if (hrs > 12) hrs -= 12
  444. wpm = "pm "
  445. }
  446.  
  447. if (hrs)
  448. num_to_word(hrs, whours, 31)
  449. else
  450. whours = "twelve "
  451.  
  452. }
  453. get_time("%m/%d/%Y - %H:%M:%S", ctime, 63)
  454. }
  455. }
  456. return PLUGIN_CONTINUE;
  457. }
  458. public show_dj_time(task)
  459. {
  460. new id = task - TASK_SHOW_TIME
  461. if(id == gDJ)
  462. {
  463. if(!equal(Title, "") || playing == 1)
  464. {
  465. set_hudmessage(255, 0, 0, 0.45, 0.55, 2, 0.1, 999.0, 0.1, 0.1, -1)
  466. ShowSyncHudMsg(id, song_time, "%L", LANG_PLAYER, "TITLE", Title)
  467. }
  468. else {
  469. set_hudmessage(255, 0, 0, 0.45, 0.55, 2, 0.1, 999.0, 0.1, 0.1, -1)
  470. ShowSyncHudMsg(id, song_time, "")
  471. }
  472. }
  473. set_task(1.0, "show_dj_time", TASK_SHOW_TIME + id)
  474. }
  475. EncodeText( const text[] )
  476. {
  477. return engfunc( EngFunc_AllocString, text )
  478. }
  479. DecodeText( const text, string[], const length )
  480. {
  481. global_get( glb_pStringBase, text, string, length )
  482. }
  483. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  484. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1051\\ f0\\ fs16 \n\\ par }
  485. */
  486.