Raised This Month: $ Target: $400
 0% 

Suggestion / Subplugin Request [REQ]Sand Bags at Round Start


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Depresie
Veteran Member
Join Date: Nov 2013
Old 04-30-2014 , 20:16   [REQ]Sand Bags at Round Start
Reply With Quote #1

hi, if anyone has time... could you do this?
i have this sandbag plugin and i want that human players to recieve sandbags at the begining of the round
thx in advance..

here is the code :

Code:
/*================================================================================
 
 -----------------------------------
 -*- [ZP] Sandbags -*-
 -----------------------------------
 
 ~~~~~~~~~~~~~~~
 - Description -
 ~~~~~~~~~~~~~~~
 
 Original by SAMURAI, Upgraded to zp by LARP
 [email protected] (Chile) Languaje spanish!
 
================================================================================*/

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <xs>
#include <fun>
#include <zombieplague.inc>
// The sizes of models
#define PALLET_MINS Float:{ -27.260000, -22.280001, -22.290001 }
#define PALLET_MAXS Float:{  27.340000,  26.629999,  29.020000 }

// from fakemeta util by VEN
#define fm_find_ent_by_class(%1,%2) engfunc(EngFunc_FindEntityByString, %1, "classname", %2)
#define fm_remove_entity(%1) engfunc(EngFunc_RemoveEntity, %1)
// this is mine
#define fm_drop_to_floor(%1) engfunc(EngFunc_DropToFloor,%1)
// cvars
new pnumplugin, remove_nrnd, maxpallets, phealth;
// num of pallets with bags
new palletscout = 0;
/* Models for pallets with bags .
  Are available 2 models, will be set a random of them  */
new g_models[][] =
{
 "models/pallet_with_bags2.mdl",
 "models/pallet_with_bags.mdl"
}
new stuck[33]
new g_bolsas[33];
new cvar[3]
new const Float:size[][3] = {
 {0.0, 0.0, 1.0}, {0.0, 0.0, -1.0}, {0.0, 1.0, 0.0}, {0.0, -1.0, 0.0}, {1.0, 0.0, 0.0}, {-1.0, 0.0, 0.0}, {-1.0, 1.0, 1.0}, {1.0, 1.0, 1.0}, {1.0, -1.0, 1.0}, {1.0, 1.0, -1.0}, {-1.0, -1.0, 1.0}, {1.0, -1.0, -1.0}, {-1.0, 1.0, -1.0}, {-1.0, -1.0, -1.0},
 {0.0, 0.0, 2.0}, {0.0, 0.0, -2.0}, {0.0, 2.0, 0.0}, {0.0, -2.0, 0.0}, {2.0, 0.0, 0.0}, {-2.0, 0.0, 0.0}, {-2.0, 2.0, 2.0}, {2.0, 2.0, 2.0}, {2.0, -2.0, 2.0}, {2.0, 2.0, -2.0}, {-2.0, -2.0, 2.0}, {2.0, -2.0, -2.0}, {-2.0, 2.0, -2.0}, {-2.0, -2.0, -2.0},
 {0.0, 0.0, 3.0}, {0.0, 0.0, -3.0}, {0.0, 3.0, 0.0}, {0.0, -3.0, 0.0}, {3.0, 0.0, 0.0}, {-3.0, 0.0, 0.0}, {-3.0, 3.0, 3.0}, {3.0, 3.0, 3.0}, {3.0, -3.0, 3.0}, {3.0, 3.0, -3.0}, {-3.0, -3.0, 3.0}, {3.0, -3.0, -3.0}, {-3.0, 3.0, -3.0}, {-3.0, -3.0, -3.0},
 {0.0, 0.0, 4.0}, {0.0, 0.0, -4.0}, {0.0, 4.0, 0.0}, {0.0, -4.0, 0.0}, {4.0, 0.0, 0.0}, {-4.0, 0.0, 0.0}, {-4.0, 4.0, 4.0}, {4.0, 4.0, 4.0}, {4.0, -4.0, 4.0}, {4.0, 4.0, -4.0}, {-4.0, -4.0, 4.0}, {4.0, -4.0, -4.0}, {-4.0, 4.0, -4.0}, {-4.0, -4.0, -4.0},
 {0.0, 0.0, 5.0}, {0.0, 0.0, -5.0}, {0.0, 5.0, 0.0}, {0.0, -5.0, 0.0}, {5.0, 0.0, 0.0}, {-5.0, 0.0, 0.0}, {-5.0, 5.0, 5.0}, {5.0, 5.0, 5.0}, {5.0, -5.0, 5.0}, {5.0, 5.0, -5.0}, {-5.0, -5.0, 5.0}, {5.0, -5.0, -5.0}, {-5.0, 5.0, -5.0}, {-5.0, -5.0, -5.0}
}
new const g_item_name[] = { "15 Sandbags" }
const g_item_bolsas = 0
new g_itemid_bolsas
new ZPSTUCK, g_BINDMODE, g_MSGMODE
/*************************************************************
************************* AMXX PLUGIN *************************
**************************************************************/

public plugin_init() 
{
 /* Register the plugin */
 //register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
 
 register_plugin("[ZP] Extra: SandBags", "1.1", "LARP")
 set_task(0.1,"checkstuck",0,"",0,"b")
 g_itemid_bolsas = zp_register_extra_item(g_item_name, g_item_bolsas, ZP_TEAM_HUMAN)
 /* Register the cvars */
 g_BINDMODE = register_cvar("zp_pb_bind","0");  //Auto bind L Key!
 g_MSGMODE = register_cvar("zp_pb_msg","1");  //
 ZPSTUCK = register_cvar("zp_pb_stuck","1")
 pnumplugin = register_cvar("zp_pb_enable","1"); // 1 = ON ; 0 = OFF
 remove_nrnd = register_cvar("zp_pb_remround","1");
 maxpallets = register_cvar("zp_pb_limit","200"); // max number of pallets with bags
 phealth = register_cvar("zp_pb_health","200"); // set the health to a pallet with bags
 
 /* Game Events */
 register_event("HLTV","event_newround", "a","1=0", "2=0"); // it's called every on new round
 
 /* This is for menuz: */
 register_menucmd(register_menuid("\ySand Bags:"), 1023, "menu_command" );
 register_clcmd("say /pb","show_the_menu");
 register_clcmd("/pb","show_the_menu");
 //cvar[0] = register_cvar("zp_autounstuck","1")
 cvar[1] = register_cvar("zp_pb_stuckeffects","1")
 cvar[2] = register_cvar("zp_pb_stuckwait","7")
}

public plugin_precache()
{
 for(new i;i < sizeof g_models;i++)
  engfunc(EngFunc_PrecacheModel,g_models[i]);
}
public show_the_menu(id,level,cid)
{
 // check if user doesen't have admin 
 /*if( ! cmd_access( id,level, cid , 0 ))
  return PLUGIN_HANDLED;
 */
 
 // check if the plugin cvar is turned off
 if( ! get_pcvar_num( pnumplugin ) )
  return PLUGIN_HANDLED;
  
  
 // check if user isn't alive
 if( ! is_user_alive( id ) )
 {
  client_print( id, print_chat, "" ); //msg muerto
  return PLUGIN_HANDLED;
 }
   
 if ( !zp_get_user_zombie(id) )
 {  
  new szMenuBody[256];
  new keys;
  
  new nLen = format( szMenuBody, 255, "\ySand Bags:^n" );
  nLen += format( szMenuBody[nLen], 255-nLen, "^n\w1. Place a Sandbags (%i Remaining)", g_bolsas[id] );
  //nLen += format( szMenuBody[nLen], 255-nLen, "^n\w2. Remove a pallet with bags" );
  nLen += format( szMenuBody[nLen], 255-nLen, "^n^n\w0. Exit" );
  keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<9)
  show_menu( id, keys, szMenuBody, -1 );
  // depends what you want, if is continue will appear on chat what the admin sayd
  return PLUGIN_HANDLED;
 }
 client_print(id, print_chat, "[ZP] The zombies can not use this command!")
 return PLUGIN_HANDLED;
}

public menu_command(id,key,level,cid)
{
 
 switch( key )
 {
  // place a pallet with bags
  case 0: 
  {
   if ( !zp_get_user_zombie(id) )
   {
    new money = g_bolsas[id]
    if ( money < 1 )
    {
     if ( get_pcvar_num(g_MSGMODE) == 1 )
      {
       set_hudmessage(0, 0, 100, 0.80, 0.80, 0, 6.0, 2.0, 1.0, 1.0)
       show_hudmessage(id, "You do not have to^nplace sandbags")
       return PLUGIN_CONTINUE
      }
     client_print(id, print_chat, "[ZP] You do not have to place sandbags!")
     return PLUGIN_CONTINUE
    }
    g_bolsas[id]-= 1
    place_palletwbags(id);
    show_the_menu(id,level,cid);
    return PLUGIN_CONTINUE 
   }
   client_print(id, print_chat, "[ZP] The zombies can not use this!!")
   return PLUGIN_CONTINUE 
  }
  
  // remove a pallet with bags
  /*case 1:
  {
   if ( !zp_get_user_zombie(id) )
   {
    new ent, body, class[32];
    get_user_aiming(id, ent, body);
    if (pev_valid(ent)) 
    {
     pev(ent, pev_classname, class, 31);
     
     if (equal(class, "amxx_pallets")) 
     {
      g_bolsas[id]+= 1
      fm_remove_entity(ent);
     }
     
     else
      client_print(id, print_chat, "[ZP] You are not aiming at a pallet with bags");
    }
    else
     client_print(id, print_chat, "[ZP] You are not aiming at a valid entity !");
     
    show_the_menu(id,level,cid);
   }
  }
  */
  
  // remove all pallets with bags
  /*case 2:
  {
   g_bolsas[id]= 0
   remove_allpalletswbags();
   client_print(id,print_chat,"[AMXX] You removed all pallets with bags !");
   show_the_menu(id,level,cid);
  }
   */
   
 }
 
 return PLUGIN_HANDLED;
}
 
public place_palletwbags(id)
{
 
 if( palletscout == get_pcvar_num(maxpallets) )
 {
  client_print(id,print_chat,"[ZP] For security reasons only allow %d Sandbags on the server!",get_pcvar_num(maxpallets));
  return PLUGIN_HANDLED;
 }
 
 // create a new entity 
 new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "func_wall"));
 
 
 // set a name to the entity
 set_pev(ent,pev_classname,"amxx_pallets");
 
 // set model  
 engfunc(EngFunc_SetModel,ent,g_models[random(sizeof g_models)]);
 
 // register a new var. for origin
 static Float:xorigin[3];
 get_user_hitpoint(id,xorigin);
 
 
 // check if user is aiming at the air 
 if(engfunc(EngFunc_PointContents,xorigin) == CONTENTS_SKY)
 {
  client_print(id,print_chat,"[ZP] You can not put sandbags in the sky!");
  return PLUGIN_HANDLED;
 }
 
 
 // set sizes
 static Float:p_mins[3], Float:p_maxs[3];
 p_mins = PALLET_MINS;
 p_maxs = PALLET_MAXS;
 engfunc(EngFunc_SetSize, ent, p_mins, p_maxs);
 set_pev(ent, pev_mins, p_mins);
 set_pev(ent, pev_maxs, p_maxs );
 set_pev(ent, pev_absmin, p_mins);
 set_pev(ent, pev_absmax, p_maxs );
 
 // set the rock of origin where is user placed
 engfunc(EngFunc_SetOrigin, ent, xorigin);
 
 
 // make the rock solid
 set_pev(ent,pev_solid,SOLID_BBOX); // touch on edge, block
 
 // set the movetype
 set_pev(ent,pev_movetype,MOVETYPE_FLY); // no gravity, but still collides with stuff
 
 // now the damage stuff, to set to take it or no
 // if you set the cvar "pallets_wbags_health" 0, you can't destroy a pallet with bags
 // else, if you want to make it destroyable, just set the health > 0 and will be
 // destroyable.
 new Float:p_cvar_health = get_pcvar_float(phealth);
 switch(p_cvar_health)
 {
  case 0.0 :
  {
   set_pev(ent,pev_takedamage,DAMAGE_NO);
  }
  
  default :
  {
   set_pev(ent,pev_health,p_cvar_health);
   set_pev(ent,pev_takedamage,DAMAGE_YES);
  }
 }
 
   
 static Float:rvec[3];
 pev(id,pev_v_angle,rvec);
 
 rvec[0] = 0.0;
 
 set_pev(ent,pev_angles,rvec);
 
 // drop entity to floor
 fm_drop_to_floor(ent);
 
 // num ..
 palletscout++;
 
 // confirm message
 if ( get_pcvar_num(g_MSGMODE) == 1 )
 {
  set_hudmessage(0, 0, 100, 0.80, 0.80, 0, 6.0, 2.0, 1.0, 1.0)
  show_hudmessage(id, "You placed a SandBag^n%i Remaining", g_bolsas[id])
  return PLUGIN_HANDLED
 }
 client_print(id, print_chat, "[ZP] You have placed a Sandbag.")
 return PLUGIN_HANDLED;
}
 
/* ====================================================
get_user_hitpoin stock . Was maked by P34nut, and is 
like get_user_aiming but is with floats and better :o
====================================================*/ 
stock get_user_hitpoint(id, Float:hOrigin[3]) 
{
 if ( ! is_user_alive( id ))
  return 0;
    
 new Float:fOrigin[3], Float:fvAngle[3], Float:fvOffset[3], Float:fvOrigin[3], Float:feOrigin[3];
 new Float:fTemp[3];
    
 pev(id, pev_origin, fOrigin);
 pev(id, pev_v_angle, fvAngle);
 pev(id, pev_view_ofs, fvOffset);
    
 xs_vec_add(fOrigin, fvOffset, fvOrigin);
    
 engfunc(EngFunc_AngleVectors, fvAngle, feOrigin, fTemp, fTemp);
    
 xs_vec_mul_scalar(feOrigin, 9999.9, feOrigin);
 xs_vec_add(fvOrigin, feOrigin, feOrigin);
    
 engfunc(EngFunc_TraceLine, fvOrigin, feOrigin, 0, id);
 global_get(glb_trace_endpos, hOrigin);
    
 return 1;
} 

/* ====================================================
This is called on every round, at start up,
with HLTV logevent. So if the "pallets_wbags_nroundrem"
cvar is set to 1, all placed pallets with bugs will be
removed.
====================================================*/
public event_newround()
{
 if( get_pcvar_num ( remove_nrnd ) == 1)
  remove_allpalletswbags();
  
}

/* ====================================================
This is a stock to help for remove all pallets with
bags placed . Is called on new round if the cvar
"pallets_wbags_nroundrem" is set 1.
====================================================*/
stock remove_allpalletswbags()
{
 new pallets = -1;
 while((pallets = fm_find_ent_by_class(pallets, "amxx_pallets")))
  fm_remove_entity(pallets);
  
 palletscout = 0;
}
public checkstuck() {
 if ( get_pcvar_num(ZPSTUCK) == 1 )
 {
  static players[32], pnum, player
  get_players(players, pnum)
  static Float:origin[3]
  static Float:mins[3], hull
  static Float:vec[3]
  static o,i
  for(i=0; i<pnum; i++){
   player = players[i]
   if (is_user_connected(player) && is_user_alive(player)) {
    pev(player, pev_origin, origin)
    hull = pev(player, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN
    if (!is_hull_vacant(origin, hull,player) && !get_user_noclip(player) && !(pev(player,pev_solid) & SOLID_NOT)) {
     ++stuck[player]
     if(stuck[player] >= get_pcvar_num(cvar[2])) {
      pev(player, pev_mins, mins)
      vec[2] = origin[2]
      for (o=0; o < sizeof size; ++o) {
       vec[0] = origin[0] - mins[0] * size[o][0]
       vec[1] = origin[1] - mins[1] * size[o][1]
       vec[2] = origin[2] - mins[2] * size[o][2]
       if (is_hull_vacant(vec, hull,player)) {
        engfunc(EngFunc_SetOrigin, player, vec)
        effects(player)
        set_pev(player,pev_velocity,{0.0,0.0,0.0})
        o = sizeof size
       }
      }
     }
    }
    else
    {
     stuck[player] = 0
    }
   }
  }
 
 }
 
}
stock bool:is_hull_vacant(const Float:origin[3], hull,id) {
 static tr
 engfunc(EngFunc_TraceHull, origin, origin, 0, hull, id, tr)
 if (!get_tr2(tr, TR_StartSolid) || !get_tr2(tr, TR_AllSolid)) //get_tr2(tr, TR_InOpen))
  return true
 
 return false
}
public effects(id) {
 if(get_pcvar_num(cvar[1])) {
  set_hudmessage(255,150,50, -1.0, 0.65, 0, 6.0, 1.5,0.1,0.7) // HUDMESSAGE
  show_hudmessage(id,"Automatic Unstuck!") // HUDMESSAGE
  message_begin(MSG_ONE_UNRELIABLE,105,{0,0,0},id )      
  write_short(1<<10)   // fade lasts this long duration
  write_short(1<<10)   // fade lasts this long hold time
  write_short(1<<1)   // fade type (in / out)
  write_byte(20)            // fade red
  write_byte(255)    // fade green
  write_byte(255)        // fade blue
  write_byte(255)    // fade alpha
  message_end()
  client_cmd(id,"spk fvox/blip.wav")
 }
}
public zp_extra_item_selected(player, itemid)
{
 if (itemid == g_itemid_bolsas)
 {
  g_bolsas[player]+= 15
  cmd_bind(player)
  set_task(0.3,"show_the_menu",player)
  if ( get_pcvar_num(g_MSGMODE) == 1 )
  {
   set_hudmessage(0, 0, 100, 0.80, 0.80, 0, 6.0, 2.0, 1.0, 1.0)
   show_hudmessage(player, "Plugin By LARP^n    Chile 2008")
  }
 }
}
public cmd_bind(id)
{
 if ( get_pcvar_num(g_BINDMODE) == 1 )
 {
  client_print(id, print_chat, "[ZP] You have %i sandbags, to use with the key 'L'", g_bolsas[id])
  client_cmd(id,"bind l /pb")
  return PLUGIN_HANDLED
 }
 client_print(id, print_chat, "[ZP] You have %i sandbags, to use type 'say /pb'", g_bolsas[id])
 return PLUGIN_HANDLED
}
__________________

Last edited by Depresie; 05-09-2014 at 22:31.
Depresie is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 10:55.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode