PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>
#include <fun>
#include <engine>
#include <hamsandwich>
#include <nfvault>
#define LEVELS 9
#define TASK_CLEAR_KILL 100
#define boxsound 9
#define boxmessage 9
#define NUM_OF_LEVELS 13
// Cached vars
new g_iMaxPlayers, g_msgCurWeapon
// Cvars
new pcvar_enable, pcvar_menu, knifeenable, killstreaktype, pcvar_xp
// Menu
new Menu
// Other stuff
new levels[ 9 ] = { 2, 5, 6, 9, 10, 13, 15, 18, 21 }
new kills[ 33 ] = { 0,... }
new deaths[ 33 ] = { 0,... }
new kill[ 33 ][ 24 ]
new onetime[33]
new g_PlayerXP[33];
new g_PlayerLevel[33];
// Nfvault stuff
new VaultFile[128]
new AuthID[33][25]
new const LEVEL[NUM_OF_LEVELS] = {
200,
400,
800,
1600,
3200,
6400,
12800,
25600,
51200,
100000,
100500,
103000,
150560
}
// Weapon mdl
new const VIEW_MODEL_CT[ ] = "models/boxing_mod/v_box_blue.mdl"
new const VIEW_MODEL_TT[ ] = "models/boxing_mod/v_box_red.mdl"
new const PLAYER_MODEL[ ] = "models/boxing_mod/p_knife.mdl"
// Sounds
new const boxing_sounds[ ][ ] =
{
"boxing_sound/boxing_deploy1.wav",
"boxing_sound/boxing_hit1.wav",
"boxing_sound/boxing_hit2.wav",
"boxing_sound/boxing_hit3.wav",
"boxing_sound/boxing_hit4.wav",
"boxing_sound/boxing_hitwall1.wav",
"boxing_sound/boxing_slash1.wav",
"boxing_sound/boxing_slash2.wav",
"boxing_sound/boxing_stab.wav"
}
new const oldknife_sounds[ ][ ] =
{
"weapons/knife_deploy1.wav",
"weapons/knife_hit1.wav",
"weapons/knife_hit2.wav",
"weapons/knife_hit3.wav",
"weapons/knife_hit4.wav",
"weapons/knife_hitwall1.wav",
"weapons/knife_slash1.wav",
"weapons/knife_slash2.wav",
"weapons/knife_stab.wav"
}
new const boxsounds[ boxsound ][ ] =
{
"boxing_sound/boxbrutal.wav",
"boxing_sound/boxmaster.wav",
"boxing_sound/boxawesome.wav",
"boxing_sound/boxmonster.wav",
"boxing_sound/boxultra.wav",
"boxing_sound/boxultimate.wav",
"boxing_sound/boxcombreaker.wav",
"boxing_sound/boxfatality.wav",
"boxing_sound/boxgameover.wav"
}
// Messages
new boxmessages[ boxmessage ][ ] =
{
"%s: Brutal Combo!",
"%s: Master Combo!",
"%s: Awesome Combo!",
"%s: Monster Combo!",
"%s: Ultra Combo!",
"%s: Ultimate Combo!",
"%s: Combo Breaker!",
"%s: Fatality!",
"%s: Game Over!"
}
public plugin_init( )
{
// Plugin info
register_plugin( "Boxing Mod", "2.0", "Zapdos1" )
register_cvar("Boxing Mod" , "2.0", FCVAR_SERVER|FCVAR_PROTECTED)
// Cvars
pcvar_enable = register_cvar( "amx_boxing", "1" )
pcvar_menu = register_cvar( "amx_boxmenu", "1" )
knifeenable = register_cvar( "ut_killstreak_knife","1" )
killstreaktype = register_cvar( "ut_killstreak_advanced", "3" )
pcvar_xp = register_cvar("amx_per_kill", "80")
// Menu
register_clcmd( "say /boxmenu", "abrir_menu" )
register_clcmd( "say boxmenu", "abrir_menu" )
register_clcmd( "say_team /boxmenu", "abrir_menu" )
register_clcmd( "say_team boxmenu", "abrir_menu" )
register_clcmd( "lastinv", "abrir_menu" )
// Events
register_event( "CurWeapon", "event_CurWeapon", "be","1=1" )
register_event( "HLTV", "event_RoundStart", "a", "1=0", "2=0" )
register_event( "DeathMsg", "event_death", "a" )
register_event("DeathMsg", "DeathMsg", "a")
// Ham fwd
RegisterHam( Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1 )
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
// Fakemeta fwd
register_forward( FM_EmitSound, "fw_EmitSound" )
// Message task
set_task(100.0, "mensaje_menu")
set_task(80.0, "mensajebienvenida")
// Lang
register_dictionary( "boxing.txt" )
// Nfvault
register_forward(FM_Sys_Error, "SaveLevels")
register_forward(FM_GameShutdown, "SaveLevels")
register_forward(FM_ServerDeactivate , "SaveLevels")
register_forward(FM_ChangeLevel, "SaveLevels")
nfv_file("DataLevels", VaultFile, charsmax(VaultFile));
// Cached vars
g_iMaxPlayers = get_maxplayers( )
g_msgCurWeapon = get_user_msgid( "CurWeapon" )
// Menu
Menu = menu_create( "\yBoxing Menu", "mostrar_menu")
menu_additem( Menu, "\wHealth - Need 3 frags" , "1", 0 )
menu_additem( Menu, "\rArmor - Need 6 frags" , "2", 0 )
menu_additem( Menu, "\yGravity - Need 12 frags" , "3", 0 )
menu_additem( Menu, "\rSilent Walk - Need 18 frags" , "4", 0 )
menu_additem( Menu, "\yFaster Speed - Need 21 frags" , "5", 0 )
menu_additem( Menu, "\yGlow - Need 21 frags" , "6", 0 )
menu_additem( Menu, "\rAdmin Menu" , "7", 0 )
menu_setprop( Menu, MPROP_EXITNAME, "Exit" )
menu_setprop( Menu, MPROP_EXIT, MEXIT_ALL )
}
public plugin_precache( )
{
precache_model( VIEW_MODEL_CT )
precache_model( VIEW_MODEL_TT )
precache_model( PLAYER_MODEL )
for( new i = 0; i < sizeof boxing_sounds; i++ )
precache_sound( boxing_sounds[ i ] )
for( new i = 0; i < sizeof boxsounds; i++ )
precache_sound( boxsounds[ i ] )
}
public event_RoundStart( )
{
if( get_pcvar_num( pcvar_enable ) )
{
for( new i = 1; i <= g_iMaxPlayers; i++ )
{
if( is_user_connected( i ) )
reset_user_knife( i )
}
}
}
public plugin_cfg()
{
new cfgboxing[32]
get_configsdir(cfgboxing, sizeof cfgboxing - 1);
server_cmd("exec %s/boxing.cfg", cfgboxing)
}
public event_CurWeapon(id)
{
if(get_pcvar_num(pcvar_enable))
{
new weaponID = read_data(2)
if(weaponID == CSW_KNIFE)
{
if(get_user_team(id) == 2)
{
entity_set_string(id, EV_SZ_viewmodel, VIEW_MODEL_CT)
entity_set_string(id, EV_SZ_weaponmodel, PLAYER_MODEL)
}
else if(get_user_team(id) == 1)
{
entity_set_string(id, EV_SZ_viewmodel, VIEW_MODEL_TT)
entity_set_string(id, EV_SZ_weaponmodel, PLAYER_MODEL)
}
}
else
reset_user_knife(id)
}
}
public fw_EmitSound(id, channel, const sound[])
{
if(get_pcvar_num(pcvar_enable))
for(new i = 0; i < sizeof boxing_sounds; i++)
{
if(equal(sound, oldknife_sounds[i]))
{
emit_sound(id, channel, boxing_sounds[i], 1.0, ATTN_NORM, 0, PITCH_NORM)
return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED
}
stock reset_user_knife( id )
{
if(get_pcvar_num(pcvar_enable))
{
engclient_cmd( id, "weapon_knife" )
emessage_begin( MSG_ONE, g_msgCurWeapon, _, id )
ewrite_byte( 1 )
ewrite_byte( CSW_KNIFE )
ewrite_byte( -1 )
emessage_end( )
}
}
public DeathMsg()
{
if (!get_pcvar_num(pcvar_enable))
return;
new attacker = read_data(1)
if(g_PlayerLevel[attacker] == NUM_OF_LEVELS)
return;
g_PlayerXP[attacker] += get_pcvar_num(pcvar_xp)
if(g_PlayerXP[attacker] >= LEVEL[g_PlayerLevel[attacker]])
{
++g_PlayerLevel[attacker];
set_hudmessage(255, 255, 255, -1.0, -1.0, 0, 6.0, 1.0)
show_hudmessage(attacker, "^n[Level]: %d ^n[Exp]: %d", g_PlayerLevel[attacker], g_PlayerXP[attacker])
}
}
public abrir_menu( id )
{
if( get_pcvar_num( pcvar_enable ) )
{
if( get_pcvar_num( pcvar_menu ) )
{
if( is_user_alive( id ) )
menu_display( id, Menu, 0 )
}
else
client_print( id, print_chat, "[AMXX] %L", LANG_PLAYER, "DISABLE_MESSAGE" )
}
}
public mostrar_menu( id, Menu, item )
{
if ( item == MENU_EXIT )
return PLUGIN_HANDLED
new iData[ 6 ]
new iAccess
new iCallback
new iName[ 64 ]
menu_item_getinfo( Menu, item, iAccess, iData, 5, iName, 63, iCallback )
switch (str_to_num(iData))
{
case 1:
{
if(get_user_frags(id) >= 3)
{
if(onetime[id] == 0)
{
set_user_health(id, get_user_health(id) + 50)
onetime[id] = 1
}
else if(onetime[id] >= 1)
{
client_print(id, print_chat, "[Boxing Mod] %L ", id, "ONE_TIME")
return PLUGIN_HANDLED;
}
}
else
{
client_print(id, print_chat, "[Boxing Mod] %L 3 frags!", id, "LEVEL_MESSAGE")
}
}
case 2:
{
if(get_user_frags(id) >= 6)
{
if(onetime[id] == 0)
{
set_user_armor(id, get_user_armor(id) + 50)
onetime[id] = 1
}
else if(onetime[id] >= 1)
{
client_print(id, print_chat, "[Boxing Mod] %L", id, "ONE_TIME")
return PLUGIN_HANDLED
}
}
else
{
client_print(id, print_chat, "[Boxing Mod] %L 6 frags!", id, "LEVEL_MESSAGE")
}
}
case 3:
{
if(get_user_frags(id) >= 12)
{
if(onetime[id] == 0)
{
set_user_gravity(id, get_user_gravity(id) - 0.5)
onetime[id] = 1
}
else if(onetime[id] >= 1)
{
client_print(id, print_chat, "[Boxing Mod] %L", id, "ONE_TIME")
return PLUGIN_HANDLED
}
}
else
{
client_print(id, print_chat, "[Boxing Mod] %L 12 frags!", id, "LEVEL_MESSAGE")
}
}
case 4:
{
if(get_user_frags(id) >= 18)
{
if(onetime[id] == 0)
{
set_user_footsteps (id, 1)
onetime[id] = 1
}
else if(onetime[id] >= 1)
{
client_print(id, print_chat, "[Boxing Mod] %L", id, "ONE_TIME")
return PLUGIN_HANDLED
}
}
else
{
client_print(id, print_chat, "[Boxing Mod] %L 18 frags!", id, "LEVEL_MESSAGE")
}
}
case 5:
{
if(get_user_frags(id) >= 21)
{
if(onetime[id] == 0)
{
set_user_maxspeed(id, 270.0)
onetime[id] = 1
}
else if(onetime[id] >= 1)
{
client_print(id, print_chat, "[Boxing Mod] %L", id, "ONE_TIME")
return PLUGIN_HANDLED
}
}
else
{
client_print(id, print_chat, "[Boxing Mod] %L 21 frags!", id, "LEVEL_MESSAGE")
}
}
case 6:
{
if(get_user_frags(id) >= 21)
{
if(onetime[id] == 0)
{
if(cs_get_user_team(id) == CS_TEAM_T)
{
set_user_rendering (id, kRenderFxGlowShell, 255, 0, 0, kRenderTransAlpha, 255)
set_user_health(id, get_user_health(id) + 100)
set_user_armor(id, get_user_armor(id) + 100)
}
if(cs_get_user_team(id) == CS_TEAM_CT)
{
set_user_rendering (id, kRenderFxGlowShell, 0, 255, 0, kRenderTransAlpha, 255)
set_user_health(id, get_user_health(id) + 100)
set_user_armor(id, get_user_armor(id) + 100)
}
onetime[id] = 1
}
else if(onetime[id] >= 1)
{
client_print(id, print_chat, "[Boxing Mod] %L", id, "ONE_TIME")
return PLUGIN_HANDLED
}
}
else
{
client_print(id, print_chat, "[Boxing Mod] %L 21 frags!", id, "LEVEL_MESSAGE")
}
}
case 7:
{
if(get_user_flags(id) & ADMIN_KICK)
{
client_cmd(id, "amxmodmenu")
}
}
}
return PLUGIN_HANDLED
}
public mensaje_menu( )
{
if(get_pcvar_num(pcvar_enable))
{
client_print( 0, print_chat, "[Boxing Mod] %L", LANG_PLAYER, "MENU_TO" )
client_print( 0, print_chat, "[Boxing Mod] %L", LANG_PLAYER, "MENU_MESSAGE" )
}
}
public mensajebienvenida( )
{
if(get_pcvar_num(pcvar_enable))
{
client_print( 0, print_chat, "[Boxing Mod] %L", LANG_PLAYER, "WELCOME_MESSAGE" )
client_print( 0, print_chat, "[Boxing Mod] %L", LANG_PLAYER, "CREDIT_MESSAGE" )
}
}
public event_death( id )
{
static Killer; Killer = read_data( 1 )
static Victim; Victim = read_data( 2 )
new weapon[ 24 ]
read_data( 4, weapon, 23 )
if(get_pcvar_num(pcvar_enable))
{
if( weapon[ 0 ] == 'k' && get_pcvar_num( knifeenable ) == 1 )
{
static KillerName[ 32 ], VictimName[ 32 ]
get_user_name( Victim, VictimName, 31 )
get_user_name( Killer, KillerName, 31 )
set_hudmessage( 255, 0, 255, -1.0, 0.30, 0, 6.0, 6.0 )
show_hudmessage( 0, ( boxmessages[ random_num ( 0,2 ) ] ), KillerName, VictimName )
client_cmd(0,"spk %s", random_num( 0, boxsound-1 ) )
}
kills[ Killer ] += 1
kills[ Victim ] = 0
deaths[ Killer ] = 0
deaths[ Victim ] += 1
for ( new i = 0; i < LEVELS; i++ )
{
if ( kills[ Killer ] == levels[ i ] )
{
announce( Killer, i )
return PLUGIN_CONTINUE
}
}
}
return PLUGIN_CONTINUE
}
announce( killer, level )
{
if( (get_pcvar_num( killstreaktype ) <= 0 ) || get_pcvar_num( killstreaktype ) > 3)
return PLUGIN_HANDLED
static name[ 32 ]
get_user_name( killer, name, 31 )
if(get_pcvar_num(pcvar_enable))
{
set_hudmessage( random( 256 ), random( 256 ), random( 256 ), 0.05, 0.65, 2, 0.02, 6.0, 0.01, 0.1, 2 )
switch( get_pcvar_num( killstreaktype ) )
{
case 1: show_hudmessage( 0, boxmessages[ level ], name )
case 2: client_cmd( 0, "spk %s", boxsounds[ level ] )
case 3:
{
show_hudmessage( 0, boxmessages[ level ], name )
client_cmd( 0, "spk %s", boxsounds[ level ] )
}
}
}
return PLUGIN_CONTINUE
}
public client_connect( id )
{
kills[ id ] = 0
deaths[ id ] = 0
if(!is_user_bot(id))
Load(id)
}
public client_disconnect(id)
{
if(!is_user_bot(id))
Save(id)
}
public client_authorized( id )
{
if(!is_user_hltv(id) && !is_user_bot(id))
get_user_authid(id, AuthID[id], charsmax(AuthID[]));
}
public clear_kill( taskid )
{
new id = taskid-TASK_CLEAR_KILL
kill[ id ][ 0 ] = 0
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
if(get_pcvar_num(pcvar_enable))
{
SetHamParamFloat(4, damage * 0.2)
set_hudmessage(0, 255, 255, -1.0, -1.0, 0, 6.0, 3.0)
show_hudmessage(attacker, "^n[Health: %d]", get_user_health(victim))
}
}
public fw_PlayerSpawn_Post(id)
{
if(get_pcvar_num(pcvar_enable))
{
onetime[id] = 0
}
}
public client_putinserver(id)
{
if(get_pcvar_num(pcvar_enable))
{
set_task(4.0, "status", id)
}
}
public status(id)
{
if(get_pcvar_num(pcvar_enable))
{
set_hudmessage(255, 127, 127, 0.0, 0.7, 0, 6.0, 1.0)
show_hudmessage(id, "^n[XP]: %i^n[Level]:%i", g_PlayerXP[id], g_PlayerLevel[id])
set_task(1.0, "status", id)
}
return PLUGIN_HANDLED;
}
public SaveLevels() {
for(new id = 1; id <= g_iMaxPlayers; id++) {
if(is_user_connected(id))
Save(id)
}
}
Save(id) {
new szKey[40]
formatex(szKey , 39 , "niveles")
new data[16]
num_to_str(g_PlayerLevel[id], data, sizeof(data) - 1)
nfv_set_data(VaultFile, szKey, AuthID[id], data)
}
Load(id) {
new szKey[40]
formatex( szKey , 39 , "niveles" , AuthID[id])
new data[16]
nfv_get_data(VaultFile, szKey, AuthID[id], data, sizeof(data) - 1)
g_PlayerLevel[id] = str_to_num(data)
}