|
本帖最後由 LSM 於 9-2-2009 11:03 編輯
- #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
- }
複製代碼
每個level 的能力
- public levelfunc(id) //請設定一個引發的事件
- {
- if playerLevel[id] >= X //某一lv
- {
- XXXXXXXXXX(id) // 效果 (請自設)
- }
- 每一lv 整一次
- }
複製代碼 |
|