#include #include #include #include #include #include #include #define VERSION "1.0" #define ADMIN_EXTRA ADMIN_LEVEL_H #define TASK_SHOW_LEVEL 10113 #define MAXLEVEL 10 new const LevelUp[] = "events/task_complete.wav"; new const KillSound[] = "events/tutor_msg.wav"; new const LEVELS[MAXLEVEL] = { 50, 100, 250, 400, 500, 700, 850, 1000, 1500, 3000 } new const RANKLEVELS[MAXLEVEL][] = { "Recruit", "Captain", "Major", "Colonel", "Specialist", "Sergeant", "Staff Sergeant", "Field Officier", "Golden Officier", "General" } new PlayerXP[33], PlayerLevel[33], g_remember_selection[33]; new gVault; new gKills[33]; new cToggle, xpKill, enable_admin_xp, admin_xp, savexp; new xp_triple, enable_triple, triple_kills, xp_ultra, ultra_kills, enable_ultra, show_level_text; new gMaxPlayers, g_msgHudSync1; public plugin_init() { register_plugin("GM Rank Mod", VERSION, "BOYSplayCS"); RegisterHam(Ham_Spawn, "player", "playerSpawn", 1); register_event("DeathMsg", "eventDeath", "a"); register_event("StatusValue", "Event_StatusValue", "bd", "1=2"); register_concmd("set_level", "cmdGiveLevel", ADMIN_KICK, " "); cToggle = register_cvar("gmrank_enable", "1"); savexp = register_cvar("gmrank_save", "0"); xpKill = register_cvar("gmrank_xp_kill", "3"); enable_admin_xp = register_cvar("gmrank_admin", "1"); admin_xp = register_cvar("gmrank_admin_xp", "1"); show_level_text = register_cvar("gmrank_level_text", "1"); enable_triple = register_cvar("gxm_triple","1"); xp_triple = register_cvar("gxm_triple_xp","3"); triple_kills = register_cvar("gxm_triple_kills","3"); enable_ultra = register_cvar("gxm_ultra","1"); xp_ultra = register_cvar("gxm_ultra_xp","5"); ultra_kills = register_cvar("gxm_ultra_kills","6"); gMaxPlayers = get_maxplayers(); g_msgHudSync1 = CreateHudSyncObj() } public plugin_precache() { precache_sound(LevelUp); precache_sound(KillSound); } public plugin_cfg() { gVault = nvault_open("gmrankmod"); if (gVault == INVALID_HANDLE) set_fail_state("Fatal Error: file 'gmrankmod' does not exist!"); } public plugin_end() { nvault_close(gVault); } public client_authorized(id) { g_remember_selection[id] = 0; LoadLevel(id) } public client_disconnect(id) { SaveLevel(id) } public playerSpawn(id) { if (!get_pcvar_num(cToggle)) return; gKills[id] = 0 if (is_user_alive(id)) { if(!task_exists(TASK_SHOW_LEVEL + id) && get_pcvar_num(show_level_text)) { set_task(0.1, "task_show_level", TASK_SHOW_LEVEL + id) } } } public eventDeath() { if (!get_pcvar_num(cToggle)) return; new gAttacker = read_data(1); new gVictim = read_data(2); new counted_triple = get_pcvar_num(xpKill) + get_pcvar_num(xp_triple) new counted_ultra = get_pcvar_num(xpKill) + get_pcvar_num(xp_ultra) client_cmd(gAttacker, "spk %s", KillSound); if ((1 <= gAttacker <= gMaxPlayers)) { if (gVictim != gAttacker) { gKills[gAttacker]++; if (PlayerLevel[gAttacker] < MAXLEVEL-1) { if ( get_pcvar_num(enable_triple) && gKills[gAttacker] < get_pcvar_num(triple_kills) || gKills[gAttacker] > get_pcvar_num(triple_kills) || get_pcvar_num(enable_ultra) && gKills[gAttacker] < get_pcvar_num(ultra_kills) || gKills[gAttacker] > get_pcvar_num(ultra_kills) ) { if ( get_pcvar_num(enable_admin_xp) && get_user_flags(gAttacker) & ADMIN_EXTRA) { PlayerXP[gAttacker] += get_pcvar_num(admin_xp) } PlayerXP[gAttacker] += get_pcvar_num(xpKill) set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0) ShowSyncHudMsg(gAttacker, g_msgHudSync1, "+%i", get_pcvar_num(xpKill)) } else if ( !get_pcvar_num(enable_triple) || !get_pcvar_num(enable_ultra) ) { if ( get_pcvar_num(enable_admin_xp) && get_user_flags(gAttacker) & ADMIN_EXTRA) { PlayerXP[gAttacker] += get_pcvar_num(admin_xp) } PlayerXP[gAttacker] += get_pcvar_num(xpKill) set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0) ShowSyncHudMsg(gAttacker, g_msgHudSync1, "+%i", get_pcvar_num(xpKill)) } if ( gKills[gAttacker] == get_pcvar_num(triple_kills) && get_pcvar_num(enable_triple) ) { if ( get_pcvar_num(enable_admin_xp) && get_user_flags(gAttacker) & ADMIN_EXTRA) { PlayerXP[gAttacker] += get_pcvar_num(admin_xp) } PlayerXP[gAttacker] += counted_triple set_hudmessage(0, 255, 50, 0.45, 0.33, 1, 2.0, 2.0) ShowSyncHudMsg(gAttacker, g_msgHudSync1, "+%i TRIPLE KILL", counted_triple) } else if ( gKills[gAttacker] == get_pcvar_num(ultra_kills) && get_pcvar_num(enable_ultra) ) { if ( get_pcvar_num(enable_admin_xp) && get_user_flags(gAttacker) & ADMIN_EXTRA) { PlayerXP[gAttacker] += get_pcvar_num(admin_xp) } PlayerXP[gAttacker] += counted_ultra set_hudmessage(0, 255, 50, 0.45, 0.33, 1, 2.0, 2.0) ShowSyncHudMsg(gAttacker, g_msgHudSync1, "+%i ULTRA KILL", counted_ultra) } } } check_level(gAttacker) } } public Event_StatusValue(id) { new target = read_data(2) if(target != id && target != 0 && get_pcvar_num(cToggle)) { static sName[32]; get_user_name(target, sName, 31) set_hudmessage(255, 0, 100, 0.6, -1.0, 0, 0.0, 6.0, 0.0, 0.0, 2) ShowSyncHudMsg(id, g_msgHudSync1, "Name: %s^n Level: %d^n Rank: %s^n", sName, PlayerLevel[target], RANKLEVELS[PlayerLevel[target]]) } } public task_show_level(task) { new id = task - TASK_SHOW_LEVEL if(!is_user_alive(id) && !get_pcvar_num(show_level_text) ) return PLUGIN_HANDLED; set_hudmessage(255, 100, 0, 0.02, 0.33, 1, 0.0, 0.3, 0.0, 0.0) ShowSyncHudMsg(id, g_msgHudSync1 , "[Level : %i] [XP : %i / %i]^n[Rank : %s]", PlayerLevel[id], PlayerXP[id], LEVELS[PlayerLevel[id]], RANKLEVELS[PlayerLevel[id]]) set_task(0.1, "task_show_level", TASK_SHOW_LEVEL + id) return PLUGIN_CONTINUE; } public check_level(id) { if(PlayerLevel[id] < MAXLEVEL-1 && get_pcvar_num(cToggle)) { while(PlayerXP[id] >= LEVELS[PlayerLevel[id]]) { PlayerLevel[id]++; client_cmd(id, "spk %s", LevelUp); static name[32] ; get_user_name(id, name, charsmax(name)); client_print(0, print_chat, "* %s has reached level %i!", name, PlayerLevel[id]); } } } public cmdGiveLevel(id, level, cid) { if(!cmd_access(id, level, cid, 3) || !get_pcvar_num(cToggle)) { 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(iLevel[0] == '-') { console_print(id, "You can't have a '-' in the value!") return PLUGIN_HANDLED; } if(!Target) { console_print(id, "Target not found!") return PLUGIN_HANDLED; } if(Value > MAXLEVEL-1) { console_print(id, "You can't set a more than %d!", MAXLEVEL-1) return PLUGIN_HANDLED; } if(Value < 1) { console_print(id, "You can't set less than 1!") return PLUGIN_HANDLED; } new AdminName[32] get_user_name(id, AdminName, 31) new TargetName[32] get_user_name(Target, TargetName, 31) PlayerLevel[Target] = Value - 1 PlayerXP[Target] = LEVELS[PlayerLevel[Target]] check_level(Target) client_print(Target, print_chat, "ADMIN: %s has set your level to %d", AdminName, Value) return PLUGIN_HANDLED; } SaveLevel(id) { if ( get_pcvar_num(savexp) ) { new authid[32] get_user_authid(id, authid, 31) new szData[256]; new szKey[64]; formatex( szKey , 63 , "%s-ID" , authid); formatex( szData , 255 , "%i#%i#" , PlayerLevel[id], PlayerXP[id] ); nvault_set( gVault , szKey , szData ); } else { new authip[32] get_user_ip(id,authip,31,1) new szData[256]; new szKey[64]; formatex( szKey , 63 , "%s-IP" , authip ); formatex( szData , 255 , "%i#%i#" , PlayerLevel[id], PlayerXP[id] ); nvault_set( gVault , szKey , szData ); } } LoadLevel(id) { if ( get_pcvar_num(savexp) ) { new authid[32] get_user_authid(id, authid, 31) new szData[256]; new szKey[40]; formatex( szKey , 39 , "%s-ID" , authid ); formatex(szData , 255, "%i#%i#", PlayerLevel[id], PlayerXP[id]) nvault_get(gVault, szKey, szData, 255) replace_all(szData , 255, "#", " ") new xp[32], level[32] parse(szData, level, 31, xp, 31) PlayerLevel[id] = str_to_num(level) PlayerXP[id] = str_to_num(xp) } else { new authip[32] get_user_ip(id, authip, 31, 1) new szData[256]; new szKey[40]; formatex( szKey , 39 , "%s-IP" , authip ); formatex(szData , 255, "%i#%i#", PlayerLevel[id], PlayerXP[id]) nvault_get(gVault, szKey, szData, 255) replace_all(szData , 255, "#", " ") new xp[32], level[32] parse(szData, level, 31, xp, 31) PlayerLevel[id] = str_to_num(level) PlayerXP[id] = str_to_num(xp) } }