HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <fun>
  4. #include <cstrike>
  5. #include <fakemeta>
  6. #include <hamsandwich>
  7.  
  8. #define cw_is_user_valid(%0) (%0 && %0 <= g_iMaxPlayers)
  9. #define m_iTeam 114
  10. #define fm_cs_get_user_team_index(%1) get_pdata_int(%1, m_iTeam)
  11.  
  12. new bool:Knife = false, bool:Warmup = false, bool:CW;
  13. new iTeam[33], bool:IsUserConnected[33];
  14. new g_iMaxPlayers;
  15.  
  16. public plugin_init()
  17. {
  18. register_plugin("CW Menu", "1.0b", "@LLaPb@");
  19.  
  20. RegisterHam(Ham_Spawn, "player", "Ham_PlayerSpawn_Post", true);
  21. RegisterHam(Ham_Killed, "player", "Ham_Death");
  22.  
  23. register_event("HLTV", "Event_HLTV", "a", "1=0", "2=0");
  24.  
  25. g_iMaxPlayers = get_maxplayers();
  26.  
  27. register_forward(FM_Voice_SetClientListening, "FakeMeta_Voice_SetListening", false);
  28.  
  29. register_menucmd(register_menuid("Show_CwMenu"), (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9), "Handle_CwMenu");
  30. register_menucmd(register_menuid("Show_AdminMenu"), (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9), "Handle_AdminMenu");
  31.  
  32. register_clcmd("say /cw", "Show_CwMenu");
  33. register_clcmd("say cw", "Show_CwMenu");
  34. register_clcmd("cw", "Show_CwMenu");
  35. register_clcmd("SetPass", "TypePass");
  36. }
  37.  
  38. public client_putinserver(id)
  39. {
  40. IsUserConnected[id] = true;
  41. }
  42.  
  43. public client_disconnect(id)
  44. {
  45. IsUserConnected[id] = false;
  46. }
  47.  
  48. public Event_HLTV()
  49. {
  50. if(Warmup)
  51. {
  52. server_cmd("mp_buytime 10.0");
  53. }
  54. }
  55.  
  56. public Ham_Death(iVictim, iAttacker, iCorpse)
  57. {
  58. if (Warmup)
  59. {
  60. if (IsUserConnected[iVictim] && !is_user_alive(iVictim) && cw_is_user_valid(iVictim) && (iTeam[iVictim] == 1 || iTeam[iVictim] == 2))
  61. {
  62. set_task(0.5, "fnRevivePlayer", iVictim);
  63. }
  64. }
  65. }
  66.  
  67. public fnRevivePlayer(id)
  68. ExecuteHamB(Ham_Spawn, id);
  69.  
  70. public FakeMeta_Voice_SetListening(iReceiver, iSender, bool:bListen)
  71. {
  72. if(IsUserConnected[iReceiver] && IsUserConnected[iSender] && iReceiver != iSender)
  73. {
  74. if(Warmup || Knife)
  75. {
  76. engfunc(EngFunc_SetClientListening, iReceiver, iSender, true);
  77. return FMRES_SUPERCEDE;
  78. }
  79. else if(CW)
  80. {
  81. if(iTeam[iSender] == iTeam[iReceiver] && is_user_connected(iSender) && is_user_connected(iReceiver))
  82. {
  83. engfunc(EngFunc_SetClientListening, iReceiver, iSender, true);
  84. return FMRES_SUPERCEDE;
  85. }
  86. else
  87. {
  88. engfunc(EngFunc_SetClientListening, iReceiver, iSender, false);
  89. return FMRES_SUPERCEDE;
  90. }
  91. }
  92. else
  93. {
  94. engfunc(EngFunc_SetClientListening, iReceiver, iSender, false);
  95. return FMRES_SUPERCEDE;
  96. }
  97. }
  98. return FMRES_IGNORED;
  99. }
  100.  
  101. public Ham_PlayerSpawn_Post(id)
  102. {
  103. if(!IsUserConnected[id] || !is_user_alive(id) || !cw_is_user_valid(id))
  104. return;
  105.  
  106. iTeam[id] = fm_cs_get_user_team_index(id);
  107.  
  108. if(Knife)
  109. {
  110. fm_strip_user_weapons(id);
  111. fm_give_item(id, "weapon_knife");
  112. cs_set_user_money(id, 0);
  113. set_user_health(id, 100);
  114. }
  115. if(Warmup)
  116. {
  117. cs_set_user_money(id, 16000);
  118. set_user_health(id, 100);
  119. set_user_armor(id, 100);
  120. }
  121. if(CW)
  122. {
  123. set_task(0.5, "TeamMoney", id);
  124. }
  125. }
  126.  
  127. public TeamMoney(id)
  128. {
  129. new szName[32], szBuffer[64], szMessage[512], iMoney, AllMoney = 0;
  130. new Players[32], Count; get_players(Players, Count, "ah");
  131. formatex(szMessage, charsmax(szMessage), "A Csapatod pénze:^n^n");
  132.  
  133. get_user_name(id, szName, charsmax(szName));
  134. iMoney = cs_get_user_money(id);
  135. AllMoney = AllMoney + iMoney;
  136. formatex(szBuffer, charsmax(szBuffer), "Felhasználónév: %s |Pénz: %d^n", szName, iMoney);
  137. add(szMessage, charsmax(szMessage), szBuffer, charsmax(szBuffer));
  138.  
  139. for(new a = 1; a <= Count; a++)
  140. {
  141. if(iTeam[id] == iTeam[Players[a]] && id != a)
  142. {
  143. get_user_name(Players[a], szName, charsmax(szName));
  144. iMoney = cs_get_user_money(Players[a]);
  145. AllMoney = AllMoney + iMoney;
  146. formatex(szBuffer, charsmax(szBuffer), "Felhasználónév: %s |Pénz: %d^n", szName, iMoney);
  147. add(szMessage, charsmax(szMessage), szBuffer, charsmax(szBuffer));
  148. }
  149. }
  150. formatex(szBuffer, charsmax(szBuffer), "^nA csapatok pénzének összege: %d", AllMoney);
  151. add(szMessage, charsmax(szMessage), szBuffer, charsmax(szBuffer));
  152. set_hudmessage(0, 255, 0, 0.01, -1.0, 0, 6.0, 12.0);
  153. show_hudmessage(id, szMessage);
  154. }
  155.  
  156. public Show_CwMenu(id)
  157. {
  158. if(~get_user_flags(id) & ADMIN_RCON)
  159. return PLUGIN_HANDLED;
  160.  
  161. new Pass[32]; get_cvar_string("sv_password", Pass, charsmax(Pass));
  162. new szMenu[512], iKeys = (1<<0|1<<1|1<<2|1<<3|1<<5|1<<6|1<<9), iLen;
  163. iLen = formatex(szMenu, charsmax(szMenu), "\rClan-War Menü^n^n");
  164. iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y|\r1\y| \wAdmin menü^n^n");
  165. iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y|\r2\y| \rCW - Indítás^n");
  166. iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y|\r3\y| \yBemelegítés | Kés^n");
  167. iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y|\r4\y| \yBemelegítés | Fegyver^n^n");
  168. if(strlen(Pass) != 0)
  169. iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y|\r5\y| \wJelenlegi jelszó: \r%s^n", Pass);
  170. else
  171. iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y|\r5\y| \wJelenlegi jelszó: \yNincsen^n");
  172. iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y|\r6\y| \wÁllítson be jelszót^n");
  173. iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y|\r7\y| \wJelszó eltávolítása^n^n^n");
  174. formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\y|\r0\y| \wKilépés");
  175. return show_menu(id, iKeys, szMenu, -1, "Show_CwMenu");
  176. }
  177.  
  178. public Handle_CwMenu(id, iKey)
  179. {
  180. switch(iKey)
  181. {
  182. case 0: return Show_AdminMenu(id);
  183. case 1:
  184. {
  185. set_hudmessage(255, 0, 0, -1.0, -0.55, 0, 6.0, 10.0);
  186. show_hudmessage(0, "Clan-War Elkezdődött!");
  187. Knife = false;
  188. Warmup = false;
  189. CW = true;
  190. server_cmd("mp_freezetime 6");
  191. server_cmd("mp_roundtime 1.75");
  192. set_task(2.0, "Restart");
  193. }
  194. case 2: SetKnife();
  195. case 3:
  196. {
  197. set_hudmessage(255, 0, 0, -1.0, -0.55, 0, 6.0, 10.0);
  198. show_hudmessage(0, "Bemelegítés elkezdődött!");
  199. server_cmd("mp_freezetime 0");
  200. server_cmd("mp_roundtime 10.0");
  201. Knife = false;
  202. Warmup = true;
  203. CW = false;
  204. set_task(2.0, "Restart");
  205. }
  206. case 5: return client_cmd(id, "messagemode SetPass");
  207. case 6:
  208. {
  209. server_cmd("sv_password ^"^"");
  210. return set_task(0.1, "Show_CwMenu", id);
  211. }
  212. case 9: return PLUGIN_HANDLED;
  213. }
  214. return Show_CwMenu(id);
  215. }
  216.  
  217. public Show_AdminMenu(id)
  218. {
  219. new szMenu[512], iKeys = (1<<0|1<<1|1<<2|1<<3|1<<8|1<<9), iLen;
  220. iLen = formatex(szMenu, charsmax(szMenu), "\wAdmin Menü^n^n");
  221. iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y|\r1\y| \wJátékos Kirugása^n");
  222. iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y|\r2\y| \wJátékos Kitiltása^n");
  223. iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y|\r3\y| \wJátékos Áthelyezése^n");
  224. iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y|\r4\y| \wMap Módosítása^n^n^n^n^n");
  225. iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y|\r9\y| \wVissza^n");
  226. formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y|\r0\y| \wVissza");
  227. return show_menu(id, iKeys, szMenu, -1, "Show_AdminMenu");
  228. }
  229.  
  230. public Handle_AdminMenu(id, iKey)
  231. {
  232. switch(iKey)
  233. {
  234. case 0: return client_cmd(id, "amx_kickmenu");
  235. case 1: return client_cmd(id, "amx_banmenu");
  236. case 2: return client_cmd(id, "amx_teammenu");
  237. case 3: return client_cmd(id, "amx_mapmenu");
  238. case 8: return Show_CwMenu(id);
  239. case 9: return PLUGIN_HANDLED;
  240. }
  241. return Show_AdminMenu(id);
  242. }
  243.  
  244. public TypePass(id)
  245. {
  246. new szArg[10]; read_argv(1, szArg, charsmax(szArg));
  247. if(strlen(szArg) > 0)
  248. {
  249. server_cmd("sv_password %s", szArg);
  250. set_hudmessage(255, 0, 0, -1.0, -0.55, 0, 6.0, 10.0);
  251. show_hudmessage(id, "Jelszó %s Sikeresen beállítva!", szArg);
  252. }
  253. else
  254. {
  255. set_hudmessage(255, 0, 0, -1.0, -0.55, 0, 6.0, 10.0);
  256. show_hudmessage(id, "Írja be a jelszót!");
  257. }
  258. return set_task(0.1, "Show_CwMenu", id);
  259. }
  260.  
  261. public SetKnife()
  262. {
  263. set_hudmessage(255, 0, 0, -1.0, -0.55, 0, 6.0, 10.0);
  264. show_hudmessage(0, "Bemelegítő Kés kör indítása!");
  265. server_cmd("mp_freezetime 0");
  266. server_cmd("mp_roundtime 10.0");
  267. Warmup = false;
  268. Knife = true;
  269. CW = false;
  270. set_task(2.0, "Restart");
  271. }
  272.  
  273. public Restart()
  274. {
  275. server_cmd("sv_restart 1");
  276. }
  277.  
  278. stock fm_give_item(pPlayer, const szItem[])
  279. {
  280. new iEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, szItem));
  281. if(!pev_valid(iEntity)) return 0;
  282. new Float:vecOrigin[3];
  283. pev(pPlayer, pev_origin, vecOrigin);
  284. set_pev(iEntity, pev_origin, vecOrigin);
  285. set_pev(iEntity, pev_spawnflags, pev(iEntity, pev_spawnflags) | SF_NORESPAWN);
  286. dllfunc(DLLFunc_Spawn, iEntity);
  287. dllfunc(DLLFunc_Touch, iEntity, pPlayer);
  288. if(pev(iEntity, pev_solid) != SOLID_NOT)
  289. {
  290. engfunc(EngFunc_RemoveEntity, iEntity);
  291. return -1;
  292. }
  293. return iEntity;
  294. }
  295.  
  296. stock fm_strip_user_weapons(pPlayer, iType = 0)
  297. {
  298. static iEntity, iszWeaponStrip = 0;
  299. if(iszWeaponStrip || (iszWeaponStrip = engfunc(EngFunc_AllocString, "player_weaponstrip"))) iEntity = engfunc(EngFunc_CreateNamedEntity, iszWeaponStrip);
  300. if(!pev_valid(iEntity)) return 0;
  301. if(iType && get_user_weapon(pPlayer) != CSW_KNIFE)
  302. {
  303. engclient_cmd(pPlayer, "weapon_knife");
  304. engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, 66, {0.0, 0.0, 0.0}, pPlayer);
  305. write_byte(1);
  306. write_byte(CSW_KNIFE);
  307. write_byte(0);
  308. message_end();
  309. }
  310. dllfunc(DLLFunc_Spawn, iEntity);
  311. dllfunc(DLLFunc_Use, iEntity, pPlayer);
  312. engfunc(EngFunc_RemoveEntity, iEntity);
  313. set_pdata_int(pPlayer, 116, 0, 5);
  314. return 1;
  315. }