[Help]Level Plugins
I made a Level Plugins but it is not work. I want the Level start from 1.But it started from Max_level (I set the max level is 40)
PHP Code:
#include <amxmodx> #include <amxmisc> #include <cstrike> #include <nvault> #include <fakemeta> #include <fakemeta_util> #include <hamsandwich> #include <fun> #include <zombieplague> #include <levelsystem> #define TASK_EXPERIENCE 3333 #define TASK_USERINFO 4444 #define EXP_TASK2 75646478 #define Attack_PerLevel 1 #define Killed_Exp 1 #define Health_PerLevel 2 new PlayerLevel[33] new PlayerXp[33] new g_kill[33] new g_damage[33] new g_msgSync new g_maxplayers new g_msgSayText new vault new bool:g_bConnected[33]; #define Max_Level 40 new LEVELS[Max_Level+1] = { 10, //1 20, //2 30, //3 40, //4 50, //5 60, //6 70, //7 80, //8 90, //9 100, //10 110, //11 120, //12 130, //13 140, //14 150, //15 160, //16 170, //17 180, //18 190, //19 200, //20 400, //21 600, //22 800, //23 900, //24 1000, //25 1100, //26 1200, //27 1300, //28 1400, //29 1500, //30 2000, //31 2200, //32 2300, //33 2400, //34 2500, //35 2600, //36 2700, //37 2800, //38 2900, //39 3000, //40 }
public plugin_init() { register_plugin("蝑?蝟餌絞", "1.1", "Fung") register_clcmd("zp_addxp", "Cmd_AddXP", ADMIN_RCON, "<@all/t/ct>/<name><xp> - give users xp") register_clcmd("zp_setlevel", "Cmd_SetLevel", ADMIN_RCON, "<name><level> - give users level") RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage") RegisterHam(Ham_Killed, "player", "fw_PlayerKilled") RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1) register_event("ResetHUD", "Event_ResetHUD", "be") vault = nvault_open("LevelSystem") g_msgSync = CreateHudSyncObj() g_maxplayers = get_maxplayers() g_msgSayText = get_user_msgid("SayText") } public plugin_natives() { register_native("get_user_level", "native_get_user_level", 1) register_native("set_user_level", "native_set_user_level", 1) register_native("get_user_xp", "native_get_user_xp", 1) register_native("get_user_levels", "native_get_user_levels", 1) } public native_get_user_level(id) { return PlayerLevel[id] } public native_set_user_level(id, amount) { PlayerLevel[id] = amount } public native_get_user_xp(id) { return PlayerXp[id] } public native_get_user_levels(id) { return LEVELS[id] } public fw_PlayerKilled(victim, attacker, shouldgib) { if (!is_user_connected(victim)) return HAM_IGNORED if ((attacker == victim) || !is_user_connected(attacker)) return HAM_IGNORED new get_exp new bool:already_set = false new name[18] g_kill[attacker] += 1 get_user_name(attacker, name, 17) if (!already_set) { if (is_user_alive(attacker)) { if (!is_user_alive(victim)) { get_exp = (Killed_Exp * PlayerLevel[victim]) already_set = true } } } if (!already_set) return HAM_IGNORED add_experience(attacker, get_exp) client_print(attacker, print_center, "+ %d EXP", get_exp) client_print(attacker, print_console, "+ %d EXP", get_exp) if(cs_get_user_team(attacker) == CS_TEAM_CT) { if (g_kill[attacker] == 2) { zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 2) PlayerXp[attacker] += 1 colored_print(0, "^x03[Combo] %s 已殺死 2 隻喪屍!!!! 獲2生存點和1EXP獎勵", name) set_hudmessage(255,0,0,-1.0, 0.17, 1, 3.0, 3.0, 1.0, 0.20, 3) show_hudmessage(attacker,"YOU COMBO KILLED 2 PEOPLE!!!!") } else if (g_kill[attacker] == 4) { zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 3) PlayerXp[attacker] += 2 colored_print(0, "^x03[Combo] %s 已殺死 4 隻喪屍!!!! 獲3生存點和2EXP獎勵", name) set_hudmessage(255,0,0,-1.0, 0.17, 1, 3.0, 3.0, 1.0, 0.20, 3) show_hudmessage(attacker,"YOU COMBO KILLED 4 PEOPLE!!!!") } else if (g_kill[attacker] == 6) { zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 4) PlayerXp[attacker] += 3 colored_print(0, "^x03[Combo] %s 已殺死 6 隻喪屍!!!! 獲4生存點和3EXP獎勵", name) set_hudmessage(255,0,0,-1.0, 0.17, 1, 3.0, 3.0, 1.0, 0.20, 3) show_hudmessage(attacker,"YOU COMBO KILLED 6 PEOPLE!!!!") } else if (g_kill[attacker] == 8) { zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 5) PlayerXp[attacker] += 4 colored_print(0, "^x03[Combo] %s 已殺死 8 隻喪屍!!!! 獲5生存點和4EXP獎勵", name) set_hudmessage(255,0,0,-1.0, 0.17, 1, 3.0, 3.0, 1.0, 0.20, 3) show_hudmessage(attacker,"YOU COMBO KILLED 8 PEOPLE!!!!") } else if (g_kill[attacker] == 10) { zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 6) PlayerXp[attacker] += 5 colored_print(0, "^x03[Combo] %s 已殺死 10 隻喪屍!!!! 獲6生存點和5EXP獎勵", name) set_hudmessage(255,0,0,-1.0, 0.17, 1, 3.0, 3.0, 1.0, 0.20, 3) show_hudmessage(attacker,"YOU COMBO KILLED 10 PEOPLE!!!!") } else if (g_kill[attacker] == 12) { zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 7) PlayerXp[attacker] += 6 colored_print(0, "^x03[Combo] %s 已殺死 12 隻喪屍!!!! 獲7生存點和6EXP獎勵", name) set_hudmessage(255,0,0,-1.0, 0.17, 1, 3.0, 3.0, 1.0, 0.20, 3) show_hudmessage(attacker,"YOU COMBO KILLED 12 PEOPLE!!!!") } else if (g_kill[attacker] == 14) { zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 8) PlayerXp[attacker] += 7 colored_print(0, "^x03[Combo] %s 已殺死 14 隻喪屍!!!! 獲8生存點和7EXP獎勵", name) set_hudmessage(255,0,0,-1.0, 0.17, 1, 3.0, 3.0, 1.0, 0.20, 3) show_hudmessage(attacker,"YOU COMBO KILLED 14 PEOPLE!!!!") } } return PLUGIN_HANDLED; } public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type) { if (!(1 <= attacker <= g_maxplayers) || victim == attacker || !is_user_connected(attacker)) return HAM_IGNORED; if (!(damage_type & DMG_BULLET)) return HAM_IGNORED; if (PlayerLevel[attacker] > 0) { static Float:damage_multi if (cs_get_user_team(attacker) == CS_TEAM_CT) damage_multi = 1.0 + float(PlayerLevel[attacker] * Attack_PerLevel / 100) damage *= damage_multi SetHamParamFloat(4, damage) } if (!attacker || attacker==victim || get_user_team(attacker)==get_user_team(victim) ) { return PLUGIN_CONTINUE } g_damage[attacker] += 50 if (g_damage[attacker] >= 1500) { g_damage[attacker] -= 1500 PlayerXp[attacker] += 1 client_print(attacker, print_center, "+1EXP") } return HAM_IGNORED; } public Cmd_AddXP(id, level, cid) { if (!cmd_access(id, level, cid, 3)) { return PLUGIN_HANDLED; } new Arg1[64], Target read_argv(1, Arg1, 63) new iAddExp[32], Value read_argv(2, iAddExp, 31) if (iAddExp[0] == '-') { console_print(id, "You cant have a - in the value") return PLUGIN_HANDLED; } Value = str_to_num(iAddExp) new AdminName[32] get_user_name(id, AdminName, 31) new TargetTeam new Players[32], iNum if (Arg1[0] == '@') { if (equali(Arg1[1], "all")) { TargetTeam = 0 get_players(Players, iNum) } else if (equali(Arg1[1], "t")) { TargetTeam = 1 get_players(Players, iNum, "e" , "terrorist") } else if (equali(Arg1[1], "ct")) { TargetTeam = 2 get_players(Players, iNum, "e" , "ct") } for (new i = 0; i < iNum; ++i) { Target = Players[i] add_experience(Target, Value) } switch (TargetTeam) { case 0: { console_print(id, "You have given %d xp to all", Value) colored_print(0, "^x04[等級系統]^x03 管理員: %s 已給予 %d 經驗於全體", AdminName, Value) } case 1: { console_print(id, "You have given %d xp to the T team", Value) colored_print(0, "^x04[等級系統]^x03 管理員: %s 已給予 %d 經驗於 TS 隊伍", AdminName, Value) } case 2: { console_print(id, "You have given %d xp to the CT team", Value) colored_print(0, "^x04[等級系統]^x03 管理員: %s 己給予 %d 經驗於 CT 隊伍", AdminName, Value) } } } else { Target = cmd_target(id, Arg1, 0) if (!is_user_connected(Target)) return PLUGIN_HANDLED; new TargetName[32] get_user_name(Target, TargetName, 31) add_experience(Target, Value) console_print(id, "You have given %d xp to %s", Value, TargetName) colored_print(Target, "^x04[等級系統]^x03 管理員: %s 已給予你 %d 經驗", AdminName, Value) } return PLUGIN_HANDLED; } public Cmd_SetLevel(id, level, cid) { if (!cmd_access(id, level, cid, 3)) return PLUGIN_HANDLED; new Arg1[64], Target read_argv(1, Arg1, 63) Target = cmd_target(id, Arg1, 0) new iLevel[32], Value read_argv(2, iLevel, 31) Value = str_to_num(iLevel) if (!is_user_connected(Target)) return PLUGIN_HANDLED; if (Value > Max_Level) { console_print(id, "You cant have a more than %d", Max_Level) return PLUGIN_HANDLED; } new AdminName[32] get_user_name(id, AdminName, 31) new TargetName[32] get_user_name(Target, TargetName, 31) PlayerLevel[Target] = Value PlayerXp[Target] = LEVELS[PlayerLevel[Target]] console_print(id, "You have set %s level to %d", TargetName, Value) colored_print(Target, "^x04[等級系統]^x03 管理員: %s 己設定你的等級為 %d", AdminName, Value) return PLUGIN_HANDLED; } public add_experience(id, value) { PlayerXp[id] += value } public show_user_info(taskid) { new id = taskid-TASK_USERINFO if (is_user_alive(id)) { new InfoMsg[128] format(InfoMsg, charsmax(InfoMsg), "等級: %d-經驗值: %d/%d|攻擊力加成: +%d | COMBO: %d^n", PlayerLevel[id], PlayerXp[id], LEVELS[min(PlayerLevel[id]+1, Max_Level)],PlayerLevel[id]*Attack_PerLevel, g_kill[id]) set_hudmessage(0, 255, 0, 0.73, 0.81, 0, 6.0, 0.6, 0.0, 0.0, -1) ShowSyncHudMsg(id, g_msgSync, InfoMsg) } else { // Get spectating target new target = pev(id, pev_iuser2) // If target is alive show infomation if (is_user_alive(target)) { new sName[32], szMenuBody[128] get_user_name(target, sName, 31) format(szMenuBody, charsmax(szMenuBody), "等級: %d^n經驗值: %d/%d", PlayerLevel[target], PlayerXp[target], LEVELS[min(PlayerLevel[target]+1, Max_Level)]) set_hudmessage(0, 255, 0, 0.01, 0.85, 0, 6.0, 0.6, 0.0, 0.0, -1) ShowSyncHudMsg(id, g_msgSync, szMenuBody) } } } public process_experience(taskid) { new id = taskid-TASK_EXPERIENCE new name[32] get_user_name(id,name,31) if (PlayerXp[id] >= LEVELS[Max_Level] || PlayerLevel[id] >= (Max_Level)) { PlayerLevel[id] = Max_Level PlayerXp[id] = min(PlayerXp[id], LEVELS[Max_Level]) return; } if (PlayerLevel[id] <= 0 && PlayerXp[id] >= LEVELS[PlayerLevel[id]+1]) { PlayerLevel[id] += 1 set_hudmessage(200, 0, 0, -1.0, 0.17, 1, 3.0, 3.0, 1.0, 0.20, 3) show_hudmessage(id,"Level up!!!!^n你已達到 %d 等級" , PlayerLevel[id]) PlayerXp[id] = 0 } else if (PlayerXp[id] >= LEVELS[PlayerLevel[id]+1]) { PlayerLevel[id] += 1 set_hudmessage(200, 0, 0, -1.0, 0.17, 1, 3.0, 3.0, 1.0, 0.20, 3) show_hudmessage(id,"Level up!!!!^n你已達到 %d 等級" , PlayerLevel[id]) colored_print(0, "^x04[等級] %s 達到 ^x03%d ^x04等級!!!!", name, PlayerLevel[id]) PlayerXp[id] = 0 } } public client_putinserver(id) { PlayerXp[id] = 0 PlayerLevel[id] = 0 set_task(0.1, "process_experience", id+TASK_EXPERIENCE, _, _, "b") set_task(0.5, "show_user_info", id+TASK_USERINFO, _, _, "b") LoadData(id) } public client_disconnect(id) { remove_task(id+TASK_EXPERIENCE) remove_task(id+TASK_USERINFO) g_bConnected[id] = false; SaveData(id) } public SaveData(id) { new name[35], vaultkey[64], vaultdata[256] get_user_name(id, name, 34) format(vaultkey, 63, "%s-LevelInfo", name) format(vaultdata, 255, "%i#%i#%i#", PlayerLevel[id], PlayerXp[id]) nvault_set(vault, vaultkey, vaultdata) return PLUGIN_CONTINUE } public LoadData(id) { new name[35], vaultkey[64], vaultdata[256] get_user_name(id,name,34) format(vaultkey, 63, "%s-LevelInfo", name) format(vaultdata, 255, "%i#%i#%i#", PlayerLevel[id], PlayerXp[id]) nvault_get(vault, vaultkey, vaultdata, 255) replace_all(vaultdata, 255, "#", " ") new playerlevel[32], playerxp[32] parse(vaultdata, playerlevel, 31, playerxp, 31) PlayerLevel[id] = str_to_num(playerlevel) PlayerXp[id] = str_to_num(playerxp) return PLUGIN_CONTINUE } public colored_print(target, const message[], any:...) { static buffer[512] if (!target) { static player, g_maxplayers g_maxplayers = get_maxplayers() for (player = 1; player <= g_maxplayers; player++) { if (!is_user_connected(player)) return PLUGIN_CONTINUE; vformat(buffer, sizeof buffer - 1, message, 3) // Send it message_begin(MSG_ONE, g_msgSayText, _, player) write_byte(player) write_string(buffer) message_end() } } else { vformat(buffer, sizeof buffer - 1, message, 3) message_begin(MSG_ONE, g_msgSayText, _, target) write_byte(target) write_string(buffer) message_end() } return PLUGIN_HANDLED; } public Event_ResetHUD(id) { if (!is_user_alive(id)) return PLUGIN_CONTINUE; set_task(0.5, "set_health", id) SaveData(id) return PLUGIN_CONTINUE; } public set_health(id) { if (is_user_alive(id) && PlayerLevel[id] > 0) { new health health = get_user_health(id) + (PlayerLevel[id] * Health_PerLevel) fm_set_user_health(id, health) } }
public fw_PlayerSpawn_Post(id) { g_kill[id] -= g_kill[id] } stock get_in_game_players() { new g_maxplayers = get_g_maxplayers() new players = 0 new team for (new i = 1; i <= g_maxplayers; i++) { if (!is_user_connected(i)) continue; team = get_user_team(i) if (team == 1 || team == 2) players++ } return players; } stock fm_set_user_health(index, health) { health > 0 ? set_pev(index, pev_health, float(health)) : dllfunc(DLLFunc_ClientKill, index); return 1; } /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ ansi\\ ansicpg950\\ deff0{\\ fonttbl{\\ f0\\ fnil\\ fcharset136 Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang3076\\ f0\\ fs16 \n\\ par } */
|