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.] ==============================================*/
|