caution222
|
分享:
▼
x1
|
[1.6][插件] sma問題
我想在這裏加等級 加升了1等級加1hp 2等級加2hp 我想知道要加什麼- -
/*=======================================
--------------------------------- -*- oN. Level System v1.0 -*- --------------------------------- By:oN.
========================================*/
//先Include左先. #include <amxmodx> #include <amxmisc> #include <nvault> #include <fakemeta> #include <hamsandwich>
/*=======================================*/
//一些參數. new g_xp[33] // 玩家的經驗值 new g_level[33] // 玩家的等級 new g_damage[33] // 玩家的給予傷害累積 new g_vault // Save & Load 既野
/*========================================== [Plugin Init] ===========================================*/
public plugin_init() { // 註冊插件 register_plugin("[oN.] Level System", "1.0", "oN.")
// Forwards register_forward(FM_PlayerPreThink, "fw_PlayerPreThink") RegisterHam(Ham_Killed, "player", "fw_PlayerKilled") RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
// Save xp 既野 // g_vault 等於 打開LevelSystem這個nvault檔. g_vault = nvault_open("LevelSystem") }
/*=============================================== [Plugin Customization] ===============================================*/
// Ham 既 得到傷害 既 Forward (inflictor = weapon) public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type) { // 如果 攻擊者 是 傷害者 (即自殘) 或者 攻擊者並沒有連接 if (attacker == victim || !is_user_connected(attacker)) return HAM_IGNORED // 返回
// 把 攻擊者給予的傷害 加落 攻擊者的給予傷害累積 度 g_damage[attacker] += damage
// 如果 攻擊者的給予傷害累積 大於 或 等於 1000 if (g_damage[attacker] >= 1000) { g_damage[attacker] -= 1000 // 攻擊者的給予傷害累積 減 1000 g_xp[attacker] += 100 // 攻擊者的經驗值 加 100
// 在攻擊者的正中央 說 累積傷害1000 +100XP client_print(attacker, print_center, "累積傷害1000 +100XP") } return HAM_IGNORED }
// Ham 既 殺左人 既 Forward public fw_PlayerKilled(victim, attacker, shouldgib) { // 如果 攻擊者 是 傷害者 (即自殺) 或 攻擊者並沒有連接 if (attacker == victim || !is_user_connected(attacker)) return HAM_IGNORED //返回
// 攻擊者的經驗值 + 100 g_xp[attacker] += 100
// 在攻擊者的正中央 說 殺敵 +100XP client_print(attacker, print_center, "殺敵 +100XP")
return HAM_IGNORED }
// 呢個好難解釋, 大約系 監查玩家做緊一d野 既 Forward public fw_PlayerPreThink(id) { // 下面果句有用腦諗諗, 有點亂. // 當 玩家的經驗值 大於 或 等於 ((玩家的等級 + 1) 乘以 10000) if (g_xp[id] >= ((g_level[id] + 1) * 10000)) g_level[id] ++ // 玩家的等級 + 1 }
// 當玩家進入伺服器 的Function public client_putinserver(id) { LoadData(id) // 去這個Function (載入 資料) }
// 當玩家離開伺服器 的Function public client_disconnect(id) { SaveData(id) // 去這個Function (儲存 資料) }
// 儲存 玩家 資料 public SaveData(id) { new name[35], vaultkey[64], vaultdata[256]
// 將玩家既名字 代入 name get_user_name(id, name, 34)
// 組織 vaultkey 做 %s-LevelInfo, 而%s代表 name format(vaultkey, 63, "%s-LevelInfo", name) // 組織 vaultdata 做 %i#%i#%i# , // 它們代表 玩家的經驗值, 玩家的等級, 玩家的給予傷害累積 format(vaultdata, 255, "%i#%i#%i#", g_xp[id], g_level[id], g_damage[id])
// 設定 g_vault, 主題系 vaultkey, 資料系 vaultdata // 大概系咁意思.... nvault_set(g_vault, vaultkey, vaultdata)
return PLUGIN_CONTINUE }
// 載入 玩家 資料 public LoadData(id) { new name[35], vaultkey[64], vaultdata[256]
// 將玩家既名字 代入 name get_user_name(id,name,34)
// 和上面的意思一樣 format(vaultkey, 63, "%s-LevelInfo", name) format(vaultdata, 255, "%i#%i#%i#", g_xp[id], g_level[id], g_damage[id])
// 拿 g_vault 中 vaultkey主題 的 vaultdata資料 nvault_get(g_vault, vaultkey, vaultdata, 255)
// 移開 vaultdata 中的 # 和 空格 replace_all(vaultdata, 255, "#", " ")
new playerxp[32], playerlevel[32], playerdamage[32] // 解析(唔知系唔系咁解-.-) vaultdata 為 playerxp, playerlevel, playerdamage parse(vaultdata, playerxp, 31, playerlevel, 31, playerdamage, 31)
// 玩家的經驗值 變做 playerxp(轉換成數字) g_xp[id] = str_to_num(playerxp)
// 玩家的等級 變做 playerlevel(轉換成數字) g_level[id] = str_to_num(playerlevel)
// 玩家的給予傷害累積 變做 playerdamage(轉換成數字) g_damage[id] = str_to_num(playerdamage)
return PLUGIN_CONTINUE }
/*============================================= [End.] ==============================================*/
|