[轉]教你整經驗值升Level AMXX
#include <amxmodx>
#include <amxmisc>
#include <nvault> //save exp時用的
new PlayerXP[33],PlayerLevel[33] //新增變數 playerEXP(經驗值) playerLevel(等級)
new XP_Kill,XP_Hs,SaveXP // 一個固定的經驗值
new g_vault //用來save的數字
new const LEVELS[7] = { //const 即 constant(常數) 此處為每級EXP 等級數目不可大於[]內數字
0,
100,//你需要100exp
200,//200 exp
400,//400exp
800,
1600,
99999 //可防止某BUG
}
public plugin_init() //大致上BBQ都教了
{
register_plugin("EXPLEVELmod", "1.0", "LSM")
register_event("DeathMsg", "eDeath", "a") //殺人時發生 "eDeath" 時件
SaveXP = register_cvar("SaveXP","1")
XP_Kill=register_cvar("XP_per_kill", "20") //指令 令殺人幾多exp
XP_Hs=register_cvar("XP_hs_bonus","20")
g_vault = nvault_open("expmod") //開一個save 檔
register_clcmd("say /class", "ChangeClass")
register_clcmd("say_team /class", "ChangeClass")
register_clcmd("say /xp", "ShowHud")
register_clcmd("say_team /xp", "ShowHud")
}
public eDeath( ) //function name
{
new killer = read_data( 1 )
new iVictim = read_data( 2 )
new headshot = read_data( 3 )
PlayerXP[killer] += get_pcvar_num(XP_Kill) //殺手增加XP_Kill 咁多exp
if(headshot)
PlayerXP[killer] += get_pcvar_num(XP_Hs) //爆頭的附加exp
while(PlayerXP[killer] >= LEVELS[PlayerLevel[attacker]]) //當exp大於
{
client_print(killer, print_chat, "[Animal Mod] Congratulations! You are a level %i %s!", PlayerLevel[killer],CLASSES[PlayerClass[attacker]])
PlayerLevel[killer] += 1 //此變數加一
}
ShowHud(killer)
}
public ShowHud(id) //HUD顯示器
{
set_hudmessage(255, 0, 0, 0.75, 0.01, 0, 6.0, 15.0)
show_hudmessage(id, "Level: %i^nXP: %i^nClass: %s",PlayerLevel[id],PlayerXP[id])
}
public client_connect(id) //當某人入場
{
if(get_pcvar_num(SaveXP) == 1)
{
// load save
LoadData(id)
}
}
public client_disconnect(id) //類似上面 當有人離場
{
if(get_pcvar_num(SaveXP) == 1)
{
SaveData(id)
}
}
public SaveData(id)
{
new AuthID[35] get_user_authid(id,AuthID,34)
new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s-Mod",AuthID)
format(vaultdata,255,"%i#%i#",PlayerXP[id],PlayerLevel[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]
// search
format(vaultkey,63,"%s-Mod",AuthID)
format(vaultdata,255,"%i#%i#",PlayerXP[id],PlayerLevel[id])
// load the data
nvault_get(g_vault,vaultkey,vaultdata,255)
replace_all(vaultdata, 255, "#", " ")
new playerxp[32], playerlevel[32]
parse(vaultdata, playerxp, 31, playerlevel, 31)
PlayerXP[id] = str_to_num(playerxp)
PlayerLevel[id] = str_to_num(playerlevel)
return PLUGIN_CONTINUE
} |