HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <colorchat>
  4. #include <fakemeta>
  5. #include <fun>
  6. #include <hamsandwich>
  7.  
  8. #pragma semicolon 1
  9.  
  10. #define PLUGIN "KnifeSystem"
  11. #define VERSION "1.0.0"
  12. #define AUTHOR "Akosch:."
  13.  
  14. #define SLOT 32
  15. #define MAXLEVEL 50
  16. #define KNIVES 10
  17. #define ADDFLAG ADMIN_CVAR
  18. #define XPMIN 10
  19. #define XPMAX 20
  20.  
  21. enum _:eKnifeDatas
  22. {
  23. mName[32],
  24. mModel[32],
  25. mLevel,
  26. Float:mSpeed,
  27. Float:mGravity,
  28. Float:mDamage,
  29. mKnockback,
  30. mHealth,
  31. mVisibly
  32. };
  33.  
  34. enum _:ePlayerInfo
  35. {
  36. mPlayerLevel,
  37. mPlayerXp,
  38. mPlayerPoints
  39. };
  40.  
  41. new g_eKnives[KNIVES][eKnifeDatas], g_ePlayerInfo[SLOT + 1][ePlayerInfo];
  42. new g_iLevels[MAXLEVEL], g_iSelected[SLOT + 1], g_iTarget[SLOT + 1], g_pCvar[9], g_iOpening;
  43.  
  44. stock const g_sServerPrefix[] = {"[Információ]"};
  45. stock const g_sServerSaveFile[] = {"ServerDatas.ini"};
  46. stock const g_sPlayerSaveFile[] = {"PlayerDatas.ini"};
  47.  
  48. public plugin_init()
  49. {
  50. RegisterHam(Ham_Spawn, "player", "fwdSpawnPost", 1);
  51. RegisterHam(Ham_TakeDamage, "player", "fwdDamagePre", 0);
  52. RegisterHam(Ham_Killed, "player", "fwdDeathPost", 1);
  53.  
  54. register_event("CurWeapon", "eWeapon", "be", "1=1");
  55.  
  56. register_clcmd("drop", "MainMenu");
  57. register_clcmd("say /menu", "MainMenu");
  58. register_clcmd("POINT", "Give");
  59. register_clcmd("POINT_ADD", "Add");
  60.  
  61. g_pCvar[0] = register_cvar("kill_messages", "0");
  62. g_pCvar[1] = register_cvar("kill_xp", "1");
  63. g_pCvar[2] = register_cvar("kill_point", "2");
  64. g_pCvar[3] = register_cvar("hs_xp", "3");
  65. g_pCvar[4] = register_cvar("hs_point", "4");
  66. g_pCvar[5] = register_cvar("hp_prise", "100");
  67. g_pCvar[6] = register_cvar("armor_prise", "75");
  68. g_pCvar[7] = register_cvar("xp_prise", "150");
  69. g_pCvar[8] = register_cvar("gambling_prise", "125");
  70.  
  71. register_plugin(PLUGIN, VERSION, AUTHOR);
  72. LoadServerDatas();
  73. }
  74.  
  75. public plugin_end()
  76. {
  77. SaveServerDatas();
  78. }
  79.  
  80. public plugin_precache()
  81. {
  82. new sData[10][32], sBuffer[256], sFile[64], pFile, i;
  83.  
  84. get_configsdir(sFile, charsmax(sFile));
  85. format(sFile, charsmax(sFile), "%s/knives.txt", sFile);
  86.  
  87. pFile = fopen(sFile, "rt");
  88.  
  89. if(pFile)
  90. {
  91. while(!feof(pFile))
  92. {
  93. fgets(pFile, sBuffer, charsmax(sBuffer));
  94.  
  95. parse(sBuffer, sData[0], 31, sData[1], 31, sData[2], 31, sData[3], 31, sData[4], 31, sData[5], 31, sData[6], 31, sData[7], 31, sData[8], 31);
  96.  
  97. copy(g_eKnives[i][mName], 31, sData[0]);
  98.  
  99. if(ValidMdl(sData[1]))
  100. {
  101. copy(g_eKnives[i][mModel], 31, sData[1]);
  102. precache_model(g_eKnives[i][mModel]);
  103. }
  104. else
  105. copy(g_eKnives[i][mModel], 31, "models/v_knife.mdl");
  106.  
  107. g_eKnives[i][mLevel] = str_to_num(sData[2]);
  108. g_eKnives[i][mSpeed] = _:str_to_float(sData[3]);
  109. g_eKnives[i][mGravity] = _:str_to_float(sData[4]);
  110. g_eKnives[i][mDamage] = _:str_to_float(sData[5]);
  111. g_eKnives[i][mKnockback] = str_to_num(sData[6]);
  112. g_eKnives[i][mHealth] = str_to_num(sData[7]);
  113. g_eKnives[i][mVisibly] = str_to_num(sData[8]);
  114.  
  115. i++;
  116. }
  117. fclose(pFile);
  118. }
  119. else
  120. write_file(sFile, "^"Default^" ^"models/v_knife.mdl^" ^"0^" ^"250.0^" ^"1.0^" ^"1.0^" ^"0^" ^"0^" ^"255^"");
  121.  
  122. get_configsdir(sFile, charsmax(sFile));
  123. format(sFile, charsmax(sFile), "%s/levels.txt", sFile);
  124.  
  125. pFile = fopen(sFile, "rt");
  126.  
  127. if(pFile)
  128. {
  129. i = 0;
  130. while(!feof(pFile))
  131. {
  132. fgets(pFile, sBuffer, charsmax(sBuffer));
  133.  
  134. g_iLevels[i] = str_to_num(sBuffer);
  135. i++;
  136. }
  137. fclose(pFile);
  138. }
  139. else
  140. write_file(sFile, "1");
  141. }
  142.  
  143. public client_connect(id)
  144. {
  145. LoadPlayerDatas(id);
  146. }
  147.  
  148. public client_disconnect(id)
  149. {
  150. SavePlayerDatas(id);
  151. }
  152.  
  153. public fwdDamagePre(victim, inflictor, attacker, Float:damage)
  154. {
  155. if(is_user_alive(attacker) && is_user_alive(victim))
  156. {
  157. SetHamParamFloat(4, damage * g_eKnives[g_iSelected[attacker]][mDamage]);
  158. if(g_eKnives[g_iSelected[attacker]][mKnockback] > 0.0 && get_user_team(attacker) != get_user_team(victim))
  159. {
  160. new Float:fVec[3];
  161. new Float:fOldVelo[3];
  162. pev(victim, pev_velocity, fOldVelo);
  163. create_velocity_vector(victim, attacker, fVec);
  164. fVec[0] += fOldVelo[0];
  165. fVec[1] += fOldVelo[1];
  166. set_pev(victim, pev_velocity,fVec);
  167. }
  168. }
  169. }
  170.  
  171. public fwdSpawnPost(id)
  172. {
  173. set_user_health(id, get_user_health(id) + g_eKnives[g_iSelected[id]][mHealth]);
  174.  
  175. set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, g_eKnives[g_iSelected[id]][mVisibly]);
  176.  
  177. set_pev(id, pev_gravity, g_eKnives[g_iSelected[id]][mGravity]);
  178. }
  179.  
  180. public fwdDeathPost(iVictim, iKiller)
  181. {
  182. new sName[32];
  183. get_user_name(iVictim, sName, charsmax(sName));
  184.  
  185. if(get_pdata_int(iVictim, 75) == HIT_HEAD)
  186. {
  187. g_ePlayerInfo[iKiller][mPlayerXp] += get_pcvar_num(g_pCvar[3]);
  188. g_ePlayerInfo[iKiller][mPlayerPoints] += get_pcvar_num(g_pCvar[4]);
  189. if(get_pcvar_num(g_pCvar[0]) == 1)
  190. ColorChat(iKiller, GREEN, "%s ^3%i ^1xp-t és ^3%i ^1pontot kaptál ^3%s fejbelövéséért^4!", g_sServerPrefix, get_pcvar_num(g_pCvar[3]), get_pcvar_num(g_pCvar[4]), sName);
  191. }
  192. else if(iKiller != iVictim && get_user_team(iKiller) != get_user_team(iVictim))
  193. {
  194. g_ePlayerInfo[iKiller][mPlayerXp] += get_pcvar_num(g_pCvar[1]);
  195. g_ePlayerInfo[iKiller][mPlayerPoints] += get_pcvar_num(g_pCvar[2]);
  196. if(get_pcvar_num(g_pCvar[0]) == 1)
  197. ColorChat(iKiller, GREEN, "%s ^3%i ^1xp-t és ^3%i ^1pontot kaptál ^3%s megöléséért^4!", g_sServerPrefix, get_pcvar_num(g_pCvar[1]), get_pcvar_num(g_pCvar[2]), sName);
  198. }
  199.  
  200. LevelUp(iKiller);
  201. }
  202.  
  203. public eWeapon(id)
  204. {
  205. set_pev(id, pev_gravity, g_eKnives[g_iSelected[id]][mGravity]);
  206.  
  207. set_user_maxspeed(id, g_eKnives[g_iSelected[id]][mSpeed]);
  208.  
  209. if(get_user_weapon(id) == CSW_KNIFE)
  210. set_pev(id, pev_viewmodel2, g_eKnives[g_iSelected[id]][mModel]);
  211. }
  212.  
  213. public MainMenu(id)
  214. {
  215. g_iOpening++;
  216. new sMenu[64], pMenu;
  217. formatex(sMenu, charsmax(sMenu), "Főmenü \r[\wMegnyitások: %i\r]", g_iOpening);
  218. pMenu = menu_create(sMenu, "MainHandler");
  219.  
  220. menu_additem(pMenu, "Kések", "");
  221. menu_additem(pMenu, "Bolt", "");
  222. menu_additem(pMenu, "Ajándékozás", "");
  223. menu_additem(pMenu, "Játékosok", "");
  224. if(access(id, ADDFLAG))
  225. menu_additem(pMenu, "Addolás", "");
  226.  
  227. menu_setprop(pMenu, MPROP_EXIT, MEXIT_ALL);
  228. menu_setprop(pMenu, MPROP_BACKNAME, "Vissza");
  229. menu_setprop(pMenu, MPROP_NEXTNAME, "Tovább");
  230. menu_setprop(pMenu, MPROP_EXITNAME, "Kilépés");
  231.  
  232. menu_display(id, pMenu, 0);
  233.  
  234. return PLUGIN_HANDLED;
  235. }
  236.  
  237. public MainHandler(id, menu, item)
  238. {
  239. if(item == MENU_EXIT)
  240. {
  241. menu_destroy(menu);
  242.  
  243. return PLUGIN_HANDLED;
  244. }
  245.  
  246. switch(item)
  247. {
  248. case 0: KnifeMenu(id);
  249. case 1: ShopMenu(id);
  250. case 2: GiftMenu(id);
  251. case 3: PlayersMenu(id);
  252. case 4: AddMenu(id);
  253. }
  254.  
  255. menu_destroy(menu);
  256.  
  257. return PLUGIN_HANDLED;
  258. }
  259.  
  260. public KnifeMenu(id)
  261. {
  262. new sMenu[128], pMenu;
  263. formatex(sMenu, charsmax(sMenu), "Válaszd ki a késed!^n Szinted: %i | Tapasztalatod: %i / %i", g_ePlayerInfo[id][mPlayerLevel], g_ePlayerInfo[id][mPlayerXp], g_iLevels[g_ePlayerInfo[id][mPlayerLevel]]);
  264. pMenu = menu_create(sMenu, "KnifeHandler");
  265.  
  266. for(new i; i < KNIVES; i++)
  267. {
  268. formatex(sMenu, charsmax(sMenu), "%s \r[\w%i\r]", g_eKnives[i][mName], g_eKnives[i][mLevel]);
  269. menu_additem(pMenu, sMenu, "");
  270. }
  271.  
  272. menu_setprop(pMenu, MPROP_EXIT, MEXIT_ALL);
  273. menu_setprop(pMenu, MPROP_BACKNAME, "Vissza");
  274. menu_setprop(pMenu, MPROP_NEXTNAME, "Tovább");
  275. menu_setprop(pMenu, MPROP_EXITNAME, "Kilépés");
  276.  
  277. menu_display(id, pMenu, 0);
  278.  
  279. return PLUGIN_HANDLED;
  280. }
  281.  
  282. public KnifeHandler(id, menu, item)
  283. {
  284. if(item == MENU_EXIT)
  285. {
  286. menu_destroy(menu);
  287.  
  288. return PLUGIN_HANDLED;
  289. }
  290.  
  291. if(g_ePlayerInfo[id][mPlayerLevel] < g_eKnives[item][mLevel])
  292. {
  293. ColorChat(id, GREEN, "%s ^1Sajnos nincs elég szinted ehhez a késhez^4!", g_sServerPrefix);
  294.  
  295. menu_display(id, menu, 0);
  296. }
  297. else
  298. {
  299. g_iSelected[id] = item;
  300. strip_user_weapons(id);
  301. give_item(id, "weapon_knife");
  302. ColorChat(id, GREEN, "%s ^3%s ^1kiválasztva, sok sikert^4!", g_sServerPrefix, g_eKnives[item][mName]);
  303.  
  304. menu_destroy(menu);
  305. }
  306.  
  307. return PLUGIN_HANDLED;
  308. }
  309.  
  310. public ShopMenu(id)
  311. {
  312. new sMenu[64], pMenu;
  313. formatex(sMenu, charsmax(sMenu), "Bolt^nPontjaid: %i", g_ePlayerInfo[id][mPlayerPoints]);
  314. pMenu = menu_create(sMenu, "ShopHandler");
  315.  
  316. formatex(sMenu, charsmax(sMenu), "+50hp \r[\w%i\r]", get_pcvar_num(g_pCvar[5]));
  317. menu_additem(pMenu, sMenu, "");
  318. formatex(sMenu, charsmax(sMenu), "+50ap \r[\w%i\r]", get_pcvar_num(g_pCvar[6]));
  319. menu_additem(pMenu, sMenu, "");
  320. formatex(sMenu, charsmax(sMenu), "Random xp bónusz \r[\w%i\r]", get_pcvar_num(g_pCvar[7]));
  321. menu_additem(pMenu, sMenu, "");
  322. formatex(sMenu, charsmax(sMenu), "Szerencsejáték \r[\w%i\r]", get_pcvar_num(g_pCvar[8]));
  323. menu_additem(pMenu, sMenu, "");
  324.  
  325. menu_setprop(pMenu, MPROP_EXIT, MEXIT_ALL);
  326. menu_setprop(pMenu, MPROP_BACKNAME, "Vissza");
  327. menu_setprop(pMenu, MPROP_NEXTNAME, "Tovább");
  328. menu_setprop(pMenu, MPROP_EXITNAME, "Kilépés");
  329.  
  330. menu_display(id, pMenu, 0);
  331.  
  332. return PLUGIN_HANDLED;
  333. }
  334.  
  335. public ShopHandler(id, menu, item)
  336. {
  337. if(item == MENU_EXIT)
  338. {
  339. menu_destroy(menu);
  340.  
  341. return PLUGIN_HANDLED;
  342. }
  343.  
  344. if(g_ePlayerInfo[id][mPlayerPoints] < get_pcvar_num(g_pCvar[item + 5]))
  345. {
  346. ColorChat(id, GREEN, "%s ^1 Sajnos nincs elég pénzed erre^4!", g_sServerPrefix);
  347.  
  348. menu_display(id, menu, 0);
  349.  
  350. return PLUGIN_HANDLED;
  351. }
  352.  
  353. switch(item)
  354. {
  355. case 0:
  356. {
  357. ColorChat(id, GREEN, "%s ^1Sikeres vásárlás, kaptál +50hp-t^4!", g_sServerPrefix);
  358. set_user_health(id, get_user_health(id) + 50);
  359. }
  360. case 1:
  361. {
  362. ColorChat(id, GREEN, "%s ^1Sikeres vásárlás, kaptál +50ap-t^4!", g_sServerPrefix);
  363. set_user_armor(id, get_user_armor(id) + 50);
  364. }
  365. case 2:
  366. {
  367. new random_xp = random_num(XPMIN, XPMAX);
  368. ColorChat(id, GREEN, "%s ^1Sikeres vásárlás, kaptál %ixp-t^4!", g_sServerPrefix, random_xp);
  369. g_ePlayerInfo[id][mPlayerXp] += random_xp;
  370. }
  371. case 3:
  372. {
  373. switch(random(5))
  374. {
  375. case 0:
  376. {
  377. new random_hp = random_num(25, 75);
  378. ColorChat(id, GREEN, "%s ^1Sikeres vásárlás, kaptál %ihp-t^4!", g_sServerPrefix, random_hp);
  379. set_user_health(id, get_user_health(id) + random_hp);
  380. }
  381. case 1:
  382. {
  383. new random_ap = random_num(25, 75);
  384. ColorChat(id, GREEN, "%s ^1Sikeres vásárlás, kaptál %iap-t^4!", g_sServerPrefix, random_ap);
  385. set_user_armor(id, get_user_armor(id) + random_ap);
  386. }
  387. case 2:
  388. {
  389. new random_xp = random_num(XPMIN, XPMAX);
  390. ColorChat(id, GREEN, "%s ^1Sikeres vásárlás, kaptál %ixp-t^4!", g_sServerPrefix, random_xp);
  391. g_ePlayerInfo[id][mPlayerXp] += random_xp;
  392. }
  393. case 3:
  394. {
  395. new random_points = random_num(50,250);
  396. ColorChat(id, GREEN, "%s ^1Sikeres vásárlás, kaptál %iPontot^4!", g_sServerPrefix, random_points);
  397. g_ePlayerInfo[id][mPlayerPoints] += random_points;
  398. }
  399. case 4:
  400. {
  401. ColorChat(id, GREEN, "%s ^1Sajnos nem kaptál semmit^4!", g_sServerPrefix);
  402. }
  403. case 5:
  404. {
  405. ColorChat(id, GREEN, "%s ^1Sikeres vásárlás, kaptál +1 szintet ^4!", g_sServerPrefix);
  406. g_ePlayerInfo[id][mPlayerLevel] ++;
  407. g_ePlayerInfo[id][mPlayerXp] = 0;
  408. }
  409. }
  410. }
  411. }
  412. g_ePlayerInfo[id][mPlayerPoints] -= get_pcvar_num(g_pCvar[item + 5]);
  413.  
  414. menu_destroy(menu);
  415.  
  416. return PLUGIN_HANDLED;
  417. }
  418.  
  419. public GiftMenu(id)
  420. {
  421. new sMenu[64], sInfo[8], pMenu, iUser;
  422. formatex(sMenu, charsmax(sMenu), "Válaszd ki kinek akarsz pontot küldeni!^n Pontjaid: \r%i", g_ePlayerInfo[id][mPlayerPoints]);
  423. pMenu = menu_create(sMenu, "GiftHandler");
  424.  
  425. while(++iUser <= SLOT)
  426. {
  427. if(!is_user_connected(iUser))
  428. continue;
  429.  
  430. formatex(sMenu, charsmax(sMenu), "%s", get_player_name(iUser));
  431. num_to_str(iUser, sInfo, charsmax(sInfo));
  432. menu_additem(pMenu, sMenu, sInfo);
  433. }
  434.  
  435. menu_setprop(pMenu, MPROP_EXIT, MEXIT_ALL);
  436. menu_setprop(pMenu, MPROP_BACKNAME, "Vissza");
  437. menu_setprop(pMenu, MPROP_NEXTNAME, "Tovább");
  438. menu_setprop(pMenu, MPROP_EXITNAME, "Kilépés");
  439.  
  440. menu_display(id, pMenu, 0);
  441.  
  442. return PLUGIN_HANDLED;
  443. }
  444.  
  445. public GiftHandler(id, menu, item)
  446. {
  447. if(item == MENU_EXIT)
  448. {
  449. menu_destroy(menu);
  450.  
  451. return PLUGIN_HANDLED;
  452. }
  453.  
  454. new access, info[8], name[64], callback;
  455. menu_item_getinfo(menu, item, access, info, charsmax(info), name, charsmax(name), callback);
  456.  
  457. g_iTarget[id] = str_to_num(info);
  458.  
  459. if(!is_user_connected(g_iTarget[id]))
  460. {
  461. ColorChat(id, GREEN, "%s ^1Sajnos lecsatlakozott a kiválasztott játékos^4!", g_sServerPrefix);
  462.  
  463. menu_display(id, menu, 0);
  464.  
  465. return PLUGIN_HANDLED;
  466. }
  467.  
  468. client_cmd(id, "messagemode POINT");
  469.  
  470. menu_destroy(menu);
  471.  
  472. return PLUGIN_HANDLED;
  473. }
  474.  
  475. public PlayersMenu(id)
  476. {
  477. new sMenu[128], sInfo[8], pMenu, iUser;
  478. pMenu = menu_create("Itt láthatod a többiek szintjét stb.", "PlayersHandler");
  479.  
  480. while(++iUser <= SLOT)
  481. {
  482. if(!is_user_connected(iUser))
  483. continue;
  484.  
  485. formatex(sMenu, charsmax(sMenu), "%s \r[\wSzint: %i\r] \r[\wKés: %s\r]", get_player_name(iUser), g_ePlayerInfo[iUser][mPlayerLevel], g_eKnives[g_iSelected[iUser]][mName]);
  486. num_to_str(iUser, sInfo, charsmax(sInfo));
  487. menu_additem(pMenu, sMenu, sInfo);
  488. }
  489.  
  490. menu_setprop(pMenu, MPROP_EXIT, MEXIT_ALL);
  491. menu_setprop(pMenu, MPROP_BACKNAME, "Vissza");
  492. menu_setprop(pMenu, MPROP_NEXTNAME, "Tovább");
  493. menu_setprop(pMenu, MPROP_EXITNAME, "Kilépés");
  494.  
  495. menu_display(id, pMenu, 0);
  496.  
  497. return PLUGIN_HANDLED;
  498. }
  499.  
  500. public PlayersHandler(id, menu, item)
  501. {
  502. if(item == MENU_EXIT)
  503. {
  504. menu_destroy(menu);
  505.  
  506. return PLUGIN_HANDLED;
  507. }
  508.  
  509. new access, info[8], name[64], callback, key;
  510. menu_item_getinfo(menu, item, access, info, charsmax(info), name, charsmax(name), callback);
  511.  
  512. key = str_to_num(info);
  513.  
  514. if(!is_user_connected(key))
  515. {
  516. ColorChat(id, GREEN, "%s ^1Sajnos lecsatlakozott a kiválasztott játékos^4!", g_sServerPrefix);
  517.  
  518. menu_display(id, menu, 0);
  519.  
  520. return PLUGIN_HANDLED;
  521. }
  522.  
  523. ColorChat(id, GREEN, "%s ^1Név: ^4%s ^1Kés: ^3%s ^1Szint: ^3%i ^1Élet: ^3%i", g_sServerPrefix, get_player_name(key), g_eKnives[g_iSelected[key]][mName], g_ePlayerInfo[key][mPlayerLevel], pev(key, pev_health));
  524.  
  525. menu_destroy(menu);
  526.  
  527. return PLUGIN_HANDLED;
  528. }
  529.  
  530. public AddMenu(id)
  531. {
  532. new sMenu[64], sInfo[8], pMenu, iUser;
  533. formatex(sMenu, charsmax(sMenu), "Válaszd ki kinek akarsz pontot adni!", g_ePlayerInfo[id][mPlayerPoints]);
  534. pMenu = menu_create(sMenu, "AddHandler");
  535.  
  536. while(++iUser <= SLOT)
  537. {
  538. if(!is_user_connected(iUser))
  539. continue;
  540.  
  541. formatex(sMenu, charsmax(sMenu), "%s", get_player_name(iUser));
  542. num_to_str(iUser, sInfo, charsmax(sInfo));
  543. menu_additem(pMenu, sMenu, sInfo);
  544. }
  545.  
  546. menu_setprop(pMenu, MPROP_EXIT, MEXIT_ALL);
  547. menu_setprop(pMenu, MPROP_BACKNAME, "Vissza");
  548. menu_setprop(pMenu, MPROP_NEXTNAME, "Tovább");
  549. menu_setprop(pMenu, MPROP_EXITNAME, "Kilépés");
  550.  
  551. menu_display(id, pMenu, 0);
  552.  
  553. return PLUGIN_HANDLED;
  554. }
  555.  
  556. public AddHandler(id, menu, item)
  557. {
  558. if(item == MENU_EXIT)
  559. {
  560. menu_destroy(menu);
  561.  
  562. return PLUGIN_HANDLED;
  563. }
  564.  
  565. new access, info[8], name[64], callback;
  566. menu_item_getinfo(menu, item, access, info, charsmax(info), name, charsmax(name), callback);
  567.  
  568. g_iTarget[id] = str_to_num(info);
  569.  
  570. if(!is_user_connected(g_iTarget[id]))
  571. {
  572. ColorChat(id, GREEN, "%s ^1Sajnos lecsatlakozott a kiválasztott játékos^4!", g_sServerPrefix);
  573.  
  574. menu_display(id, menu, 0);
  575.  
  576. return PLUGIN_HANDLED;
  577. }
  578.  
  579. client_cmd(id, "messagemode POINT_ADD");
  580.  
  581. menu_destroy(menu);
  582.  
  583. return PLUGIN_HANDLED;
  584. }
  585.  
  586. public Give(id)
  587. {
  588. new sData[192], num;
  589. read_args(sData, charsmax(sData));
  590. remove_quotes(sData);
  591.  
  592. if(is_str_num(sData))
  593. {
  594. num = str_to_num(sData);
  595. if(g_ePlayerInfo[id][mPlayerPoints] > num)
  596. {
  597. g_ePlayerInfo[id][mPlayerPoints] -= num;
  598. g_ePlayerInfo[g_iTarget[id]][mPlayerPoints] += num;
  599. new sName[32];
  600. get_user_name(g_iTarget[id], sName, charsmax(sName));
  601. ColorChat(id, GREEN, "%s ^1Sikeres ajándékozás, ^3%i ^1pont elküdve ^3%s ^1-nak^4!", g_sServerPrefix, num, sName);
  602. ColorChat(g_iTarget[id], GREEN, "%s ^1Kaptál %i pontot %s-tól!", g_sServerPrefix, get_player_name(id));
  603. }
  604. else
  605. ColorChat(id, GREEN, "%s ^1Nincs elég pontod, hogy ennyit küldj^4!", g_sServerPrefix);
  606. }
  607. else
  608. ColorChat(id, GREEN, "%s ^1Nem csak számok szerepelnek a beírt szövegben^4!", g_sServerPrefix);
  609.  
  610. return PLUGIN_HANDLED;
  611. }
  612.  
  613. public Add(id)
  614. {
  615. new sData[192], num;
  616. read_args(sData, charsmax(sData));
  617. remove_quotes(sData);
  618.  
  619. if(is_str_num(sData))
  620. {
  621. num = str_to_num(sData);
  622. if(num)
  623. {
  624. g_ePlayerInfo[g_iTarget[id]][mPlayerPoints] += num;
  625. new sName[32];
  626. get_user_name(g_iTarget[id], sName, charsmax(sName));
  627. ColorChat(id, GREEN, "%s ^1Sikeres addolás! %i pont elküdve %s -nak.", g_sServerPrefix, num, sName);
  628. ColorChat(g_iTarget[id], GREEN, "%s ^1Kaptál %i pontot %s-tól!", g_sServerPrefix, get_player_name(id));
  629. }
  630. else
  631. ColorChat(id, GREEN, "%s ^1 0 pontot fölösleges küldeni^4!", g_sServerPrefix);
  632. }
  633. else
  634. ColorChat(id, GREEN, "%s ^1Nem csak számok szerepelnek a beírt szövegben^4!", g_sServerPrefix);
  635.  
  636. return PLUGIN_HANDLED;
  637. }
  638.  
  639. public LevelUp(id)
  640. {
  641. if(!is_user_connected(id))
  642. return PLUGIN_HANDLED;
  643.  
  644. if(g_ePlayerInfo[id][mPlayerLevel] < MAXLEVEL)
  645. while(g_ePlayerInfo[id][mPlayerXp] > g_iLevels[g_ePlayerInfo[id][mPlayerLevel]])
  646. {
  647. g_ePlayerInfo[id][mPlayerLevel]++;
  648. if(g_ePlayerInfo[id][mPlayerLevel] == MAXLEVEL)
  649. {
  650. new sName[32];
  651. get_user_name(id, sName, charsmax(sName));
  652. ColorChat(0, GREEN, "%s ^3%s ^1elérte a maximum szintet^4!", g_sServerPrefix, sName);
  653. break;
  654. }
  655. else
  656. ColorChat(id, GREEN, "%s ^1Gratulálunk szintet léptél, jelenlegi szinted: %i^4!", g_sServerPrefix, g_ePlayerInfo[id][mPlayerLevel]);
  657. }
  658.  
  659. return PLUGIN_CONTINUE;
  660. }
  661.  
  662. public SaveServerDatas()
  663. {
  664. new sFile[128], pFile;
  665. get_configsdir(sFile, charsmax(sFile));
  666. format(sFile, charsmax(sFile), "%s/%s", sFile, g_sServerSaveFile);
  667.  
  668. pFile = fopen(sFile, "wt");
  669.  
  670. if(pFile)
  671. {
  672. fprintf(pFile, "%i", g_iOpening);
  673. fclose(pFile);
  674. }
  675.  
  676. return PLUGIN_CONTINUE;
  677. }
  678.  
  679. public LoadServerDatas()
  680. {
  681. new sLine[192], sFile[128], pFile;
  682. get_configsdir(sFile, charsmax(sFile));
  683. format(sFile, charsmax(sFile), "%s/%s", sFile, g_sServerSaveFile);
  684.  
  685. pFile = fopen(sFile, "rt");
  686.  
  687. if(pFile)
  688. {
  689. fgets(pFile, sLine, charsmax(sLine));
  690.  
  691. g_iOpening = str_to_num(sLine);
  692. }
  693. else
  694. {
  695. formatex(sLine, charsmax(sLine), "%i", g_iOpening);
  696. write_file(sFile, sLine);
  697. }
  698.  
  699. return PLUGIN_CONTINUE;
  700. }
  701.  
  702. public SavePlayerDatas(id)
  703. {
  704. if(!is_user_connected(id))
  705. return PLUGIN_HANDLED;
  706.  
  707. new sFile[64], pFile;
  708. get_configsdir(sFile, charsmax(sFile));
  709. format(sFile, charsmax(sFile), "%s/%s", sFile, g_sPlayerSaveFile);
  710.  
  711. pFile = fopen(sFile, "rt");
  712.  
  713. if(pFile)
  714. {
  715. new sLine[128], sSaveLine[128], sName[32], sLineName[32], LineNum, bool:bFound;
  716. get_user_name(id, sName, charsmax(sName));
  717.  
  718. while(!feof(pFile))
  719. {
  720. fgets(pFile, sLine, charsmax(sLine));
  721.  
  722. parse(sLine, sLineName, charsmax(sLineName));
  723.  
  724. if(equal(sLineName, sName))
  725. {
  726. formatex(sSaveLine, charsmax(sSaveLine), "^"%s^" %i %i %i %i", sName, g_ePlayerInfo[id][mPlayerLevel], g_ePlayerInfo[id][mPlayerXp], g_ePlayerInfo[id][mPlayerPoints], g_iSelected[id]);
  727. write_file(sFile, sSaveLine, LineNum);
  728. bFound = true;
  729. return PLUGIN_HANDLED;
  730. }
  731.  
  732. LineNum++;
  733. }
  734.  
  735. if(!bFound)
  736. {
  737. formatex(sSaveLine, charsmax(sSaveLine), "^"%s^" %i %i %i %i", sName, g_ePlayerInfo[id][mPlayerLevel], g_ePlayerInfo[id][mPlayerXp], g_ePlayerInfo[id][mPlayerPoints], g_iSelected[id]);
  738. write_file(sFile, sSaveLine);
  739. return PLUGIN_HANDLED;
  740. }
  741. fclose(pFile);
  742. }
  743. return PLUGIN_CONTINUE;
  744. }
  745.  
  746. public LoadPlayerDatas(id)
  747. {
  748.  
  749. new sFile[64], pFile;
  750. get_configsdir(sFile, charsmax(sFile));
  751. format(sFile, charsmax(sFile), "%s/%s", sFile, g_sPlayerSaveFile);
  752.  
  753. pFile = fopen(sFile, "rt");
  754.  
  755. if(pFile)
  756. {
  757. new sLine[128],sData[5][32], sName[32], sLineName[32];
  758. get_user_name(id, sName, charsmax(sName));
  759.  
  760. while(!feof(pFile))
  761. {
  762. fgets(pFile, sLine, charsmax(sLine));
  763.  
  764. parse(sLine, sLineName, charsmax(sLineName));
  765.  
  766. remove_quotes(sLineName);
  767.  
  768. if(equal(sLineName, sName))
  769. {
  770. parse(sLine, sData[0], 31, sData[1], 31, sData[2], 31, sData[3], 31, sData[4], 31);
  771.  
  772. g_ePlayerInfo[id][mPlayerLevel] = str_to_num(sData[1]);
  773. g_ePlayerInfo[id][mPlayerXp] = str_to_num(sData[2]);
  774. g_ePlayerInfo[id][mPlayerPoints] = str_to_num(sData[3]);
  775. g_iSelected[id] = str_to_num(sData[4]);
  776.  
  777. return PLUGIN_HANDLED;
  778. }
  779. }
  780. fclose(pFile);
  781. }
  782. else
  783. write_file(sFile, "");
  784.  
  785. return PLUGIN_CONTINUE;
  786. }
  787.  
  788. stock get_player_name(index)
  789. {
  790. new sName[32];
  791. get_user_name(index, sName, charsmax(sName));
  792. return sName;
  793. }
  794.  
  795. stock bool:ValidMdl(Mdl[])
  796. return (containi(Mdl, ".mdl") != -1);
  797.  
  798. stock create_velocity_vector(victim,attacker,Float:velocity[3])
  799. {
  800. if(!is_user_alive(victim) || !is_user_alive(attacker))
  801. return 0;
  802.  
  803. new Float:vicorigin[3];
  804. new Float:attorigin[3];
  805. pev(victim, pev_origin, vicorigin);
  806. pev(attacker, pev_origin, attorigin);
  807.  
  808. new Float:origin2[3];
  809. origin2[0] = vicorigin[0] - attorigin[0];
  810. origin2[1] = vicorigin[1] - attorigin[1];
  811.  
  812. new Float:largestnum = 0.0;
  813.  
  814. if(floatabs(origin2[0])>largestnum) largestnum = floatabs(origin2[0]);
  815. if(floatabs(origin2[1])>largestnum) largestnum = floatabs(origin2[1]);
  816.  
  817. origin2[0] /= largestnum;
  818. origin2[1] /= largestnum;
  819.  
  820. velocity[0] = ( origin2[0] * (g_eKnives[g_iSelected[attacker]][mKnockback] * 3000) ) / get_distance_f(vicorigin, attorigin);
  821. velocity[1] = ( origin2[1] * (g_eKnives[g_iSelected[attacker]][mKnockback] * 3000) ) / get_distance_f(vicorigin, attorigin);
  822. if(velocity[0] <= 20.0 || velocity[1] <= 20.0)
  823. velocity[2] = random_float(200.0 , 275.0);
  824.  
  825. return 1;
  826. }