Advertisement
crywolfy

bio_extra_shield-grenade.sma

Sep 30th, 2014
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 7.59 KB | None | 0 0
  1. /*
  2. (c) 2014 converted for Biohazard
  3.     by CryWolf
  4.      www.extreamcs.com
  5. */
  6.  
  7. #include <amxmodx>
  8. #include <engine>
  9. #include <biohazard>
  10. #include <hamsandwich>
  11. #include <fun>
  12. #include <fakemeta_util>
  13. #include < cstrike >
  14.  
  15. #define PLUGIN "[ZP] Extra Item: Force Field Grenade"
  16. #define VERSION "v2.3"
  17. #define AUTHOR "lucas_7_94" // Thanks To Users in credits too!.
  18.  
  19. #define CAMPO_ROUND_NAME "Force Shield (Complete Round)"
  20. #define CAMPO_TIME_NAME "Force Shield (Short-Time)"
  21. #define ValidTouch(%1) ( is_user_alive(%1) && ( is_user_zombie(%1) ) ) //  || zp_get_user_nemesis(%1) ) )
  22.  
  23. /*=============================[Plugin Customization]=============================*/
  24. #define CAMPO_TASK
  25. // #define CAMPO_ROUND
  26.  
  27. #define RANDOM_COLOR
  28. // #define ONE_COLOR
  29.  
  30. new const NADE_TYPE_CAMPO = 6545
  31.  
  32. #if defined ONE_COLOR
  33. new Float:CampoColors[ 3 ] = { 255.0 , 0.0 ,   0.0  }
  34. #endif
  35.  
  36. new TrailColor[ 3 ] = { 000, 255, 255 }
  37. new Float:Maxs[ 3 ] = { 100.0 , 100.0 , 100.0 }
  38. new Float:Mins[ 3 ] = { -100.0, -100.0, -100.0 }
  39.  
  40. new const model_grenade[] = "models/zombie_plague/v_auragren.mdl"
  41. new const model[] = "models/zombie_plague/aura8.mdl"
  42. new const w_model[] = "models/zombie_plague/w_aura.mdl"
  43. new const sprite_grenade_trail[] = "sprites/laserbeam.spr"
  44. new const entclas[] = "campo_grenade_forze"
  45.  
  46. new cvar_flaregrenades, g_trailSpr, g_SayText, g_cost; // , g_itemID
  47.  
  48. new gBomb
  49. const Float:Push = 15.0
  50.  
  51.  
  52. public plugin_init()
  53. {
  54.     register_plugin(PLUGIN, VERSION, AUTHOR)
  55.    
  56.     RegisterHam(Ham_Think, "grenade", "fw_ThinkGrenade")
  57.    
  58.     RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
  59.    
  60.     cvar_flaregrenades = get_cvar_pointer("bh_flare_enable")
  61.    
  62.     register_forward(FM_SetModel, "fw_SetModel")
  63.    
  64.     RegisterHam(Ham_Item_Deploy, "weapon_smokegrenade", "shield_deploy", 1)
  65.    
  66.     register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
  67.    
  68.     register_forward(FM_Touch, "fw_touch")
  69.    
  70.     g_SayText = get_user_msgid("SayText")
  71.    
  72.     register_cvar("zp_shield_creator", "lucas_7_94", FCVAR_SERVER|FCVAR_PROTECTED)
  73.     g_cost = register_cvar ( "bh_shield_cost", "10000" );
  74.    
  75.     register_clcmd ( "say /shield", "zp_extra_item_selected" );
  76. }
  77.  
  78. public event_round_start() {
  79.    
  80.     #if defined CAMPO_ROUND
  81.     remove_entity_name(entclas)
  82.     #endif
  83.    
  84.     gBomb = 0
  85. }
  86.  
  87. public plugin_precache() {
  88.    
  89.     g_trailSpr = engfunc(EngFunc_PrecacheModel, sprite_grenade_trail)
  90.     engfunc(EngFunc_PrecacheModel, model_grenade)
  91.     engfunc(EngFunc_PrecacheModel, model)
  92.     engfunc(EngFunc_PrecacheModel, w_model)
  93. }
  94.  
  95. public client_disconnect(id)
  96.     gBomb &= ~( 1 << ( id % 32 ) )
  97.  
  98. public zp_extra_item_selected ( player )
  99. {
  100.     if( gBomb & ( 1 << ( player % 32 ) ) )
  101.         Color(player, "!g[Shield]!y You already have a force field")
  102.     else
  103.     {
  104.         new iMoney, iCost;
  105.         iMoney = cs_get_user_money ( player );
  106.         iCost  = get_pcvar_num ( g_cost );
  107.        
  108.         if ( iMoney < g_cost ) {
  109.             Color ( player, "!g[Shield]!y You don't have enough money %d needed.", iCost );
  110.             return 1;
  111.         }
  112.         else
  113.             cs_set_user_money ( player, iMoney - iCost );
  114.        
  115.         gBomb |= ( 1 << ( player % 32 ) )
  116.        
  117.         if( !user_has_weapon( player, CSW_SMOKEGRENADE ) )
  118.             give_item ( player, "weapon_smokegrenade" )
  119.            
  120.         #if defined CAMPO_ROUND
  121.             Color(player, "!g[Shield]!y You Bought a force field!. This, lasts 1 round complete.")
  122.         #else
  123.             Color(player, "!g[Shield]!y You Bought a force field!. This, lasts very little!")
  124.         #endif
  125.     }
  126.     return 1;
  127. }
  128.  
  129. public fw_PlayerKilled(victim, attacker, shouldgib)
  130. {
  131.     if( ( 1 <= attacker <= 32 ) && ( gBomb & ( 1 << ( victim % 32 ) ) ) )
  132.         gBomb &= ~( 1 << ( victim % 32 ) )
  133. }
  134.  
  135. public fw_ThinkGrenade(entity) {  
  136.    
  137.     if(!pev_valid(entity)) return HAM_IGNORED
  138.    
  139.     static Float:dmgtime  
  140.     pev(entity, pev_dmgtime, dmgtime)
  141.    
  142.     if (dmgtime > get_gametime())
  143.         return HAM_IGNORED  
  144.    
  145.     if(pev(entity, pev_flTimeStepSound) == NADE_TYPE_CAMPO)
  146.         crear_ent(entity)
  147.    
  148.     return HAM_SUPERCEDE
  149. }
  150.  
  151.  
  152. public fw_SetModel(entity, const model[]) {
  153.    
  154.     static Float:dmgtime
  155.     pev(entity, pev_dmgtime, dmgtime)
  156.    
  157.     if (dmgtime == 0.0)
  158.         return FMRES_IGNORED;
  159.    
  160.     if (equal(model[7], "w_sm", 4))
  161.     {      
  162.         new owner = pev(entity, pev_owner)     
  163.        
  164.         if( is_user_alive(owner) && !is_user_zombie(owner) && ( gBomb & ( 1 << ( owner % 32 ) ) ) )
  165.         {
  166.             set_pcvar_num ( cvar_flaregrenades, 0 );       
  167.            
  168.             fm_set_rendering(entity, kRenderFxGlowShell, 000, 255, 255, kRenderNormal, 16)
  169.            
  170.             message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  171.             write_byte(TE_BEAMFOLLOW) // TE id
  172.             write_short(entity) // entity
  173.             write_short(g_trailSpr) // sprite
  174.             write_byte(10) // life
  175.             write_byte(10) // width
  176.             write_byte(TrailColor[ 0 ]) // r
  177.             write_byte(TrailColor[ 1 ]) // g
  178.             write_byte(TrailColor[ 2 ]) // b
  179.             write_byte(500) // brightness
  180.             message_end()
  181.            
  182.             set_pev(entity, pev_flTimeStepSound, NADE_TYPE_CAMPO)
  183.            
  184.             set_task(6.0, "DeleteEntityGrenade" ,entity)
  185.             gBomb &= ~( 1 << ( owner % 32 ) )
  186.             entity_set_model(entity, w_model)
  187.             return FMRES_SUPERCEDE
  188.         }
  189.     }
  190.     return FMRES_IGNORED
  191.    
  192. }
  193.  
  194. public DeleteEntityGrenade(entity)
  195.     if( is_valid_ent( entity ) )
  196.         remove_entity(entity)
  197.  
  198. public crear_ent(id) {
  199.        
  200.     set_pcvar_num ( cvar_flaregrenades, 1 )
  201.    
  202.     // Create entitity
  203.     new iEntity = create_entity("info_target")
  204.    
  205.     if(!is_valid_ent(iEntity))
  206.         return PLUGIN_HANDLED
  207.    
  208.     new Float: Origin[3]
  209.     entity_get_vector(id, EV_VEC_origin, Origin)
  210.    
  211.     entity_set_string(iEntity, EV_SZ_classname, entclas)
  212.    
  213.     entity_set_vector(iEntity,EV_VEC_origin, Origin)
  214.     entity_set_model(iEntity,model)
  215.     entity_set_int(iEntity, EV_INT_solid, SOLID_TRIGGER)
  216.     entity_set_size(iEntity, Mins, Maxs )
  217.     entity_set_int(iEntity, EV_INT_renderfx, kRenderFxGlowShell)
  218.     entity_set_int(iEntity, EV_INT_rendermode, kRenderTransAlpha)
  219.     entity_set_float(iEntity, EV_FL_renderamt, 50.0)
  220.    
  221.     #if defined RANDOM_COLOR
  222.     if(is_valid_ent(iEntity))
  223.     {
  224.         new Float:vColor[3]
  225.        
  226.         for(new i; i < 3; i++)
  227.             vColor[i] = random_float(0.0, 255.0)
  228.        
  229.         entity_set_vector(iEntity, EV_VEC_rendercolor, vColor)
  230.     }
  231.     #endif
  232.    
  233.     #if defined ONE_COLOR
  234.     entity_set_vector(iEntity, EV_VEC_rendercolor, CampoColors)
  235.     #endif
  236.    
  237.     #if defined CAMPO_TASK
  238.     set_task(10.0, "DeleteEntity", iEntity)
  239.     #endif
  240.    
  241.    
  242.     return PLUGIN_CONTINUE;
  243. }
  244.  
  245. public event_infect2 ( infected )
  246.     if ( gBomb & ( 1 << ( infected % 32 ) ) )
  247.         gBomb &= ~( 1 << ( infected % 32 ) )
  248.  
  249. public fw_touch(ent, touched)
  250. {
  251.     if ( !pev_valid(ent) ) return FMRES_IGNORED;
  252.     static entclass[32];
  253.     pev(ent, pev_model, entclass, 31);
  254.    
  255.     if ( strcmp( entclass , model ) == 0 )
  256.     {  
  257.         if( ValidTouch(touched) )
  258.         {
  259.             static Float:pos_ptr[3], Float:pos_ptd[3]
  260.            
  261.             pev(ent, pev_origin, pos_ptr)
  262.             pev(touched, pev_origin, pos_ptd)
  263.            
  264.             for(new i = 0; i < 3; i++)
  265.             {
  266.                 pos_ptd[i] -= pos_ptr[i]
  267.                 pos_ptd[i] *= Push
  268.             }
  269.             set_pev(touched, pev_velocity, pos_ptd)
  270.             set_pev(touched, pev_impulse, pos_ptd)
  271.         }
  272.     }
  273.     return FMRES_HANDLED
  274. }
  275.  
  276.  
  277. public DeleteEntity( entity )  // Thanks xPaw For The Code =D
  278.     if( is_valid_ent( entity ) )
  279.     remove_entity( entity );
  280.  
  281. stock Color(const id, const input[], any:...)
  282. {
  283.     static msg[191]
  284.     vformat(msg, 190, input, 3)
  285.    
  286.     replace_all(msg, 190, "!g", "^4")
  287.     replace_all(msg, 190, "!y", "^1")
  288.     replace_all(msg, 190, "!t", "^3")
  289.    
  290.     message_begin(MSG_ONE_UNRELIABLE, g_SayText, _, id)
  291.     write_byte(id)
  292.     write_string(msg)
  293.     message_end()
  294. }
  295.  
  296. public shield_deploy( shield_ent )
  297. {
  298.     if( pev_valid( shield_ent ) != 2 )
  299.         return HAM_IGNORED;
  300.    
  301.     static const mPlayer = 41
  302.    
  303.     new id = get_pdata_cbase( shield_ent, mPlayer, 4 );
  304.    
  305.     if( ( gBomb & ( 1 << ( id % 32 ) ) ) && !is_user_zombie( id ) )
  306.         set_pev( id, pev_viewmodel2, model_grenade );
  307.    
  308.     return HAM_IGNORED;
  309. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement