Advertisement
iFenomenal

IFenomenal

Jan 28th, 2019
532
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.97 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <engine>
  4. #include <fakemeta>
  5. #include <fun>
  6. #include <cstrike>
  7. #include <hamsandwich>
  8.  
  9. #define PLUGIN "Beneficii"
  10. #define VERSION "1.0"
  11.  
  12. enum eData {
  13. Name[32],
  14. Flags,
  15. SpawnHP,
  16. SpawnAP,
  17. MoneyKill,
  18. HpKill,
  19. ApKill,
  20. Jumps
  21. }
  22.  
  23. new g_iJumpsNum[33], g_iMaxJumps[33];
  24. new bool:g_bIsJumping[33];
  25.  
  26. new bool:g_bHaveBenefits[33];
  27. new g_iBenefitsNum = 0;
  28. new Array:g_aBenefits;
  29. public plugin_init()
  30. {
  31. register_plugin(PLUGIN, VERSION, "iF .!." );
  32.  
  33. g_aBenefits = ArrayCreate(eData);
  34.  
  35. RegisterHam(Ham_Spawn, "player", "HamPlayerSpawn", 1);
  36. RegisterHam(Ham_Player_Jump, "player", "hamPlayerJump", 0)
  37.  
  38. register_event("DeathMsg", "evDeathMsg", "a");
  39.  
  40. register_clcmd("say /vips", "cmdShowBenefits");
  41. register_clcmd("say /beneficii", "cmdShowRankBenefits");
  42. }
  43. /* Plugin cfg */
  44. public plugin_cfg()
  45. {
  46. new szLineData[128], szName[32], szFlags[32], szSpawnHP[8], szSpawnAP[8], szMoneyPerKill[8], szHpPerKill[8], szApPerKill[8], szJumpsNum[8];
  47. new aData[eData]
  48. new szConfigsDir[128];
  49. get_configsdir(szConfigsDir, charsmax(szConfigsDir));
  50. add(szConfigsDir, charsmax(szConfigsDir), "/benefits.ini");
  51.  
  52. if(!file_exists(szConfigsDir))
  53. {
  54. write_file(szConfigsDir, ";Numele flagului Flagul HP Spawn AP Spawn Money per kill HP per Kill Armor per Kill Numar sarituri (1 = No multijump)");
  55. write_file(szConfigsDir, ";Exemplu:");
  56. write_file(szConfigsDir, ";^"VIP Diamond^" ^"bcdefghijkt^" ^"125^" ^"150^" ^"2000^" ^"25^" ^"50^" ^"2^"");
  57. }
  58.  
  59. new f = fopen(szConfigsDir, "rt");
  60. if(!f)
  61. return;
  62.  
  63. while(!feof(f))
  64. {
  65. fgets(f, szLineData, charsmax(szLineData));
  66.  
  67. if(szLineData[0] == ';' || !szLineData[0])
  68. continue;
  69.  
  70. parse(szLineData, szName, charsmax(szName), szFlags, charsmax(szFlags), szSpawnHP, charsmax(szSpawnHP), szSpawnAP, charsmax(szSpawnAP), szMoneyPerKill, charsmax(szMoneyPerKill), szHpPerKill, charsmax(szHpPerKill), szApPerKill, charsmax(szApPerKill), szJumpsNum, charsmax(szJumpsNum));
  71.  
  72. copy(aData[Name], charsmax(aData[Name]), szName);
  73. aData[Flags] = read_flags(szFlags);
  74. aData[SpawnHP] = str_to_num(szSpawnHP);
  75. aData[SpawnAP] = str_to_num(szSpawnAP);
  76. aData[MoneyKill] = str_to_num(szMoneyPerKill);
  77. aData[HpKill] = str_to_num(szHpPerKill);
  78. aData[ApKill] = str_to_num(szApPerKill);
  79.  
  80. if(!str_to_num(szJumpsNum))
  81. aData[Jumps] = 1;
  82. else
  83. aData[Jumps] = str_to_num(szJumpsNum);
  84.  
  85. ArrayPushArray(g_aBenefits, aData);
  86. g_iBenefitsNum++;
  87. }
  88. }
  89. /* When client join to server */
  90. public client_putinserver(id)
  91. {
  92. new aData[eData];
  93.  
  94. g_bHaveBenefits[id] = false;
  95. g_bIsJumping[id] = false;
  96. g_iJumpsNum[id] = 0;
  97. g_iMaxJumps[id] = 1;
  98.  
  99. for (new i; i < g_iBenefitsNum; i++)
  100. {
  101. ArrayGetArray(g_aBenefits, i, aData)
  102.  
  103. if(get_user_flags(id) == aData[Flags])
  104. {
  105. g_bHaveBenefits[id] = true;
  106. g_iMaxJumps[id] = aData[Jumps];
  107. break;
  108. }
  109. }
  110. }
  111. /* Player Spawn ( Hamsandwich ) */
  112. public HamPlayerSpawn(id)
  113. {
  114. if(!is_user_alive(id) || !g_bHaveBenefits[id])
  115. return;
  116.  
  117. new aData[eData];
  118.  
  119. for (new i; i < g_iBenefitsNum; i++)
  120. {
  121. ArrayGetArray(g_aBenefits, i, aData);
  122.  
  123. if(get_user_flags(id) == aData[Flags])
  124. {
  125. if(aData[SpawnHP] > 0)
  126. set_user_health(id, aData[SpawnHP]);
  127.  
  128. if(aData[SpawnAP] > 0)
  129. set_user_armor(id, aData[SpawnAP]);
  130.  
  131. break;
  132. }
  133. }
  134. }
  135. /* Event Death */
  136. public evDeathMsg( )
  137. {
  138. new iKiller = read_data(1);
  139. new iVictim = read_data(2);
  140.  
  141. if(iKiller == iVictim || !is_user_alive(iKiller) || !g_bHaveBenefits[iKiller])
  142. return;
  143.  
  144. new aData[eData];
  145.  
  146. for (new i; i < g_iBenefitsNum; i++)
  147. {
  148. ArrayGetArray(g_aBenefits, i, aData);
  149.  
  150. if(get_user_flags(iKiller) == aData[Flags])
  151. {
  152. cs_set_user_money(iKiller, cs_get_user_money(iKiller) + aData[MoneyKill]);
  153. set_user_health(iKiller, get_user_health(iKiller) + aData[HpKill]);
  154. set_user_armor(iKiller, get_user_armor(iKiller) + aData[ApKill]);
  155.  
  156. break;
  157. }
  158. }
  159. }
  160. /* Multijump - H.RED.ZONE Code */
  161. public hamPlayerJump(id)
  162. {
  163. if(!is_user_alive(id))
  164. {
  165. return HAM_HANDLED;
  166. }
  167.  
  168. if( pev( id, pev_flags ) & FL_WATERJUMP || pev(id, pev_waterlevel) >= 2 || !(get_pdata_int(id, 246) & IN_JUMP) )
  169. {
  170. return HAM_IGNORED
  171. }
  172.  
  173. if(pev( id, pev_flags ) & FL_ONGROUND)
  174. {
  175. g_iJumpsNum[ id ] = 0;
  176. return HAM_IGNORED
  177. }
  178.  
  179. if( get_pdata_float(id, 251) < 500 && ++g_iJumpsNum[id] < g_iMaxJumps[id] )
  180. {
  181. new Float:fVelocity[ 3 ];
  182. pev( id, pev_velocity, fVelocity );
  183. fVelocity[ 2 ] = 268.328157;
  184. set_pev( id, pev_velocity, fVelocity );
  185.  
  186. return HAM_HANDLED
  187. }
  188.  
  189. return HAM_IGNORED
  190. }
  191. /* Show Benefits Ranks */
  192. public cmdShowRankBenefits(id)
  193. {
  194. new menu, szText[40], aData[eData];
  195. menu = menu_create("\w[ \yFurien Benefits \w] \rVIP's Ranks", "benefitsMenuHandler");
  196.  
  197. for (new i; i < g_iBenefitsNum; i++)
  198. {
  199. ArrayGetArray(g_aBenefits, i, aData);
  200.  
  201. formatex(szText, charsmax(szText), "\y%s %s", aData[Name], get_user_flags(id) == aData[Flags] ? "\r*" : "");
  202. menu_additem(menu, szText);
  203. }
  204.  
  205. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  206. menu_display(id, menu, 0);
  207. }
  208. public benefitsMenuHandler(id, menu, item)
  209. {
  210. if(item == MENU_EXIT)
  211. {
  212. menu_destroy(menu);
  213. return PLUGIN_HANDLED;
  214. }
  215.  
  216. showDetailsMenu(id, item);
  217.  
  218. menu_destroy(menu);
  219. return PLUGIN_HANDLED;
  220. }
  221. /* Show Benefits Ranks Details */
  222. public showDetailsMenu(id, item)
  223. {
  224. new menu, szText[64], aData[eData];
  225. ArrayGetArray(g_aBenefits, item, aData);
  226.  
  227. formatex(szText, charsmax(szText), "\w[ \yFurien Benefits \w] \r%s", aData[Name]);
  228. menu = menu_create(szText, "detailsMenuHandler");
  229.  
  230. formatex(szText, charsmax(szText), "\yHP Spawn: \r%d", aData[SpawnHP]);
  231. menu_additem(menu, szText);
  232.  
  233. formatex(szText, charsmax(szText), "\yAP Spawn: \r%d", aData[SpawnAP]);
  234. menu_additem(menu, szText);
  235.  
  236. formatex(szText, charsmax(szText), "\yMoney per kill: \r%d \r$", aData[MoneyKill]);
  237. menu_additem(menu, szText);
  238.  
  239. formatex(szText, charsmax(szText), "\yHP per kill: \r%d", aData[HpKill]);
  240. menu_additem(menu, szText);
  241.  
  242. formatex(szText, charsmax(szText), "\yAP per kill: \r%d", aData[ApKill]);
  243. menu_additem(menu, szText);
  244.  
  245. if(aData[Jumps] > 1)
  246. formatex(szText, charsmax(szText), "\yMultijump: \rx%d", aData[Jumps]);
  247. else
  248. formatex(szText, charsmax(szText), "\yMultijump: \dNO");
  249. menu_additem(menu, szText);
  250.  
  251. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  252. menu_display(id, menu, 0);
  253. }
  254. public detailsMenuHandler(id, menu, item)
  255. {
  256. if(item == MENU_EXIT)
  257. {
  258. cmdShowRankBenefits(id)
  259. return PLUGIN_HANDLED;
  260. }
  261.  
  262. menu_destroy(menu);
  263. return PLUGIN_HANDLED;
  264. }
  265. /* Show users with benefits */
  266. public cmdShowBenefits(id)
  267. {
  268. new iPlayers[32], iNum, szMessage[128], contor;
  269. get_players(iPlayers, iNum);
  270.  
  271. formatex(szMessage, charsmax(szMessage), "!nBenefits ON: ");
  272. for(new i;i<iNum;i++)
  273. {
  274. new x = iPlayers[i];
  275. if(g_bHaveBenefits[x])
  276. {
  277. new szName[32], szMsg[128];
  278. get_user_name(x, szName, charsmax(szName));
  279. formatex(szMsg, charsmax(szMsg), "!g%s!n,", szName);
  280. add(szMessage, charsmax(szMessage), szMsg);
  281. contor++;
  282. }
  283. }
  284. if(contor)
  285. {
  286. szMessage[strlen(szMessage)-1] = '.';
  287. ColorChat(id, szMessage);
  288. }
  289. else ColorChat(id, "Nu sunt jucatori !gON !ncu !gbeneficii !npe server.");
  290. }
  291. /* Colorchat Stock */
  292. stock ColorChat(const id,const input[], any:...)
  293. {
  294. new iNum = 1, iPlayers[32];
  295. static szMessage[191];
  296. vformat(szMessage, charsmax(szMessage),input, 3);
  297.  
  298. replace_all(szMessage, charsmax(szMessage), "!g", "^4");
  299. replace_all(szMessage, charsmax(szMessage), "!n", "^1");
  300. replace_all(szMessage, charsmax(szMessage), "!t", "^3");
  301.  
  302. if(id) iPlayers[0] = id
  303. else get_players(iPlayers, iNum, "ch");
  304.  
  305. for(new i = 0; i < iNum; i++)
  306. {
  307. if(is_user_connected(iPlayers[i]))
  308. {
  309. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayers[i]);
  310. write_byte(iPlayers[i]);
  311. write_string(szMessage);
  312. message_end();
  313. }
  314. }
  315. }
  316. /* Plugin END */
  317. public plugin_end()
  318. {
  319. ArrayDestroy(g_aBenefits);
  320. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement