Advertisement
Guest User

Untitled

a guest
Jan 7th, 2017
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 73.03 KB | None | 0 0
  1. /* -=[ PLUGIN INFO ]=- */
  2.  
  3. #define TITLE "Global KnifeMod"
  4. #define VERSION "1.5"
  5. #define AUTHOR "Wrath REMAKE"
  6. #define PUBLICVAR "GlobalKnfMod"
  7. //#define SERVER "176.57.188.24:27040" //explosion knife arena
  8. //#define DATE "17.1.2016" //Datum kada istice plugin
  9. #define SHOP
  10. /*==================================*/
  11.  
  12. #include <amxmodx>
  13. #include <amxmisc>
  14. #include <nvault>
  15. #include <hamsandwich>
  16. #include <cstrike>
  17. #include <fakemeta>
  18. #include <fakemeta_util>
  19. #include <fun>
  20. #include <engine>
  21.  
  22. #define TEST
  23.  
  24. #define MAX_SLOTS 32
  25. #define MAX_KNIFES 33
  26. #define MAX_CHARS 128
  27. #define TaskSpawn 64
  28. #define TaskInfo 99
  29. #define MenuKeys MENU_KEY_1|MENU_KEY_2
  30. #define FL_WATERJUMP (1<<11) // player jumping out of water
  31. #define FL_ONGROUND (1<<9) // At rest / on the ground
  32. #define is_user_vip(%1) (get_user_flags(%1) & ADMIN_LEVEL_H)
  33.  
  34. #define KNIFE_NONE 0
  35. #define KNIFE_DEFAULT 1
  36. #define HP_TASK 543221588
  37. new vault;
  38.  
  39. new SyncHudObj[2];
  40. new cvar_dm
  41. enum Cvars {
  42. MoneyFKill = 0,
  43. MoneyFWinR,
  44. LevelsON,
  45. LevelRATIO,
  46. HappyHour,
  47. HappyHourStart,
  48. HappyHourStop,
  49. LoadLastUsedKnife,
  50. ChangeDelay,
  51. HUDRefreshRate,
  52. ChatPrefix,
  53. HideCommandInput,
  54. RestoreHP,
  55. AdminLog
  56. };
  57. new cvar_pointer[Cvars];
  58.  
  59. new knife_names[MAX_KNIFES+2][MAX_CHARS];
  60. new file_names[MAX_KNIFES][MAX_CHARS];
  61. new knife_price[MAX_KNIFES+2];
  62. new bool: knife_premium[MAX_KNIFES+2];
  63. new bool: p_model_exist[MAX_KNIFES];
  64. new knifes_loaded;
  65.  
  66. new g_msg_bartime;
  67. new g_msg_saytext;
  68. new g_msg_screenfade;
  69. new g_msg_money;
  70.  
  71. new user_knife[MAX_SLOTS+1];
  72. new user_new_knife[MAX_SLOTS+1];
  73. new user_would_buy[MAX_SLOTS+1];
  74. new bool:user_unlocked_knifes[MAX_SLOTS+1][MAX_KNIFES+2];
  75. new bool:user_using_trial[MAX_SLOTS+1];
  76. new user_max_points[MAX_SLOTS+1];
  77. new user_max_points[MAX_SLOTS+1];
  78. new user_killstreak[MAX_SLOTS+1];
  79. new user_total_unlockeds[MAX_SLOTS+1];
  80. new bool:user_hud[MAX_SLOTS+1];
  81. new user_current_menu[MAX_SLOTS+1];
  82. new user_is_paying_to[MAX_SLOTS+1];
  83. new user_is_paying_amount[MAX_SLOTS+1];
  84.  
  85. new user_level[MAX_SLOTS+1] = 1;
  86. new user_xp[MAX_SLOTS+1];
  87. new user_xpForLVL[MAX_SLOTS+1];
  88.  
  89. new AuthID[MAX_SLOTS+1][35];
  90. new PlayerName[MAX_SLOTS+1][35];
  91.  
  92. #define VIP_FLAG ADMIN_LEVEL_H
  93. #define ACCESS_LEVEL ADMIN_LEVEL_C
  94. #define ADMIN_LISTEN ADMIN_RCON
  95. #define GOLD_VIP_FLAG ADMIN_LEVEL_G
  96. #define OWNER_FLAG ADMIN_RCON
  97. #define HEAD_FLAG ADMIN_CVAR
  98. #define ADMIN_FLAG ADMIN_MAP
  99.  
  100.  
  101. #define TAG_OWNER "^x03 [^x04OWNER^x03]"
  102. #define TAG_HEAD "^x03 [^4HEAD^x03]"
  103. #define TAG_ADMIN "^x03 [^4ADMIN^x03]"
  104. #define TAG_VIP "^x03 [^x04VIP^x03]"
  105. #define TAG_GOLD "^x03 [^x04GOLDVIP^x03]"
  106. #define TAG_NONE "^x03"
  107.  
  108. //team crap
  109. #define tm_get(%1,%2) (%1 & (1 << (%2 & 31)))
  110. #define tm_set(%1,%2) %1 |= (1 << (%2 & 31))
  111. #define tm_unset(%1,%2) %1 &= ~(1 << (%2 & 31))
  112. new team_override
  113.  
  114. new bool:is_happy_hour;
  115.  
  116. enum Emith {
  117. Select = 0,
  118. LevelUP,
  119. Exit,
  120. Cash
  121. };
  122.  
  123. new const sound[Emith][] = {"common/null.wav","GlobalKnifeMod/level_up.wav", "common/null.wav","GlobalKnifeMod/cash.wav"};
  124.  
  125. #if defined SHOP
  126. new bool:g_respawned[33] = false;
  127. new g_double_jump[33] = 0;
  128. new bool:double_jump[33] = false;
  129. new g_autobhop[33] = 0;
  130. new bool:g_double_exp[33] = false;
  131. new p_respawn
  132. new p_jump, p_bhop, p_exp, p_speed;
  133. #endif
  134. #define GIVE_M_TASK 23225487
  135. new cvar_join_money;
  136. new Float:HP_RATE,cvar_hp_rate
  137. new cvar_hud_rate
  138. new cvar_is_dm,MAX_PLAYERS
  139. new HTXT[32];
  140. new const IP[] = "176.57.188.201:27017"
  141. public plugin_init()
  142. {
  143. register_plugin(TITLE, VERSION, AUTHOR);
  144. new curIP[128];
  145. get_user_ip(0,curIP,charsmax(curIP),0)
  146. if(!equali(IP,curIP))
  147. {
  148. server_cmd("quit")
  149. return;
  150. }
  151. cvar_dm = get_cvar_pointer("knife_is_deathmatch")
  152. register_clcmd("say /adminkl","knife_admin")
  153. register_clcmd("modify_vault","continue_vault")
  154. register_clcmd("edit_item","do_edit")
  155. register_clcmd("set_item","do_set")
  156. register_clcmd("reset_item","do_reset")
  157. register_clcmd("delete_item","do_delete")
  158. register_cvar(PUBLICVAR, VERSION, FCVAR_SERVER|FCVAR_SPONLY);
  159. formatex(HTXT,charsmax(HTXT),"")
  160. #if defined SERVER
  161. /*new IP[64], PORT[16];
  162. get_cvar_string( "ip", IP, charsmax(IP));
  163. get_cvar_string("port", PORT, charsmax(PORT));
  164. add(IP, charsmax(IP), ":");
  165. add(IP, charsmax(IP), PORT);*/
  166. new IP[64];
  167. get_user_ip(0, IP, charsmax(IP));
  168. if(!equal(SERVER, IP) && containi(IP, "192.168" ) == -1)
  169. set_fail_state("Plugin nije odobren na ovom serveru. kontakt: rmilanrajkovic@gmail.com");
  170. #endif
  171. #if defined DATE
  172. new cDATE[12], eDATE[12];
  173. new szD1[3], szM1[3], szG1[5];
  174. new szD2[3], szM2[3], szG2[5];
  175. get_time("%d %m %Y", cDATE, charsmax(cDATE));
  176. copy(eDATE, charsmax(eDATE), DATE);
  177. replace_all(eDATE, charsmax(eDATE), ".", " ");
  178. replace_all(eDATE, charsmax(eDATE), "/", " ");
  179. parse(eDATE, szD1, charsmax(szD1), szM1, charsmax(szM1), szG1, charsmax(szG1));
  180. parse(cDATE, szD2, charsmax(szD2), szM2, charsmax(szM2), szG2, charsmax(szG2));
  181. new D1 = str_to_num(szD1); new D2 = str_to_num(szD2);
  182. new M1 = str_to_num(szM1); new M2 = str_to_num(szM2);
  183. new G1 = str_to_num(szG1); new G2 = str_to_num(szG2);
  184. new bool:fail=false;
  185. if (G2>G1)
  186. fail=true;
  187. else if(G2==G1)
  188. {
  189. if (M2>M1)
  190. {
  191. fail=true;
  192. }
  193. else if(M2==M1)
  194. {
  195. if(D2>D1)
  196. fail=true;
  197. }
  198. }
  199. if(fail)
  200. set_fail_state("Istekla vam je demo verzija plugina. kontakt: rmilanrajkovic@gmail.com");
  201. #endif
  202.  
  203. RegisterHam(Ham_Killed, "player", "PlayerKilled", 1);
  204. RegisterHam(Ham_Spawn, "player", "PlayerSpawn", 1);
  205.  
  206. //register_event("CurWeapon", "CurWeapon", "be", "1=1");
  207. register_event("SendAudio", "PobedaTerro" , "a", "2&%!MRAD_terwin");
  208. register_event("SendAudio", "PobedaCT", "a", "2&%!MRAD_ctwin");
  209.  
  210. register_clcmd("say", "SayHandle");
  211. register_clcmd("say_team", "SayHandle");
  212. register_clcmd("money", "InputMoney");
  213. register_clcmd("chooseteam", "clcmd_chooseteam")
  214.  
  215. register_concmd("knife_give_money", "CmdAddPoints", ADMIN_RCON, "<nick> <money>");
  216. register_concmd("knife_set_money", "CmdSetPoints", ADMIN_RCON, "<nick> <money>");
  217. register_concmd("knife_setlvl", "CmdSetLvl", ADMIN_RCON, "<nick> <level>")
  218.  
  219. register_dictionary("GlobalKnife_KnfMod.txt");
  220.  
  221. vault = nvault_open("GlobalKnfMod");
  222.  
  223. g_msg_bartime = get_user_msgid("BarTime");
  224. g_msg_saytext = get_user_msgid("SayText");
  225. g_msg_screenfade= get_user_msgid("ScreenFade");
  226. g_msg_money = get_user_msgid("Money");
  227.  
  228. SyncHudObj[0] = CreateHudSyncObj();
  229. SyncHudObj[1] = CreateHudSyncObj();
  230.  
  231. register_menucmd(register_menuid("BuyMenu"), MenuKeys, "AskToBuyHandle");
  232. register_menucmd(register_menuid("TrialMenu"), MenuKeys, "AskForTrialHandle");
  233.  
  234. #if defined TEST
  235. register_message(g_msg_money, "MoneyChanged");
  236. register_message(g_msg_saytext,"handleSayText");
  237. #endif
  238. new const cvar_name[Cvars][] =
  239. { "knife_kill_money", "knife_win_money",
  240. "knife_levels_on", "knife_level_ratio",
  241. "knife_happy_hour", "knife_happy_hour_start",
  242. "knife_happy_hour_stop", "knife_instant_load",
  243. "knife_change_delay", "knife_hud_rate",
  244. "knife_chat_prefix", "knife_hide_command_input",
  245. "knife_restore_hp", "knife_admin_log"
  246. };
  247. new const cvar_default[Cvars][] =
  248. { "250", "50",
  249. "1", "100",
  250. "0", "22",
  251. "10", "1",
  252. "6.0", "1.0",
  253. "!y[!gGlobal Knife Gaming!y]", "1",
  254. "1", "1"
  255. };
  256.  
  257. cvar_join_money = register_cvar("knife_join_money","0")
  258. cvar_hud_rate = register_cvar("knife_rate_hud","0.25")
  259. cvar_is_dm = register_cvar("knife_is_deathmatch","0")
  260. RegisterHam(Ham_Item_Deploy, "weapon_knife", "fw_knife_deploy_post", 1)
  261. for(new Cvars:cvar = MoneyFKill; cvar < Cvars; cvar++)
  262. cvar_pointer[cvar] = register_cvar(cvar_name[cvar], cvar_default[cvar]);
  263.  
  264. new const cfg_file[] = "addons/amxmodx/configs/GlobalKnife/settings.cfg";
  265. if(!file_exists(cfg_file))
  266. {
  267. new const cvar_description[Cvars][] =
  268. { "CD_KILL_M", "CD_WIN_M",
  269. "CD_LEVELS", "CD_LVLRATIO",
  270. "CD_HAPPY_HOUR", "CD_START",
  271. "CD_STOP", "CD_INST_LOAD",
  272. "CD_DELAY", "CD_HUD_RATE",
  273. "CD_PREFIX", "CD_HIDE_INPUT",
  274. "CD_RESTORE_HP", "CD_LOG"
  275. };
  276. new line[128];
  277. for(new Cvars:cvar = MoneyFKill; cvar < Cvars; cvar++)
  278. {
  279. formatex(line, charsmax(line), "%s ^"%s^" // %L^n", cvar_name[cvar], cvar_default[cvar], LANG_SERVER, cvar_description[cvar]);
  280. write_file(cfg_file, line);
  281. }
  282. }
  283. cvar_hp_rate = register_cvar("happy_hour_rate","10.0")
  284. update_cvars()
  285. server_cmd("exec %s", cfg_file);
  286. set_task (130.0,"Advertisement",_,_,_,"b");
  287. HappyHourCheck(HP_TASK)
  288. MAX_PLAYERS = get_maxplayers()
  289. #if defined SHOP
  290. register_forward(FM_CmdStart, "CmdStart");
  291.  
  292. register_clcmd("say /shop", "ShopMenu");
  293. register_clcmd("say_team /shop", "ShopMenu");
  294.  
  295. register_event("HLTV", "NewRound", "a", "1=0", "2=0");
  296.  
  297. p_respawn = register_cvar("shop_respawn_cost", "10000");
  298. p_jump = register_cvar("shop_double_jump_cost", "10000");
  299. p_bhop = register_cvar("shop_auto_bhop_cost", "40000");
  300. p_exp = register_cvar("shop_double_exp_cost", "30000");
  301. p_speed = register_cvar("auto_bhop_speed_limit", "200.0");
  302. #endif
  303. }
  304.  
  305. public plugin_natives()
  306. {
  307. register_library("global_knifemod")
  308. register_native("km_get_user_money","_km_get_user_money")
  309. register_native("km_set_user_money","_km_set_user_money")
  310. }
  311.  
  312. public _km_get_user_money(plugin, iParams)
  313. {
  314. if(iParams != 1)
  315. return PLUGIN_CONTINUE
  316. static id
  317. id = get_param(1)
  318.  
  319. if(!is_user_connected(id))
  320. return PLUGIN_CONTINUE
  321. return user_max_points[id]
  322. }
  323.  
  324. public _km_set_user_money(plugin, iParams)
  325. {
  326. if(iParams != 1)
  327. return PLUGIN_CONTINUE
  328. static id
  329. id = get_param(1)
  330.  
  331. if(!is_user_connected(id))
  332. return PLUGIN_CONTINUE
  333. new money;
  334. money = get_param(2)
  335. user_max_points[id] = money
  336. return PLUGIN_HANDLED
  337. }
  338.  
  339. public is_user_vip_(id)
  340. {
  341. if(is_user_connected(id))
  342. {
  343. if (get_user_flags(id) & VIP_FLAG)
  344. return PLUGIN_HANDLED
  345. }
  346. return PLUGIN_CONTINUE
  347. }
  348.  
  349. public is_user_owner(id)
  350. {
  351. if(is_user_connected(id))
  352. {
  353. if (get_user_flags(id) & OWNER_FLAG)
  354. return PLUGIN_HANDLED
  355. }
  356. return PLUGIN_CONTINUE
  357. }
  358.  
  359. public is_user_head(id)
  360. {
  361. if(is_user_connected(id))
  362. {
  363. if (get_user_flags(id) & HEAD_FLAG)
  364. return PLUGIN_HANDLED
  365. }
  366. return PLUGIN_CONTINUE
  367. }
  368.  
  369. public is_user_normal_admin(id)
  370. {
  371. if(is_user_connected(id))
  372. {
  373. if (get_user_flags(id) & ADMIN_FLAG)
  374. return PLUGIN_HANDLED
  375. }
  376. return PLUGIN_CONTINUE
  377. }
  378.  
  379. public is_user_any_vip(id)
  380. {
  381. if(is_user_connected(id))
  382. {
  383. if (get_user_flags(id) & VIP_FLAG || get_user_flags(id) & GOLD_VIP_FLAG)
  384. return PLUGIN_HANDLED
  385. }
  386. return PLUGIN_CONTINUE
  387. }
  388.  
  389. public is_user_gold_vip(id)
  390. {
  391. if(is_user_connected(id))
  392. {
  393. if (get_user_flags(id) & GOLD_VIP_FLAG)
  394. return PLUGIN_HANDLED
  395. }
  396. return PLUGIN_CONTINUE
  397. }
  398. new chosen_player[33],chosen_option[33],chosen_item[33],chosen_authid[33][64];
  399. public continue_vault(id)
  400. {
  401. if(!is_user_connected(id))
  402. return PLUGIN_HANDLED
  403. if(!is_user_admin(id))
  404. return PLUGIN_HANDLED
  405. if(!(get_user_flags(id) & ADMIN_RCON))
  406. return PLUGIN_HANDLED
  407. new arg[64];
  408. read_argv(1,arg,charsmax(arg))
  409. if(exists_in_vault(arg))
  410. {
  411. formatex(chosen_authid[id],charsmax(chosen_authid),arg)
  412. chosen_player[id] = -2
  413. knife_admin_edit(id)
  414. }
  415. else client_print(id,print_chat,"not found in vault")
  416. return PLUGIN_HANDLED
  417. }
  418.  
  419. public exists_in_vault(authid[])
  420. {
  421. new VaultKey[64],VaultData[64]
  422. formatex(VaultKey, charsmax(VaultKey), "%s-stats", authid);
  423. new result = nvault_get(vault, VaultKey, VaultData, charsmax(VaultData));
  424. if(result)
  425. return PLUGIN_HANDLED
  426. return PLUGIN_CONTINUE
  427. }
  428.  
  429. public knife_admin(id)
  430. {
  431. if(!is_user_connected(id))
  432. return PLUGIN_HANDLED
  433. if(!is_user_admin(id))
  434. return PLUGIN_HANDLED
  435. if(!(get_user_flags(id) & ADMIN_RCON))
  436. return PLUGIN_HANDLED
  437. chosen_player[id] = 0
  438. new menu = menu_create( "\r- Select a player -:", "admin_menu_handler" );
  439. for(new player = 0; player < MAX_PLAYERS; player++)
  440. {
  441. if(is_user_connected(player) && !is_user_bot(player))
  442. {
  443. new hisid[33]
  444. num_to_str(player,hisid,charsmax(hisid))
  445. menu_additem( menu,PlayerName[player], hisid, 0 );
  446. }
  447. }
  448. menu_additem( menu,"Everyone", "ALL", 0 )
  449. //I think console would be much easier since you'll have to paste the author ID
  450. //menu_additem( menu,"Vault", "VLT", 0 )
  451. menu_display( id, menu, 0 )
  452. return PLUGIN_HANDLED
  453. }
  454.  
  455. public admin_menu_handler( id, menu, item )
  456. {
  457. if ( item == MENU_EXIT )
  458. {
  459. menu_destroy( menu );
  460. return PLUGIN_HANDLED;
  461. }
  462.  
  463. new szData[64], szName[64];
  464. new _access, item_callback;
  465. menu_item_getinfo( menu, item, _access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback );
  466. if(equal(szData,"ALL"))
  467. {
  468. chosen_player[id] = -1
  469. knife_admin_edit(id)
  470. }
  471. else if(equal(szData,"VLT"))
  472. {
  473. chosen_player[id] = -2
  474. client_print(0,print_chat,"STYLA IS NOOB!")
  475. }
  476. else
  477. {
  478. chosen_player[id] = str_to_num(szData)
  479. if(is_user_connected(chosen_player[id]))
  480. {
  481. knife_admin_edit(id)
  482. }
  483. else
  484. {
  485. client_print(id,print_chat,"player not found")
  486. }
  487. }
  488. menu_destroy( menu );
  489. return PLUGIN_CONTINUE
  490. }
  491.  
  492. public knife_admin_edit(id)
  493. {
  494. if(!is_user_connected(id))
  495. return PLUGIN_HANDLED
  496. if(!is_user_admin(id))
  497. return PLUGIN_HANDLED
  498. if(!(get_user_flags(id) & ADMIN_RCON))
  499. return PLUGIN_HANDLED
  500. new menu = menu_create( "\r- Choose what to do -:", "edit_menu_handler" );
  501. menu_additem( menu,"Edit", "EDIT", 0 )
  502. menu_additem( menu,"Set", "SET", 0 )
  503. menu_additem( menu,"Reset", "RESET", 0 )
  504. menu_additem( menu,"Delete", "DELETE", 0 )
  505. menu_display( id, menu, 0 )
  506. return PLUGIN_HANDLED
  507. }
  508.  
  509. public edit_menu_handler( id, menu, item )
  510. {
  511. if ( item == MENU_EXIT )
  512. {
  513. menu_destroy( menu );
  514. return PLUGIN_HANDLED;
  515. }
  516.  
  517. new szData[64], szName[64];
  518. new _access, item_callback;
  519. menu_item_getinfo( menu, item, _access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback );
  520. if(equal(szData,"EDIT"))
  521. {
  522. chosen_option[id] = 1
  523.  
  524. }
  525. else if(equal(szData,"SET"))
  526. {
  527. chosen_option[id] = 2
  528. }
  529. else if(equal(szData,"RESET"))
  530. {
  531. chosen_option[id] = 3
  532. }
  533. else if(equal(szData,"DELETE"))
  534. {
  535. chosen_option[id] = 4
  536. }
  537. menu_destroy( menu );
  538. knife_admin_edit2(id)
  539. return PLUGIN_CONTINUE
  540. }
  541.  
  542. public knife_admin_edit2(id)
  543. {
  544. if(!is_user_connected(id))
  545. return PLUGIN_HANDLED
  546. if(!is_user_admin(id))
  547. return PLUGIN_HANDLED
  548. if(!(get_user_flags(id) & ADMIN_RCON))
  549. return PLUGIN_HANDLED
  550. new menu = menu_create( "\r- Choose what to edit -:", "edit_menu_handler2" );
  551. menu_additem( menu,"Knives", "KNIFE", 0 )
  552. menu_additem( menu,"Money", "MONEY", 0 )
  553. menu_additem( menu,"Levels", "LEVELS", 0 )
  554. menu_display( id, menu, 0 )
  555. return PLUGIN_HANDLED
  556. }
  557.  
  558. public edit_menu_handler2( id, menu, item )
  559. {
  560. if ( item == MENU_EXIT )
  561. {
  562. menu_destroy( menu );
  563. return PLUGIN_HANDLED;
  564. }
  565.  
  566. new szData[64], szName[64];
  567. new _access, item_callback;
  568. menu_item_getinfo( menu, item, _access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback );
  569. if(equal(szData,"KNIFE"))
  570. {
  571. chosen_item[id] = 1
  572. }
  573. else if(equal(szData,"MONEY"))
  574. {
  575. chosen_item[id] = 2
  576. }
  577. else if(equal(szData,"LEVELS"))
  578. {
  579. chosen_item[id] = 3
  580. }
  581. switch(chosen_option[id])
  582. {
  583. case 1:client_cmd(id,"messagemode edit_item");
  584. case 2:client_cmd(id,"messagemode set_item");
  585. case 3:client_cmd(id,"messagemode reset_item");
  586. case 4:client_cmd(id,"messagemode delete_item");
  587. default: client_print(id,print_chat,"oops, something went wrong!")
  588. }
  589. menu_destroy( menu );
  590. return PLUGIN_CONTINUE
  591. }
  592.  
  593. public knife_edit(target,theknife)
  594. {
  595. for (new knife = 2; knife<=knifes_loaded; knife++)
  596. {
  597. if(knife == theknife)
  598. {
  599. if(user_unlocked_knifes[target][knife])
  600. {
  601. user_unlocked_knifes[target][knife] = false
  602. }
  603. else
  604. {
  605. user_unlocked_knifes[target][knife] = true
  606. }
  607. }
  608.  
  609. }
  610. }
  611.  
  612. public do_set(id)
  613. {
  614. if(!can_access(id))
  615. return PLUGIN_HANDLED
  616. new arg[64];
  617. read_argv(1,arg,charsmax(arg))
  618. if(chosen_player[id] == -2)
  619. {
  620. switch(chosen_item[id])
  621. {
  622.  
  623. }
  624. }
  625. else if(chosen_player[id] == -1)
  626. {
  627. for(new i ; i < MAX_PLAYERS ; i++)
  628. {
  629. switch(chosen_item[id])
  630. {
  631. case 1:
  632. {
  633. knife_edit(i,str_to_num(arg))
  634. }
  635. case 2:
  636. {
  637. user_left_points[i]=str_to_num(arg)
  638. }
  639. case 3:
  640. {
  641. user_xp[i] = str_to_num(arg)
  642. }
  643. }
  644. }
  645. }
  646. else if(is_user_connected(chosen_player[id]))
  647. {
  648. switch(chosen_item[id])
  649. {
  650. case 1:
  651. {
  652. knife_edit(chosen_player[id],str_to_num(arg))
  653. }
  654. case 2:
  655. {
  656. user_left_points[chosen_player[id]]=str_to_num(arg)
  657. }
  658. case 3:
  659. {
  660. user_xp[chosen_player[id]] = str_to_num(arg)
  661. }
  662. }
  663. }
  664. client_print(id,print_chat,"%d",str_to_num(arg))
  665. return PLUGIN_HANDLED
  666. }
  667.  
  668. public do_edit(id)
  669. {
  670. if(!can_access(id))
  671. return PLUGIN_HANDLED
  672. new arg[64];
  673. read_argv(1,arg,charsmax(arg))
  674. if(chosen_player[id] == -2)
  675. {
  676. switch(chosen_item[id])
  677. {
  678.  
  679. }
  680. }
  681. else if(chosen_player[id] == -1)
  682. {
  683. for(new i ; i < MAX_PLAYERS ; i++)
  684. {
  685. switch(chosen_item[id])
  686. {
  687. case 1:
  688. {
  689. knife_edit(i,str_to_num(arg))
  690. }
  691. case 2:
  692. {
  693. user_left_points[i] += str_to_num(arg)
  694. }
  695. case 3:
  696. {
  697. user_xp[i] += str_to_num(arg)
  698. }
  699. }
  700. }
  701. }
  702. else if(is_user_connected(chosen_player[id]))
  703. {
  704. switch(chosen_item[id])
  705. {
  706. case 1:
  707. {
  708. knife_edit(chosen_player[id],str_to_num(arg))
  709. }
  710. case 2:
  711. {
  712. user_left_points[chosen_player[id]]+=str_to_num(arg)
  713. }
  714. case 3:
  715. {
  716. user_xp[chosen_player[id]] += str_to_num(arg)
  717. }
  718. }
  719. }
  720. client_print(id,print_chat,"%d",str_to_num(arg))
  721. return PLUGIN_HANDLED
  722. }
  723.  
  724. public do_reset(id)
  725. {
  726. if(!can_access(id))
  727. return PLUGIN_HANDLED
  728. new arg[64];
  729. read_argv(1,arg,charsmax(arg))
  730. if(chosen_player[id] == -2)
  731. {
  732. switch(chosen_item[id])
  733. {
  734.  
  735. }
  736. }
  737. else if(chosen_player[id] == -1)
  738. {
  739. for(new i ; i < MAX_PLAYERS ; i++)
  740. {
  741. switch(chosen_item[id])
  742. {
  743. case 1:
  744. {
  745. knife_edit(i,str_to_num(arg))
  746. }
  747. case 2:
  748. {
  749. user_left_points[i] = 0
  750. }
  751. case 3:
  752. {
  753. user_xp[i] = 1
  754. }
  755. }
  756. }
  757. }
  758. else if(is_user_connected(chosen_player[id]))
  759. {
  760. switch(chosen_item[id])
  761. {
  762. case 1:
  763. {
  764. knife_edit(chosen_player[id],str_to_num(arg))
  765. }
  766. case 2:
  767. {
  768. user_left_points[chosen_player[id]] = 0
  769. }
  770. case 3:
  771. {
  772. user_xp[chosen_player[id]] = 1
  773. }
  774. }
  775. } else client_print(id,print_chat,"o boi! fail!!")
  776. client_print(id,print_chat,"%d",str_to_num(arg))
  777. return PLUGIN_HANDLED
  778. }
  779.  
  780. public do_delete(id)
  781. return;
  782.  
  783. public client_putinserver(id)
  784. {
  785. tm_set(team_override, id)
  786. user_knife[id] = KNIFE_NONE;
  787. user_new_knife[id] = KNIFE_NONE;
  788. user_would_buy[id] = KNIFE_NONE;
  789.  
  790. user_killstreak[id] = 0;
  791. user_total_unlockeds[id] = 1;
  792. user_hud[id] = true;
  793. user_using_trial[id]=false;
  794. user_level[id] = 1;
  795. user_xp[id] = 0;
  796. user_xpForLVL[id] = ExpForLevel(user_level[id]);
  797. user_is_paying_to[id]=0;
  798. user_is_paying_amount[id]=0;
  799.  
  800. #if defined SHOP
  801. g_double_jump[id] = 0;
  802. g_autobhop[id] = 0;
  803. g_double_exp[id] = false;
  804. #endif
  805.  
  806. for (new knife=2; knife<= knifes_loaded; knife++)
  807. user_unlocked_knifes[id][knife] = false;
  808.  
  809. get_user_authid(id, AuthID[id], charsmax(AuthID));
  810. get_user_name(id, PlayerName[id], charsmax(PlayerName));
  811. LoadData(id);
  812.  
  813. set_task(3.0, "DisplayInfo", id+TaskInfo);
  814. //set_task(1.0, "give_money", id+GIVE_M_TASK);
  815. }
  816.  
  817. public can_access(id)
  818. {
  819. if(!is_user_connected(id))
  820. return PLUGIN_CONTINUE
  821. if(!is_user_admin(id))
  822. return PLUGIN_CONTINUE
  823. if(!(get_user_flags(id) & ADMIN_RCON))
  824. return PLUGIN_CONTINUE
  825. return PLUGIN_HANDLED
  826. }
  827.  
  828. public main_menu_crap(id)
  829. {
  830. new menu = menu_create( "\r- Choose Your Team -", "main_menu_handler" );
  831.  
  832. menu_additem( menu,"Terrorists", "TTM", 0 );
  833. menu_additem( menu,"Counter Terrorists", "CTTM", 0 );
  834. menu_additem( menu,"Spectators", "STM", 0 );
  835. menu_display( id, menu, 0 )
  836. return PLUGIN_HANDLED;
  837. }
  838.  
  839. public main_menu_handler( id, menu, item )
  840. {
  841. if ( item == MENU_EXIT )
  842. {
  843. menu_destroy( menu );
  844. return PLUGIN_HANDLED;
  845. }
  846.  
  847. new szData[64], szName[64];
  848. new _access, item_callback;
  849. menu_item_getinfo( menu, item, _access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback );
  850. if(equal(szData,"TTM"))
  851. {
  852. join_t(id)
  853. }
  854. else if(equal(szData,"CTTM"))
  855. {
  856. join_ct(id)
  857. }
  858. else if(equal(szData,"STM"))
  859. {
  860. join_spec(id)
  861. }
  862. menu_destroy( menu );
  863. return PLUGIN_CONTINUE
  864. }
  865.  
  866. public clcmd_chooseteam(id)
  867. {
  868. if (tm_get(team_override, id))
  869. {
  870. ChooseFraction(id)
  871. return PLUGIN_HANDLED;
  872. }
  873.  
  874. tm_set(team_override, id)
  875. return PLUGIN_CONTINUE;
  876. }
  877.  
  878. public join_spec(id)
  879. {
  880. if(is_user_alive(id))
  881. user_silentkill(id)
  882. cs_set_user_team(id,CS_TEAM_SPECTATOR)
  883. return PLUGIN_CONTINUE
  884. }
  885.  
  886. public join_ct(id)
  887. {
  888. if(is_user_alive(id))
  889. user_silentkill(id)
  890. cs_set_user_team(id,CS_TEAM_CT)
  891. respawn(id)
  892. return PLUGIN_CONTINUE
  893. }
  894.  
  895. public join_t(id)
  896. {
  897. if(is_user_alive(id))
  898. user_silentkill(id)
  899. cs_set_user_team(id,CS_TEAM_T)
  900. respawn(id)
  901. return PLUGIN_CONTINUE
  902. }
  903.  
  904. public respawn(id)
  905. {
  906. if(!is_user_alive(id) && get_pcvar_num(cvar_is_dm) && is_user_connected(id))
  907. {
  908. if(cs_get_user_team(id) != CS_TEAM_UNASSIGNED && get_pcvar_num(cvar_dm)) // somewhat prevent the respawn bug
  909. ExecuteHam(Ham_CS_RoundRespawn, id);
  910. }
  911. }
  912.  
  913. public update_cvars()
  914. {
  915. HP_RATE = get_pcvar_float(cvar_hp_rate)
  916. }
  917.  
  918. public plugin_precache()
  919. {
  920. load_knifes_cfg();
  921.  
  922. precache_model("models/v_knife.mdl");
  923. precache_model("models/p_knife.mdl");
  924.  
  925. new path[64];
  926.  
  927. for(new i = 0; i <= knifes_loaded-2; i++)
  928. {
  929. formatex(path, charsmax(path), "models/Knife_Gaming/v_%s.mdl", file_names[i]);
  930. if(file_exists(path))
  931. precache_model(path);
  932. else
  933. log_error(AMX_ERR_NOTFOUND, "Model %s not found!",path );
  934. if (p_model_exist[i])
  935. {
  936. formatex(path, charsmax(path), "models/Knife_Gaming/p_%s.mdl", file_names[i]);
  937. if(file_exists(path))
  938. precache_model(path);
  939. else
  940. log_error(AMX_ERR_NOTFOUND, "Model %s not found!",path );
  941. }
  942. }
  943.  
  944. for (new Emith:i = Select; i<Emith; i++)
  945. precache_sound(sound[i]);
  946.  
  947. if(!dir_exists("addons\amxmodx\configs\GlobalKnife\logs"))
  948. {
  949. mkdir("addons\amxmodx\configs\GlobalKnife");
  950. mkdir("addons\amxmodx\configs\GlobalKnife\logs");
  951. }
  952. }
  953.  
  954. public load_knifes_cfg()
  955. {
  956. knife_names[0]="KNIFE_NONE"; knife_price[0]= 0;
  957. knife_names[1]="KNIFE_DEFAULT"; knife_price[1] = 0;
  958. knifes_loaded = 1;
  959.  
  960. new const file[42] = "addons\amxmodx\configs\GKG\knifes.cfg";
  961.  
  962. if (!file_exists(file))
  963. {
  964. log_error(AMX_ERR_NOTFOUND, "Can't load knifes becaus file 'knifes.cfg' not found!");
  965. return PLUGIN_CONTINUE;
  966. }
  967.  
  968. new line, txtlen;
  969. new text[64], arg[4][16];
  970.  
  971. while (read_file(file, line, text, charsmax(text), txtlen) != 0)
  972. {
  973. line++;
  974.  
  975. if (!txtlen || text[0] == ';')
  976. continue;
  977.  
  978. if (knifes_loaded == MAX_KNIFES)
  979. {
  980. log_error(AMX_ERR_BOUNDS, "Reached maximum ammount of loading knifes!");
  981. break;
  982. }
  983. knifes_loaded++;
  984. parse(text,arg[0],charsmax(arg[]),arg[1],charsmax(arg[]),arg[2],charsmax(arg[]), arg[3], charsmax(arg[]));
  985. knife_names[knifes_loaded] = arg[0];
  986. file_names[knifes_loaded-2]= arg[1];
  987. knife_price[knifes_loaded] = str_to_num(arg[2]);
  988. if (containi(arg[3], "da") != -1)
  989. knife_premium[knifes_loaded] = true;
  990. else
  991. knife_premium[knifes_loaded] = false;
  992. new szVFile[64], szPFile[64];
  993. formatex(szVFile, 63, "models/Knife_Gaming/v_%s.mdl", arg[1]);
  994. formatex(szPFile, 63, "models/Knife_Gaming/p_%s.mdl", arg[1]);
  995. p_model_exist[knifes_loaded-2] = file_exists(szPFile)==1?true:false;
  996. if (!file_exists(szVFile))
  997. knifes_loaded--;
  998. }
  999. return PLUGIN_CONTINUE;
  1000. }
  1001.  
  1002. public ChooseFraction(id)
  1003. {
  1004. static szText[128];
  1005. formatex(szText, charsmax(szText), "\w[\rGlobal Knife\w]\r %L\w", id, "MENU_TITLE");
  1006. new menu = menu_create(szText, "Fraction_Handle");
  1007. formatex(szText, charsmax(szText), "\y%L", id, "MENU_LABEL_POCKET");
  1008. menu_additem(menu, szText);
  1009. formatex(szText, charsmax(szText), "\y%L",id,"MENU_LABEL_MARKET");
  1010. menu_additem(menu, szText);
  1011. formatex(szText, charsmax(szText), "\y%L", id, "MENU_LABEL_SHOP");
  1012. menu_additem(menu, szText);
  1013. formatex(szText, charsmax(szText), "\y%L", id, "MENU_LABEL_TEAM");
  1014. menu_additem(menu, szText);
  1015. formatex(szText, charsmax(szText), "\y%L", id, "MENU_LABEL_VIP");
  1016. menu_additem(menu, szText);
  1017. formatex(szText, charsmax(szText), "\y%L", id, "MENU_LABEL_ADMENU");
  1018. menu_additem(menu, szText);
  1019. if (user_knife[id] == KNIFE_NONE && !task_exists(id+TaskSpawn))
  1020. menu_setprop (menu, MPROP_EXIT, MEXIT_NEVER );
  1021. else
  1022. {
  1023. formatex(szText, charsmax(szText), "\y%L",id, "MENU_EXIT", PriceToString(user_left_points[id]));
  1024. menu_setprop(menu, MPROP_EXITNAME, szText);
  1025. }
  1026. menu_display(id, menu);
  1027. }
  1028. public Fraction_Handle(id, menu2, item)
  1029. {
  1030. if (item == MENU_EXIT)
  1031. {
  1032. menu_destroy(menu2);
  1033. client_cmd(id, "spk ^"%s", sound[Exit]);
  1034. return PLUGIN_CONTINUE;
  1035. }
  1036. static szText[128];
  1037. formatex(szText, charsmax(szText), "\w[\rGlobal Knife\w]\r %L\w", id, "MENU_TITLE");
  1038. new menu = menu_create(szText, "KnifeMenu_Handle");
  1039. new vip_knifes;
  1040. for (new i = 1; i<=knifes_loaded; i++)
  1041. if (knife_premium[i])
  1042. vip_knifes++;
  1043. switch(item)
  1044. {
  1045. case 0: // dzep
  1046. {
  1047. client_cmd(id, "spk ^"%s", sound[Select]);
  1048. new len;
  1049. for (new i = 1; i <= knifes_loaded; i++)
  1050. {
  1051. len = 0;
  1052. if ((user_unlocked_knifes[id][i] || knife_price[i] == 0))
  1053. {
  1054. if (knife_premium[i])
  1055. len = formatex(szText, charsmax(szText), "\y%L \w[\rVIP\w] ", id, knife_names[i]);
  1056. else
  1057. len = formatex(szText, charsmax(szText), "\y%L ", id, knife_names[i]);
  1058. if (get_pcvar_num(cvar_pointer[LevelsON]))
  1059. {
  1060. LoadLevels(id, i);
  1061. len+=formatex(szText[len], charsmax(szText), "\r[\wLevel: \y%i\r]", user_level[id]);
  1062. }
  1063. if (!get_pcvar_num(cvar_pointer[LevelsON]))
  1064. {
  1065. if (!knife_price[i])
  1066. formatex(szText[len], charsmax(szText)-len, "\r[\d%L\r]", id, "MENU_FREE");
  1067. else
  1068. formatex(szText[len], charsmax(szText)-len, "\r[\d%L $%s\r]",id, "MENU_BOUGHT", PriceToString(knife_price[i]));
  1069. }
  1070. menu_additem(menu, szText);
  1071. }
  1072. }
  1073. LoadLevels(id, user_knife[id])
  1074. }
  1075. case 1: // market
  1076. {
  1077. client_cmd(id, "spk ^"%s", sound[Cash]);
  1078. /*if (knifes_loaded-vip_knifes-user_total_unlockeds[id] >0)
  1079. {*/
  1080. //new count = 0; new len;
  1081. new len;
  1082. for (new i = 1; i<=knifes_loaded; i++)
  1083. {
  1084. if((!user_unlocked_knifes[id][i] && knife_price[i] > 0))// && !knife_premium[i])
  1085. {
  1086. len = formatex(szText, charsmax(szText), "\y%L ", id, knife_names[i]);
  1087. if(knife_premium[i])
  1088. {
  1089. if (user_left_points[id]>=knife_price[i])
  1090. formatex(szText[len], charsmax(szText)-len,"\w[\rVIP\w]\r[\w$%s\r]", PriceToString(knife_price[i]));
  1091. else
  1092. formatex(szText[len], charsmax(szText)-len, "\w[\rVIP\w]\r[\d$%s\r]", PriceToString(knife_price[i]));
  1093.  
  1094. }
  1095. else
  1096. {
  1097. if (user_left_points[id]>=knife_price[i])
  1098. formatex(szText[len], charsmax(szText)-len,"\r[\w$%s\r]", PriceToString(knife_price[i]));
  1099. else
  1100. formatex(szText[len], charsmax(szText)-len, "\r[\d$%s\r]", PriceToString(knife_price[i]));
  1101. }
  1102. menu_additem(menu, szText);
  1103. //count++;
  1104. //if (count>=knifes_loaded-user_total_unlockeds[id]-vip_knifes)
  1105. /// break;
  1106. }
  1107. }
  1108. /*}
  1109. else
  1110. {
  1111. PrintChat(id, "%L", id, "CHAT_EMPTY_MARKET");
  1112. ChooseFraction(id);
  1113. client_cmd(id, "spk ^"%s", sound[Exit]);
  1114. return PLUGIN_CONTINUE;
  1115. }*/
  1116. }
  1117. case 2: //shop
  1118. {
  1119. client_cmd(id, "say /shop");
  1120. return PLUGIN_CONTINUE;
  1121. }
  1122. case 3: //chooseteam
  1123. {
  1124. main_menu_crap(id)
  1125. return PLUGIN_CONTINUE;
  1126. }
  1127. case 4: //vip
  1128. {
  1129. client_cmd(id, "spk ^"%s", sound[Select]);
  1130. client_cmd(id, "say vipmenu");
  1131. return PLUGIN_CONTINUE;
  1132. }
  1133. case 5: //adminmenu
  1134. {
  1135. client_cmd(id, "say /adminmenu");
  1136. /*else
  1137. {
  1138. new count = 0; new len;
  1139. for (new i=1; i<=knifes_loaded; i++)
  1140. {
  1141. if(knife_premium[i] && !user_unlocked_knifes[id][i])
  1142. {
  1143. len = formatex(szText, charsmax(szText), "\y%L",id, knife_names[i]);
  1144. if (!used_trial(id, i) && !is_user_vip(id))
  1145. len+=formatex(szText[len], charsmax(szText)-len, "\w[\rVIP \w-\y%L\w]",id, "MENU_TEST");
  1146. else
  1147. {
  1148. if (user_left_points[id]>=knife_price[i])
  1149. len+=formatex(szText[len], charsmax(szText)-len,"\r[\w$%s\r]", PriceToString(knife_price[i]));
  1150. else
  1151. len+=formatex(szText[len], charsmax(szText)-len, "\r[\d$%s\r]", PriceToString(knife_price[i]));
  1152.  
  1153. if (get_pcvar_num(cvar_pointer[LevelsON]))
  1154. {
  1155. LoadLevels(id, i);
  1156. if(is_user_vip(id))
  1157. len+=formatex(szText[len], charsmax(szText)-len, "\d[\rV\d.\rI\d.\rP\d.]\r[\wLevel: \y%i\r]", user_level[id]);
  1158. else
  1159. len+=formatex(szText[len], charsmax(szText)-len, "\w[\rV\w.\rI\w.\rP\w.]\w[\dLevel: \w%i\d]", user_level[id]);
  1160. }
  1161. else
  1162. add(szText, charsmax(szText), is_user_vip(id)?"\d[\rV\d.\rI\d.\rP\d.]":"\w[\rV\w.\rI\w.\rP\w.]");
  1163. }
  1164. menu_additem(menu, szText);
  1165. count++;
  1166. if (count>=vip_knifes)
  1167. break;
  1168. }
  1169. }
  1170. }
  1171. LoadLevels(id, user_knife[id]);*/
  1172. }
  1173.  
  1174. }
  1175. user_current_menu[id] = item;
  1176. formatex(szText, charsmax(szText), "\y%L",id, "MENU_NEXT");
  1177. menu_setprop(menu, MPROP_NEXTNAME, szText);
  1178. formatex(szText, charsmax(szText), "\y%L",id, "MENU_BACK");
  1179. menu_setprop(menu, MPROP_BACKNAME, szText);
  1180. formatex(szText, charsmax(szText), "\y%L",id, "MENU_EXIT", PriceToString(user_left_points[id]));
  1181. menu_setprop(menu, MPROP_EXITNAME, szText);
  1182. menu_display(id, menu);
  1183. return PLUGIN_CONTINUE;
  1184. }
  1185.  
  1186. public KnifeMenu_Handle(id, menu, item)
  1187. {
  1188.  
  1189. if(item == MENU_EXIT)
  1190. {
  1191. menu_destroy(menu);
  1192. ChooseFraction(id);
  1193. client_cmd(id, "spk ^"%s", sound[Exit]);
  1194. return PLUGIN_CONTINUE;
  1195. }
  1196. item++;
  1197.  
  1198. new count = 0;
  1199. for(new i=1; i<= knifes_loaded; i++)
  1200. {
  1201. switch (user_current_menu[id])
  1202. {
  1203. case 0:
  1204. if (user_unlocked_knifes[id][i] || knife_price[i] == 0)
  1205. count++;
  1206. case 1:
  1207. if((!user_unlocked_knifes[id][i] && knife_price[i] > 0))// && !knife_premium[i])
  1208. count++;
  1209. case 2:
  1210. if (knife_premium[i] && !user_unlocked_knifes[id][i])
  1211. count++;
  1212. }
  1213. if(count == item)
  1214. {
  1215. item = i;
  1216. break;
  1217. }
  1218. }
  1219.  
  1220. if(user_new_knife[id] != KNIFE_NONE && is_user_alive(id))
  1221. {
  1222. client_cmd(id, "spk ^"%s",sound[Exit]);
  1223. menu_destroy(menu);
  1224. PrintChat(id, "%L", id, "CHAT_CHANGE_PROGRES");
  1225. return PLUGIN_CONTINUE;
  1226. }
  1227. if(item == user_knife[id])
  1228. {
  1229. client_cmd(id, "spk ^"%s",sound[Exit]);
  1230. menu_display(id, menu);
  1231. PrintChat(id, "%L", id, "CHAT_ALREADY_HAVE");
  1232. return PLUGIN_CONTINUE;
  1233. }
  1234.  
  1235. if(knife_premium[item] && !used_trial(id, item) && !is_user_vip(id))
  1236. {
  1237. user_would_buy[id]=item;
  1238. AskForTrial(id);
  1239. client_cmd(id, "spk ^"%s",sound[Select]);
  1240. return PLUGIN_CONTINUE;
  1241. }
  1242. if(knife_premium[item] && !is_user_vip(id))
  1243. {
  1244. PrintChat(id, "%L",id, "CHAT_ONLY_VIPS");
  1245. menu_display(id, menu);
  1246. client_cmd(id, "spk ^"%s",sound[Exit]);
  1247. return PLUGIN_CONTINUE;
  1248. }
  1249. if (!user_unlocked_knifes[id][item] && knife_price[item] != 0)
  1250. {
  1251. if (user_left_points[id] >= knife_price[item])
  1252. {
  1253. user_would_buy[id]=item;
  1254. client_cmd(id, "spk ^"%s",sound[Cash]);
  1255. AskToBuyMenu(id);
  1256. return PLUGIN_CONTINUE;
  1257. }
  1258. menu_display(id, menu);
  1259. PrintChat(id, "%L", id, "CHAT_DONT_HAVE_MONEY", PriceToString(knife_price[item]-user_left_points[id]));
  1260. client_cmd(id, "spk ^"%s",sound[Exit]);
  1261. return PLUGIN_CONTINUE;
  1262. }
  1263.  
  1264. if(user_knife[id] > KNIFE_NONE)
  1265. {
  1266. user_new_knife[id] = item;
  1267.  
  1268. if(is_user_alive(id))
  1269. {
  1270. //AskToChangeNow
  1271. SaveLevels(id);
  1272. user_knife[id] = KNIFE_NONE;
  1273. LoadLevels(id, KNIFE_NONE);
  1274. strip_user_weapons(id);
  1275. SetTask(id);
  1276. PrintChat(id, "%L", id, "CHAT_WILL_BE_CHANGED");
  1277. }
  1278. else
  1279. PrintChat(id, "%L", id, "CHAT_WILL_NEXT_ROUND");
  1280. }
  1281. else
  1282. {
  1283. if(is_user_alive(id))
  1284. {
  1285. strip_user_weapons(id);
  1286. give_item(id, "weapon_knife");
  1287. }
  1288. SaveLevels(id);
  1289. user_knife[id] = item;
  1290. LoadLevels(id, item);
  1291. }
  1292. client_cmd(id, "spk ^"%s",sound[Select]);
  1293. menu_destroy(menu);
  1294. return PLUGIN_CONTINUE;
  1295. }
  1296.  
  1297. public AskToBuyMenu(id)
  1298. {
  1299. static MenuBody[128];
  1300. new len = formatex(MenuBody, charsmax(MenuBody),"\y%L^n^n",id, "MENU_QUESTION",id, knife_names[user_would_buy[id]], PriceToString(knife_price[user_would_buy[id]]));
  1301. if (user_left_points[id]<knife_price[user_would_buy[id]])
  1302. len+=formatex(MenuBody[len], charsmax(MenuBody)-len, "\d1. %L^n",id, "MENU_LABEL_YES");
  1303. else
  1304. len+=formatex(MenuBody[len], charsmax(MenuBody)-len, "\r1. \y%L^n",id, "MENU_LABEL_YES");
  1305. len+=formatex(MenuBody[len], charsmax(MenuBody)-len, "\r2. \y%L^n",id, "MENU_LABEL_NO");
  1306. show_menu(id, MenuKeys , MenuBody, -1, "BuyMenu");
  1307. }
  1308. public AskToBuyHandle(id, key)
  1309. {
  1310. switch(key)
  1311. {
  1312. case 0:
  1313. {
  1314. if (user_left_points[id]<knife_price[user_would_buy[id]])
  1315. {
  1316. PrintChat(id, "%L", id, "CHAT_DONT_HAVE_MONEY", PriceToString(knife_price[user_would_buy[id]]-user_left_points[id]));
  1317. client_cmd(id, "spk ^"%s",sound[Exit]);
  1318. return PLUGIN_CONTINUE;
  1319. }
  1320.  
  1321. if(!can_buy(id,user_would_buy[id]))
  1322. return PLUGIN_CONTINUE;
  1323.  
  1324. if (is_user_alive(id))
  1325. {
  1326. strip_user_weapons(id);
  1327. SetTask(id);
  1328. }
  1329. SaveLevels(id);
  1330. user_left_points[id]-=knife_price[user_would_buy[id]];
  1331. user_unlocked_knifes[id][user_would_buy[id]]=true;
  1332. user_new_knife[id]=user_would_buy[id];
  1333. user_knife[id]=KNIFE_NONE;
  1334. LoadLevels(id, KNIFE_NONE);
  1335. user_total_unlockeds[id]++;
  1336. cs_set_user_money(id, user_left_points[id], 1);
  1337. PrintChat(id, "%L",id, "CHAT_SUCCESFULL_BUY",id, knife_names[user_would_buy[id]], PriceToString(knife_price[user_would_buy[id]]));
  1338. SaveData(id, 1);
  1339. client_cmd(id, "spk ^"%s",sound[LevelUP]);
  1340. }
  1341. case 1:
  1342. {
  1343. if (knife_premium[user_would_buy[id]])
  1344. Fraction_Handle(id, 0, 2);
  1345. else
  1346. Fraction_Handle(id, 0, 1);
  1347. user_would_buy[id]=0;
  1348. client_cmd(id, "spk ^"%s",sound[Exit]);
  1349. }
  1350. }
  1351. return PLUGIN_CONTINUE;
  1352. }
  1353. public can_buy(id,item)
  1354. {
  1355. if(item == user_knife[id])
  1356. {
  1357. PrintChat(id, "%L", id, "CHAT_ALREADY_HAVE");
  1358. return PLUGIN_CONTINUE;
  1359. }
  1360. if(knife_premium[item] && !is_user_vip(id))
  1361. {
  1362. PrintChat(id, "%L",id, "CHAT_ONLY_VIPS");
  1363. return PLUGIN_CONTINUE;
  1364. }
  1365. if (!user_unlocked_knifes[id][item] && knife_price[item] != 0)
  1366. {
  1367. if (user_left_points[id] >= knife_price[item])
  1368. {
  1369. return PLUGIN_HANDLED;
  1370. }
  1371. return PLUGIN_CONTINUE;
  1372. }
  1373. if(user_unlocked_knifes[id][item])
  1374. {
  1375. PrintChat(id, "%L", id, "CHAT_ALREADY_HAVE");
  1376. return PLUGIN_CONTINUE
  1377. }
  1378. return PLUGIN_HANDLED
  1379.  
  1380. }
  1381.  
  1382. public AskForTrial(id)
  1383. {
  1384. static MenuBody[128];
  1385. new len = formatex(MenuBody, charsmax(MenuBody),"\y%L^n^n",id, "MENU_TRIAL", id, knife_names[user_would_buy[id]]);
  1386. len+=formatex(MenuBody[len], charsmax(MenuBody)-len, "\r1. \y%L^n",id, "MENU_TEST_NOW");
  1387. len+=formatex(MenuBody[len], charsmax(MenuBody)-len, "\r2. \y%L^n",id ,"MENU_CANCEL");
  1388. show_menu(id, MenuKeys , MenuBody, -1, "TrialMenu");
  1389. }
  1390.  
  1391. public AskForTrialHandle(id, key)
  1392. {
  1393. key++
  1394. switch(key)
  1395. {
  1396. case 1:
  1397. {
  1398. if (is_user_alive(id))
  1399. {
  1400. strip_user_weapons(id);
  1401. SetTask(id);
  1402. PrintChat(id, "%L", id, "CHAT_WILL_BE_CHANGED");
  1403. }
  1404. else
  1405. PrintChat(id, "%L", id, "CHAT_WILL_NEXT_ROUND");
  1406. SaveLevels(id);
  1407. user_using_trial[id] = true;
  1408. user_knife[id] = KNIFE_NONE;
  1409. user_new_knife[id] = user_would_buy[id];
  1410. LoadLevels(id, KNIFE_NONE);
  1411. client_cmd(id, "spk ^"%s",sound[LevelUP]);
  1412.  
  1413. }
  1414. case 2:
  1415. {
  1416. client_cmd(id, "spk ^"%s",sound[Exit]);
  1417. Fraction_Handle(id,0,2);
  1418. }
  1419. }
  1420. return PLUGIN_CONTINUE;
  1421. }
  1422.  
  1423. public CreatePayMenu(id)
  1424. {
  1425. static item[64];
  1426. formatex(item, charsmax(item), "\w[\rGlobal Knife\w]\y %L", id, "MENU_PAY");
  1427. new menu = menu_create(item, "PayMenu_Handler");
  1428. if (!user_is_paying_to[id])
  1429. formatex(item, charsmax(item), "\r%L\y %L",id, "MENU_PLAYER", id ,"MENU_CHOOSE_PLAYER");
  1430. else
  1431. formatex(item, charsmax(item), "\r%L\y %s", id, "MENU_PLAYER", PlayerName[user_is_paying_to[id]]);
  1432. menu_additem(menu, item);
  1433.  
  1434. if(!user_is_paying_amount[id])
  1435. formatex(item, charsmax(item), "\r%L \y%L^n", id, "MENU_AMOUNT", id, "MENU_INPUT" );
  1436. else
  1437. formatex(item, charsmax(item), "\r%L \y%s^n", id , "MENU_AMOUNT", PriceToString(user_is_paying_amount[id]));
  1438. menu_additem(menu, item);
  1439.  
  1440. if(user_is_paying_to[id] && user_is_paying_amount[id])
  1441. formatex(item, charsmax(item), "\y%L", id , "MENU_CONFIRM");
  1442. else
  1443. formatex(item, charsmax(item), "\d%L", id, "MENU_CONFIRM");
  1444. menu_additem(menu, item);
  1445.  
  1446. formatex(item, charsmax(item), "\y%L", id, "MENU_CANCEL2", PriceToString(user_left_points[id]));
  1447. menu_setprop(menu, MPROP_EXITNAME, item);
  1448. menu_display(id, menu);
  1449. }
  1450.  
  1451. public PayMenu_Handler(id, menu, item)
  1452. {
  1453. switch(item)
  1454. {
  1455. case 0:
  1456. {
  1457. ChoosePlayer(id);
  1458. client_cmd(id, "spk ^"%s", sound[Select]);
  1459. }
  1460. case 1:
  1461. {
  1462. CreatePayMenu(id);
  1463. client_cmd(id,"messagemode money");
  1464. client_cmd(id, "spk ^"%s", sound[Select]);
  1465. }
  1466. case 2:
  1467. {
  1468. if(!user_is_paying_to[id] && !user_is_paying_amount[id])
  1469. {
  1470. PrintChat(id, "%L", id, "CHAT_BOTH_ERROR");
  1471. CreatePayMenu(id);
  1472. client_cmd(id, "spk ^"%s", sound[Exit]);
  1473. return PLUGIN_CONTINUE;
  1474. }
  1475. else if(!user_is_paying_to[id])
  1476. {
  1477. PrintChat(id, "%L", id, "CHAT_SELECT_PLAYER");
  1478. CreatePayMenu(id);
  1479. client_cmd(id, "spk ^"%s", sound[Exit]);
  1480. return PLUGIN_CONTINUE;
  1481. }
  1482. else if(!user_is_paying_amount[id])
  1483. {
  1484. PrintChat(id, "%L",id, "CHAT_INPUT_AMOUNT");
  1485. CreatePayMenu(id);
  1486. client_cmd(id, "spk ^"%s", sound[Exit]);
  1487. return PLUGIN_CONTINUE;
  1488. }
  1489. else if(user_is_paying_amount[id] > user_left_points[id])
  1490. {
  1491. PrintChat(id, "%L",id, "CHAT_NO_MONEY");
  1492. CreatePayMenu(id);
  1493. client_cmd(id, "spk ^"%s", sound[Exit]);
  1494. return PLUGIN_CONTINUE;
  1495. }
  1496. new target = user_is_paying_to[id];
  1497. new amount = user_is_paying_amount[id];
  1498. user_left_points[id]-= amount;
  1499. user_left_points[id]-= amount;
  1500. cs_set_user_money(id, user_left_points[id], 1);
  1501. client_cmd(id, "spk ^"%s", sound[LevelUP]);
  1502. SaveData(id);
  1503. user_left_points[target]+=amount;
  1504. user_left_points[target]+=amount;
  1505. cs_set_user_money(target, user_left_points[target], 1);
  1506. client_cmd(target, "spk ^"%s", sound[Cash]);
  1507. SaveData(target);
  1508. CheckForNewUnlocks(target, amount);
  1509. new Players[32], playerCount;
  1510. get_players(Players, playerCount, "ch");
  1511. for (new i=0; i<playerCount; i++)
  1512. if (is_user_connected(Players[i]))
  1513. {
  1514. if (Players[i] != id && Players[i] != target)
  1515. PrintChat(Players[i], "%L", Players[i], "CHAT_SOMEONE_PAID", PlayerName[id], PriceToString(amount), PlayerName[target]);
  1516. else if(Players[i] == id)
  1517. PrintChat(Players[i], "%L", Players[i], "CHAT_YOU_SUC_PAID", PriceToString(amount), PlayerName[target]);
  1518. else if(Players[i] == target)
  1519. PrintChat(Players[i], "%L", Players[i], "CHAT_YOU_GET_PAID",PlayerName[id], PriceToString(amount) );
  1520. }
  1521. user_is_paying_to[id]=0;
  1522. user_is_paying_amount[id]=0;
  1523. }
  1524. /*case MENU_EXIT:
  1525. {
  1526. user_is_paying_to[id] = 0;
  1527. user_is_paying_amount[id]=0;
  1528. menu_destroy(menu);
  1529. client_cmd(id, "spk ^"%s", sound[Exit]);
  1530. }*/
  1531. }
  1532. return PLUGIN_CONTINUE;
  1533. }
  1534.  
  1535. public ChoosePlayer(id)
  1536. {
  1537. new item[34], szUserId[32];
  1538. new players[32], pnum, Player;
  1539.  
  1540. formatex(item, charsmax(item), "%L",id, "MENU_CHOOSEPLAYER");
  1541. new menu = menu_create(item, "ChoosePlayer_Handler");
  1542.  
  1543. get_players(players, pnum, "ch");
  1544. for(new i=0; i<pnum; i++)
  1545. {
  1546. if (players[i] == id)
  1547. continue;
  1548. Player = players[i];
  1549. formatex(item, charsmax(item), "%s", PlayerName[Player]);
  1550. formatex(szUserId, charsmax(szUserId), "%d", get_user_userid(Player));
  1551. menu_additem(menu, item, szUserId, 0);
  1552. }
  1553. formatex(item, charsmax(item), "\y%L", id, "MENU_BACK");
  1554. menu_setprop(menu, MPROP_BACKNAME, item);
  1555. formatex(item, charsmax(item), "\y%L", id, "MENU_NEXT");
  1556. menu_setprop(menu, MPROP_NEXTNAME, item);
  1557. formatex(item, charsmax(item), "\r%L",id, "MENU_CANCEL3");
  1558. menu_setprop(menu, MPROP_EXITNAME, item);
  1559. menu_display(id, menu);
  1560. }
  1561.  
  1562. public ChoosePlayer_Handler(id, menu, item)
  1563. {
  1564. if (item == MENU_EXIT)
  1565. {
  1566. menu_destroy(menu);
  1567. CreatePayMenu(id);
  1568. client_cmd(id, "spk ^"%s",sound[Exit]);
  1569. return PLUGIN_CONTINUE;
  1570. }
  1571. new szData[6], szName[64];
  1572. new _access, item_callback;
  1573. menu_item_getinfo(menu, item, _access, szData, charsmax(szData), szName, charsmax(szName), item_callback);
  1574. new userid = str_to_num(szData);
  1575. new player = find_player("k", userid);
  1576. if(!player)
  1577. {
  1578. menu_destroy(menu);
  1579. client_cmd(id, "spk common/null.wav");
  1580. PrintChat(id, "%L",id, "CHAT_PLAYER_DISCON");
  1581. ChoosePlayer(id)
  1582. return PLUGIN_CONTINUE;
  1583. }
  1584. user_is_paying_to[id] = player;
  1585.  
  1586. client_cmd(id, "spk ^"%s",sound[Select]);
  1587. menu_destroy(menu);
  1588. CreatePayMenu(id);
  1589. return PLUGIN_CONTINUE;
  1590. }
  1591.  
  1592. public InputMoney(id)
  1593. {
  1594. new input[64];
  1595. read_args(input, charsmax(input));
  1596. remove_quotes(input);
  1597. user_is_paying_amount[id] = str_to_num(input);
  1598.  
  1599. if (!user_is_paying_amount[id])
  1600. {
  1601. PrintChat(id, "%L",id, "CHAT_INPUT_AMOUNT");
  1602. CreatePayMenu(id);
  1603. client_cmd(id, "spk ^"%s",sound[Exit]);
  1604. return PLUGIN_CONTINUE;
  1605. }
  1606. if (user_is_paying_amount[id] > user_left_points[id])
  1607. {
  1608. PrintChat(id, "%L",id, "CHAT_NO_MONEY");
  1609. user_is_paying_amount[id] = user_left_points[id];
  1610. CreatePayMenu(id);
  1611. client_cmd(id, "spk ^"%s",sound[Select]);
  1612. return PLUGIN_CONTINUE;
  1613. }
  1614. if (user_is_paying_amount[id] < 0)
  1615. {
  1616. user_is_paying_amount[id] = 0;
  1617. CreatePayMenu(id);
  1618. PrintChat(id, "%L",id, "CHAT_MINUS_MONEY");
  1619. client_cmd(id, "spk ^"%s", sound[Exit]);
  1620. return PLUGIN_CONTINUE;
  1621. }
  1622. client_cmd(id, "spk ^"%s", sound[Select]);
  1623. CreatePayMenu(id);
  1624. return PLUGIN_CONTINUE;
  1625. }
  1626.  
  1627. public SaveTrial(id, knife)
  1628. {
  1629. new VaultKey[64];
  1630. formatex(VaultKey, charsmax(VaultKey),"%s-%s-trial", AuthID[id], knife_names[knife]);
  1631. nvault_set(vault, VaultKey, "1");
  1632. }
  1633.  
  1634. public used_trial(id, knife)
  1635. {
  1636. new VaultKey[64], VaultData[2], trial;
  1637. formatex(VaultKey, charsmax(VaultKey),"%s-%s-trial", AuthID[id], knife_names[knife]);
  1638. nvault_get(vault, VaultKey, VaultData, charsmax(VaultData));
  1639. trial = str_to_num(VaultData);
  1640. return trial;
  1641. }
  1642.  
  1643. public SaveLevels(id)
  1644. {
  1645. new VaultKey[64], VaultData[32];
  1646. formatex(VaultKey, charsmax(VaultKey), "%s-%s-level", AuthID[id], knife_names[user_knife[id]]);
  1647. formatex(VaultData, charsmax(VaultData), "%i#%i",user_level[id], user_xp[id]);
  1648. nvault_set(vault, VaultKey, VaultData);
  1649. }
  1650.  
  1651. public LoadLevels(id, knife)
  1652. {
  1653. if (!knife)
  1654. {
  1655. user_xp[id]=0;
  1656. user_level[id] = 1;
  1657. return PLUGIN_CONTINUE;
  1658. }
  1659.  
  1660. new VaultKey[64], VaultData[32];
  1661. new Data[2][16];
  1662. formatex(VaultKey, charsmax(VaultKey), "%s-%s-level", AuthID[id], knife_names[knife]);
  1663. nvault_get(vault, VaultKey, VaultData, charsmax(VaultData));
  1664. replace_all(VaultData, charsmax(VaultData), "#", " ");
  1665. parse(VaultData, Data[0], charsmax(Data[]), Data[1], charsmax(Data[]));
  1666. user_level[id] = str_to_num(Data[0])>0?str_to_num(Data[0]):1;
  1667. user_xp[id] = str_to_num(Data[1]);
  1668. if (knife == user_knife[id])
  1669. user_xpForLVL[id] = ExpForLevel(user_level[id]);
  1670. return PLUGIN_CONTINUE;
  1671. }
  1672.  
  1673. public PriceToString(price)
  1674. {
  1675. new szPrice[12], len=0; // ovo moze jos sa while petjom
  1676. if(price>=1000000)
  1677. {
  1678. len+=formatex(szPrice[len], charsmax(szPrice)-len, "%i.",price/1000000);
  1679. price%=1000000;
  1680. if (price < 100000)
  1681. {
  1682. add(szPrice, charsmax(szPrice), "0");
  1683. len++;
  1684. }
  1685. if (price < 10000)
  1686. {
  1687. add(szPrice, charsmax(szPrice), "0");
  1688. len++;
  1689. }
  1690. }
  1691. if(price>=1000)
  1692. {
  1693. len+=formatex(szPrice[len], charsmax(szPrice)-len, "%i.",price/1000);
  1694. price%=1000;
  1695. if (price < 100)
  1696. {
  1697. add(szPrice, charsmax(szPrice), "0");
  1698. len++;
  1699. }
  1700. if (price < 10)
  1701. {
  1702. add(szPrice, charsmax(szPrice), "0");
  1703. len++;
  1704. }
  1705. }
  1706. len+=formatex(szPrice[len], charsmax(szPrice)-len, "%i",price);
  1707. return szPrice;
  1708. }
  1709.  
  1710. public give_money(id)
  1711. {
  1712. id -= GIVE_M_TASK
  1713. if(is_user_connected(id))
  1714. {
  1715. user_left_points[id] = get_pcvar_num(cvar_join_money);
  1716. user_left_points[id] = get_pcvar_num(cvar_join_money);
  1717. cs_set_user_money(id, user_left_points[id]);
  1718. }
  1719. }
  1720. public client_disconnect(id)
  1721. {
  1722. SaveLevels(id);
  1723. SaveData(id);
  1724. SetTask(id, 0);
  1725.  
  1726. new Players[32], playerCount, user;
  1727. get_players(Players, playerCount, "ch");
  1728. for (new i=0; i<playerCount; i++)
  1729. {
  1730. user = Players[i];
  1731. if (user_is_paying_to[user] == id)
  1732. {
  1733. PrintChat(user, "%L",id, "CHAT_PLAYER_DISCON");
  1734. CreatePayMenu(user);
  1735. user_is_paying_to[user] = 0;
  1736. }
  1737. }
  1738. }
  1739.  
  1740. public DisplayInfo(id)
  1741. {
  1742. id-=TaskInfo;
  1743.  
  1744. if(!is_user_connected(id) || !user_hud[id])
  1745. return PLUGIN_CONTINUE;
  1746.  
  1747.  
  1748. set_task(get_pcvar_float(cvar_hud_rate), "DisplayInfo", id+TaskInfo);
  1749.  
  1750. if(!is_user_alive(id))
  1751. {
  1752. new target = entity_get_int(id, EV_INT_iuser2);
  1753.  
  1754. if(!target || target == id)
  1755. return PLUGIN_CONTINUE;
  1756. set_hudmessage(0, 255, 0, 0.65, 0.35, 0, 2.0, get_pcvar_float(cvar_hud_rate)+0.2, 0.1, 0.2, -1);
  1757. if (get_pcvar_num(cvar_pointer[LevelsON]))
  1758. {
  1759. new killsForLVL;
  1760. new xp_for_kill = g_double_exp[target]?200:100;
  1761. if ((user_xpForLVL[target]-user_xp[target])/xp_for_kill<1)
  1762. killsForLVL = 1;
  1763. else
  1764. killsForLVL = (user_xpForLVL[target]-user_xp[target])/xp_for_kill;
  1765. ShowSyncHudMsg(id, SyncHudObj[0], "[%L: %s]^n[%L: %L]^n[%L: %i]^n[%L: %s]^n[%L: %i]^n[%L: %i]^n[%L: %i/%i]^n[%L]^n%s",
  1766. id, "HUD_NAME", PlayerName[target],
  1767. id, "HUD_KNIFE", id, knife_names[user_knife[target]],
  1768. id, "HUD_EARNED", user_total_unlockeds[target],
  1769. id, "HUD_MONEY", PriceToString(user_left_points[target]),
  1770. id, "HUD_KS", user_killstreak[target],
  1771. id, "HUD_LEVEL", user_level[target],
  1772. id, "HUD_EXP", user_xp[target], user_xpForLVL[target],
  1773. id, "HUD_KILLS", killsForLVL,HTXT);
  1774. }
  1775. else
  1776. {
  1777. ShowSyncHudMsg(id, SyncHudObj[0], "[%L: %s]^n[%L: %L]^n[%L: %i]^n[%L: %s]^n[%L: %i]^n%s",
  1778. id, "HUD_NAME", PlayerName[target],
  1779. id, "HUD_KNIFE", id, knife_names[user_knife[target]],
  1780. id, "HUD_EARNED", user_total_unlockeds[target],
  1781. id, "HUD_MONEY", PriceToString(user_left_points[target]),
  1782. id, "HUD_KS", user_killstreak[target],HTXT);
  1783. }
  1784. return PLUGIN_CONTINUE;
  1785. }
  1786. if(!user_knife[id])
  1787. return PLUGIN_CONTINUE;
  1788.  
  1789. set_hudmessage(0, 255, 255, 0.02, 0.17, 0, 2.0, get_pcvar_float(cvar_hud_rate)+0.2, 0.1, 0.2, -1);
  1790. if (get_pcvar_num(cvar_pointer[LevelsON]))
  1791. {
  1792. new killsForLVL;
  1793. new xp_for_kill = g_double_exp[id]?200:100;
  1794. if ((float(user_xpForLVL[id]-user_xp[id]))/float(xp_for_kill)<1)
  1795. killsForLVL = 1;
  1796. else
  1797. killsForLVL = floatround(float(user_xpForLVL[id]-user_xp[id])/float(xp_for_kill));
  1798. ShowSyncHudMsg(id, SyncHudObj[0], "[%L: %L]^n[%L: %i]^n[%L: %i]^n[%L: %i]^n[%L: %i]^n[%L: %i/%i]^n[%L]^n%s",
  1799. id, "HUD_KNIFE",id, knife_names[user_knife[id]],
  1800. id, "HUD_EARNED", user_total_unlockeds[id],
  1801. id, "HUD_MONEY", user_left_points[id],
  1802. id, "HUD_KS", user_killstreak[id],
  1803. id, "HUD_LEVEL", user_level[id],
  1804. id, "HUD_EXP", user_xp[id], user_xpForLVL[id],
  1805. id, "HUD_KILLS", killsForLVL,HTXT);
  1806. }
  1807. else
  1808. {
  1809. ShowSyncHudMsg(id, SyncHudObj[0], "[%L: %L]^n[%L: %i]^n[%L: %i]^n[%L: %i]^n%s",
  1810. id, "HUD_KNIFE",id, knife_names[user_knife[id]],
  1811. id, "HUD_EARNED", user_total_unlockeds[id],
  1812. id,"HUD_MONEY", user_left_points[id],
  1813. id,"HUD_KS",user_killstreak[id],HTXT);
  1814. }
  1815. return PLUGIN_CONTINUE;
  1816. }
  1817.  
  1818. new his_tag[33][64];
  1819.  
  1820. public set_his_tag(id)
  1821. {
  1822. if(is_user_owner(id))
  1823. {
  1824. formatex(his_tag[id],charsmax(his_tag),TAG_OWNER)
  1825. }
  1826. else if(is_user_head(id))
  1827. {
  1828. formatex(his_tag[id],charsmax(his_tag),TAG_HEAD)
  1829. }
  1830. else if(is_user_normal_admin(id))
  1831. {
  1832. formatex(his_tag[id],charsmax(his_tag),TAG_ADMIN)
  1833. }
  1834. else if(is_user_gold_vip(id))
  1835. {
  1836. formatex(his_tag[id],charsmax(his_tag),TAG_GOLD)
  1837. }
  1838. else if(is_user_vip_(id))
  1839. {
  1840. formatex(his_tag[id],charsmax(his_tag),TAG_VIP)
  1841. }else {
  1842. formatex(his_tag[id],charsmax(his_tag),TAG_NONE)
  1843. }
  1844. }
  1845. public handleSayText()
  1846. {
  1847. new id = get_msg_arg_int(1);
  1848.  
  1849. if(!is_user_connected(id) || !get_pcvar_num(cvar_pointer[LevelsON]))
  1850. return PLUGIN_CONTINUE;
  1851. set_his_tag(id)
  1852. new szTmp[256], szTmp2[256];
  1853. get_msg_arg_string(2, szTmp, charsmax(szTmp));
  1854.  
  1855. new szPrefix[64];
  1856.  
  1857. formatex(szPrefix, charsmax(szPrefix),"^x03[^x04Level: %d^x03]%s ", user_level[id],his_tag[id]);
  1858.  
  1859. if(!equal(szTmp,"#Cstrike_Chat_All"))
  1860. {
  1861. add(szTmp2,charsmax(szTmp2),szPrefix);
  1862. add(szTmp2,charsmax(szTmp2)," ");
  1863. add(szTmp2,charsmax(szTmp2),szTmp);
  1864. }
  1865. else
  1866. {
  1867. add(szTmp2,charsmax(szTmp2),szPrefix);
  1868. add(szTmp2,charsmax(szTmp2),"^x03 %s1^x01 : %s2");
  1869. }
  1870.  
  1871. set_msg_arg_string(2, szTmp2);
  1872.  
  1873. return PLUGIN_CONTINUE;
  1874. }
  1875.  
  1876. public SayHandle(id)
  1877. {
  1878. static cmd[3][25], argv[25];
  1879. formatex(cmd[0], charsmax(cmd[]), "%L", id, "SAY_CMD_MENU");
  1880. formatex(cmd[1], charsmax(cmd[]), "%L", id, "SAY_CMD_HUD");
  1881. formatex(cmd[2], charsmax(cmd[]), "%L", id, "SAY_CMD_PAY");
  1882. read_argv(1, argv, charsmax(argv));
  1883.  
  1884. if(containi(argv, cmd[0]) == 0)
  1885. ChooseFraction(id);
  1886. else if(containi(argv, cmd[1]) == 0)
  1887. {
  1888. if (!task_exists(id+TaskInfo))
  1889. set_task(1.0, "DisplayInfo", id+TaskInfo);
  1890. user_hud[id]=!user_hud[id];
  1891. user_hud[id]? PrintChat(id, "%L",id, "CHAT_HUD_ON"):PrintChat(id, "%L", id, "CHAT_HUD_OFF");
  1892. }
  1893. else if(containi(argv, cmd[2]) == 0)
  1894. {
  1895. user_is_paying_to[id] =0;
  1896. user_is_paying_amount[id]=0;
  1897. CreatePayMenu(id);
  1898. }
  1899. else
  1900. return PLUGIN_CONTINUE;
  1901. client_cmd(id, "spk ^"%s",sound[Select]);
  1902. if (get_pcvar_num(cvar_pointer[HideCommandInput]) == 1)
  1903. return PLUGIN_HANDLED_MAIN;
  1904. return PLUGIN_CONTINUE;
  1905. }
  1906.  
  1907. public PlayerSpawn(id)
  1908. {
  1909. if(id<TaskSpawn)
  1910. user_killstreak[id] = 0;
  1911. if(id>=TaskSpawn)
  1912. id-= TaskSpawn;
  1913.  
  1914. SetTask(id, 0);
  1915. if (is_user_alive(id))
  1916. strip_user_weapons(id);
  1917.  
  1918. if (!user_unlocked_knifes[id][user_knife[id]] && !user_using_trial[id] && user_knife[id] > KNIFE_DEFAULT)
  1919. {
  1920. PrintChat(id, "%L",id, "CHAT_TRIAL_END");
  1921. client_cmd(id, "spk ^"%s",sound[Exit]);
  1922. user_knife[id] = KNIFE_NONE;
  1923. LoadLevels(id, KNIFE_NONE);
  1924. }
  1925.  
  1926. if(user_new_knife[id] > KNIFE_NONE)
  1927. {
  1928. if (user_using_trial[id])
  1929. {
  1930. user_using_trial[id] = false;
  1931. SaveTrial(id, user_new_knife[id]);
  1932. }
  1933. SaveLevels(id);
  1934. user_knife[id] = user_new_knife[id];
  1935. user_new_knife[id] = 0;
  1936. LoadLevels(id, user_knife[id]);
  1937. }
  1938.  
  1939. if(user_knife[id] > KNIFE_NONE && is_user_alive(id))
  1940. give_item(id, "weapon_knife");
  1941. else
  1942. ChooseFraction(id);
  1943. }
  1944.  
  1945. public PlayerKilled(victim, attacker)
  1946. {
  1947. user_killstreak[victim] = 0;
  1948. if(user_new_knife[victim])
  1949. {
  1950. SetTask(victim, 0);
  1951. PrintChat(victim, "%L", victim, "CHAT_WILL_NEXT_ROUND");
  1952. SaveLevels(victim);
  1953. user_knife[victim] = user_new_knife[victim];
  1954. user_new_knife[victim] = KNIFE_NONE;
  1955. LoadLevels(victim, user_knife[victim]);
  1956. }
  1957. if (attacker > get_maxplayers() || attacker < 1)
  1958. return PLUGIN_CONTINUE;
  1959.  
  1960. if (attacker != victim)
  1961. {
  1962. new default_money = get_pcvar_num(cvar_pointer[MoneyFKill]);
  1963. new new_money = default_money+default_money*user_killstreak[attacker]/10;
  1964. new_money = is_happy_hour? new_money*2:new_money;
  1965. new_money = is_user_vip(attacker)? new_money*2:new_money;
  1966. user_left_points[attacker]+=new_money;
  1967. user_left_points[attacker]+=new_money;
  1968. user_killstreak[attacker]++;
  1969. cs_set_user_money(attacker, user_left_points[attacker], 1);
  1970. SaveData(attacker);
  1971. CheckForNewUnlocks(attacker, new_money);
  1972. if (get_pcvar_num(cvar_pointer[LevelsON]) && user_knife[attacker])
  1973. {
  1974. new new_xp = 100;
  1975. if (g_double_exp[attacker])
  1976. new_xp*=2;
  1977. //client_print(attacker, print_center, "+%i", new_xp);
  1978. user_xp[attacker]+=new_xp;
  1979. CheckLevel(attacker);
  1980. }
  1981. }
  1982. if(is_user_alive(attacker) && get_pcvar_num(cvar_pointer[RestoreHP]))
  1983. {
  1984. static MapName[32], MapPrefix[6];
  1985. get_mapname(MapName, charsmax(MapName));
  1986.  
  1987. new const Health[] = {35, 65, 200};
  1988. new user_health = get_user_health(attacker);
  1989.  
  1990. for (new i=0; i<sizeof Health; i++)
  1991. {
  1992. formatex(MapPrefix, charsmax(MapPrefix), "%ihp", Health[i]);
  1993. if(contain(MapName, MapPrefix) != -1 && user_health<Health[i])
  1994. {
  1995. set_user_health(attacker, Health[i]);
  1996. client_cmd(attacker, "spk ^"%s",sound[LevelUP]); // spk healed
  1997. set_hudmessage(255, 0, 0, 0.02, 0.84, 0, 0.0, 2.0, 0.5, 0.5, -1);
  1998. ShowSyncHudMsg(attacker, SyncHudObj[1], "+%i",Health[i]-user_health)
  1999. Display_Fade(attacker, 1<<10, 1<<10, 0x0000, 255, 0, 0, 75);
  2000. break;
  2001. }
  2002. }
  2003. }
  2004. return PLUGIN_CONTINUE;
  2005. }
  2006.  
  2007. public ExpForLevel(level)
  2008. return level*get_pcvar_num(cvar_pointer[LevelRATIO]);
  2009.  
  2010. public PobedaTerro()
  2011. PobednjenaRunda("TERRORIST");
  2012.  
  2013. public PobedaCT()
  2014. PobednjenaRunda("CT");
  2015.  
  2016. public PobednjenaRunda(const Team[])
  2017. {
  2018. new Players[32], playerCount, id;
  2019. get_players(Players, playerCount, "ceh", Team);
  2020.  
  2021. if(get_playersnum() < 3)
  2022. return;
  2023. new money = get_pcvar_num(cvar_pointer[MoneyFWinR]);
  2024.  
  2025. for (new i=0; i<playerCount; i++)
  2026. {
  2027. id = Players[i];
  2028.  
  2029. if(!is_user_connected(id))
  2030. continue;
  2031.  
  2032. if (is_user_vip(id))
  2033. {
  2034. user_left_points[id]+=money*2;
  2035. user_left_points[id]+=money*2;
  2036. }
  2037. else
  2038. {
  2039. user_left_points[id]+=money;
  2040. user_left_points[id]+=money;
  2041. }
  2042. cs_set_user_money(id, user_left_points[id], 1);
  2043. SaveData(id);
  2044. CheckForNewUnlocks(id, money);
  2045. }
  2046. }
  2047.  
  2048. public CmdAddPoints(id, level, cid)
  2049. {
  2050. if(!cmd_access(id, level, cid, 3))
  2051. {
  2052. client_cmd(id, "spk ^"%s",sound[Exit]);
  2053. return PLUGIN_HANDLED;
  2054. }
  2055.  
  2056. new argv[35];
  2057. read_argv(1, argv, charsmax(argv));
  2058. new target = cmd_target(id, argv, 0);
  2059.  
  2060. if(!target)
  2061. return PLUGIN_CONTINUE;
  2062.  
  2063. read_argv(2, argv, charsmax(argv));
  2064. new value = str_to_num(argv);
  2065.  
  2066. user_left_points[target]+=value;
  2067. user_left_points[target]+=value;
  2068. cs_set_user_money(target, user_left_points[target], 1);
  2069. SaveData(target);
  2070. CheckForNewUnlocks(target, value);
  2071.  
  2072. client_cmd(id, "spk ^"%s",sound[LevelUP]);
  2073. console_print(id, "%L", id ,"CMD_SUCCESS1",PlayerName[target], value);
  2074.  
  2075. if(get_pcvar_num(cvar_pointer[AdminLog]))
  2076. LogCommand(id, target, "knife_give_money", value);
  2077.  
  2078. return PLUGIN_CONTINUE;
  2079. }
  2080.  
  2081. public CmdSetPoints(id, level, cid)
  2082. {
  2083. if(!cmd_access(id, level, cid, 3))
  2084. {
  2085. client_cmd(id, "spk ^"%s",sound[Exit]);
  2086. return PLUGIN_HANDLED;
  2087. }
  2088.  
  2089. new argv[35];
  2090. read_argv(1, argv, charsmax(argv));
  2091. if(equali(argv,"@all"))
  2092. {
  2093. for(new target;target < MAX_PLAYERS;target++)
  2094. {
  2095. if(is_user_connected(target))
  2096. {
  2097. read_argv(2, argv, charsmax(argv));
  2098. new value = str_to_num(argv);
  2099.  
  2100. user_left_points[target]=value;
  2101. user_left_points[target]=value;
  2102. cs_set_user_money(target, user_left_points[target], 1);
  2103. SaveData(target);
  2104. CheckForNewUnlocks(target, value);
  2105. client_cmd(id, "spk ^"%s",sound[LevelUP]);
  2106. console_print(id, "%L", id ,"CMD_SUCCESS1",PlayerName[target], value);
  2107.  
  2108. if(get_pcvar_num(cvar_pointer[AdminLog]))
  2109. LogCommand(id, target, "knife_set_money", value);
  2110. }
  2111. }
  2112. }
  2113. else
  2114. {
  2115. new target = cmd_target(id, argv, 0);
  2116.  
  2117. if(!target)
  2118. return PLUGIN_CONTINUE;
  2119.  
  2120. read_argv(2, argv, charsmax(argv));
  2121. new value = str_to_num(argv);
  2122.  
  2123. user_left_points[target]=value;
  2124. user_left_points[target]=value;
  2125. cs_set_user_money(target, user_left_points[target], 1);
  2126. SaveData(target);
  2127. CheckForNewUnlocks(target, value);
  2128. client_cmd(id, "spk ^"%s",sound[LevelUP]);
  2129. console_print(id, "%L", id ,"CMD_SUCCESS1",PlayerName[target], value);
  2130.  
  2131. if(get_pcvar_num(cvar_pointer[AdminLog]))
  2132. LogCommand(id, target, "knife_set_money", value);
  2133. }
  2134. return PLUGIN_CONTINUE;
  2135. }
  2136.  
  2137. public CmdSetLvl(id, level, cid)
  2138. {
  2139. if(!cmd_access(id, level, cid, 3))
  2140. {
  2141. client_cmd(id, "spk ^"%s",sound[Exit]);
  2142. return PLUGIN_HANDLED;
  2143. }
  2144.  
  2145. new argv[35];
  2146. read_argv(1, argv, charsmax(argv));
  2147. new target = cmd_target(id, argv, 0);
  2148.  
  2149. if(!target)
  2150. return PLUGIN_CONTINUE;
  2151.  
  2152. read_argv(2, argv, charsmax(argv));
  2153. new value = str_to_num(argv);
  2154.  
  2155. if (value < 1)
  2156. value = 1;
  2157.  
  2158. user_level[target]=value;
  2159. user_xp[target]=0;
  2160. user_xpForLVL[target]=ExpForLevel(user_level[target]);
  2161. SaveLevels(target);
  2162.  
  2163. client_cmd(id, "spk ^"%s",sound[LevelUP]);
  2164. console_print(id, "%L", id ,"CMD_SUCCESS2",PlayerName[target], value);
  2165.  
  2166. if(get_pcvar_num(cvar_pointer[AdminLog]))
  2167. LogCommand(id, target, "knife_setlvl", value);
  2168.  
  2169. return PLUGIN_CONTINUE;
  2170. }
  2171.  
  2172. public CheckLevel(id)
  2173. {
  2174. if(!user_knife[id])
  2175. {
  2176. user_xp[id]=0;
  2177. return PLUGIN_CONTINUE;
  2178. }
  2179.  
  2180. if (user_xp[id]>=user_xpForLVL[id])
  2181. {
  2182. user_level[id]++;
  2183. user_xp[id]=0;
  2184. user_xpForLVL[id]=ExpForLevel(user_level[id]);
  2185. client_cmd(id, "spk ^"%s",sound[LevelUP]);
  2186. PrintChat(id, "%L", id, "CHAT_WELLCOME_LEVEL", user_level[id]);
  2187. //dobrodosli na nivo
  2188. }
  2189. SaveLevels(id);
  2190. return PLUGIN_CONTINUE;
  2191. }
  2192.  
  2193. public CheckForNewUnlocks(id, points)
  2194. {
  2195. if (points <= 0)
  2196. return;
  2197. new message[191], lang_or[10], unlockeds=0;
  2198. new len = formatex(message, charsmax(message), "%L ",id, "CHAT_EARNED_ENOUGH");
  2199. formatex(lang_or, charsmax(lang_or), " %L ",id, "CHAT_ADD_OR");
  2200.  
  2201. for (new knife=1; knife<=knifes_loaded; knife++)
  2202. if(!knife_premium[knife] && !user_unlocked_knifes[id][knife])
  2203. if ((user_left_points[id]>=knife_price[knife]) && (user_left_points[id]-points<knife_price[knife]))
  2204. {
  2205. len+=formatex(message[len], charsmax(message)-len, "!y%s!t%L",unlockeds>0?lang_or:"",id, knife_names[knife]);
  2206. unlockeds++;
  2207. }
  2208. if (unlockeds > 4)
  2209. {
  2210. PrintChat(id, "%L",id, "CHAT_EARNED_NEW_KNIFES");
  2211. client_cmd(id, "spk ^"%s", sound[LevelUP]);
  2212. }
  2213. else if (unlockeds>0)
  2214. {
  2215. add(message, charsmax(message), "!y.");
  2216. PrintChat(id, message);
  2217. client_cmd(id, "spk ^"%s", sound[LevelUP]);
  2218. }
  2219. }
  2220. stock LogCommand(admin, target, command[], value)
  2221. {
  2222. new LogFile[58], LogText[196], Time[9], Date[9];
  2223.  
  2224. get_time("%H:%M:%S", Time, charsmax(Time));
  2225. get_time("%y%m%d", Date, charsmax(Date));
  2226. formatex(LogFile, charsmax(LogFile), "addons/amxmodx/configs/GlobalKnife/logs/%s.log", Date);
  2227. formatex(LogText, charsmax(LogText), "[%s] Admin: %s^"<%s>^" %L: %s ^"%s<%s>^" %L %i",Time, PlayerName[admin], AuthID[admin], LANG_SERVER, "CMD_COMMAND", command, PlayerName[target], AuthID[target], LANG_SERVER, "CMD_VALUE", value);
  2228. write_file(LogFile, LogText);
  2229. }
  2230.  
  2231. /*public CurWeapon(id)
  2232. {
  2233. if(get_user_weapon(id) != CSW_KNIFE || !is_user_connected(id))
  2234. return PLUGIN_CONTINUE;
  2235.  
  2236. if(user_knife[id] == KNIFE_NONE || user_knife[id] == KNIFE_DEFAULT)
  2237. {
  2238. entity_set_string(id, EV_SZ_viewmodel, "models/v_knife.mdl");
  2239. entity_set_string(id, EV_SZ_weaponmodel, "models/p_knife.mdl");
  2240. return PLUGIN_CONTINUE;
  2241. }
  2242.  
  2243. static Model[40];
  2244. formatex(Model, charsmax(Model), "models/Knife_Gaming/v_%s.mdl", file_names[user_knife[id]-2]);
  2245. entity_set_string(id, EV_SZ_viewmodel, Model);
  2246.  
  2247. if (p_model_exist[user_knife[id]-2])
  2248. formatex(Model, charsmax(Model), "models/Knife_Gaming/p_%s.mdl", file_names[user_knife[id]-2]);
  2249. else
  2250. formatex(Model, charsmax(Model), "models/p_knife.mdl");
  2251. entity_set_string(id, EV_SZ_weaponmodel, Model);
  2252.  
  2253. return PLUGIN_CONTINUE;
  2254. }*/
  2255.  
  2256. public fw_knife_deploy_post(weapon_ent)
  2257. {
  2258. static id
  2259. id = get_pdata_cbase(weapon_ent, 41, 4)
  2260. if(!is_user_connected(id))
  2261. return PLUGIN_CONTINUE
  2262. if(!is_user_alive(id))
  2263. return PLUGIN_CONTINUE
  2264. static weaponid
  2265. weaponid = cs_get_weapon_id(weapon_ent)
  2266. if(weaponid == CSW_KNIFE)
  2267. {
  2268. if(user_knife[id] == KNIFE_NONE || user_knife[id] == KNIFE_DEFAULT)
  2269. {
  2270. entity_set_string(id, EV_SZ_viewmodel, "models/v_knife.mdl");
  2271. entity_set_string(id, EV_SZ_weaponmodel, "models/p_knife.mdl");
  2272. }
  2273. else
  2274. {
  2275. static Model[40];
  2276. formatex(Model, charsmax(Model), "models/Knife_Gaming/v_%s.mdl", file_names[user_knife[id]-2]);
  2277. entity_set_string(id, EV_SZ_viewmodel, Model);
  2278.  
  2279. if (p_model_exist[user_knife[id]-2])
  2280. formatex(Model, charsmax(Model), "models/Knife_Gaming/p_%s.mdl", file_names[user_knife[id]-2]);
  2281. else
  2282. formatex(Model, charsmax(Model), "models/p_knife.mdl");
  2283. entity_set_string(id, EV_SZ_weaponmodel, Model);
  2284. }
  2285. }
  2286. return PLUGIN_CONTINUE
  2287. }
  2288.  
  2289. public MoneyChanged(MsgId, MsgDest, id)
  2290. {
  2291. if(is_user_connected(id))
  2292. cs_set_user_money(id, user_left_points[id], 0);
  2293. return PLUGIN_HANDLED;
  2294. }
  2295.  
  2296. stock SaveData(id, unlock = 0)
  2297. {
  2298. static VaultKey[64], VaultData[MAX_CHARS+4];
  2299.  
  2300. if (unlock)
  2301. {
  2302. formatex(VaultKey, charsmax(VaultKey),"%s-%s-lock", AuthID[id], knife_names[user_would_buy[id]]);
  2303. formatex(VaultData, charsmax(VaultData),"%i",user_unlocked_knifes[id][user_would_buy[id]]?1:0);
  2304. nvault_set(vault, VaultKey, VaultData);
  2305. user_would_buy[id] = 0;
  2306. }
  2307.  
  2308. formatex(VaultKey, charsmax(VaultKey), "%s-stats", AuthID[id]);
  2309. formatex(VaultData, charsmax(VaultData), "#%i#%s", user_left_points[id], knife_names[user_knife[id]]);
  2310. nvault_set(vault, VaultKey, VaultData);
  2311. }
  2312.  
  2313. public LoadData(id)
  2314. {
  2315. new VaultKey[64], VaultData[MAX_CHARS+4], PlayerData[2][MAX_CHARS+4];
  2316.  
  2317. for (new knife = 2; knife<=knifes_loaded; knife++)
  2318. {
  2319. formatex(VaultKey, charsmax(VaultKey), "%s-%s-lock", AuthID[id], knife_names[knife]);
  2320. nvault_get(vault, VaultKey, VaultData, charsmax(VaultData));
  2321. user_unlocked_knifes[id][knife] = str_to_num(VaultData) == 1?true:false;
  2322. if (user_unlocked_knifes[id][knife])
  2323. user_total_unlockeds[id]++;
  2324.  
  2325. }
  2326.  
  2327. formatex(VaultKey, charsmax(VaultKey), "%s-stats", AuthID[id]);
  2328. nvault_get(vault, VaultKey, VaultData, charsmax(VaultData));
  2329. replace_all(VaultData, charsmax(VaultData), "#", " ");
  2330. parse(VaultData, PlayerData[0], charsmax(PlayerData[]), PlayerData[1], charsmax(PlayerData[]));
  2331. user_left_points[id] = str_to_num(PlayerData[0]);
  2332.  
  2333. user_left_points[id] = user_left_points[id];
  2334.  
  2335. for (new i = 0; i<=knifes_loaded; i++)
  2336. {
  2337. if (user_unlocked_knifes[id][i])
  2338. user_left_points[id]-=knife_price[i];
  2339. }
  2340. if (get_pcvar_num(cvar_pointer[LoadLastUsedKnife]))
  2341. {
  2342. for (new knife = 1; knife<=knifes_loaded; knife++)
  2343. if (equal(PlayerData[1], knife_names[knife]))
  2344. {
  2345. if (knife_premium[knife] && !is_user_vip(id))
  2346. {
  2347. user_knife[id] = KNIFE_NONE;
  2348. LoadLevels(id, KNIFE_NONE);
  2349. }
  2350. else
  2351. {
  2352. user_knife[id] = knife;
  2353. LoadLevels(id, knife);
  2354. user_xpForLVL[id] = ExpForLevel(user_level[id]);
  2355. }
  2356. }
  2357. }
  2358. }
  2359.  
  2360. public HappyHourCheck(taskid)
  2361. {
  2362. if(get_pcvar_num(cvar_pointer[HappyHour]) == 1)
  2363. {
  2364. is_happy_hour = true;
  2365. //client_print(0,print_console,"DEBUG: HP == 1")
  2366. }
  2367. else if(get_pcvar_num(cvar_pointer[HappyHour]) == -1)
  2368. {
  2369. is_happy_hour = false;
  2370. //client_print(0,print_console,"DEBUG: HP == -1")
  2371. }
  2372. else {
  2373. new data[3]
  2374. get_time("%H", data, 2)
  2375. new Hours = str_to_num(data) //time(Hours);
  2376. new BeginHour = get_pcvar_num(cvar_pointer[HappyHourStart]);
  2377. new EndHour = get_pcvar_num(cvar_pointer[HappyHourStop]);
  2378.  
  2379. if(BeginHour == EndHour || EndHour == Hours)
  2380. {
  2381. is_happy_hour = false;
  2382. //client_print(0,print_console,"DEBUG: Hours = %d data %s BeginHour = %d EndHour = %d (FALSE)",Hours,data,BeginHour,EndHour)
  2383. }
  2384.  
  2385. else if( EndHour> Hours >= BeginHour)
  2386. {
  2387. is_happy_hour = true;
  2388. //client_print(0,print_console,"DEBUG: Hours = %d data %s BeginHour = %d EndHour = %d (TRUE)",Hours,data,BeginHour,EndHour)
  2389.  
  2390. }
  2391. else
  2392. {
  2393. is_happy_hour = false;
  2394. //client_print(0,print_console,"DEBUG: Hours = %d data %s BeginHour = %d EndHour = %d (FALSE)",Hours,data,BeginHour,EndHour)
  2395. }
  2396.  
  2397. }
  2398.  
  2399. if(is_happy_hour)
  2400. {
  2401. formatex(HTXT,charsmax(HTXT),"Happy Hour! (Double EXP)")
  2402. //client_print(0,print_console,"DEBUG: TEXT SET (TRUE)")
  2403. }
  2404. else
  2405. {
  2406. formatex(HTXT,charsmax(HTXT),"")
  2407. //client_print(0,print_console,"DEBUG: TEXT SET (FALSE)")
  2408. }
  2409. set_task(HP_RATE,"HappyHourCheck",HP_TASK)
  2410. }
  2411.  
  2412. public Advertisement()
  2413. {
  2414. for (new id = 1; id <= get_maxplayers(); id++)
  2415. {
  2416. if (!is_user_connected(id))
  2417. continue;
  2418.  
  2419. switch(random(6))
  2420. {
  2421. case 0: PrintChat(id, "%L",id, "ADVERT1");
  2422. case 1: PrintChat(id, "%L",id, "ADVERT2");
  2423. case 2: PrintChat(id, "%L",id, "ADVERT3");
  2424. case 3: PrintChat(id, "%L",id, "ADVERT4");
  2425. case 4: PrintChat(id, "%L",id, "ADVERT5");
  2426. case 5: PrintChat(id, "%L",id, "ADVERT6");
  2427. }
  2428. }
  2429. }
  2430.  
  2431. stock PrintChat(const id, const input[], any:...)
  2432. {
  2433. static prefix[64], message[191];
  2434. get_pcvar_string(cvar_pointer[ChatPrefix], prefix, charsmax(prefix));
  2435. new len = formatex(message, charsmax(message), "^4%s^1 ", prefix);
  2436. vformat(message[len], 190-len, input, 3);
  2437.  
  2438. replace_all(message, charsmax(message), "!g", "^4");
  2439. replace_all(message, charsmax(message), "!y", "^1");
  2440. replace_all(message, charsmax(message), "!t", "^3");
  2441. replace_all(message, charsmax(message), "!n", "^1");
  2442.  
  2443. message_begin(MSG_ONE_UNRELIABLE, g_msg_saytext, _, id);
  2444. write_byte(id);
  2445. write_string(message);
  2446. message_end();
  2447. }
  2448.  
  2449. stock MakeBarTime(id, seconds)
  2450. {
  2451. message_begin(MSG_ONE_UNRELIABLE, g_msg_bartime, _, id);
  2452. write_short(seconds);
  2453. message_end();
  2454. }
  2455.  
  2456. stock SetTask(id, set = 1)
  2457. {
  2458. new changing = task_exists(id+TaskSpawn);
  2459. if(set == 1 )
  2460. {
  2461. if (changing)
  2462. remove_task(id+TaskSpawn);
  2463. new seconds = get_pcvar_num(cvar_pointer[ChangeDelay]);
  2464. set_task(float(seconds), "PlayerSpawn", id+TaskSpawn);
  2465. MakeBarTime(id, seconds);
  2466.  
  2467. }
  2468. if(set == 0 && changing)
  2469. {
  2470. remove_task(id+TaskSpawn);
  2471. MakeBarTime(id, 0);
  2472. }
  2473. }
  2474.  
  2475. stock Display_Fade(id, duration, holdtime, fadetype, red, green, blue, alpha)
  2476. {
  2477. message_begin(MSG_ONE, g_msg_screenfade, {0,0,0}, id );
  2478. write_short(duration); // Duration of fadeout
  2479. write_short(holdtime); // Hold time of color
  2480. write_short(fadetype); // Fade type
  2481. write_byte (red); // Red
  2482. write_byte (green); // Green
  2483. write_byte (blue); // Blue
  2484. write_byte (alpha); // Alpha
  2485. message_end();
  2486. }
  2487.  
  2488. #if defined SHOP
  2489. public ShopMenu(id)
  2490. {
  2491. new item[81], price;
  2492. formatex(item, charsmax(item), "\w[\rGlobal Knife\w]\r %L\w",id, "SHOP_TITLE");
  2493. new menu = menu_create(item, "ShopMenu_Handler");
  2494. price = get_pcvar_num(p_respawn);
  2495. if(g_respawned[id] || is_user_alive(id) || user_left_points[id] < price)
  2496. formatex(item, 80, "\d%L \w%L\d (%L) [%L:\w $%s\d]",id, "SHOP_MENU_BUY",id ,"SHOP_ITEM_RESPAWN",id, "SHOP_MENU_ONE_IN_ROUND",id, "SHOP_MENU_PRICE", PriceToString(price));
  2497. else
  2498. formatex(item, 80, "\y%L %L \d(%L) \w[\r%L: $%s\w]",id, "SHOP_MENU_BUY",id, "SHOP_ITEM_RESPAWN",id, "SHOP_MENU_ONE_IN_ROUND",id, "SHOP_MENU_PRICE", PriceToString(price));
  2499. menu_additem(menu, item);
  2500. price = get_pcvar_num(p_jump);
  2501. if(g_double_jump[id] || get_user_flags(id) & ADMIN_LEVEL_H || user_left_points[id] < price)
  2502. formatex(item, 80, "\d%L \w%L\d (%L) [%L:\w$%s\d]",id, "SHOP_MENU_BUY",id, "SHOP_ITEM_DOUBLE_JUMP",id, "SHOP_MENU_ONE_ROUND",id, "SHOP_MENU_PRICE", PriceToString(price));
  2503. else
  2504. formatex(item, 80, "\y%L %L \d(%L) \w[\r%L: $%s\w]",id, "SHOP_MENU_BUY",id, "SHOP_ITEM_DOUBLE_JUMP",id, "SHOP_MENU_ONE_ROUND",id, "SHOP_MENU_PRICE", PriceToString(price));
  2505. menu_additem(menu, item);
  2506. price = get_pcvar_num(p_bhop);
  2507. if(g_autobhop[id] || user_left_points[id] < price)
  2508. formatex(item, 80, "\d%L \w%L\d (%L) [%L:\w$%s\d]",id, "SHOP_MENU_BUY",id, "SHOP_ITEM_ABHOP",id, "SHOP_MENU_ONE_ROUND",id, "SHOP_MENU_PRICE", PriceToString(price));
  2509. else
  2510. formatex(item, 80, "\y%L %L \d(%L) \w[\r%L: $%s\w]",id, "SHOP_MENU_BUY",id, "SHOP_ITEM_ABHOP",id, "SHOP_MENU_ONE_ROUND",id, "SHOP_MENU_PRICE", PriceToString(price));
  2511. menu_additem(menu, item);
  2512. price = get_pcvar_num(p_exp);
  2513. if(g_double_exp[id] || user_left_points[id] < price)
  2514. formatex(item, 80, "\d%L \w%L\d (%L) [%L:\w $%s\d]",id, "SHOP_MENU_BUY",id, "SHOP_ITEM_EXP",id, "SHOP_MENU_MAPCHANGE",id, "SHOP_MENU_PRICE", PriceToString(price));
  2515. else
  2516. formatex(item, 80, "\y%L %L \d(%L) \w[\r%L: $%s\w]",id, "SHOP_MENU_BUY",id, "SHOP_ITEM_EXP",id, "SHOP_MENU_MAPCHANGE",id, "SHOP_MENU_PRICE", PriceToString(price));
  2517. menu_additem(menu, item);
  2518. formatex(item, 80, "\r%L",id, "SHOP_MENU_EXIT");
  2519. menu_setprop(menu, MPROP_EXITNAME, item);
  2520. client_cmd(id, "spk ^"%s", sound[Select]);
  2521. menu_display(id, menu);
  2522. return PLUGIN_HANDLED;
  2523. }
  2524.  
  2525. public ShopMenu_Handler(id, menu, item)
  2526. {
  2527. if (item == MENU_EXIT)
  2528. {
  2529. client_cmd(id, "spk ^"%s", sound[Exit]);
  2530. menu_destroy(menu);
  2531. return PLUGIN_CONTINUE;
  2532. }
  2533. item++;
  2534. new cena;
  2535. switch(item)
  2536. {
  2537. case 1: // respawn
  2538. {
  2539. cena = get_pcvar_num(p_respawn);
  2540. if (is_user_alive(id))
  2541. {
  2542. client_cmd(id, "spk ^"%s", sound[Exit]);
  2543. PrintChat(id, "%L",id, "SHOP_ONLY_FOR_DEADS");
  2544. return PLUGIN_CONTINUE;
  2545. }
  2546. if(g_respawned[id])
  2547. {
  2548. client_cmd(id, "spk ^"%s", sound[Exit]);
  2549. PrintChat(id, "%L",id, "SHOP_ONLY_ONCE_IN_ROUND");
  2550. return PLUGIN_CONTINUE;
  2551. }
  2552. if(user_left_points[id] - cena < 0)
  2553. {
  2554. client_cmd(id, "spk ^"%s", sound[Exit]);
  2555. PrintChat(id, "%L",id, "SHOP_NOT_ENOUGH_MONEY");
  2556. return PLUGIN_CONTINUE;
  2557. }
  2558. new CsTeams:Team = cs_get_user_team(id);
  2559. if(Team == CS_TEAM_SPECTATOR || Team == CS_TEAM_UNASSIGNED)
  2560. {
  2561. if (is_user_connected(id))
  2562. PrintChat(id, "%L", id, "SHOP_CHAT_NO_SPEC");
  2563. return PLUGIN_CONTINUE;
  2564. }
  2565. user_left_points[id] -= cena;
  2566. user_left_points[id] -= cena;
  2567. cs_set_user_money(id, user_left_points[id]);
  2568. g_respawned[id] = true;
  2569. ExecuteHamB(Ham_CS_RoundRespawn, id);
  2570. PrintChat(id, "%L ^3%L^1.",id, "SHOP_SUC_BUY",id, "SHOP_ITEM_RESPAWN");
  2571. }
  2572. case 2: // dupli skok
  2573. {
  2574. cena = get_pcvar_num(p_jump);
  2575. if(get_user_flags(id)& ADMIN_LEVEL_H)
  2576. {
  2577. client_cmd(id, "spk ^"%s", sound[Exit]);
  2578. PrintChat(id, "%L",id, "SHOP_VIP_GOTS");
  2579. return PLUGIN_CONTINUE;
  2580. }
  2581. if(g_double_jump[id])
  2582. {
  2583. client_cmd(id, "spk ^"%s", sound[Exit]);
  2584. PrintChat(id, "^3%L^1 %L",id, "SHOP_ITEM_DOUBLE_JUMP",id, "SHOP_ALREADY_ACTIVATED");
  2585. return PLUGIN_CONTINUE;
  2586. }
  2587. if(user_left_points[id] - cena < 0)
  2588. {
  2589. client_cmd(id, "spk ^"%s", sound[Exit]);
  2590. PrintChat(id, "%L",id, "SHOP_NOT_ENOUGH_MONEY");
  2591. return PLUGIN_CONTINUE;
  2592. }
  2593. g_double_jump[id] = is_user_alive(id)?1:2;
  2594. user_left_points[id] -= cena;
  2595. user_left_points[id] -= cena;
  2596. cs_set_user_money(id, user_left_points[id]);
  2597. PrintChat(id, "%L^3 %L^1.",id, "SHOP_SUC_ACT", id, "SHOP_ITEM_DOUBLE_JUMP");
  2598. }
  2599. case 3: //auto bhop
  2600. {
  2601. cena = get_pcvar_num(p_bhop);
  2602. if(g_autobhop[id])
  2603. {
  2604. client_cmd(id, "spk ^"%s", sound[Exit]);
  2605. PrintChat(id, "^3%L^1 %L",id, "SHOP_ITEM_ABHOP",id, "SHOP_ALREADY_ACTIVATED");
  2606. return PLUGIN_CONTINUE;
  2607. }
  2608. if(user_left_points[id] - cena < 0)
  2609. {
  2610. client_cmd(id, "spk ^"%s", sound[Exit]);
  2611. PrintChat(id, "%L",id, "SHOP_NOT_ENOUGH_MONEY");
  2612. return PLUGIN_CONTINUE;
  2613. }
  2614. g_autobhop[id] = is_user_alive(id)?1:2;
  2615. user_left_points[id] -= cena;
  2616. user_left_points[id] -= cena;
  2617. cs_set_user_money(id, user_left_points[id]);
  2618. PrintChat(id, "%L^3 %L^1.",id, "SHOP_SUC_ACT", id, "SHOP_ITEM_ABHOP");
  2619. }
  2620. case 4: // double exp
  2621. {
  2622. cena = get_pcvar_num(p_exp);
  2623. if(g_double_exp[id])
  2624. {
  2625. client_cmd(id, "spk ^"%s", sound[Exit]);
  2626. PrintChat(id, "^3%L^1 %L",id, "SHOP_ITEM_EXP",id, "SHOP_ALREADY_ACTIVATED");
  2627. return PLUGIN_CONTINUE;
  2628. }
  2629. if(user_left_points[id] - cena < 0)
  2630. {
  2631. client_cmd(id, "spk ^"%s", sound[Exit]);
  2632. PrintChat(id, "%L",id, "SHOP_NOT_ENOUGH_MONEY");
  2633. return PLUGIN_CONTINUE;
  2634. }
  2635. user_left_points[id] -= cena;
  2636. user_left_points[id] -= cena;
  2637. cs_set_user_money(id, user_left_points[id]);
  2638. g_double_exp[id] = true;
  2639. PrintChat(id, "%L^3 %L^1.",id, "SHOP_SUC_ACT", id, "SHOP_ITEM_EXP");
  2640. }
  2641. }
  2642. client_cmd(id, "spk ^"%s", sound[Cash]);
  2643. return PLUGIN_CONTINUE;
  2644. }
  2645. public NewRound()
  2646. {
  2647. update_cvars()
  2648. for (new id=1; id<=get_maxplayers(); id++)
  2649. {
  2650. g_respawned[id] = false;
  2651. new message = 0;
  2652. if(g_double_jump[id])
  2653. {
  2654. g_double_jump[id]--;
  2655. if(!g_double_jump[id])
  2656. message++;
  2657. }
  2658. if(g_autobhop[id])
  2659. {
  2660. g_autobhop[id]--;
  2661. if(!g_autobhop[id])
  2662. message+=2;
  2663. }
  2664.  
  2665. if (!is_user_connected(id))
  2666. continue;
  2667.  
  2668. switch(message)
  2669. {
  2670. case 1: PrintChat(id, "%L",id, "SHOP_CHAT_DJUMP");
  2671. case 2: PrintChat(id, "%L",id, "SHOP_CHAT_ABHOP");
  2672. case 3: PrintChat(id, "%L",id, "SHOP_CHAT_BOTH");
  2673. }
  2674. }
  2675. }
  2676.  
  2677. public CmdStart(id, uc_handle)
  2678. {
  2679. if(!is_user_alive(id) || !g_double_jump[id])
  2680. return FMRES_IGNORED;
  2681.  
  2682. static button,flags,oldbutton;
  2683. button = get_uc(uc_handle, UC_Buttons);
  2684. flags = pev(id, pev_flags);
  2685. oldbutton = pev(id, pev_oldbuttons);
  2686. if((button & IN_JUMP) && !(flags & FL_ONGROUND) && !(oldbutton & IN_JUMP) && double_jump[id])
  2687. {
  2688. double_jump[id]=false;
  2689. new Float:velocity[3];
  2690. pev(id, pev_velocity,velocity);
  2691. velocity[2] = random_float(265.0,285.0);
  2692. set_pev(id, pev_velocity,velocity);
  2693. }
  2694. else if(flags & FL_ONGROUND)
  2695. double_jump[id]=true;
  2696.  
  2697. return FMRES_IGNORED;
  2698. }
  2699.  
  2700. public client_PreThink(id)
  2701. {
  2702. if(!g_autobhop[id])
  2703. return PLUGIN_CONTINUE;
  2704.  
  2705. entity_set_float(id, EV_FL_fuser2, 0.0); // Disable slow down after jumping
  2706.  
  2707. new Float:limit = get_pcvar_float(p_speed);
  2708.  
  2709. new Float:velocity[3];
  2710. entity_get_vector(id, EV_VEC_velocity, velocity);
  2711.  
  2712. if(limit > 0.0)
  2713. {
  2714. if (velocity[1] > limit)
  2715. velocity[1] = limit;
  2716. if (velocity[0] > limit)
  2717. velocity[0] = limit;
  2718. }
  2719. // Code from CBasePlayer::Jump (player.cpp) Make a player jump automatically
  2720. if (entity_get_int(id, EV_INT_button) & 2)
  2721. { // If holding jump
  2722. new flags = entity_get_int(id, EV_INT_flags)
  2723.  
  2724. if (flags & FL_WATERJUMP)
  2725. return PLUGIN_CONTINUE
  2726. if ( entity_get_int(id, EV_INT_waterlevel) >= 2 )
  2727. return PLUGIN_CONTINUE
  2728. if ( !(flags & FL_ONGROUND) )
  2729. return PLUGIN_CONTINUE
  2730.  
  2731. velocity[2] += 250.0;
  2732. entity_set_int(id, EV_INT_gaitsequence, 6) // Play the Jump Animation
  2733. }
  2734. entity_set_vector(id, EV_VEC_velocity, velocity)
  2735. return PLUGIN_CONTINUE;
  2736. }
  2737. #endif
  2738.  
  2739. public plugin_end()
  2740. nvault_close(vault);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement