MegastoRM

COD: Black Ops mod.

Dec 27th, 2012
1,357
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 58.91 KB | None | 0 0
  1. /*
  2.     Call of Duty: Black Ops mod
  3.    
  4.     ****CREDITS****
  5.  
  6.  
  7.     OvidiuS - for his help and support
  8.    
  9.     Dozvoljena je svaka vrsta modifikovanja ovog plugina,
  10.     samo bih vas molio da ne menjate autora,i da ga ne prodajete.
  11. */
  12.  
  13. #include < amxmodx >
  14. #include < hamsandwich >
  15. #include < fakemeta >
  16. #include < engine >
  17. #include < nvault >
  18. #include < cod_bo >
  19.  
  20. #define max_level 20000
  21. #define HUD 672
  22.  
  23. #define TASKID 673
  24. #define TASKID2 676
  25. #define TASKID_UNDRUG 674
  26. #define TASK_SCAVENGER 1256
  27. #define TASK_ITEMID 1264
  28. #define fm_create_entity(%1) engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, %1))
  29. #define is_user_valid(%1) (1 <= %1 <= g_MaxPlayers)
  30. #define fm_drop_to_floor(%1) engfunc(EngFunc_DropToFloor,%1)
  31. #define fm_remove_entity(%1) engfunc(EngFunc_RemoveEntity, %1)
  32. #define fm_dispatchspawn(%1) dllfunc(DLLFunc_Spawn, %1)
  33. #define SYS_DATA ) ;
  34. #define FRAG_GRENADE 1111
  35. #define SEMTEX_GRENADE 2222
  36. #define FLASHBANG_TASK 12321
  37. #define CS_FIRST_ZOOM       0x28
  38. #define CS_SECOND_AWP_ZOOM  0xA
  39. #define CS_NO_ZOOM      0x5A
  40.  
  41. new const Ranks[][]=
  42. {
  43.     "Razvodnik",
  44.     "Desetar",
  45.     "Mladji vodnik",
  46.     "Vodnik",
  47.     "Stariji vodnik",
  48.     "Stariji vodnik I",
  49.     "Zastavnik",
  50.     "Zastavnik I",
  51.     "Potporucnik",
  52.     "Porucnik",
  53.     "Kapetan",
  54.     "Major",
  55.     "Potpukovnik",
  56.     "Pukovnik",
  57.     "Brigadni General",
  58.     "General-Major",
  59.     "General-Potpukovnik",
  60.     "General"
  61. }
  62.  
  63. new const ClassNames[ ][ ] = {
  64.     "-",
  65.     "Spetsnaz",
  66.     "Commandos",
  67.     "Agent 47",
  68.     "Camper",
  69.     "Delta squad",
  70.     "F.B.I",
  71.     "S.W.A.T.",
  72.     "Hitman",
  73.     "Marine",
  74.     "Support",
  75.     "\yDestroyer\r[VIP]\w",
  76.     "\yRiot Shield\r[VIP]\w",
  77.     "\yArcher\r[VIP]\w",
  78.     "\yFlamethrower\r[VIP]\w"
  79. }
  80.  
  81.  
  82. new frakcije[][]={
  83.     "Nema",
  84.     "\r[\wFree\r]\w Classes",
  85.     "\r[\yVIP\r]\w Classes"
  86. }
  87.  
  88. enum { NONE = 0,free,prem}
  89. new const ako_pripada[]={
  90.     NONE,
  91.     free,
  92.     free,
  93.     free,
  94.     free,
  95.     free,
  96.     free,
  97.     free,
  98.     free,
  99.     free,
  100.     free,
  101.     prem,
  102.     prem,
  103.     prem,
  104.     prem
  105.    
  106. }
  107.  
  108. new frakcija_igraca[33]
  109.  
  110. new const ClassDesc[ ][ ] =
  111. {
  112.     "-",
  113.     "\y[AK+Deagle]",
  114.     "\y[M4+Deagle]",
  115.     "\y[AWP+P228]",
  116.     "\y[Scout+Fiveseven]",
  117.     "\y[Galil+Deagle]",
  118.     "\y[Famas+p228]",
  119.     "\y[SG552+Deagle]",
  120.     "\y[SG550+Fiveseven]",
  121.     "\y[MAC10+Deagle]",
  122.     "\y[MP5+Deagle]",
  123.     "\y[Deathmachine]",
  124.     "\y[Shield+Double Dmg]",
  125.     "\y[Crossbow]",
  126.     "\y[NOT FINISHED]"
  127. }
  128.  
  129. new const PerkNames[ ][ ] = {
  130.     "-", "Scavenger", "Last stand[Nedovrseno]", "Marksman Pro", "Recon", "Sleight of a hand", "Lightweight", "One Man Army" }
  131.    
  132. new const PerkDesc[ ][ ] = {
  133.     "-",
  134.     "You can resupply from dead friends/enemies",
  135.     "You get extra life",
  136.     "You have reduced recoil",
  137.     "110% damage",
  138.     "You reload your weapons faster",
  139.     "Your gravity is lower,also fall damage is lower",
  140.     "Your ammo is getting full after each reload"
  141. }
  142.  
  143. new const ClassWeapons[ ][ ] =
  144. {
  145.     "",             "weapon_ak47",
  146.     "weapon_m4a1",      "weapon_awp",
  147.     "weapon_scout",     "weapon_galil",
  148.     "weapon_famas",     "weapon_sg552",
  149.     "weapon_sg550",     "weapon_mac10",
  150.     "weapon_mp5navy",   "",
  151.     "weapon_shield",    "",
  152.     ""
  153. }
  154.  
  155. new const ClassSecondary[ ][ ] =
  156. {
  157.     "",            
  158.     "weapon_deagle",
  159.     "weapon_deagle",   
  160.     "weapon_p228",
  161.     "weapon_fiveseven",
  162.     "weapon_deagle",
  163.     "weapon_p228",  
  164.     "weapon_deagle",
  165.     "weapon_fiveseven",    
  166.     "weapon_deagle",
  167.     "weapon_deagle",   
  168.     "weapon_p228",
  169.     "weapon_fiveseven",
  170.     "weapon_deagle",
  171.     "weapon_usp"
  172. }
  173.  
  174. new const ClassEquip[ ][ ] =
  175. {
  176.     "",             "weapon_flashbang",
  177.     "weapon_flashbang",     "weapon_smokegrenade",
  178.     "weapon_hegrenade",     "weapon_hegrenade",
  179.     "weapon_flashbang",     "weapon_smokegrenade",
  180.     "weapon_hegrenade",     "weapon_hegrenade",
  181.     "weapon_flashbang", "weapon_smokegrenade",
  182.     "weapon_fiveseven", "weapon_smokegrenade",
  183.     "weapon_smokegrenade"
  184. }
  185.  
  186. new const start_sounds[8][] =
  187. {
  188.     "sound/cod_bo/match_start02.mp3", "sound/cod_bo/match_start03.mp3",
  189.     "sound/cod_bo/match_start04.mp3", "sound/cod_bo/match_start05.mp3",
  190.     "sound/cod_bo/match_start06.mp3", "sound/cod_bo/match_start07.mp3",
  191.     "sound/cod_bo/match_start08.mp3", "sound/cod_bo/match_start09.mp3"
  192.    
  193. }
  194.  
  195. new const tension_sounds[6][] =
  196. {
  197.     "sound/cod_bo/match_tension01.mp3", "sound/cod_bo/match_tension02.mp3",
  198.     "sound/cod_bo/match_tension03.mp3", "sound/cod_bo/match_tension04.mp3",
  199.     "sound/cod_bo/match_tension05.mp3", "sound/cod_bo/match_tension06.mp3"
  200. }
  201.  
  202. new const win_sounds[2][] =
  203. {
  204.     "sound/cod_bo/match_win01.wav", "sound/cod_bo/match_win02.wav"
  205. }
  206.  
  207. new const lose_sounds[2][] =
  208. {
  209.     "sound/cod_bo/match_lose01.wav", "sound/cod_bo/match_lose02.wav"
  210. }
  211.  
  212. new const maxAmmo[31]={0,52,0,90,1,32,1,100,90,1,120,100,100,90,90,90,100,120,30,120,200,32,90,120,90,2,35,90,90,0,100};
  213. new const gMaxRanks[] = { 1, 2, 3, 5, 8, 16, 24, 32, 64, 75, 128, 156, 192, 201, 212, 226, 236, 251, 20000 }
  214.  
  215. new     class       [ 33 ],
  216.     new_class   [ 33 ],
  217.     perk        [ 33 ],
  218.     level       [ 33 ],
  219.     PlrPrestige [ 33 ],
  220.     new_perk    [ 33 ],
  221.     experience  [ 33 ],
  222.     CodPoints   [ 33 ],
  223.     semtex      [ 33 ],
  224.     g_Lethal    [ 33 ],
  225.     tomahawks   [ 33 ],
  226.     claymores   [ 33 ],
  227.     Killstreak  [ 33 ],
  228.     Float:last_clmr [ 33 ],
  229.     bool:slct_lethal[ 33 ],
  230.     Float:last_thrw [ 33 ],
  231.     bool:Drugged    [ 33 ],
  232.     bool:has_lethal [ 33 ],
  233.     Float:vOrigin   [  3 ],
  234.     Float:last_rocket[ 33 ],
  235.          rockets[ 33 ]
  236.  
  237. enum
  238. {
  239.     LETHAL_SEMTEX = 0,
  240.     LETHAL_CLAYMORE  = 1,
  241.     LETHAL_TOMAHAWK = 2,
  242.     LETHAL_BLIND = 3,
  243.     LETHAL_FLASH = 4,
  244.     LETHAL_FRAG = 5,
  245.     LETHAL_GLFIRE = 6
  246. }
  247.  
  248. new const names[ ][ ] = { "Semtex", "Claymore", "Tomahawk", "Blind", "Flash", "Frag", "Grenade Launcher", "-" }
  249.  
  250. new             g_FovMsg,
  251.             cod_killcp,
  252.             g_MaxPlayers,
  253.             g_KillXp,
  254.             g_TeamKillXp,
  255.             pcvar_max,
  256.             g_sync1,
  257.             g_sync2,
  258.             g_Vault,
  259.             g_Txp,
  260.             g_CTxp,
  261.             sprite_blast,
  262.             sprite_trail,
  263.             clmr_max = 2,
  264.             sprite_beam
  265.  
  266. #define RELOAD_RATIO 0.4
  267.  
  268. const NOCLIP_WPN_BS    = ((1<<2)|(1<<CSW_HEGRENADE)|(1<<CSW_SMOKEGRENADE)|(1<<CSW_FLASHBANG)|(1<<CSW_KNIFE)|(1<<CSW_C4))
  269. const SHOTGUNS_BS    = ((1<<CSW_M3)|(1<<CSW_XM1014))
  270.  
  271. // weapons offsets
  272. const m_pPlayer               = 41
  273. const m_iId                    = 43
  274. const m_flNextPrimaryAttack     = 46
  275. const m_flNextSecondaryAttack    = 47
  276. const m_flTimeWeaponIdle        = 48
  277. const m_iPrimaryAmmoType         = 49
  278. const m_iClip                = 51
  279. const m_fInReload            = 54
  280.  
  281. const m_flNextAttack = 83
  282. const m_pActiveItem = 373
  283. const m_rgAmmo_Slot0 = 376
  284.  
  285. const OFFSET_AWM_AMMO  = 377  
  286. const OFFSET_SCOUT_AMMO = 378
  287. const OFFSET_PARA_AMMO = 379
  288. const OFFSET_FAMAS_AMMO = 380
  289. const OFFSET_M3_AMMO = 381
  290. const OFFSET_USP_AMMO = 382
  291. const OFFSET_FIVESEVEN_AMMO = 383
  292. const OFFSET_DEAGLE_AMMO = 384
  293. const OFFSET_P228_AMMO = 385
  294. const OFFSET_GLOCK_AMMO = 386
  295. const OFFSET_FLASH_AMMO = 387
  296. const OFFSET_HE_AMMO = 388
  297. const OFFSET_SMOKE_AMMO = 389
  298. const OFFSET_C4_AMMO = 390
  299.  
  300. const OFFSET_LINUX = 5
  301.  
  302. stock const Float:g_fDelay[CSW_P90+1] = {
  303.     0.00, 2.70, 0.00, 2.00, 0.00, 0.55,   0.00, 3.15, 3.30, 0.00, 4.50,
  304.     2.70, 3.50, 3.35, 2.45, 3.30,   2.70, 2.20, 2.50, 2.63, 4.70,
  305.     0.55, 3.05, 2.12, 3.50, 0.00,   2.20, 3.00, 2.45, 0.00, 3.40
  306. }
  307.  
  308. stock const g_iReloadAnims[CSW_P90+1] = {
  309.     -1,  5, -1, 3, -1,  6,   -1, 1, 1, -1, 14,
  310.     4,  2, 3,  1,  1,   13, 7, 4,  1,  3,
  311.     6, 11, 1,  3, -1,    4, 1, 1, -1,  1}
  312.  
  313. stock const g_iDftMaxClip[CSW_P90+1] = {
  314.     -1,  13, -1, 10,  1,  7,    1, 30, 30,  1,  30,
  315.     20, 25, 30, 35, 25,   12, 20, 10, 30, 100,
  316.     8 , 30, 30, 20,  2,    7, 30, 30, -1,  50}
  317.            
  318.            
  319.  
  320. public plugin_init( )
  321. {
  322.     register_plugin("COD: Black Ops", "1.0c", "Megastorm & ekipa KGB foruma")
  323.     register_cvar("cod_black_ops", "1.0c", (FCVAR_SERVER|FCVAR_SPONLY)              )
  324.    
  325.     g_Vault             = nvault_open("cod_bo")
  326.    
  327.     register_forward(FM_CmdStart,   "fw_CmdStart"                           );
  328.     register_forward(FM_EmitSound,  "forward_emit_sound"                        )
  329.     register_forward(FM_EmitSound,  "emit_snd"                          );
  330.     register_forward(FM_Touch,  "fw_Touch1"                         )
  331.     register_forward(FM_Touch,  "fw_Touch2"                         )
  332.     register_forward(FM_Touch,  "fw_Touch3"                         )
  333.     register_forward(FM_Touch,  "fw_Touch4"                         )
  334.    
  335.     register_touch("Rocket",    "*",    "fw_TouchRocket"                    )
  336.    
  337.     RegisterHam(Ham_Spawn,      "player","Start", 1                         );
  338.     RegisterHam(Ham_TakeDamage,     "player","fw_TakeDamage"                    );
  339.    
  340.     new szWeapon[17]
  341.     for(new i=1; i<=CSW_P90; i++)
  342.     {
  343.         if( !(NOCLIP_WPN_BS & (1<<i)) && get_weaponname(i, szWeapon, charsmax(szWeapon)) )
  344.         {
  345.             if( !(SHOTGUNS_BS & (1<<i)) )
  346.             {
  347.                 RegisterHam(Ham_Weapon_Reload, szWeapon, "Weapon_Reload_Post", 1)
  348.             }
  349.         }
  350.     }
  351.    
  352.     register_event(     "CurWeapon",    "event_currweapon", "be",   "1=1"           );
  353.     register_event(     "DeathMsg",     "player_death",     "ade"               );
  354.     register_event(     "HLTV",     "event_new_round",  "a",    "1=0", "2=0"        );
  355.     register_event(     "HLTV",     "event_new_round2",     "a",    "1=0", "2=0"        );
  356.     register_event(     "Damage",   "event_damage",     "b",    "2!0", "3=0", "4!0" );
  357.    
  358.     register_logevent(  "eRoundStart", 2,           "1=Round_Start"         );
  359.    
  360.     register_clcmd(     "nightvision""Meni"                          )
  361.     register_clcmd(     "say /class",   "ChooseClass"                       )
  362.     register_clcmd(     "say /perk",    "ChoosePerk"                        )
  363.     register_clcmd(     "say /heal",    "fw_Heal"                       )
  364.     register_clcmd(     "say /desc",    "PerkDescription"                   )
  365.     register_clcmd(     "say /lethal""ChooseLethal"                      )
  366.     register_clcmd(     "say /prestige","ShowPrestige_menu"                 )
  367.     register_clcmd(     "say /menu",    "Meni"                          )
  368.     register_clcmd(     "say /klasa",   "ChooseClass"                       )
  369.     register_clcmd(     "say /predmet", "ChoosePerk"                        )
  370.     register_clcmd(     "say /opis",    "PerkDescription"                   )
  371.     register_clcmd(     "say /oprema""ChooseLethal"                      )
  372.     register_clcmd(     "say /vips",    "print_viplist"                     )
  373.    
  374.     g_TeamKillXp        = register_cvar("cod_teamkillxp", "100"                 )
  375.     g_KillXp        = register_cvar("cod_killxp" , "50"                     );
  376.     cod_killcp      = register_cvar("cod_killcp" , "3"                  );
  377.     pcvar_max       = register_cvar("cod_maxteamxp","20000")
  378.     g_sync1         = CreateHudSyncObj()
  379.     g_sync2         = CreateHudSyncObj()
  380.    
  381.     g_FovMsg        = get_user_msgid("SetFOV")
  382.     register_message( get_user_msgid( "SayText" ),"Message_SayText" );
  383.     register_message(get_user_msgid("Health"), "message_Health");
  384.    
  385.     register_forward(FM_SetModel, "fw_SetModel"                         )
  386.    
  387.     g_MaxPlayers = get_maxplayers()
  388. }
  389.  
  390. public plugin_precache( )
  391. {
  392.     precache_sound( "cod_bo/heal.wav" )
  393.     precache_sound( "cod_bo/touch.wav" )
  394.     precache_sound( "cod_bo/tk_throw.wav" )
  395.     precache_sound( "cod_bo/tk_hit.wav" )
  396.     precache_sound( "weapons/c4_beep4.wav" )
  397.     precache_model( "models/w_battery.mdl" )
  398.     precache_model( "models/w_batteryt.mdl" )
  399.    
  400.     for(new i = 0; i <= 7; i++)
  401.         precache_generic(start_sounds[i])
  402.    
  403.     for(new i = 0; i <= 5; i++)
  404.         precache_generic(tension_sounds[i])
  405.    
  406.     for(new i = 0; i <= 1; i++)
  407.         precache_generic(win_sounds[i])
  408.        
  409.     for(new i = 0; i <= 1; i++)
  410.         precache_generic(lose_sounds[i])
  411.    
  412.     precache_model("models/cod_bo/w_tknife.mdl");
  413.    
  414.     sprite_blast = precache_model("sprites/dexplo.spr")
  415.     sprite_trail = precache_model("sprites/smoke.spr");
  416.    
  417.     precache_model("models/cod_bo/v_claymore.mdl")
  418.     precache_model("models/cod_bo/p_claymore.mdl")
  419.     precache_model("models/cod_bo/w_claymore.mdl")
  420.    
  421.     sprite_blast = precache_model("sprites/dexplo.spr");
  422.     sprite_beam = precache_model("sprites/zbeam4.spr")
  423.     precache_model("models/rpgrocket.mdl");
  424.    
  425.     disable_buyzone()
  426. }
  427.  
  428.  
  429. public CreateRockets(id)
  430. {
  431.     if(!rockets[id])
  432.     {
  433.         client_print(id, print_center, "Vec ste iskoristili sve rakete!");
  434.         return PLUGIN_CONTINUE;
  435.     }
  436.     if(last_rocket[id] + 2.0 > get_gametime())
  437.     {
  438.         client_print(id, print_center, "Mozate da koristite raketu za 2 sekunde!");
  439.         return PLUGIN_CONTINUE;
  440.     }
  441.    
  442.     if (is_user_alive(id))
  443.     {  
  444.         last_rocket[id] = get_gametime();
  445.         rockets[id]--;
  446.        
  447.         new Float: Origin[3], Float: vAngle[3], Float: Velocity[3];
  448.        
  449.         pev(id, pev_v_angle,vAngle)
  450.         pev(id, pev_origin, Origin)
  451.        
  452.         new Ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
  453.        
  454.         set_pev(Ent, pev_classname, "Rocket")
  455.         engfunc(EngFunc_SetModel,Ent, "models/rpgrocket.mdl");
  456.        
  457.         vAngle[0] *= -1.0;
  458.        
  459.         set_pev(Ent, pev_origin, Origin)
  460.         set_pev(Ent, pev_angles, vAngle)
  461.         set_pev(Ent, pev_effects, 2)
  462.         set_pev(Ent, pev_solid, SOLID_BBOX)
  463.         set_pev(Ent, pev_movetype, MOVETYPE_TOSS)
  464.        
  465.         set_pev(Ent, pev_owner, id)
  466.         velocity_by_aim(id, 1500, Velocity)
  467.         set_pev(Ent, pev_velocity, Velocity)
  468.         set_pev(Ent, pev_gravity, 1.5)
  469.         set_pev(Ent, pev_effects, EF_DIMLIGHT)
  470.        
  471.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  472.         write_byte(22)
  473.         write_short(Ent)
  474.         write_short(sprite_beam)
  475.         write_byte(45)
  476.         write_byte(4)
  477.         write_byte(255)
  478.         write_byte(80)
  479.         write_byte(50)
  480.         write_byte(25)
  481.         message_end()
  482.     }  
  483.     return PLUGIN_CONTINUE;
  484. }
  485.  
  486. public fw_TouchRocket(ent)
  487. {
  488.     if ( !is_valid_ent(ent))
  489.         return;
  490.  
  491.     new attacker = pev(ent, pev_owner);
  492.  
  493.     new Float:fOrigin[3];
  494.     pev(ent, pev_origin, fOrigin)
  495.    
  496.     new iOrigin[3];
  497.     for(new i=0;i<3;i++)
  498.         iOrigin[i] = floatround(fOrigin[i]);
  499.  
  500.     message_begin(MSG_BROADCAST,SVC_TEMPENTITY, iOrigin);
  501.     write_byte(TE_EXPLOSION);
  502.     write_coord(iOrigin[0]);
  503.     write_coord(iOrigin[1]);
  504.     write_coord(iOrigin[2]);
  505.     write_short(sprite_blast);
  506.     write_byte(32); // scale
  507.     write_byte(20); // framerate
  508.     write_byte(0);// flags
  509.     message_end();
  510.  
  511.     new entlist[33];
  512.     new numfound = find_sphere_class(ent, "player", 230.0, entlist, 32);
  513.    
  514.     for (new i=0; i < numfound; i++)
  515.     {      
  516.         new pid = entlist[i];
  517.        
  518.         if (!is_user_alive(pid) || get_user_team(attacker) == get_user_team(pid))
  519.             continue;
  520.            
  521.         ExecuteHam(Ham_TakeDamage, pid, ent, attacker, 55.0+(random_float(5.0, 50.0)) , 1);
  522.     }
  523.     remove_entity(ent);
  524. }
  525.  
  526. public fw_Touch1(ent, id)
  527. {
  528.     if(!pev_valid(ent))
  529.         return FMRES_IGNORED
  530.    
  531.     new class[32]
  532.     pev(ent, pev_classname, class, charsmax(class))
  533.  
  534.     if(!equal(class, "Tomahawk"))
  535.         return FMRES_IGNORED
  536.        
  537.     new attacker = pev(ent, pev_owner);
  538.     new Float:entOrigin[3]
  539.     pev(ent, pev_origin, entOrigin);
  540.     entOrigin[2] += 1.0;
  541.    
  542.     new victim = -1
  543.     while((victim = engfunc(EngFunc_FindEntityInSphere, victim, entOrigin, 30.0)) != 0)
  544.     {      
  545.         if(!is_user_alive(victim) || get_user_team(attacker) == get_user_team(victim))
  546.             continue;
  547.            
  548.         ExecuteHam(Ham_TakeDamage, victim, ent, attacker, 120.0 , 1);
  549.     }
  550.    
  551.     engfunc(EngFunc_RemoveEntity ,ent);
  552.     return FMRES_IGNORED
  553. }
  554.  
  555. public fw_Touch2(ent, id)
  556. {
  557.     if(!pev_valid(ent))
  558.         return FMRES_IGNORED
  559.    
  560.     new class[32]
  561.     pev(ent, pev_classname, class, charsmax(class))
  562.  
  563.     if(!equal(class, "Tomahawk"))
  564.         return FMRES_IGNORED
  565.     new Float:entOrigin[3]
  566.     pev(ent, pev_origin, entOrigin);
  567.     entOrigin[2] += 1.0;
  568.    
  569.     new attacker = pev(ent, pev_owner)
  570.     if (get_user_team(attacker) != get_user_team(id))
  571.     {
  572.         new Float:fOrigin[3];
  573.         pev(ent, pev_origin, fOrigin)
  574.    
  575.         new iOrigin[3];
  576.         for(new i=0;i<3;i++)
  577.             iOrigin[i] = floatround(fOrigin[i]);
  578.        
  579.         message_begin(MSG_BROADCAST,SVC_TEMPENTITY, iOrigin);
  580.         write_byte(TE_EXPLOSION);
  581.         write_coord(iOrigin[0]);
  582.         write_coord(iOrigin[1]);
  583.         write_coord(iOrigin[2]);
  584.         write_short(sprite_blast);
  585.         write_byte(32); // scale
  586.         write_byte(20); // framerate
  587.         write_byte(0);// flags
  588.         message_end();
  589.         new entlist[33];
  590.         new numfound = engfunc(EngFunc_FindEntityInSphere, "player", 90.0, entlist, charsmax(entlist))
  591.        
  592.         for (new i=0; i < numfound; i++)
  593.         {      
  594.             new pid = entlist[i];
  595.            
  596.             if (!is_user_alive(pid) || get_user_team(attacker) == get_user_team(pid))
  597.                 continue;
  598.                
  599.             ExecuteHam(Ham_TakeDamage, pid, ent, attacker, 60.0+random_float(5.0, 50.0) , 1);
  600.         }
  601.         engfunc(EngFunc_RemoveEntity ,ent);
  602.     }
  603.    
  604.     engfunc(EngFunc_RemoveEntity ,ent);
  605.     return FMRES_IGNORED
  606. }
  607.  
  608. public fw_Touch3(ent, id)
  609. {
  610.     if (!pev_valid(ent) || !is_valid_player(id))
  611.         return FMRES_IGNORED
  612.    
  613.     new classname[32]  
  614.     pev(ent, pev_classname, classname, 31)
  615.     if (!equal(classname, "Scavenger_box"))
  616.         return FMRES_IGNORED
  617.    
  618.    
  619.     new weapons[ 32 ];
  620.     new weaponsnum;
  621.     get_user_weapons( id, weapons, weaponsnum );
  622.    
  623.     if( is_user_alive( id ) && perk[ id ] == 1)
  624.     {
  625.         for( new i=0; i<weaponsnum; i++ )
  626.             if(maxAmmo[ weapons[ i ] ] > 0)
  627.                 fm_set_user_bpammo( id, weapons[ i ], maxAmmo[ weapons[ i ] ] );
  628.                
  629.         emit_sound(ent, CHAN_ITEM, "cod_bo/touch.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);     
  630.         set_pev(ent, pev_effects, EF_NODRAW)
  631.         set_pev(ent, pev_solid, SOLID_NOT)
  632.         engfunc(EngFunc_RemoveEntity ,ent);
  633.     }
  634.    
  635.    
  636.     return FMRES_IGNORED
  637. }
  638.  
  639. public fw_Touch4(nade, id)
  640. {
  641.     if(!pev_valid(nade))
  642.         return FMRES_IGNORED
  643.    
  644.     new owner = pev( nade, pev_owner )
  645.    
  646.     if(!is_user_alive(id) || !is_user_alive(owner) || class[ id ] == 8)
  647.         return FMRES_IGNORED
  648.    
  649.     if (!is_nade_bounce(nade) || g_Lethal[ owner ] != LETHAL_SEMTEX || is_nade_excluded(nade))
  650.         return FMRES_IGNORED
  651.  
  652.     emit_sound(nade, CHAN_ITEM, "weapons/c4_beep4.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
  653.     set_pev(nade, pev_aiment, id)
  654.     set_pev(nade, pev_movetype, MOVETYPE_FOLLOW)
  655.     set_pev(nade, pev_sequence, 0)
  656.    
  657.     return FMRES_IGNORED
  658. }
  659.  
  660. public ClaymoreTouch2(ent)
  661. {
  662.     if(!pev_valid(ent))
  663.         return PLUGIN_HANDLED;
  664.        
  665.     new attacker = pev(ent, pev_owner);
  666.  
  667.     new Float:fOrigin[3];
  668.     pev(ent, pev_origin, fOrigin);
  669.    
  670.     new iOrigin[3];
  671.     for(new i=0;i<3;i++)
  672.         iOrigin[i] = floatround(fOrigin[i]);
  673.        
  674.     message_begin(MSG_BROADCAST,SVC_TEMPENTITY, iOrigin);
  675.     write_byte(TE_EXPLOSION);
  676.     write_coord(iOrigin[0]);
  677.     write_coord(iOrigin[1]);
  678.     write_coord(iOrigin[2]);
  679.     write_short(sprite_blast);
  680.     write_byte(32); // scale
  681.     write_byte(20); // framerate
  682.     write_byte(0);// flags
  683.     message_end();
  684.     new entlist[33];
  685.     /*new numfound = find_sphere_class(ent,"player", 90.0 ,entlist, 32);*/
  686.     new numfound = engfunc(EngFunc_FindEntityInSphere, "player", 90.0, entlist, charsmax(entlist))
  687.        
  688.     for (new i=0; i < numfound; i++)
  689.     {      
  690.         new pid = entlist[i];
  691.            
  692.         if (!is_user_alive(pid) || get_user_team(attacker) == get_user_team(pid))
  693.             continue;
  694.            
  695.         ExecuteHam(Ham_TakeDamage, pid, ent, attacker, 60.0+random_float(5.0, 50.0) , 1);
  696.     }
  697.     engfunc(EngFunc_RemoveEntity ,ent);
  698.  
  699.     return PLUGIN_CONTINUE;
  700. }
  701.  
  702. public Weapon_Reload_Post(iEnt)
  703. {
  704.     new owner = pev(iEnt, pev_owner)
  705.     if(perk[ owner ] == 5)
  706.     {
  707.         if( get_pdata_int(iEnt, m_fInReload, 4) )
  708.         {
  709.             new id = get_pdata_cbase(iEnt, m_pPlayer, 4)
  710.             new Float:fDelay = g_fDelay[get_pdata_int(iEnt, m_iId, 4)] * RELOAD_RATIO
  711.             set_pdata_float(id, m_flNextAttack, fDelay, 5)
  712.             set_pdata_float(iEnt, m_flTimeWeaponIdle, fDelay + 0.5, 4)
  713.             set_pev(id, pev_frame, 200.0)
  714.         }
  715.     }
  716. }
  717.  
  718. public plugin_natives()
  719. {
  720.     register_native("cod_get_user_cp", "native_player_cpoints", 1)
  721.     register_native("cod_set_user_cp", "native_set_player_cpoints", 1)
  722.     register_native("cod_get_user_lethal", "native_get_user_lethal", 1)
  723.     register_native("cod_get_user_class", "native_get_user_class", 1)
  724. }
  725.  
  726. public disable_buyzone() {
  727.    
  728.     new ent = engfunc(EngFunc_FindEntityByString, -1, "classname", "info_map_parameters");
  729.     if(!ent) {
  730.         ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_map_parameters"))
  731.     }
  732.    
  733.     //DispatchKeyValue(ent,"buying","3");
  734.     engfunc(EngFunc_AllocString, "buying", "3")
  735.     fm_dispatchspawn(ent);
  736. }
  737.  
  738. public print_viplist(id)
  739.     set_task(0.1, "show_users", id)
  740.  
  741. public show_users(user)
  742. {
  743.     new adminnames[33][32]
  744.     new message[256]
  745.     new id, count, x, len
  746.    
  747.     for(id = 1 ; id <= g_MaxPlayers ; id++)
  748.         if(is_user_connected(id))
  749.         if(get_user_flags(id) & ADMIN_LEVEL_H)
  750.         get_user_name(id, adminnames[count++], 31)
  751.    
  752.     len = format(message, 255, "^x04ONLINE VIP-ovi su:^x03 ")
  753.     if(count > 0) {
  754.         for(x = 0 ; x < count ; x++) {
  755.             len += format(message[len], 255-len, "%s%s ", adminnames[x], x < (count-1) ? ", ":"")
  756.             if(len > 96 ) {
  757.                 len = format(message, 255, "^x04 ")
  758.             }
  759.         }
  760.         print_message(user, message)
  761.     }
  762.     else {
  763.         len += format(message[len], 255-len, "Nema online VIP-ova")
  764.         print_message(user, message)
  765.     }
  766.    
  767. }
  768. print_message(id, msg[]) {
  769.     message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), {0,0,0}, id)
  770.     write_byte(id)
  771.     write_string(msg)
  772.     message_end()
  773. }
  774.  
  775. public CreateClaymore(id)
  776. {
  777.     if(!claymores[id])
  778.     {
  779.         client_print(id, print_center, "Vec ste iskoristili sve mine!");
  780.         return PLUGIN_HANDLED;
  781.     }
  782.    
  783.     engclient_cmd(id, "weapon_knife")
  784.    
  785.     ChangeModelsSatchel(id)
  786.     UTIL_PlayWeaponAnimation(id, 1)
  787.     set_task(0.2 ,"CreateBomb", id, _, _, _)
  788.     claymores[id]--;
  789.    
  790.     return PLUGIN_CONTINUE
  791. }
  792.  
  793. public CreateBomb(id)
  794. {
  795.     UTIL_PlayWeaponAnimation(id, 2)
  796.     set_task(0.5 ,"return_weapon", id, _, _, _)
  797. }
  798.  
  799. public return_weapon(id)
  800. {
  801.     if(last_clmr[id] + 2.0 > get_gametime())
  802.     {
  803.         client_print(id, print_chat,"Mozes da postavis samo 1 claymore svake 2 sekunde")
  804.         return PLUGIN_CONTINUE;
  805.     }
  806.    
  807.     emit_sound(id, CHAN_WEAPON, "weapons/c4_plant.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  808.     new Float:origin[3];   
  809.     new ent = fm_create_entity("info_target");
  810.     set_pev(ent, pev_classname, "Claymore")
  811.     set_pev(ent, pev_owner, id)
  812.     set_pev(ent, pev_movetype, MOVETYPE_TOSS)
  813.     set_pev(ent, pev_origin, origin);
  814.     set_pev(ent, pev_solid, SOLID_BBOX)
  815.    
  816.     last_clmr[id] = get_gametime()
  817.    
  818.     set_pev(ent, pev_model, "models/cod_bo/w_claymore.mdl");
  819.     set_pev(ent, pev_size, Float:{-16.0,-16.0,0.0},Float:{10.0,10.0,2.0})
  820.    
  821.     fm_drop_to_floor(ent);
  822.  
  823.     set_pev(ent, pev_nextthink, get_gametime() + 0.01) ;
  824.    
  825.     fm_set_rendering(ent,kRenderFxNone, 0,0,0, kRenderTransTexture,50)  ;
  826.    
  827.     engclient_cmd(id, "weapon_knife")
  828.     set_pev(id, pev_viewmodel2, "models/v_knife.mdl")
  829.     set_pev(id, pev_weaponmodel2, "models/p_knife.mdl")
  830.    
  831.     return PLUGIN_HANDLED
  832. }
  833.  
  834. /*0HP BUG Fix*/
  835. public message_Health(msgid, dest, id)
  836. {
  837.     if(!is_user_alive(id))
  838.         return PLUGIN_CONTINUE;
  839.    
  840.     static hp;
  841.     hp = get_msg_arg_int(1);
  842.    
  843.     if(hp > 255 && (hp % 256) == 0)
  844.         set_msg_arg_int(1, ARG_BYTE, ++hp);
  845.    
  846.     return PLUGIN_CONTINUE;
  847. }
  848. /*0HP BUG Fix*/
  849.  
  850. public Meni(id)
  851. {
  852.     if(!is_user_connected(id))
  853.         return PLUGIN_HANDLED
  854.  
  855.     new menu = menu_create("Izaberi item:","Items_H")
  856.    
  857.     menu_additem(menu, "\wKlasa | Class")  
  858.     menu_additem(menu, "\wPredmet | Perk") 
  859.     menu_additem(menu, "\wLethal") 
  860.     menu_additem(menu, "\wDescription | Opis")
  861.     menu_additem(menu, "\wPrestige")
  862.     menu_additem(menu, "\wExtra items")
  863.    
  864.     menu_setprop(menu, MPROP_EXIT,MEXIT_ALL)
  865.    
  866.     menu_display(id,menu)
  867.     return PLUGIN_CONTINUE
  868. }
  869.  
  870. public Items_H(id, menu, item)
  871. {
  872.     if(item == MENU_EXIT)
  873.     {
  874.         menu_destroy(menu)
  875.     }
  876.     switch(item)
  877.     {
  878.         case 0: ChooseClass( id );
  879.         case 1: ChoosePerk( id );
  880.         case 2: ChooseLethal( id );
  881.         case 3: PerkDescription( id )
  882.         case 4: ShowPrestige_menu( id )
  883.         case 5: eitem_menu( id )
  884.     }
  885. }
  886.  
  887. public native_player_cpoints(id)
  888. {
  889.     if (!is_user_valid(id))
  890.     {
  891.         log_error(AMX_ERR_NATIVE, "[COD:BO] Nevazeci igrac (%d)", id)
  892.         return -1;
  893.     }
  894.    
  895.     return CodPoints[id];
  896. }
  897.  
  898. public native_get_user_lethal(id)
  899. {
  900.     if (!is_user_valid(id))
  901.     {
  902.         log_error(AMX_ERR_NATIVE, "[COD:BO] Nevazeci igrac (%d)", id)
  903.         return -1;
  904.     }
  905.    
  906.     return g_Lethal[ id ];
  907. }
  908.  
  909. public native_get_user_class(id)
  910. {
  911.     if (!is_user_valid(id))
  912.     {
  913.         log_error(AMX_ERR_NATIVE, "[COD:BO] Nevazeci igrac (%d)", id)
  914.         return -1;
  915.     }
  916.    
  917.     return class[ id ];
  918. }
  919.  
  920. public native_set_player_cpoints(id, amount)
  921. {
  922.     if (!is_user_valid(id))
  923.     {
  924.         log_error(AMX_ERR_NATIVE, "[COD:BO] Nevazeci igrac (%d)", id)
  925.         return false;
  926.     }
  927.    
  928.     CodPoints[id] = amount;
  929.     return true;
  930. }
  931.  
  932. public BlowItUp(id)
  933. {
  934.     new menu,newmenu,menupage
  935.     player_menu_info(id,menu,newmenu,menupage);
  936.    
  937.     if(menu > 0 || newmenu != -1)
  938.         return PLUGIN_CONTINUE;
  939.        
  940.     new szTmp[64];
  941.     new pMenuExplode = menu_create("Choose action:", "BlowUp_H")
  942.    
  943.     formatex(szTmp, charsmax(szTmp), "Postavi minu\w[\y%d\w]", claymores[id])
  944.     menu_additem(pMenuExplode, szTmp);
  945.    
  946.     formatex(szTmp, charsmax(szTmp), "Aktiviraj mine")
  947.     menu_additem(pMenuExplode, szTmp);
  948.    
  949.     menu_setprop(pMenuExplode, MPROP_NUMBER_COLOR,"\r")
  950.     menu_display(id, pMenuExplode);
  951.     return PLUGIN_CONTINUE;
  952. }
  953.  
  954. public BlowUp_H(id, menu, item)
  955. {
  956.     if(item == MENU_EXIT || !is_user_alive(id))
  957.     {
  958.         menu_destroy(menu);
  959.         return PLUGIN_CONTINUE;
  960.     }
  961.     switch(item)
  962.     {
  963.         case 0:
  964.         {
  965.             CreateClaymore(id)
  966.         }
  967.         case 1:
  968.         {
  969.             UTIL_PlayWeaponAnimation(id, 3)
  970.             new iEnt = -1, iOwner;
  971.             while((iEnt = engfunc(EngFunc_FindEntityByString,iEnt, "classname", "Claymore")))
  972.             {
  973.                 iOwner = pev(iEnt, pev_owner);
  974.                 if(iOwner == id)
  975.                 {
  976.                     ClaymoreTouch2(iEnt);
  977.                 }
  978.             }
  979.         }
  980.     }
  981.     menu_destroy(menu);
  982.     BlowItUp(id)
  983.     return PLUGIN_CONTINUE;
  984. }
  985.  
  986. public ShowPrestige_menu(id)
  987. {
  988.     if(level[ id ] < 80)
  989.     {
  990.         client_print(id, print_chat, "You can't prestige until you get to level 80")
  991.         return PLUGIN_HANDLED
  992.     }
  993.     new szItem[ 255 ]
  994.     formatex(szItem, charsmax(szItem),"\yDo you want to prestige?^n*It will reset your levels^nbut increase your prestige*")
  995.    
  996.     new menu = menu_create(szItem,"Menu_HH")
  997.    
  998.     menu_additem(menu, "Yes")
  999.     menu_additem(menu, "No")
  1000.    
  1001.     menu_display(id,menu)
  1002.    
  1003.     return PLUGIN_CONTINUE
  1004. }
  1005.  
  1006. public Menu_HH(id, menu, item)
  1007. {
  1008.  
  1009.     switch (item)
  1010.     {
  1011.         case 0: PlayerPrestige(id)
  1012.         case 1:
  1013.         {
  1014.             client_print(id, print_chat, "You denied to prestige. If you wish,you can always prestige with /prestige command")
  1015.             return PLUGIN_HANDLED
  1016.         }
  1017.     }
  1018.     return PLUGIN_CONTINUE
  1019. }
  1020.  
  1021.  
  1022. public PlayerPrestige(id)
  1023. {  
  1024.     new szTmp[64];
  1025.     new menu = menu_create("Do you really want to prestige?", "PrestigeMe_H")
  1026.    
  1027.     formatex(szTmp, charsmax(szTmp), "Yes")
  1028.     menu_additem(menu, szTmp);
  1029.    
  1030.     formatex(szTmp, charsmax(szTmp), "No")
  1031.     menu_additem(menu, szTmp);
  1032.    
  1033.     menu_setprop(menu, MPROP_NUMBER_COLOR,"\r")
  1034.     menu_display(id, menu);
  1035.     return PLUGIN_CONTINUE;
  1036. }
  1037.  
  1038. public PrestigeMe_H(id, menu, item)
  1039. {
  1040.     if(item == MENU_EXIT || !is_user_alive(id))
  1041.     {
  1042.         menu_destroy(menu);
  1043.         return PLUGIN_CONTINUE;
  1044.     }
  1045.     switch(item)
  1046.     {
  1047.         case 0:
  1048.         {
  1049.             experience[ id ] = 2
  1050.             level[ id ] = 1
  1051.             CheckLvl(id)
  1052.             PlrPrestige[ id ]++
  1053.             fw_SaveInfo(id)
  1054.         }
  1055.         case 1:
  1056.         {
  1057.             menu_destroy(menu)
  1058.             return PLUGIN_HANDLED
  1059.         }
  1060.     }
  1061.     menu_destroy(menu);
  1062.     return PLUGIN_CONTINUE;
  1063. }
  1064.  
  1065. public emit_snd( id, channel, zvuk[], Float:jacina, Float:att, flags, pitch )
  1066. {
  1067.     if( !is_user_alive( id ) )
  1068.         return FMRES_IGNORED;
  1069.    
  1070.     if( equal( zvuk, "common/wpn_denyselect.wav" ) )
  1071.     {
  1072.         Throw_knife( id )
  1073.         return FMRES_SUPERCEDE;
  1074.     }
  1075.     return FMRES_IGNORED
  1076. }
  1077.  
  1078. public Throw_knife( id )
  1079. {
  1080.     if(rockets[ id ] > 0 && g_Lethal[ id ] == LETHAL_GLFIRE)
  1081.         CreateRockets(id)
  1082.    
  1083.     if(tomahawks[ id ] > 0 && g_Lethal[ id ] == LETHAL_TOMAHAWK)
  1084.         CreateTomahawk( id );
  1085.        
  1086.     if(g_Lethal[ id ] == LETHAL_CLAYMORE && claymores[ id ] > 0)
  1087.         BlowItUp(id)
  1088.        
  1089.     return PLUGIN_HANDLED;
  1090. }
  1091.  
  1092. public CreateTomahawk( id )
  1093. {
  1094.     if ( !tomahawks[ id ] )
  1095.     {
  1096.         client_print( id, print_center, "Nemate vise tomahawka!" );
  1097.         return PLUGIN_CONTINUE;
  1098.     }
  1099.    
  1100.     if( last_thrw[ id ] + 2.0 > get_gametime( ) )
  1101.     {
  1102.         client_print(id, print_center, "Mozete da bacite samo 1 tomahawk u 2 sekunde!" );
  1103.         return PLUGIN_CONTINUE;
  1104.     }
  1105.    
  1106.     if( is_user_alive( id ) )
  1107.     {      
  1108.         last_thrw[ id ] = get_gametime();
  1109.         tomahawks[id]--;
  1110.        
  1111.         new Float:Origin[3], Float:Angle[3], Float:Velocity[3];
  1112.         pev(id, pev_origin, Origin);
  1113.         pev(id, pev_v_angle, Angle);
  1114.         velocity_by_aim(id, 1000, Velocity);
  1115.        
  1116.         Angle[0] *= -1.0
  1117.        
  1118.         new ent = fm_create_entity("info_target")
  1119.         set_pev(ent, pev_classname, "Tomahawk");
  1120.         engfunc(EngFunc_SetModel, ent, "models/cod_bo/w_tknife.mdl")
  1121.         emit_sound(id, CHAN_ITEM, "cod_bo/tk_throw.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
  1122.        
  1123.         set_pev(ent, pev_solid, SOLID_BBOX);
  1124.         set_pev(ent, pev_movetype, MOVETYPE_TOSS);
  1125.         set_pev(ent, pev_owner, id);
  1126.         set_pev(ent, pev_mins, Float:{-1.0, -1.0, -1.0});
  1127.         set_pev(ent, pev_maxs, Float:{1.0, 1.0, 1.0});
  1128.         set_pev(ent, pev_gravity, 0.37);
  1129.        
  1130.         set_pev(ent, pev_origin, Origin);
  1131.         set_pev(ent, pev_velocity, Velocity);
  1132.         set_pev(ent, pev_angles, Angle);
  1133.        
  1134.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  1135.         write_byte(TE_BEAMFOLLOW)
  1136.         write_short(ent)
  1137.         write_short(sprite_trail)
  1138.         write_byte(6)
  1139.         write_byte(3)
  1140.         write_byte(224)
  1141.         write_byte(224)
  1142.         write_byte(255)
  1143.         write_byte(200)
  1144.         message_end()  
  1145.     }  
  1146.     return PLUGIN_CONTINUE;
  1147. }
  1148.  
  1149. public Message_SayText(msgId,msgDest,msgEnt)
  1150. {
  1151.     new id = get_msg_arg_int(1);
  1152.     if( is_user_connected(id) )
  1153.     {
  1154.         new szChannel[64];
  1155.         get_msg_arg_string(2, szChannel, charsmax(szChannel));
  1156.         if( equal(szChannel, "#Cstrike_Chat_All") )
  1157.         {
  1158.             if(get_user_flags(id) & ADMIN_LEVEL_H)
  1159.             {
  1160.            
  1161.                 if(PlrPrestige[ id ] > 0)
  1162.                     formatex(szChannel, charsmax(szChannel), "^4[VIP][%s][Prestige:%d] ^3%%s1 ^1:  %%s2",Ranks[ Getrank( level[ id ] ) ], PlrPrestige[ id ] );
  1163.                 else
  1164.                     formatex(szChannel, charsmax(szChannel), "^4[VIP][%s] ^3%%s1 ^1:  %%s2",Ranks[ Getrank( level[ id ] ) ] );
  1165.                
  1166.                 set_msg_arg_string(2, szChannel);
  1167.             }
  1168.             else
  1169.             {
  1170.                 if(PlrPrestige[ id ] > 0)
  1171.                     formatex(szChannel, charsmax(szChannel), "^4[%s]^4[Prestige:%d] ^3%%s1 ^1:  %%s2",Ranks[ Getrank( level[ id ] ) ], PlrPrestige[ id ] );
  1172.                 else
  1173.                     formatex(szChannel, charsmax(szChannel), "^4[%s] ^3%%s1 ^1:  %%s2",Ranks[ Getrank( level[ id ] ) ] );
  1174.                    
  1175.                 set_msg_arg_string(2, szChannel);
  1176.             }
  1177.         }
  1178.     }
  1179. }  
  1180.  
  1181. public Start( id )
  1182. {
  1183.     if( !is_user_alive( id ) || !is_user_connected( id ) )
  1184.         return PLUGIN_CONTINUE;
  1185.    
  1186.     CheckLvl(id)
  1187.    
  1188.     if( !class[ id ] )
  1189.     {
  1190.         ChooseClass( id );
  1191.         return PLUGIN_CONTINUE;
  1192.     }
  1193.    
  1194.     if(class[ id ] && perk[ id ] && !class[ id ] )
  1195.     {
  1196.         ChooseClass( id );
  1197.         return PLUGIN_CONTINUE;
  1198.     }
  1199.    
  1200.     if(slct_lethal[ id ] )
  1201.         slct_lethal[ id ] = false
  1202.    
  1203.    
  1204.     if( new_class[ id ] )
  1205.     {
  1206.         class[ id ] = new_class[ id ];
  1207.         new_class[ id ] = 0
  1208.        
  1209.         give_weapons(id)
  1210.     }
  1211.     if( new_perk[ id ] )
  1212.     {
  1213.         perk[ id ] = new_perk[ id ];
  1214.         new_perk[ id ] = 0;
  1215.     }
  1216.    
  1217.     switch(g_Lethal[ id ])
  1218.     {
  1219.         case LETHAL_SEMTEX: give_item( id, "weapon_hegrenade")
  1220.         case LETHAL_TOMAHAWK: tomahawks[ id ] = 2
  1221.         case LETHAL_CLAYMORE: claymores[ id ] = clmr_max
  1222.     }
  1223.     give_weapons(id)
  1224.    
  1225.     switch(get_user_team(id))
  1226.     {
  1227.         case 1: give_item(id, "weapon_glock18")
  1228.         case 2: give_item(id, "weapon_usp")
  1229.     }
  1230.    
  1231.     if( perk[id] == 6 )
  1232.     {
  1233.         set_pev(id, pev_gravity, 0.85)
  1234.     }
  1235.    
  1236.     if(!semtex[ id ])
  1237.         return PLUGIN_HANDLED
  1238.    
  1239.     if(get_user_flags(id) & ADMIN_LEVEL_H) 
  1240.         set_pev(id, pev_health, 150.0)
  1241.     else
  1242.         set_pev(id, pev_health, 100.0)
  1243.  
  1244.     set_pdata_int(id, 388, semtex[ id ], 5);
  1245.    
  1246.     return PLUGIN_CONTINUE;
  1247. }
  1248.  
  1249. public give_weapons(id)
  1250. {
  1251.     if ( !is_user_alive( id ) ) return;
  1252.    
  1253.     switch(class[id])
  1254.     {
  1255.         case 1:
  1256.         {
  1257.             strip_user_weapons(id);
  1258.             give_item(id, "weapon_knife");
  1259.            
  1260.             give_item( id, ClassWeapons[ class[ id ] ] )
  1261.             give_item( id, ClassSecondary[ class[ id ] ] )
  1262.             give_item( id, ClassEquip[ class[ id ] ] )
  1263.         }
  1264.         case 2:
  1265.         {
  1266.             strip_user_weapons(id);
  1267.             give_item(id, "weapon_knife");
  1268.            
  1269.             give_item( id, ClassWeapons[ class[ id ] ] )
  1270.             give_item( id, ClassSecondary[ class[ id ] ] )
  1271.             give_item( id, ClassEquip[ class[ id ] ] )
  1272.         }
  1273.         case 3:
  1274.         {
  1275.             strip_user_weapons(id);
  1276.             give_item(id, "weapon_knife");
  1277.            
  1278.             give_item( id, ClassWeapons[ class[ id ] ] )
  1279.             give_item( id, ClassSecondary[ class[ id ] ] )
  1280.             give_item( id, ClassEquip[ class[ id ] ] )
  1281.         }
  1282.         case 4:
  1283.         {
  1284.             strip_user_weapons(id);
  1285.             give_item(id, "weapon_knife");
  1286.            
  1287.             give_item( id, ClassWeapons[ class[ id ] ] )
  1288.             give_item( id, ClassSecondary[ class[ id ] ] )
  1289.             give_item( id, ClassEquip[ class[ id ] ] )
  1290.         }
  1291.         case 5:
  1292.         {
  1293.             strip_user_weapons(id);
  1294.             give_item(id, "weapon_knife");
  1295.            
  1296.             give_item( id, ClassWeapons[ class[ id ] ] )
  1297.             give_item( id, ClassSecondary[ class[ id ] ] )
  1298.             give_item( id, ClassEquip[ class[ id ] ] )
  1299.         }
  1300.         case 6:
  1301.         {
  1302.             strip_user_weapons(id);
  1303.             give_item(id, "weapon_knife");
  1304.            
  1305.             give_item( id, ClassWeapons[ class[ id ] ] )
  1306.             give_item( id, ClassSecondary[ class[ id ] ] )
  1307.             give_item( id, ClassEquip[ class[ id ] ] )
  1308.         }
  1309.         case 7:
  1310.         {
  1311.             strip_user_weapons(id);
  1312.             give_item(id, "weapon_knife");
  1313.            
  1314.             give_item( id, ClassWeapons[ class[ id ] ] )
  1315.             give_item( id, ClassSecondary[ class[ id ] ] )
  1316.             give_item( id, ClassEquip[ class[ id ] ] )
  1317.         }
  1318.         case 8:
  1319.         {
  1320.             strip_user_weapons(id);
  1321.             give_item(id, "weapon_knife");
  1322.            
  1323.             give_item( id, ClassWeapons[ class[ id ] ] )
  1324.             give_item( id, ClassSecondary[ class[ id ] ] )
  1325.             give_item( id, ClassEquip[ class[ id ] ] )
  1326.         }
  1327.         case 9:
  1328.         {
  1329.             strip_user_weapons(id);
  1330.             give_item(id, "weapon_knife");
  1331.            
  1332.             give_item( id, ClassWeapons[ class[ id ] ] )
  1333.             give_item( id, ClassSecondary[ class[ id ] ] )
  1334.             give_item( id, ClassEquip[ class[ id ] ] )
  1335.         }
  1336.         case 10:
  1337.         {
  1338.             strip_user_weapons(id);
  1339.             give_item(id, "weapon_knife");
  1340.            
  1341.             give_item( id, ClassWeapons[ class[ id ] ] )
  1342.             give_item( id, ClassSecondary[ class[ id ] ] )
  1343.             give_item( id, ClassEquip[ class[ id ] ] )
  1344.         }
  1345.         case 11:
  1346.         {
  1347.             strip_user_weapons(id);
  1348.             give_item(id, "weapon_knife");
  1349.            
  1350.             give_item( id, ClassWeapons[ class[ id ] ] )
  1351.             give_item( id, ClassSecondary[ class[ id ] ] )
  1352.             give_item( id, ClassEquip[ class[ id ] ] )
  1353.             cod_deathmachine(id)
  1354.         }
  1355.         case 12:
  1356.         {
  1357.             strip_user_weapons(id);
  1358.             give_item(id, "weapon_knife");
  1359.            
  1360.             give_item( id, ClassWeapons[ class[ id ] ] )
  1361.             give_item( id, ClassSecondary[ class[ id ] ] )
  1362.             give_item( id, ClassEquip[ class[ id ] ] )
  1363.             give_item( id, "weapon_shield" )
  1364.         }
  1365.         case 13:
  1366.         {
  1367.             strip_user_weapons(id);
  1368.             give_item(id, "weapon_knife");
  1369.            
  1370.             give_item( id, ClassWeapons[ class[ id ] ] )
  1371.             give_item( id, ClassSecondary[ class[ id ] ] )
  1372.             give_item( id, ClassEquip[ class[ id ] ] )
  1373.             cod_give_cross(id)
  1374.         }
  1375.         case 14:
  1376.         {
  1377.             strip_user_weapons(id);
  1378.             give_item(id, "weapon_knife");
  1379.            
  1380.             give_item( id, ClassWeapons[ class[ id ] ] )
  1381.             give_item( id, ClassSecondary[ class[ id ] ] )
  1382.             give_item( id, ClassEquip[ class[ id ] ] )
  1383.         }
  1384.     }
  1385.     new weapons[ 32 ], wpnnum
  1386.     get_user_weapons( id, weapons, wpnnum )
  1387.     for(new i=0; i<wpnnum; i++)
  1388.     {
  1389.         if(maxAmmo[weapons[i]] > 0)
  1390.         {
  1391.             fm_set_user_bpammo(id, weapons[i], maxAmmo[weapons[i]]);
  1392.         }  
  1393.     }
  1394.     switch(g_Lethal[ id ])
  1395.     {
  1396.         case LETHAL_FRAG: give_item( id, "weapon_hegrenade")
  1397.         case LETHAL_FLASH: give_item( id, "weapon_flashbang") , fm_set_user_bpammo(id,CSW_FLASHBANG,2);
  1398.         case LETHAL_BLIND: give_item( id, "weapon_flashbang") , fm_set_user_bpammo(id,CSW_FLASHBANG,2);
  1399.         case LETHAL_SEMTEX: give_item( id, "weapon_hegrenade")
  1400.         case LETHAL_CLAYMORE: claymores[ id ] = clmr_max
  1401.         case LETHAL_TOMAHAWK: tomahawks[ id ] = 2
  1402.         case LETHAL_GLFIRE: rockets[ id ] = 2
  1403.     }
  1404. }
  1405.  
  1406. public ChooseClass( id )
  1407. {
  1408.     new menu = menu_create("Choose type:", "IzaberiFrakciju_Handle");
  1409.     for(new i = 1;i<sizeof(frakcije);i++)
  1410.     {
  1411.         menu_additem(menu, frakcije[i]);
  1412.     }
  1413.     menu_display(id, menu);
  1414. }
  1415.  
  1416. public IzaberiFrakciju_Handle(id, menu2, item)
  1417. {      
  1418.     if(item == MENU_EXIT)
  1419.     {
  1420.         menu_destroy(menu2);
  1421.         return PLUGIN_CONTINUE;
  1422.     }      
  1423.    
  1424.     item++;
  1425.     frakcija_igraca[id] = item;
  1426.     new szItem[30]
  1427.     formatex(szItem, charsmax(szItem), "Choose Class:")
  1428.     new menu = menu_create(szItem, "IzaberiKlasu_Handle");
  1429.     new klasa[50];
  1430.     for(new i=1; i<sizeof ClassNames; i++)
  1431.     {
  1432.         if(ako_pripada[i] == item)
  1433.         {
  1434.             formatex(klasa, 49, "%s%s", ClassNames[ i ] , ClassDesc[ i ]);
  1435.             menu_additem(menu, klasa);
  1436.         }
  1437.     }
  1438.    
  1439.     menu_setprop( menu, MPROP_EXITNAME, "Izlaz" );
  1440.     menu_setprop( menu, MPROP_BACKNAME, "Prethodna strana" );
  1441.     menu_setprop( menu, MPROP_NEXTNAME, "Sledeca strana" );
  1442.     menu_display( id, menu );
  1443.    
  1444.     return PLUGIN_CONTINUE;
  1445. }
  1446.  
  1447. public IzaberiKlasu_Handle(id, menu, item)
  1448. {
  1449.     if(item == MENU_EXIT)
  1450.     {
  1451.         menu_destroy(menu);
  1452.         return PLUGIN_CONTINUE;
  1453.     }  
  1454.    
  1455.     item++;
  1456.    
  1457.     new ako = 0;
  1458.     for(new i=1; i<sizeof ClassNames; i++)
  1459.     {
  1460.         if(ako_pripada[i] == frakcija_igraca[id]){
  1461.             ako++;
  1462.         }
  1463.         if(ako == item){
  1464.             item = i;
  1465.             break;
  1466.         }
  1467.     }
  1468.    
  1469.     if(item == class[id])
  1470.         return PLUGIN_CONTINUE;
  1471.    
  1472.     if((item == 11 || item == 12 || item == 13 || item == 14) && !(get_user_flags(id) & ADMIN_LEVEL_H))
  1473.     {
  1474.         ChooseClass(id);
  1475.         return PLUGIN_CONTINUE;
  1476.     }
  1477.     if(class[id])
  1478.     {
  1479.         new_class[ id ] = item;
  1480.         client_print( id, print_chat, "Klasa ce biti izmenjena u sledecoj rundi." );
  1481.     }
  1482.     else
  1483.     {
  1484.         class[ id ] = item;
  1485.         give_weapons(id)
  1486.     }
  1487.    
  1488.     if( class[ id ] != 0 && !perk[ id ])
  1489.         ChoosePerk( id )
  1490.        
  1491.     if( perk[ id ] != 0 && g_Lethal[ id ] == 7)
  1492.         ChooseLethal( id )
  1493.        
  1494.     return PLUGIN_CONTINUE;
  1495. }
  1496.  
  1497. public ChoosePerk( id )
  1498. {
  1499.     new menu = menu_create( "Izaberi predmet:", "Perkmenu_H" );
  1500.     new szTmp[ 64 ];
  1501.     for( new i=1; i< sizeof PerkNames; i++ )
  1502.     {
  1503.         format( szTmp, 64, "%s", PerkNames[ i ] );
  1504.         menu_additem( menu, szTmp );
  1505.     }
  1506.    
  1507.     menu_setprop( menu, MPROP_EXITNAME, "Izlaz" );
  1508.     menu_setprop( menu, MPROP_BACKNAME, "Prethodna strana" );
  1509.     menu_setprop( menu, MPROP_NEXTNAME, "Sledeca strana" );
  1510.     menu_display( id, menu );
  1511. }
  1512.  
  1513. public Perkmenu_H( id, menu, item )
  1514. {
  1515.     if( item == MENU_EXIT )
  1516.     {
  1517.         menu_destroy( menu );
  1518.         return PLUGIN_CONTINUE;
  1519.     }  
  1520.        
  1521.     item++;
  1522.    
  1523.     if(perk[ id ])
  1524.     {
  1525.         new_perk[ id ] = item;
  1526.         client_print(id, print_chat, "Predmet ce biti izmenjen u sledecoj rundi.");
  1527.     }
  1528.     else
  1529.     {
  1530.         perk[ id ] = item;
  1531.     }
  1532.    
  1533.     if(class[ id ] != 0 && perk[ id ] && g_Lethal[ id ] == 7)
  1534.         ChooseLethal( id )
  1535.    
  1536.     return PLUGIN_CONTINUE;
  1537. }
  1538.  
  1539. public ChooseLethal( id )
  1540. {
  1541.     new g_Menu = menu_create( "Izaberi oruzje:", "Lethal_H" );
  1542.    
  1543.    
  1544.     if(slct_lethal[ id ])
  1545.     {
  1546.         client_print( id, print_chat, "You already selected lethal,you can change it in next round!" )
  1547.         return PLUGIN_HANDLED
  1548.     }
  1549.    
  1550.     if(g_Lethal[ id ] == LETHAL_SEMTEX )
  1551.         menu_additem( g_Menu, "\dSemtex\r[Selected]" );
  1552.     else
  1553.         menu_additem( g_Menu, "Semtex" );
  1554.        
  1555.     if(g_Lethal[ id ] == LETHAL_CLAYMORE )
  1556.         menu_additem( g_Menu, "\dClaymore\r[Selected]" );
  1557.     else
  1558.         menu_additem( g_Menu, "Claymore" );
  1559.    
  1560.     if(g_Lethal[ id ] == LETHAL_TOMAHAWK )
  1561.         menu_additem( g_Menu, "\dTomahawk\r[Selected]");
  1562.     else
  1563.         menu_additem( g_Menu, "Tomahawk");
  1564.        
  1565.     if(g_Lethal[ id ] == LETHAL_BLIND )
  1566.         menu_additem( g_Menu, "\dBlind\r[Selected]");
  1567.     else
  1568.         menu_additem( g_Menu, "Blind");
  1569.        
  1570.     if(g_Lethal[ id ] == LETHAL_FLASH )
  1571.         menu_additem( g_Menu, "\dFlash\r[Selected]");
  1572.     else
  1573.         menu_additem( g_Menu, "Flash");
  1574.        
  1575.     if(g_Lethal[ id ] == LETHAL_FRAG )
  1576.         menu_additem( g_Menu, "\dFrag\r[Selected]");
  1577.     else
  1578.         menu_additem( g_Menu, "Frag");
  1579.    
  1580.     if(g_Lethal[ id ] == LETHAL_GLFIRE )
  1581.         menu_additem( g_Menu, "\dRocket Launcher\r[Selected]");
  1582.     else
  1583.         menu_additem( g_Menu, "Rocket Launcher");
  1584.    
  1585.     menu_setprop( g_Menu, MPROP_EXITNAME, "Izlaz" );
  1586.     menu_setprop( g_Menu, MPROP_BACKNAME, "Prethodna strana" );
  1587.     menu_setprop( g_Menu, MPROP_NEXTNAME, "Sledeca strana" );
  1588.     menu_display( id, g_Menu );
  1589.    
  1590.     return PLUGIN_CONTINUE
  1591. }
  1592.  
  1593. public Lethal_H( id, g_Menu, item )
  1594. {
  1595.     if( item == MENU_EXIT )
  1596.     {
  1597.         menu_destroy( g_Menu );
  1598.         return PLUGIN_CONTINUE;
  1599.     }  
  1600.    
  1601.     /*if( has_lethal[ id ] )
  1602.     {
  1603.         slct_lethal[ id ] = item+1;
  1604.         client_print( id, print_chat, "Lethal will be changed in next round." );
  1605.     }
  1606.     else
  1607.     {
  1608.         g_Lethal[ id ] = item;
  1609.     }*/
  1610.    
  1611.     switch(item)
  1612.     {
  1613.         case 0:
  1614.         {
  1615.             if(g_Lethal[ id ] == LETHAL_SEMTEX)
  1616.             {
  1617.                 client_print(id, print_chat, "Ne mozes izabrati isti Lethal!")
  1618.                 return PLUGIN_HANDLED
  1619.             }
  1620.             claymores[ id ] = clmr_max
  1621.             tomahawks[ id ] = 0
  1622.             rockets[ id ] = 0
  1623.             g_Lethal[ id ] = LETHAL_SEMTEX
  1624.             give_item( id, "weapon_hegrenade")
  1625.         }
  1626.         case 1:
  1627.         {
  1628.             if(g_Lethal[ id ] == LETHAL_CLAYMORE)
  1629.             {
  1630.                 client_print(id, print_chat, "Ne mozes izabrati isti Lethal!")
  1631.                 return PLUGIN_HANDLED
  1632.             }
  1633.             g_Lethal[ id ] = LETHAL_CLAYMORE
  1634.             claymores[ id ] = 2
  1635.             tomahawks[ id ] = 0
  1636.             rockets[ id ] = 0
  1637.         }
  1638.         case 2:
  1639.         {  
  1640.             if(g_Lethal[ id ] == LETHAL_TOMAHAWK)
  1641.             {
  1642.                 client_print(id, print_chat, "Ne mozes izabrati isti Lethal!")
  1643.                 return PLUGIN_HANDLED
  1644.             }
  1645.             g_Lethal[ id ] = LETHAL_TOMAHAWK
  1646.             claymores[ id ] = 0
  1647.             tomahawks[ id ] = 2
  1648.             rockets[ id ] = 0
  1649.         }
  1650.         case 3:
  1651.         {
  1652.             if(g_Lethal[ id ] == LETHAL_BLIND)
  1653.             {
  1654.                 client_print(id, print_chat, "Ne mozes izabrati isti Lethal!")
  1655.                 return PLUGIN_HANDLED
  1656.             }
  1657.             g_Lethal[ id ] = LETHAL_BLIND
  1658.             give_item( id, "weapon_flashbang")
  1659.             fm_set_user_bpammo(id, CSW_FLASHBANG, 2)
  1660.             claymores[ id ] = 0
  1661.             tomahawks[ id ] = 0
  1662.             rockets[ id ] = 0
  1663.         }
  1664.         case 4:
  1665.         {
  1666.             if(g_Lethal[ id ] == LETHAL_FLASH)
  1667.             {
  1668.                 client_print(id, print_chat, "Ne mozes izabrati isti Lethal!")
  1669.                 return PLUGIN_HANDLED
  1670.             }
  1671.             g_Lethal[ id ] = LETHAL_FLASH
  1672.             give_item( id, "weapon_flashbang")
  1673.             fm_set_user_bpammo(id, CSW_FLASHBANG, 2)
  1674.             claymores[ id ] = 0
  1675.             tomahawks[ id ] = 0
  1676.             rockets[ id ] = 0
  1677.         }
  1678.         case 5:
  1679.         {
  1680.             if(g_Lethal[ id ] == LETHAL_FRAG)
  1681.             {
  1682.                 client_print(id, print_chat, "Ne mozes izabrati isti Lethal!")
  1683.                 return PLUGIN_HANDLED
  1684.             }
  1685.             g_Lethal[ id ] = LETHAL_FRAG
  1686.             give_item( id, "weapon_hegrenade")
  1687.             claymores[ id ] = 0
  1688.             tomahawks[ id ] = 0
  1689.             rockets[ id ] = 0
  1690.         }
  1691.         case 6:
  1692.         {
  1693.             if(g_Lethal[ id ] == LETHAL_GLFIRE)
  1694.             {
  1695.                 client_print(id, print_chat, "Ne mozes izabrati isti Lethal!")
  1696.                 return PLUGIN_HANDLED
  1697.             }
  1698.             g_Lethal[ id ] = LETHAL_GLFIRE
  1699.             claymores[ id ] = 0
  1700.             tomahawks[ id ] = 0
  1701.             rockets[ id ] = 2
  1702.         }
  1703.     }
  1704.     return PLUGIN_CONTINUE;
  1705. }
  1706.  
  1707. public PerkDescription(id)
  1708. {
  1709.     new Descr[128];
  1710.     format(Descr, 127, PerkDesc[ perk[ id ] ]);
  1711.    
  1712.     client_print(id, print_chat, "Perk: %s.", PerkNames[ perk[ id ] ]);
  1713.     client_print(id, print_chat, "Description: %s.", Descr);
  1714. }
  1715.  
  1716. public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damagebits)
  1717. {
  1718.     if( !is_user_alive( victim ) || !is_user_connected( victim ) || !is_user_connected( attacker ) || get_user_team( victim ) == get_user_team( attacker ) || !Is_Valid_User( victim ) || !Is_Valid_User( attacker ) )
  1719.         return HAM_IGNORED;
  1720.        
  1721.     new health = get_user_health( victim )
  1722.    
  1723.     if(health < 2)
  1724.         return HAM_IGNORED;
  1725.    
  1726.     if(perk[ attacker ] == 6 )
  1727.         damage*=1.1;
  1728.        
  1729.     if(class[ attacker ] == 12 )
  1730.     {
  1731.         SetHamParamFloat(4, damage * 2)
  1732.     }
  1733.        
  1734.     if(get_user_weapon(attacker) != CSW_KNIFE)
  1735.     {
  1736.         set_hudmessage(255, 255, 255, -1.0, -1.0, 0, 0.1, 0.4, 0.02, 0.02, 1);
  1737.         show_hudmessage(attacker, "x");
  1738.     }
  1739.        
  1740.    
  1741.     SetHamParamFloat(4, damage);
  1742.     return HAM_IGNORED;
  1743. }
  1744.  
  1745. public event_damage(id)
  1746. {
  1747.     new attacker = get_user_attacker(id)
  1748.     new health = get_user_health(id)
  1749.    
  1750.     if(!Is_Valid_User( attacker ) )
  1751.         return PLUGIN_HANDLED
  1752.        
  1753.     if(health < 45)
  1754.     {
  1755.         fw_Heal( id )
  1756.     }
  1757.    
  1758.     set_hudmessage(170, 255, 255, -1.0, -1.0, 0, 2.0, 3.0);
  1759.     show_hudmessage(attacker, "x");
  1760.    
  1761.     return PLUGIN_CONTINUE
  1762. }
  1763.    
  1764. public fw_Heal( id )
  1765. {
  1766.     if(!is_user_alive(id))
  1767.         return PLUGIN_HANDLED
  1768.     new health = get_user_health(id)
  1769.    
  1770.     if(health < 100 && health > 1)
  1771.     {
  1772.         set_pev(id, pev_health, health + 1.0)
  1773.         emit_sound(id, CHAN_ITEM, "cod_bo/heal.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
  1774.        
  1775.         set_task(1.0, "fw_Heal", id)
  1776.         message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("ScreenFade"), {0,0,0}, id);
  1777.         write_short(5<<10); // fade lasts this long duration
  1778.         write_short(3<<5); // fade lasts this long hold time
  1779.         write_short(1<<1); // fade type (in / out)
  1780.         write_byte(200); // red
  1781.         write_byte(0); // green
  1782.         write_byte(0); // blue
  1783.         write_byte(90); // alpha
  1784.         message_end();
  1785.     }
  1786.     else if(health > 100)
  1787.     {
  1788.         set_pev(id,pev_health, 100.0)
  1789.     }
  1790.     return PLUGIN_CONTINUE
  1791. }
  1792.  
  1793. public fw_CmdStart( id, uc_handle, randseed )
  1794. {
  1795.     new button = pev(id, pev_button)
  1796.     new Float:punchangle[ 3 ];
  1797.     punchangle[ 0 ] = 0.0
  1798.     punchangle[ 1 ] = 0.0
  1799.     punchangle[ 2 ] = 0.0
  1800.    
  1801.     if( perk[ id ] == 3 )
  1802.     {
  1803.         if( button & IN_ATTACK )
  1804.         {  
  1805.             set_pev( id, pev_punchangle, punchangle )
  1806.         }
  1807.     }
  1808.    
  1809.    
  1810.     return PLUGIN_CONTINUE
  1811. }
  1812.  
  1813. public event_currweapon(id)
  1814. {
  1815.     new weapons[32];
  1816.     new weaponsnum;
  1817.     get_user_weapons(id, weapons, weaponsnum);
  1818.     if(perk[ id ] == 7)
  1819.     {
  1820.         for(new i=0; i<weaponsnum; i++)
  1821.             if(is_user_alive(id) && perk[ id ] == 7)
  1822.                 if(maxAmmo[weapons[i]] > 0)
  1823.                     fm_set_user_bpammo(id, weapons[i], maxAmmo[weapons[i]]);
  1824.     }
  1825. }
  1826.  
  1827. public Is_Valid_User( id )
  1828. {
  1829.     if( is_user_connected( id ) && ( pev( id, pev_flags ) & FL_CLIENT ) )
  1830.         return true;
  1831.  
  1832.     return false;
  1833. }
  1834.  
  1835. public player_death()
  1836. {
  1837.     new attacker = read_data(1)
  1838.     new victim = read_data(2)
  1839.    
  1840.     new killcp = get_pcvar_num(cod_killcp)
  1841.     new MAXXP = get_pcvar_num(pcvar_max)
  1842.     if(!is_user_connected(attacker))
  1843.         return PLUGIN_HANDLED
  1844.    
  1845.     if(get_user_flags(attacker) & ADMIN_LEVEL_H)
  1846.         CodPoints[ attacker ]+=(killcp*2)
  1847.     else
  1848.         CodPoints[ attacker ]+=killcp
  1849.        
  1850.     Killstreak[ attacker ]++
  1851.     Killstreak[ victim ] = 0
  1852.    
  1853.     new iKillxp = get_pcvar_num(g_KillXp)
  1854.     new tKillxp = get_pcvar_num(g_TeamKillXp)
  1855.    
  1856.     pev(victim, pev_origin, vOrigin)
  1857.    
  1858.     if(perk[ attacker ] == 1)
  1859.         CreateScavenger()
  1860.    
  1861.     switch(get_user_team(attacker))
  1862.     {
  1863.         case 1: g_Txp += tKillxp
  1864.         case 2: g_CTxp += tKillxp
  1865.     }
  1866.    
  1867.     if(g_Txp >= MAXXP || g_CTxp >= MAXXP)
  1868.     {
  1869.         set_task(0.5, "ShowWinners", TASKID);
  1870.         set_task(5.0, "ShowWinners2", TASKID);
  1871.     }
  1872.    
  1873.     if(level[attacker] < max_level || experience[attacker] <= 119990)
  1874.     {
  1875.         experience[attacker] += iKillxp
  1876.         CheckLvl(attacker)
  1877.     }
  1878.     else
  1879.     {
  1880.         experience[attacker] = 119990
  1881.         CheckLvl(attacker)
  1882.     }    
  1883.     if(level[attacker] > max_level || experience[attacker] > 119990)
  1884.     {
  1885.         experience[attacker] = 119990
  1886.         CheckLvl(attacker)
  1887.     }
  1888.    
  1889.     return PLUGIN_CONTINUE
  1890. }
  1891.  
  1892. public get_origin(id)
  1893. {
  1894.     pev(id, pev_origin, vOrigin)
  1895. }
  1896.  
  1897. public CreateScavenger()
  1898. {
  1899.     new ent = fm_create_entity("info_target")
  1900.     set_pev(ent, pev_origin, Float:vOrigin)
  1901.     set_pev(ent, pev_classname, "Scavenger_box")
  1902.     engfunc(EngFunc_SetModel, ent, "models/w_battery.mdl")
  1903.     fm_set_rendering(ent, kRenderFxGlowShell, random_num(128, 255), random_num(128, 255), random_num(128, 255), kRenderNormal, 16)
  1904.     set_pev(ent, pev_solid, SOLID_TRIGGER)
  1905.     set_pev(ent, pev_movetype, MOVETYPE_PUSHSTEP)
  1906.     set_pev(ent, pev_size, Float:{-2.0,-2.0,-2.0},Float:{5.0,5.0,5.0})
  1907.     engfunc(EngFunc_DropToFloor, ent)
  1908. }
  1909.  
  1910. public event_new_round()
  1911. {
  1912.     new iEnt = engfunc(EngFunc_FindEntityByString, -1, "classname", "Scavenger_box");
  1913.     while(iEnt > 0)
  1914.     {
  1915.         engfunc(EngFunc_RemoveEntity ,iEnt);
  1916.         iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", "Scavenger_box");
  1917.     }
  1918. }
  1919.  
  1920. public event_new_round2()
  1921. {
  1922.     new iEnt = engfunc(EngFunc_FindEntityByString, -1, "classname", "Claymore");
  1923.     while(iEnt > 0)
  1924.     {
  1925.         engfunc(EngFunc_RemoveEntity ,iEnt);
  1926.         iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", "Claymore")
  1927.     }
  1928. }
  1929.  
  1930.  
  1931. public eRoundStart()
  1932. {
  1933.     client_cmd(0, "mp3 play %s",start_sounds[random_num(0,7)])
  1934.     set_task(3.0, "Task_Additems", TASK_ITEMID)
  1935. }
  1936.  
  1937. public Task_Additems()
  1938. {
  1939.     client_print(0, print_console, "__")
  1940. }
  1941.  
  1942. public ShowWinners()
  1943. {
  1944.     set_dhudmessage(60, 60, 60, 1.0, -1.0, 0, 1.0, 2.0, 0.1, 0.3);
  1945.    
  1946.     new playerz[ 32 ], iLen
  1947.     get_players(playerz, iLen,"ae", "CT")
  1948.    
  1949.     new MAXXP = get_pcvar_num(pcvar_max)
  1950.    
  1951.     for(new i = 0; i < iLen; i++)
  1952.     {
  1953.         if( g_Txp >= MAXXP )
  1954.         {
  1955.             show_dhudmessage( i, "Black Ops forces won!" )
  1956.         }
  1957.         else if( g_CTxp >= MAXXP )
  1958.         {
  1959.             show_dhudmessage( i, "Global Risk forces won!" )
  1960.         }
  1961.         client_cmd(i, "mp3 play %s",win_sounds[random_num(0,1)])
  1962.     }
  1963.    
  1964.     return PLUGIN_CONTINUE
  1965. }
  1966.  
  1967. public ShowWinners2( )
  1968. {
  1969.     new nextmap[ 32 ]
  1970.    
  1971.     get_cvar_string( "amx_nextmap",nextmap, charsmax( nextmap ) )
  1972.     client_print(0, print_chat,"Changing map to: %s", nextmap )
  1973.     server_cmd("amx_map %s",nextmap)
  1974. }
  1975.  
  1976.  
  1977.  
  1978. public ShowStats(id)
  1979. {
  1980.     id -= HUD
  1981.    
  1982.     if(!is_user_connected(id))
  1983.         return PLUGIN_HANDLED
  1984.    
  1985.     set_task(2.0, "ShowStats", id+HUD);
  1986.    
  1987.     if(is_user_connected(id) && !is_user_alive(id))
  1988.     {
  1989.         new target = entity_get_int(id, EV_INT_iuser2);
  1990.    
  1991.         if(!target)
  1992.             return PLUGIN_CONTINUE;
  1993.            
  1994.         set_hudmessage(60, 60, 60, 0.00, 0.65, 0, 1.0, 2.0, 0.1, 0.3, -1);
  1995.         ShowSyncHudMsg(id,g_sync1, "=[Level: %i]^n=[Exp: %i / %i]^n=[Cin: %s]^n=[Class: %s]^n=[Perk: %s]^n=[Lethal: %s]^n=[CP: %d]",level[target], experience[target], CalculateXpForLevel(level[target]), Ranks[Getrank( level[ target ] ) ], ClassNames[ class[target ] ], PerkNames[ perk[ target ] ], names[ g_Lethal[ target ] ], CodPoints[ target ]);
  1996.        
  1997.         return PLUGIN_CONTINUE;
  1998.     }
  1999.     set_hudmessage(0, 60, 120, 0.00, 0.65, 0, 1.0, 2.0, 0.1, 0.3, -1);
  2000.     ShowSyncHudMsg(id, g_sync1, "=[Level: %i]^n=[Exp: %i / %i]^n=[Cin: %s]^n=[Class: %s]^n=[Perk: %s]^n=[Lethal: %s]^n=[CP: %d]",level[id], experience[id], CalculateXpForLevel(level[id]), Ranks[Getrank(level[id])], ClassNames[ class[id] ], PerkNames[ perk[id] ], names[ g_Lethal[ id ] ], CodPoints[ id ])
  2001.     return PLUGIN_CONTINUE;
  2002. }
  2003.  
  2004. public ShowStats2(id)
  2005. {
  2006.     id -= HUD
  2007.    
  2008.     if(!is_user_connected(id))
  2009.         return PLUGIN_HANDLED
  2010.    
  2011.     new MAXXP = get_pcvar_num(pcvar_max)
  2012.    
  2013.     set_task(2.0, "ShowStats2", id+HUD);
  2014.     if(is_user_connected(id) && !is_user_alive(id))
  2015.     {
  2016.         new target = entity_get_int(id, EV_INT_iuser2);
  2017.    
  2018.         if(!target)
  2019.             return PLUGIN_CONTINUE;
  2020.            
  2021.         set_hudmessage(60, 60, 60, 1.0, 0.65, 0, 1.0, 2.0, 0.1, 0.2);
  2022.         ShowSyncHudMsg(id, g_sync2, "[ Call of Duty: Black Ops ]=^n--[ Killstreak: %i ]=^n[CTXP: %i / %i]=^n[TXP: %i / %i]=^n[HP: %d]=",Killstreak[ target ],g_CTxp, MAXXP, g_Txp, MAXXP, get_user_health(target))
  2023.        
  2024.         return PLUGIN_CONTINUE;
  2025.     }
  2026.     set_hudmessage(0, 60, 120, 1.0, 0.65, 0, 1.0, 2.0, 0.1, 0.2);
  2027.     ShowSyncHudMsg(id, g_sync2, "[ Call of Duty: Black Ops ]=^n--[ Killstreak: %i ]=^n[CTXP: %i / %i]=^n[TXP: %i / %i]=^n[HP: %d]=",Killstreak[ id ],g_CTxp, MAXXP, g_Txp, MAXXP, get_user_health(id))
  2028.     return PLUGIN_CONTINUE;
  2029. }
  2030.  
  2031. public CheckLvl(id)
  2032. {
  2033.     if(level[id] >= max_level)
  2034.         return PLUGIN_HANDLED
  2035.    
  2036.     if(level[id] < max_level)
  2037.     {
  2038.         while(experience[id] >= CalculateXpForLevel(level[id]))
  2039.         {
  2040.             level[id]++
  2041.             //set_dhudmessage(0, 250, 0, -1.0, 0.25, 1, 2.0, 0.5, 0.5)
  2042.             set_dhudmessage(0, 60, 120, -1.0, 0.25, 0, 1.0, 2.0, 0.1, 0.2);
  2043.             //set_dhudmessage(0,0,0,1.0,1.0,1,1.0,1.0)
  2044.             show_dhudmessage(id, "%i level!", level[id]);
  2045.             fw_SaveInfo(id)
  2046.         }
  2047.     }
  2048.     else
  2049.     {
  2050.         experience[id] = 119990
  2051.         CheckLvl(id)
  2052.         fw_SaveInfo(id)
  2053.     }
  2054.    
  2055.     return PLUGIN_CONTINUE
  2056. }
  2057.  
  2058. Getrank(iNum)
  2059. {
  2060.     for( new i = 19 - 1; i >= 0; i-- )
  2061.     {
  2062.         if( iNum >= gMaxRanks[ i ] )
  2063.             return i;
  2064.     }
  2065.     return 0;
  2066. }
  2067.  
  2068. public CalculateXpForLevel(lvl)
  2069.     return lvl*90*2;
  2070.  
  2071.  
  2072. public forward_emit_sound(nade, channel, sound[])
  2073. {
  2074.     if( g_Lethal[ pev( nade, pev_owner ) ] != LETHAL_SEMTEX )
  2075.         return FMRES_IGNORED
  2076.    
  2077.    
  2078.     if (is_nade_bounce(nade))
  2079.     {
  2080.         if (equal(sound, "weapons/he_bounce-1.wav") && !is_nade_excluded(nade))
  2081.         {
  2082.             set_pev(nade, pev_movetype, MOVETYPE_NONE)
  2083.             set_pev(nade, pev_sequence, 0)
  2084.         }
  2085.     }
  2086.     return FMRES_IGNORED
  2087. }
  2088.  
  2089. public fw_SetModel(entity, const model[])
  2090. {
  2091.     if (strlen(model) < 8) return
  2092.    
  2093.     static id; id = pev(entity, pev_owner)
  2094.    
  2095.     if (model[9] == 'h' && model[10] == 'e')
  2096.     {
  2097.         set_pev(entity, pev_dmgtime, pev(entity, pev_dmgtime)+0.35)
  2098.         if (!is_user_connected(id)) return
  2099.         if (g_Lethal[id] == LETHAL_SEMTEX)
  2100.         {
  2101.             set_pev(entity, pev_flTimeStepSound, SEMTEX_GRENADE)
  2102.         }else{
  2103.             set_pev(entity, pev_flTimeStepSound, FRAG_GRENADE)
  2104.         }
  2105.         return
  2106.     }
  2107. }
  2108.  
  2109. public drugg(id)
  2110. {
  2111.     Drugged[ id ] = true
  2112.     set_pev(id, pev_maxspeed, 0.5)
  2113.     message_begin( MSG_ONE_UNRELIABLE, g_FovMsg, { 0, 0, 0 }, id )
  2114.     write_byte( 180 )
  2115.     message_end( )
  2116. }
  2117.  
  2118. public undrugg()
  2119. {
  2120.     for( new i = 0; i < g_MaxPlayers; i++)
  2121.     {
  2122.         if(Drugged[ i ])
  2123.         {
  2124.             message_begin( MSG_ONE_UNRELIABLE, g_FovMsg, { 0, 0, 0 }, i )
  2125.             write_byte( 90 )
  2126.             message_end( )
  2127.             set_pev(i, pev_maxspeed, 1.0)
  2128.             Drugged[ i ] = false
  2129.         }
  2130.     }
  2131. }
  2132.  
  2133. public client_putinserver(id)
  2134. {
  2135.     level[ id ] = 1
  2136.     PlrPrestige[ id ] = 0
  2137.     class[ id ] = 0
  2138.     perk[ id ] = 0
  2139.     semtex[ id ] = 0
  2140.     g_Lethal[ id ] = 7
  2141.     tomahawks[ id ] = 0
  2142.     claymores[ id ] = 0
  2143.     has_lethal[ id ] = false
  2144.     fw_ReadInfo(id)
  2145.     set_task(3.0, "ShowStats", id+HUD);
  2146.     set_task(3.0, "ShowStats2", id+HUD);
  2147. }
  2148.  
  2149. public client_disconnect(id)
  2150. {
  2151.     class[ id ] = 0
  2152.     perk[ id ] = 0
  2153.     semtex[ id ] = 0
  2154.     g_Lethal[ id ] = 0
  2155.     tomahawks[ id ] = 0
  2156.     claymores[ id ] = 0
  2157.     has_lethal[ id ] = false
  2158.    
  2159.     fw_SaveInfo(id)
  2160. }
  2161.  
  2162. public fw_SaveInfo(id)
  2163. {
  2164.     new vaultkey[128],vaultdata[256], ID_igraca[64];
  2165.     format(vaultdata, charsmax(vaultdata),"#%i#%i#%i#%i", experience[ id ], level[ id ], PlrPrestige[ id ], CodPoints[ id ] );
  2166.    
  2167.     get_user_authid(id, ID_igraca, charsmax(ID_igraca))
  2168.    
  2169.     format(vaultkey, charsmax(vaultkey),"%s_bo_data", ID_igraca);
  2170.     nvault_set(g_Vault,vaultkey,vaultdata);
  2171.    
  2172.     return PLUGIN_CONTINUE;
  2173. }
  2174.  
  2175. public fw_ReadInfo(id)
  2176. {
  2177.     new vaultkey[128],vaultdata[256], ID_igraca[64];
  2178.    
  2179.     get_user_authid(id, ID_igraca, charsmax(ID_igraca))
  2180.    
  2181.     format(vaultkey, charsmax(vaultkey),"%s_bo_data", ID_igraca);
  2182.     nvault_get(g_Vault,vaultkey,vaultdata,255);
  2183.    
  2184.     replace_all(vaultdata, 255, "#", " ");
  2185.    
  2186.     new playerdata[4][32];
  2187.    
  2188.     parse(vaultdata, playerdata[0], 31, playerdata[1], 31, playerdata[2], 31, playerdata[3], 31);
  2189.    
  2190.     experience[ id ] = str_to_num(playerdata[0]);
  2191.     level[ id ] = str_to_num(playerdata[1])>0?str_to_num(playerdata[1]):1;
  2192.     PlrPrestige[ id ] = str_to_num(playerdata[2]);
  2193.     CodPoints[ id ] = str_to_num(playerdata[3]);
  2194.    
  2195.     return PLUGIN_CONTINUE;
  2196. }
  2197.  
  2198. stock bool:is_nade_bounce(nade)
  2199. {
  2200.     return pev(nade, pev_movetype) == MOVETYPE_BOUNCE
  2201. }
  2202.  
  2203. stock bool:is_nade_excluded(nade)
  2204. {
  2205.     new model[32]
  2206.  
  2207.     pev(nade, pev_model, model, 31)
  2208.    
  2209.     if (equal(model, "models/w_hegrenade.mdl"))
  2210.         return false
  2211.    
  2212.     return true
  2213.  
  2214. }
  2215.  
  2216. stock bool:strip_user_gun(index, wid = 0, const wname[] = "")
  2217. {
  2218.     new ent_class[32];
  2219.     if (!wid && wname[0])
  2220.         copy(ent_class, sizeof ent_class - 1, wname);
  2221.     else
  2222.     {
  2223.         new weapon = wid, clip, ammo;
  2224.         if (!weapon && !(weapon = get_user_weapon(index, clip, ammo)))
  2225.             return false;
  2226.        
  2227.         get_weaponname(weapon, ent_class, sizeof ent_class - 1);
  2228.     }
  2229.    
  2230.     new ent_weap = fm_find_ent_by_owner(-1, ent_class, index);
  2231.     if (!ent_weap)
  2232.         return false;
  2233.    
  2234.     engclient_cmd(index, "drop", ent_class);
  2235.    
  2236.     new ent_box = pev(ent_weap, pev_owner);
  2237.     if (!ent_box || ent_box == index)
  2238.         return false;
  2239.    
  2240.     dllfunc(DLLFunc_Think, ent_box);
  2241.    
  2242.     return true;
  2243. }
  2244.  
  2245. stock give_item(index, const item[])
  2246. {
  2247.     if (!equal(item, "weapon_", 7) && !equal(item, "ammo_", 5) && !equal(item, "item_", 5) && !equal(item, "tf_weapon_", 10))
  2248.         return 0;
  2249.  
  2250.     new ent = fm_create_entity(item);
  2251.     if (!pev_valid(ent))
  2252.         return 0;
  2253.    
  2254.     new Float:origin[3];
  2255.     pev(index, pev_origin, origin);
  2256.     set_pev(ent, pev_origin, origin);
  2257.     set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN);
  2258.     dllfunc(DLLFunc_Spawn, ent);
  2259.    
  2260.     new save = pev(ent, pev_solid);
  2261.     dllfunc(DLLFunc_Touch, ent, index);
  2262.     if (pev(ent, pev_solid) != save)
  2263.         return ent;
  2264.    
  2265.     engfunc(EngFunc_RemoveEntity, ent);
  2266.    
  2267.     return -1;
  2268. }
  2269.  
  2270. stock strip_user_weapons(index)
  2271. {
  2272.     new ent = fm_create_entity("player_weaponstrip");
  2273.     if (!pev_valid(ent))
  2274.         return 0;
  2275.    
  2276.     dllfunc(DLLFunc_Spawn, ent);
  2277.     dllfunc(DLLFunc_Use, ent, index);
  2278.     engfunc(EngFunc_RemoveEntity, ent);
  2279.    
  2280.     return 1;
  2281. }
  2282. /* Claymore */
  2283. stock ChangeModelsSatchel(id)
  2284. {
  2285.     set_pev(id, pev_viewmodel2, "models/cod_bo/v_claymore.mdl")
  2286.     set_pev(id, pev_weaponmodel2, "models/cod_bo/p_claymore.mdl")
  2287. }
  2288.  
  2289. stock UTIL_PlayWeaponAnimation(id, anim)
  2290. {
  2291.     set_pev(id, pev_weaponanim, anim)
  2292.     message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0, 0, 0}, id)
  2293.     write_byte(anim)
  2294.     write_byte(pev(id, pev_body))
  2295.     message_end()
  2296. }
  2297.  
  2298. stock is_valid_player(id){
  2299.     if (id > 0 && id <= g_MaxPlayers && pev_valid(id))
  2300.         return true
  2301.     return false
  2302. }
  2303.  
  2304. stock Float:estimate_take_hurt(Float:fPoint[3], ent)
  2305. {
  2306.     new Float:fOrigin[3], tr, Float:fFraction;
  2307.     pev(ent, pev_origin, fOrigin);
  2308.     engfunc(EngFunc_TraceLine, fPoint, fOrigin, DONT_IGNORE_MONSTERS, 0, tr);
  2309.     get_tr2(tr, TR_flFraction, fFraction);
  2310.     if(fFraction == 1.0 || get_tr2(tr, TR_pHit) == ent)
  2311.         return 1.0;
  2312.     return 0.6;
  2313. }
  2314.  
  2315. stock fm_set_user_bpammo(id, weapon, amount)
  2316. {
  2317.     static offset
  2318.    
  2319.     switch(weapon)
  2320.     {
  2321.         case CSW_AWP: offset = OFFSET_AWM_AMMO;
  2322.             case CSW_SCOUT,CSW_AK47,CSW_G3SG1: offset = OFFSET_SCOUT_AMMO;
  2323.             case CSW_M249: offset = OFFSET_PARA_AMMO;
  2324.             case CSW_M4A1,CSW_FAMAS,CSW_AUG,CSW_SG550,CSW_GALI,CSW_SG552: offset = OFFSET_FAMAS_AMMO;
  2325.             case CSW_M3,CSW_XM1014: offset = OFFSET_M3_AMMO;
  2326.             case CSW_USP,CSW_UMP45,CSW_MAC10: offset = OFFSET_USP_AMMO;
  2327.             case CSW_FIVESEVEN,CSW_P90: offset = OFFSET_FIVESEVEN_AMMO;
  2328.             case CSW_DEAGLE: offset = OFFSET_DEAGLE_AMMO;
  2329.             case CSW_P228: offset = OFFSET_P228_AMMO;
  2330.             case CSW_GLOCK18,CSW_MP5NAVY,CSW_TMP,CSW_ELITE: offset = OFFSET_GLOCK_AMMO;
  2331.             case CSW_FLASHBANG: offset = OFFSET_FLASH_AMMO;
  2332.             case CSW_HEGRENADE: offset = OFFSET_HE_AMMO;
  2333.             case CSW_SMOKEGRENADE: offset = OFFSET_SMOKE_AMMO;
  2334.             case CSW_C4: offset = OFFSET_C4_AMMO;
  2335.             default: return;
  2336.     }
  2337.    
  2338.     set_pdata_int(id, offset, amount, OFFSET_LINUX);
  2339. }
  2340.  
  2341. stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16) {
  2342.     new Float:RenderColor[3];
  2343.     RenderColor[0] = float(r);
  2344.     RenderColor[1] = float(g);
  2345.     RenderColor[2] = float(b);
  2346.  
  2347.     set_pev(entity, pev_renderfx, fx);
  2348.     set_pev(entity, pev_rendercolor, RenderColor);
  2349.     set_pev(entity, pev_rendermode, render);
  2350.     set_pev(entity, pev_renderamt, float(amount));
  2351.  
  2352.     return 1;
  2353. }
  2354.  
  2355. stock __dhud_color;
  2356. stock __dhud_x;
  2357. stock __dhud_y;
  2358. stock __dhud_effect;
  2359. stock __dhud_fxtime;
  2360. stock __dhud_holdtime;
  2361. stock __dhud_fadeintime;
  2362. stock __dhud_fadeouttime;
  2363. stock __dhud_reliable;
  2364.  
  2365. stock set_dhudmessage( red = 0, green = 160, blue = 0, Float:x = -1.0, Float:y = 0.65, effects = 2, Float:fxtime = 6.0, Float:holdtime = 3.0, Float:fadeintime = 0.1, Float:fadeouttime = 1.5, bool:reliable = false )
  2366. {
  2367.     #define clamp_byte(%1)       ( clamp( %1, 0, 255 ) )
  2368.     #define pack_color(%1,%2,%3) ( %3 + ( %2 << 8 ) + ( %1 << 16 ) )
  2369.    
  2370.     __dhud_color       = pack_color( clamp_byte( red ), clamp_byte( green ), clamp_byte( blue ) );
  2371.     __dhud_x           = _:x;
  2372.     __dhud_y           = _:y;
  2373.     __dhud_effect      = effects;
  2374.     __dhud_fxtime      = _:fxtime;
  2375.     __dhud_holdtime    = _:holdtime;
  2376.     __dhud_fadeintime  = _:fadeintime;
  2377.     __dhud_fadeouttime = _:fadeouttime;
  2378.     __dhud_reliable    = _:reliable;
  2379.    
  2380.     return 1;
  2381. }
  2382.  
  2383. stock show_dhudmessage( index, const message[], any:... )
  2384. {
  2385.     new buffer[ 128 ];
  2386.     new numArguments = numargs();
  2387.    
  2388.     if( numArguments == 2 )
  2389.     {
  2390.         send_dhudMessage( index, message );
  2391.     }
  2392.     else if( index || numArguments == 3 )
  2393.     {
  2394.         vformat( buffer, charsmax( buffer ), message, 3 );
  2395.         send_dhudMessage( index, buffer );
  2396.     }
  2397.     else
  2398.     {
  2399.         new playersList[ 32 ], numPlayers;
  2400.         get_players( playersList, numPlayers, "ch" );
  2401.        
  2402.         if( !numPlayers )
  2403.         {
  2404.             return 0;
  2405.         }
  2406.        
  2407.         new Array:handleArrayML = ArrayCreate();
  2408.        
  2409.         for( new i = 2, j; i < numArguments; i++ )
  2410.         {
  2411.             if( getarg( i ) == LANG_PLAYER )
  2412.             {
  2413.                 while( ( buffer[ j ] = getarg( i + 1, j++ ) ) ) {}
  2414.                 j = 0;
  2415.                
  2416.                 if( GetLangTransKey( buffer ) != TransKey_Bad )
  2417.                 {
  2418.                     ArrayPushCell( handleArrayML, i++ );
  2419.                 }
  2420.             }
  2421.         }
  2422.        
  2423.         new size = ArraySize( handleArrayML );
  2424.        
  2425.         if( !size )
  2426.         {
  2427.             vformat( buffer, charsmax( buffer ), message, 3 );
  2428.             send_dhudMessage( index, buffer );
  2429.         }
  2430.         else
  2431.         {
  2432.             for( new i = 0, j; i < numPlayers; i++ )
  2433.             {
  2434.                 index = playersList[ i ];
  2435.                
  2436.                 for( j = 0; j < size; j++ )
  2437.                 {
  2438.                     setarg( ArrayGetCell( handleArrayML, j ), 0, index );
  2439.                 }
  2440.                
  2441.                 vformat( buffer, charsmax( buffer ), message, 3 );
  2442.                 send_dhudMessage( index, buffer );
  2443.             }
  2444.         }
  2445.        
  2446.         ArrayDestroy( handleArrayML );
  2447.     }
  2448.    
  2449.     return 1;
  2450. }
  2451.  
  2452. stock send_dhudMessage( const index, const message[] )
  2453. {
  2454.     message_begin( __dhud_reliable ? ( index ? MSG_ONE : MSG_ALL ) : ( index ? MSG_ONE_UNRELIABLE : MSG_BROADCAST ), SVC_DIRECTOR, _, index );
  2455.     {
  2456.         write_byte( strlen( message ) + 31 );
  2457.         write_byte( DRC_CMD_MESSAGE );
  2458.         write_byte( __dhud_effect );
  2459.         write_long( __dhud_color );
  2460.         write_long( __dhud_x );
  2461.         write_long( __dhud_y );
  2462.         write_long( __dhud_fadeintime );
  2463.         write_long( __dhud_fadeouttime );
  2464.         write_long( __dhud_holdtime );
  2465.         write_long( __dhud_fxtime );
  2466.         write_string( message );
  2467.     }
  2468.     message_end();
  2469. }
  2470.  
  2471. public plugin_end()
  2472.     nvault_close(g_Vault)
Advertisement
Add Comment
Please, Sign In to add comment