Hi everyone, could someone change this code to nvault please? ... Thanks in advance
PHP Code:
#include <amxmodx>
#include <fakemeta >
#include <hamsandwich>
#include <dhudmessage>
#include <zombieplague>
#include <sqlx>
#define MAX_CLIENTS 32
enum (+= 100)
{
TASK_SHOWHUD = 4000,
TASK_LOAD_DATA
};
enum _:eData
{
Level = 0,
Experience
};
// CBaseMonster
#define m_LastHitGroup 75
#define USERHUD_NOTICE 0, 255, 255, 0.02, 0.2
new const Float: flGetExpirenceForDamage = 2500.0
new const iGetExpirenceForKillZombie = 1
new const iGetExpirenceForKillZombieHead = 2
new const iExperienceMulti = 10
new const iMaxUserLevel = 100
#define SQL_HOST ""
#define SQL_USER ""
#define SQL_PASSWORD ""
#define SQL_DATABASE ""
#define SQL_TABLENAME "zp_level_system"
new g_iUserData[MAX_CLIENTS + 1][eData]
new bool: g_bUserLoaded[MAX_CLIENTS +1]
new Float: g_flUserDamage[MAX_CLIENTS +1]
new g_szUserSteamID[MAX_CLIENTS +1][34]
new g_szQuery[512]
new Handle: g_hDBTuple
new Handle: g_hConnect
public plugin_init()
{
register_plugin("[ZP] Level System", "Best", "t3rkecorejz")
register_event("HLTV", "EV_RoundStart", "a", "1=0", "2=0")
RegisterHam(Ham_Killed, "player", "CPlayer__Killed_Post", .Post = 1)
RegisterHam(Ham_TakeDamage, "player", "CPlayer__TakeDamage_Post", .Post = 1)
}
public plugin_natives()
{
register_native("ZP_GetUserData", "Native_GetUserData", 1)
register_native("ZP_GetUserExpForNextLevel", "Native_GetUserExpForNextLevel", 1)
register_native("ZP_SetUserData", "Native_SetUserData", 1)
register_native("ZP_CheckUserNextLevel", "Native_CheckUserNextLevel", 1)
}
public plugin_cfg() SQL_LoadDebug()
public plugin_end()
{
if(g_hDBTuple)
SQL_FreeHandle(g_hDBTuple)
if(g_hConnect)
SQL_FreeHandle(g_hConnect)
return
}
public client_putinserver(iPlayer)
{
set_task(random_float(1.0, 3.0), "CTask__LoadData", iPlayer +TASK_LOAD_DATA)
set_task(1.0, "CTask__ShowUserHud", iPlayer +TASK_SHOWHUD, _, _, .flags = "b")
}
public client_disconnect(iPlayer)
{
if(!g_bUserLoaded[iPlayer])
return
formatex(g_szQuery, charsmax( g_szQuery), "UPDATE `%s` SET `Level` = '%d', `Experience` = '%d' WHERE `%s`.`SteamID` = '%s';", SQL_TABLENAME, g_iUserData[iPlayer][Level], g_iUserData[iPlayer][Experience], SQL_TABLENAME, g_szUserSteamID[iPlayer])
SQL_ThreadQuery(g_hDBTuple, "SQL_ThreadQueryHandler", g_szQuery)
}
// Events
public EV_RoundStart()
{
for(new iPlayer = 1; iPlayer <= MAX_CLIENTS; iPlayer++)
{
if(!is_user_connected(iPlayer))
continue;
if(!g_bUserLoaded[iPlayer])
return;
formatex(g_szQuery, charsmax(g_szQuery), "UPDATE `%s` SET `Level` = '%d', `Experience` = '%d' WHERE `%s`.`SteamID` = '%s';", SQL_TABLENAME, g_iUserData[iPlayer][Level], g_iUserData[iPlayer][Experience], SQL_TABLENAME, g_szUserSteamID[iPlayer])
SQL_ThreadQuery(g_hDBTuple, "SQL_ThreadQueryHandler", g_szQuery)
}
}
// Ham
public CPlayer__Killed_Post(iVictim, iInflictor, iAttacker)
{
if(!is_user_connected(iVictim) || !is_user_connected(iAttacker) || iVictim == iAttacker)
return;
if(g_iUserData[iAttacker][Level] >= iMaxUserLevel)
return;
if(zp_get_user_zombie(iVictim) && !zp_get_user_zombie(iAttacker))
{
if(get_pdata_int(iVictim, m_LastHitGroup, 5) == HIT_HEAD)
{
g_iUserData[iAttacker][Experience] += iGetExpirenceForKillZombieHead
return
}
g_iUserData[iAttacker][Experience] += iGetExpirenceForKillZombie
Native_CheckUserNextLevel(iAttacker)
}
return;
}
public CPlayer__TakeDamage_Post(iVictim, iInflictor, iAttacker, Float: flDamage)
{
if(!is_user_connected(iVictim) || !is_user_connected(iAttacker) || iVictim == iAttacker)
return
if(g_iUserData[iAttacker][Level] >= iMaxUserLevel)
return
if(zp_get_user_zombie(iVictim) && !zp_get_user_zombie(iAttacker))
{
g_flUserDamage[iAttacker] += flDamage
if(g_flUserDamage[iAttacker] >= flGetExpirenceForDamage)
{
while(g_flUserDamage[iAttacker] >= flGetExpirenceForDamage)
{
g_flUserDamage[iAttacker] -= flGetExpirenceForDamage
g_iUserData[iAttacker][Experience] += 1
}
}
Native_CheckUserNextLevel(iAttacker)
}
return;
}
// Task
public CTask__LoadData(iTask)
{
new iPlayer = iTask -TASK_LOAD_DATA
if(!is_user_connected(iPlayer))
return
new iParams[1]
iParams [0] = iPlayer
get_user_authid(iPlayer, g_szUserSteamID[iPlayer], charsmax(g_szUserSteamID[]))
formatex(g_szQuery, charsmax(g_szQuery), "SELECT * FROM `%s` WHERE (`%s`.`SteamID` = '%s')", SQL_TABLENAME, SQL_TABLENAME, g_szUserSteamID[iPlayer])
SQL_ThreadQuery(g_hDBTuple, "SQL_QueryConnection", g_szQuery, iParams, sizeof iParams)
}
public CTask__ShowUserHud(iTask)
{
new iPlayer = iTask -TASK_SHOWHUD
if(!is_user_alive(iPlayer))
return
set_dhudmessage(USERHUD_NOTICE, 0, 0.0, 1.1, 0.0, 0.0, false)
show_dhudmessage(iPlayer, "[Level: %d | %d%%]", g_iUserData[iPlayer][Level], floatround(99.0 / Native_GetUserExpForNextLevel(iPlayer) * g_iUserData[iPlayer][Experience]))
}
// MySQL
public SQL_LoadDebug()
{
new szError[512]
new iErrorCode
g_hDBTuple = SQL_MakeDbTuple(SQL_HOST, SQL_USER, SQL_PASSWORD, SQL_DATABASE)
g_hConnect = SQL_Connect(g_hDBTuple, iErrorCode, szError, charsmax(szError))
if(g_hConnect == Empty_Handle)
set_fail_state(szError)
if(!SQL_TableExists(g_hConnect, SQL_TABLENAME))
{
new Handle: hQueries
new szQuery[512]
formatex(szQuery, charsmax(szQuery), "CREATE TABLE IF NOT EXISTS `%s` (SteamID varchar(32) CHARACTER SET cp1250 COLLATE cp1250_general_ci NOT NULL, Level INT NOT NULL, Experience INT NOT NULL, PRIMARY KEY (SteamID))", SQL_TABLENAME)
hQueries = SQL_PrepareQuery(g_hConnect, szQuery)
if(!SQL_Execute(hQueries))
{
SQL_QueryError(hQueries, szError, charsmax(szError))
set_fail_state(szError)
}
SQL_FreeHandle(hQueries)
}
SQL_QueryAndIgnore(g_hConnect, "SET NAMES utf8")
}
public SQL_QueryConnection(iState, Handle: hQuery, szError[], iErrorCode, iParams[], iParamsSize)
{
switch(iState)
{
case TQUERY_CONNECT_FAILED: log_amx("Load - Could not connect to SQL database. [%d] %s", iErrorCode, szError)
case TQUERY_QUERY_FAILED: log_amx("Load Query failed. [%d] %s", iErrorCode, szError)
}
new iPlayer = iParams[0]
g_bUserLoaded[iPlayer] = true
if(SQL_NumResults(hQuery) < 1)
{
if(equal(g_szUserSteamID[iPlayer], "ID_PENDING"))
return PLUGIN_HANDLED
g_iUserData[iPlayer] = {1, 0}
formatex(g_szQuery, charsmax(g_szQuery), "INSERT INTO `%s` (`SteamID`, `Level`, `Experience`) VALUES ('%s', '%d', '%d');", SQL_TABLENAME, g_szUserSteamID[iPlayer], g_iUserData[iPlayer][Level], g_iUserData[iPlayer][Experience])
SQL_ThreadQuery(g_hDBTuple, "SQL_ThreadQueryHandler", g_szQuery)
return PLUGIN_HANDLED
}
else
{
g_iUserData[iPlayer][Level] = SQL_ReadResult(hQuery, 1)
g_iUserData[iPlayer][Experience] = SQL_ReadResult(hQuery, 2)
}
return PLUGIN_HANDLED
}
public SQL_ThreadQueryHandler(iState, Handle: hQuery, szError[], iErrorCode, iParams[], iParamsSize)
{
if(iState == 0)
return
log_amx("SQL Error: %d (%s)", iErrorCode, szError)
}
// Natives
public Native_GetUserData(iPlayer, iType)
return g_iUserData[iPlayer][iType]
public Native_GetUserExpForNextLevel(iPlayer)
return iExperienceMulti *(g_iUserData[iPlayer][Level] +1)
public Native_SetUserData(iPlayer, iType, iValue)
g_iUserData[iPlayer][iType] = iValue
public Native_CheckUserNextLevel(iPlayer)
{
if(g_iUserData[iPlayer][Experience] > Native_GetUserExpForNextLevel(iPlayer))
{
g_iUserData[iPlayer][Experience] -= Native_GetUserExpForNextLevel(iPlayer)
g_iUserData[iPlayer][Level] += 1
}
}
// Stocks
stock bool: SQL_TableExists(Handle: hDataBase, const szTable[])
{
new Handle: hQuery = SQL_PrepareQuery(hDataBase, "SELECT * FROM information_schema.tables WHERE table_name = '%s' LIMIT 1;", szTable)
new szError[512]
if(!SQL_Execute(hQuery))
{
SQL_QueryError(hQuery, szError, charsmax(szError))
set_fail_state(szError)
}
else if(!SQL_NumResults(hQuery))
{
SQL_FreeHandle(hQuery)
return false
}
SQL_FreeHandle(hQuery)
return true
}