Код:
#include <amxmodx>
#include <nvault>
#define PLUG_IN_VERSION "2.0"
#define PLUG_IN_NAME "Level_Time"
#define PLUG_IN_AUTHOR "cfn"
native _Get_User_Exp_(id)
native _Get_User_MaxLevel_(id)
native _Get_User_Level_(id)
new g_vault
/*Настройки левела*/
#define ADD_EXP 600.0 /*Сколько СЕКУНД требуется для получения следующего Exp*/
#define MAX_EXP 15 /*Сколько требуется Exp для перехода на следующий уровень*/
#define MAX_LEVEL 100 /*Максимальный уровень*/
/*Настройки HUD вывода сообщений левела*/
#define DHUD_RGB_LEVEL 102, 69, 0 /*Цвета показа уровня и опыта*/
#define DHUD_RGB_MAXLEVEL 255, 0, 0 /*Цвета показа макс. уровня*/
#define DHUD_FLOAT_X 0.01 /*Позиция X*/
#define DHUD_FLOAT_Y 0.90 /*Позиция Y*/
/*Таксы*/
#define TIME_TASK1 3.0 /*HUD*/
#define TIME_TASK2 1.0 /*Подключение плагина к SQL*/
#define TIME_TASK3 0.5 /*Загрузка SQL*/
/*Константы*/
#define MAX_CLIENTS 32
#define MAX_SZ 33
#define MAX_BT 512
new G_PlLEVEL[ MAX_SZ ], G_PlEXP[ MAX_SZ ], G_PlMAXLEVEL[ MAX_SZ ], G_PlLEVELUP, G_LOAD[ MAX_SZ ];
new szName[32]
new pGiveexp
/*Загрузка плагина*/
public plugin_init( )
{
register_plugin( PLUG_IN_NAME, PLUG_IN_VERSION, PLUG_IN_AUTHOR );
register_event( "DeathMsg", "EV_DeathMsg", "a" );
G_PlLEVELUP = CreateMultiForward( "_UpGrade_", ET_IGNORE, FP_CELL );
set_task( TIME_TASK1, "Dhud_Show_Level", _, _, _, "b" );
g_vault = nvault_open("jbe_lvlsnk");
register_clcmd("say /lvl", "Add_Exp");
set_task( ADD_EXP, "Add_Exp", _, _, _, "b" );
pGiveexp = register_cvar ( "jb_give_exp", "2" ); // exp for kil
}
public EV_DeathMsg( )
{
static iVictim, iKiller;
iVictim = read_data( 2 );
iKiller = read_data( 1 );
if( !is_user_connected( iVictim ) )
return;
if( iKiller == iVictim || !iKiller )
return;
G_PlEXP[ iKiller ] += get_pcvar_num(pGiveexp);
if( G_PlEXP[ iKiller ] >= MAX_LEVEL[G_PlLEVEL[iKiller]])
{
G_PlLEVEL[ iKiller ] += 1;
}
}
public takelvl(id)
{
G_PlLEVEL[id] = 1;
}
/*HUD сообщения*/
public Dhud_Show_Level(id)
{
new iMaxLevel;
new Show_Exp;
new Show_Level;
get_user_name(id, szName, 31)
for( new iPlayer = 0; iPlayer < MAX_SZ; iPlayer++ )
if( is_user_connected( iPlayer ) )
{
Show_Exp = _Get_User_Exp_( iPlayer );
Show_Level = _Get_User_Level_( iPlayer );
iMaxLevel = _Get_User_MaxLevel_( iPlayer );
}
}
/*Нативы*/
public plugin_natives( )
{
register_native( "_Get_User_Level_", "Native_Get_User_Level", 1 );
register_native( "_Set_User_Level_", "Native_Set_User_Level", 1 );
register_native( "_Get_User_Exp_", "Native_Get_User_Exp", 1 );
register_native( "_Get_User_MaxLevel_", "Native_Get_User_MaxLevel", 1 );
}
/*Возвращает левел игрока*/
public Native_Get_User_Level( iPlayer )
{
if( is_user_connected( iPlayer ) && iPlayer > 0 )
{
return G_PlLEVEL[ iPlayer ];
}
return -1;
}
/*Устанавливает левел игрока*/
public Native_Set_User_Level( iPlayer, Level )
{
if( is_user_connected( iPlayer ) && iPlayer > 0 )
{
if( Level < 1)
{
Level = 1;
}
else
{
if( Level > G_PlMAXLEVEL[ iPlayer ] )
{
Level = G_PlMAXLEVEL[ iPlayer ];
}
G_PlLEVEL[ iPlayer ] = Level;
SaveData( iPlayer );
}
}
}
/*Возвращает Exp игрока*/
public Native_Get_User_Exp( iPlayer )
{
if( is_user_connected( iPlayer ) && iPlayer > 0 )
{
return G_PlEXP[ iPlayer ];
}
return -1;
}
/*Возвращает максимальный левел игрока*/
public Native_Get_User_MaxLevel( iPlayer )
{
return G_PlMAXLEVEL[ iPlayer ];
}
/*Отчет EXP по времени*/
public Add_Exp( )
{
new BACK;
for( new iPlayer = 0; iPlayer < MAX_SZ; iPlayer++ )
if( is_user_connected( iPlayer ) && G_PlLEVEL[ iPlayer ] < G_PlMAXLEVEL[ iPlayer ] )
{
G_PlEXP[ iPlayer ]++;
if( G_PlEXP[ iPlayer ] >= MAX_EXP )
{
G_PlEXP[ iPlayer ] -= MAX_EXP;
G_PlLEVEL[ iPlayer ]++;
ExecuteForward( G_PlLEVELUP, BACK, iPlayer );
}
SaveData( iPlayer );
}
}
public plugin_end()
{
//SQL_FreeHandle( G_SQLTP );
}
/*Игрок подключается к серверу*/
public client_putinserver( iPlayer )
{
G_LOAD[ iPlayer ] = 0;
G_PlEXP[ iPlayer ] = 0;
G_PlLEVEL[ iPlayer ] = 1;
G_PlMAXLEVEL[ iPlayer ] = MAX_LEVEL;
LoadData( iPlayer );
}
public client_disconnect( iPlayer )
{
SaveData(iPlayer);
G_LOAD[ iPlayer ] = 0;
}
public SaveData(id) {
new AuthID[35]
get_user_authid(id,AuthID,34)
new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s-jblvl",AuthID)
format(vaultdata,255,"%i#%i#",G_PlLEVEL[id],G_PlEXP[id])
nvault_set(g_vault,vaultkey,vaultdata)
return PLUGIN_CONTINUE
}
public LoadData(id)
{
new AuthID[35]
get_user_authid(id,AuthID,34)
new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s-jblvl",AuthID)
format(vaultdata,255,"%i#%i#",G_PlLEVEL[id],G_PlEXP[id])
nvault_get(g_vault,vaultkey,vaultdata,255)
replace_all(vaultdata, 255, "#", " ")
new experience[32], playerlevel[32]
parse(vaultdata, experience, 31, playerlevel, 31)
G_PlLEVEL[id] = str_to_num(experience)
G_PlEXP[id] = str_to_num(playerlevel)
return PLUGIN_CONTINUE
}