/*
- Acest plugin are in el un sistem de puncte si cateva bonusuri
> Primesti cate 2 puncte pentru un kill normal
> Primesti cate 4 puncte pentru un kill cu Headshot
> Primesti cate 10 hp la fiecare kill normal
> Primesti cate 20 hp la fiecare kill cu Headshot
- De asemenea pe cutit vei avea viteza care este limitata la 400
- In curand si alte bonusuri si poate un meniu de obiecte.
-------------------------
----- * Modules * -------
-------------------------
- Cstrike;
- Fakemeta;
- Hamsandwich;
- csx
- fun
- engine
-------------------------
------- * Credits * -----
-------------------------
- sDs|Aragon* - sistemul avansat de salvare al punctelor;
- YONTU - sistemul de puncte
- Shalfey - sistemul de hp
- v3x - viteza pe cutit
- ConnorMcLeod - Refill ammo on kill
- KronoS # GG - Bonus HE la un interval de timp
- Igoreso - Pentru ascunderea hud-ului din joc.
-------------------------
------- * Cvars * -------
-------------------------
amx_kill_points "2" - Numarul de puncte primit atunci cand omori un jucator
amx_hs_points "4" - Numarul de puncte primit atunci cand omori un jucator cu hs
amx_hp_bonus "10" - Numarul de hp primit atunci cand omori un jucator
amx_hhp_bonus "20" - Numarul de hp primit atunci cand omori un jucator cu hs
amx_hp_max "500" - Numarul maxim de hp admis pe server
knife_speed "630" - Limita de viteza atunci cand ai cutitul
amx_maxjumps "4" - Numarul de sarituri multiple admis
amx_hud_hide_cross_ammo_weaponlist "0" - Ascunde Crosshair, muni?ie ?i lista de arme
amx_hud_hide_flashlight "1" - Ascunde lanterna
amx_hud_hide_all "0" - Ascunde tot, dar nu este recomandat
amx_hud_hide_radar_health_armor "1" - Ascunde radar, hp, armura
amx_hud_hide_timer "1" - Ascunde timpul
amx_hud_hide_money "0" - Ascunde banii
amx_hud_hide_crosshair "0" - Ascunde tinta
amx_hud_draw_newcross "0" - Nu stiu ce face si nu este testat
/// Legenda
/// 0 = Dezactivat
/// 1 = Activat
INSTRUCTIUNI
- Cvarulile se vor baga in amxx.cfg, dar daca doriti puteti sa nu le bagati merge si fara
- Viata, Radarul si armura sunt ascunse, ma refer la cele din joc, in schimb sunt afisate intrun hud.
Instructiuni HUD
-------------------
Hud-ul este situat in stanga, sus, colt.
In hud sunt afisate mai multe lucruri, care sunt:
- Nickul
- Rankul
---------
- Viata
- Armura
---------
- Punctele
- Fragurile
- Omorurile
Iar cand nu mai ai HE se afiseaza in cat timp primesti alt HE, jos unde era situat Viata si Armura din joc.
*/
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <csx>
#include <cstrike>
#include <fun>
#include <engine>
#include <colorchat>
#define PLUGIN "bonus_ultimate"
#define VERSION "1.0"
#define AUTHOR "miber"
#define m_iId 43
#define m_iPrimaryAmmoType 49
#define m_fInReload 54
#define m_flNextAttack 83
#define m_pActiveItem 373
#define m_rgAmmo_Player_Slot0 376
// Hides Crosshair, Ammo, Weapons List ( CAL in code ). Players won't be able to switch weapons using list so it's not recommended
#define HUD_HIDE_CAL (1<<0)
// Hides Flashlight, but adds Crosshair ( Flash in code )
#define HUD_HIDE_FLASH (1<<1)
// Hides all. Equal to "hud_draw 0", it removes everything (amx's menus TOO), so it's hardly not recommended.
//#define HUD_HIDE_ALL (1<<2)
// Hides Radar, Health & Armor, but adds Crosshair ( RHA in code )
#define HUD_HIDE_RHA (1<<3)
// Hides Timer
#define HUD_HIDE_TIMER (1<<4)
// Hides Money
#define HUD_HIDE_MONEY (1<<5)
// Hides Crosshair ( Cross in code )
#define HUD_HIDE_CROSS (1<<6)
// Draws additional Crosshair, NOT tested.
//#define HUD_DRAW_CROSS (1<<7)
#define IsPlayer(%1) ( 1 <= %1 <= g_iMaxPlayers )
const NOCLIP_WPN_BS = ((1<<CSW_HEGRENADE)|(1<<CSW_SMOKEGRENADE)|(1<<CSW_FLASHBANG)|(1<<CSW_KNIFE)|(1<<CSW_C4))
new g_iUserPoints[ 33 ];
new File[ 128 ];
new jumpnum[33] = 0
new kill_points
new hs_points
new SyncHudMessage
new hp_add
new hp_hs_add
new hp_max
new nHp_add
new nHp_max
new nKiller_hp
new g_iMaxPlayers
new bool:dojump[33] = false
new bool:speed = false
new g_msgHideWeapon
new bool:g_bHideCAL
new bool:g_bHideFlash
//new bool:g_bHideAll
new bool:g_bHideRHA
new bool:g_bHideTimer
new bool:g_bHideMoney
new bool:g_bHideCross
//new bool:g_bDrawCross
new g_cvarHideCAL
new g_cvarHideFlash
//new g_cvarHideAll
new g_cvarHideRHA
new g_cvarHideTimer
new g_cvarHideMoney
new g_cvarHideCross
//new g_cvarDrawCross
new stats[ 8 ]
new body[ 8 ]
new g_Delay, g_contor[ 33 ];
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
kill_points = register_cvar( "amx_kill_points", "2" );
hs_points = register_cvar( "amx_hs_points", "4" );
hp_add = register_cvar( "amx_hp_bonus", "10");
hp_hs_add= register_cvar("amx_hhp_bonus", "20" );
hp_max= register_cvar( "amx_hp_max", "500" );
g_msgHideWeapon = get_user_msgid("HideWeapon")
g_cvarHideCAL = register_cvar("amx_hud_hide_cross_ammo_weaponlist", "0")
g_cvarHideFlash = register_cvar("amx_hud_hide_flashlight", "1")
// g_cvarHideAll = register_cvar("amx_hud_hide_all", "0") // NOT RECOMMENDED
g_cvarHideRHA = register_cvar("amx_hud_hide_radar_health_armor", "1")
g_cvarHideTimer = register_cvar("amx_hud_hide_timer", "1")
g_cvarHideMoney = register_cvar("amx_hud_hide_money", "0")
g_cvarHideCross = register_cvar("amx_hud_hide_crosshair", "0")
// g_cvarDrawCross = register_cvar("amx_hud_draw_newcross", "0")
register_cvar("knife_speed","630");
register_cvar("amx_maxjumps", "4");
RegisterHam(Ham_Spawn, "player", "Ham_PlayerSpawned_Post", 1 );
RegisterHam(Ham_Killed, "player", "Player_Killed", 1)
g_iMaxPlayers = get_maxplayers();
register_event( "DeathMsg", "points", "a" );
register_event("CurWeapon","check_speed","be")
register_event("ResetHUD", "onResetHUD", "c")
register_logevent("new_round",2,"1=Round_Start")
register_message(g_msgHideWeapon, "msgHideWeapon")
g_Delay = register_cvar( "freehe_delay", "10" );
set_cvar_num("mp_freezetime",0)
SyncHudMessage = CreateHudSyncObj( );
new DataDir[ 64 ];
get_datadir( DataDir, 63 );
format( File, 127, "%s/ultimate_plugin.dat", DataDir );
HudApplyCVars()
}
public plugin_natives( )
{
register_native( "get_user_points", "native_get_user_points", 1 );
register_native( "set_user_points", "native_set_user_points", 1 );
}
public points() {
new nKiller = read_data( 1 );
new nVictim = read_data( 2 );
new nHeadshot = read_data(3);
if( !is_user_connected( nKiller ) || !is_user_connected( nVictim ) ) {
return;
}
if( nKiller == nVictim ) {
return;
}
if( nHeadshot ) {
nHp_add = get_pcvar_num( hp_hs_add );
nHp_max = get_pcvar_num( hp_max );
nKiller_hp = get_user_health( nKiller );
nKiller_hp += nHp_add
if( nKiller_hp > nHp_max) nKiller_hp = nHp_max
set_user_health(nKiller, nKiller_hp)
g_iUserPoints[ nKiller ] += get_pcvar_num(hs_points);
new name[32]
get_user_name(nVictim,name,31)
ColorChat( nKiller, RED, "^x04[Bonus]^x03 You have got^x04 %i^x03 points and^x04 %i^x03 hp for killing^x04 %s^x03 with a headshot", get_pcvar_num(hs_points), nHp_add, name)
}
else
{
nHp_add = get_pcvar_num( hp_add );
nHp_max = get_pcvar_num( hp_max );
nKiller_hp = get_user_health( nKiller );
nKiller_hp += nHp_add
if( nKiller_hp > nHp_max) nKiller_hp = nHp_max
set_user_health(nKiller, nKiller_hp)
g_iUserPoints[ nKiller ] += get_pcvar_num(kill_points);
new name[32]
get_user_name(nVictim,name,31)
ColorChat( nKiller, RED, "^x04[Bonus]^x03 You have got^x04 %i^x03 points and^x04 %i^x03 hp for killing^x04 %s", get_pcvar_num(kill_points), nHp_add, name)
}
}
public ShowHud( id ) {
if( is_user_connected( id ) && is_user_alive( id ) && ( get_user_team( id ) == 1 || get_user_team( id ) == 2 ) ) {
new rank_pos = get_user_stats( id, stats, body )
new rank_max = get_statsnum( )
new name[32]
get_user_name(id,name,31)
set_hudmessage(255, 255, 255, 0.03, 0.03, 1, 0.5, 15.0, 2.0, 2.0, -1)
ShowSyncHudMsg( id, SyncHudMessage, "Name: %s^nYour ranks is: %d of %d^n^nHP: %d^nAP: %d^n^nPoints: %d^nFrags: %d^nDeaths: %d",name, rank_pos, rank_max, get_user_health( id ), get_user_armor( id ), g_iUserPoints[ id ], get_user_frags( id ),get_user_deaths( id ) );
}
}
HudApplyCVars()
{
g_bHideCAL = bool:get_pcvar_num(g_cvarHideCAL)
g_bHideFlash = bool:get_pcvar_num(g_cvarHideFlash)
// g_bHideAll = bool:get_pcvar_num(g_cvarHideAll)
g_bHideRHA = bool:get_pcvar_num(g_cvarHideRHA)
g_bHideTimer = bool:get_pcvar_num(g_cvarHideTimer)
g_bHideMoney = bool:get_pcvar_num(g_cvarHideMoney)
g_bHideCross = bool:get_pcvar_num(g_cvarHideCross)
// g_bDrawCross = bool:get_pcvar_num(g_cvarDrawCross)
}
GetHudHideFlags()
{
new iFlags
if( g_bHideCAL )
iFlags |= HUD_HIDE_CAL
if( g_bHideFlash )
iFlags |= HUD_HIDE_FLASH
// if( g_bHideAll )
// iFlags |= HUD_HIDE_ALL
if( g_bHideRHA )
iFlags |= HUD_HIDE_RHA
if( g_bHideTimer )
iFlags |= HUD_HIDE_TIMER
if( g_bHideMoney )
iFlags |= HUD_HIDE_MONEY
if( g_bHideCross )
iFlags |= HUD_HIDE_CROSS
// if( g_bDrawCross )
// iFlags |= HUD_DRAW_CROSS
return iFlags
}
public new_round()
{
speed = false
new ft = get_cvar_num("mp_freezetime")
set_task(float(ft),"allow_speed",0)
return PLUGIN_CONTINUE
}
public onResetHUD(id)
{
HudApplyCVars()
new iHideFlags = GetHudHideFlags()
if(iHideFlags)
{
message_begin(MSG_ONE, g_msgHideWeapon, _, id)
write_byte(iHideFlags)
message_end()
}
}
public msgHideWeapon()
{
new iHideFlags = GetHudHideFlags()
if(iHideFlags)
set_msg_arg_int(1, ARG_BYTE, get_msg_arg_int(1) | iHideFlags)
}
public Func_GiveHe( id )
{
if ( !is_user_alive( id ) || cs_get_user_bpammo( id , CSW_HEGRENADE ) > 0 )
return;
if ( g_contor[ id ] > 0 )
{
set_hudmessage(255, 255, 255, 0.03, 0.93, 1, 1.0, 1.0)
show_hudmessage( id, "You will receive a free HE in %i seconds.", g_contor[ id ] );
g_contor[ id ]--;
return;
}
else
{
set_hudmessage(255, 255, 255, 0.03, 0.93, 1, 1.0, 1.0)
show_hudmessage( id, "You receive a free HE!" );
g_contor[ id ] = get_pcvar_num( g_Delay );
give_item id, "weapon_hegrenade" ;
}
}
public client_PreThink(id)
{
if(!is_user_alive(id)) return PLUGIN_CONTINUE
new nbut = get_user_button(id)
new obut = get_user_oldbutton(id)
if((nbut & IN_JUMP) && !(get_entity_flags(id) & FL_ONGROUND) && !(obut & IN_JUMP))
{
if(jumpnum[id] < get_cvar_num("amx_maxjumps"))
{
dojump[id] = true
jumpnum[id]++
return PLUGIN_CONTINUE
}
}
if((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
{
jumpnum[id] = 0
return PLUGIN_CONTINUE
}
return PLUGIN_CONTINUE
}
public client_PostThink(id)
{
if(!is_user_alive(id)) return PLUGIN_CONTINUE
if(dojump[id] == true)
{
new Float:velocity[3]
entity_get_vector(id,EV_VEC_velocity,velocity)
velocity[2] = random_float(265.0,285.0)
entity_set_vector(id,EV_VEC_velocity,velocity)
dojump[id] = false
return PLUGIN_CONTINUE
}
return PLUGIN_CONTINUE
}
public Ham_PlayerSpawned_Post( id ) {
if( is_user_connected( id ) && is_user_alive( id ) ) {
set_task( 1.0, "ShowHud", id, _, _, "b" );
}
}
public allow_speed()
{
speed = true
return PLUGIN_HANDLED
}
public check_speed(id)
{
// If the speed var is false..
if(!speed) {
// Stop the function
return PLUGIN_HANDLED
}
// Get the users weapon
new clip, ammo
new weapon = get_user_weapon(id,clip,ammo)
/*
// Get the users team
new CsTeams:team = cs_get_user_team(id)
*/
switch(weapon)
{
case CSW_KNIFE:
{
// Set the speed for the knife
set_user_maxspeed(id,float(get_cvar_num("knife_speed")))
}
default:
{
// If nothing, set normal rendering
set_user_rendering(id,kRenderFxNone,255,255,255,kRenderNormal,255)
}
}
return PLUGIN_CONTINUE
}
public Player_Killed(nVictim, nKiller, nGib)
{
if(IsPlayer(nKiller) && is_user_alive(nKiller))
{
new iWeapon = get_pdata_cbase(nKiller, m_pActiveItem)
if( iWeapon > 0
&& !( NOCLIP_WPN_BS & (1<<get_pdata_int(iWeapon, m_iId, 4)) ) )
{
new Float:flNextAttack = get_pdata_float(nKiller, m_flNextAttack, 5)
set_pdata_float(nKiller, m_flNextAttack, -0.001, 5)
new iButton = pev(nKiller, pev_button)
set_pev(nKiller, pev_button, iButton & ~(IN_ATTACK|IN_ATTACK2|IN_RELOAD))
set_pdata_int(iWeapon, m_fInReload, 1, 4)
ExecuteHamB(Ham_Item_PostFrame, iWeapon)
set_pdata_int(nKiller, m_rgAmmo_Player_Slot0 + get_pdata_int(iWeapon, m_iPrimaryAmmoType, 4), 90)
set_pdata_float(nKiller, m_flNextAttack, flNextAttack, 5)
set_pev(nKiller, pev_button, iButton)
}
}
}
public native_get_user_points( id ) {
return g_iUserPoints[ id ];
}
public native_set_user_points( id, points ) {
g_iUserPoints[ id ] = points;
}
public client_putinserver( id ) {
LoadUserPoints( id );
jumpnum[id] = 0
dojump[id] = false
g_contor[ id ] = 0;
set_task 1.0, "Func_GiveHe", id, _, _, "b" ;
}
public client_disconnect( id ) {
SaveUserPoints( id );
jumpnum[id] = 0
dojump[id] = false
}
public SaveUserPoints( id ) {
new Name[ 32 ];
get_user_name( id, Name, 31 );
static Data[ 1024 ];
formatex( Data, sizeof( Data ) - 1, "^"%i^"", g_iUserPoints[ id ] );
new Save[ 512 ];
format( Save, 511, "^"%s^" %s", Name, Data );
new Line[ 128 ], Linie, IsPlayer = false, Arg1[ 32 ];
new FileOpen = fopen( File, "rt" );
while( !feof( FileOpen ) ) {
fgets( FileOpen, Line, 127 );
trim( Line );
parse( Line, Arg1, 31 );
if( equali( Arg1, Name ) ) {
write_file( File, Save, Linie );
IsPlayer = true;
break;
}
Linie++;
}
fclose( FileOpen );
if( !IsPlayer ) {
write_file( File, Save, -1 );
}
}
public LoadUserPoints( id ) {
new Name[ 32 ];
get_user_name( id, Name, 31 );
new Line[ 128 ], IsPlayer = false, Arg1[ 32 ], Arg2[ 32 ];
new FileOpen = fopen( File, "rt" );
while( !feof( FileOpen ) ) {
fgets( FileOpen, Line, 127 );
trim( Line );
parse( Line, Arg1, 31, Arg2, 31 );
if( equali( Arg1, Name ) ) {
g_iUserPoints[ id ] = str_to_num( Arg2 );
IsPlayer = true;
break;
}
}
fclose( FileOpen );
if( !IsPlayer ) {
g_iUserPoints[ id ] = 1;
}
}
stock get_name( id ) {
new szName[ 32 ];
get_user_name( id, szName, sizeof ( szName ) -1 );
return szName;
}