#include < amxmodx >
#include < hamsandwich >
#include < cstrike >
#include < xs >
#include < fun >
#include < fakemeta >
#include < CC_ColorChat >
#include < csx >
//#include < dhudmessage >
//#pragma tabsize 1
#pragma semicolon 1
#define PLUGIN "VIP Menu"
#define VERSION "0.0.1"
#define ACCESS_VIP ADMIN_LEVEL_H
// No Recoil
#define NO_UCLIP_WEAPONS_BITSUM ( ( 1<<CSW_HEGRENADE ) | ( 1<<CSW_SMOKEGRENADE ) | ( 1<<CSW_FLASHBANG ) | ( 1<<CSW_KNIFE ) | ( 1<<CSW_C4 ) )
// Teleport
#define FFADE_IN 0x0000
#define FFADE_OUT 0x0001
#define FFADE_MODULATE 0x0002
#define FFADE_STAYOUT 0x0004
// Cvar's
new g_iCvarFurienVipHasChosen,
g_iCvarCooldownTeleport,
g_iCvarTeleportRange,
g_iCvarNoRecoil,
g_iCvarGodmodeCountDown,
g_iCvarGodmodeTime;
new const g_szTag[ ] = "[ Furien VIP Menu ]";
new const SOUND_BLINK[ ] = { "weapons/flashbang-1.wav" };
// Teleport
const UNIT_SEC = 0x1000;
const FFADE = 0x0000;
const NORECOIL_WPN_BS = ( ( 1<<2 ) | ( 1<<CSW_HEGRENADE ) | ( 1<<CSW_SMOKEGRENADE ) | ( 1<<CSW_FLASHBANG ) | ( 1<<CSW_KNIFE ) | ( 1<<CSW_C4 ) );
new g_iUserHasChossen[ 33 ];
new bool:g_bUserHasTeleport[ 33 ];
new bool:g_bUserHasNoRecoil[ 33 ];
new bool:g_bUserHasGodmode[ 33 ];
new bool:g_bUserHasHe[ 33 ];
new bool:g_bUserHasHe2[ 33 ];
new ShockWave, BlueFlare2;
new GodMode_Countdown[ 33 ];
new Teleport_Cooldown[ 33 ];
new Float:LastMessage[ 33 ];
new WpnName[ 32 ];
new Float:cl_pushangle[ 33 ][ 3 ];
public plugin_init( ) {
register_plugin( PLUGIN, VERSION, "YONTU" );
register_clcmd( "teleport", "ClCmdUseTeleport" );
register_clcmd( "godmode", "ClCmdUseGodmode" );
register_clcmd( "say /vm", "ClCmdSayVipMenu" );
register_clcmd( "say_team /vm", "ClCmdSayVipMenu" );
register_event( "CurWeapon", "event_CurWeapon", "be", "1=1" );
register_event( "CurWeapon", "CurWeapon2", "be", "1=1" );
register_logevent( "fw_RoundStart", 2 , "1=Round_Start" );
RegisterHam( Ham_Spawn, "player", "Ham_PlayerSpawnPost", 1 );
g_iCvarFurienVipHasChosen = register_cvar( "f_vip_chose", "2" ); // DE CATE ORI SA ACCESE MENIUL
g_iCvarCooldownTeleport = register_cvar( "f_vip_teleport_cooldown", "20" );
g_iCvarTeleportRange = register_cvar( "f_vip_teleport_range", "123456789" );
g_iCvarNoRecoil = register_cvar( "f_vip_norecoil", "0.0" ); // NO RECOIL pentru ARME
g_iCvarGodmodeCountDown = register_cvar( "f_vip_godmode_cooldown", "20" );
g_iCvarGodmodeTime = register_cvar( "f_vip_godmode_time", "10" );
for( new i = 1; i <= CSW_P90; i++ ) {
if( !( NORECOIL_WPN_BS & ( 1<<i ) ) && get_weaponname( i, WpnName, charsmax( WpnName ) ) ) {
RegisterHam( Ham_Weapon_PrimaryAttack, WpnName, "fwd_primary_attack" );
RegisterHam( Ham_Weapon_PrimaryAttack, WpnName, "fwd_primary_attack_post", 1 );
}
}
}
public plugin_precache( ) {
ShockWave = precache_model( "sprites/shockwave.spr" );
BlueFlare2 = precache_model( "sprites/blueflare2.spr" );
}
public client_putinserver( id ) {
g_iUserHasChossen[ id ] = false;
g_bUserHasTeleport[ id ] = false;
g_bUserHasNoRecoil[ id ] = false;
g_bUserHasGodmode[ id ] = false;
g_bUserHasHe[ id ] = false;
g_bUserHasHe2[ id ] = false;
}
public client_disconnect( id ) {
g_iUserHasChossen[ id ] = false;
g_bUserHasTeleport[ id ] = false;
g_bUserHasNoRecoil[ id ] = false;
g_bUserHasGodmode[ id ] = false;
g_bUserHasHe[ id ] = false;
g_bUserHasHe2[ id ] = false;
}
public fw_RoundStart( ) {
new szPlayers[ 32 ], iNum;
get_players( szPlayers, iNum, "p" );
for( new i = 0; i < iNum; i++) {
g_iUserHasChossen[ szPlayers[ i ] ] = false;
g_bUserHasTeleport[ szPlayers[ i ] ] = false;
g_bUserHasNoRecoil[ szPlayers[ i ] ] = false;
g_bUserHasGodmode[ szPlayers[ i ] ] = false;
g_bUserHasHe[ szPlayers[ i ] ] = false;
g_bUserHasHe2[ szPlayers[ i ] ] = false;
}
}
public Ham_PlayerSpawnPost( id ) {
if( !is_user_alive( id ) || !is_user_connected( id ) ) return HAM_IGNORED;
g_iUserHasChossen[ id ] = false;
g_bUserHasTeleport[ id ] = false;
g_bUserHasNoRecoil[ id ] = false;
g_bUserHasGodmode[ id ] = false;
g_bUserHasHe[ id ] = false;
g_bUserHasHe2[ id ] = false;
return HAM_IGNORED;
}
public ClCmdSayVipMenu( id )
{
if( is_user_alive( id ) || !is_user_alive( id ) && get_user_flags( id ) & ACCESS_VIP )
{
if( g_iUserHasChossen[ id ] >= get_pcvar_num( g_iCvarFurienVipHasChosen ) )
{
set_hudmessage( random( 255 ), random( 255 ), random( 255 ), -1.0, 0.2, 1, 6.0, 5.0 );
show_hudmessage( id, "Ai folosit deja meniul de %d ori !", get_pcvar_num( g_iCvarFurienVipHasChosen ) );
return 1;
}
if( get_user_team( id ) == 1 ) {
set_task( 0.1, "ShowFurienVipMenu", id );
}
if( get_user_team( id ) == 2 ) {
set_task( 0.1, "ShowAfVipMenu", id );
}
}
else {
ColorChat( id, GREEN, "%s^x01 Nu esti membru^x03 VIP^x01. Doneaza !!!", g_szTag );
}
return 1;
}
public ShowFurienVipMenu( id ) {
new szMenu = menu_create( "\rFurien \yV\rI\wP\r Menu", "FurienMenuGiver" );
menu_additem( szMenu, "\y255\w HP\r &\y 255\w AP", "1" );
menu_additem( szMenu, "\yHe Grenade\w(\r 5 sec\w )", "2" );
menu_additem( szMenu, "\yGodmode\w(\r 20 sec\w )", "2" );
menu_display( id, szMenu, 0 );
return 0;
}
public ShowAfVipMenu( id ) {
new szMenu = menu_create( "\rFurien \yV\rI\wP\r Menu", "AfMenuGiver" );
menu_additem( szMenu, "\y255\w HP\r &\y 255\w AP", "1" );
menu_additem( szMenu, "\yHe Grenade\w(\r 10 sec\w )", "2" );
menu_additem( szMenu, "\yNo Recoil", "3" );
menu_additem( szMenu, "\yTeleport\w(\r 20 sec\w )", "2" );
menu_display( id, szMenu, 0 );
return 0;
}
public FurienMenuGiver( id, szMenu, item ) {
if( item == MENU_EXIT ) {
menu_destroy( szMenu );
return PLUGIN_HANDLED;
}
new data[ 6 ], szName[ 64 ];
new access, callback;
menu_item_getinfo( szMenu, item, access, data, charsmax( data ), szName, charsmax( szName ), callback );
new key = str_to_num( data );
switch( key ) {
// HP + AP
case 1: {
set_user_health( id, 250 );
set_user_armor( id, 250 );
ColorChat( id, GREEN, "%s^x01 Ti-ai ales^x03 250 HP^x01 &^x03 AP^x01!!!", g_szTag );
}
// HE GRENADE
case 2: {
ColorChat( id, GREEN, "%s^x01 Acum vei primi o grenada HE odata la^x03 5 secunde^x01 !", g_szTag );
g_iUserHasChossen[ id ] = true;
g_bUserHasHe2[ id ] = true;
}
// GODMODE
case 3: {
ColorChat( id, GREEN, "%s^x01 Acum poti deveni invincibil, apasand pe tasta^x03 V^x01 odata la^x03 20 secunde^x01 !", g_szTag );
client_cmd( id, "bind v godmode" );
g_iUserHasChossen[ id ] = true;
g_bUserHasGodmode[ id ] = true;
}
}
menu_destroy( szMenu );
return PLUGIN_HANDLED;
}
public HumansMenuGiver( id, szMenu, item ) {
if( item == MENU_EXIT ) {
menu_destroy( szMenu );
return PLUGIN_HANDLED;
}
new data[ 6 ], szName[ 64 ];
new access, callback;
menu_item_getinfo( szMenu, item, access, data, charsmax( data ), szName, charsmax( szName ), callback );
new key = str_to_num( data );
switch( key ) {
// HP + AP
case 1: {
set_user_health( id, 250 );
set_user_armor( id, 250 );
ColorChat( id, GREEN, "%s^x01 Ti-ai ales^x03 250 HP^x01 &^x03 AP^x01!!!", g_szTag );
}
// HE GRENADE
case 2: {
ColorChat( id, GREEN, "%s^x01 Acum vei primi o grenada HE odata la^x03 10 secunde^x01 !", g_szTag );
g_iUserHasChossen[ id ] = true;
g_bUserHasHe[ id ] = true;
}
// NO RECOIL
case 3: {
ColorChat( id, GREEN, "%s^x01 De acum inainte, tinta nu-ti va mai sari !", g_szTag );
g_iUserHasChossen[ id ] = true;
g_bUserHasNoRecoil[ id ] = true;
}
// TELEPORT
case 4: {
ColorChat( id, GREEN, "%s^x01 Acum te poti teleporta, apasand pe tasta^x03 X^x01 odata la^x03 20 secunde^x01 !", g_szTag );
client_cmd( id, "bind x teleport" );
g_iUserHasChossen[ id ] = true;
g_bUserHasTeleport[ id ] = true;
}
}
menu_destroy( szMenu );
return PLUGIN_HANDLED;
}
// TELEPORT
public ClCmdUseTeleport( id ) {
if( !is_user_alive( id ) || !g_bUserHasTeleport[ id ] )
return PLUGIN_CONTINUE;
if( Teleport_Cooldown[ id ] ) {
ColorChat( id, TEAM_COLOR, "^x04%s^x01 Puterea iti va reveni in^x03 %d secunde^x01.", g_szTag, Teleport_Cooldown[ id ] );
return PLUGIN_CONTINUE;
}
else if( teleport( id ) ) {
emit_sound( id, CHAN_STATIC, SOUND_BLINK, 1.0, ATTN_NORM, 0, PITCH_NORM );
remove_task( id );
Teleport_Cooldown[ id ] = get_pcvar_num( g_iCvarCooldownTeleport );
set_task( 1.0, "CountDown_Teleport", id, _, _, "b" );
set_hudmessage( 0, 100, 200, 0.05, 0.60, 0, 1.0, 1.1, 0.0, 0.0, -11 );
if( get_pcvar_num( g_iCvarCooldownTeleport ) != 1 ) {
show_hudmessage( id, "Puterea iti va reveni in %d secunde.", get_pcvar_num( g_iCvarCooldownTeleport ) );
}
if( get_pcvar_num( g_iCvarTeleportRange ) == 1) {
show_hudmessage( id, "Puterea iti va reveni in %d secunda.", get_pcvar_num( g_iCvarCooldownTeleport ) );
}
}
else {
ColorChat( id, TEAM_COLOR, "^x04%s^x03 Pozitia de teleportare nu e corecta.", g_szTag );
}
return PLUGIN_CONTINUE;
}
public CountDown_Teleport( id ) {
if( !is_user_alive( id ) || !g_bUserHasTeleport[ id ] ) {
remove_task( id );
Teleport_Cooldown[ id ] = 0;
return PLUGIN_HANDLED;
}
set_hudmessage( 0, 100, 200, 0.05, 0.60, 0, 1.0, 1.1, 0.0, 0.0, -11 );
if( is_user_alive( id ) && Teleport_Cooldown[ id ] == 1 ) {
Teleport_Cooldown[ id ] --;
show_hudmessage( id, "Puterea iti va reveni in %d secunda.", Teleport_Cooldown[ id ] );
}
if( is_user_alive( id ) && Teleport_Cooldown[ id ] > 1 ) {
Teleport_Cooldown[ id ] --;
show_hudmessage( id, "Puterea iti va reveni in %d secunde.", Teleport_Cooldown[ id ] );
}
if( Teleport_Cooldown[ id ] <= 0 ) {
show_hudmessage( id, "Ti-a revenit puterea !" );
remove_task( id );
Teleport_Cooldown[ id ] = 0;
}
return PLUGIN_HANDLED;
}
// GODMODE
public ClCmdUseGodmode( id ) {
if( !is_user_alive( id ) || !g_bUserHasGodmode[ id ] )
return PLUGIN_CONTINUE;
if( GodMode_Countdown[ id ] && LastMessage[ id ] < get_gametime( ) ) {
LastMessage[ id ] = get_gametime( ) + 1.0;
}
else if ( godmode( id ) ) {
GodMode_Countdown[ id ] = get_pcvar_num( g_iCvarGodmodeCountDown );
CountDown_GodMode( id );
}
return PLUGIN_CONTINUE;
}
public CountDown_GodMode( id ) {
if( !is_user_alive( id ) || !g_bUserHasGodmode[ id ] ) {
remove_task( id );
GodMode_Countdown[ id ] = 0;
return PLUGIN_HANDLED;
}
else if( GodMode_Countdown[ id ] > 0 ) {
set_hudmessage( 255, 255, 0, -1.0, 0.88, 0, 1.0, 1.1, 0.0, 0.0, 7 );
show_hudmessage( id, "Iti vei putea folosi puterea in %d secund%s !", GodMode_Countdown[ id ], GodMode_Countdown[ id ] == 1 ? "a" : "e" );
GodMode_Countdown[ id ]--;
set_task( 1.0, "CountDown_GodMode", id );
}
else if( GodMode_Countdown[ id ] <= 0 ) {
set_hudmessage( 255, 255, 0, -1.0, 0.88, 0, 1.0, 1.1, 0.0, 0.0, 7 );
show_hudmessage( id, "Iti poti folosi puterea din nou !" );
GodMode_Countdown [ id ] = 0;
}
return PLUGIN_HANDLED;
}
bool:godmode( id ) {
set_user_godmode( id, 1 );
set_task( get_pcvar_float( g_iCvarGodmodeTime ), "stopgodmode", id );
return true;
}
public stopgodmode( id ) {
set_user_godmode( id, 0 );
set_hudmessage( 255, 255, 0, -1.0, 0.88, 0, 1.0, 1.1, 0.0, 0.0, 7 );
show_hudmessage( id, "Nu mai ai esti invincibil !" );
return 1;
}
// TELEPORT
bool:teleport( id ) {
new Float:vOrigin[ 3 ], Float:vNewOrigin[ 3 ], Float:vNormal[ 3 ], Float:vTraceDirection[ 3 ], Float:vTraceEnd[ 3 ];
pev( id, pev_origin, vOrigin );
velocity_by_aim( id, get_pcvar_num( g_iCvarTeleportRange ), vTraceDirection );
xs_vec_add( vTraceDirection, vOrigin, vTraceEnd );
engfunc( EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0 );
new Float:flFraction;
get_tr2( 0, TR_flFraction, flFraction );
if( flFraction < 1.0 ) {
get_tr2( 0, TR_vecEndPos, vTraceEnd );
get_tr2( 0, TR_vecPlaneNormal, vNormal );
}
xs_vec_mul_scalar( vNormal, 40.0, vNormal );
xs_vec_add( vTraceEnd, vNormal, vNewOrigin );
if( is_player_stuck( id, vNewOrigin ) )
return false;
emit_sound( id, CHAN_STATIC, SOUND_BLINK, 1.0, ATTN_NORM, 0, PITCH_NORM );
tele_effect( vOrigin );
engfunc( EngFunc_SetOrigin, id, vNewOrigin );
tele_effect2( vNewOrigin );
return true;
}
stock is_player_stuck( id, Float:originF[ 3 ] ) {
engfunc( EngFunc_TraceHull, originF, originF, 0, ( pev( id, pev_flags ) & FL_DUCKING ) ? HULL_HEAD : HULL_HUMAN, id, 0 );
if( get_tr2( 0, TR_StartSolid ) || get_tr2( 0, TR_AllSolid ) || !get_tr2( 0, TR_InOpen ) )
return true;
return false;
}
stock tele_effect( const Float:torigin[ 3 ] ) {
new origin[ 3 ];
origin[ 0 ] = floatround( torigin[ 0 ] );
origin[ 1 ] = floatround( torigin[ 1 ] );
origin[ 2 ] = floatround( torigin[ 2 ] );
message_begin( MSG_PAS, SVC_TEMPENTITY, origin );
write_byte( TE_BEAMCYLINDER );
write_coord( origin[ 0 ] );
write_coord( origin[ 1 ] );
write_coord( origin[ 2 ] + 10 );
write_coord( origin[ 0 ] );
write_coord( origin[ 1 ] );
write_coord( origin[ 2 ] + 60 );
write_short( ShockWave );
write_byte( 0 );
write_byte( 0 );
write_byte( 3 );
write_byte( 60 );
write_byte( 0 );
write_byte( 255 );
write_byte( 255 );
write_byte( 255 );
write_byte( 255 );
write_byte( 0 );
message_end( );
}
stock tele_effect2( const Float:torigin[ 3 ] ) {
new origin[ 3 ];
origin[ 0 ] = floatround( torigin[ 0 ] );
origin[ 1 ] = floatround( torigin[ 1 ] );
origin[ 2 ] = floatround( torigin[ 2 ] );
message_begin( MSG_PAS, SVC_TEMPENTITY, origin );
write_byte( TE_BEAMCYLINDER );
write_coord( origin[ 0 ] );
write_coord( origin[ 1 ] );
write_coord( origin[ 2 ] + 10 );
write_coord( origin[ 0 ] );
write_coord( origin[ 1 ] );
write_coord( origin[ 2 ] + 60 );
write_short( ShockWave ); // Sprite
write_byte( 0 ); // Startfrate
write_byte( 0 ); // Framerate
write_byte( 4 ); // Life
write_byte( 80 ); // Width
write_byte( 0 ); // Amplitude
write_byte( 255 ); // Red
write_byte( 255 ); // Green
write_byte( 255 ); // Blue
write_byte( 255 ); // Brightness
write_byte( 0 ); // Speed
message_end( );
message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
write_byte( TE_SPRITETRAIL );
write_coord( origin[ 0 ] );
write_coord( origin[ 1 ] );
write_coord( origin[ 2 ] + 40 );
write_coord( origin[ 0 ] );
write_coord( origin[ 1 ] );
write_coord( origin[ 2 ] );
write_short( BlueFlare2 );
write_byte( 30 );
write_byte( 10 );
write_byte( 1 );
write_byte( 50 );
write_byte( 10 );
message_end( );
}
// NO RECOIL
public fwd_primary_attack( ent ) {
new id = pev( ent, pev_owner );
pev( id, pev_punchangle, cl_pushangle[ id ] );
return HAM_IGNORED;
}
public fwd_primary_attack_post( ent ) {
new id = pev( ent, pev_owner );
if( g_bUserHasNoRecoil[ id ] ) {
new Float:push[ 3 ];
pev( id, pev_punchangle, push );
xs_vec_sub( push, cl_pushangle[ id ], push );
xs_vec_mul_scalar( push, get_pcvar_float( g_iCvarNoRecoil ), push );
xs_vec_add( push, cl_pushangle[ id ], push );
set_pev( id, pev_punchangle, push );
return HAM_IGNORED;
}
return HAM_IGNORED;
}
// HE DRENADE
public grenade_throw( id, greindex, wId ) {
if( g_bUserHasHe2[ id ] ) {
if( wId == 4 ) {
set_task( 5.0, "give_he", id, _, _, "a", 1 );
return PLUGIN_CONTINUE;
}
}
if( g_bUserHasHe[ id ] ) {
if( wId == 4 ) {
set_task( 10.0, "give_he2", id, _, _, "a", 1 );
return PLUGIN_CONTINUE;
}
}
return PLUGIN_CONTINUE;
}
public give_he( index ) {
give_item( index, "weapon_hegrenade" );
return PLUGIN_CONTINUE;
}
public give_he2( index ) {
give_item( index, "weapon_hegrenade" );
return PLUGIN_CONTINUE;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/