hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.05.12. 07:23



Jelenlévő felhasználók

Jelenleg 573 felhasználó van jelen :: 0 regisztrált, 0 rejtett és 573 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: nincs regisztrált felhasználó az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 1 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: multimod
HozzászólásElküldve: 2014.12.14. 19:18 
Offline
Jómunkásember

Csatlakozott: 2014.10.30. 10:18
Hozzászólások: 468
Megköszönt másnak: 235 alkalommal
Megköszönték neki: 34 alkalommal
Sziasztok!

Lenne pár kérdésem egy pluginnal kapcsolatban!


Pár infó hozzá:
- az angol fórumon találtam
- galileot használok a pályaszavazáshoz
- kiindulo mod pedig a Gungame lenne

Ez lenne az :
SMX Forráskód: [ Mindet kijelol ]
  1. #include <amxmodx>
  2. #include <amxmisc>
  3.  
  4. #define AMX_MULTIMOD "amx_multimod"
  5. #define AMX_PLUGINS "amxx_plugins"
  6. #define AMX_MAPCYCLE "mapcyclefile"
  7. #define AMX_LASTCYCLE "lastmapcycle"
  8.  
  9. #define AMX_DEFAULTCYCLE "mapcycle.txt"
  10. #define AMX_DEFAULTPLUGINS "addons/amxmodx/configs/plugins.ini"
  11. #define AMX_BASECONFDIR "multimod"
  12.  
  13. #define TASK_VOTEMOD 2487002
  14. #define TASK_CHVOMOD 2487004
  15. #define MAXMODS 100
  16. #define LSTRING 193
  17. #define SSTRING 33
  18.  
  19. #define VM_FLAG ADMIN_MAP // votemod flag
  20. #define NMM_FLAG ADMIN_MAP // nextmod menu flag
  21. #define CM_FLAG ADMIN_MAP // cancel mod flag
  22. #define BMM_FLAG ADMIN_MAP // block mods menu flag
  23.  
  24. #define COLOR BLUE
  25.  
  26. new sPrefix[]= "[AMXX]"; // Prefix for messages
  27. new sMenuPrefix[]= "JoRoPiTo"; // Menu Prefix
  28.  
  29. new bool:g_rockedVote[33], g_rockedVoteCnt;
  30. new bool:g_hasbeenrocked = false;
  31. new bool:nextmodchosed = false;
  32. new bool:modnexted = false;
  33.  
  34. new g_votemodcount[MAXMODS];
  35. new g_modnames[MAXMODS][SSTRING];
  36. new g_filemaps[MAXMODS][LSTRING];
  37. new g_fileplugins[MAXMODS][LSTRING];
  38.  
  39. new g_fileconf[LSTRING];
  40. new g_modcount = -1;
  41. new g_nextmodid;
  42. new g_currentmodid;
  43. new g_multimod[SSTRING];
  44. new g_nextmap[SSTRING];
  45. new g_currentmod[SSTRING];
  46. new g_confdir[LSTRING];
  47.  
  48. new cvar_rtv_ratio;
  49. new g_blockedmod[LSTRING] = -1;
  50.  
  51. new gp_mode;
  52. new gp_mapcyclefile;
  53. new bool:countdownrun = false;
  54.  
  55. // galileo specific cvars
  56. new gp_galileo_nommapfile;
  57. new gp_galileo_votemapfile;
  58.  
  59. // ColorChat
  60. enum Color
  61. {
  62. NORMAL = 1, // clients scr_concolor cvar color
  63. GREEN, // Green Color
  64. TEAM_COLOR, // Red, grey, blue
  65. GREY, // grey
  66. RED, // Red
  67. BLUE, // Blue
  68. }
  69.  
  70. new TeamName[][] =
  71. {
  72. "",
  73. "TERRORIST",
  74. "CT",
  75. "SPECTATOR"
  76. }
  77.  
  78. public plugin_init( )
  79. {
  80. new MenuName[63];
  81.  
  82. register_plugin("MultiMod Manager", "3.0", "JoRoPiTo");
  83. register_cvar("MultiModManager", "3.0", FCVAR_SERVER|FCVAR_SPONLY);
  84.  
  85. gp_mode = register_cvar("amx_multimod_mode", "0"); // 0=auto ; 1=mapchooser ; 2=galileo
  86. register_cvar("amx_mintime", "10");
  87. register_cvar("amx_multimod_voteallowed", "0");
  88. cvar_rtv_ratio = register_cvar("rtv_ratio", "0.51");
  89. register_dictionary( "multimod_ml.txt" );
  90.  
  91. get_configsdir(g_confdir, charsmax(g_confdir));
  92.  
  93. register_clcmd("amx_votemod", "start_vote", VM_FLAG, "Vote for the next mod");
  94. // register_clcmd("amx_nextmodmenu", "setmodmenu", NMM_FLAG, "- Menu for the NextMod");
  95. // register_clcmd("amx_cancelmod", "cancelmod", CM_FLAG, "- cancel the nextmod ( amx_nextmodmenu )");
  96. // register_clcmd("amx_blockmodmenu", "blockmenu", BMM_FLAG, "- Menu to Block Mods");
  97. register_clcmd("say /mm_menu", "mmmenu");
  98. register_clcmd("say /mods", "mods");
  99.  
  100. register_clcmd("say nextmod", "user_nextmod");
  101. register_clcmd("say_team nextmod", "user_nextmod");
  102. register_clcmd("say currentmod", "user_currentmod");
  103. register_clcmd("say_team currentmod", "user_currentmod");
  104.  
  105. register_clcmd("say rtv", "cmdSayRTV");
  106. register_clcmd("say rtvm", "cmdSayRTV");
  107. register_clcmd("say_team rtv", "cmdSayRTV");
  108. register_clcmd("say_team rtvm", "cmdSayRTV");
  109.  
  110. format(MenuName, charsmax(MenuName), "Vote Nextmod");
  111. }
  112.  
  113. public mods( id )
  114. {
  115. ColorChat(id, COLOR, "%L", LANG_PLAYER, "MM_CHECK_CONSOLE", sPrefix);
  116.  
  117. console_print(id, "======= %L =======", LANG_PLAYER, "MM_AVAILABLEMODS");
  118.  
  119. for(new i = 0 ; i <= g_modcount ; i++)
  120. {
  121. if(i == g_currentmodid)
  122. {
  123. console_print(id, "%d.%s %L", i + 1, g_modnames[i], LANG_PLAYER, "MM_CURRENTMOD");
  124. }
  125. else
  126. {
  127. console_print(id, i == g_blockedmod[i] ? "%d.%s %L" : "%d.%s", i + 1, g_modnames[i], LANG_PLAYER, "MM_BLOCKED");
  128. }
  129. }
  130.  
  131. console_print(id, "=========================");
  132. }
  133.  
  134. public client_connect( id )
  135. {
  136. g_rockedVote[id] = false;
  137. }
  138.  
  139. public client_disconnect( id )
  140. {
  141. if(g_rockedVote[id])
  142. {
  143. g_rockedVote[id] = false;
  144. g_rockedVoteCnt--;
  145. }
  146. }
  147.  
  148. public plugin_cfg( )
  149. {
  150. gp_mapcyclefile = get_cvar_pointer(AMX_MAPCYCLE);
  151.  
  152. if(!get_pcvar_num(gp_mode))
  153. {
  154. if(find_plugin_byfile("mapchooser_multimod.amxx") != -1)
  155. set_pcvar_num(gp_mode, 1);
  156. else if(find_plugin_byfile("galileo.amxx") != -1)
  157. set_pcvar_num(gp_mode, 2);
  158. }
  159. get_localinfo(AMX_MULTIMOD, g_multimod, charsmax(g_multimod));
  160. load_cfg();
  161.  
  162. if(!equal(g_currentmod, g_multimod) || (g_multimod[0] == 0))
  163. {
  164. set_multimod(0);
  165. get_firstmap(0);
  166. server_print("%L", LANG_SERVER, "MM_FIRSTRUN");
  167. server_cmd("changelevel %s", g_nextmap);
  168. }
  169. else
  170. {
  171. server_cmd("exec %s", g_fileconf);
  172. }
  173. }
  174.  
  175. public load_cfg( )
  176. {
  177. new szData[LSTRING];
  178. new szFilename[LSTRING];
  179.  
  180. formatex(szFilename, charsmax(szFilename), "%s/%s", AMX_BASECONFDIR, "multimod.ini");
  181.  
  182. new f = fopen(szFilename, "rt");
  183. new szTemp[SSTRING],szModName[SSTRING], szTag[SSTRING], szCfg[SSTRING];
  184. while(!feof(f)) {
  185. fgets(f, szData, charsmax(szData));
  186. trim(szData);
  187. if(!szData[0] || szData[0] == ';' || (szData[0] == '/' && szData[1] == '/')) continue;
  188.  
  189. if(szData[0] == '[') {
  190. g_modcount++;
  191. replace_all(szData, charsmax(szData), "[", "");
  192. replace_all(szData, charsmax(szData), "]", "");
  193.  
  194. strtok(szData, szModName, charsmax(szModName), szTemp, charsmax(szTemp), ':', 0);
  195. strtok(szTemp, szTag, charsmax(szTag), szCfg, charsmax(szCfg), ':', 0);
  196.  
  197. if(equal(szModName, g_multimod)) {
  198. formatex(g_fileconf, 192, "%s/%s", AMX_BASECONFDIR, szCfg);
  199. copy(g_currentmod, charsmax(g_currentmod), szModName);
  200. g_currentmodid = g_modcount;
  201. server_print("%s Selected mod will be: %s (%s:%s)", sPrefix, g_multimod, szTag, szCfg);
  202. }
  203. formatex(g_modnames[g_modcount], 32, "%s", szModName);
  204. formatex(g_filemaps[g_modcount], 192, "%s/%s-maps.ini", AMX_BASECONFDIR, szTag);
  205. formatex(g_fileplugins[g_modcount], 192, "%s/%s-plugins.ini", AMX_BASECONFDIR, szTag);
  206. server_print("%L %s %s %s", LANG_SERVER, "MM_MODLOADED", g_modnames[g_modcount], g_filemaps[g_modcount], g_fileconf);
  207. }
  208. }
  209. fclose(f);
  210. set_task(10.0, "check_task", TASK_VOTEMOD, "", 0, "b");
  211. }
  212.  
  213. public get_firstmap( modid )
  214. {
  215. new ilen;
  216.  
  217. if(!file_exists(g_filemaps[modid]))
  218. get_mapname(g_nextmap, charsmax(g_nextmap));
  219. else
  220. read_file(g_filemaps[modid], 0, g_nextmap, charsmax(g_nextmap), ilen);
  221. }
  222.  
  223. public set_multimod( modid )
  224. {
  225. server_print("Setting multimod to %i - %s", modid, g_modnames[modid]);
  226. set_localinfo("amx_multimod", g_modnames[modid]);
  227. server_cmd("localinfo amxx_plugins ^"^"");
  228. server_cmd("localinfo lastmapcycle ^"^"");
  229. set_localinfo(AMX_PLUGINS, file_exists(g_fileplugins[modid]) ? g_fileplugins[modid] : AMX_DEFAULTPLUGINS);
  230. set_localinfo(AMX_LASTCYCLE, file_exists(g_filemaps[modid]) ? g_filemaps[modid] : AMX_DEFAULTCYCLE);
  231. set_pcvar_string(gp_mapcyclefile, file_exists(g_filemaps[modid]) ? g_filemaps[modid] : AMX_DEFAULTCYCLE);
  232.  
  233.  
  234. switch(get_pcvar_num(gp_mode))
  235. {
  236. case 2:
  237. {
  238. if(gp_galileo_nommapfile)
  239. set_pcvar_string(gp_galileo_nommapfile, file_exists(g_filemaps[modid]) ? g_filemaps[modid] : AMX_DEFAULTCYCLE);
  240.  
  241. if(gp_galileo_votemapfile)
  242. set_pcvar_string(gp_galileo_votemapfile, file_exists(g_filemaps[modid]) ? g_filemaps[modid] : AMX_DEFAULTCYCLE);
  243. }
  244. case 1:
  245. {
  246. callfunc_begin("plugin_init", "mapchooser_multimod.amxx");
  247. callfunc_end();
  248. }
  249. }
  250. }
  251.  
  252. public check_task( )
  253. {
  254. if(!g_hasbeenrocked)
  255. {
  256. if(!countdownrun)
  257. {
  258. if(get_timeleft() > 1 && get_timeleft() < 195)
  259. {
  260. set_task(1.0, "votecountdown", _, _, _, "a", 15);
  261. set_task(16.0, "start_vote");
  262. }
  263. }
  264. }
  265. else
  266. {
  267. return PLUGIN_HANDLED;
  268. }
  269.  
  270. return PLUGIN_CONTINUE;
  271. }
  272.  
  273. public votecountdown( )
  274. {
  275. static countdown = 15;
  276.  
  277. set_hudmessage(0, 222, 50, -1.0, 0.13, 0, 1.0, 0.94, 0.0, 0.0, -1);
  278. show_hudmessage(0, "%L", LANG_PLAYER, "MM_COUNTDOWN", modnexted ? "Map" : "Mod", countdown);
  279. countdownrun = true;
  280.  
  281. countdown--;
  282. }
  283.  
  284. public mmmenu( id )
  285. {
  286. new title[512];
  287. format(title, 511, "%L", LANG_PLAYER, "MM_MMMENU", sMenuPrefix);
  288. new menu = menu_create(title, "mm_handler");
  289. new callback = menu_makecallback("mmcallback");
  290.  
  291. new blockmods[512]
  292. format(blockmods, 511, "%L", LANG_PLAYER, "MM_BLOCKMODS")
  293. menu_additem(menu, blockmods);
  294.  
  295. new choosenextmod[512]
  296. format(choosenextmod, 511, "%L", LANG_PLAYER, "MM_CHOOSENEXTMOD");
  297. menu_additem(menu, choosenextmod);
  298.  
  299. new menucancelmod[512]
  300. format(menucancelmod, 511, "%L", LANG_PLAYER, "MM_CANCELNEXTMOD" );
  301.  
  302. menu_additem(menu, menucancelmod, "", _, callback);
  303.  
  304. menu_display(id, menu, 0);
  305. }
  306.  
  307. public mm_handler( id, menu, item )
  308. {
  309. if(item == MENU_EXIT)
  310. {
  311. menu_cancel(id);
  312. return PLUGIN_HANDLED;
  313. }
  314.  
  315. new command[6], name[64], access, callback;
  316.  
  317. menu_item_getinfo(menu, item, access, command, sizeof command - 1, name, sizeof name - 1, callback);
  318.  
  319. switch(item)
  320. {
  321. case 0:
  322. {
  323. blockmenu(id);
  324. }
  325. case 1:
  326. {
  327. setmodmenu(id);
  328. }
  329. case 2:
  330. {
  331. cancelmod(id);
  332. }
  333. }
  334.  
  335. return PLUGIN_HANDLED;
  336. }
  337.  
  338. public mmcallback( id, menu, item )
  339. {
  340. static _access, info[4], callback;
  341. menu_item_getinfo(menu, item, _access, info, sizeof(info) - 1, _, _, callback);
  342.  
  343. if( !modnexted )
  344. {
  345. return ITEM_DISABLED;
  346. }
  347. if( g_hasbeenrocked )
  348. {
  349. return ITEM_DISABLED;
  350. }
  351.  
  352. return ITEM_ENABLED;
  353. }
  354.  
  355. public start_vote( id, level, cid )
  356. {
  357. if(!cmd_access( id, level, cid, 1 ))
  358. return PLUGIN_HANDLED;
  359.  
  360. if( g_hasbeenrocked )
  361. {
  362. console_print(id, "%L", LANG_PLAYER, "MM_VOTEMODSTARTED");
  363. return PLUGIN_HANDLED;
  364. }
  365.  
  366. if( modnexted )
  367. {
  368. g_hasbeenrocked = true;
  369.  
  370. callfunc_begin("doVoteNextmap", "mapchooser_multimod.amxx");
  371. callfunc_end();
  372.  
  373. if( id != 0 )
  374. {
  375. new sAdminName[32];
  376. get_user_name(id, sAdminName, 31);
  377. ColorChat(0, COLOR, "%L", LANG_PLAYER, "MM_STARTEDVOTEMAPS", sAdminName, g_modnames[g_nextmodid]);
  378. }
  379. }
  380. else
  381. {
  382. g_hasbeenrocked = true;
  383.  
  384. if( id != 0 )
  385. {
  386. new sAdminName[32];
  387. get_user_name(id, sAdminName, 31);
  388. ColorChat(0, COLOR, "%L", LANG_PLAYER, "MM_STARTEDVOTEMOD", sAdminName);
  389. }
  390.  
  391. remove_task(TASK_VOTEMOD);
  392. remove_task(TASK_CHVOMOD);
  393.  
  394. new choosethenextmod[512]
  395. format( choosethenextmod, 511, "%L", LANG_PLAYER, "MM_ITSTIMETOCHOOSE");
  396.  
  397. new menu = menu_create(choosethenextmod, "vm_handler");
  398. new callback = menu_makecallback("votemodcallback");
  399.  
  400. for(new i = 0 ; i <= g_modcount ; i++)
  401. {
  402. new curmodline[512];
  403. format(curmodline, 511, i == g_currentmodid ? "%s %L" : "%s", g_modnames[i], LANG_PLAYER, "MM_CURRENTMOD");
  404. menu_additem(menu, curmodline, "", _, callback);
  405. }
  406.  
  407. new players[32], pnum;
  408. get_players(players, pnum);
  409.  
  410. for (new i = 0 ; i < pnum ; i++)
  411. {
  412. new tempid = players[i];
  413. menu_display(tempid, menu, 0);
  414. }
  415.  
  416. client_cmd(0, "spk Gman/Gman_Choose2");
  417.  
  418. set_task(15.0, "check_vote", TASK_CHVOMOD);
  419. return PLUGIN_CONTINUE;
  420. }
  421.  
  422. return PLUGIN_CONTINUE;
  423. }
  424.  
  425. public user_nextmod( id )
  426. {
  427. if( nextmodchosed )
  428. ColorChat(0, COLOR, "%L", LANG_PLAYER, "MM_NEXTMODIS", sPrefix, g_modnames[g_nextmodid]);
  429. else
  430. ColorChat(0, COLOR, "%L", LANG_PLAYER, "MM_NEXTMODSTILL", sPrefix);
  431. }
  432.  
  433. public user_currentmod( id )
  434. {
  435. ColorChat(0, COLOR, "%L", LANG_PLAYER, "MM_CURRENTMODIS", sPrefix, g_currentmod);
  436. }
  437.  
  438. public vm_handler( id, menu, item )
  439. {
  440. if( item == MENU_EXIT )
  441. {
  442. menu_cancel(id);
  443. return PLUGIN_HANDLED;
  444. }
  445.  
  446. new command[6], name[64], access, callback;
  447.  
  448. menu_item_getinfo(menu, item, access, command, sizeof command - 1, name, sizeof name - 1, callback);
  449.  
  450. switch(item)
  451. {
  452. default:
  453. {
  454. new player[SSTRING];
  455. get_user_name(id, player, charsmax(player));
  456. if(get_user_team(id) == 1)
  457. ColorChat(0, RED, "%s ^1%L ^4%s", player, LANG_PLAYER, "MM_CHOSE", g_modnames[item]);
  458. else if(get_user_team(id) == 2)
  459. ColorChat(0, BLUE, "%s ^1%L ^4%s", player, LANG_PLAYER, "MM_CHOSE", g_modnames[item]);
  460. else
  461. ColorChat(0, GREY, "%s ^1%L ^4%s", player, LANG_PLAYER, "MM_CHOSE", g_modnames[item]);
  462. }
  463. }
  464.  
  465. ++g_votemodcount[item];
  466.  
  467. // this is destroying the menu for all players
  468. // menu_destroy(menu);
  469.  
  470. return PLUGIN_HANDLED;
  471. }
  472.  
  473. public votemodcallback( id, menu, item )
  474. {
  475. static _access, info[4], callback;
  476. menu_item_getinfo(menu, item, _access, info, sizeof(info) - 1, _, _, callback);
  477.  
  478. if(item == g_currentmodid)
  479. {
  480. return ITEM_DISABLED;
  481. }
  482.  
  483. if(item == g_blockedmod[item])
  484. {
  485. return ITEM_DISABLED;
  486. }
  487.  
  488. return ITEM_ENABLED;
  489. }
  490.  
  491. public check_vote( )
  492. {
  493. new b = 0;
  494. for(new a = 0; a <= g_modcount; a++)
  495. if(g_votemodcount[b] < g_votemodcount[a]) b = a;
  496.  
  497. ColorChat(0, COLOR, "%L", LANG_PLAYER, "MM_VOTINGFINISHED", sPrefix, g_modnames[b]);
  498. server_print("%L", LANG_SERVER, "MM_VOTINGFINISHED_SERVER", g_modnames[b]);
  499. set_multimod(b);
  500.  
  501. callfunc_begin("doVoteNextmap", "mapchooser_multimod.amxx");
  502. callfunc_end();
  503. g_nextmodid = b;
  504. nextmodchosed = true;
  505. }
  506.  
  507. public setmodmenu( id )
  508. {
  509. new choosenextmod[512]
  510. format(choosenextmod, 511, "%L", LANG_PLAYER, "MM_CHOOSENEXTMOD");
  511. new menu = menu_create(choosenextmod, "menu_handler");
  512. new callback = menu_makecallback("setmodcallback");
  513.  
  514. for(new i = 0 ; i <= g_modcount ; i++)
  515. {
  516. if(i == g_currentmodid)
  517. {
  518. new curmodline[512];
  519. format(curmodline, 511, "%s %L", g_modnames[g_currentmodid], LANG_PLAYER, "MM_CURRENTMOD");
  520. menu_additem(menu, curmodline, "", _, callback);
  521. }
  522. else
  523. {
  524. if(nextmodchosed)
  525. {
  526. new nexmodline[512];
  527. format(nexmodline, 511, i == g_nextmodid ? "%s %L" : "%s", g_modnames[i], LANG_PLAYER, "MM_NEXTMOD");
  528. menu_additem(menu, nexmodline, "", _, callback);
  529. }
  530. else
  531. {
  532. new nexmodline[512];
  533. format(nexmodline, 511, "%s", g_modnames[i]);
  534. menu_additem(menu, nexmodline, "", _, callback);
  535. }
  536. }
  537. }
  538.  
  539. menu_display(id, menu, 0);
  540. return PLUGIN_CONTINUE;
  541. }
  542.  
  543. public menu_handler( id, menu, item )
  544. {
  545. if(item == MENU_EXIT)
  546. {
  547. mmmenu(id);
  548. return PLUGIN_HANDLED;
  549. }
  550.  
  551. new command[6], name[64], access, callback;
  552.  
  553. menu_item_getinfo(menu, item, access, command, sizeof command - 1, name, sizeof name - 1, callback);
  554.  
  555. new sAdminName[32];
  556. get_user_name(id, sAdminName, 31);
  557.  
  558. switch(item)
  559. {
  560. default:
  561. {
  562. ColorChat(0, COLOR, "%L", LANG_PLAYER, "MM_ADMINCHOSENEXTMOD", sPrefix, sAdminName, g_modnames[item]);
  563. set_multimod(item);
  564. modnexted = true;
  565. g_nextmodid = item;
  566. nextmodchosed = true;
  567. }
  568. }
  569.  
  570. setmodmenu(id);
  571.  
  572. return PLUGIN_HANDLED;
  573. }
  574.  
  575. public setmodcallback( id, menu, item )
  576. {
  577. static _access, info[4], callback;
  578. menu_item_getinfo(menu, item, _access, info, sizeof(info) - 1, _, _, callback);
  579.  
  580. if( !( get_user_flags( id ) & NMM_FLAG ) )
  581. {
  582. return ITEM_DISABLED;
  583. }
  584.  
  585. if( item == g_currentmodid )
  586. {
  587. return ITEM_DISABLED;
  588. }
  589.  
  590. if( nextmodchosed && item == g_nextmodid )
  591. {
  592. return ITEM_DISABLED;
  593. }
  594.  
  595. if( g_hasbeenrocked )
  596. {
  597. return ITEM_DISABLED;
  598. }
  599.  
  600. return ITEM_ENABLED;
  601. }
  602.  
  603. public blockmenu( id )
  604. {
  605. new blockkmods[512]
  606. format(blockkmods, 511, "%L", LANG_PLAYER, "MM_BLOCKMODS");
  607. new menu = menu_create(blockkmods, "block_handler");
  608. new callback = menu_makecallback("blockcallback");
  609.  
  610. for(new i = 0 ; i <= g_modcount ; i++)
  611. {
  612. if(i == g_currentmodid)
  613. {
  614. new curmodline[512];
  615. format(curmodline, 511, "%s %L", g_modnames[g_currentmodid], LANG_PLAYER, "MM_CURRENTMOD");
  616. menu_additem(menu, curmodline, "", _, callback);
  617. }
  618. else
  619. {
  620. if(i == g_blockedmod[i])
  621. {
  622. new nexmodline[512];
  623. format(nexmodline, 511, "%s \r%L", g_modnames[i], LANG_PLAYER, "MM_BLOCKED");
  624. menu_additem(menu, nexmodline, "", _, callback);
  625. }
  626. else
  627. {
  628. new nexmodline[512];
  629. format(nexmodline, 511, "%s", g_modnames[i]);
  630. menu_additem(menu, nexmodline, "", _, callback);
  631. }
  632. }
  633. }
  634.  
  635. menu_display(id, menu, 0);
  636. return PLUGIN_CONTINUE;
  637. }
  638.  
  639. public block_handler( id, menu, item )
  640. {
  641. if( item == MENU_EXIT )
  642. {
  643. mmmenu(id);
  644. return PLUGIN_HANDLED;
  645. }
  646.  
  647. new command[6], name[64], access, callback;
  648.  
  649. menu_item_getinfo(menu, item, access, command, sizeof command - 1, name, sizeof name - 1, callback);
  650.  
  651. new sAdminName[32];
  652. get_user_name(id, sAdminName, 31);
  653.  
  654. switch(item)
  655. {
  656. default:
  657. {
  658. if(item == g_blockedmod[item])
  659. {
  660. ColorChat(0, COLOR, "%L", LANG_PLAYER, "MM_ADMINUNLOCKED", sPrefix, sAdminName, g_modnames[item]);
  661. g_blockedmod[item] =! item;
  662. }
  663. else
  664. {
  665. ColorChat(0, COLOR, "%L", LANG_PLAYER, "MM_ADMINLOCKED", sPrefix, sAdminName, g_modnames[item]);
  666. g_blockedmod[item] = item;
  667. }
  668. }
  669. }
  670.  
  671. blockmenu( id );
  672.  
  673. return PLUGIN_HANDLED;
  674. }
  675.  
  676. public blockcallback( id, menu, item )
  677. {
  678. static _access, info[4], callback;
  679. menu_item_getinfo(menu, item, _access, info, sizeof(info) - 1, _, _, callback);
  680.  
  681. if(!(get_user_flags(id) & BMM_FLAG))
  682. {
  683. return ITEM_DISABLED;
  684. }
  685.  
  686. if( item == g_currentmodid )
  687. {
  688. return ITEM_DISABLED;
  689. }
  690.  
  691. if( g_hasbeenrocked )
  692. {
  693. return ITEM_DISABLED;
  694. }
  695.  
  696. return ITEM_ENABLED;
  697. }
  698.  
  699. public cancelmod( id )
  700. {
  701. if( !( get_user_flags( id ) & CM_FLAG ) )
  702. return PLUGIN_HANDLED;
  703.  
  704. if( modnexted )
  705. {
  706. new sAdminName[32];
  707. get_user_name(id, sAdminName, 31);
  708. ColorChat(0, COLOR, "%L", LANG_PLAYER, "MM_ADMINCANCELNEXTMOD", sPrefix, sAdminName);
  709. modnexted = false;
  710. nextmodchosed = false;
  711. }
  712.  
  713. mmmenu( id );
  714. return PLUGIN_HANDLED;
  715. }
  716.  
  717. public cmdSayRTV( id )
  718. {
  719. if( modnexted )
  720. {
  721. ColorChat(id, COLOR, "%L", LANG_PLAYER, "MM_RTV_NEXTMODCHOOSED", sPrefix);
  722. return PLUGIN_HANDLED;
  723. }
  724.  
  725. if( g_hasbeenrocked )
  726. {
  727. ColorChat(id, COLOR, "%L", LANG_PLAYER, "MM_RTV_VOTEMODROCKED", sPrefix);
  728. return PLUGIN_HANDLED;
  729. }
  730.  
  731. if( g_rockedVote[id] )
  732. {
  733. ColorChat(id, COLOR, "%L", LANG_PLAYER, "MM_RTV_YOUROCKEDRTV", sPrefix);
  734. rtv_remind();
  735. return PLUGIN_CONTINUE;
  736. }
  737.  
  738. new Float:time_elapsed = get_cvar_float("mp_timelimit") - (float( get_timeleft() ) / 60.0);
  739.  
  740. if( time_elapsed < 10.0 )
  741. {
  742. new Float:time_til_votebegin = 10.0 - time_elapsed;
  743.  
  744. new a = get_timeleft();
  745.  
  746. new Float:wmin_to_vote = time_til_votebegin - 0.5;
  747.  
  748. new min_to_vote = floatround(wmin_to_vote);
  749. if( min_to_vote == 0 )
  750. {
  751. ColorChat(id, COLOR, "%L", LANG_PLAYER, "MM_RTV_YOUCANTSECONDS", sPrefix, (a % 60), (a % 60) == 1 ? "" : "s" );
  752. }
  753. else
  754. {
  755. ColorChat(id, COLOR, "%L", LANG_PLAYER, "MM_RTV_YOUCANTMINS", sPrefix, min_to_vote, min_to_vote == 1 ? "" : "s", (a % 60), (a % 60) == 1 ? "" : "s" );
  756. }
  757.  
  758. return PLUGIN_HANDLED;
  759. }
  760.  
  761. g_rockedVote[id] = true;
  762. g_rockedVoteCnt++;
  763. ColorChat(id, COLOR, "%L", LANG_PLAYER, "MM_RTV_YOUHAVEROCKED", sPrefix);
  764.  
  765. if( g_rockedVoteCnt >= get_RocksNeeded() )
  766. {
  767. ColorChat(0, COLOR, "%L", LANG_PLAYER, "MM_RTV_VOTEMODWILLSTART", sPrefix);
  768. set_task(4.0,"startRockVote");
  769. }
  770. else
  771. {
  772. rtv_remind( );
  773. }
  774.  
  775. return PLUGIN_CONTINUE;
  776. }
  777.  
  778. public startRockVote( )
  779. {
  780. set_task(1.0,"start_vote");
  781. }
  782.  
  783. get_RocksNeeded( )
  784. {
  785. return floatround(get_pcvar_float(cvar_rtv_ratio) * float(get_realplayersnum()), floatround_ceil);
  786. }
  787.  
  788. stock get_realplayersnum( )
  789. {
  790. new players[32], playerCnt;
  791. get_players(players, playerCnt, "ch");
  792.  
  793. return playerCnt;
  794. }
  795.  
  796. rtv_remind( )
  797. {
  798. ColorChat(0, COLOR, "%L", LANG_PLAYER, "MM_RTV_NEEDMOREPLAYERS", sPrefix, get_RocksNeeded() - g_rockedVoteCnt, get_RocksNeeded() - g_rockedVoteCnt > 1 ? "s" : "");
  799. }
  800.  
  801. ColorChat(id, Color:type, const msg[], {Float,Sql,Result,_}:...)
  802. {
  803. if( !get_playersnum() ) return;
  804.  
  805. new message[256];
  806.  
  807. switch(type)
  808. {
  809. case NORMAL: // clients scr_concolor cvar color
  810. {
  811. message[0] = 0x01;
  812. }
  813. case GREEN: // Green
  814. {
  815. message[0] = 0x04;
  816. }
  817. default: // White, Red, Blue
  818. {
  819. message[0] = 0x03;
  820. }
  821. }
  822.  
  823. vformat(message[1], 251, msg, 4);
  824.  
  825. // Make sure message is not longer than 192 character. Will crash the server.
  826. message[192] = '^0';
  827.  
  828. new team, ColorChange, index, MSG_Type;
  829.  
  830. if(id)
  831. {
  832. MSG_Type = MSG_ONE;
  833. index = id;
  834. } else {
  835. index = FindPlayer();
  836. MSG_Type = MSG_ALL;
  837. }
  838.  
  839. team = get_user_team(index);
  840. ColorChange = ColorSelection(index, MSG_Type, type);
  841.  
  842. ShowColorMessage(index, MSG_Type, message);
  843.  
  844. if(ColorChange)
  845. {
  846. Team_Info(index, MSG_Type, TeamName[team]);
  847. }
  848. }
  849.  
  850. ShowColorMessage(id, type, message[])
  851. {
  852. static bool:saytext_used;
  853. static get_user_msgid_saytext;
  854. if(!saytext_used)
  855. {
  856. get_user_msgid_saytext = get_user_msgid("SayText");
  857. saytext_used = true;
  858. }
  859. message_begin(type, get_user_msgid_saytext, _, id);
  860. write_byte(id)
  861. write_string(message);
  862. message_end();
  863. }
  864.  
  865. Team_Info(id, type, team[])
  866. {
  867. static bool:teaminfo_used;
  868. static get_user_msgid_teaminfo;
  869. if(!teaminfo_used)
  870. {
  871. get_user_msgid_teaminfo = get_user_msgid("TeamInfo");
  872. teaminfo_used = true;
  873. }
  874. message_begin(type, get_user_msgid_teaminfo, _, id);
  875. write_byte(id);
  876. write_string(team);
  877. message_end();
  878.  
  879. return 1;
  880. }
  881.  
  882. ColorSelection(index, type, Color:Type)
  883. {
  884. switch(Type)
  885. {
  886. case RED:
  887. {
  888. return Team_Info(index, type, TeamName[1]);
  889. }
  890. case BLUE:
  891. {
  892. return Team_Info(index, type, TeamName[2]);
  893. }
  894. case GREY:
  895. {
  896. return Team_Info(index, type, TeamName[0]);
  897. }
  898. }
  899.  
  900. return 0;
  901. }
  902.  
  903. FindPlayer()
  904. {
  905. new i = -1;
  906.  
  907. while(i <= get_maxplayers())
  908. {
  909. if(is_user_connected(++i))
  910. return i;
  911. }
  912.  
  913. return -1;
  914. }
  915. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  916. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
  917. */
  918.  


Átnyálaztam az sma-t egy jó párszor, próbálgattam átírni de valahogy nem megy! vagy le se fordul :) vagy nem az történik amit kerestem! Pár módosítás kellene bele, de nem tudom sajnos egymagam megcsinálni ezért írok! :)

Az egyik amit ki kellene venni belőle:
-Mod váltásnál az aktuális mod Inaktív, vagyis nem válaszható! Ez szeretném kitörölni belőle! Elvileg a program tartalmaz mod blokkoló menüt, ha ennek mennie kell, hogy meg lehessen csinálni az inaktív kivételt, akkor nem baj :)

- A második: h az automodvote akkor lép életbe amikor a timeleft eléri a 3. percet! Ezt az értéket hol tudom módosítani? Mert GG-nél ez igen meghatározhatatlan, h mennyi idő kell egy maphoz! De ugye a másik gond h mikor megvan a mod akkor rákérdez a pályára is! De ezt egyenlőre gungamnél még a modig se jutok el vele!

Ha van valakinek jobb ötlete akkor meghallgatom! :)

A válaszokat előre is köszönöm!!!


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 1 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 32 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole