ar fi ok sa pui sursa pe forum de acum incolo pe alte site-uri se poate pierde
Code: Select all
#include < amxmodx >
#include < amxmisc >
#include < fvault >
#define PLUGIN "Zombie XP"
#define VERSION "1.0 Beta"
#define AUTHOR "LondoN eXtream"
#define SAVE_FILE_NAME "ZPXP_fVault"
#define MAX_LEVEL 10
new g_PlayerName [ 33 ] [ 32 ];
new g_Experience [ 33 ], g_Level [ 33 ];
new g_CvarAmmoPacksDamage;
new const ExperienceNeed [ MAX_LEVEL ] =
{
0, // Level 1
500, // Level 2
1000, // Level 3
2000, // Level 4
3500, // Level 5
4000, // Level 6
5500, // Level 7
6300, // Level 8
7200, // Level 9
9000, // Level 10
}
public plugin_init ( )
{
register_plugin ( PLUGIN, VERSION, AUTHOR );
register_cvar ( "zombie_xp_london", VERSION, FCVAR_SERVER|FCVAR_SPONLY );
set_cvar_string ( "zombie_xp_london", VERSION );
g_CvarAmmoPacksDamage = register_cvar ( "zp_xp_damage_for_experience", "500" );
register_event ( "Damage", "Event_UserMakeDamage", "b", "2!=0" );
register_event ( "DeathMsg", "Event_UserKillSomeone", "a" );
}
public plugin_natives ( )
{
register_native ( "zpxp_set_experience", "_set_experience", 1 );
register_native ( "zpxp_get_experience", "_get_experience", 1 );
register_native ( "zpxp_set_level", "_set_level", 1 );
register_native ( "zpxp_get_level", "_get_level", 1 );
}
public _set_experience ( Player, Amount )
{
if ( !is_user_connected ( Player ) )
return;
g_Experience [ Player ] += Amount;
check_user_level ( Player );
}
public _get_experience ( Player )
{
return g_Experience [ Player ];
}
public _set_level ( Player, Level )
{
if ( !is_user_connected ( Player ) )
return;
if ( Level > MAX_LEVEL )
return;
g_Level [ Player ] = Level;
g_Experience [ Player ] = ExperienceNeed [ g_Level [ Player ] ];
}
public _get_level ( Player )
{
return g_Level [ Player ];
}
public Event_UserMakeDamage ( Player )
{
new Damage = read_data ( 2 );
new ID = get_user_attacker ( Player );
if ( ID == Player || !ID || !is_user_alive ( ID ) )
return;
while ( Damage >= get_pcvar_num ( g_CvarAmmoPacksDamage ) )
{
Damage -= get_pcvar_num ( g_CvarAmmoPacksDamage );
g_Experience [ ID ] += random_num ( 1, 3 );
}
check_user_level ( ID );
}
public Event_UserKillSomeone ( )
{
new Attacker; Attacker = read_data ( 1 );
new Victim; Victim = read_data ( 2 );
if ( Attacker == Victim || !Attacker || !is_user_alive ( Attacker ) )
return;
g_Experience [ Attacker ] += 20;
check_user_level ( Attacker );
}
public check_user_level ( Player )
{
if ( g_Level [ Player ] < MAX_LEVEL )
{
while ( g_Experience [ Player ] >= ExperienceNeed [ g_Level [ Player ] ] )
{
g_Level [ Player ]++;
}
}
save_user_data ( Player );
}
public client_connect ( Player )
{
if ( is_user_bot ( Player ) || is_user_hltv ( Player ) )
return;
get_user_name ( Player, g_PlayerName [ Player ], charsmax ( g_PlayerName ) );
load_user_data ( Player );
}
public client_disconnect ( Player )
{
if ( is_user_bot ( Player ) || is_user_hltv ( Player ) )
return;
save_user_data ( Player );
}
public save_user_data ( Player )
{
new g_String [ 32 ];
formatex ( g_String, charsmax ( g_String ), "%s %s", g_Level [ Player ], g_Experience [ Player ] );
fvault_set_data ( SAVE_FILE_NAME, g_PlayerName [ Player ], g_String );
}
public load_user_data ( Player )
{
new g_String [ 32 ];
if ( fvault_get_data ( SAVE_FILE_NAME, g_PlayerName [ Player ], g_String, charsmax ( g_String ) ) )
{
// a = level | b = experience
new a [ 16 ], b [ 16 ];
parse ( g_String, a, charsmax ( a ), b, charsmax ( b ) );
g_Level [ Player ] = str_to_num ( a );
g_Experience [ Player ] = str_to_num ( b );
}
else
{
g_Level [ Player ] = 0;
g_Experience [ Player ] = 0;
}
}