- ze_xp_booster 2
XP boost for vips
-
- Veteran Member
- Posts: 598
- Joined: 7 years ago
- Contact:
XP boost for vips
hey guys,
can someone make something like XP boost for vips? For example, vips have 2x more XP for escape, infect, supplybox etc
can someone make something like XP boost for vips? For example, vips have 2x more XP for escape, infect, supplybox etc
-
- Veteran Member
- Posts: 598
- Joined: 7 years ago
- Contact:
Code: Select all
#include <zombie_escape>
// Defines
#define MAX_LEVEL 39
#define TASK_SHOWHUD 2020
#define TASK_DOUBLE 1133
#define REPEAT_TIME 60.0
#define ID_SHOWHUD (taskid - TASK_SHOWHUD)
#define LEVELUP "levelup_ZE/ze_levelup.wav"
enum
{
Host = 0,
User,
Pass,
DB
}
new const g_iMaxLevelsXP[MAX_LEVEL] =
{
30000, // 1
60000, // 2
100000, // 3
160000, // 4
250000, // 5
350000, // 6
500000, // 7
1050000, // 8
1500000, // 9
2000000, // 10
2500000, // 11
3508000, // 12
4500000, // 13
6600000, // 14
9100000, // 15
12520000, // 16
15600000, // 17
19500000, // 18
23900000, // 19
26900000, // 20
30500000, // 21
35000000, // 22
41000000, // 23
48500000, // 24
59000000, // 25
75050000, // 26
102000000, // 27
150000000, // 28
220000300, // 29
300300000, // 30
399999999, // 31
500000000, // 32
695500000, // 33
890000000, // 34
1275000000, // 35
1599999999, // 36
1650000000, // 37
1850000000, // 38
2150000000 // 39
}
// Constants
new const g_szLevelsVault[] = "Levels"
new const g_szRanksVault[] = "Ranks"
new const g_szLogFile[] = "Levels.log" // MySQL Errors log file
new const g_szTable[] =
" \
ALTER TABLE `test` \
ADD IF NOT EXISTS `Level` int(20) NOT NULL DEFAULT '0', \
ADD IF NOT EXISTS `XP` int(20) NOT NULL DEFAULT '0'; \
"
// Messages
const Float:HUD_SPECT_X = -1.0
const Float:HUD_SPECT_Y = 0.70
const Float:HUD_STATS_X = 0.01
const Float:HUD_STATS_Y = 0.29
const HUD_STATS_ZOMBIE_R = 200
const HUD_STATS_ZOMBIE_G = 220
const HUD_STATS_ZOMBIE_B = 0
const HUD_STATS_HUMAN_R = 0
const HUD_STATS_HUMAN_G = 200
const HUD_STATS_HUMAN_B = 210
const HUD_STATS_SPEC_R = 100
const HUD_STATS_SPEC_G = 100
const HUD_STATS_SPEC_B = 100
// Variables
new g_iLevel[33],
g_iXP[33],
g_iMaxXP[33],
Float:g_fDamage[33],
g_MsgSync,
g_iLevelsVaultHandle,
g_iRanksVaultHandle,
Handle:g_hTuple,
Fw_LevelUP,
ForwardReturn,
bool:g_bIsDoubleHours
// Cvars
new g_pCvarZombieInfect,
g_pCvarEscapeSuccess,
g_pCvarEnableDamage,
g_pCvarRequiredDamage,
g_pCvarDamageAward,
g_pCvarStartXP,
g_pCvarPercentageStyle,
g_pCvarStartFromZero,
g_pCvarAddCommas,
g_pCvarLevelEffects,
g_pCvarSaveType,
g_pCvarDBInfo[4],
g_pCvarDoubleXP
public plugin_natives()
{
register_native("ze_get_user_xp", "native_ze_get_user_xp", 1)
register_native("ze_set_user_xp", "native_ze_set_user_xp", 1)
register_native("ze_get_user_level", "native_ze_get_user_level", 1)
register_native("ze_set_user_level", "native_ze_set_user_level", 1)
register_native("ze_get_user_max_xp", "native_ze_get_user_max_xp", 1)
}
public plugin_precache()
{
precache_sound(LEVELUP)
}
public plugin_init()
{
register_plugin("[ZE] Level-XP System", "1.9", "Raheem/JaCk")
// Hook Chains
RegisterHookChain(RG_CBasePlayer_TakeDamage, "Fw_TakeDamage_Post", 1)
Fw_LevelUP = CreateMultiForward("ze_on_levelup", ET_IGNORE, FP_CELL)
// Cvars
g_pCvarZombieInfect = register_cvar("ze_zombie_infect", "3")
g_pCvarEscapeSuccess = register_cvar("ze_escape_success", "5")
g_pCvarEnableDamage = register_cvar("ze_enable_dmg", "1")
g_pCvarRequiredDamage = register_cvar("ze_required_dmg", "50.0")
g_pCvarDamageAward = register_cvar("ze_dmg_award", "3")
g_pCvarStartXP = register_cvar("ze_start_xp", "0")
g_pCvarPercentageStyle = register_cvar("ze_enable_percentage_style", "0")
g_pCvarStartFromZero = register_cvar("ze_new_level_zero_xp", "0")
g_pCvarAddCommas = register_cvar("ze_add_commas_to_xp", "1")
g_pCvarLevelEffects = register_cvar("ze_level_up_effects", "0")
g_pCvarDoubleXP = register_cvar("ze_double_xp", "15-22")
g_pCvarSaveType = register_cvar("ze_levels_save_type", "0")
g_pCvarDBInfo[Host] = register_cvar("ze_levels_host", "127.0.0.1")
g_pCvarDBInfo[User] = register_cvar("ze_levels_user", "root")
g_pCvarDBInfo[Pass] = register_cvar("ze_levels_pass", "password")
g_pCvarDBInfo[DB] = register_cvar("ze_levels_dbname", "levels_db")
// Messages
g_MsgSync = CreateHudSyncObj()
if (get_pcvar_num(g_pCvarSaveType))
{
set_task(0.1, "Delay_MySQL_Init")
}
DoubleHours()
if (g_bIsDoubleHours)
{
set_task(REPEAT_TIME, "HappyHours", TASK_DOUBLE, _, _, "b")
}
}
public plugin_end()
{
if (get_pcvar_num(g_pCvarSaveType))
{
if (g_hTuple != Empty_Handle)
{
SQL_FreeHandle(g_hTuple)
}
}
}
public Delay_MySQL_Init()
{
MySQL_Init()
}
public MySQL_Init()
{
if (!get_pcvar_num(g_pCvarSaveType))
return
new szHost[64], szUser[32], szPass[32], szDB[128]
get_pcvar_string(g_pCvarDBInfo[Host], szHost, charsmax(szHost))
get_pcvar_string(g_pCvarDBInfo[User], szUser, charsmax(szUser))
get_pcvar_string(g_pCvarDBInfo[Pass], szPass, charsmax(szPass))
get_pcvar_string(g_pCvarDBInfo[DB], szDB, charsmax(szDB))
g_hTuple = SQL_MakeDbTuple(szHost, szUser, szPass, szDB)
// Let's ensure that the g_hTuple will be valid, we will access the database to make sure
new iErrorCode, szError[512], Handle:hSQLConnection
hSQLConnection = SQL_Connect(g_hTuple, iErrorCode, szError, charsmax(szError))
if (hSQLConnection != Empty_Handle)
{
log_amx("[MySQL][LVL] Successfully connected to host: %s (ALL IS OK).", szHost)
SQL_FreeHandle(hSQLConnection)
}
else
{
// Disable plugin
set_fail_state("[LVL] Failed to connect to MySQL database: %s.", szError)
}
SQL_ThreadQuery(g_hTuple, "QueryCreateTable", g_szTable)
}
public QueryCreateTable(iFailState, Handle:hQuery, szError[], iError, szData[], iSize, Float:flQueueTime)
{
SQL_IsFail(iFailState, iError, szError, g_szLogFile)
}
public client_putinserver(id)
{
if(is_user_hltv(id) || is_user_bot(id))
return
// Just 1 second delay
set_task(1.0, "DelayLoad", id)
// Other tasks
set_task(1.0, "Show_Hud", id+TASK_SHOWHUD, _, _, "b")
if (g_bIsDoubleHours)
{
set_task(REPEAT_TIME, "HappyHours", id+TASK_DOUBLE, _, _, "b")
}
}
public HappyHours(taskid)
{
DoubleHours()
if (!g_bIsDoubleHours)
remove_task(taskid)
new szDoubleHours[32]
get_pcvar_string(g_pCvarDoubleXP, szDoubleHours, charsmax(szDoubleHours))
set_dhudmessage(0, 255, 0, -1.0, 0.12, 0, 0.0, 10.0)
show_dhudmessage(0, "DOUBLE XP: %s", szDoubleHours)
}
public DelayLoad(id)
{
// Load his data
LoadData(id)
}
public client_disconnected(id)
{
if(is_user_hltv(id) || is_user_bot(id))
return
remove_task(id+TASK_SHOWHUD)
remove_task(id)
}
public Show_Hud(taskid)
{
new iPlayer = ID_SHOWHUD
if (!is_user_alive(iPlayer))
{
iPlayer = pev(iPlayer, pev_iuser2)
if (!is_user_alive(iPlayer))
return
}
if (get_pcvar_num(g_pCvarPercentageStyle) != 0)
{
if(iPlayer != ID_SHOWHUD)
{
set_hudmessage(HUD_STATS_SPEC_R, HUD_STATS_SPEC_G, HUD_STATS_SPEC_B, HUD_SPECT_X, HUD_SPECT_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %0.2f %", g_iLevel[iPlayer], (float(g_iXP[iPlayer])/float(g_iMaxXP[iPlayer])) * 100.0)
}
else if (ze_is_user_zombie(iPlayer))
{
set_hudmessage(HUD_STATS_ZOMBIE_R, HUD_STATS_ZOMBIE_G, HUD_STATS_ZOMBIE_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %0.2f %", g_iLevel[ID_SHOWHUD], (float(g_iXP[ID_SHOWHUD])/float(g_iMaxXP[ID_SHOWHUD])) * 100.0)
}
else
{
set_hudmessage(HUD_STATS_HUMAN_R, HUD_STATS_HUMAN_G, HUD_STATS_HUMAN_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %0.2f %", g_iLevel[ID_SHOWHUD], (float(g_iXP[ID_SHOWHUD])/float(g_iMaxXP[ID_SHOWHUD])) * 100.0)
}
}
else
{
if(iPlayer != ID_SHOWHUD)
{
if (get_pcvar_num(g_pCvarAddCommas) == 1)
{
new szSpecXP[15], szSpecMaxXP[15]
AddCommas(g_iXP[iPlayer], szSpecXP, charsmax(szSpecXP))
AddCommas(g_iMaxXP[iPlayer], szSpecMaxXP, charsmax(szSpecMaxXP))
set_hudmessage(HUD_STATS_SPEC_R, HUD_STATS_SPEC_G, HUD_STATS_SPEC_B, HUD_SPECT_X, HUD_SPECT_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %s/%s", g_iLevel[iPlayer], szSpecXP, szSpecMaxXP)
}
else
{
set_hudmessage(HUD_STATS_SPEC_R, HUD_STATS_SPEC_G, HUD_STATS_SPEC_B, HUD_SPECT_X, HUD_SPECT_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %d/%d", g_iLevel[iPlayer], g_iXP[iPlayer], g_iMaxXP[iPlayer])
}
}
else if (ze_is_user_zombie(iPlayer))
{
if (get_pcvar_num(g_pCvarAddCommas) == 1)
{
new szZombieXP[15], szZombieMaxXP[15]
AddCommas(g_iXP[ID_SHOWHUD], szZombieXP, charsmax(szZombieXP))
AddCommas(g_iMaxXP[ID_SHOWHUD], szZombieMaxXP, charsmax(szZombieMaxXP))
set_hudmessage(HUD_STATS_ZOMBIE_R, HUD_STATS_ZOMBIE_G, HUD_STATS_ZOMBIE_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %s/%s", g_iLevel[ID_SHOWHUD], szZombieXP, szZombieMaxXP)
}
else
{
set_hudmessage(HUD_STATS_ZOMBIE_R, HUD_STATS_ZOMBIE_G, HUD_STATS_ZOMBIE_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %d/%d", g_iLevel[ID_SHOWHUD], g_iXP[ID_SHOWHUD], g_iMaxXP[ID_SHOWHUD])
}
}
else
{
if (get_pcvar_num(g_pCvarAddCommas) == 1)
{
new szHumanXP[15], szHumanMaxXP[15]
AddCommas(g_iXP[ID_SHOWHUD], szHumanXP, charsmax(szHumanXP))
AddCommas(g_iMaxXP[ID_SHOWHUD], szHumanMaxXP, charsmax(szHumanMaxXP))
set_hudmessage(HUD_STATS_HUMAN_R, HUD_STATS_HUMAN_G, HUD_STATS_HUMAN_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %s/%s", g_iLevel[ID_SHOWHUD], szHumanXP, szHumanMaxXP)
}
else
{
set_hudmessage(HUD_STATS_HUMAN_R, HUD_STATS_HUMAN_G, HUD_STATS_HUMAN_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %d/%d", g_iLevel[ID_SHOWHUD], g_iXP[ID_SHOWHUD], g_iMaxXP[ID_SHOWHUD])
}
}
}
}
public ze_roundend(WinTeam)
{
if (WinTeam == ZE_TEAM_HUMAN)
{
new iXP = g_bIsDoubleHours ? (get_pcvar_num(g_pCvarEscapeSuccess) * 2) : get_pcvar_num(g_pCvarEscapeSuccess)
for(new id = 1; id <= get_member_game(m_nMaxPlayers); id++)
{
if (!is_user_alive(id) || ze_is_user_zombie(id))
continue
Reward(id, (g_iXP[id] + iXP))
}
}
remove_task(TASK_SHOWHUD)
}
public Check_User_Level(id)
{
if (!is_user_connected(id))
return
if (g_iLevel[id] < MAX_LEVEL)
{
new szName[32]
while (g_iXP[id] > g_iMaxXP[id])
{
if (get_pcvar_num(g_pCvarStartFromZero) == 1)
{
g_iXP[id] = 0
}
g_iLevel[id]++
g_iMaxXP[id] = g_iMaxLevelsXP[g_iLevel[id]]
get_user_name(id, szName, charsmax(szName))
ze_colored_print(0, "!g%s !tNow in Level %i!y!", szName, g_iLevel[id])
ExecuteForward(Fw_LevelUP, ForwardReturn, id)
SaveData(id)
PlaySound(id, LEVELUP)
if (get_pcvar_num(g_pCvarLevelEffects) != 0)
{
// Screen Fade
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, id)
write_short(4096*2)
write_short(4096*5)
write_short(0x0001)
write_byte(random(256))
write_byte(random(256))
write_byte(random(256))
write_byte(150)
message_end()
// Screen Shake
message_begin(MSG_ONE, get_user_msgid("ScreenShake"), {0,0,0}, id)
write_short(255<<14)
write_short(10<<14)
write_short(255<<14)
message_end()
}
}
}
}
public ze_user_infected(iVictim, iInfector)
{
if (iInfector == 0)
return
new iXP = g_bIsDoubleHours ? (get_pcvar_num(g_pCvarZombieInfect) * 2) : get_pcvar_num(g_pCvarZombieInfect)
Reward(iInfector, (g_iXP[iInfector] + iXP))
}
public Fw_TakeDamage_Post(iVictim, iInflictor, iAttacker, Float:fDamage, bitsDamageType)
{
// Player Damage Himself
if (iVictim == iAttacker || !is_user_alive(iVictim) || !is_user_alive(iAttacker) || ze_is_user_zombie(iAttacker) || !get_pcvar_num(g_pCvarEnableDamage))
return HC_CONTINUE
// Same Team?
if (get_member(iAttacker, m_iTeam) == get_member(iVictim, m_iTeam))
return HC_CONTINUE
// Store Damage For every Player
g_fDamage[iAttacker] += fDamage
// Damage Calculator Equal or Higher than needed damage
if (g_fDamage[iAttacker] >= get_pcvar_float(g_pCvarRequiredDamage))
{
// Player did damage that a multiplication of the cvar? Increase coins by this factor
new iMultiplier = floatround(g_fDamage[iAttacker] / get_pcvar_float(g_pCvarRequiredDamage))
new iXP = ((g_bIsDoubleHours ? (get_pcvar_num(g_pCvarDamageAward) * 2) : get_pcvar_num(g_pCvarDamageAward)) * iMultiplier)
Reward(iAttacker, (g_iXP[iAttacker] + iXP))
// Rest The Damage Calculator
g_fDamage[iAttacker] = 0.0
}
return HC_CONTINUE
}
public Reward(id, XP)
{
if ((g_iLevel[id] + 1) < MAX_LEVEL)
{
g_iXP[id] = XP
Check_User_Level(id)
}
else
{
if ((g_iXP[id] + XP) >= g_iMaxLevelsXP[MAX_LEVEL - 1])
{
g_iXP[id] = g_iMaxXP[id] = g_iMaxLevelsXP[MAX_LEVEL - 1]
}
}
SaveData(id)
}
public SaveData(id)
{
new szAuthID[35], szName[32]
get_user_authid(id, szAuthID, charsmax(szAuthID))
get_user_name(id, szName, charsmax(szName))
if (!get_pcvar_num(g_pCvarSaveType))
{
new szData[256]
formatex(szData , charsmax(szData), "%i %i", g_iLevel[id], g_iXP[id])
// Open the Vaults
g_iLevelsVaultHandle = nvault_open(g_szLevelsVault)
g_iRanksVaultHandle = nvault_open(g_szRanksVault)
// Saves His Data
nvault_set(g_iLevelsVaultHandle, szAuthID, szData)
nvault_set(g_iRanksVaultHandle, szAuthID, szName)
// Close Vaults
nvault_close(g_iLevelsVaultHandle)
nvault_close(g_iRanksVaultHandle)
}
else
{
new szQuery[128]
formatex(szQuery, charsmax(szQuery), "UPDATE `zombie_escape` SET `Level` = '%d', `XP` = '%d' WHERE ( `SteamID` = '%s' );", g_iLevel[id], g_iXP[id], szAuthID)
SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery)
}
}
public QuerySetData(iFailState, Handle:hQuery, szError[], iError, szData[], iSize, Float:flQueueTime)
{
SQL_IsFail(iFailState, iError, szError, g_szLogFile)
}
public QuerySetData2(iFailState, Handle:hQuery, szError[], iError, szData[], iSize, Float:flQueueTime)
{
SQL_IsFail(iFailState, iError, szError, g_szLogFile)
}
public LoadData(id)
{
new szAuthID[35]
get_user_authid(id, szAuthID, charsmax(szAuthID))
if (!get_pcvar_num(g_pCvarSaveType))
{
new szData[256], iTimestamp, iExists
// Open the Vault
g_iLevelsVaultHandle = nvault_open(g_szLevelsVault)
iExists = nvault_lookup(g_iLevelsVaultHandle, szAuthID, szData, charsmax(szData), iTimestamp)
// Close Vault
nvault_close(g_iLevelsVaultHandle)
if (!iExists)
{
g_iLevel[id] = 0
g_iXP[id] = get_pcvar_num(g_pCvarStartXP)
SaveData(id)
}
else
{
new iLevel[32], iXP[32]
parse(szData, iLevel, 31, iXP, 31)
g_iLevel[id] = str_to_num(iLevel)
g_iXP[id] = str_to_num(iXP)
}
g_iMaxXP[id] = g_iMaxLevelsXP[g_iLevel[id]]
}
else
{
new szQuery[128], szData[5]
formatex(szQuery, charsmax(szQuery), "SELECT * FROM `zombie_escape` WHERE ( `SteamID` = '%s' );", szAuthID)
num_to_str(id, szData, charsmax(szData))
SQL_ThreadQuery(g_hTuple, "QuerySelectData", szQuery, szData, charsmax(szData))
}
}
public QuerySelectData(iFailState, Handle:hQuery, szError[], iError, szData[])
{
if (SQL_IsFail(iFailState, iError, szError, g_szLogFile))
return
new id = str_to_num(szData)
// No results for this query means this is new player
if (!SQL_NumResults(hQuery))
{
g_iLevel[id] = 0
g_iXP[id] = get_pcvar_num(g_pCvarStartXP)
}
else
{
g_iLevel[id] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "Level"))
g_iXP[id] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "XP"))
}
g_iMaxXP[id] = g_iMaxLevelsXP[g_iLevel[id]]
}
public native_ze_get_user_xp(id)
{
if(!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
return false;
}
return g_iXP[id]
}
public native_ze_set_user_xp(id, amount)
{
if(!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
return false
}
DoubleHours()
new addedXP = (amount - g_iXP[id])
new iXP = g_bIsDoubleHours ? (addedXP * 2) : addedXP
Reward(id, g_iXP[id] + iXP)
return true
}
public native_ze_get_user_level(id)
{
if(!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
return false;
}
return g_iLevel[id]
}
public native_ze_set_user_level(id, amount)
{
if(!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
return false
}
if (amount > MAX_LEVEL)
{
log_error(AMX_ERR_NATIVE, "Level must be less than or equal to MAX_LEVEL (%d)", MAX_LEVEL)
return false
}
g_iLevel[id] = amount
if (get_pcvar_num(g_pCvarStartFromZero) == 1)
{
g_iXP[id] = 0
}
SaveData(id)
return true
}
public native_ze_get_user_max_xp(id)
{
if(!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
return false
}
return g_iMaxXP[id]
}
stock DoubleHours()
{
new szTime[3], szDoubleHours[32], szDoubleHours_Start[32], szDoubleHours_End[32]
get_time("%H", szTime, charsmax(szTime))
get_pcvar_string(g_pCvarDoubleXP, szDoubleHours, charsmax(szDoubleHours))
for (new ch = 0; ch <= charsmax(szDoubleHours); ch++)
{
if (szDoubleHours[ch] == '-')
szDoubleHours[ch] = ' '
}
parse(szDoubleHours, szDoubleHours_Start, charsmax(szDoubleHours_Start), szDoubleHours_End, charsmax(szDoubleHours_End))
new iTime, iDoubleHourStart, iDoubleHourEnd
iTime = str_to_num(szTime)
iDoubleHourStart = str_to_num(szDoubleHours_Start)
iDoubleHourEnd = str_to_num(szDoubleHours_End)
if (iDoubleHourEnd > iTime >= iDoubleHourStart)
{
g_bIsDoubleHours = true
}
else
{
g_bIsDoubleHours = false
}
}
VIP double xp flag is Aczirimbolo wrote: ↑2 years agoCode: Select all
#include <zombie_escape> // Defines #define MAX_LEVEL 39 #define TASK_SHOWHUD 2020 #define TASK_DOUBLE 1133 #define REPEAT_TIME 60.0 #define ID_SHOWHUD (taskid - TASK_SHOWHUD) #define LEVELUP "levelup_ZE/ze_levelup.wav" enum { Host = 0, User, Pass, DB } new const g_iMaxLevelsXP[MAX_LEVEL] = { 30000, // 1 60000, // 2 100000, // 3 160000, // 4 250000, // 5 350000, // 6 500000, // 7 1050000, // 8 1500000, // 9 2000000, // 10 2500000, // 11 3508000, // 12 4500000, // 13 6600000, // 14 9100000, // 15 12520000, // 16 15600000, // 17 19500000, // 18 23900000, // 19 26900000, // 20 30500000, // 21 35000000, // 22 41000000, // 23 48500000, // 24 59000000, // 25 75050000, // 26 102000000, // 27 150000000, // 28 220000300, // 29 300300000, // 30 399999999, // 31 500000000, // 32 695500000, // 33 890000000, // 34 1275000000, // 35 1599999999, // 36 1650000000, // 37 1850000000, // 38 2150000000 // 39 } // Constants new const g_szLevelsVault[] = "Levels" new const g_szRanksVault[] = "Ranks" new const g_szLogFile[] = "Levels.log" // MySQL Errors log file new const g_szTable[] = " \ ALTER TABLE `test` \ ADD IF NOT EXISTS `Level` int(20) NOT NULL DEFAULT '0', \ ADD IF NOT EXISTS `XP` int(20) NOT NULL DEFAULT '0'; \ " // Messages const Float:HUD_SPECT_X = -1.0 const Float:HUD_SPECT_Y = 0.70 const Float:HUD_STATS_X = 0.01 const Float:HUD_STATS_Y = 0.29 const HUD_STATS_ZOMBIE_R = 200 const HUD_STATS_ZOMBIE_G = 220 const HUD_STATS_ZOMBIE_B = 0 const HUD_STATS_HUMAN_R = 0 const HUD_STATS_HUMAN_G = 200 const HUD_STATS_HUMAN_B = 210 const HUD_STATS_SPEC_R = 100 const HUD_STATS_SPEC_G = 100 const HUD_STATS_SPEC_B = 100 // Variables new g_iLevel[33], g_iXP[33], g_iMaxXP[33], Float:g_fDamage[33], g_MsgSync, g_iLevelsVaultHandle, g_iRanksVaultHandle, Handle:g_hTuple, Fw_LevelUP, ForwardReturn, bool:g_bIsDoubleHours // Cvars new g_pCvarZombieInfect, g_pCvarEscapeSuccess, g_pCvarEnableDamage, g_pCvarRequiredDamage, g_pCvarDamageAward, g_pCvarStartXP, g_pCvarPercentageStyle, g_pCvarStartFromZero, g_pCvarAddCommas, g_pCvarLevelEffects, g_pCvarSaveType, g_pCvarDBInfo[4], g_pCvarDoubleXP public plugin_natives() { register_native("ze_get_user_xp", "native_ze_get_user_xp", 1) register_native("ze_set_user_xp", "native_ze_set_user_xp", 1) register_native("ze_get_user_level", "native_ze_get_user_level", 1) register_native("ze_set_user_level", "native_ze_set_user_level", 1) register_native("ze_get_user_max_xp", "native_ze_get_user_max_xp", 1) } public plugin_precache() { precache_sound(LEVELUP) } public plugin_init() { register_plugin("[ZE] Level-XP System", "1.9", "Raheem/JaCk") // Hook Chains RegisterHookChain(RG_CBasePlayer_TakeDamage, "Fw_TakeDamage_Post", 1) Fw_LevelUP = CreateMultiForward("ze_on_levelup", ET_IGNORE, FP_CELL) // Cvars g_pCvarZombieInfect = register_cvar("ze_zombie_infect", "3") g_pCvarEscapeSuccess = register_cvar("ze_escape_success", "5") g_pCvarEnableDamage = register_cvar("ze_enable_dmg", "1") g_pCvarRequiredDamage = register_cvar("ze_required_dmg", "50.0") g_pCvarDamageAward = register_cvar("ze_dmg_award", "3") g_pCvarStartXP = register_cvar("ze_start_xp", "0") g_pCvarPercentageStyle = register_cvar("ze_enable_percentage_style", "0") g_pCvarStartFromZero = register_cvar("ze_new_level_zero_xp", "0") g_pCvarAddCommas = register_cvar("ze_add_commas_to_xp", "1") g_pCvarLevelEffects = register_cvar("ze_level_up_effects", "0") g_pCvarDoubleXP = register_cvar("ze_double_xp", "15-22") g_pCvarSaveType = register_cvar("ze_levels_save_type", "0") g_pCvarDBInfo[Host] = register_cvar("ze_levels_host", "127.0.0.1") g_pCvarDBInfo[User] = register_cvar("ze_levels_user", "root") g_pCvarDBInfo[Pass] = register_cvar("ze_levels_pass", "password") g_pCvarDBInfo[DB] = register_cvar("ze_levels_dbname", "levels_db") // Messages g_MsgSync = CreateHudSyncObj() if (get_pcvar_num(g_pCvarSaveType)) { set_task(0.1, "Delay_MySQL_Init") } DoubleHours() if (g_bIsDoubleHours) { set_task(REPEAT_TIME, "HappyHours", TASK_DOUBLE, _, _, "b") } } public plugin_end() { if (get_pcvar_num(g_pCvarSaveType)) { if (g_hTuple != Empty_Handle) { SQL_FreeHandle(g_hTuple) } } } public Delay_MySQL_Init() { MySQL_Init() } public MySQL_Init() { if (!get_pcvar_num(g_pCvarSaveType)) return new szHost[64], szUser[32], szPass[32], szDB[128] get_pcvar_string(g_pCvarDBInfo[Host], szHost, charsmax(szHost)) get_pcvar_string(g_pCvarDBInfo[User], szUser, charsmax(szUser)) get_pcvar_string(g_pCvarDBInfo[Pass], szPass, charsmax(szPass)) get_pcvar_string(g_pCvarDBInfo[DB], szDB, charsmax(szDB)) g_hTuple = SQL_MakeDbTuple(szHost, szUser, szPass, szDB) // Let's ensure that the g_hTuple will be valid, we will access the database to make sure new iErrorCode, szError[512], Handle:hSQLConnection hSQLConnection = SQL_Connect(g_hTuple, iErrorCode, szError, charsmax(szError)) if (hSQLConnection != Empty_Handle) { log_amx("[MySQL][LVL] Successfully connected to host: %s (ALL IS OK).", szHost) SQL_FreeHandle(hSQLConnection) } else { // Disable plugin set_fail_state("[LVL] Failed to connect to MySQL database: %s.", szError) } SQL_ThreadQuery(g_hTuple, "QueryCreateTable", g_szTable) } public QueryCreateTable(iFailState, Handle:hQuery, szError[], iError, szData[], iSize, Float:flQueueTime) { SQL_IsFail(iFailState, iError, szError, g_szLogFile) } public client_putinserver(id) { if(is_user_hltv(id) || is_user_bot(id)) return // Just 1 second delay set_task(1.0, "DelayLoad", id) // Other tasks set_task(1.0, "Show_Hud", id+TASK_SHOWHUD, _, _, "b") if (g_bIsDoubleHours) { set_task(REPEAT_TIME, "HappyHours", id+TASK_DOUBLE, _, _, "b") } } public HappyHours(taskid) { DoubleHours() if (!g_bIsDoubleHours) remove_task(taskid) new szDoubleHours[32] get_pcvar_string(g_pCvarDoubleXP, szDoubleHours, charsmax(szDoubleHours)) set_dhudmessage(0, 255, 0, -1.0, 0.12, 0, 0.0, 10.0) show_dhudmessage(0, "DOUBLE XP: %s", szDoubleHours) } public DelayLoad(id) { // Load his data LoadData(id) } public client_disconnected(id) { if(is_user_hltv(id) || is_user_bot(id)) return remove_task(id+TASK_SHOWHUD) remove_task(id) } public Show_Hud(taskid) { new iPlayer = ID_SHOWHUD if (!is_user_alive(iPlayer)) { iPlayer = pev(iPlayer, pev_iuser2) if (!is_user_alive(iPlayer)) return } if (get_pcvar_num(g_pCvarPercentageStyle) != 0) { if(iPlayer != ID_SHOWHUD) { set_hudmessage(HUD_STATS_SPEC_R, HUD_STATS_SPEC_G, HUD_STATS_SPEC_B, HUD_SPECT_X, HUD_SPECT_Y, 0, 6.0, 1.1, 0.0, 0.0, -1) ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %0.2f %", g_iLevel[iPlayer], (float(g_iXP[iPlayer])/float(g_iMaxXP[iPlayer])) * 100.0) } else if (ze_is_user_zombie(iPlayer)) { set_hudmessage(HUD_STATS_ZOMBIE_R, HUD_STATS_ZOMBIE_G, HUD_STATS_ZOMBIE_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1) ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %0.2f %", g_iLevel[ID_SHOWHUD], (float(g_iXP[ID_SHOWHUD])/float(g_iMaxXP[ID_SHOWHUD])) * 100.0) } else { set_hudmessage(HUD_STATS_HUMAN_R, HUD_STATS_HUMAN_G, HUD_STATS_HUMAN_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1) ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %0.2f %", g_iLevel[ID_SHOWHUD], (float(g_iXP[ID_SHOWHUD])/float(g_iMaxXP[ID_SHOWHUD])) * 100.0) } } else { if(iPlayer != ID_SHOWHUD) { if (get_pcvar_num(g_pCvarAddCommas) == 1) { new szSpecXP[15], szSpecMaxXP[15] AddCommas(g_iXP[iPlayer], szSpecXP, charsmax(szSpecXP)) AddCommas(g_iMaxXP[iPlayer], szSpecMaxXP, charsmax(szSpecMaxXP)) set_hudmessage(HUD_STATS_SPEC_R, HUD_STATS_SPEC_G, HUD_STATS_SPEC_B, HUD_SPECT_X, HUD_SPECT_Y, 0, 6.0, 1.1, 0.0, 0.0, -1) ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %s/%s", g_iLevel[iPlayer], szSpecXP, szSpecMaxXP) } else { set_hudmessage(HUD_STATS_SPEC_R, HUD_STATS_SPEC_G, HUD_STATS_SPEC_B, HUD_SPECT_X, HUD_SPECT_Y, 0, 6.0, 1.1, 0.0, 0.0, -1) ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %d/%d", g_iLevel[iPlayer], g_iXP[iPlayer], g_iMaxXP[iPlayer]) } } else if (ze_is_user_zombie(iPlayer)) { if (get_pcvar_num(g_pCvarAddCommas) == 1) { new szZombieXP[15], szZombieMaxXP[15] AddCommas(g_iXP[ID_SHOWHUD], szZombieXP, charsmax(szZombieXP)) AddCommas(g_iMaxXP[ID_SHOWHUD], szZombieMaxXP, charsmax(szZombieMaxXP)) set_hudmessage(HUD_STATS_ZOMBIE_R, HUD_STATS_ZOMBIE_G, HUD_STATS_ZOMBIE_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1) ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %s/%s", g_iLevel[ID_SHOWHUD], szZombieXP, szZombieMaxXP) } else { set_hudmessage(HUD_STATS_ZOMBIE_R, HUD_STATS_ZOMBIE_G, HUD_STATS_ZOMBIE_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1) ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %d/%d", g_iLevel[ID_SHOWHUD], g_iXP[ID_SHOWHUD], g_iMaxXP[ID_SHOWHUD]) } } else { if (get_pcvar_num(g_pCvarAddCommas) == 1) { new szHumanXP[15], szHumanMaxXP[15] AddCommas(g_iXP[ID_SHOWHUD], szHumanXP, charsmax(szHumanXP)) AddCommas(g_iMaxXP[ID_SHOWHUD], szHumanMaxXP, charsmax(szHumanMaxXP)) set_hudmessage(HUD_STATS_HUMAN_R, HUD_STATS_HUMAN_G, HUD_STATS_HUMAN_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1) ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %s/%s", g_iLevel[ID_SHOWHUD], szHumanXP, szHumanMaxXP) } else { set_hudmessage(HUD_STATS_HUMAN_R, HUD_STATS_HUMAN_G, HUD_STATS_HUMAN_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1) ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %d/%d", g_iLevel[ID_SHOWHUD], g_iXP[ID_SHOWHUD], g_iMaxXP[ID_SHOWHUD]) } } } } public ze_roundend(WinTeam) { if (WinTeam == ZE_TEAM_HUMAN) { new iXP = g_bIsDoubleHours ? (get_pcvar_num(g_pCvarEscapeSuccess) * 2) : get_pcvar_num(g_pCvarEscapeSuccess) for(new id = 1; id <= get_member_game(m_nMaxPlayers); id++) { if (!is_user_alive(id) || ze_is_user_zombie(id)) continue Reward(id, (g_iXP[id] + iXP)) } } remove_task(TASK_SHOWHUD) } public Check_User_Level(id) { if (!is_user_connected(id)) return if (g_iLevel[id] < MAX_LEVEL) { new szName[32] while (g_iXP[id] > g_iMaxXP[id]) { if (get_pcvar_num(g_pCvarStartFromZero) == 1) { g_iXP[id] = 0 } g_iLevel[id]++ g_iMaxXP[id] = g_iMaxLevelsXP[g_iLevel[id]] get_user_name(id, szName, charsmax(szName)) ze_colored_print(0, "!g%s !tNow in Level %i!y!", szName, g_iLevel[id]) ExecuteForward(Fw_LevelUP, ForwardReturn, id) SaveData(id) PlaySound(id, LEVELUP) if (get_pcvar_num(g_pCvarLevelEffects) != 0) { // Screen Fade message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, id) write_short(4096*2) write_short(4096*5) write_short(0x0001) write_byte(random(256)) write_byte(random(256)) write_byte(random(256)) write_byte(150) message_end() // Screen Shake message_begin(MSG_ONE, get_user_msgid("ScreenShake"), {0,0,0}, id) write_short(255<<14) write_short(10<<14) write_short(255<<14) message_end() } } } } public ze_user_infected(iVictim, iInfector) { if (iInfector == 0) return new iXP = g_bIsDoubleHours ? (get_pcvar_num(g_pCvarZombieInfect) * 2) : get_pcvar_num(g_pCvarZombieInfect) Reward(iInfector, (g_iXP[iInfector] + iXP)) } public Fw_TakeDamage_Post(iVictim, iInflictor, iAttacker, Float:fDamage, bitsDamageType) { // Player Damage Himself if (iVictim == iAttacker || !is_user_alive(iVictim) || !is_user_alive(iAttacker) || ze_is_user_zombie(iAttacker) || !get_pcvar_num(g_pCvarEnableDamage)) return HC_CONTINUE // Same Team? if (get_member(iAttacker, m_iTeam) == get_member(iVictim, m_iTeam)) return HC_CONTINUE // Store Damage For every Player g_fDamage[iAttacker] += fDamage // Damage Calculator Equal or Higher than needed damage if (g_fDamage[iAttacker] >= get_pcvar_float(g_pCvarRequiredDamage)) { // Player did damage that a multiplication of the cvar? Increase coins by this factor new iMultiplier = floatround(g_fDamage[iAttacker] / get_pcvar_float(g_pCvarRequiredDamage)) new iXP = ((g_bIsDoubleHours ? (get_pcvar_num(g_pCvarDamageAward) * 2) : get_pcvar_num(g_pCvarDamageAward)) * iMultiplier) Reward(iAttacker, (g_iXP[iAttacker] + iXP)) // Rest The Damage Calculator g_fDamage[iAttacker] = 0.0 } return HC_CONTINUE } public Reward(id, XP) { if ((g_iLevel[id] + 1) < MAX_LEVEL) { g_iXP[id] = XP Check_User_Level(id) } else { if ((g_iXP[id] + XP) >= g_iMaxLevelsXP[MAX_LEVEL - 1]) { g_iXP[id] = g_iMaxXP[id] = g_iMaxLevelsXP[MAX_LEVEL - 1] } } SaveData(id) } public SaveData(id) { new szAuthID[35], szName[32] get_user_authid(id, szAuthID, charsmax(szAuthID)) get_user_name(id, szName, charsmax(szName)) if (!get_pcvar_num(g_pCvarSaveType)) { new szData[256] formatex(szData , charsmax(szData), "%i %i", g_iLevel[id], g_iXP[id]) // Open the Vaults g_iLevelsVaultHandle = nvault_open(g_szLevelsVault) g_iRanksVaultHandle = nvault_open(g_szRanksVault) // Saves His Data nvault_set(g_iLevelsVaultHandle, szAuthID, szData) nvault_set(g_iRanksVaultHandle, szAuthID, szName) // Close Vaults nvault_close(g_iLevelsVaultHandle) nvault_close(g_iRanksVaultHandle) } else { new szQuery[128] formatex(szQuery, charsmax(szQuery), "UPDATE `zombie_escape` SET `Level` = '%d', `XP` = '%d' WHERE ( `SteamID` = '%s' );", g_iLevel[id], g_iXP[id], szAuthID) SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery) } } public QuerySetData(iFailState, Handle:hQuery, szError[], iError, szData[], iSize, Float:flQueueTime) { SQL_IsFail(iFailState, iError, szError, g_szLogFile) } public QuerySetData2(iFailState, Handle:hQuery, szError[], iError, szData[], iSize, Float:flQueueTime) { SQL_IsFail(iFailState, iError, szError, g_szLogFile) } public LoadData(id) { new szAuthID[35] get_user_authid(id, szAuthID, charsmax(szAuthID)) if (!get_pcvar_num(g_pCvarSaveType)) { new szData[256], iTimestamp, iExists // Open the Vault g_iLevelsVaultHandle = nvault_open(g_szLevelsVault) iExists = nvault_lookup(g_iLevelsVaultHandle, szAuthID, szData, charsmax(szData), iTimestamp) // Close Vault nvault_close(g_iLevelsVaultHandle) if (!iExists) { g_iLevel[id] = 0 g_iXP[id] = get_pcvar_num(g_pCvarStartXP) SaveData(id) } else { new iLevel[32], iXP[32] parse(szData, iLevel, 31, iXP, 31) g_iLevel[id] = str_to_num(iLevel) g_iXP[id] = str_to_num(iXP) } g_iMaxXP[id] = g_iMaxLevelsXP[g_iLevel[id]] } else { new szQuery[128], szData[5] formatex(szQuery, charsmax(szQuery), "SELECT * FROM `zombie_escape` WHERE ( `SteamID` = '%s' );", szAuthID) num_to_str(id, szData, charsmax(szData)) SQL_ThreadQuery(g_hTuple, "QuerySelectData", szQuery, szData, charsmax(szData)) } } public QuerySelectData(iFailState, Handle:hQuery, szError[], iError, szData[]) { if (SQL_IsFail(iFailState, iError, szError, g_szLogFile)) return new id = str_to_num(szData) // No results for this query means this is new player if (!SQL_NumResults(hQuery)) { g_iLevel[id] = 0 g_iXP[id] = get_pcvar_num(g_pCvarStartXP) } else { g_iLevel[id] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "Level")) g_iXP[id] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "XP")) } g_iMaxXP[id] = g_iMaxLevelsXP[g_iLevel[id]] } public native_ze_get_user_xp(id) { if(!is_user_connected(id)) { log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id) return false; } return g_iXP[id] } public native_ze_set_user_xp(id, amount) { if(!is_user_connected(id)) { log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id) return false } DoubleHours() new addedXP = (amount - g_iXP[id]) new iXP = g_bIsDoubleHours ? (addedXP * 2) : addedXP Reward(id, g_iXP[id] + iXP) return true } public native_ze_get_user_level(id) { if(!is_user_connected(id)) { log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id) return false; } return g_iLevel[id] } public native_ze_set_user_level(id, amount) { if(!is_user_connected(id)) { log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id) return false } if (amount > MAX_LEVEL) { log_error(AMX_ERR_NATIVE, "Level must be less than or equal to MAX_LEVEL (%d)", MAX_LEVEL) return false } g_iLevel[id] = amount if (get_pcvar_num(g_pCvarStartFromZero) == 1) { g_iXP[id] = 0 } SaveData(id) return true } public native_ze_get_user_max_xp(id) { if(!is_user_connected(id)) { log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id) return false } return g_iMaxXP[id] } stock DoubleHours() { new szTime[3], szDoubleHours[32], szDoubleHours_Start[32], szDoubleHours_End[32] get_time("%H", szTime, charsmax(szTime)) get_pcvar_string(g_pCvarDoubleXP, szDoubleHours, charsmax(szDoubleHours)) for (new ch = 0; ch <= charsmax(szDoubleHours); ch++) { if (szDoubleHours[ch] == '-') szDoubleHours[ch] = ' ' } parse(szDoubleHours, szDoubleHours_Start, charsmax(szDoubleHours_Start), szDoubleHours_End, charsmax(szDoubleHours_End)) new iTime, iDoubleHourStart, iDoubleHourEnd iTime = str_to_num(szTime) iDoubleHourStart = str_to_num(szDoubleHours_Start) iDoubleHourEnd = str_to_num(szDoubleHours_End) if (iDoubleHourEnd > iTime >= iDoubleHourStart) { g_bIsDoubleHours = true } else { g_bIsDoubleHours = false } }
Code: Select all
#include <zombie_escape>
#include <ze_vip>
// Defines
#define MAX_LEVEL 39
#define TASK_SHOWHUD 2020
#define TASK_DOUBLE 1133
#define REPEAT_TIME 60.0
#define ID_SHOWHUD (taskid - TASK_SHOWHUD)
#define LEVELUP "levelup_ZE/ze_levelup.wav"
enum
{
Host = 0,
User,
Pass,
DB
}
new const g_iMaxLevelsXP[MAX_LEVEL] =
{
30000, // 1
60000, // 2
100000, // 3
160000, // 4
250000, // 5
350000, // 6
500000, // 7
1050000, // 8
1500000, // 9
2000000, // 10
2500000, // 11
3508000, // 12
4500000, // 13
6600000, // 14
9100000, // 15
12520000, // 16
15600000, // 17
19500000, // 18
23900000, // 19
26900000, // 20
30500000, // 21
35000000, // 22
41000000, // 23
48500000, // 24
59000000, // 25
75050000, // 26
102000000, // 27
150000000, // 28
220000300, // 29
300300000, // 30
399999999, // 31
500000000, // 32
695500000, // 33
890000000, // 34
1275000000, // 35
1599999999, // 36
1650000000, // 37
1850000000, // 38
2150000000 // 39
}
// Constants
new const g_szLevelsVault[] = "Levels"
new const g_szRanksVault[] = "Ranks"
new const g_szLogFile[] = "Levels.log" // MySQL Errors log file
new const g_szTable[] =
" \
ALTER TABLE `test` \
ADD IF NOT EXISTS `Level` int(20) NOT NULL DEFAULT '0', \
ADD IF NOT EXISTS `XP` int(20) NOT NULL DEFAULT '0'; \
"
// Messages
const Float:HUD_SPECT_X = -1.0
const Float:HUD_SPECT_Y = 0.70
const Float:HUD_STATS_X = 0.01
const Float:HUD_STATS_Y = 0.29
const HUD_STATS_ZOMBIE_R = 200
const HUD_STATS_ZOMBIE_G = 220
const HUD_STATS_ZOMBIE_B = 0
const HUD_STATS_HUMAN_R = 0
const HUD_STATS_HUMAN_G = 200
const HUD_STATS_HUMAN_B = 210
const HUD_STATS_SPEC_R = 100
const HUD_STATS_SPEC_G = 100
const HUD_STATS_SPEC_B = 100
// Variables
new g_iLevel[33],
g_iXP[33],
g_iMaxXP[33],
Float:g_fDamage[33],
g_MsgSync,
g_iLevelsVaultHandle,
g_iRanksVaultHandle,
Handle:g_hTuple,
Fw_LevelUP,
ForwardReturn,
bool:g_bIsDoubleHours
// Cvars
new g_pCvarZombieInfect,
g_pCvarEscapeSuccess,
g_pCvarEnableDamage,
g_pCvarRequiredDamage,
g_pCvarDamageAward,
g_pCvarStartXP,
g_pCvarPercentageStyle,
g_pCvarStartFromZero,
g_pCvarAddCommas,
g_pCvarLevelEffects,
g_pCvarSaveType,
g_pCvarDBInfo[4],
g_pCvarDoubleXP
public plugin_natives()
{
register_native("ze_get_user_xp", "native_ze_get_user_xp", 1)
register_native("ze_set_user_xp", "native_ze_set_user_xp", 1)
register_native("ze_get_user_level", "native_ze_get_user_level", 1)
register_native("ze_set_user_level", "native_ze_set_user_level", 1)
register_native("ze_get_user_max_xp", "native_ze_get_user_max_xp", 1)
}
public plugin_precache()
{
precache_sound(LEVELUP)
}
public plugin_init()
{
register_plugin("[ZE] Level-XP System", "1.9", "Raheem/JaCk")
// Hook Chains
RegisterHookChain(RG_CBasePlayer_TakeDamage, "Fw_TakeDamage_Post", 1)
Fw_LevelUP = CreateMultiForward("ze_on_levelup", ET_IGNORE, FP_CELL)
// Cvars
g_pCvarZombieInfect = register_cvar("ze_zombie_infect", "3")
g_pCvarEscapeSuccess = register_cvar("ze_escape_success", "5")
g_pCvarEnableDamage = register_cvar("ze_enable_dmg", "1")
g_pCvarRequiredDamage = register_cvar("ze_required_dmg", "50.0")
g_pCvarDamageAward = register_cvar("ze_dmg_award", "3")
g_pCvarStartXP = register_cvar("ze_start_xp", "0")
g_pCvarPercentageStyle = register_cvar("ze_enable_percentage_style", "0")
g_pCvarStartFromZero = register_cvar("ze_new_level_zero_xp", "0")
g_pCvarAddCommas = register_cvar("ze_add_commas_to_xp", "1")
g_pCvarLevelEffects = register_cvar("ze_level_up_effects", "0")
g_pCvarDoubleXP = register_cvar("ze_double_xp", "15-22")
g_pCvarSaveType = register_cvar("ze_levels_save_type", "0")
g_pCvarDBInfo[Host] = register_cvar("ze_levels_host", "127.0.0.1")
g_pCvarDBInfo[User] = register_cvar("ze_levels_user", "root")
g_pCvarDBInfo[Pass] = register_cvar("ze_levels_pass", "password")
g_pCvarDBInfo[DB] = register_cvar("ze_levels_dbname", "levels_db")
// Messages
g_MsgSync = CreateHudSyncObj()
if (get_pcvar_num(g_pCvarSaveType))
{
set_task(0.1, "Delay_MySQL_Init")
}
DoubleHours()
if (g_bIsDoubleHours)
{
set_task(REPEAT_TIME, "HappyHours", TASK_DOUBLE, _, _, "b")
}
}
public plugin_end()
{
if (get_pcvar_num(g_pCvarSaveType))
{
if (g_hTuple != Empty_Handle)
{
SQL_FreeHandle(g_hTuple)
}
}
}
public Delay_MySQL_Init()
{
MySQL_Init()
}
public MySQL_Init()
{
if (!get_pcvar_num(g_pCvarSaveType))
return
new szHost[64], szUser[32], szPass[32], szDB[128]
get_pcvar_string(g_pCvarDBInfo[Host], szHost, charsmax(szHost))
get_pcvar_string(g_pCvarDBInfo[User], szUser, charsmax(szUser))
get_pcvar_string(g_pCvarDBInfo[Pass], szPass, charsmax(szPass))
get_pcvar_string(g_pCvarDBInfo[DB], szDB, charsmax(szDB))
g_hTuple = SQL_MakeDbTuple(szHost, szUser, szPass, szDB)
// Let's ensure that the g_hTuple will be valid, we will access the database to make sure
new iErrorCode, szError[512], Handle:hSQLConnection
hSQLConnection = SQL_Connect(g_hTuple, iErrorCode, szError, charsmax(szError))
if (hSQLConnection != Empty_Handle)
{
log_amx("[MySQL][LVL] Successfully connected to host: %s (ALL IS OK).", szHost)
SQL_FreeHandle(hSQLConnection)
}
else
{
// Disable plugin
set_fail_state("[LVL] Failed to connect to MySQL database: %s.", szError)
}
SQL_ThreadQuery(g_hTuple, "QueryCreateTable", g_szTable)
}
public QueryCreateTable(iFailState, Handle:hQuery, szError[], iError, szData[], iSize, Float:flQueueTime)
{
SQL_IsFail(iFailState, iError, szError, g_szLogFile)
}
public client_putinserver(id)
{
if(is_user_hltv(id) || is_user_bot(id))
return
// Just 1 second delay
set_task(1.0, "DelayLoad", id)
// Other tasks
set_task(1.0, "Show_Hud", id+TASK_SHOWHUD, _, _, "b")
if (g_bIsDoubleHours)
{
set_task(REPEAT_TIME, "HappyHours", id+TASK_DOUBLE, _, _, "b")
}
}
public HappyHours(taskid)
{
DoubleHours()
if (!g_bIsDoubleHours)
remove_task(taskid)
new szDoubleHours[32]
get_pcvar_string(g_pCvarDoubleXP, szDoubleHours, charsmax(szDoubleHours))
set_dhudmessage(0, 255, 0, -1.0, 0.12, 0, 0.0, 10.0)
show_dhudmessage(0, "DOUBLE XP: %s", szDoubleHours)
}
public DelayLoad(id)
{
// Load his data
LoadData(id)
}
public client_disconnected(id)
{
if(is_user_hltv(id) || is_user_bot(id))
return
remove_task(id+TASK_SHOWHUD)
remove_task(id)
}
public Show_Hud(taskid)
{
new iPlayer = ID_SHOWHUD
if (!is_user_alive(iPlayer))
{
iPlayer = pev(iPlayer, pev_iuser2)
if (!is_user_alive(iPlayer))
return
}
if (get_pcvar_num(g_pCvarPercentageStyle) != 0)
{
if(iPlayer != ID_SHOWHUD)
{
set_hudmessage(HUD_STATS_SPEC_R, HUD_STATS_SPEC_G, HUD_STATS_SPEC_B, HUD_SPECT_X, HUD_SPECT_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %0.2f %", g_iLevel[iPlayer], (float(g_iXP[iPlayer])/float(g_iMaxXP[iPlayer])) * 100.0)
}
else if (ze_is_user_zombie(iPlayer))
{
set_hudmessage(HUD_STATS_ZOMBIE_R, HUD_STATS_ZOMBIE_G, HUD_STATS_ZOMBIE_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %0.2f %", g_iLevel[ID_SHOWHUD], (float(g_iXP[ID_SHOWHUD])/float(g_iMaxXP[ID_SHOWHUD])) * 100.0)
}
else
{
set_hudmessage(HUD_STATS_HUMAN_R, HUD_STATS_HUMAN_G, HUD_STATS_HUMAN_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %0.2f %", g_iLevel[ID_SHOWHUD], (float(g_iXP[ID_SHOWHUD])/float(g_iMaxXP[ID_SHOWHUD])) * 100.0)
}
}
else
{
if(iPlayer != ID_SHOWHUD)
{
if (get_pcvar_num(g_pCvarAddCommas) == 1)
{
new szSpecXP[15], szSpecMaxXP[15]
AddCommas(g_iXP[iPlayer], szSpecXP, charsmax(szSpecXP))
AddCommas(g_iMaxXP[iPlayer], szSpecMaxXP, charsmax(szSpecMaxXP))
set_hudmessage(HUD_STATS_SPEC_R, HUD_STATS_SPEC_G, HUD_STATS_SPEC_B, HUD_SPECT_X, HUD_SPECT_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %s/%s", g_iLevel[iPlayer], szSpecXP, szSpecMaxXP)
}
else
{
set_hudmessage(HUD_STATS_SPEC_R, HUD_STATS_SPEC_G, HUD_STATS_SPEC_B, HUD_SPECT_X, HUD_SPECT_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %d/%d", g_iLevel[iPlayer], g_iXP[iPlayer], g_iMaxXP[iPlayer])
}
}
else if (ze_is_user_zombie(iPlayer))
{
if (get_pcvar_num(g_pCvarAddCommas) == 1)
{
new szZombieXP[15], szZombieMaxXP[15]
AddCommas(g_iXP[ID_SHOWHUD], szZombieXP, charsmax(szZombieXP))
AddCommas(g_iMaxXP[ID_SHOWHUD], szZombieMaxXP, charsmax(szZombieMaxXP))
set_hudmessage(HUD_STATS_ZOMBIE_R, HUD_STATS_ZOMBIE_G, HUD_STATS_ZOMBIE_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %s/%s", g_iLevel[ID_SHOWHUD], szZombieXP, szZombieMaxXP)
}
else
{
set_hudmessage(HUD_STATS_ZOMBIE_R, HUD_STATS_ZOMBIE_G, HUD_STATS_ZOMBIE_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %d/%d", g_iLevel[ID_SHOWHUD], g_iXP[ID_SHOWHUD], g_iMaxXP[ID_SHOWHUD])
}
}
else
{
if (get_pcvar_num(g_pCvarAddCommas) == 1)
{
new szHumanXP[15], szHumanMaxXP[15]
AddCommas(g_iXP[ID_SHOWHUD], szHumanXP, charsmax(szHumanXP))
AddCommas(g_iMaxXP[ID_SHOWHUD], szHumanMaxXP, charsmax(szHumanMaxXP))
set_hudmessage(HUD_STATS_HUMAN_R, HUD_STATS_HUMAN_G, HUD_STATS_HUMAN_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %s/%s", g_iLevel[ID_SHOWHUD], szHumanXP, szHumanMaxXP)
}
else
{
set_hudmessage(HUD_STATS_HUMAN_R, HUD_STATS_HUMAN_G, HUD_STATS_HUMAN_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %d/%d", g_iLevel[ID_SHOWHUD], g_iXP[ID_SHOWHUD], g_iMaxXP[ID_SHOWHUD])
}
}
}
}
public ze_roundend(WinTeam)
{
if (WinTeam == ZE_TEAM_HUMAN)
{
for(new id = 1; id <= get_member_game(m_nMaxPlayers); id++)
{
if (!is_user_alive(id) || ze_is_user_zombie(id))
continue
new iXP = g_bIsDoubleHours && ((ze_get_vip_flags(id) & VIP_A)) ? (get_pcvar_num(g_pCvarEscapeSuccess) * 2) : get_pcvar_num(g_pCvarEscapeSuccess)
Reward(id, (g_iXP[id] + iXP))
}
}
remove_task(TASK_SHOWHUD)
}
public Check_User_Level(id)
{
if (!is_user_connected(id))
return
if (g_iLevel[id] < MAX_LEVEL)
{
new szName[32]
while (g_iXP[id] > g_iMaxXP[id])
{
if (get_pcvar_num(g_pCvarStartFromZero) == 1)
{
g_iXP[id] = 0
}
g_iLevel[id]++
g_iMaxXP[id] = g_iMaxLevelsXP[g_iLevel[id]]
get_user_name(id, szName, charsmax(szName))
ze_colored_print(0, "!g%s !tNow in Level %i!y!", szName, g_iLevel[id])
ExecuteForward(Fw_LevelUP, ForwardReturn, id)
SaveData(id)
PlaySound(id, LEVELUP)
if (get_pcvar_num(g_pCvarLevelEffects) != 0)
{
// Screen Fade
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, id)
write_short(4096*2)
write_short(4096*5)
write_short(0x0001)
write_byte(random(256))
write_byte(random(256))
write_byte(random(256))
write_byte(150)
message_end()
// Screen Shake
message_begin(MSG_ONE, get_user_msgid("ScreenShake"), {0,0,0}, id)
write_short(255<<14)
write_short(10<<14)
write_short(255<<14)
message_end()
}
}
}
}
public ze_user_infected(iVictim, iInfector)
{
if (iInfector == 0)
return
new iXP = g_bIsDoubleHours && ((ze_get_vip_flags(iInfector) & VIP_A)) ? (get_pcvar_num(g_pCvarZombieInfect) * 2) : get_pcvar_num(g_pCvarZombieInfect)
Reward(iInfector, (g_iXP[iInfector] + iXP))
}
public Fw_TakeDamage_Post(iVictim, iInflictor, iAttacker, Float:fDamage, bitsDamageType)
{
// Player Damage Himself
if (iVictim == iAttacker || !is_user_alive(iVictim) || !is_user_alive(iAttacker) || ze_is_user_zombie(iAttacker) || !get_pcvar_num(g_pCvarEnableDamage))
return HC_CONTINUE
// Same Team?
if (get_member(iAttacker, m_iTeam) == get_member(iVictim, m_iTeam))
return HC_CONTINUE
// Store Damage For every Player
g_fDamage[iAttacker] += fDamage
// Damage Calculator Equal or Higher than needed damage
if (g_fDamage[iAttacker] >= get_pcvar_float(g_pCvarRequiredDamage))
{
// Player did damage that a multiplication of the cvar? Increase coins by this factor
new iMultiplier = floatround(g_fDamage[iAttacker] / get_pcvar_float(g_pCvarRequiredDamage))
new iXP = ((g_bIsDoubleHours && ((ze_get_vip_flags(iAttacker) & VIP_A)) ? (get_pcvar_num(g_pCvarDamageAward) * 2) : get_pcvar_num(g_pCvarDamageAward)) * iMultiplier)
Reward(iAttacker, (g_iXP[iAttacker] + iXP))
// Rest The Damage Calculator
g_fDamage[iAttacker] = 0.0
}
return HC_CONTINUE
}
public Reward(id, XP)
{
if ((g_iLevel[id] + 1) < MAX_LEVEL)
{
g_iXP[id] = XP
Check_User_Level(id)
}
else
{
if ((g_iXP[id] + XP) >= g_iMaxLevelsXP[MAX_LEVEL - 1])
{
g_iXP[id] = g_iMaxXP[id] = g_iMaxLevelsXP[MAX_LEVEL - 1]
}
}
SaveData(id)
}
public SaveData(id)
{
new szAuthID[35], szName[32]
get_user_authid(id, szAuthID, charsmax(szAuthID))
get_user_name(id, szName, charsmax(szName))
if (!get_pcvar_num(g_pCvarSaveType))
{
new szData[256]
formatex(szData , charsmax(szData), "%i %i", g_iLevel[id], g_iXP[id])
// Open the Vaults
g_iLevelsVaultHandle = nvault_open(g_szLevelsVault)
g_iRanksVaultHandle = nvault_open(g_szRanksVault)
// Saves His Data
nvault_set(g_iLevelsVaultHandle, szAuthID, szData)
nvault_set(g_iRanksVaultHandle, szAuthID, szName)
// Close Vaults
nvault_close(g_iLevelsVaultHandle)
nvault_close(g_iRanksVaultHandle)
}
else
{
new szQuery[128]
formatex(szQuery, charsmax(szQuery), "UPDATE `zombie_escape` SET `Level` = '%d', `XP` = '%d' WHERE ( `SteamID` = '%s' );", g_iLevel[id], g_iXP[id], szAuthID)
SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery)
}
}
public QuerySetData(iFailState, Handle:hQuery, szError[], iError, szData[], iSize, Float:flQueueTime)
{
SQL_IsFail(iFailState, iError, szError, g_szLogFile)
}
public QuerySetData2(iFailState, Handle:hQuery, szError[], iError, szData[], iSize, Float:flQueueTime)
{
SQL_IsFail(iFailState, iError, szError, g_szLogFile)
}
public LoadData(id)
{
new szAuthID[35]
get_user_authid(id, szAuthID, charsmax(szAuthID))
if (!get_pcvar_num(g_pCvarSaveType))
{
new szData[256], iTimestamp, iExists
// Open the Vault
g_iLevelsVaultHandle = nvault_open(g_szLevelsVault)
iExists = nvault_lookup(g_iLevelsVaultHandle, szAuthID, szData, charsmax(szData), iTimestamp)
// Close Vault
nvault_close(g_iLevelsVaultHandle)
if (!iExists)
{
g_iLevel[id] = 0
g_iXP[id] = get_pcvar_num(g_pCvarStartXP)
SaveData(id)
}
else
{
new iLevel[32], iXP[32]
parse(szData, iLevel, 31, iXP, 31)
g_iLevel[id] = str_to_num(iLevel)
g_iXP[id] = str_to_num(iXP)
}
g_iMaxXP[id] = g_iMaxLevelsXP[g_iLevel[id]]
}
else
{
new szQuery[128], szData[5]
formatex(szQuery, charsmax(szQuery), "SELECT * FROM `zombie_escape` WHERE ( `SteamID` = '%s' );", szAuthID)
num_to_str(id, szData, charsmax(szData))
SQL_ThreadQuery(g_hTuple, "QuerySelectData", szQuery, szData, charsmax(szData))
}
}
public QuerySelectData(iFailState, Handle:hQuery, szError[], iError, szData[])
{
if (SQL_IsFail(iFailState, iError, szError, g_szLogFile))
return
new id = str_to_num(szData)
// No results for this query means this is new player
if (!SQL_NumResults(hQuery))
{
g_iLevel[id] = 0
g_iXP[id] = get_pcvar_num(g_pCvarStartXP)
}
else
{
g_iLevel[id] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "Level"))
g_iXP[id] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "XP"))
}
g_iMaxXP[id] = g_iMaxLevelsXP[g_iLevel[id]]
}
public native_ze_get_user_xp(id)
{
if(!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
return false;
}
return g_iXP[id]
}
public native_ze_set_user_xp(id, amount)
{
if(!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
return false
}
DoubleHours()
new addedXP = (amount - g_iXP[id])
new iXP = g_bIsDoubleHours ? (addedXP * 2) : addedXP
Reward(id, g_iXP[id] + iXP)
return true
}
public native_ze_get_user_level(id)
{
if(!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
return false;
}
return g_iLevel[id]
}
public native_ze_set_user_level(id, amount)
{
if(!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
return false
}
if (amount > MAX_LEVEL)
{
log_error(AMX_ERR_NATIVE, "Level must be less than or equal to MAX_LEVEL (%d)", MAX_LEVEL)
return false
}
g_iLevel[id] = amount
if (get_pcvar_num(g_pCvarStartFromZero) == 1)
{
g_iXP[id] = 0
}
SaveData(id)
return true
}
public native_ze_get_user_max_xp(id)
{
if(!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
return false
}
return g_iMaxXP[id]
}
stock DoubleHours()
{
new szTime[3], szDoubleHours[32], szDoubleHours_Start[32], szDoubleHours_End[32]
get_time("%H", szTime, charsmax(szTime))
get_pcvar_string(g_pCvarDoubleXP, szDoubleHours, charsmax(szDoubleHours))
for (new ch = 0; ch <= charsmax(szDoubleHours); ch++)
{
if (szDoubleHours[ch] == '-')
szDoubleHours[ch] = ' '
}
parse(szDoubleHours, szDoubleHours_Start, charsmax(szDoubleHours_Start), szDoubleHours_End, charsmax(szDoubleHours_End))
new iTime, iDoubleHourStart, iDoubleHourEnd
iTime = str_to_num(szTime)
iDoubleHourStart = str_to_num(szDoubleHours_Start)
iDoubleHourEnd = str_to_num(szDoubleHours_End)
if (iDoubleHourEnd > iTime >= iDoubleHourStart)
{
g_bIsDoubleHours = true
}
else
{
g_bIsDoubleHours = false
}
}
-
- Veteran Member
- Posts: 598
- Joined: 7 years ago
- Contact:
i just tested the code and yes it's not working cuz your code is not even counting XP even the first code your post
-
- Veteran Member
- Posts: 598
- Joined: 7 years ago
- Contact:
what? I am using this 2 years, double exp working too. Remember, 1 shot will not give you any XP because it depends on damage. For example 15k damage = 2 xp
i tried your plugin on ze v 1.6 and just damage xp is working..... i have created my own double exp & vip's double xp a year a go and it's working on all versions so well but your code is fu**ed broczirimbolo wrote: ↑2 years agowhat? I am using this 2 years, double exp working too. Remember, 1 shot will not give you any XP because it depends on damage. For example 15k damage = 2 xp
-
- Veteran Member
- Posts: 598
- Joined: 7 years ago
- Contact:
can you show your level system? For me all is working, xp for escapes, infections, supplyboxes, best defender/infector, damage etcsPe3doN wrote: ↑1 year agoi tried your plugin on ze v 1.6 and just damage xp is working..... i have created my own double exp & vip's double xp a year a go and it's working on all versions so well but your code is fu**ed broczirimbolo wrote: ↑2 years agowhat? I am using this 2 years, double exp working too. Remember, 1 shot will not give you any XP because it depends on damage. For example 15k damage = 2 xp
do you want make plugin are give VIPs players x2 XP?
-
- Veteran Member
- Posts: 598
- Joined: 7 years ago
- Contact:
yes
I can create that for you, But I need make
Give me your Level-System.sma
Forward
called when XP updated.Give me your Level-System.sma
-
- Veteran Member
- Posts: 598
- Joined: 7 years ago
- Contact:
Code: Select all
#include <zombie_escape>
// Defines
#define MAX_LEVEL 38
#define TASK_SHOWHUD 2020
#define TASK_DOUBLE 1133
#define REPEAT_TIME 60.0
#define ID_SHOWHUD (taskid - TASK_SHOWHUD)
#define LEVELUP "levelup_ZE/ze_levelup.wav"
enum
{
Host = 0,
User,
Pass,
DB
}
new const g_iMaxLevelsXP[MAX_LEVEL] =
{
32000, // 1
70000, // 2
140000, // 3
250000, // 4
370000, // 5
500000, // 6
1003030, // 7
1550000, // 8
2200000, // 9
3000000, // 10
3800000, // 11
4808000, // 12
6500000, // 13
8600000, // 14
11100000, // 15
12720000, // 16
15600000, // 17
19500000, // 18
23900000, // 19
26900000, // 20
30500000, // 21
35000000, // 22
41000000, // 23
48500000, // 24
59000000, // 25
75050000, // 26
102000000, // 27
150000000, // 28
220000300, // 29
300300000, // 30
399999999, // 31
500000000, // 32
695500000, // 33
890000000, // 34
1275000000, // 35
1599999999, // 36
1650000000, // 37
1850000000 // 37
}
// Constants
new const g_szLevelsVault[] = "Levels"
new const g_szRanksVault[] = "Ranks"
new const g_szLogFile[] = "Levels.log" // MySQL Errors log file
new const g_szTable[] =
" \
ALTER TABLE `test` \
ADD IF NOT EXISTS `Level` int(20) NOT NULL DEFAULT '0', \
ADD IF NOT EXISTS `XP` int(20) NOT NULL DEFAULT '0'; \
"
// Messages
const Float:HUD_SPECT_X = -1.0
const Float:HUD_SPECT_Y = 0.70
const Float:HUD_STATS_X = 0.01
const Float:HUD_STATS_Y = 0.29
const HUD_STATS_ZOMBIE_R = 200
const HUD_STATS_ZOMBIE_G = 220
const HUD_STATS_ZOMBIE_B = 0
const HUD_STATS_HUMAN_R = 0
const HUD_STATS_HUMAN_G = 200
const HUD_STATS_HUMAN_B = 210
const HUD_STATS_SPEC_R = 100
const HUD_STATS_SPEC_G = 100
const HUD_STATS_SPEC_B = 100
// Variables
new g_iLevel[33],
g_iXP[33],
g_iMaxXP[33],
Float:g_fDamage[33],
g_MsgSync,
g_iLevelsVaultHandle,
g_iRanksVaultHandle,
Handle:g_hTuple,
Fw_LevelUP,
ForwardReturn,
bool:g_bIsDoubleHours
// Cvars
new g_pCvarZombieInfect,
g_pCvarEscapeSuccess,
g_pCvarEnableDamage,
g_pCvarRequiredDamage,
g_pCvarDamageAward,
g_pCvarStartXP,
g_pCvarPercentageStyle,
g_pCvarStartFromZero,
g_pCvarAddCommas,
g_pCvarLevelEffects,
g_pCvarSaveType,
g_pCvarDBInfo[4],
g_pCvarDoubleXP
public plugin_natives()
{
register_native("ze_get_user_xp", "native_ze_get_user_xp", 1)
register_native("ze_set_user_xp", "native_ze_set_user_xp", 1)
register_native("ze_get_user_level", "native_ze_get_user_level", 1)
register_native("ze_set_user_level", "native_ze_set_user_level", 1)
register_native("ze_get_user_max_xp", "native_ze_get_user_max_xp", 1)
}
public plugin_precache()
{
precache_sound(LEVELUP)
}
public plugin_init()
{
register_plugin("[ZE] Level-XP System", "1.9", "Raheem/JaCk")
// Hook Chains
RegisterHookChain(RG_CBasePlayer_TakeDamage, "Fw_TakeDamage_Post", 1)
Fw_LevelUP = CreateMultiForward("ze_on_levelup", ET_IGNORE, FP_CELL)
// Cvars
g_pCvarZombieInfect = register_cvar("ze_zombie_infect", "3")
g_pCvarEscapeSuccess = register_cvar("ze_escape_success", "5")
g_pCvarEnableDamage = register_cvar("ze_enable_dmg", "1")
g_pCvarRequiredDamage = register_cvar("ze_required_dmg", "50.0")
g_pCvarDamageAward = register_cvar("ze_dmg_award", "3")
g_pCvarStartXP = register_cvar("ze_start_xp", "0")
g_pCvarPercentageStyle = register_cvar("ze_enable_percentage_style", "0")
g_pCvarStartFromZero = register_cvar("ze_new_level_zero_xp", "0")
g_pCvarAddCommas = register_cvar("ze_add_commas_to_xp", "1")
g_pCvarLevelEffects = register_cvar("ze_level_up_effects", "0")
g_pCvarDoubleXP = register_cvar("ze_double_xp", "15-22")
g_pCvarSaveType = register_cvar("ze_levels_save_type", "0")
g_pCvarDBInfo[Host] = register_cvar("ze_levels_host", "127.0.0.1")
g_pCvarDBInfo[User] = register_cvar("ze_levels_user", "root")
g_pCvarDBInfo[Pass] = register_cvar("ze_levels_pass", "password")
g_pCvarDBInfo[DB] = register_cvar("ze_levels_dbname", "levels_db")
// Messages
g_MsgSync = CreateHudSyncObj()
if (get_pcvar_num(g_pCvarSaveType))
{
set_task(0.1, "Delay_MySQL_Init")
}
DoubleHours()
if (g_bIsDoubleHours)
{
set_task(REPEAT_TIME, "HappyHours", TASK_DOUBLE, _, _, "b")
}
}
public plugin_end()
{
if (get_pcvar_num(g_pCvarSaveType))
{
if (g_hTuple != Empty_Handle)
{
SQL_FreeHandle(g_hTuple)
}
}
}
public Delay_MySQL_Init()
{
MySQL_Init()
}
public MySQL_Init()
{
if (!get_pcvar_num(g_pCvarSaveType))
return
new szHost[64], szUser[32], szPass[32], szDB[128]
get_pcvar_string(g_pCvarDBInfo[Host], szHost, charsmax(szHost))
get_pcvar_string(g_pCvarDBInfo[User], szUser, charsmax(szUser))
get_pcvar_string(g_pCvarDBInfo[Pass], szPass, charsmax(szPass))
get_pcvar_string(g_pCvarDBInfo[DB], szDB, charsmax(szDB))
g_hTuple = SQL_MakeDbTuple(szHost, szUser, szPass, szDB)
// Let's ensure that the g_hTuple will be valid, we will access the database to make sure
new iErrorCode, szError[512], Handle:hSQLConnection
hSQLConnection = SQL_Connect(g_hTuple, iErrorCode, szError, charsmax(szError))
if (hSQLConnection != Empty_Handle)
{
log_amx("[MySQL][LVL] Successfully connected to host: %s (ALL IS OK).", szHost)
SQL_FreeHandle(hSQLConnection)
}
else
{
// Disable plugin
set_fail_state("[LVL] Failed to connect to MySQL database: %s.", szError)
}
SQL_ThreadQuery(g_hTuple, "QueryCreateTable", g_szTable)
}
public QueryCreateTable(iFailState, Handle:hQuery, szError[], iError, szData[], iSize, Float:flQueueTime)
{
SQL_IsFail(iFailState, iError, szError, g_szLogFile)
}
public client_putinserver(id)
{
if(is_user_hltv(id) || is_user_bot(id))
return
// Just 1 second delay
set_task(1.0, "DelayLoad", id)
// Other tasks
set_task(1.0, "Show_Hud", id+TASK_SHOWHUD, _, _, "b")
if (g_bIsDoubleHours)
{
set_task(REPEAT_TIME, "HappyHours", id+TASK_DOUBLE, _, _, "b")
}
}
public HappyHours(taskid)
{
DoubleHours()
if (!g_bIsDoubleHours)
remove_task(taskid)
new szDoubleHours[32]
get_pcvar_string(g_pCvarDoubleXP, szDoubleHours, charsmax(szDoubleHours))
set_dhudmessage(0, 255, 0, -1.0, 0.12, 0, 0.0, 10.0)
show_dhudmessage(0, "DOUBLE XP: %s", szDoubleHours)
}
public DelayLoad(id)
{
// Load his data
LoadData(id)
}
public client_disconnected(id)
{
if(is_user_hltv(id) || is_user_bot(id))
return
remove_task(id+TASK_SHOWHUD)
remove_task(id)
}
public Show_Hud(taskid)
{
new iPlayer = ID_SHOWHUD
if (!is_user_alive(iPlayer))
{
iPlayer = pev(iPlayer, pev_iuser2)
if (!is_user_alive(iPlayer))
return
}
if (get_pcvar_num(g_pCvarPercentageStyle) != 0)
{
if(iPlayer != ID_SHOWHUD)
{
set_hudmessage(HUD_STATS_SPEC_R, HUD_STATS_SPEC_G, HUD_STATS_SPEC_B, HUD_SPECT_X, HUD_SPECT_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %0.2f %", g_iLevel[iPlayer], (float(g_iXP[iPlayer])/float(g_iMaxXP[iPlayer])) * 100.0)
}
else if (ze_is_user_zombie(iPlayer))
{
set_hudmessage(HUD_STATS_ZOMBIE_R, HUD_STATS_ZOMBIE_G, HUD_STATS_ZOMBIE_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %0.2f %", g_iLevel[ID_SHOWHUD], (float(g_iXP[ID_SHOWHUD])/float(g_iMaxXP[ID_SHOWHUD])) * 100.0)
}
else
{
set_hudmessage(HUD_STATS_HUMAN_R, HUD_STATS_HUMAN_G, HUD_STATS_HUMAN_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %0.2f %", g_iLevel[ID_SHOWHUD], (float(g_iXP[ID_SHOWHUD])/float(g_iMaxXP[ID_SHOWHUD])) * 100.0)
}
}
else
{
if(iPlayer != ID_SHOWHUD)
{
if (get_pcvar_num(g_pCvarAddCommas) == 1)
{
new szSpecXP[15], szSpecMaxXP[15]
AddCommas(g_iXP[iPlayer], szSpecXP, charsmax(szSpecXP))
AddCommas(g_iMaxXP[iPlayer], szSpecMaxXP, charsmax(szSpecMaxXP))
set_hudmessage(HUD_STATS_SPEC_R, HUD_STATS_SPEC_G, HUD_STATS_SPEC_B, HUD_SPECT_X, HUD_SPECT_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %s/%s", g_iLevel[iPlayer], szSpecXP, szSpecMaxXP)
}
else
{
set_hudmessage(HUD_STATS_SPEC_R, HUD_STATS_SPEC_G, HUD_STATS_SPEC_B, HUD_SPECT_X, HUD_SPECT_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %d/%d", g_iLevel[iPlayer], g_iXP[iPlayer], g_iMaxXP[iPlayer])
}
}
else if (ze_is_user_zombie(iPlayer))
{
if (get_pcvar_num(g_pCvarAddCommas) == 1)
{
new szZombieXP[15], szZombieMaxXP[15]
AddCommas(g_iXP[ID_SHOWHUD], szZombieXP, charsmax(szZombieXP))
AddCommas(g_iMaxXP[ID_SHOWHUD], szZombieMaxXP, charsmax(szZombieMaxXP))
set_hudmessage(HUD_STATS_ZOMBIE_R, HUD_STATS_ZOMBIE_G, HUD_STATS_ZOMBIE_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %s/%s", g_iLevel[ID_SHOWHUD], szZombieXP, szZombieMaxXP)
}
else
{
set_hudmessage(HUD_STATS_ZOMBIE_R, HUD_STATS_ZOMBIE_G, HUD_STATS_ZOMBIE_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %d/%d", g_iLevel[ID_SHOWHUD], g_iXP[ID_SHOWHUD], g_iMaxXP[ID_SHOWHUD])
}
}
else
{
if (get_pcvar_num(g_pCvarAddCommas) == 1)
{
new szHumanXP[15], szHumanMaxXP[15]
AddCommas(g_iXP[ID_SHOWHUD], szHumanXP, charsmax(szHumanXP))
AddCommas(g_iMaxXP[ID_SHOWHUD], szHumanMaxXP, charsmax(szHumanMaxXP))
set_hudmessage(HUD_STATS_HUMAN_R, HUD_STATS_HUMAN_G, HUD_STATS_HUMAN_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %s/%s", g_iLevel[ID_SHOWHUD], szHumanXP, szHumanMaxXP)
}
else
{
set_hudmessage(HUD_STATS_HUMAN_R, HUD_STATS_HUMAN_G, HUD_STATS_HUMAN_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %d/%d", g_iLevel[ID_SHOWHUD], g_iXP[ID_SHOWHUD], g_iMaxXP[ID_SHOWHUD])
}
}
}
}
public ze_roundend(WinTeam)
{
if (WinTeam == ZE_TEAM_HUMAN)
{
new iXP = g_bIsDoubleHours ? (get_pcvar_num(g_pCvarEscapeSuccess) * 2) : get_pcvar_num(g_pCvarEscapeSuccess)
for(new id = 1; id <= get_member_game(m_nMaxPlayers); id++)
{
if (!is_user_alive(id) || ze_is_user_zombie(id))
continue
Reward(id, (g_iXP[id] + iXP))
}
}
remove_task(TASK_SHOWHUD)
}
public Check_User_Level(id)
{
if (!is_user_connected(id))
return
if (g_iLevel[id] < MAX_LEVEL)
{
new szName[32]
while (g_iXP[id] > g_iMaxXP[id])
{
if (get_pcvar_num(g_pCvarStartFromZero) == 1)
{
g_iXP[id] = 0
}
g_iLevel[id]++
g_iMaxXP[id] = g_iMaxLevelsXP[g_iLevel[id]]
get_user_name(id, szName, charsmax(szName))
ze_colored_print(0, "!g%s !tNow in Level %i!y!", szName, g_iLevel[id])
ExecuteForward(Fw_LevelUP, ForwardReturn, id)
SaveData(id)
PlaySound(id, LEVELUP)
if (get_pcvar_num(g_pCvarLevelEffects) != 0)
{
// Screen Fade
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, id)
write_short(4096*2)
write_short(4096*5)
write_short(0x0001)
write_byte(random(256))
write_byte(random(256))
write_byte(random(256))
write_byte(150)
message_end()
// Screen Shake
message_begin(MSG_ONE, get_user_msgid("ScreenShake"), {0,0,0}, id)
write_short(255<<14)
write_short(10<<14)
write_short(255<<14)
message_end()
}
}
}
}
public ze_user_infected(iVictim, iInfector)
{
if (iInfector == 0)
return
new iXP = g_bIsDoubleHours ? (get_pcvar_num(g_pCvarZombieInfect) * 2) : get_pcvar_num(g_pCvarZombieInfect)
Reward(iInfector, (g_iXP[iInfector] + iXP))
}
public Fw_TakeDamage_Post(iVictim, iInflictor, iAttacker, Float:fDamage, bitsDamageType)
{
// Player Damage Himself
if (iVictim == iAttacker || !is_user_alive(iVictim) || !is_user_alive(iAttacker) || ze_is_user_zombie(iAttacker) || !get_pcvar_num(g_pCvarEnableDamage))
return HC_CONTINUE
// Same Team?
if (get_member(iAttacker, m_iTeam) == get_member(iVictim, m_iTeam))
return HC_CONTINUE
// Store Damage For every Player
g_fDamage[iAttacker] += fDamage
// Damage Calculator Equal or Higher than needed damage
if (g_fDamage[iAttacker] >= get_pcvar_float(g_pCvarRequiredDamage))
{
// Player did damage that a multiplication of the cvar? Increase coins by this factor
new iMultiplier = floatround(g_fDamage[iAttacker] / get_pcvar_float(g_pCvarRequiredDamage))
new iXP = ((g_bIsDoubleHours ? (get_pcvar_num(g_pCvarDamageAward) * 2) : get_pcvar_num(g_pCvarDamageAward)) * iMultiplier)
Reward(iAttacker, (g_iXP[iAttacker] + iXP))
// Rest The Damage Calculator
g_fDamage[iAttacker] = 0.0
}
return HC_CONTINUE
}
public Reward(id, XP)
{
if ((g_iLevel[id] + 1) < MAX_LEVEL)
{
g_iXP[id] = XP
Check_User_Level(id)
}
else
{
if ((g_iXP[id] + XP) >= g_iMaxLevelsXP[MAX_LEVEL - 1])
{
g_iXP[id] = g_iMaxXP[id] = g_iMaxLevelsXP[MAX_LEVEL - 1]
}
}
SaveData(id)
}
public SaveData(id)
{
new szAuthID[35], szName[32]
get_user_authid(id, szAuthID, charsmax(szAuthID))
get_user_name(id, szName, charsmax(szName))
if (!get_pcvar_num(g_pCvarSaveType))
{
new szData[256]
formatex(szData , charsmax(szData), "%i %i", g_iLevel[id], g_iXP[id])
// Open the Vaults
g_iLevelsVaultHandle = nvault_open(g_szLevelsVault)
g_iRanksVaultHandle = nvault_open(g_szRanksVault)
// Saves His Data
nvault_set(g_iLevelsVaultHandle, szAuthID, szData)
nvault_set(g_iRanksVaultHandle, szAuthID, szName)
// Close Vaults
nvault_close(g_iLevelsVaultHandle)
nvault_close(g_iRanksVaultHandle)
}
else
{
new szQuery[128]
formatex(szQuery, charsmax(szQuery), "UPDATE `zombie_escape` SET `Level` = '%d', `XP` = '%d' WHERE ( `SteamID` = '%s' );", g_iLevel[id], g_iXP[id], szAuthID)
SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery)
}
}
public QuerySetData(iFailState, Handle:hQuery, szError[], iError, szData[], iSize, Float:flQueueTime)
{
SQL_IsFail(iFailState, iError, szError, g_szLogFile)
}
public QuerySetData2(iFailState, Handle:hQuery, szError[], iError, szData[], iSize, Float:flQueueTime)
{
SQL_IsFail(iFailState, iError, szError, g_szLogFile)
}
public LoadData(id)
{
new szAuthID[35]
get_user_authid(id, szAuthID, charsmax(szAuthID))
if (!get_pcvar_num(g_pCvarSaveType))
{
new szData[256], iTimestamp, iExists
// Open the Vault
g_iLevelsVaultHandle = nvault_open(g_szLevelsVault)
iExists = nvault_lookup(g_iLevelsVaultHandle, szAuthID, szData, charsmax(szData), iTimestamp)
// Close Vault
nvault_close(g_iLevelsVaultHandle)
if (!iExists)
{
g_iLevel[id] = 0
g_iXP[id] = get_pcvar_num(g_pCvarStartXP)
SaveData(id)
}
else
{
new iLevel[32], iXP[32]
parse(szData, iLevel, 31, iXP, 31)
g_iLevel[id] = str_to_num(iLevel)
g_iXP[id] = str_to_num(iXP)
}
g_iMaxXP[id] = g_iMaxLevelsXP[g_iLevel[id]]
}
else
{
new szQuery[128], szData[5]
formatex(szQuery, charsmax(szQuery), "SELECT * FROM `zombie_escape` WHERE ( `SteamID` = '%s' );", szAuthID)
num_to_str(id, szData, charsmax(szData))
SQL_ThreadQuery(g_hTuple, "QuerySelectData", szQuery, szData, charsmax(szData))
}
}
public QuerySelectData(iFailState, Handle:hQuery, szError[], iError, szData[])
{
if (SQL_IsFail(iFailState, iError, szError, g_szLogFile))
return
new id = str_to_num(szData)
// No results for this query means this is new player
if (!SQL_NumResults(hQuery))
{
g_iLevel[id] = 0
g_iXP[id] = get_pcvar_num(g_pCvarStartXP)
}
else
{
g_iLevel[id] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "Level"))
g_iXP[id] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "XP"))
}
g_iMaxXP[id] = g_iMaxLevelsXP[g_iLevel[id]]
}
public native_ze_get_user_xp(id)
{
if(!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
return false;
}
return g_iXP[id]
}
public native_ze_set_user_xp(id, amount)
{
if(!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
return false
}
DoubleHours()
new addedXP = (amount - g_iXP[id])
new iXP = g_bIsDoubleHours ? (addedXP * 2) : addedXP
Reward(id, g_iXP[id] + iXP)
return true
}
public native_ze_get_user_level(id)
{
if(!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
return false;
}
return g_iLevel[id]
}
public native_ze_set_user_level(id, amount)
{
if(!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
return false
}
if (amount > MAX_LEVEL)
{
log_error(AMX_ERR_NATIVE, "Level must be less than or equal to MAX_LEVEL (%d)", MAX_LEVEL)
return false
}
g_iLevel[id] = amount
if (get_pcvar_num(g_pCvarStartFromZero) == 1)
{
g_iXP[id] = 0
}
SaveData(id)
return true
}
public native_ze_get_user_max_xp(id)
{
if(!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
return false
}
return g_iMaxXP[id]
}
stock DoubleHours()
{
new szTime[3], szDoubleHours[32], szDoubleHours_Start[32], szDoubleHours_End[32]
get_time("%H", szTime, charsmax(szTime))
get_pcvar_string(g_pCvarDoubleXP, szDoubleHours, charsmax(szDoubleHours))
for (new ch = 0; ch <= charsmax(szDoubleHours); ch++)
{
if (szDoubleHours[ch] == '-')
szDoubleHours[ch] = ' '
}
parse(szDoubleHours, szDoubleHours_Start, charsmax(szDoubleHours_Start), szDoubleHours_End, charsmax(szDoubleHours_End))
new iTime, iDoubleHourStart, iDoubleHourEnd
iTime = str_to_num(szTime)
iDoubleHourStart = str_to_num(szDoubleHours_Start)
iDoubleHourEnd = str_to_num(szDoubleHours_End)
if (iDoubleHourEnd > iTime >= iDoubleHourStart)
{
g_bIsDoubleHours = true
}
else
{
g_bIsDoubleHours = false
}
}
- Supremache
- Member
- Posts: 9
- Joined: 3 years ago
- Contact:
Replace these functions:
- public ze_roundend(WinTeam)
- {
- if (WinTeam == ZE_TEAM_HUMAN)
- {
- new iXP = g_bIsDoubleHours ? (get_pcvar_num(g_pCvarEscapeSuccess) * 2) : get_pcvar_num(g_pCvarEscapeSuccess)
- if( ze_is_user_vip(id) )
- {
- iXP *= 2
- }
- for(new id = 1; id <= get_member_game(m_nMaxPlayers); id++)
- {
- if (!is_user_alive(id) || ze_is_user_zombie(id))
- continue
- Reward(id, (g_iXP[id] + iXP))
- }
- }
- remove_task(TASK_SHOWHUD)
- }
- public ze_user_infected(iVictim, iInfector)
- {
- if (iInfector == 0)
- return
- new iXP = g_bIsDoubleHours ? (get_pcvar_num(g_pCvarZombieInfect) * 2) : get_pcvar_num(g_pCvarZombieInfect)
- if( ze_is_user_vip(id) )
- {
- iXP *= 2
- }
- Reward(iInfector, (g_iXP[iInfector] + iXP))
- }
- public Fw_TakeDamage_Post(iVictim, iInflictor, iAttacker, Float:fDamage, bitsDamageType)
- {
- // Player Damage Himself
- if (iVictim == iAttacker || !is_user_alive(iVictim) || !is_user_alive(iAttacker) || ze_is_user_zombie(iAttacker) || !get_pcvar_num(g_pCvarEnableDamage))
- return HC_CONTINUE
- // Same Team?
- if (get_member(iAttacker, m_iTeam) == get_member(iVictim, m_iTeam))
- return HC_CONTINUE
- // Store Damage For every Player
- g_fDamage[iAttacker] += fDamage
- // Damage Calculator Equal or Higher than needed damage
- if (g_fDamage[iAttacker] >= get_pcvar_float(g_pCvarRequiredDamage))
- {
- // Player did damage that a multiplication of the cvar? Increase coins by this factor
- new iMultiplier = floatround(g_fDamage[iAttacker] / get_pcvar_float(g_pCvarRequiredDamage))
- new iXP = ((g_bIsDoubleHours ? (get_pcvar_num(g_pCvarDamageAward) * 2) : get_pcvar_num(g_pCvarDamageAward)) * iMultiplier)
- Reward(iAttacker, (g_iXP[iAttacker] + iXP))
- if( ze_is_user_vip(id) )
- {
- iXP *= 2
- }
- // Rest The Damage Calculator
- g_fDamage[iAttacker] = 0.0
- }
- return HC_CONTINUE
- }
Create an account or sign in to join the discussion
You need to be a member in order to post a reply
Create an account
Not a member? register to join our community
Members can start their own topics & subscribe to topics
It’s free and only takes a minute
Sign in
Who is online
Users browsing this forum: No registered users and 2 guests