Advertisement
Guest User

Untitled

a guest
Oct 2nd, 2018
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.33 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <fakemeta>
  3. #include <hamsandwich>
  4. #include <zombieplague>
  5.  
  6. #define fm_create_entity(%1) engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, %1))
  7.  
  8. new const NADE_TYPE_STRIPBOMB= 7777
  9. new const sprite_grenade_trail[] = "sprites/laserbeam.spr"
  10. new const sprite_grenade_ring[] = "sprites/shockwave.spr"
  11. new const model_grenade_infect[] = "models/v_grenade_astrip.mdl"
  12. new const bcost = 5;
  13.  
  14. new nick_p[ 32 ]
  15.  
  16. new g_trailSpr, g_exploSpr, item_id, cvar_enabled, cvar_mode, cvar_radius, cvar_max
  17. new has_bomb[33],had_bombs[33];
  18.  
  19. public plugin_init()
  20. {
  21.     register_plugin("[ZP] Extra Item: Strip Bomb", "1.6", "Hezerf")
  22.    
  23.     RegisterHam(Ham_Think, "grenade", "fw_ThinkGrenade")
  24.     RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
  25.  
  26.     RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_smokegrenade", "smokeThrown" )
  27.    
  28.     register_forward(FM_SetModel, "fw_SetModel")
  29.    
  30.     register_message(get_user_msgid("CurWeapon"), "message_cur_weapon")
  31.    
  32.     register_event("HLTV","Event_New_Round","a", "1=0", "2=0")
  33.    
  34.     cvar_enabled = register_cvar("zp_strip_bomb", "1")
  35.     cvar_mode = register_cvar("zp_strip_mode", "0")
  36.     cvar_radius = register_cvar("zp_strip_radius", "250.0")
  37.     cvar_max = register_cvar("zp_strip_max","5")
  38. }
  39.  
  40. public plugin_precache()
  41. {
  42.     g_trailSpr = engfunc(EngFunc_PrecacheModel, sprite_grenade_trail)
  43.     g_exploSpr = engfunc(EngFunc_PrecacheModel, sprite_grenade_ring)
  44.    
  45.     engfunc(EngFunc_PrecacheModel, model_grenade_infect)
  46.    
  47.     item_id = zp_register_extra_item("Strip Bomb", bcost, ZP_TEAM_ZOMBIE)
  48. }
  49.  
  50. public client_disconnect(id)
  51. {
  52.     has_bomb[id] = 0;
  53.     had_bombs[id] = 0;
  54. }
  55.  
  56. public Event_New_Round()
  57. {
  58.     arrayset(had_bombs,0,32);
  59.     arrayset(has_bomb,0,32);
  60. }
  61. public zp_extra_item_selected(player, itemid)
  62. {
  63.     if(itemid != item_id)
  64.         return;
  65.     if(get_pcvar_num(cvar_max) == had_bombs[player])
  66.     {
  67.         zp_set_user_ammo_packs(player,zp_get_user_ammo_packs(player) + bcost)
  68.         client_print(player, print_chat, "[ZP] You can't buy Strip Bomb !")
  69.         return;
  70.     }
  71.    
  72.     has_bomb[player] = 1
  73.     had_bombs[player]++;
  74.     fm_strip_user_gun(player, 9)
  75.     fm_give_item(player, "weapon_smokegrenade")
  76. }
  77. public smokeThrown( id )
  78. {
  79.     get_user_name( id, nick_p, charsmax( nick_p ) )
  80.     client_print( 0, print_chat, "[MILF] %s je bacio bombu!", nick_p )
  81. }
  82. public fw_PlayerKilled(victim, attacker, shouldgib)
  83.     has_bomb[victim] = 0;
  84.  
  85. public fw_ThinkGrenade(entity)
  86. {  
  87.     if(!pev_valid(entity))
  88.         return HAM_IGNORED
  89.    
  90.     static Float:dmgtime   
  91.     pev(entity, pev_dmgtime, dmgtime)
  92.    
  93.     if (dmgtime > get_gametime())
  94.         return HAM_IGNORED 
  95.    
  96.     if(pev(entity, pev_flTimeStepSound) == NADE_TYPE_STRIPBOMB)
  97.     {
  98.         stripbomb_explode(entity)
  99.        
  100.         return HAM_SUPERCEDE
  101.     }
  102.    
  103.     return HAM_IGNORED  
  104. }
  105.  
  106. public fw_SetModel(entity, const model[])
  107. {
  108.     static Float:dmgtime
  109.     pev(entity, pev_dmgtime, dmgtime)
  110.    
  111.     new owner = pev(entity, pev_owner)
  112.    
  113.     if(!get_pcvar_num(cvar_enabled) || !dmgtime || !(equal(model[7], "w_sm", 4)) || !zp_get_user_zombie(owner) || !has_bomb[owner])
  114.         return;
  115.    
  116.     fm_set_rendering(entity, kRenderFxGlowShell, 255, 128, 0, kRenderNormal, 16)
  117.    
  118.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  119.     write_byte(TE_BEAMFOLLOW) // TE id
  120.     write_short(entity) // entity
  121.     write_short(g_trailSpr) // sprite
  122.     write_byte(10) // life
  123.     write_byte(10) // width
  124.     write_byte(255) // r
  125.     write_byte(128) // g
  126.     write_byte(0) // b
  127.     write_byte(200) // brightness
  128.     message_end()
  129.    
  130.     set_pev(entity, pev_flTimeStepSound, NADE_TYPE_STRIPBOMB)
  131. }
  132.  
  133. public stripbomb_explode(ent)
  134. {
  135.     if (!zp_has_round_started())
  136.         return;
  137.    
  138.     static Float:originF[3]
  139.     pev(ent, pev_origin, originF)
  140.    
  141.     create_blast(originF)
  142.    
  143.     //engfunc(EngFunc_EmitSound, ent, CHAN_WEAPON, grenade_infect[random_num(0, sizeof grenade_infect - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM)
  144.    
  145.     static attacker
  146.     attacker = pev(ent, pev_owner)
  147.    
  148.     has_bomb[attacker] = 0
  149.    
  150.     static victim
  151.     victim = -1
  152.     while ((victim = engfunc(EngFunc_FindEntityInSphere, victim, originF, get_pcvar_float(cvar_radius))) != 0)
  153.     {
  154.         if (!is_user_alive(victim) || zp_get_user_zombie(victim))
  155.             continue;
  156.        
  157.         switch(get_pcvar_num(cvar_mode))
  158.         {
  159.             case 0 :
  160.             {
  161.                 if (pev(victim, pev_armorvalue) <= 0)
  162.                     continue;
  163.                
  164.                 set_pev(victim, pev_armorvalue, 0);
  165.             }
  166.             case 1 :
  167.             {
  168.                 fm_strip_user_weapons(victim)
  169.                 fm_give_item(victim, "weapon_knife")
  170.             }
  171.             case 2 :
  172.             {
  173.                 if (pev(victim, pev_armorvalue) > 0)               
  174.                     set_pev(victim, pev_armorvalue, 0)
  175.                
  176.                 fm_strip_user_weapons(victim)
  177.                 fm_give_item(victim, "weapon_knife")
  178.             }
  179.         }
  180.     }
  181.    
  182.     engfunc(EngFunc_RemoveEntity, ent)
  183. }
  184.  
  185. public create_blast(const Float:originF[3])
  186. {
  187.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
  188.     write_byte(TE_BEAMCYLINDER) // TE id
  189.     engfunc(EngFunc_WriteCoord, originF[0]) // x
  190.     engfunc(EngFunc_WriteCoord, originF[1]) // y
  191.     engfunc(EngFunc_WriteCoord, originF[2]) // z
  192.     engfunc(EngFunc_WriteCoord, originF[0]) // x axis
  193.     engfunc(EngFunc_WriteCoord, originF[1]) // y axis
  194.     engfunc(EngFunc_WriteCoord, originF[2]+385.0) // z axis
  195.     write_short(g_exploSpr) // sprite
  196.     write_byte(0) // startframe
  197.     write_byte(0) // framerate
  198.     write_byte(4) // life
  199.     write_byte(60) // width
  200.     write_byte(0) // noise
  201.     write_byte(255) // red
  202.     write_byte(128) // green
  203.     write_byte(0) // blue
  204.     write_byte(200) // brightness
  205.     write_byte(0) // speed
  206.     message_end()
  207.    
  208.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
  209.     write_byte(TE_BEAMCYLINDER) // TE id
  210.     engfunc(EngFunc_WriteCoord, originF[0]) // x
  211.     engfunc(EngFunc_WriteCoord, originF[1]) // y
  212.     engfunc(EngFunc_WriteCoord, originF[2]) // z
  213.     engfunc(EngFunc_WriteCoord, originF[0]) // x axis
  214.     engfunc(EngFunc_WriteCoord, originF[1]) // y axis
  215.     engfunc(EngFunc_WriteCoord, originF[2]+470.0) // z axis
  216.     write_short(g_exploSpr) // sprite
  217.     write_byte(0) // startframe
  218.     write_byte(0) // framerate
  219.     write_byte(4) // life
  220.     write_byte(60) // width
  221.     write_byte(0) // noise
  222.     write_byte(255) // red
  223.     write_byte(164) // green
  224.     write_byte(0) // blue
  225.     write_byte(200) // brightness
  226.     write_byte(0) // speed
  227.     message_end()
  228.    
  229.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
  230.     write_byte(TE_BEAMCYLINDER) // TE id
  231.     engfunc(EngFunc_WriteCoord, originF[0]) // x
  232.     engfunc(EngFunc_WriteCoord, originF[1]) // y
  233.     engfunc(EngFunc_WriteCoord, originF[2]) // z
  234.     engfunc(EngFunc_WriteCoord, originF[0]) // x axis
  235.     engfunc(EngFunc_WriteCoord, originF[1]) // y axis
  236.     engfunc(EngFunc_WriteCoord, originF[2]+555.0) // z axis
  237.     write_short(g_exploSpr) // sprite
  238.     write_byte(0) // startframe
  239.     write_byte(0) // framerate
  240.     write_byte(4) // life
  241.     write_byte(60) // width
  242.     write_byte(0) // noise
  243.     write_byte(255) // red
  244.     write_byte(200) // green
  245.     write_byte(0) // blue
  246.     write_byte(200) // brightness
  247.     write_byte(0) // speed
  248.     message_end()
  249. }
  250.  
  251. public replace_models(id)
  252. {
  253.     if (!is_user_alive(id) || get_user_weapon(id) != CSW_SMOKEGRENADE || !has_bomb[id])
  254.         return
  255.    
  256.     set_pev(id, pev_viewmodel2, model_grenade_infect)
  257. }
  258.  
  259. public message_cur_weapon(msg_id, msg_dest, msg_entity)
  260.     replace_models(msg_entity);
  261.  
  262. // Stocks from fakemeta_util
  263. stock bool:fm_strip_user_gun(index, wid = 0, const wname[] = "")
  264. {
  265.     new ent_class[32];
  266.     if (!wid && wname[0])
  267.         copy(ent_class, sizeof ent_class - 1, wname);
  268.     else
  269.     {
  270.         new weapon = wid, clip, ammo;
  271.         if (!weapon && !(weapon = get_user_weapon(index, clip, ammo)))
  272.             return false;
  273.        
  274.         get_weaponname(weapon, ent_class, sizeof ent_class - 1);
  275.     }
  276.    
  277.     new ent_weap = fm_find_ent_by_owner(-1, ent_class, index);
  278.     if (!ent_weap)
  279.         return false;
  280.    
  281.     engclient_cmd(index, "drop", ent_class);
  282.    
  283.     new ent_box = pev(ent_weap, pev_owner);
  284.     if (!ent_box || ent_box == index)
  285.         return false;
  286.    
  287.     dllfunc(DLLFunc_Think, ent_box);
  288.    
  289.     return true;
  290. }
  291.  
  292. stock fm_give_item(index, const item[])
  293. {
  294.     if (!equal(item, "weapon_", 7) && !equal(item, "ammo_", 5) && !equal(item, "item_", 5) && !equal(item, "tf_weapon_", 10))
  295.         return 0;
  296.  
  297.     new ent = fm_create_entity(item);
  298.     if (!pev_valid(ent))
  299.         return 0;
  300.    
  301.     new Float:origin[3];
  302.     pev(index, pev_origin, origin);
  303.     set_pev(ent, pev_origin, origin);
  304.     set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN);
  305.     dllfunc(DLLFunc_Spawn, ent);
  306.    
  307.     new save = pev(ent, pev_solid);
  308.     dllfunc(DLLFunc_Touch, ent, index);
  309.     if (pev(ent, pev_solid) != save)
  310.         return ent;
  311.    
  312.     engfunc(EngFunc_RemoveEntity, ent);
  313.    
  314.     return -1;
  315. }
  316.  
  317. stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
  318. {
  319.     new Float:RenderColor[3];
  320.     RenderColor[0] = float(r);
  321.     RenderColor[1] = float(g);
  322.     RenderColor[2] = float(b);
  323.    
  324.     set_pev(entity, pev_renderfx, fx);
  325.     set_pev(entity, pev_rendercolor, RenderColor);
  326.     set_pev(entity, pev_rendermode, render);
  327.     set_pev(entity, pev_renderamt, float(amount));
  328.    
  329.     return 1;
  330. }
  331.  
  332. stock fm_strip_user_weapons(index)
  333. {
  334.     new ent = fm_create_entity("player_weaponstrip");
  335.     if (!pev_valid(ent))
  336.         return 0;
  337.    
  338.     dllfunc(DLLFunc_Spawn, ent);
  339.     dllfunc(DLLFunc_Use, ent, index);
  340.     engfunc(EngFunc_RemoveEntity, ent);
  341.    
  342.     return 1;
  343. }
  344.  
  345. stock fm_find_ent_by_owner(index, const classname[], owner, jghgtype = 0)
  346. {
  347.     new strtype[11] = "classname", ent = index;
  348.     switch (jghgtype)
  349.     {
  350.         case 1: strtype = "target";
  351.         case 2: strtype = "targetname";
  352.     }
  353.    
  354.     while ((ent = engfunc(EngFunc_FindEntityByString, ent, strtype, classname)) && pev(ent, pev_owner) != owner) {}
  355.    
  356.     return ent;
  357. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement