/* Plugin generated by AMXX-Studio */
/* Ce optimizat mai e... l-am facut in graba */
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <fun>
#include <cstrike>
#include <hamsandwich>
#define PLUGIN "Furien Weapons Menu"
#define VERSION "1.0"
#define AUTHOR "tre3fla, Fixed by lucylucy"
#define ADMIN_FLAG ADMIN_KICK
#define VIP_FLAG ADMIN_LEVEL_H
#define is_valid_player(%1) (1 <= %1 <= 32)
/* AK47 Golden pentru VIP */
new const vGoldenAk[ 64 ] = "models/arme-globally/v_g36c.mdl"
new const pGoldenAk[ 64 ] = "models/arme-globally/p_g36c.mdl"
new const wGoldenAk[ 64 ] = "models/arme-globally/w_g36c.mdl"
/* M4A1 Golden pentru VIP */
new const vGoldenM4[ 64 ] = "models/arme-globally/v_eagle.mdl"
new const pGoldenM4[ 64 ] = "models/arme-globally/p_eagle.mdl"
new const wGoldenM4[ 64 ] = "models/arme-globally/w_eagle.mdl"
/* MP5 Navy Golden pentru VIP */
new const vGoldenMP5[ 64 ] = "models/arme-globally/v_camo.mdl"
new const pGoldenMP5[ 64 ] = "models/arme-globally/p_camo.mdl"
new const wGoldenMP5[ 64 ] = "models/arme-globally/w_camo.mdl"
/* XM1014 Golden pentru VIP */
new const vGoldenXM1014[ 64 ] = "models/arme-globally/v_xmcamo.mdl"
new const pGoldenXM1014[ 64 ] = "models/arme-globally/p_xmcamo.mdl"
new const wGoldenXM1014[ 64 ] = "models/arme-globally/w_xmcamo.mdl"
//new m_spriteTexture
new bool: ArmaPrimita[ 33 ]
new bool: AreGoldenAK[ 33 ]
new bool: AreGoldenM4[ 33 ]
new bool: AreGoldenMP5[ 33 ]
new bool: AreGoldenXM1014[ 33 ]
new normalTrace[33], lastTrace[33], cvEnabled;
public plugin_init( ) {
register_plugin( PLUGIN, VERSION, AUTHOR )
register_event( "CurWeapon", "Event_CurWeapon", "be", "1=1" )
//register_event("CurWeapon", "GoldenEffect", "be", "1=1", "3>0" )
cvEnabled = register_cvar("fwm_enabled","1");
register_event("ResetHUD","event_resethud","b"); //
register_clcmd("fullupdate","cmd_fullupdate");
register_forward(FM_TraceLine,"fw_traceline");
register_forward(FM_PlayerPostThink,"fw_playerpostthink"); //
RegisterHam( Ham_Spawn, "player", "fwPlayerSpawn", true )
RegisterHam( Ham_TakeDamage, "player", "fwTakeDamage" )
register_clcmd( "say /weapons", "ClcmdWeaponsMenus" )
}
public plugin_precache( ) {
precache_model( vGoldenAk )
precache_model( pGoldenAk )
precache_model( vGoldenM4 )
precache_model( pGoldenM4 )
precache_model( vGoldenMP5 )
precache_model( pGoldenMP5 )
precache_model( vGoldenXM1014 )
precache_model( pGoldenXM1014 )
//m_spriteTexture = precache_model( "sprites/dot.spr" )
}
public fwPlayerSpawn( id ) {
AreGoldenAK[ id ] = false
AreGoldenM4[ id ] = false
AreGoldenMP5[ id ] = false
AreGoldenXM1014[ id ] = false
ArmaPrimita[ id ] = false
if( is_user_alive( id ) && cs_get_user_team( id ) == CS_TEAM_CT ) {
strip_user_weapons( id )
PopUpWeaponsMenu( id )
give_item( id, "weapon_knife" )
give_item( id, "weapon_hegrenade" )
give_item( id, "weapon_flashbang" )
give_item( id, "weapon_smokegrenade" )
give_item( id, "weapon_deagle" )
cs_set_user_bpammo( id, CSW_DEAGLE, 200 )
}
else if( is_user_alive( id ) && cs_get_user_team( id ) == CS_TEAM_T ) {
strip_user_weapons( id )
give_item( id, "weapon_knife" )
give_item( id, "weapon_hegrenade" )
give_item( id, "weapon_flashbang" )
give_item( id, "weapon_smokegrenade" )
cs_set_user_bpammo( id, CSW_FLASHBANG, 2 )
}
}
public PopUpWeaponsMenu( id ) {
new FurienWeaponsMenu = menu_create( "\yAnti-Furien\r Weapons", "FurienWeaponsHandler" )
menu_additem( FurienWeaponsMenu, "Arme\y Normale", "1", 0 )
menu_additem( FurienWeaponsMenu, "Arme\r V.I.P", "2", 0 )
menu_setprop( FurienWeaponsMenu, MPROP_EXIT, MEXIT_ALL )
menu_display( id, FurienWeaponsMenu, 0 )
}
public FurienWeaponsHandler( id, FurienWeaponsMenu, item ) {
if( item == MENU_EXIT ) {
menu_destroy( FurienWeaponsMenu )
return PLUGIN_HANDLED
}
switch( item ) {
case 0 : {
ArmeNormale( id )
}
case 1 : {
if( get_user_flags( id ) & VIP_FLAG ) {
ArmeVIP( id )
}
else {
ColorChat( id, "^4[Furien Weapons]^1 Aceste arme sunt rezervate numai pentru^3 V.I.P^1." )
PopUpWeaponsMenu( id )
}
}
}
menu_destroy( FurienWeaponsMenu )
return PLUGIN_HANDLED
}
public ArmeNormale( id ) {
new MeniuArmeNormale = menu_create( "\yArme\r Normale", "ArmeNormaleHandler" )
menu_additem( MeniuArmeNormale, "Kalashnikov\r (\yAK47\r)", "1", 0 )
menu_additem( MeniuArmeNormale, "Carabina\r (\yM4A1\r)", "2", 0 )
menu_additem( MeniuArmeNormale, "MP5\r (\yNavy\r)", "3", 0 )
menu_additem( MeniuArmeNormale, "Shotgun\r (\yXM1014\r)", "4", 0 )
menu_setprop( MeniuArmeNormale, MPROP_EXIT, MEXIT_ALL )
menu_display( id, MeniuArmeNormale, 0 )
}
public ArmeNormaleHandler( id, MeniuArmeNormale, item ) {
if( !is_user_alive( id ) ) {
ColorChat( id, "^4[Furien Weapons]^1 Nu iti poti alege arma atunci cand esti mort!" )
return PLUGIN_HANDLED
}
if( item == MENU_EXIT ) {
menu_destroy( MeniuArmeNormale )
return PLUGIN_HANDLED
}
switch( item ) {
case 0 : {
give_item( id, "weapon_ak47" )
give_item( id, "weapon_smokegrenade" )
cs_set_user_bpammo( id, CSW_AK47, 300 )
ArmaPrimita[ id ] = true
}
case 1 : {
give_item( id, "weapon_m4a1" )
give_item( id, "weapon_smokegrenade" )
cs_set_user_bpammo( id, CSW_M4A1, 300 )
ArmaPrimita[ id ] = true
}
case 2 : {
give_item( id, "weapon_mp5navy" )
give_item( id, "weapon_smokegrenade" )
cs_set_user_bpammo( id, CSW_MP5NAVY, 300 )
ArmaPrimita[ id ] = true
}
case 3 : {
give_item( id, "weapon_xm1014" )
give_item( id, "weapon_smokegrenade" )
cs_set_user_bpammo( id, CSW_XM1014, 300 )
ArmaPrimita[ id ] = true
}
}
menu_destroy( MeniuArmeNormale )
return PLUGIN_HANDLED
}
public ArmeVIP( id ) {
new MeniuArmeVIP = menu_create( "\yArme \r*\w V\r.\wI\r.\wP\r *", "ArmeVIPHandler" )
menu_additem( MeniuArmeVIP, "AK47 V.I.P", "1", 0 )
menu_additem( MeniuArmeVIP, "M4A1 V.I.P)", "2", 0 )
menu_additem( MeniuArmeVIP, "MP5 V.I.P)", "3", 0 )
menu_additem( MeniuArmeVIP, "XM1014 V.I.P)", "4", 0 )
menu_setprop( MeniuArmeVIP, MPROP_EXIT, MEXIT_ALL )
menu_display( id, MeniuArmeVIP, 0 )
}
public ArmeVIPHandler( id, MeniuArmeVIP, item ) {
if( !is_user_alive( id ) ) {
ColorChat( id, "^4[Furien Weapons]^1 Nu iti poti alege arma atunci cand esti mort!" )
return PLUGIN_HANDLED
}
if( item == MENU_EXIT ) {
menu_destroy( MeniuArmeVIP )
return PLUGIN_HANDLED
}
switch( item ) {
case 0 : {
give_item( id, "weapon_ak47" )
give_item( id, "weapon_smokegrenade" )
cs_set_user_bpammo( id, CSW_AK47, 300 )
set_pev( id, pev_viewmodel2, vGoldenAk )
set_pev( id, pev_weaponmodel2, pGoldenAk )
ArmaPrimita[ id ] = true
AreGoldenAK[ id ] = true
}
case 1 : {
give_item( id, "weapon_m4a1" )
give_item( id, "weapon_smokegrenade" )
cs_set_user_bpammo( id, CSW_M4A1, 300 )
set_pev( id, pev_viewmodel2, vGoldenM4 )
set_pev( id, pev_weaponmodel2, pGoldenM4 )
ArmaPrimita[ id ] = true
AreGoldenM4[ id ] = true
}
case 2 : {
give_item( id, "weapon_mp5navy" )
give_item( id, "weapon_smokegrenade" )
cs_set_user_bpammo( id, CSW_MP5NAVY, 300 )
set_pev( id, pev_viewmodel2, vGoldenMP5 )
set_pev( id, pev_weaponmodel2, pGoldenMP5 )
ArmaPrimita[ id ] = true
AreGoldenMP5[ id ] = true
}
case 3 : {
give_item( id, "weapon_xm1014" )
give_item( id, "weapon_smokegrenade" )
cs_set_user_bpammo( id, CSW_XM1014, 300 )
set_pev( id, pev_viewmodel2, vGoldenXM1014 )
set_pev( id, pev_weaponmodel2, pGoldenXM1014 )
ArmaPrimita[ id ] = true
AreGoldenXM1014[ id ] = true
}
}
menu_destroy( MeniuArmeVIP )
return PLUGIN_HANDLED
}
public ClcmdWeaponsMenus( id ) {
if( !is_user_alive( id ) ) {
ColorChat( id, "^4[Furien Weapons]^1 Nu poti sa-ti alegeti arma atunci cand esti mort!" )
return
}
if( ArmaPrimita[ id ] ) {
ColorChat( id, "^4[Furien Weapons]^1 Ti-ai ales deja arma in aceasta runda!" )
return
}
if( cs_get_user_team( id ) == CS_TEAM_CT ) {
PopUpWeaponsMenu( id )
}
}
public Event_CurWeapon( id ) {
new Arma = read_data( 2 )
if( Arma == CSW_AK47 && AreGoldenAK[ id ] ) {
set_pev( id, pev_viewmodel2, vGoldenAk )
set_pev( id, pev_weaponmodel2, pGoldenAk )
}
if( Arma == CSW_M4A1 && AreGoldenM4[ id ] ) {
set_pev( id, pev_viewmodel2, vGoldenM4 )
set_pev( id, pev_weaponmodel2, pGoldenM4 )
}
if( Arma == CSW_MP5NAVY && AreGoldenMP5[ id ] ) {
set_pev( id, pev_viewmodel2, vGoldenMP5 )
set_pev( id, pev_weaponmodel2, pGoldenMP5 )
}
if( Arma == CSW_XM1014 && AreGoldenXM1014[ id ] ) {
set_pev( id, pev_viewmodel2, vGoldenXM1014 )
set_pev( id, pev_weaponmodel2, pGoldenXM1014 )
}
}
public fwTakeDamage( Victim, Inflictor, Attacker, Float:Damage ) {
if( is_valid_player( Attacker ) && get_user_weapon( Attacker ) == CSW_AK47 && AreGoldenAK[ Attacker ] ) {
SetHamParamFloat( 4, Damage * 1 )
}
if( is_valid_player( Attacker) && get_user_weapon( Attacker ) == CSW_M4A1 && AreGoldenM4[ Attacker ] ) {
SetHamParamFloat( 4, Damage * 1 )
}
if( is_valid_player( Attacker ) && get_user_weapon( Attacker ) == CSW_MP5NAVY && AreGoldenMP5[ Attacker ] ) {
SetHamParamFloat( 4, Damage * 1.5 )
}
if( is_valid_player( Attacker ) && get_user_weapon( Attacker) == CSW_XM1014 && AreGoldenXM1014[ Attacker ] ) {
SetHamParamFloat( 4, Damage * 1.5 )
}
}
//public GoldenEffect( id ) {
// new clip,ammo
// new Arma = get_user_weapon(id,clip,ammo)
// if (Arma == CSW_AK47 && AreGoldenAK[ id ] || Arma == CSW_M4A1 && AreGoldenM4[ id ] || Arma == CSW_MP5NAVY && AreGoldenMP5[ id ] || Arma == CSW_XM1014 && AreGoldenXM1014[ id ]) {
// new vec1[ 3 ], vec2[ 3 ]
// get_user_origin( id, vec1, 1 )
// get_user_origin( id, vec2, 4 )
//
// message_begin( MSG_BROADCAST,SVC_TEMPENTITY )
// write_byte ( 0 )
// write_coord( vec1[ 0 ] )
// write_coord( vec1[ 1 ] )
// write_coord( vec1[ 2 ] )
// write_coord( vec2[ 0 ] )
// write_coord( vec2[ 1 ] )
// write_coord( vec2[ 2 ] )
// write_short( m_spriteTexture )
// write_byte( 1 )
// write_byte( 5 )
// write_byte( 2 )
// write_byte( 10 )
// write_byte( 0 )
// write_byte( 255 )
// write_byte( 215 )
// write_byte( 0 )
// write_byte( 200 )
// write_byte( 150 )
// message_end( )
// }
//}
stock ColorChat(const id, const input[], any:...) {
new count = 1, players[32];
static msg[191];
vformat(msg, 190, input, 3);
replace_all(msg, 190, "!x04", "^4");
replace_all(msg, 190, "!x01", "^1");
replace_all(msg, 190, "!x03", "^3");
if(id) players[0] = id;
else get_players(players, count, "ch"); {
for(new i = 0; i < count; i++) {
if(is_user_connected(players[i])) {
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}
/* Edit lucylucy */
// reset normal trace id on join or leave
public client_connect(id)
{
normalTrace[id] = 0;
}
public client_disconnect(id)
{
normalTrace[id] = 0;
}
// player spawns, and some other such things
public event_resethud(id)
{
lastTrace[id] = 0;
}
// block forced resethud call
public cmd_fullupdate(id)
{
return PLUGIN_HANDLED;
}
// traceline hook, meat and bones of the entire plugin
public fw_traceline(Float:vecStart[3],Float:vecEnd[3],ignoreM,id,pentru) // pentToSkip == id, for clarity
{
if(!is_user_connected(id))
return FMRES_IGNORED;
// grab normal trace
if(!normalTrace[id])
{
normalTrace[id] = pentru;
return FMRES_IGNORED;
}
// ignore normal trace
else if(pentru == normalTrace[id])
return FMRES_IGNORED;
// no functionality
if(!get_pcvar_num(cvEnabled))
return FMRES_IGNORED;
// not a player entity, or player is dead
if(!is_user_alive(id))
return FMRES_IGNORED;
// not shooting anything
if(!(pev(id,pev_button) & IN_ATTACK))
return FMRES_IGNORED;
// this is a second traceline, for shooting through walls
if(pentru == lastTrace[id])
{
// values sure to throw off any traceline
set_tr(TR_vecEndPos,Float:{4096.0,4096.0,4096.0});
set_tr(TR_AllSolid,1);
set_tr(TR_pHit,0);
set_tr(TR_iHitgroup,0);
set_tr(TR_flFraction,1.0);
return FMRES_SUPERCEDE;
}
// remeber traceline index for next time
lastTrace[id] = pentru;
return FMRES_IGNORED;
}
// finished client calculations, reset our traceline index
public fw_playerpostthink(id)
{
lastTrace[id] = 0;
}