Advertisement
Guest User

Untitled

a guest
May 4th, 2012
1,193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 78.50 KB | None | 0 0
  1. #include <amxmisc>
  2. #include <amxmodx>
  3. #include <fakemeta>
  4. #include <fun>
  5. #include <cstrike>
  6. #include <hamsandwich>
  7. #include <engine>
  8. #include <nvault>
  9. #include <vault>
  10.  
  11. #define PLUGIN "Knife-Mod"
  12. #define VERSION "V1.5"
  13. #define AUTHOR "Striker07"
  14.  
  15.  
  16. /*////////////////// Credits: \\\\\\\\\\\\\\\\\\
  17. // Pastout      For the use of his colorprint & Pointssystem
  18. // ZP Dev Team      For the use of their leapjump code
  19. // ConnorMcLeod     For the use of his Bhop Plugin
  20. // SchlumPF     For the use of his Knife Distance plugin
  21. // Exolent[jNr]     For making the save/load for saving perm items
  22. */
  23.  
  24. /*______________________________________________________________________________________________________________________
  25. |Still to-do:                                                       |
  26. |       - Perm Upgrade Endurance (faster slash & stab)                              |
  27. |       - Making so that players can sell their perm items & skins                          |
  28. |                                                           |
  29. |Need help for:                                                     |
  30. |       - Perm Upgrade Endurance (faster slash & stab)  [ fwd_Knife_PriAtk_Post & fwd_Knife_SecAtk_Post ]   |
  31. |                                                               |
  32. |______________________________________________________________________________________________________________________*/      
  33. /*  Includes:
  34.         - A pointssystem
  35.         - A knifeshop including skinsshop
  36.         - Knifemodmenu
  37.         - Give/take/reset tokens commands for admins
  38.         - Knife distance meter from SchlumPF witch extra points for godlike and wicked sick kills
  39.         - Cvars config file for easy configuration
  40.         - Only nVault, NO mySQL support
  41.        
  42.        
  43.  
  44. */
  45.  
  46. //  This you can customize to your needs. [
  47.  
  48. #define ADMIN_TOKENS        ADMIN_LEVEL_H   // access to give/take/set tokens
  49. #define skin3           "vip"
  50. #define skin4           "assassin_t"
  51. #define skin5           "chucky"
  52. #define skin6           "superleet"
  53. #define skin7           "crysis_us"
  54.  
  55. new const g_szPluginPrefix[] = "Knife-Mod";
  56.  
  57. // Do NOT uncomment all 3 will not work... either uncomment SAVE_METHOD_NICK OR SAVE_METHOD_IP OR SAVE_METHOD_ID
  58. // To save player data by nick, uncomment "//#define SAVE_METHOD_NICK"
  59. //#define SAVE_METHOD_NICK
  60. // To save player data by ip, uncomment "//#define SAVE_METHOD_IP"
  61. //#define SAVE_METHOD_IP
  62. // To save player data by id, uncomment "//#define SAVE_METHOD_ID"
  63. #define SAVE_METHOD_ID
  64.  
  65. //  ] See cvars in the config file for further configuration
  66.  
  67.  
  68. #define get_bit(%1,%2)      (%1 & 1<<(%2&31))
  69. #define set_bit(%1,%2)      %1 |= (1<<(%2&31))
  70. #define clear_bit(%1,%2)    %1 &= ~(1<<(%2&31))
  71.  
  72. new g_iMaxPlayers;
  73. #define FIRST_PLAYER_ID 1
  74. #define IsPlayer(%1) (FIRST_PLAYER_ID <= %1 <= g_iMaxPlayers)
  75. new g_iMsgSayText;
  76.  
  77. #pragma semicolon 1
  78.  
  79. #define OFFSET_CAN_LONGJUMP    356 // VEN
  80. #define BUNNYJUMP_MAX_SPEED_FACTOR 1.7
  81. #define PLAYER_JUMP     6
  82.  
  83. #define m_flNextPrimaryAttack 46
  84. #define m_flNextSecondaryAttack 47
  85. #define OFFSET_LINUX_WEAPONS 4
  86.  
  87. enum AttackType
  88. {
  89.     STAB = 0,
  90.     SLASH
  91. };
  92.  
  93. enum TraceType
  94. {
  95.     TRACELINE = 0,
  96.     TRACEHULL
  97. };
  98.  
  99. enum Sound
  100. {
  101.     WICKEDSICK = 0,
  102.     GODLIKE
  103. };
  104.  
  105. enum HitData
  106. {
  107.     AttackType:iAttack,
  108.     Float:flDistance,
  109.     iHitgroup,
  110.     iAttacker,
  111.     iVictim
  112. };
  113.  
  114. new g_szTraceType[TraceType][] =
  115. {
  116.     "TraceLine",
  117.     "TraceHull"
  118. };
  119.  
  120. new g_szSound[Sound][] =
  121. {
  122.     "misc/wickedsick.wav",
  123.     "misc/godlike.wav"
  124. };
  125.  
  126. new g_HitData[HitData];
  127.  
  128. new g_szHitgroup[8][] =
  129. {
  130.     "Full Body",
  131.     "Head",
  132.     "Chest",
  133.     "Stomach",
  134.     "Left Arm",
  135.     "Right Arm",
  136.     "Left Leg",
  137.     "Right Leg"
  138. };
  139.  
  140. const MAX_PLAYERS = 32;
  141.  
  142. #if defined SAVE_METHOD_NICK
  143. new g_iAuth[MAX_PLAYERS+1][32];
  144. #endif
  145. #if defined SAVE_METHOD_IP
  146. new g_iAuthIP[MAX_PLAYERS+1][32];
  147. #endif
  148. #if defined SAVE_METHOD_ID
  149. new g_iAuthID[MAX_PLAYERS+1][32];
  150. #endif
  151.  
  152. new g_vault;                // Open a new vault to store a players points.
  153. new g_iPoints[MAX_PLAYERS+1];       // Amount of Points a player has
  154. new g_bHeadShot[MAX_PLAYERS+1][MAX_PLAYERS+1];
  155. new bitvault;
  156.  
  157. new Float:g_LeapLastTime[MAX_PLAYERS+1];
  158. #define HITGROUP_HEAD 1
  159.  
  160.  
  161. //Bhop code
  162. new g_iCdWaterJumpTime[MAX_PLAYERS+1];
  163. new bool:g_bAlive[MAX_PLAYERS+1];
  164. new bool:g_bAutoBhop[MAX_PLAYERS+1];
  165. new g_pcvarBhopStyle, g_pcvarAutoBhop, g_pcvarFallDamage;
  166. new g_pcvarGravity;
  167.  
  168. new g_pRemoveBomb;
  169.  
  170. new knife_model[33];
  171. new g_Menu;
  172.  
  173. //Shop
  174.  
  175. //extra items
  176. new g_bHasBhop;
  177. new g_bHasLeap;
  178. new g_bHasNadePack;
  179. new g_bHasLowGravity;
  180. new g_bHasSpeed;
  181.  
  182. //perm upgrades
  183. new g_bHasPermVital;
  184. new g_bHasEndur;
  185. new g_bHasPermGrav;
  186. new g_bHasPermSpeed;
  187. new g_bHasPermInvis;
  188.  
  189. //skins
  190. new g_bHasSkin1;
  191. new g_bHasSkin2;
  192. new g_bHasSkin3;
  193. new g_bHasSkin4;
  194. new g_bHasSkin5;
  195. new g_bHasSkin6;
  196. new g_bHasSkin7;
  197. new g_bChoseSkin1;
  198. new g_bChoseSkin2;
  199. new g_bChoseSkin3;
  200. new g_bChoseSkin4;
  201. new g_bChoseSkin5;
  202. new g_bChoseSkin6;
  203. new g_bChoseSkin7;
  204. new g_bHasKnifeSkin1;
  205. new g_bHasKnifeSkin2;
  206. new g_bHasKnifeSkin3;
  207. new g_bHasKnifeSkin4;
  208. new g_bChoseKnifeSkin1;
  209. new g_bChoseKnifeSkin2;
  210. new g_bChoseKnifeSkin3;
  211. new g_bChoseKnifeSkin4;
  212.  
  213. //new g_bHasDied;
  214.  
  215. /////////////////////////////////////////
  216. ////////////// Cvars ////////////////////
  217. new km_tokens_kill; // Tokens per kill
  218. new km_tokens_hskill;   // Tokens per headshot kill
  219. new km_tokens_godlike;      // extra tokens for a godlike kill
  220. new km_tokens_wickedsick;   // extra tokens for a wickedsick kill
  221. //extra items
  222. new km_cost_bhop;
  223. new km_cost_leap;
  224. new km_leap_force, km_leap_height, km_leap_cooldown;
  225. new km_cost_nadepack;
  226. new km_cost_lowgravity;
  227. new km_val_lowgravity;
  228. new km_cost_speed;
  229. new km_val_speed;
  230.  
  231. // Permanent upgrades
  232. new km_cost_permvitality;
  233. new km_val_permvitality;
  234. new km_cost_permendurance;
  235. new km_val_permendurance;
  236. new km_cost_permgravity;
  237. new km_val_permgravity;
  238. new km_cost_permspeed;
  239. new km_val_permspeed;
  240. new km_cost_perminvisibility;
  241. new km_val_permvisibility;
  242.  
  243. // Skins
  244. new km_cost_skin1;
  245. //new km_skin1_folder;
  246. new km_cost_skin2;
  247. //new km_skin2_folder;
  248. new km_cost_skin3;
  249. //new km_skin3_folder;
  250. new km_cost_skin4;
  251. //new km_skin4_folder;
  252. new km_cost_skin5;
  253. //new km_skin5_folder;
  254. new km_cost_skin6;
  255. new km_cost_skin7;
  256. new km_cost_knifeskin1;
  257. new km_cost_knifeskin2;
  258. new km_cost_knifeskin3;
  259. new km_cost_knifeskin4;
  260.  
  261. //knife distance by SchlumPF
  262. new bool:g_bKnifeHit;
  263.  
  264. new g_szNickname[33][32];
  265.  
  266. new g_pCVarFriendlyFire;
  267.  
  268. new g_pCVarSoundWickedSickStab;
  269. new g_pCVarSoundGodlikeStab;
  270. new g_pCVarSoundWickedSickSlash;
  271. new g_pCVarSoundGodlikeSlash;
  272.  
  273. new g_pCVarHudColor;
  274. new g_pCVarHudCoords;
  275. new g_pCVarHudHoldtime;
  276.  
  277. new g_iSpray;
  278. new g_iDrop;
  279.  
  280. new Float:modMeter = 32.00;
  281.    
  282. public plugin_init()
  283. {
  284.     register_plugin(PLUGIN, VERSION, AUTHOR);
  285.    
  286.     register_clcmd("say /knifeshop", "Knifeshop");
  287.     register_clcmd("say knifeshop", "Knifeshop");
  288.     register_clcmd("say /shop", "Knifeshop");
  289.     register_clcmd("say shop", "Knifeshop");
  290.     register_clcmd("say /knife", "display_knife");
  291.     register_clcmd("say knife", "display_knife");
  292.     register_clcmd("say /skins", "wear_skins_menu");
  293.     register_clcmd("say skins", "wear_skins_menu");
  294.     register_clcmd("say knifemodmenu", "knifemodmenu");
  295.     register_clcmd("say /knifemodmenu", "knifemodmenu");
  296.     register_clcmd("say kmmenu", "knifemodmenu");
  297.    
  298.     register_concmd("amx_take_tokens", "cmd_take_tokens", ADMIN_TOKENS, "<target> <amount>");
  299.     register_concmd("amx_give_tokens", "cmd_give_tokens", ADMIN_TOKENS, "<target> <amount>");
  300.     register_concmd("amx_reset_tokens", "cmd_reset_tokens", ADMIN_TOKENS, "<target>");
  301.     register_concmd("amx_autobhop", "AdminCmd_Bhop", ADMIN_TOKENS, "<nick|#userid> <0|1>");
  302.    
  303.     register_forward(FM_PlayerPreThink, "fw_PlayerPreThink");
  304.     register_forward(FM_UpdateClientData, "UpdateClientData");
  305.     register_forward(FM_CmdStart, "CmdStart");
  306.     register_forward( FM_TraceLine, "FM_TraceLine_Post", 1 );
  307.     register_forward( FM_TraceHull, "FM_TraceHull_Post", 1 );
  308.     RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "fwd_Knife_PriAtk_Post", 1);
  309.     RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "fwd_Knife_SecAtk_Post", 1);
  310.     RegisterHam(Ham_Player_Jump, "player", "Player_Jump");
  311.     RegisterHam(Ham_Spawn, "player", "Fwd_PlayerSpawn_Post", 1);
  312.     RegisterHam(Ham_Killed, "player", "Fwd_PlayerKilled_Pre", 0);
  313.     RegisterHam(Ham_Killed, "player", "Check_Alive", 1);
  314.     RegisterHam(Ham_TakeDamage, "player", "Ham_TakeDamage_player");
  315.     RegisterHam(Ham_TraceAttack, "player", "Fwd_TraceAttack_Player_Post", 1);
  316.    
  317.     register_logevent("roundstart",2,"1=Round_Start");
  318.     register_logevent("roundend",2,"1=Round_End");
  319.     register_event( "Damage", "eventDamage", "b" );
  320.     register_event("Money", "EventMoney", "b");
  321.     register_event("CurWeapon","CurWeapon","be","1=1") ;
  322.    
  323.     g_Menu = register_menuid("Knife Models");
  324.     register_menucmd(g_Menu, 1023, "knifemenu");
  325.    
  326.     g_pcvarGravity = get_cvar_pointer("sv_gravity"); //bhop code
  327.     g_pCVarFriendlyFire = get_cvar_pointer( "mp_friendlyfire" );
  328.     g_pRemoveBomb = register_cvar( "km_removebomb", "1" );
  329.  
  330. //  CVARS
  331.     km_tokens_kill      = register_cvar( "km_tokens_kill", "3");
  332.     km_tokens_hskill    = register_cvar( "km_tokens_hskill", "5");
  333.     km_tokens_godlike   = register_cvar( "km_tokens_godlike", "4");
  334.     km_tokens_wickedsick    = register_cvar( "km_tokens_wickedsick", "2");
  335.    
  336.     g_pcvarBhopStyle    = register_cvar( "bhop_style", "2"); // (1 : no slowdown, 2 : no speed limit)
  337.     g_pcvarAutoBhop     = register_cvar( "bhop_auto", "1");
  338.     g_pcvarFallDamage   = register_cvar( "mp_falldamage", "1.0");
  339.     //extra items
  340.     km_cost_bhop        = register_cvar( "km_cost_bhop", "15");
  341.     km_cost_leap        = register_cvar( "km_cost_leap", "10");
  342.     km_leap_force       = register_cvar( "km_leap_force", "500");
  343.     km_leap_height      = register_cvar( "km_leap_height", "290");
  344.     km_leap_cooldown    = register_cvar( "km_leap_cooldown", "2.3");
  345.     km_cost_nadepack    = register_cvar( "km_cost_nadepack", "15");
  346.     km_cost_lowgravity  = register_cvar( "km_cost_lowgravity", "8");
  347.     km_val_lowgravity   = register_cvar( "km_val_lowgravity", "0.18"); // percentage of lower gravity to give(default; 800== 1 - amount = gravity the player will have (eg:1-0.15==0.85  =  800*0.85 = 680
  348.     km_cost_speed       = register_cvar( "km_cost_speed", "8");
  349.     km_val_speed        = register_cvar( "km_val_extra-speed", "78");
  350.     // Permanent upgrades
  351.     km_cost_permvitality    = register_cvar( "km_cost_permvitality", "300");
  352.     km_val_permvitality = register_cvar( "km_val_permvitality", "25");
  353.     km_cost_permendurance   = register_cvar( "km_cost_permendurance", "300");
  354.     km_val_permendurance    = register_cvar( "km_val_permendurance", "0.1");
  355.     km_cost_permgravity = register_cvar( "km_cost_permgravity", "250");
  356.     km_val_permgravity  = register_cvar( "km_val_permgravity", "0.25");
  357.     km_cost_permspeed   = register_cvar( "km_cost_permspeed", "300");
  358.     km_val_permspeed    = register_cvar( "km_val_permspeed", "90");
  359.     km_cost_perminvisibility = register_cvar( "km_cost_perminvisibility", "200");
  360.     km_val_permvisibility   = register_cvar( "km_val_permvisibility", "59");
  361.     // Skins
  362.     km_cost_skin1       = register_cvar( "km_cost_skin1", "75");
  363.     //km_skin1_folder       = register_cvar( "km_skin1_folder", "vip");
  364.     km_cost_skin2       = register_cvar( "km_cost_skin2", "75");
  365.     //km_skin2_folder       = register_cvar( "km_skin2_folder", "vip");
  366.     km_cost_skin3       = register_cvar( "km_cost_skin3", "20");
  367.     //km_skin3_folder       = register_cvar( "km_skin3_folder", "vip");
  368.     km_cost_skin4       = register_cvar( "km_cost_skin4", "50");
  369.     //km_skin4_folder       = register_cvar( "km_skin4_folder", "vip");
  370.     km_cost_skin5       = register_cvar( "km_cost_skin5", "50");
  371.     //km_skin5_folder       = register_cvar( "km_skin5_folder", "vip");
  372.     km_cost_skin6       = register_cvar( "km_cost_skin6", "50");
  373.     km_cost_skin7       = register_cvar( "km_cost_skin7", "50");
  374.     km_cost_knifeskin1  = register_cvar( "km_cost_knifeskin1", "40");
  375.     km_cost_knifeskin2  = register_cvar( "km_cost_knifeskin2", "20");
  376.     km_cost_knifeskin3  = register_cvar( "km_cost_knifeskin3", "20");
  377.     km_cost_knifeskin4  = register_cvar( "km_cost_knifeskin4", "20");
  378. // knife distance
  379.     g_pCVarSoundWickedSickStab   = register_cvar( "km_sound_wickedsick_stab", "0.925" );
  380.     g_pCVarSoundGodlikeStab      = register_cvar( "km_sound_godlike_stab", "0.975" );
  381.     g_pCVarSoundWickedSickSlash  = register_cvar( "km_sound_wickedsick_slash", "1.385" );
  382.     g_pCVarSoundGodlikeSlash     = register_cvar( "km_sound_godlike_slash", "1.460" );
  383.    
  384.     g_pCVarHudColor          = register_cvar( "km_hud_color", "255 144 0" );
  385.     g_pCVarHudCoords         = register_cvar( "km_hud_coords", "-0.75 -1.0" );
  386.     g_pCVarHudHoldtime       = register_cvar( "km_hud_holdtime", "8.0" );
  387. //------------------------------------------------------
  388.    
  389.     g_iMsgSayText       = get_user_msgid( "SayText" );
  390.     g_iMaxPlayers       = get_maxplayers();
  391.    
  392.     #if defined SAVE_METHOD_NICK
  393.     g_vault = nvault_open("km_tokens_nick");
  394.     #endif
  395.     #if defined SAVE_METHOD_IP
  396.     g_vault = nvault_open("km_tokens_ip");
  397.     #endif
  398.     #if defined SAVE_METHOD_ID
  399.     g_vault = nvault_open("km_tokens");
  400.     #endif
  401.     if(g_vault == INVALID_HANDLE)
  402.         set_fail_state( "Error opening tokens Vault" );
  403.    
  404.     bitvault = nvault_open("bits_vault");
  405.     if(bitvault == INVALID_HANDLE)
  406.         set_fail_state( "Error opening bits Vault" );
  407.        
  408.     if( get_pcvar_num( g_pRemoveBomb ) )
  409.     {
  410.         remove_entity_name( "func_bomb_target" );
  411.         remove_entity_name( "info_bomb_target" );
  412.     }
  413.    
  414.    
  415.     set_task(300.0, "kmodmsg", 0, _, _, "b");
  416. }
  417.  
  418. public plugin_precache()
  419. {
  420.     precache_sound( g_szSound[WICKEDSICK] );
  421.     precache_sound( g_szSound[GODLIKE] );
  422.    
  423.     g_iDrop = precache_model("sprites/blood.spr");
  424.     g_iSpray = precache_model("sprites/bloodspray.spr");
  425.    
  426.     precache_model("models/knife-mod/v_butcher.mdl");
  427.     precache_model("models/knife-mod/p_butcher.mdl");
  428.     precache_model("models/knife-mod/v_machete.mdl");
  429.     precache_model("models/knife-mod/p_machete.mdl");
  430.     precache_model("models/knife-mod/darthmaul_knife.mdl");
  431.     precache_model("models/knife-mod/darthmaul_p_knife.mdl");
  432.     precache_model("models/knife-mod/v_katana.mdl");
  433.     precache_model("models/knife-mod/p_katana.mdl");
  434.     precache_model("models/knife-mod/v_supercut.mdl");
  435.     precache_model("models/knife-mod/p_supercut.mdl");
  436.     precache_model("models/v_knife.mdl");
  437.     precache_model("models/p_knife.mdl");
  438.     precache_model("models/knife-mod/v_knife_wolf.mdl");
  439.     precache_model("models/knife-mod/v_light_blue.mdl");
  440.     precache_model("models/knife-mod/p_light_blue.mdl");
  441.     precache_model("models/knife-mod/v_light_green.mdl");
  442.     precache_model("models/knife-mod/p_light_green.mdl");
  443.     precache_model("models/knife-mod/v_light_pink.mdl");
  444.     precache_model("models/knife-mod/p_light_pink.mdl");
  445.     precache_model("models/knife-mod/v_light_turq.mdl");
  446.     precache_model("models/knife-mod/p_light_turq.mdl");
  447.     precache_model("models/knife-mod/v_light_red.mdl");
  448.     precache_model("models/knife-mod/p_light_red.mdl");
  449.     precache_model("models/knife-mod/v_knife_kujang.mdl");
  450.     precache_model("models/knife-mod/p_knife_kujang.mdl");
  451.     precache_model("models/knife-mod/v_baxe.mdl");
  452.     precache_model("models/knife-mod/p_baxe.mdl");
  453.     precache_model("models/knife-mod/v_knife_halo.mdl");
  454.     precache_model("models/knife-mod/p_knife_halo.mdl");
  455.    
  456.    
  457. }
  458.  
  459. public roundstart()
  460. {
  461.     static iPlayers[32], iNum, iPlayer, i;
  462.     get_players( iPlayers, iNum );
  463.     for( i = 0; i < iNum; i++ )
  464.     {
  465.         iPlayer = iPlayers[i];
  466.        
  467.         if(get_bit(g_bHasSpeed, iPlayer) )
  468.             item_speed(iPlayer);
  469.     }
  470.     /* this plugin is tailord for mp_freezetime 0,
  471.     if you work with freezetimes then you miht wanna replace some parts of the code in ham_playerspawn_post
  472.     into here becous ham_playerspawn_post is called as soon as you respawn and event roundstart is called
  473.     after the freezetime
  474.         (fe: working with freezetime can influence the speed items)
  475.     */
  476. }
  477.  
  478. public roundend()
  479. {
  480.     /* Here you could reset bits from players who have bought extra items
  481.        if you dont want the extra items to last until they die
  482.     */ 
  483. }
  484.  
  485. public plugin_end(){
  486.     nvault_close(g_vault); 
  487.     nvault_close(bitvault);
  488. }
  489.  
  490. public knifemodmenu(id)
  491. {
  492.     new menu = menu_create("\yKnifemodmenu", "knifemodmenu_handler");
  493.     menu_additem(menu, "Free knife skins", "1");
  494.     menu_additem(menu, "Tokens Shop Menu ", "2");
  495.     menu_additem(menu, "Bought skins wardrobe", "3");
  496.        
  497.     menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  498.     menu_display(id, menu, 0);
  499. }
  500.  
  501. public knifemodmenu_handler(id, menu, item)
  502. {
  503.     if( item == MENU_EXIT )
  504.     {
  505.         menu_destroy(menu);
  506.         return PLUGIN_HANDLED;
  507.     }
  508.    
  509.     new data[6], szName[64];
  510.     new access, callback;
  511.     menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
  512.    
  513.     new key = str_to_num(data);
  514.    
  515.     switch(key)
  516.     {
  517.         case 1:
  518.         {  
  519.             display_knife(id);
  520.        
  521.         }
  522.         case 2:
  523.         {
  524.             Knifeshop(id);
  525.         }
  526.         case 3:
  527.         {
  528.             wear_skins_menu(id);
  529.         }
  530.     }
  531.    
  532.     menu_destroy(menu);
  533.     return PLUGIN_HANDLED;
  534. }
  535.  
  536.  
  537. public display_knife(id) {
  538.    
  539.     new menuBody[512];
  540.     add(menuBody, 511, "\yKnife Models\w^n^n");
  541.     add(menuBody, 511, "1. Default knife ^n");
  542.     add(menuBody, 511, "2. Butcher Knife ^n");
  543.     add(menuBody, 511, "3. Machete  ^n");
  544.     add(menuBody, 511, "4. Wolverine's Implants ^n");
  545.     add(menuBody, 511, "5. Darth Maul Lightsaber ^n");
  546.     add(menuBody, 511, "6. Supergutter ^n");
  547.     add(menuBody, 511, "7. Katana  ^n^n");
  548.     add(menuBody, 511, "0. Exit^n");
  549.    
  550.     new keys = ( 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 /*| 1<<9*/);
  551.     show_menu(id, keys, menuBody, -1, "Knife Models");
  552.    
  553.     return PLUGIN_HANDLED;
  554. }
  555.  
  556. public knifemenu(id, key) {
  557.     switch(key)
  558.     {
  559.             case 0: SetKnife(id , 0);
  560.             case 1: SetKnife(id , 1);
  561.             case 2: SetKnife(id , 2);
  562.             case 3: SetKnife(id , 3);
  563.             case 4: SetKnife(id , 4);
  564.             case 5: SetKnife(id , 5);
  565.             case 6: SetKnife(id , 6);
  566.             default: return PLUGIN_HANDLED;
  567.     }
  568.     SaveKnife(id);
  569.     return PLUGIN_HANDLED;
  570. }
  571.  
  572. public SetKnife(id , Knife) {
  573.     knife_model[id] = Knife;
  574.    
  575.     new Clip, Ammo, Weapon = get_user_weapon(id, Clip, Ammo);
  576.     if ( Weapon != CSW_KNIFE )
  577.         return PLUGIN_HANDLED;
  578.    
  579.     new vModel[56],pModel[56];
  580.    
  581.     switch(Knife)
  582.     {
  583.         case 0: {
  584.             format(vModel,55,"models/v_knife.mdl");
  585.             format(pModel,55,"models/p_knife.mdl");
  586.         }
  587.         case 1: {
  588.             format(vModel,55,"models/knife-mod/v_butcher.mdl");
  589.             format(pModel,55,"models/knife-mod/p_butcher.mdl");
  590.         }
  591.         case 2: {
  592.             format(vModel,55,"models/knife-mod/v_machete.mdl");
  593.             format(pModel,55,"models/knife-mod/p_machete.mdl");
  594.         }
  595.         case 3: {
  596.             format(vModel,55,"models/knife-mod/v_knife_wolf.mdl");
  597.         }
  598.         case 4: {
  599.             format(vModel,55,"models/knife-mod/darthmaul_knife.mdl");
  600.             format(pModel,55,"models/knife-mod/darthmaul_p_knife.mdl");
  601.         }
  602.         case 5: {
  603.             format(vModel,55,"models/knife-mod/v_supercut.mdl");
  604.             format(pModel,55,"models/knife-mod/p_supercut.mdl");
  605.         }
  606.         case 6: {
  607.             format(vModel,55,"models/knife-mod/v_katana.mdl");
  608.             format(pModel,55,"models/knife-mod/p_katana.mdl");
  609.         }
  610.     }
  611.    
  612.     entity_set_string(id, EV_SZ_viewmodel, vModel);
  613.     entity_set_string(id, EV_SZ_weaponmodel, pModel);
  614.    
  615.     return PLUGIN_HANDLED;  
  616. }
  617.  
  618. public CurWeapon(id)
  619. {
  620.     new weapon = get_user_weapon(id, _, _);
  621.     // Set Knife Model
  622.     if(!get_bit(g_bChoseKnifeSkin1, id) && !get_bit(g_bChoseKnifeSkin2, id) && !get_bit(g_bChoseKnifeSkin3, id) && !get_bit(g_bChoseKnifeSkin4, id) )
  623.         SetKnife(id, knife_model[id]);
  624.     if(weapon == CSW_KNIFE)
  625.     {
  626.         if(get_bit(g_bHasKnifeSkin1, id) && get_bit(g_bChoseKnifeSkin1, id) )
  627.             knife_skin1(id);
  628.         if(get_bit(g_bHasKnifeSkin2, id) && get_bit(g_bChoseKnifeSkin2, id) )
  629.             knife_skin2(id);
  630.         if(get_bit(g_bHasKnifeSkin3, id) && get_bit(g_bChoseKnifeSkin3, id) )
  631.             knife_skin3(id);
  632.         if(get_bit(g_bHasKnifeSkin4, id) && get_bit(g_bChoseKnifeSkin4, id) )
  633.             knife_skin4(id);
  634.     }
  635.    
  636.    
  637.     if(get_bit(g_bHasSpeed, id) && get_bit(g_bHasNadePack, id) )
  638.     {
  639.         item_speed(id);
  640.     }
  641.    
  642.     if(get_bit(g_bHasPermSpeed, id) && get_bit(g_bHasNadePack, id) )
  643.     {
  644.         Perm_Speed(id);
  645.     }
  646.     if(get_bit(g_bHasPermSpeed, id) && get_bit(g_bHasSpeed, id) && get_bit(g_bHasNadePack, id) )
  647.     {
  648.         item_speed(id);
  649.         Perm_Speed(id);
  650.     }
  651. //First method for endur didnt work
  652.     /*if(get_bit(g_bHasEndur, id) && get_user_weapon(id) == CSW_KNIFE )
  653.     {
  654.         new ent = fm_find_ent_by_owner(-1,"weapon_knife",id);
  655.                
  656.         new Float:N_Speed;
  657.         if(ent)
  658.         {
  659.             N_Speed = 0.3; //get_pcvar_float(km_val_permendurance);
  660.             new Float:Delay = get_pdata_float( ent, 46, 4) * N_Speed;  
  661.             set_pdata_float( ent, 46, Delay, 4);
  662.             fnColorPrint(id, "test for endur");
  663.         }  
  664.     }*/
  665.    
  666.     return PLUGIN_HANDLED;  
  667. }
  668.  
  669. public kmodmsg() {
  670.    
  671.     fnColorPrint(0, "Type ^4kmmenu ^1to open the knifemodmenu.");
  672. }  
  673.  
  674. public Knifeshop(id)
  675. {
  676.     new menu = menu_create("\yKnife-Mod Shopmenu", "Knifeshop_handler");
  677.    
  678.     menu_additem(menu, "Extra Items", "1");
  679.     menu_additem(menu, "Upgrade kits \y\R[ PERM  ]         ", "2");
  680.     menu_additem(menu, "Skins \y\R[ PERM  ]         ", "3");
  681.    
  682.     menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  683.     menu_display(id, menu, 0);
  684. }
  685.  
  686. public Knifeshop_handler(id, menu, item)
  687. {
  688.     if( item == MENU_EXIT )
  689.     {
  690.         menu_destroy(menu);
  691.         //Note that you will want to destroy the menu after they do something
  692.         return PLUGIN_HANDLED;
  693.     }
  694.    
  695.     new data[6], szName[64];
  696.     new access, callback;
  697.     //heres the function that will give us that information (since it doesnt magicaly appear)
  698.     menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
  699.    
  700.     new key = str_to_num(data);
  701.    
  702.     switch(key)
  703.     {
  704.         case 1:
  705.         {  
  706.             if(!is_user_alive(id))
  707.             {
  708.                 fnColorPrint(id, "You must be alive to buy extra items");
  709.                 return PLUGIN_HANDLED;
  710.             } else {
  711.                 item_menu(id);
  712.             }
  713.         }
  714.         case 2:
  715.         {
  716.             perm_menu(id);
  717.         }
  718.         case 3:
  719.         {  
  720.             skins_menu(id);
  721.         }
  722.     }
  723.    
  724.     menu_destroy(menu);
  725.     return PLUGIN_HANDLED;
  726. }
  727.  
  728. public item_menu(id)
  729. {
  730.     new menu = menu_create("\yExtra Items", "item_menu_handler");
  731.     menu_additem(menu, "Bhopper \R\y[15 Tokens]", "1"/*, g_MenuCallback*/);
  732.     menu_additem(menu, "Leap jumps \R\y[10 Tokens]", "2");
  733.     menu_additem(menu, "grenade packs \R\y[15 Tokens]", "3");
  734.     menu_additem(menu, "G-Boots \R\y[8 Tokens]", "4");      
  735.     menu_additem(menu, "Speeder \R\y[8 Tokens]", "5");
  736.    
  737.     menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  738.     menu_display(id, menu, 0);
  739. }
  740.  
  741. public item_menu_handler(id, menu, item)
  742. {
  743.     if( item == MENU_EXIT )
  744.     {
  745.         menu_destroy(menu);
  746.         if( is_user_connected(id) )
  747.             Knifeshop(id);
  748.         return PLUGIN_HANDLED;
  749.     }  
  750.    
  751.     new data[6], szName[64];
  752.     new access, callback;
  753.     menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
  754.  
  755.     new key = str_to_num(data);
  756.  
  757.     switch(key)
  758.     {
  759.         case 1:
  760.         {
  761.             if(!is_user_alive(id))
  762.             {
  763.                 fnColorPrint(id, "You can't buy extra items when you are dead.");
  764.                 menu_destroy(menu);
  765.                 return PLUGIN_HANDLED;
  766.             }
  767.             if(get_bit(g_bHasBhop, id))
  768.             {
  769.                 fnColorPrint(id, "You already have this item.");
  770.                 item_menu(id);
  771.                 return PLUGIN_HANDLED;
  772.             }
  773.             if(g_iPoints[id] < get_pcvar_num(km_cost_bhop) )
  774.             {
  775.                 fnColorPrint(id, "You have insufficient tokens to purchase this item.");
  776.                 item_menu(id);
  777.                 return PLUGIN_HANDLED;
  778.             }
  779.             //setting the bit automaticly enables bhop
  780.             set_bit(g_bHasBhop, id);
  781.             menu_destroy(menu);
  782.                
  783.         }
  784.         case 2:
  785.         {
  786.             if(!is_user_alive(id))
  787.             {
  788.                 fnColorPrint(id, "You can't buy extra items when you are dead.");
  789.                 menu_destroy(menu);
  790.                 return PLUGIN_HANDLED;
  791.             }
  792.             if(get_bit(g_bHasLeap, id))
  793.             {
  794.                 fnColorPrint(id, "You already have this item.");
  795.                 item_menu(id);
  796.                 return PLUGIN_HANDLED;
  797.             }
  798.             if(g_iPoints[id] < get_pcvar_num(km_cost_leap) )
  799.             {
  800.                 fnColorPrint(id, "You have insufficient tokens to purchase this item.");
  801.                 item_menu(id);
  802.                 return PLUGIN_HANDLED;
  803.             }
  804.             set_bit(g_bHasLeap, id);
  805.             menu_destroy(menu);
  806.         }
  807.         case 3:
  808.         {
  809.             if(!is_user_alive(id))
  810.             {
  811.                 fnColorPrint(id, "You can't buy extra items when you are dead.");
  812.                 menu_destroy(menu);
  813.                 return PLUGIN_HANDLED;
  814.             }
  815.             if(get_bit(g_bHasNadePack, id))
  816.             {
  817.                 fnColorPrint(id, "You already have this item.");
  818.                 item_menu(id);
  819.                 return PLUGIN_HANDLED;
  820.             }
  821.             if(g_iPoints[id] < get_pcvar_num(km_cost_nadepack) )
  822.             {
  823.                 fnColorPrint(id, "You have insufficient tokens to purchase this item.");
  824.                 item_menu(id);
  825.                 return PLUGIN_HANDLED;
  826.             }
  827.            
  828.             give_item(id, "weapon_hegrenade");
  829.             give_item(id, "weapon_flashbang");
  830.             give_item(id, "weapon_smokegrenade");
  831.             set_bit(g_bHasNadePack, id);
  832.            
  833.             g_iPoints[id] -= get_pcvar_num(km_cost_nadepack);
  834.             cs_set_user_money(id, g_iPoints[id], 1);
  835.             menu_destroy(menu);
  836.         }
  837.         case 4:
  838.         {
  839.             if(!is_user_alive(id))
  840.             {
  841.                 fnColorPrint(id, "You can't buy extra items when you are dead.");
  842.                 menu_destroy(menu);
  843.                 return PLUGIN_HANDLED;
  844.             }
  845.             if(get_bit(g_bHasLowGravity, id))
  846.             {
  847.                 fnColorPrint(id, "You already have this item.");
  848.                 item_menu(id);
  849.                 return PLUGIN_HANDLED;
  850.             }
  851.             if(g_iPoints[id] < get_pcvar_num(km_cost_lowgravity) )
  852.             {
  853.                 fnColorPrint(id, "You have insufficient tokens to purchase this item.");
  854.                 item_menu(id);
  855.                 return PLUGIN_HANDLED;
  856.             }
  857.             new Float:Gravity = get_user_gravity(id) - get_pcvar_float(km_val_lowgravity);
  858.             set_user_gravity( id, Gravity );
  859.             set_bit(g_bHasLowGravity, id);
  860.            
  861.             g_iPoints[id] -= get_pcvar_num(km_cost_lowgravity);
  862.             cs_set_user_money(id, g_iPoints[id], 1);
  863.             menu_destroy(menu);
  864.         }
  865.         case 5:
  866.         {
  867.             if(!is_user_alive(id))
  868.             {
  869.                 fnColorPrint(id, "You can't buy extra items when you are dead.");
  870.                 menu_destroy(menu);
  871.                 return PLUGIN_HANDLED;
  872.             }
  873.             if(get_bit(g_bHasSpeed, id))
  874.             {
  875.                 fnColorPrint(id, "You already have this item.");
  876.                 item_menu(id);
  877.                 return PLUGIN_HANDLED;
  878.             }
  879.             if(g_iPoints[id] < get_pcvar_num(km_cost_speed) )
  880.             {
  881.                 fnColorPrint(id, "You have insufficient tokens to purchase this item.");
  882.                 item_menu(id);
  883.                 return PLUGIN_HANDLED;
  884.             }
  885.                        
  886.             set_bit(g_bHasSpeed, id);
  887.             g_iPoints[id] -= get_pcvar_num(km_cost_speed);
  888.             cs_set_user_money(id, g_iPoints[id], 1);
  889.             item_speed(id);
  890.            
  891.             menu_destroy(menu);
  892.         }
  893.     }
  894.     return PLUGIN_HANDLED;
  895. }
  896.  
  897. public item_speed(id)
  898. {
  899.     new Float:speed = get_user_maxspeed(id) + get_pcvar_num(km_val_speed);
  900.     set_user_maxspeed(id , speed);
  901. }
  902.  
  903. public perm_menu(id)
  904. {
  905.     new upgrade_menu = menu_create("\yPerm. Upgrades:", "perm_menu_handler");
  906.    
  907.     menu_additem(upgrade_menu, "Vitality (+25 HP) \R\y[300 Tokens]", "1");
  908.     menu_additem(upgrade_menu, "Endurance (faster slash/stab)\R\y[300 Tokens]", "2");
  909.     menu_additem(upgrade_menu, "Gravity \R\y[250 Tokens]", "3");
  910.     menu_additem(upgrade_menu, "Speed  \R\y[300 Tokens]", "4");
  911.     menu_additem(upgrade_menu, "Invisibility (semi visible) \R\y[200 Tokens]", "5");
  912.    
  913.     menu_setprop(upgrade_menu, MPROP_EXIT, MEXIT_ALL);
  914.     menu_display(id, upgrade_menu, 0);
  915. }
  916.  
  917. public perm_menu_handler(id, menu, item)
  918. {
  919.     if( item == MENU_EXIT )
  920.     {
  921.         menu_destroy(menu);
  922.        
  923.         if( is_user_connected(id) )
  924.             Knifeshop(id);
  925.  
  926.         return PLUGIN_HANDLED;
  927.     }
  928.  
  929.     new data[6], szName[64];
  930.     new access, callback;
  931.     menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
  932.  
  933.     new key = str_to_num(data);
  934.  
  935.     switch(key)
  936.     {
  937.         case 1:
  938.         {
  939.             if(get_bit(g_bHasPermVital, id))
  940.             {
  941.                 fnColorPrint(id, "You already have this upgrade.");
  942.                 menu_destroy(menu);
  943.                 return PLUGIN_HANDLED;
  944.             }
  945.             if(g_iPoints[id] < get_pcvar_num(km_cost_permvitality) )
  946.             {
  947.                 fnColorPrint(id, "You have insufficient tokens to purchase this upgrade.");
  948.                 menu_destroy(menu);
  949.                 return PLUGIN_HANDLED;
  950.             }
  951.            
  952.             set_bit(g_bHasPermVital, id);
  953.             g_iPoints[id] -= get_pcvar_num(km_cost_permvitality);
  954.             cs_set_user_money(id, g_iPoints[id], 1);
  955.            
  956.             savebits(id);
  957.             Perm_Vitality(id);
  958.            
  959.             menu_destroy(menu);
  960.                
  961.         }
  962.         case 2:
  963.         {
  964.             if(get_bit(g_bHasEndur, id))
  965.             {
  966.                 fnColorPrint(id, "You already have this upgrade.");
  967.                 menu_destroy(menu);
  968.                 return PLUGIN_HANDLED;
  969.             }
  970.             if(g_iPoints[id] < get_pcvar_num(km_cost_permendurance) )
  971.             {
  972.                 fnColorPrint(id, "You have insufficient tokens to purchase this upgrade.");
  973.                 menu_destroy(menu);
  974.                 return PLUGIN_HANDLED;
  975.             }
  976.            
  977.             set_bit(g_bHasEndur, id);
  978.             g_iPoints[id] -= get_pcvar_num(km_cost_permendurance);
  979.             cs_set_user_money(id, g_iPoints[id], 1);
  980.             savebits(id);
  981.             //Perm_Endurance(id);
  982.            
  983.             menu_destroy(menu);
  984.         }
  985.         case 3:
  986.         {
  987.             if(get_bit(g_bHasPermGrav, id))
  988.             {
  989.                 fnColorPrint(id, "You already have this upgrade.");
  990.                 menu_destroy(menu);
  991.                 return PLUGIN_HANDLED;
  992.             }
  993.             if(g_iPoints[id] < get_pcvar_num(km_cost_permgravity) )
  994.             {
  995.                 fnColorPrint(id, "You have insufficient tokens to purchase this upgrade.");
  996.                 menu_destroy(menu);
  997.                 return PLUGIN_HANDLED;
  998.             }
  999.            
  1000.             set_bit(g_bHasPermGrav, id);
  1001.             g_iPoints[id] -= get_pcvar_num(km_cost_permgravity);
  1002.             cs_set_user_money(id, g_iPoints[id], 1);
  1003.            
  1004.             savebits(id);
  1005.             Perm_Gravity(id);
  1006.            
  1007.             menu_destroy(menu);
  1008.         }
  1009.         case 4:
  1010.         {
  1011.             if(get_bit(g_bHasPermSpeed, id))
  1012.             {
  1013.                 fnColorPrint(id, "You already have this upgrade.");
  1014.                 menu_destroy(menu);
  1015.                 return PLUGIN_HANDLED;
  1016.             }
  1017.             if(g_iPoints[id] < get_pcvar_num(km_cost_permspeed) )
  1018.             {
  1019.                 fnColorPrint(id, "You have insufficient tokens to purchase this upgrade.");
  1020.                 menu_destroy(menu);
  1021.                 return PLUGIN_HANDLED;
  1022.             }
  1023.             set_bit(g_bHasPermSpeed, id);
  1024.             g_iPoints[id] -= get_pcvar_num(km_cost_permspeed);
  1025.             cs_set_user_money(id, g_iPoints[id], 1);
  1026.            
  1027.             savebits(id);
  1028.             Perm_Speed(id);
  1029.            
  1030.             menu_destroy(menu);
  1031.         }
  1032.         case 5:
  1033.         {
  1034.             if(get_bit(g_bHasPermInvis, id))
  1035.             {
  1036.                 fnColorPrint(id, "You already have this upgrade.");
  1037.                 menu_destroy(menu);
  1038.                 return PLUGIN_HANDLED;
  1039.             }
  1040.             if(g_iPoints[id] < get_pcvar_num(km_cost_perminvisibility) )
  1041.             {
  1042.                 fnColorPrint(id, "You have insufficient tokens to purchase this upgrade.");
  1043.                 menu_destroy(menu);
  1044.                 return PLUGIN_HANDLED;
  1045.             }
  1046.             set_bit(g_bHasPermInvis, id);
  1047.             g_iPoints[id] -= get_pcvar_num(km_cost_perminvisibility);
  1048.             cs_set_user_money(id, g_iPoints[id], 1);
  1049.            
  1050.             savebits(id);
  1051.             Perm_Invisiblity(id);
  1052.            
  1053.             menu_destroy(menu);
  1054.         }
  1055.     }
  1056.     return PLUGIN_HANDLED;
  1057. }
  1058.  
  1059. public Perm_Vitality(id)
  1060. {
  1061.     new HealthVal = get_user_health(id) + get_pcvar_num(km_val_permvitality);
  1062.     set_user_health(id, HealthVal);
  1063. }
  1064.  
  1065. /*Perm_Endurance(id)
  1066. {
  1067.     //I dont know how to do this, help is appreciated & credited
  1068. }*/
  1069.  
  1070. public Perm_Gravity(id)
  1071. {
  1072.     new Float:GravVal = get_user_gravity(id) - get_pcvar_float(km_val_permgravity);
  1073.     set_user_gravity(id, GravVal);
  1074.     fnColorPrint(id, "Your gravity upgrade has been activated.");
  1075.            
  1076. }
  1077.  
  1078. public Perm_Speed(id)
  1079. {
  1080.     new Float:Speed = get_user_maxspeed(id) + get_pcvar_num(km_val_permspeed);
  1081.     set_user_maxspeed(id , Speed);
  1082. }
  1083.  
  1084. public Perm_Invisiblity(id)
  1085. {
  1086.     new AlphaVal = get_pcvar_num(km_val_permvisibility);
  1087.     set_user_rendering(id,kRenderFxGlowShell,0,0,0,kRenderTransAlpha,AlphaVal);
  1088.     fnColorPrint(id, "Your invisibility upgrade has been activated.");
  1089. }
  1090.  
  1091. public skins_menu(id)
  1092. {
  1093.     /*if(!is_user_connected(id))
  1094.         return PLUGIN_HANDLED;
  1095.         */
  1096.     new menu = menu_create("\ySkin Shop", "skins_menu_handler");
  1097.     menu_additem(menu, "Extra Knife Skins", "1");
  1098.     menu_additem(menu, "Player Skins", "2");
  1099.        
  1100.     menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1101.     menu_display(id, menu, 0);
  1102.     //return PLUGIN_HANDLED;
  1103. }
  1104.  
  1105. public skins_menu_handler(id, menu, item)
  1106. {
  1107.     if( item == MENU_EXIT )
  1108.     {
  1109.         menu_destroy(menu);
  1110.         if( is_user_connected(id) )
  1111.             Knifeshop(id);
  1112.         return PLUGIN_HANDLED;
  1113.     }
  1114.  
  1115.     new data[6], szName[64];
  1116.     new access, callback;
  1117.     menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
  1118.  
  1119.     new key = str_to_num(data);
  1120.  
  1121.     switch(key)
  1122.     {
  1123.         case 1:
  1124.         {
  1125.             knifeskins_menu(id);               
  1126.         }
  1127.         case 2:
  1128.         {
  1129.             playerskins_menu(id);
  1130.         }
  1131.     }
  1132.     return PLUGIN_HANDLED;
  1133. }
  1134.  
  1135. public knifeskins_menu(id)
  1136. {
  1137.     new menu = menu_create("\yKnife Models Shop", "knifeskins_menu_handler");
  1138.     menu_additem(menu, "Random Jedi Lightsaber \R\y[40 Tokens]", "1");
  1139.     menu_additem(menu, "Kujang Knife  \R\y[20 Tokens]", "2");
  1140.     menu_additem(menu, "Battle Axe \R\y[20 Tokens]", "3");
  1141.     menu_additem(menu, "Halo Sword \R\y[20 Tokens]", "4");
  1142.    
  1143.     menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1144.     menu_display(id, menu, 0);
  1145. }
  1146.  
  1147. public knifeskins_menu_handler(id, menu, item)
  1148. {
  1149.     if( item == MENU_EXIT )
  1150.     {
  1151.         menu_destroy(menu);
  1152.         return PLUGIN_HANDLED;
  1153.     }
  1154.  
  1155.     new data[6], szName[64];
  1156.     new access, callback;
  1157.     menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
  1158.  
  1159.     new key = str_to_num(data);
  1160.  
  1161.     switch(key)
  1162.     {
  1163.         case 1:
  1164.         {
  1165.             if(get_bit(g_bHasKnifeSkin1, id))
  1166.             {
  1167.                 fnColorPrint(id, "You already have this Knife.");
  1168.                 return PLUGIN_HANDLED;
  1169.             }
  1170.             if(g_iPoints[id] < get_pcvar_num(km_cost_knifeskin1) )
  1171.             {
  1172.                 fnColorPrint(id, "You have insufficient tokens to purchase this knife.");
  1173.                 return PLUGIN_HANDLED;
  1174.             }
  1175.                    
  1176.             set_bit(g_bHasKnifeSkin1, id);
  1177.             set_bit(g_bChoseKnifeSkin1, id);
  1178.             clear_bit(g_bChoseKnifeSkin2, id);
  1179.             clear_bit(g_bChoseKnifeSkin3, id);
  1180.             clear_bit(g_bChoseKnifeSkin4, id);
  1181.            
  1182.             g_iPoints[id] -= get_pcvar_num(km_cost_knifeskin1);
  1183.             cs_set_user_money(id, g_iPoints[id], 1);
  1184.            
  1185.             savebits(id);
  1186.             knife_skin1(id);
  1187.            
  1188.             menu_destroy(menu);
  1189.                
  1190.         }
  1191.         case 2:
  1192.         {
  1193.             if(get_bit(g_bHasKnifeSkin2, id))
  1194.             {
  1195.                 fnColorPrint(id, "You already have this knife.");
  1196.                 return PLUGIN_HANDLED;
  1197.             }
  1198.             if(g_iPoints[id] < get_pcvar_num(km_cost_knifeskin2) )
  1199.             {
  1200.                 fnColorPrint(id, "You have insufficient tokens to purchase this knife.");
  1201.                 return PLUGIN_HANDLED;
  1202.             }
  1203.            
  1204.             set_bit(g_bHasKnifeSkin2, id);
  1205.             clear_bit(g_bChoseKnifeSkin1, id);
  1206.             set_bit(g_bChoseKnifeSkin2, id);
  1207.             clear_bit(g_bChoseKnifeSkin3, id);
  1208.             clear_bit(g_bChoseKnifeSkin4, id);
  1209.            
  1210.             g_iPoints[id] -= get_pcvar_num(km_cost_knifeskin2);
  1211.             cs_set_user_money(id, g_iPoints[id], 1);
  1212.            
  1213.             savebits(id);
  1214.             knife_skin2(id);
  1215.  
  1216.             menu_destroy(menu);
  1217.         }
  1218.         case 3:
  1219.         {
  1220.             if(get_bit(g_bHasKnifeSkin3, id))
  1221.             {
  1222.                 fnColorPrint(id, "You already have this knife.");
  1223.                 return PLUGIN_HANDLED;
  1224.             }
  1225.  
  1226.             if(g_iPoints[id] < get_pcvar_num(km_cost_knifeskin3) )
  1227.             {
  1228.                 fnColorPrint(id, "You have insufficient tokens to purchase this knife.");
  1229.                 return PLUGIN_HANDLED;
  1230.             }
  1231.            
  1232.             set_bit(g_bHasKnifeSkin3, id);
  1233.             clear_bit(g_bChoseKnifeSkin1, id);
  1234.             clear_bit(g_bChoseKnifeSkin2, id);
  1235.             set_bit(g_bChoseKnifeSkin3, id);
  1236.             clear_bit(g_bChoseKnifeSkin4, id);
  1237.            
  1238.             g_iPoints[id] -= get_pcvar_num(km_cost_knifeskin3);
  1239.             cs_set_user_money(id, g_iPoints[id], 1);
  1240.            
  1241.             savebits(id);
  1242.             knife_skin3(id);
  1243.  
  1244.             menu_destroy(menu);
  1245.         }
  1246.         case 4:
  1247.         {
  1248.             if(get_bit(g_bHasKnifeSkin4, id))
  1249.             {
  1250.                 fnColorPrint(id, "You already have this knife.");
  1251.                 return PLUGIN_HANDLED;
  1252.             }
  1253.  
  1254.             if(g_iPoints[id] < get_pcvar_num(km_cost_knifeskin4) )
  1255.             {
  1256.                 fnColorPrint(id, "You have insufficient tokens to purchase this knife.");
  1257.                 return PLUGIN_HANDLED;
  1258.             }
  1259.            
  1260.             set_bit(g_bHasKnifeSkin4, id);
  1261.             clear_bit(g_bChoseKnifeSkin1, id);
  1262.             clear_bit(g_bChoseKnifeSkin2, id);
  1263.             clear_bit(g_bChoseKnifeSkin3, id);
  1264.             set_bit(g_bChoseKnifeSkin4, id);
  1265.            
  1266.             g_iPoints[id] -= get_pcvar_num(km_cost_knifeskin4);
  1267.             cs_set_user_money(id, g_iPoints[id], 1);
  1268.            
  1269.             savebits(id);
  1270.             knife_skin4(id);
  1271.  
  1272.             menu_destroy(menu);
  1273.         }
  1274.     }
  1275.     return PLUGIN_HANDLED;
  1276. }
  1277.  
  1278. public knife_skin1(id)
  1279. {
  1280.     new iRandom = random_num( 1 , 5 );
  1281.     switch( iRandom )
  1282.     {    
  1283.         case 1:
  1284.         {
  1285.             set_pev(id, pev_viewmodel2, "models/knife-mod/v_light_turq.mdl");
  1286.             set_pev(id, pev_weaponmodel2, "models/knife-mod/p_light_turq.mdl");
  1287.         }
  1288.         case 2:
  1289.         {
  1290.             set_pev(id, pev_viewmodel2, "models/knife-mod/v_light_blue.mdl");
  1291.             set_pev(id, pev_weaponmodel2, "models/knife-mod/p_light_blue.mdl");
  1292.         }
  1293.         case 3:
  1294.         {
  1295.             set_pev(id, pev_viewmodel2, "models/knife-mod/v_light_green.mdl");
  1296.             set_pev(id, pev_weaponmodel2, "models/knife-mod/p_light_green.mdl");
  1297.         }
  1298.         case 4:
  1299.         {
  1300.             set_pev(id, pev_viewmodel2, "models/knife-mod/v_light_pink.mdl");
  1301.             set_pev(id, pev_weaponmodel2, "models/knife-mod/p_light_pink.mdl");
  1302.         }
  1303.         case 5:
  1304.         {
  1305.             set_pev(id, pev_viewmodel2, "models/knife-mod/v_light_red.mdl");
  1306.             set_pev(id, pev_weaponmodel2, "models/knife-mod/p_light_red.mdl");
  1307.         }
  1308.        
  1309.          
  1310.     }      
  1311. }
  1312.  
  1313. public knife_skin2(id)
  1314. {  
  1315.     set_pev(id, pev_viewmodel2, "models/knife-mod/v_knife_kujang.mdl");
  1316.     set_pev(id, pev_weaponmodel2, "models/knife-mod/p_knife_kujang.mdl");
  1317. }
  1318.  
  1319. public knife_skin3(id)
  1320. {
  1321.     set_pev(id, pev_viewmodel2, "models/knife-mod/v_baxe.mdl");
  1322.     set_pev(id, pev_weaponmodel2, "models/knife-mod/p_baxe.mdl");
  1323. }
  1324.  
  1325. public knife_skin4(id)
  1326. {
  1327.     set_pev(id, pev_viewmodel2, "models/knife-mod/v_knife_halo.mdl");
  1328.     set_pev(id, pev_weaponmodel2, "models/knife-mod/p_knife_halo.mdl");
  1329. }  
  1330.        
  1331. public playerskins_menu(id)
  1332. {
  1333.     new menu = menu_create("\ySkin Shop", "playerskins_menu_handler");
  1334.     menu_additem(menu, "Random T Skins \R\y[75 Tokens]", "1");
  1335.     menu_additem(menu, "Random CT Skins \R\y[75 Tokens]", "2");
  1336.     menu_additem(menu, "VIP   \R\y[ 20 Tokens]", "3");
  1337.     menu_additem(menu, "Assasin  \R\y[ 50 Tokens]", "4");
  1338.     menu_additem(menu, "Chucky \R\y[ 50 Tokens]", "5");
  1339.     menu_additem(menu, "Superleet \R\y[ 50 Tokens]", "6");
  1340.     menu_additem(menu, "Crysis Nanosuit \R\y[ 50 Tokens]", "7");
  1341.    
  1342.     menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1343.     menu_display(id, menu, 0);
  1344.     //return PLUGIN_HANDLED;
  1345. }
  1346.  
  1347. public playerskins_menu_handler(id, menu, item)
  1348. {
  1349.     if( item == MENU_EXIT )
  1350.     {
  1351.         menu_destroy(menu);
  1352.         return PLUGIN_HANDLED;
  1353.     }
  1354.  
  1355.     new data[6], szName[64];
  1356.     new access, callback;
  1357.     menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
  1358.  
  1359.     new key = str_to_num(data);
  1360.  
  1361.     switch(key)
  1362.     {
  1363.         case 1:
  1364.         {
  1365.             if(get_bit(g_bHasSkin1, id))
  1366.             {
  1367.                 fnColorPrint(id, "You already have this skin.");
  1368.                 menu_destroy(menu);
  1369.                 return PLUGIN_HANDLED;
  1370.             }
  1371.             if(g_iPoints[id] < get_pcvar_num(km_cost_skin1) )
  1372.             {
  1373.                 fnColorPrint(id, "You have insufficient tokens to purchase this skin.");
  1374.                 menu_destroy(menu);
  1375.                 return PLUGIN_HANDLED;
  1376.             }
  1377.        
  1378.             set_bit(g_bHasSkin1, id);
  1379.             set_bit(g_bChoseSkin1, id);
  1380.             clear_bit(g_bChoseSkin2, id);
  1381.             clear_bit(g_bChoseSkin3, id);
  1382.             clear_bit(g_bChoseSkin4, id);
  1383.             clear_bit(g_bChoseSkin5, id);
  1384.             clear_bit(g_bChoseSkin6, id);
  1385.             clear_bit(g_bChoseSkin7, id);
  1386.            
  1387.             g_iPoints[id] -= get_pcvar_num(km_cost_skin1);
  1388.             cs_set_user_money(id, g_iPoints[id], 1);
  1389.            
  1390.             savebits(id);
  1391.             perm_skin1(id);
  1392.            
  1393.             menu_destroy(menu);
  1394.                
  1395.         }
  1396.         case 2:
  1397.         {
  1398.             if(get_bit(g_bHasSkin2, id))
  1399.             {
  1400.                 fnColorPrint(id, "You already have this skin.");
  1401.                 menu_destroy(menu);
  1402.                 return PLUGIN_HANDLED;
  1403.             }
  1404.             if(g_iPoints[id] < get_pcvar_num(km_cost_skin2) )
  1405.             {
  1406.                 fnColorPrint(id, "You have insufficient tokens to purchase this skin.");
  1407.                 menu_destroy(menu);
  1408.                 return PLUGIN_HANDLED;
  1409.             }
  1410.  
  1411.             set_bit(g_bHasSkin2, id);
  1412.             clear_bit(g_bChoseSkin1, id);
  1413.             set_bit(g_bChoseSkin2, id);
  1414.             clear_bit(g_bChoseSkin3, id);
  1415.             clear_bit(g_bChoseSkin4, id);
  1416.             clear_bit(g_bChoseSkin5, id);
  1417.             clear_bit(g_bChoseSkin6, id);
  1418.             clear_bit(g_bChoseSkin7, id);
  1419.            
  1420.             g_iPoints[id] -= get_pcvar_num(km_cost_skin2);
  1421.             cs_set_user_money(id, g_iPoints[id], 1);
  1422.            
  1423.             savebits(id);
  1424.             perm_skin2(id);
  1425.  
  1426.             menu_destroy(menu);
  1427.         }
  1428.         case 3:
  1429.         {
  1430.             if(get_bit(g_bHasSkin3, id))
  1431.             {
  1432.                 fnColorPrint(id, "You already have this skin.");
  1433.                 menu_destroy(menu);
  1434.                 return PLUGIN_HANDLED;
  1435.             }
  1436.             if(g_iPoints[id] < get_pcvar_num(km_cost_skin3) )
  1437.             {
  1438.                 fnColorPrint(id, "You have insufficient tokens to purchase this skin.");
  1439.                 menu_destroy(menu);
  1440.                 return PLUGIN_HANDLED;
  1441.             }
  1442.            
  1443.             cs_set_user_model(id,  skin3);
  1444.             set_bit(g_bHasSkin3, id);
  1445.             clear_bit(g_bChoseSkin1, id);
  1446.             clear_bit(g_bChoseSkin2, id);
  1447.             set_bit(g_bChoseSkin3, id);
  1448.             clear_bit(g_bChoseSkin4, id);
  1449.             clear_bit(g_bChoseSkin5, id);
  1450.             clear_bit(g_bChoseSkin6, id);
  1451.             clear_bit(g_bChoseSkin7, id);
  1452.            
  1453.             g_iPoints[id] -= get_pcvar_num(km_cost_skin3);
  1454.             cs_set_user_money(id, g_iPoints[id], 1);
  1455.            
  1456.             savebits(id);
  1457.            
  1458.             menu_destroy(menu);
  1459.         }
  1460.         case 4:  
  1461.         {
  1462.             if(get_bit(g_bHasSkin4, id))
  1463.             {
  1464.                 fnColorPrint(id, "You already have this skin.");
  1465.                 menu_destroy(menu);
  1466.                 return PLUGIN_HANDLED;
  1467.             }
  1468.             if(g_iPoints[id] < get_pcvar_num(km_cost_skin4) )
  1469.             {
  1470.                 fnColorPrint(id, "You have insufficient tokens to purchase this skin.");
  1471.                 menu_destroy(menu);
  1472.                 return PLUGIN_HANDLED;
  1473.             }
  1474.            
  1475.             cs_set_user_model(id, skin4);
  1476.             set_bit(g_bHasSkin4, id);
  1477.             clear_bit(g_bChoseSkin1, id);
  1478.             clear_bit(g_bChoseSkin2, id);
  1479.             clear_bit(g_bChoseSkin3, id);
  1480.             set_bit(g_bChoseSkin4, id);
  1481.             clear_bit(g_bChoseSkin5, id);
  1482.             clear_bit(g_bChoseSkin6, id);
  1483.             clear_bit(g_bChoseSkin7, id);
  1484.            
  1485.             g_iPoints[id] -= get_pcvar_num(km_cost_skin4);
  1486.             cs_set_user_money(id, g_iPoints[id], 1);
  1487.            
  1488.             savebits(id);
  1489.            
  1490.             menu_destroy(menu);
  1491.         }
  1492.         case 5:
  1493.         {
  1494.             if(get_bit(g_bHasSkin5, id))
  1495.             {
  1496.                 fnColorPrint(id, "You already have this skin.");
  1497.                 menu_destroy(menu);
  1498.                 return PLUGIN_HANDLED;
  1499.             }
  1500.             if(g_iPoints[id] < get_pcvar_num(km_cost_skin5) )
  1501.             {
  1502.                 fnColorPrint(id, "You have insufficient tokens to purchase this skin.");
  1503.                 menu_destroy(menu);
  1504.                 return PLUGIN_HANDLED;
  1505.             }
  1506.            
  1507.             cs_set_user_model(id, skin5);
  1508.             set_bit(g_bHasSkin5, id);
  1509.             clear_bit(g_bChoseSkin1, id);
  1510.             clear_bit(g_bChoseSkin2, id);
  1511.             clear_bit(g_bChoseSkin3, id);
  1512.             clear_bit(g_bChoseSkin4, id);
  1513.             set_bit(g_bChoseSkin5, id);
  1514.             clear_bit(g_bChoseSkin6, id);
  1515.             clear_bit(g_bChoseSkin7, id);
  1516.            
  1517.             g_iPoints[id] -= get_pcvar_num(km_cost_skin5);
  1518.             cs_set_user_money(id, g_iPoints[id], 1);
  1519.             savebits(id);
  1520.            
  1521.             menu_destroy(menu);
  1522.         }
  1523.         case 6:
  1524.         {
  1525.             if(get_bit(g_bHasSkin6, id))
  1526.             {
  1527.                 fnColorPrint(id, "You already have this skin.");
  1528.                 menu_destroy(menu);
  1529.                 return PLUGIN_HANDLED;
  1530.             }
  1531.             if(g_iPoints[id] < get_pcvar_num(km_cost_skin6) )
  1532.             {
  1533.                 fnColorPrint(id, "You have insufficient tokens to purchase this skin.");
  1534.                 menu_destroy(menu);
  1535.                 return PLUGIN_HANDLED;
  1536.             }
  1537.            
  1538.             cs_set_user_model(id, skin6);
  1539.             set_bit(g_bHasSkin6, id);
  1540.             clear_bit(g_bChoseSkin1, id);
  1541.             clear_bit(g_bChoseSkin2, id);
  1542.             clear_bit(g_bChoseSkin3, id);
  1543.             clear_bit(g_bChoseSkin4, id);
  1544.             clear_bit(g_bChoseSkin5, id);
  1545.             set_bit(g_bChoseSkin6, id);
  1546.             clear_bit(g_bChoseSkin7, id);
  1547.            
  1548.             g_iPoints[id] -= get_pcvar_num(km_cost_skin6);
  1549.             cs_set_user_money(id, g_iPoints[id], 1);
  1550.            
  1551.             savebits(id);
  1552.            
  1553.             menu_destroy(menu);
  1554.         }
  1555.         case 7:
  1556.         {
  1557.             if(get_bit(g_bHasSkin7, id))
  1558.             {
  1559.                 fnColorPrint(id, "You already have this skin.");
  1560.                 menu_destroy(menu);
  1561.                 return PLUGIN_HANDLED;
  1562.             }
  1563.             if(g_iPoints[id] < get_pcvar_num(km_cost_skin7) )
  1564.             {
  1565.                 fnColorPrint(id, "You have insufficient tokens to purchase this skin.");
  1566.                 menu_destroy(menu);
  1567.                 return PLUGIN_HANDLED;
  1568.             }
  1569.                        
  1570.             cs_set_user_model(id, skin7);
  1571.             set_bit(g_bHasSkin7, id);
  1572.             clear_bit(g_bChoseSkin1, id);
  1573.             clear_bit(g_bChoseSkin2, id);
  1574.             clear_bit(g_bChoseSkin3, id);
  1575.             clear_bit(g_bChoseSkin4, id);
  1576.             clear_bit(g_bChoseSkin5, id);
  1577.             clear_bit(g_bChoseSkin6, id);
  1578.             set_bit(g_bChoseSkin7, id);
  1579.            
  1580.             g_iPoints[id] -= get_pcvar_num(km_cost_skin7);
  1581.             cs_set_user_money(id, g_iPoints[id], 1);
  1582.            
  1583.             savebits(id);
  1584.            
  1585.             menu_destroy(menu);
  1586.         }
  1587.     }
  1588.     return PLUGIN_HANDLED;
  1589. }
  1590.  
  1591. public perm_skin1(id)
  1592. {
  1593.     new iRandom = random_num( 1 , 5 );
  1594.     switch( iRandom )
  1595.     {    
  1596.         case 1: cs_set_user_model(id, "arctic");    
  1597.         case 2: cs_set_user_model(id, "guerilla");        
  1598.         case 3: cs_set_user_model(id, "leet");      
  1599.         case 4: cs_set_user_model(id, "militia");  
  1600.         case 5: cs_set_user_model(id, "terror");  
  1601.     }  
  1602. }
  1603.  
  1604. public perm_skin2(id)
  1605. {
  1606.     new iRandom = random_num( 1 , 5 );
  1607.     switch( iRandom )
  1608.     {    
  1609.         case 1: cs_set_user_model(id, "urban");    
  1610.         case 2: cs_set_user_model(id, "spetsnaz");        
  1611.         case 3: cs_set_user_model(id, "sas");      
  1612.         case 4: cs_set_user_model(id, "gsg9");  
  1613.         case 5: cs_set_user_model(id, "gign");  
  1614.     }  
  1615. }
  1616.  
  1617. public wear_skins_menu(id)
  1618. {
  1619.     new menu = menu_create("\yWardrobe menu", "wear_skins_menu_handler");
  1620.    
  1621.     menu_additem(menu, "Bought Knife skins", "1");
  1622.     menu_additem(menu, "Bought Player skins", "5");
  1623.        
  1624.     menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1625.     menu_display(id, menu, 0);
  1626. }
  1627.  
  1628. public wear_skins_menu_handler(id, menu, item)
  1629. {
  1630.     if( item == MENU_EXIT )
  1631.     {
  1632.         menu_destroy(menu);
  1633.  
  1634.         return PLUGIN_HANDLED;
  1635.     }
  1636.  
  1637.     new data[6], szName[64];
  1638.     new access, callback;
  1639.     menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
  1640.  
  1641.     new key = str_to_num(data);
  1642.  
  1643.     switch(key)
  1644.     {
  1645.         case 1:
  1646.         {
  1647.             wear_knifeskins_menu(id);              
  1648.         }
  1649.         case 5:
  1650.         {
  1651.             wear_playerskins_menu(id);
  1652.         }
  1653.     }
  1654.     return PLUGIN_HANDLED;
  1655. }
  1656.  
  1657. public wear_knifeskins_menu(id)
  1658. {
  1659.     new menu = menu_create("\yKnife Skins Wardrobe", "wear_knifeskins_menu_handler");
  1660.     menu_additem(menu, "Random Jedi Lightsaber", "1");
  1661.     menu_additem(menu, "Scorpio Knife", "2");
  1662.     menu_additem(menu, "Battle Axe", "3");
  1663.     menu_additem(menu, "Halo Sword", "4");
  1664.    
  1665.     menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1666.     menu_display(id, menu, 0);
  1667. }
  1668.  
  1669. public wear_knifeskins_menu_handler(id, menu, item)
  1670. {
  1671.     if( item == MENU_EXIT )
  1672.     {
  1673.         menu_destroy(menu);
  1674.         if( is_user_connected(id) )
  1675.             wear_skins_menu(id);
  1676.         return PLUGIN_HANDLED;
  1677.     }
  1678.  
  1679.     new data[6], szName[64];
  1680.     new access, callback;
  1681.     menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
  1682.  
  1683.     new key = str_to_num(data);
  1684.  
  1685.     switch(key)
  1686.     {
  1687.         case 1:
  1688.         {
  1689.             if(!get_bit(g_bHasKnifeSkin1, id))
  1690.             {
  1691.                 fnColorPrint(id, "You can't use this skin unless you buy it.");
  1692.                 wear_knifeskins_menu(id);
  1693.                 return PLUGIN_HANDLED;
  1694.             }  
  1695.             set_bit(g_bChoseKnifeSkin1, id);
  1696.             clear_bit(g_bChoseKnifeSkin2, id);
  1697.             clear_bit(g_bChoseKnifeSkin3, id);
  1698.             clear_bit(g_bChoseKnifeSkin4, id);
  1699.             knife_skin1(id);
  1700.             savebits(id);
  1701.             menu_destroy(menu);
  1702.         }
  1703.         case 2:
  1704.         {
  1705.             if(!get_bit(g_bHasKnifeSkin2, id))
  1706.             {
  1707.                 fnColorPrint(id, "You can't use this skin unless you buy it.");
  1708.                 wear_knifeskins_menu(id);
  1709.                 return PLUGIN_HANDLED;
  1710.             }
  1711.             clear_bit(g_bChoseKnifeSkin1, id);
  1712.             set_bit(g_bChoseKnifeSkin2, id);
  1713.             clear_bit(g_bChoseKnifeSkin3, id);
  1714.             clear_bit(g_bChoseKnifeSkin4, id);
  1715.             knife_skin2(id);
  1716.             savebits(id);
  1717.             menu_destroy(menu);
  1718.         }
  1719.         case 3:
  1720.         {
  1721.             if(!get_bit(g_bHasKnifeSkin3, id))
  1722.             {
  1723.                 fnColorPrint(id, "You can't use this skin unless you buy it.");
  1724.                 wear_knifeskins_menu(id);
  1725.                 return PLUGIN_HANDLED;
  1726.             }      
  1727.             clear_bit(g_bChoseKnifeSkin1, id);
  1728.             clear_bit(g_bChoseKnifeSkin2, id);
  1729.             set_bit(g_bChoseKnifeSkin3, id);
  1730.             clear_bit(g_bChoseKnifeSkin4, id);
  1731.             knife_skin3(id);
  1732.             savebits(id);
  1733.             menu_destroy(menu);
  1734.         }
  1735.         case 4:
  1736.         {
  1737.             if(!get_bit(g_bHasKnifeSkin4, id))
  1738.             {
  1739.                 fnColorPrint(id, "You can't use this skin unless you buy it.");
  1740.                 wear_knifeskins_menu(id);
  1741.                 return PLUGIN_HANDLED;
  1742.             }
  1743.             clear_bit(g_bChoseKnifeSkin1, id);
  1744.             clear_bit(g_bChoseKnifeSkin2, id);
  1745.             clear_bit(g_bChoseKnifeSkin3, id);
  1746.             set_bit(g_bChoseKnifeSkin4, id);
  1747.             knife_skin4(id);
  1748.             savebits(id);
  1749.             menu_destroy(menu);
  1750.         }
  1751.     }
  1752.     return PLUGIN_HANDLED;
  1753. }
  1754.  
  1755. public wear_playerskins_menu(id)
  1756. {
  1757.     new menu = menu_create("\yPlayer Skins Wardrobe", "wear_playerskins_menu_handler");
  1758.     menu_additem(menu, "Random T Skins", "1");
  1759.     menu_additem(menu, "Random CT Skins", "2");
  1760.     menu_additem(menu, "VIP", "3");
  1761.     menu_additem(menu, "Assassin", "4");
  1762.     menu_additem(menu, "Chucky ", "5");
  1763.     menu_additem(menu, "Superleet ", "6");
  1764.     menu_additem(menu, "Crysis Nanosuit ", "7");
  1765.    
  1766.     menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1767.     menu_display(id, menu, 0);
  1768. }
  1769.  
  1770. public wear_playerskins_menu_handler(id, menu, item)
  1771. {
  1772.     if( item == MENU_EXIT )
  1773.     {
  1774.         menu_destroy(menu);
  1775.         if( is_user_connected(id) )
  1776.             wear_skins_menu(id);
  1777.         return PLUGIN_HANDLED;
  1778.     }
  1779.  
  1780.     new data[6], szName[64];
  1781.     new access, callback;
  1782.     menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
  1783.  
  1784.     new key = str_to_num(data);
  1785.  
  1786.     switch(key)
  1787.     {
  1788.         case 1:
  1789.         {
  1790.             if(!get_bit(g_bHasSkin1, id))
  1791.             {
  1792.                 fnColorPrint(id, "You can't wear this skin unless you buy it.");
  1793.                 wear_playerskins_menu(id);
  1794.                 return PLUGIN_HANDLED;
  1795.             }
  1796.             set_bit(g_bChoseSkin1, id);
  1797.             clear_bit(g_bChoseSkin2, id);
  1798.             clear_bit(g_bChoseSkin3, id);
  1799.             clear_bit(g_bChoseSkin4, id);
  1800.             clear_bit(g_bChoseSkin5, id);
  1801.             clear_bit(g_bChoseSkin6, id);
  1802.             clear_bit(g_bChoseSkin7, id);
  1803.             perm_skin1(id);
  1804.             menu_destroy(menu);
  1805.         }
  1806.         case 2:
  1807.         {
  1808.             if(!get_bit(g_bHasSkin2, id))
  1809.             {
  1810.                 fnColorPrint(id, "You can't wear this skin unless you buy it.");
  1811.                 wear_playerskins_menu(id);
  1812.                 return PLUGIN_HANDLED;
  1813.             }
  1814.             clear_bit(g_bChoseSkin1, id);
  1815.             set_bit(g_bChoseSkin2, id);
  1816.             clear_bit(g_bChoseSkin3, id);
  1817.             clear_bit(g_bChoseSkin4, id);
  1818.             clear_bit(g_bChoseSkin5, id);
  1819.             clear_bit(g_bChoseSkin6, id);
  1820.             clear_bit(g_bChoseSkin7, id);
  1821.             perm_skin2(id);
  1822.             menu_destroy(menu);
  1823.         }
  1824.         case 3:
  1825.         {
  1826.             if(!get_bit(g_bHasSkin3, id))
  1827.             {
  1828.                 fnColorPrint(id, "You can't wear this skin unless you buy it.");
  1829.                 wear_playerskins_menu(id);
  1830.                 return PLUGIN_HANDLED;
  1831.             }
  1832.             clear_bit(g_bChoseSkin1, id);
  1833.             clear_bit(g_bChoseSkin2, id);
  1834.             set_bit(g_bChoseSkin3, id);
  1835.             clear_bit(g_bChoseSkin4, id);
  1836.             clear_bit(g_bChoseSkin5, id);
  1837.             clear_bit(g_bChoseSkin6, id);
  1838.             clear_bit(g_bChoseSkin7, id);
  1839.             cs_set_user_model(id, skin3);
  1840.             menu_destroy(menu);
  1841.         }
  1842.         case 4:
  1843.         {
  1844.             if(!get_bit(g_bHasSkin4, id))
  1845.             {
  1846.                 fnColorPrint(id, "You can't wear this skin unless you buy it.");
  1847.                 wear_playerskins_menu(id);
  1848.                 return PLUGIN_HANDLED;
  1849.             }  
  1850.             clear_bit(g_bChoseSkin1, id);
  1851.             clear_bit(g_bChoseSkin2, id);
  1852.             clear_bit(g_bChoseSkin3, id);
  1853.             set_bit(g_bChoseSkin4, id);
  1854.             clear_bit(g_bChoseSkin5, id);
  1855.             clear_bit(g_bChoseSkin6, id);
  1856.             clear_bit(g_bChoseSkin7, id);
  1857.             cs_set_user_model(id, skin4);
  1858.             menu_destroy(menu);
  1859.         }
  1860.         case 5:
  1861.         {
  1862.             if(!get_bit(g_bHasSkin5, id))
  1863.             {
  1864.                 fnColorPrint(id, "You can't wear this skin unless you buy it.");
  1865.                 wear_playerskins_menu(id);
  1866.                 return PLUGIN_HANDLED;
  1867.             }
  1868.             clear_bit(g_bChoseSkin1, id);
  1869.             clear_bit(g_bChoseSkin2, id);
  1870.             clear_bit(g_bChoseSkin3, id);
  1871.             clear_bit(g_bChoseSkin4, id);
  1872.             set_bit(g_bChoseSkin5, id);
  1873.             clear_bit(g_bChoseSkin6, id);
  1874.             clear_bit(g_bChoseSkin7, id);
  1875.             cs_set_user_model(id, skin5);
  1876.             menu_destroy(menu);
  1877.         }
  1878.         case 6:
  1879.         {
  1880.             if(!get_bit(g_bHasSkin6, id))
  1881.             {
  1882.                 fnColorPrint(id, "You can't wear this skin unless you buy it.");
  1883.                 wear_playerskins_menu(id);
  1884.                 return PLUGIN_HANDLED;
  1885.             }
  1886.             clear_bit(g_bChoseSkin1, id);
  1887.             clear_bit(g_bChoseSkin2, id);
  1888.             clear_bit(g_bChoseSkin3, id);
  1889.             clear_bit(g_bChoseSkin4, id);
  1890.             clear_bit(g_bChoseSkin5, id);
  1891.             set_bit(g_bChoseSkin6, id);
  1892.             clear_bit(g_bChoseSkin7, id);
  1893.             cs_set_user_model(id, skin6);
  1894.             menu_destroy(menu);
  1895.         }
  1896.         case 7:
  1897.         {
  1898.             if(!get_bit(g_bHasSkin7, id))
  1899.             {
  1900.                 fnColorPrint(id, "You can't wear this skin unless you buy it.");
  1901.                 menu_destroy(menu);
  1902.                 return PLUGIN_HANDLED;
  1903.             }
  1904.             clear_bit(g_bChoseSkin1, id);
  1905.             clear_bit(g_bChoseSkin2, id);
  1906.             clear_bit(g_bChoseSkin3, id);
  1907.             clear_bit(g_bChoseSkin4, id);
  1908.             clear_bit(g_bChoseSkin5, id);
  1909.             clear_bit(g_bChoseSkin6, id);
  1910.             set_bit(g_bChoseSkin7, id);
  1911.             cs_set_user_model(id, skin7);
  1912.             menu_destroy(menu);
  1913.         }
  1914.     }
  1915.     return PLUGIN_HANDLED;
  1916. }
  1917.  
  1918.  
  1919. public client_authorized(id) {
  1920.     if(!is_user_bot(id) && !is_user_hltv(id))
  1921.     {
  1922.         #if defined SAVE_METHOD_NICK
  1923.         get_user_name(id, g_iAuth[id], charsmax(g_iAuth));
  1924.         #endif
  1925.         #if defined SAVE_METHOD_IP
  1926.         get_user_ip(id, g_iAuthIP[id], charsmax(g_iAuthIP));
  1927.         #endif
  1928.         #if defined SAVE_METHOD_ID
  1929.         get_user_authid(id, g_iAuthID[id], charsmax(g_iAuthID));
  1930.         #endif
  1931.        
  1932.         GetData(id);
  1933.     }
  1934.     loadbits(id);
  1935. }
  1936.  
  1937. public client_infochanged( plr )
  1938. {
  1939.     static curName[32], newName[32];
  1940.     get_user_name( plr, curName, 31 );
  1941.     get_user_info( plr, "name", newName, 31 );
  1942.    
  1943.     if( !equal( newName, curName ) )
  1944.     {
  1945.         copy( g_szNickname[plr], 31, newName );
  1946.     }
  1947. }
  1948.  
  1949. public GetHudColor( &r, &g, &b )
  1950. {
  1951.     static color[16], piece[5];
  1952.     get_pcvar_string( g_pCVarHudColor, color, 15 );
  1953.    
  1954.     strbreak( color, piece, 4, color, 15 );
  1955.     r = str_to_num( piece );
  1956.    
  1957.     strbreak( color, piece, 4, color, 15 );
  1958.     g = str_to_num( piece );
  1959.     b = str_to_num( color );
  1960. }
  1961.  
  1962. public GetHudCoords( &Float:x, &Float:y )
  1963. {
  1964.     static coords[16], piece[10];
  1965.     get_pcvar_string( g_pCVarHudCoords, coords, 15 );
  1966.    
  1967.     strbreak( coords, piece, 9, coords, 15 );
  1968.     x = str_to_float( piece );
  1969.     y = str_to_float( coords );
  1970. }
  1971.  
  1972. public client_putinserver(id)
  1973. {
  1974.     LoadKnife(id);
  1975. }
  1976.  
  1977. public Fwd_PlayerSpawn_Post(const id)
  1978. {
  1979.     if (!is_user_alive(id))
  1980.         return HAM_HANDLED;
  1981.    
  1982.     strip_user_weapons( id );
  1983.     give_item( id, "weapon_knife" );
  1984.        
  1985.     g_bAlive[id] = bool:is_user_alive(id);
  1986.                
  1987.     if(get_bit(g_bHasNadePack, id) )
  1988.     {
  1989.         give_item(id, "weapon_hegrenade");
  1990.         give_item(id, "weapon_flashbang");
  1991.         give_item(id, "weapon_smokegrenade");
  1992.     }
  1993.        
  1994.     if(get_bit(g_bHasPermGrav, id) )
  1995.     {
  1996.         Perm_Gravity(id);
  1997.     }
  1998.    
  1999.     if(get_bit(g_bHasPermInvis, id) )
  2000.     {
  2001.         Perm_Invisiblity(id);
  2002.     }
  2003.    
  2004.     if(get_bit(g_bHasPermSpeed, id) )
  2005.     {
  2006.         set_task(1.0, "Perm_Speed", id);
  2007.         fnColorPrint(id, "Your speed upgrade has been activated.");
  2008.     }
  2009.    
  2010.     if(get_bit(g_bHasPermVital, id) )
  2011.     {
  2012.         Perm_Vitality(id);
  2013.     }
  2014.    
  2015.     if(get_bit(g_bHasSkin1, id) && get_bit(g_bChoseSkin1,id ) )
  2016.     {
  2017.         perm_skin1(id);        
  2018.     }
  2019.    
  2020.     if(get_bit(g_bHasSkin2, id) && get_bit(g_bChoseSkin2,id ) )
  2021.     {
  2022.         perm_skin2(id);        
  2023.     }
  2024.    
  2025.     if(get_bit(g_bHasSkin3, id) && get_bit(g_bChoseSkin3,id ))
  2026.     {
  2027.         cs_set_user_model(id, skin3);      
  2028.     }
  2029.    
  2030.     if(get_bit(g_bHasSkin4, id) && get_bit(g_bChoseSkin4,id ) )
  2031.     {
  2032.         cs_set_user_model(id, skin4);
  2033.     }
  2034.    
  2035.     if(get_bit(g_bHasSkin5, id) && get_bit(g_bChoseSkin5,id ) )
  2036.     {
  2037.         cs_set_user_model(id, skin5);
  2038.     }
  2039.    
  2040.     if(get_bit(g_bHasSkin6, id) && get_bit(g_bChoseSkin6,id ) )
  2041.     {
  2042.         cs_set_user_model(id, skin6);
  2043.     }
  2044.    
  2045.     if(get_bit(g_bHasSkin7, id) && get_bit(g_bChoseSkin7,id ) )
  2046.     {
  2047.         cs_set_user_model(id, skin7);
  2048.     }
  2049.    
  2050.     //set_task(7.0, "reset_bit", id)
  2051.        
  2052.     return HAM_HANDLED;
  2053. }
  2054.  
  2055. /*public reset_bit(id)
  2056. {
  2057.     clear_bit(g_bHasDied, id);
  2058. }*/
  2059.  
  2060. public Fwd_TraceAttack_Player_Post(const victim, const attacker, Float:flDamage, Float:flDirection[3], const ptr, const iDamagebits)
  2061. {
  2062.     // Not a valid attacker / no victim
  2063.     if (!IsPlayer(attacker))
  2064.         return HAM_IGNORED;
  2065.  
  2066.     g_bHeadShot[attacker][victim] = bool:( get_tr2(ptr, TR_iHitgroup) == HITGROUP_HEAD );
  2067.    
  2068.     return HAM_IGNORED;
  2069. }
  2070.  
  2071. public Ham_TakeDamage_player(id, ent, idattacker, Float:damage, damagebits)
  2072. {
  2073.     if(get_bit(g_bHasBhop, id) )
  2074.     {
  2075.         if( damagebits != DMG_FALL )
  2076.             return HAM_IGNORED;
  2077.  
  2078.         damage *= get_pcvar_float(g_pcvarFallDamage);
  2079.         SetHamParamFloat(4, damage);
  2080.     }
  2081.    
  2082.     return HAM_HANDLED;
  2083. }
  2084.  
  2085. public CmdStart(id, uc_handle, seed)
  2086. {
  2087.     if(get_bit(g_bHasBhop, id) )
  2088.     {
  2089.         if( g_bAlive[id]
  2090.         &&  get_pcvar_num(g_pcvarBhopStyle)
  2091.         &&  get_uc(uc_handle, UC_Buttons) & IN_USE
  2092.         &&  pev(id, pev_flags) & FL_ONGROUND    )
  2093.         {
  2094.             static Float:fVelocity[3];
  2095.             pev(id, pev_velocity, fVelocity);
  2096.             fVelocity[0] *= 0.3;
  2097.             fVelocity[1] *= 0.3;
  2098.             fVelocity[2] *= 0.3;
  2099.             set_pev(id, pev_velocity, fVelocity);
  2100.         }
  2101.     }
  2102. }
  2103.  
  2104. public FM_TraceLine_Post( Float:vecSrc[3], Float:vecEnd[3], noMonsters, skipEnt, tr )
  2105. {
  2106.     if( !is_user_alive( skipEnt ) )
  2107.     {
  2108.         return FMRES_IGNORED;
  2109.     }
  2110.    
  2111.     if( get_user_weapon( skipEnt ) != CSW_KNIFE )
  2112.     {
  2113.         return FMRES_IGNORED;
  2114.     }
  2115.    
  2116.     static button;
  2117.     button = pev( skipEnt, pev_button );
  2118.    
  2119.     if( !( button & IN_ATTACK ) && !( button & IN_ATTACK2 ) )
  2120.     {
  2121.         return FMRES_IGNORED;
  2122.     }
  2123.    
  2124.     static Float:flFraction;
  2125.     get_tr2( tr, TR_flFraction, flFraction );
  2126.    
  2127.     if( flFraction >= 1.0 )
  2128.     {
  2129.         return FMRES_IGNORED;
  2130.     }
  2131.    
  2132.     static pHit;
  2133.     pHit = get_tr2( tr, TR_pHit );
  2134.    
  2135.     if( get_user_team( skipEnt ) == get_user_team( pHit ) && !get_pcvar_num( g_pCVarFriendlyFire ) )
  2136.     {
  2137.         return FMRES_IGNORED;
  2138.     }
  2139.  
  2140.     static Float:vecEndPos[3];
  2141.     get_tr2( tr, TR_vecEndPos, vecEndPos );
  2142.  
  2143.     static Float:distance;
  2144.     distance = vector_distance( vecSrc, vecEndPos );
  2145.    
  2146.     static Float:range;
  2147.     range = distance / flFraction; // vector_distance( vecSrc, vecEnd )
  2148.    
  2149.     if( 31.89 < range < 32.1 )
  2150.     {
  2151.         GetTraceData( tr, skipEnt, pHit, distance, STAB );
  2152.     }
  2153.     else if( 47.89 < range < 48.1 )
  2154.     {
  2155.         GetTraceData( tr, skipEnt, pHit,  distance, SLASH );
  2156.     }
  2157.    
  2158.     return FMRES_IGNORED;
  2159. }
  2160.  
  2161. public FM_TraceHull_Post( Float:vecSrc[3], Float:vecEnd[3], noMonsters, hull, skipEnt, tr )
  2162. {
  2163.     if( !is_user_alive( skipEnt ) )
  2164.     {
  2165.         return FMRES_IGNORED;
  2166.     }
  2167.    
  2168.     if( get_user_weapon( skipEnt ) != CSW_KNIFE )
  2169.     {
  2170.         return FMRES_IGNORED;
  2171.     }
  2172.    
  2173.     static Float:flFraction;
  2174.     get_tr2( tr, TR_flFraction, flFraction );
  2175.    
  2176.     if( flFraction >= 1.0 )
  2177.     {
  2178.         return FMRES_IGNORED;
  2179.     }
  2180.    
  2181.     static pHit;
  2182.     pHit = get_tr2( tr, TR_pHit );
  2183.    
  2184.     if( get_user_team( skipEnt ) == get_user_team( pHit ) && !get_pcvar_num( g_pCVarFriendlyFire ) )
  2185.     {
  2186.         return FMRES_IGNORED;
  2187.     }
  2188.    
  2189.     static Float:vecEndPos[3];
  2190.     get_tr2( tr, TR_vecEndPos, vecEndPos );
  2191.  
  2192.     static Float:distance;
  2193.     distance = vector_distance( vecSrc, vecEndPos );
  2194.    
  2195.     static Float:range;
  2196.     range = distance / flFraction; // vector_distance( vecSrc, vecEnd )
  2197.    
  2198.     if( 31.89 < range < 32.1 )
  2199.     {
  2200.         GetTraceData( tr, skipEnt, pHit, distance, STAB );
  2201.     }
  2202.     else if( 47.89 < range < 48.1 )
  2203.     {
  2204.         GetTraceData( tr, skipEnt, pHit, distance, SLASH );
  2205.     }
  2206.    
  2207.     return FMRES_IGNORED;
  2208. }
  2209.  
  2210. public GetTraceData( tr, attacker, victim, Float:distance, AttackType:attack )
  2211. {
  2212.     g_HitData[iAttack] = any:attack;
  2213.     g_HitData[flDistance] = any:distance;
  2214.     g_HitData[iHitgroup] = get_tr2( tr, TR_iHitgroup );
  2215.     g_HitData[iAttacker] = attacker;
  2216.     g_HitData[iVictim] = victim;
  2217.    
  2218.     g_bKnifeHit = true;
  2219. }
  2220.  
  2221. public eventDamage( )
  2222. {
  2223.     if( g_bKnifeHit )
  2224.     {
  2225.         g_bKnifeHit = false;
  2226.        
  2227.         static victim;
  2228.         victim = g_HitData[iVictim];
  2229.                    
  2230.         if( !( 1 <= victim <= 32 ) )
  2231.         {
  2232.             return PLUGIN_CONTINUE;
  2233.         }
  2234.        
  2235.         static attacker;
  2236.         attacker = g_HitData[iAttacker];
  2237.        
  2238.         static Float:distance;
  2239.         distance = g_HitData[flDistance];
  2240.        
  2241.         static Float:health;
  2242.         pev( victim, pev_health, health );
  2243.        
  2244.         static r, g, b;
  2245.         GetHudColor( r, g, b );
  2246.        
  2247.         static Float:x, Float:y;
  2248.         GetHudCoords( x, y );
  2249.        
  2250.         set_hudmessage( r, g, b, x, y, 0, 0.0, get_pcvar_float( g_pCVarHudHoldtime ), 0.0, 0.0, 1 );
  2251.        
  2252.         if( g_HitData[iAttack] == STAB )
  2253.         {
  2254.             show_hudmessage( attacker, "Stab Stats (%s)^nDistance: %.3f meter (max: 1.0)^nHit: %s (%s)^nDamage: %i"\
  2255.                 , g_szTraceType[TraceType:!g_HitData[iHitgroup]],\
  2256.                 (distance/modMeter), g_szNickname[victim],\
  2257.                 g_szHitgroup[g_HitData[iHitgroup]], pev( victim, pev_dmg_take ) );
  2258.        
  2259.             if( health < 0.0 )
  2260.             {
  2261.                 fnColorPrint( 0, "^4%s ^1stabbed^3 %s ^1from^4 %.3f ^1meter ^3(%s)^1!",\
  2262.                     g_szNickname[attacker], g_szNickname[victim],\
  2263.                     (distance/modMeter), g_szHitgroup[g_HitData[iHitgroup]] );
  2264.                
  2265.                 if( (distance/modMeter) >= get_pcvar_float( g_pCVarSoundGodlikeStab ) )
  2266.                 {
  2267.                     fnColorPrint( 0, "^4 %s ^1has made a GodLike %s-stab kill on^3 %s^1!",\
  2268.                         g_szNickname[attacker],\
  2269.                         g_szHitgroup[g_HitData[iHitgroup]],\
  2270.                         g_szNickname[victim] );
  2271.                     client_cmd( 0, "spk %s", g_szSound[GODLIKE] );
  2272.                    
  2273.                     new origin[3];
  2274.                     get_user_origin(victim, origin);
  2275.                     blood_effects(origin);
  2276.                                    
  2277.                     cs_set_user_money(attacker, g_iPoints[attacker] += get_pcvar_num(km_tokens_godlike), 1);
  2278.                     SaveData(attacker);
  2279.                                            
  2280.                 }
  2281.                 else if( (distance/modMeter) >= get_pcvar_float( g_pCVarSoundWickedSickStab ))
  2282.                 {
  2283.                     fnColorPrint( 0, "^4 %s ^1has made a WickedSick %s-stab kill on^3 %s^1!",\
  2284.                         g_szNickname[attacker],\
  2285.                         g_szHitgroup[g_HitData[iHitgroup]],\
  2286.                         g_szNickname[victim] );
  2287.                     client_cmd( 0, "spk %s", g_szSound[WICKEDSICK] );
  2288.                    
  2289.                     new origin[3];
  2290.                     get_user_origin(victim, origin);
  2291.                     blood_effects(origin);
  2292.                    
  2293.                     cs_set_user_money(attacker, g_iPoints[attacker] += get_pcvar_num(km_tokens_wickedsick), 1);
  2294.                     SaveData(attacker);
  2295.                 }
  2296.             }
  2297.         }
  2298.         else
  2299.         {
  2300.             show_hudmessage( attacker, "Slash Stats (%s)^nDistance: %.3f meter (max: 1.5)^nHit: %s (%s)^nDamage: %i"\
  2301.                 , g_szTraceType[TraceType:!g_HitData[iHitgroup]],\
  2302.                 (distance/modMeter), g_szNickname[victim],\
  2303.                 g_szHitgroup[g_HitData[iHitgroup]], pev( victim, pev_dmg_take ) );
  2304.            
  2305.             if( health < 0.0 )
  2306.             {
  2307.                 fnColorPrint( 0, "^4%s ^1slashed^3 %s ^1from^4 %.3f ^1meter ^3(%s)!",\
  2308.                     g_szNickname[attacker],\
  2309.                     g_szNickname[victim],\
  2310.                     (distance/modMeter), g_szHitgroup[g_HitData[iHitgroup]] );
  2311.                        
  2312.                 if( (distance/modMeter) >= get_pcvar_float( g_pCVarSoundGodlikeSlash ) )
  2313.                 {
  2314.                     fnColorPrint( 0, "^4 %s ^1made a GodLike %s-slash kill on^3 %s^1!",\
  2315.                         g_szNickname[attacker],\
  2316.                         g_szHitgroup[g_HitData[iHitgroup]],\
  2317.                         g_szNickname[victim] );
  2318.                     client_cmd( 0, "spk %s", g_szSound[GODLIKE] );
  2319.                    
  2320.                     new origin[3];
  2321.                     get_user_origin(victim, origin);
  2322.                     blood_effects(origin);
  2323.                    
  2324.                     cs_set_user_money(attacker, g_iPoints[attacker] += get_pcvar_num(km_tokens_godlike), 1);
  2325.                     SaveData(attacker);
  2326.                 }
  2327.                 else if( (distance/modMeter) >= get_pcvar_float( g_pCVarSoundWickedSickSlash ) )
  2328.                 {
  2329.                     fnColorPrint( 0, "^4 %s ^1has made a WickedSick %s-slash kill on^3 %s^1!",\
  2330.                         g_szNickname[attacker],\
  2331.                         g_szHitgroup[g_HitData[iHitgroup]],\
  2332.                         g_szNickname[victim] );
  2333.                     client_cmd( 0, "spk %s", g_szSound[WICKEDSICK] );
  2334.                    
  2335.                     new origin[3];
  2336.                     get_user_origin(victim, origin);
  2337.                     blood_effects(origin);
  2338.                    
  2339.                     cs_set_user_money(attacker, g_iPoints[attacker] += get_pcvar_num(km_tokens_wickedsick), 1);
  2340.                     SaveData(attacker);
  2341.                 }
  2342.             }
  2343.         }
  2344.     }
  2345.    
  2346.     return PLUGIN_CONTINUE;
  2347. }
  2348.  
  2349. public Fwd_PlayerKilled_Pre(victim, attacker)
  2350. {
  2351.     if (is_user_connected(attacker) && is_user_alive(attacker) )
  2352.     {
  2353.         if(g_bHeadShot[attacker][victim])
  2354.         {
  2355.             g_bHeadShot[attacker][victim] = false;
  2356.             g_iPoints[attacker] += get_pcvar_num(km_tokens_hskill) ;
  2357.             cs_set_user_money(attacker, g_iPoints[attacker], 1);
  2358.         }
  2359.         else
  2360.         {
  2361.             g_iPoints[attacker] += get_pcvar_num(km_tokens_kill);
  2362.             cs_set_user_money(attacker, g_iPoints[attacker], 1);
  2363.         }
  2364.         SaveData(attacker);
  2365.     }
  2366.    
  2367.     if(get_bit(g_bHasBhop, victim))
  2368.         clear_bit(g_bHasBhop, victim);
  2369.     if(get_bit(g_bHasLeap, victim))
  2370.         clear_bit(g_bHasLeap, victim);
  2371.     if(get_bit(g_bHasNadePack, victim) )
  2372.     {
  2373.         clear_bit(g_bHasNadePack, victim);
  2374.     }
  2375.     if(get_bit(g_bHasLowGravity, victim))
  2376.         clear_bit(g_bHasLowGravity, victim);
  2377.     if(get_bit(g_bHasSpeed, victim))
  2378.         clear_bit(g_bHasSpeed, victim);
  2379.        
  2380. }      
  2381.  
  2382. public Check_Alive(id)
  2383. {
  2384.     g_bAlive[id] = bool:is_user_alive(id);
  2385. }
  2386.  
  2387. public fwd_Knife_PriAtk_Post(ent)
  2388. {
  2389.     if(get_bit(g_bHasEndur, ent) )
  2390.     {
  2391.         static Float:Speed, Float:Primary, Float:Secondary;
  2392.         Speed = get_pcvar_float(km_val_permendurance);
  2393.         Primary = get_pdata_float(ent, m_flNextPrimaryAttack, OFFSET_LINUX_WEAPONS) * Speed;
  2394.         Secondary = get_pdata_float(ent, m_flNextSecondaryAttack, OFFSET_LINUX_WEAPONS) * Speed;
  2395.    
  2396.         set_pdata_float(ent, m_flNextPrimaryAttack, Primary, OFFSET_LINUX_WEAPONS);
  2397.         set_pdata_float(ent, m_flNextSecondaryAttack, Secondary, OFFSET_LINUX_WEAPONS);
  2398.        
  2399.     }
  2400.     return HAM_IGNORED;
  2401. }
  2402.  
  2403. public fwd_Knife_SecAtk_Post(ent)
  2404. {
  2405.     if(get_bit(g_bHasEndur, ent) )
  2406.     {
  2407.         static Float:Speed, Float:Primary, Float:Secondary;
  2408.         Speed = get_pcvar_float(km_val_permendurance);
  2409.         Primary = get_pdata_float(ent, m_flNextPrimaryAttack, OFFSET_LINUX_WEAPONS) * Speed;
  2410.         Secondary = get_pdata_float(ent, m_flNextSecondaryAttack, OFFSET_LINUX_WEAPONS) * Speed;
  2411.    
  2412.         set_pdata_float(ent, m_flNextPrimaryAttack, Primary, OFFSET_LINUX_WEAPONS);
  2413.         set_pdata_float(ent, m_flNextSecondaryAttack, Secondary, OFFSET_LINUX_WEAPONS);    
  2414.     }
  2415.     return HAM_IGNORED;
  2416. }
  2417.  
  2418. public Player_Jump(id)
  2419. {
  2420.     if( !g_bAlive[id] )
  2421.     {
  2422.         return;
  2423.     }
  2424.    
  2425.     if(!get_bit(g_bHasBhop, id) )
  2426.     {
  2427.         return;
  2428.     }
  2429.    
  2430.     static iBhopStyle ; iBhopStyle = get_pcvar_num(g_pcvarBhopStyle);
  2431.     if(!iBhopStyle)
  2432.     {
  2433.         static iOldButtons ; iOldButtons = pev(id, pev_oldbuttons);
  2434.         if( (get_pcvar_num(g_pcvarAutoBhop) || g_bAutoBhop[id]) && iOldButtons & IN_JUMP && pev(id, pev_flags) & FL_ONGROUND)
  2435.         {
  2436.             iOldButtons &= ~IN_JUMP;
  2437.             set_pev(id, pev_oldbuttons, iOldButtons);
  2438.             set_pev(id, pev_gaitsequence, PLAYER_JUMP);
  2439.             set_pev(id, pev_frame, 0.0);
  2440.             return;
  2441.         }
  2442.         return;
  2443.     }
  2444.  
  2445.     if( g_iCdWaterJumpTime[id] )
  2446.     {
  2447.         client_print(id, print_center, "Water Jump !!!");
  2448.         return;
  2449.     }
  2450.  
  2451.     if( pev(id, pev_waterlevel) >= 2 )
  2452.     {
  2453.         return;
  2454.     }
  2455.  
  2456.     static iFlags ; iFlags = pev(id, pev_flags);
  2457.     if( !(iFlags & FL_ONGROUND) )
  2458.     {
  2459.         return;
  2460.     }
  2461.  
  2462.     static iOldButtons ; iOldButtons = pev(id, pev_oldbuttons);
  2463.     if( !get_pcvar_num(g_pcvarAutoBhop) && !g_bAutoBhop[id] && iOldButtons & IN_JUMP )
  2464.     {
  2465.         return;
  2466.     }
  2467.  
  2468.     // prevent the game from making the player jump
  2469.     // as supercede this forward just fails
  2470.     set_pev(id, pev_oldbuttons, iOldButtons | IN_JUMP);
  2471.  
  2472.     static Float:fVelocity[3];
  2473.     pev(id, pev_velocity, fVelocity);
  2474.  
  2475.     if(iBhopStyle == 1)
  2476.     {
  2477.         static Float:fMaxScaledSpeed;
  2478.         pev(id, pev_maxspeed, fMaxScaledSpeed);
  2479.         if(fMaxScaledSpeed > 0.0)
  2480.         {
  2481.             fMaxScaledSpeed *= BUNNYJUMP_MAX_SPEED_FACTOR;
  2482.             static Float:fSpeed;
  2483.             fSpeed = floatsqroot(fVelocity[0]*fVelocity[0] + fVelocity[1]*fVelocity[1] + fVelocity[2]*fVelocity[2]);
  2484.             if(fSpeed > fMaxScaledSpeed)
  2485.             {
  2486.                 static Float:fFraction;
  2487.                 fFraction = ( fMaxScaledSpeed / fSpeed ) * 0.65;
  2488.                 fVelocity[0] *= fFraction;
  2489.                 fVelocity[1] *= fFraction;
  2490.                 fVelocity[2] *= fFraction;
  2491.             }
  2492.         }
  2493.     }
  2494.  
  2495.     static Float:fFrameTime, Float:fPlayerGravity;
  2496.     global_get(glb_frametime, fFrameTime);
  2497.     pev(id, pev_gravity, fPlayerGravity);
  2498.  
  2499.     new iLJ;
  2500.     if( (pev(id, pev_bInDuck) || iFlags & FL_DUCKING)
  2501.     &&  get_pdata_int(id, OFFSET_CAN_LONGJUMP)
  2502.     &&  pev(id, pev_button) & IN_DUCK
  2503.     &&  pev(id, pev_flDuckTime) )
  2504.     {
  2505.         static Float:fPunchAngle[3], Float:fForward[3];
  2506.         pev(id, pev_punchangle, fPunchAngle);
  2507.         fPunchAngle[0] = -5.0;
  2508.         set_pev(id, pev_punchangle, fPunchAngle);
  2509.         global_get(glb_v_forward, fForward);
  2510.  
  2511.         fVelocity[0] = fForward[0] * 560;
  2512.         fVelocity[1] = fForward[1] * 560;
  2513.         fVelocity[2] = 299.33259094191531084669989858532;
  2514.         iLJ = 1;
  2515.     }
  2516.     else
  2517.     {
  2518.         fVelocity[2] = 268.32815729997476356910084024775;
  2519.     }
  2520.  
  2521.     fVelocity[2] -= fPlayerGravity * fFrameTime * 0.5 * get_pcvar_num(g_pcvarGravity);
  2522.  
  2523.     set_pev(id, pev_velocity, fVelocity);
  2524.  
  2525.     set_pev(id, pev_gaitsequence, PLAYER_JUMP+iLJ);
  2526.     set_pev(id, pev_frame, 0.0);
  2527. }
  2528.  
  2529. public UpdateClientData(id, sendweapons, cd_handle)
  2530. {
  2531.     if(get_bit(g_bHasBhop, id) )
  2532.     {
  2533.         g_iCdWaterJumpTime[id] = get_cd(cd_handle, CD_WaterJumpTime);
  2534.     }
  2535. }
  2536.  
  2537. public fw_PlayerPreThink(id)
  2538. {
  2539.     // Not alive
  2540.     if (!is_user_alive(id))
  2541.         return;
  2542.        
  2543.     // Don't allow leap if player is frozen (e.g. freezetime)
  2544.     if (get_user_maxspeed(id) == 1.0 || !get_bit(g_bHasLeap, id) )
  2545.         return;
  2546.    
  2547.     static Float:cooldown, force, Float:height;
  2548.    
  2549.     if(get_bit(g_bHasLeap, id) ) {
  2550.         cooldown = get_pcvar_float(km_leap_cooldown);
  2551.         force = get_pcvar_num(km_leap_force);
  2552.         height = get_pcvar_float(km_leap_height);
  2553.     }
  2554.    
  2555.     static Float:current_time;
  2556.     current_time = get_gametime();
  2557.    
  2558.     // Cooldown not over yet
  2559.     if (current_time - g_LeapLastTime[id] < cooldown)
  2560.         return;
  2561.    
  2562.     // Not doing a longjump (don't perform check for bots, they leap automatically)
  2563.     if (!is_user_bot(id) && !(pev(id, pev_button) & (IN_JUMP | IN_DUCK) == (IN_JUMP | IN_DUCK)))
  2564.         return;
  2565.    
  2566.     // Not on ground or not enough speed
  2567.     if (!(pev(id, pev_flags) & FL_ONGROUND) || fm_get_speed(id) < 80)
  2568.         return;
  2569.    
  2570.     static Float:velocity[3];
  2571.    
  2572.     // Make velocity vector
  2573.     velocity_by_aim(id, force, velocity);
  2574.    
  2575.     // Set custom height
  2576.     velocity[2] = height;
  2577.    
  2578.     // Apply the new velocity
  2579.     set_pev(id, pev_velocity, velocity);
  2580.    
  2581.     // Update last leap time
  2582.     g_LeapLastTime[id] = current_time;
  2583. }
  2584.  
  2585. // Get entity's speed (from fakemeta_util)
  2586. stock fm_get_speed(entity)
  2587. {
  2588.     static Float:velocity[3];
  2589.     pev(entity, pev_velocity, velocity);
  2590.    
  2591.     return floatround(vector_length(velocity));
  2592. }
  2593.  
  2594. public client_disconnect(id)
  2595. {
  2596.     SaveData(id);
  2597.     savebits(id);
  2598. }
  2599.  
  2600. public EventMoney(id) {
  2601.     cs_set_user_money(id, g_iPoints[id], 1);
  2602. }
  2603.  
  2604. public AdminCmd_Bhop(id, level, cid)
  2605. {
  2606.     if(!cmd_access(id, level, cid, 2) )
  2607.     {
  2608.         return PLUGIN_HANDLED;
  2609.     }
  2610.  
  2611.     new szPlayer[32];
  2612.     read_argv(1, szPlayer, 31);
  2613.     new iPlayer = cmd_target(id, szPlayer, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ALLOW_SELF | CMDTARGET_NO_BOTS);
  2614.  
  2615.     if( !iPlayer )
  2616.     {
  2617.         return PLUGIN_HANDLED;
  2618.     }
  2619.  
  2620.     if( read_argc() < 3 )
  2621.     {
  2622.         g_bAutoBhop[iPlayer] = !g_bAutoBhop[iPlayer];
  2623.     }
  2624.     else
  2625.     {
  2626.         new arg2[2];
  2627.         read_argv(2, arg2, 1);
  2628.         if(arg2[0] == '1' && !g_bAutoBhop[iPlayer])
  2629.         {
  2630.             g_bAutoBhop[iPlayer] = true;
  2631.         }
  2632.         else if(arg2[0] == '0' && g_bAutoBhop[iPlayer])
  2633.         {
  2634.             g_bAutoBhop[iPlayer] = false;
  2635.         }
  2636.     }
  2637.  
  2638.     client_print(id, print_console, "Player %s autobhop is currently : %s", szPlayer, g_bAutoBhop[iPlayer] ? "On" : "Off");
  2639.     return PLUGIN_HANDLED;
  2640. }
  2641.  
  2642. /*================================================================================
  2643.  [Give/Take Tokens]
  2644. =================================================================================*/
  2645. public cmd_give_tokens(id,level,cid)
  2646. {
  2647.     if(!cmd_access(id,level,cid,3))
  2648.         return PLUGIN_HANDLED;
  2649.  
  2650.     new target[32], amount[21];
  2651.  
  2652.     read_argv(1, target, 31 );
  2653.     read_argv(2, amount, 20 );
  2654.  
  2655.     new player = cmd_target( id, target, 8 );
  2656.  
  2657.     if(!player)
  2658.         return PLUGIN_HANDLED;
  2659.  
  2660.     new admin_name[32]; get_user_name(id, admin_name, charsmax(admin_name));
  2661.     new player_name[32]; get_user_name(player, player_name, charsmax(player_name));
  2662.     new pointnum = str_to_num(amount);
  2663.    
  2664.     g_iPoints[player] += pointnum;
  2665.     cs_set_user_money(player, g_iPoints[player], 1);
  2666.  
  2667.     switch(get_cvar_num ("amx_show_activity"))
  2668.     {
  2669.         case 1: fnColorPrint( 0, "ADMIN %s gave %i tokens to %s.", admin_name, pointnum, player_name);
  2670.         case 2: fnColorPrint( 0, "ADMIN %s gave %i tokens to %s.", admin_name, pointnum, player_name);
  2671.     }
  2672.    
  2673.     fnColorPrint(player, "You received %i tokens.(Total: %i)", pointnum, g_iPoints[player]);
  2674.     SaveData(id);
  2675.  
  2676.     return PLUGIN_HANDLED;
  2677. }
  2678.  
  2679. public cmd_take_tokens(id,level,cid)
  2680. {
  2681.     if(!cmd_access (id, level, cid, 2))
  2682.         return PLUGIN_HANDLED;
  2683.  
  2684.     new target[32], amount[21];
  2685.  
  2686.     read_argv( 1, target, 31 );
  2687.     read_argv( 2, amount, 20 );
  2688.  
  2689.     new player = cmd_target( id, target, 8 );
  2690.  
  2691.     if(!player)
  2692.         return PLUGIN_HANDLED;
  2693.  
  2694.     new admin_name[32]; get_user_name(id, admin_name, charsmax(admin_name));
  2695.     new player_name[32]; get_user_name(player, player_name, charsmax(player_name));
  2696.    
  2697.     new pointnum = str_to_num( amount );
  2698.    
  2699.     if(g_iPoints[player] < pointnum)
  2700.     {
  2701.         fnColorPrint( id, "you can't take away more the he has (%i)", g_iPoints[player]);
  2702.         console_print( id, "you can't take away more the he has (%i)", g_iPoints[player]);
  2703.         return PLUGIN_HANDLED;
  2704.     }
  2705.    
  2706.     g_iPoints[player] -= pointnum;
  2707.     cs_set_user_money(player, g_iPoints[player], 1);
  2708.    
  2709.     switch(get_cvar_num("amx_show_activity"))
  2710.     {
  2711.         case 1: fnColorPrint( 0, "ADMIN %s took %i tokens from %s.", admin_name, pointnum, player_name);
  2712.         case 2: fnColorPrint( 0, "ADMIN %s took %i tokens from %s.", admin_name, pointnum, player_name);
  2713.     }
  2714.    
  2715.     fnColorPrint( player, "You lost %i tokens. (Total: %i)", pointnum, g_iPoints[player]);
  2716.  
  2717.     SaveData(id);
  2718.  
  2719.     return PLUGIN_HANDLED;
  2720. }
  2721.  
  2722. public cmd_reset_tokens(id,level,cid)
  2723. {
  2724.     if(!cmd_access(id,level,cid,2))
  2725.         return PLUGIN_HANDLED;
  2726.        
  2727.     new target[32];
  2728.  
  2729.     read_argv(1, target, 31);
  2730.  
  2731.     new player = cmd_target(id, target, 8);
  2732.  
  2733.     if(!player)
  2734.         return PLUGIN_HANDLED;
  2735.  
  2736.     new admin_name[32]; get_user_name(id, admin_name, charsmax(admin_name));
  2737.     new player_name[32]; get_user_name(player, player_name, charsmax(player_name));
  2738.     g_iPoints[player] = 0;
  2739.     cs_set_user_money(player, g_iPoints[player], 1);
  2740.  
  2741.     switch(get_cvar_num ("amx_show_activity"))
  2742.     {
  2743.         case 1: fnColorPrint( 0, "ADMIN %s has reset %s's tokens.", admin_name, player_name);
  2744.         case 2: fnColorPrint( 0, "ADMIN %s has reset %s's tokens.", admin_name, player_name);
  2745.     }
  2746.    
  2747.     fnColorPrint(player, "Your tokens have been reset.");
  2748.  
  2749.     SaveData(id);
  2750.  
  2751.     return PLUGIN_HANDLED;
  2752. }
  2753.  
  2754. /*================================================================================
  2755.  [Save/Load tokens]
  2756. =================================================================================*/
  2757. public SaveData(id)
  2758. {  
  2759.     new vKey[32], vData[32];
  2760.     //Save their tokens  
  2761.     #if defined SAVE_METHOD_NICK
  2762.     formatex(vKey, 31, "%s-tokens", g_iAuth[id]);  
  2763.     #endif
  2764.     #if defined SAVE_METHOD_IP
  2765.     formatex(vKey, 31, "%s-tokens", g_iAuthIP[id]);
  2766.     #endif
  2767.     #if defined SAVE_METHOD_ID
  2768.     formatex(vKey, 31, "%s-tokens", g_iAuthID[id]);  
  2769.     #endif
  2770.    
  2771.     formatex(vData, 31, "%i", g_iPoints[id]);
  2772.     nvault_set(g_vault, vKey , vData);
  2773. }
  2774.  
  2775. public GetData(id)
  2776. {  
  2777.     new szKey[32];
  2778.     #if defined SAVE_METHOD_NICK
  2779.     formatex(szKey, 31, "%s-tokens", g_iAuth[id]);  
  2780.     #endif
  2781.     #if defined SAVE_METHOD_IP
  2782.     formatex(szKey, 31, "%s-tokens", g_iAuthIP[id]);  
  2783.     #endif
  2784.     #if defined SAVE_METHOD_ID
  2785.     formatex(szKey, 31, "%s-tokens", g_iAuthID[id]);
  2786.     #endif
  2787.     g_iPoints[id] = nvault_get( g_vault , szKey );
  2788. }
  2789.  
  2790. public SaveKnife(id)
  2791. {
  2792.     new authid[32];
  2793.     get_user_authid(id, authid, 31);
  2794.  
  2795.     new vaultkey[64];
  2796.     new vaultdata[64];
  2797.  
  2798.     format(vaultkey, 63, "KMOD_%s", authid);
  2799.     format(vaultdata, 63, "%d", knife_model[id]);
  2800.     set_vaultdata(vaultkey, vaultdata);
  2801. }
  2802.  
  2803. public LoadKnife(id)
  2804. {
  2805.     new authid[32];
  2806.     get_user_authid(id,authid,31);
  2807.  
  2808.     new vaultkey[64], vaultdata[64];
  2809.  
  2810.     format(vaultkey, 63, "KMOD_%s", authid);
  2811.     get_vaultdata(vaultkey, vaultdata, 63);
  2812.     knife_model[id] = str_to_num(vaultdata);
  2813.  
  2814. }
  2815.  
  2816. public savebits(id)
  2817. {
  2818.     new steamID[35];
  2819.     get_user_authid( id , steamID , charsmax( steamID ) );
  2820.    
  2821.     new data[64];
  2822.     formatex(data, charsmax(data), "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d",
  2823.         !!get_bit(g_bHasPermVital, id),
  2824.         !!get_bit(g_bHasEndur, id),
  2825.         !!get_bit(g_bHasPermGrav, id),
  2826.         !!get_bit(g_bHasPermSpeed, id),
  2827.         !!get_bit(g_bHasPermInvis, id),
  2828.         !!get_bit(g_bHasSkin1, id),
  2829.         !!get_bit(g_bHasSkin2, id),
  2830.         !!get_bit(g_bHasSkin3, id),
  2831.         !!get_bit(g_bHasSkin4, id),
  2832.         !!get_bit(g_bHasSkin5, id),
  2833.         !!get_bit(g_bHasKnifeSkin1, id),
  2834.         !!get_bit(g_bHasKnifeSkin2, id),
  2835.         !!get_bit(g_bHasKnifeSkin3, id),
  2836.         !!get_bit(g_bHasKnifeSkin4, id),
  2837.         !!get_bit(g_bChoseKnifeSkin1, id),
  2838.         !!get_bit(g_bChoseKnifeSkin2, id),
  2839.         !!get_bit(g_bChoseKnifeSkin3, id),
  2840.         !!get_bit(g_bChoseKnifeSkin4, id),
  2841.         !!get_bit(g_bHasSkin6, id),
  2842.         !!get_bit(g_bHasSkin7, id),
  2843.         !!get_bit(g_bChoseSkin1, id),
  2844.         !!get_bit(g_bChoseSkin2, id),
  2845.         !!get_bit(g_bChoseSkin3, id),
  2846.         !!get_bit(g_bChoseSkin4, id),
  2847.         !!get_bit(g_bChoseSkin5, id),
  2848.         !!get_bit(g_bChoseSkin6, id),
  2849.         !!get_bit(g_bChoseSkin7, id)
  2850.     );
  2851.     nvault_set(bitvault, steamID, data);
  2852. }
  2853.  
  2854. public loadbits(id)
  2855. {
  2856.     new steamID[35];
  2857.     get_user_authid( id , steamID , charsmax( steamID ) );
  2858.    
  2859.     new data[64];
  2860.     new bits[27][2];
  2861.     new timestamp;
  2862.     if(nvault_lookup(bitvault, steamID, data, charsmax(data), timestamp))
  2863.     {
  2864.         parse(data,
  2865.         bits[0], charsmax(bits[]),
  2866.             bits[1], charsmax(bits[]),
  2867.             bits[2], charsmax(bits[]),
  2868.             bits[3], charsmax(bits[]),
  2869.             bits[4], charsmax(bits[]),
  2870.         bits[5], charsmax(bits[]),
  2871.         bits[6], charsmax(bits[]),
  2872.         bits[7], charsmax(bits[]),
  2873.         bits[8], charsmax(bits[]),
  2874.             bits[9], charsmax(bits[]),
  2875.             bits[10], charsmax(bits[]),
  2876.             bits[11], charsmax(bits[]),
  2877.             bits[12], charsmax(bits[]),
  2878.         bits[13], charsmax(bits[]),
  2879.             bits[14], charsmax(bits[]),
  2880.             bits[15], charsmax(bits[]),
  2881.             bits[16], charsmax(bits[]),
  2882.             bits[17], charsmax(bits[]),
  2883.         bits[18], charsmax(bits[]),
  2884.         bits[19], charsmax(bits[]),
  2885.         bits[20], charsmax(bits[]),
  2886.             bits[21], charsmax(bits[]),
  2887.             bits[22], charsmax(bits[]),
  2888.             bits[23], charsmax(bits[]),
  2889.             bits[24], charsmax(bits[]),
  2890.         bits[25], charsmax(bits[]),
  2891.         bits[26], charsmax(bits[])
  2892.         );
  2893.        
  2894.         if(bits[0][0] == '1') set_bit(g_bHasPermVital, id);
  2895.         if(bits[1][0] == '1') set_bit(g_bHasEndur, id);
  2896.         if(bits[2][0] == '1') set_bit(g_bHasPermGrav, id);
  2897.         if(bits[3][0] == '1') set_bit(g_bHasPermSpeed, id);
  2898.         if(bits[4][0] == '1') set_bit(g_bHasPermInvis, id);
  2899.     if(bits[5][0] == '1') set_bit(g_bHasSkin1, id);
  2900.     if(bits[6][0] == '1') set_bit(g_bHasSkin2, id);
  2901.     if(bits[7][0] == '1') set_bit(g_bHasSkin3, id);
  2902.     if(bits[8][0] == '1') set_bit(g_bHasSkin4, id);
  2903.         if(bits[9][0] == '1') set_bit(g_bHasSkin5, id);
  2904.         if(bits[10][0] == '1') set_bit(g_bHasKnifeSkin1, id);
  2905.         if(bits[11][0] == '1') set_bit(g_bHasKnifeSkin2, id);
  2906.         if(bits[12][0] == '1') set_bit(g_bHasKnifeSkin3, id);
  2907.     if(bits[13][0] == '1') set_bit(g_bHasKnifeSkin4, id);
  2908.         if(bits[14][0] == '1') set_bit(g_bChoseKnifeSkin1, id);
  2909.         if(bits[15][0] == '1') set_bit(g_bChoseKnifeSkin2, id);
  2910.         if(bits[16][0] == '1') set_bit(g_bChoseKnifeSkin3, id);
  2911.         if(bits[17][0] == '1') set_bit(g_bChoseKnifeSkin4, id);
  2912.     if(bits[18][0] == '1') set_bit(g_bHasSkin6, id);
  2913.     if(bits[19][0] == '1') set_bit(g_bHasSkin7, id);
  2914.     if(bits[20][0] == '1') set_bit(g_bChoseSkin1, id);
  2915.     if(bits[21][0] == '1') set_bit(g_bChoseSkin2, id);
  2916.     if(bits[22][0] == '1') set_bit(g_bChoseSkin3, id);
  2917.     if(bits[23][0] == '1') set_bit(g_bChoseSkin4, id);
  2918.     if(bits[24][0] == '1') set_bit(g_bChoseSkin5, id);
  2919.     if(bits[25][0] == '1') set_bit(g_bChoseSkin6, id);
  2920.     if(bits[26][0] == '1') set_bit(g_bChoseSkin7, id);
  2921.     }
  2922. }
  2923.  
  2924. stock blood_effects(origin[3])
  2925. {
  2926.     message_begin(MSG_PVS, SVC_TEMPENTITY, origin);
  2927.     write_byte(TE_BLOODSPRITE);
  2928.     write_coord(origin[0]);
  2929.     write_coord(origin[1]);
  2930.     write_coord(origin[2]+20);
  2931.     write_short(g_iSpray);
  2932.     write_short(g_iDrop);
  2933.     write_byte(248);
  2934.     write_byte(30);
  2935.     message_end();
  2936.    
  2937.     message_begin(MSG_PVS, SVC_TEMPENTITY, origin);
  2938.     write_byte(TE_BLOODSTREAM);
  2939.     write_coord(origin[0]);
  2940.     write_coord(origin[1]);
  2941.     write_coord(origin[2]+30);
  2942.     write_coord(random_num(-20, 20));
  2943.     write_coord(random_num(-20, 20));
  2944.     write_coord(random_num(50, 300));
  2945.     write_byte(70);
  2946.     write_byte(random_num(100, 200));
  2947.     message_end();
  2948.    
  2949.     message_begin(MSG_PVS, SVC_TEMPENTITY, origin);
  2950.     write_byte(TE_PARTICLEBURST);
  2951.     write_coord(origin[0]);
  2952.     write_coord(origin[1]);
  2953.     write_coord(origin[2]);
  2954.     write_short(50);
  2955.     write_byte(70);
  2956.     write_byte(3);
  2957.     message_end();
  2958.    
  2959.     message_begin(MSG_PVS, SVC_TEMPENTITY, origin);
  2960.     write_byte(TE_BLOODSTREAM);
  2961.     write_coord(origin[0]);
  2962.     write_coord(origin[1]);
  2963.     write_coord(origin[2]+10);
  2964.     write_coord(random_num(-360, 360));
  2965.     write_coord(random_num(-360, 360));
  2966.     write_coord(-10);
  2967.     write_byte(70);
  2968.     write_byte(random_num(50, 100));
  2969.     message_end();
  2970. }
  2971.  
  2972. stock fnColorPrint(index, const Msg[], any:...) {
  2973.     new Buffer[190], Buffer2[192];
  2974.     formatex(Buffer2, charsmax(Buffer2), "^x04[%s] ^x01%s", g_szPluginPrefix, Msg);
  2975.     vformat(Buffer, charsmax(Buffer), Buffer2, 3);
  2976.  
  2977.     if (!index) {
  2978.         for (new i = 1; i <= g_iMaxPlayers; i++) {
  2979.             if (!is_user_connected(i))
  2980.                 continue;
  2981.  
  2982.             message_begin(MSG_ONE_UNRELIABLE, g_iMsgSayText,_, i);
  2983.             write_byte(i);
  2984.             write_string(Buffer);
  2985.             message_end();
  2986.         }
  2987.     }
  2988.     else {
  2989.         if (!is_user_connected(index))
  2990.             return;
  2991.  
  2992.         message_begin(MSG_ONE, g_iMsgSayText,_, index);
  2993.         write_byte(index);
  2994.         write_string(Buffer);
  2995.         message_end();
  2996.     }
  2997. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement