Sziasztok találtam egy jó kis plugint amihez kellen egy kis segítéség, hogy tökéletes legyen. itt a plugin: https://forums.alliedmods.net/showthread.php?t=294867
beraktam a szerverre, mondom a problémákat: 1: a chat üzenet ha ír bárki bármit. 2x jelenik meg. egyszer sima névvel és a második pedig a prefixxel. csak egy kellen elegyen a prefixes. úgy gondoltam,hogy a prefix előtt írhatná azt is hogy hanyas szintű pl:[LV.1 Noobest] ennyi elég volna. valamiért duplikálja a chatet. 2. jobb oldalt mutatja azt hogy xp és a level. és azt is villogva ami nagyon irritáló. azt a kijelzőt nem lehetne radar alá úgy ahogy van áthelyezni. vagy pedig felülre egy vonalba kiiratni? persze mindd ezt fixálva hogy ne villogjon. köszönöm szépen
ide bemásolom az sma-t hogy le se kelljen tölteni.
Kód: #include <amxmodx> #include <fvault> #include <cstrike> #include <wm_play>
#define maxranks 15 #define maxlevels 50
#define xPrefix "XP System"
#define RANKS_Noobest 0 #define RANKS_Noob 1 #define RANKS_Newbiee 2 #define RANKS_Easy 3 #define RANKS_Normal 4 #define RANKS_Hard 5 #define RANKS_Expert 6 #define RANKS_SuperExpert 7 #define RANKS_Specialist 8 #define RANKS_Leader 9 #define RANKS_Mayor 10 #define RANKS_Pro 11 #define RANKS_SuperPro 12 #define RANKS_Heroic 13 #define RANKS_God 14
new const VERSION[] = "1.1"
new SzMaxPlayers, SzSayText; new playerPrefix,rankLevelBonus,rankSaveType;
new const db_save[] = "cs_rank_system"
new level[33], xp[33], rank[33], g_status_sync
new SzGTeam[3][] = { "Spectator", "Terrorist", "Counter-Terrorist" }
new const xp_num[maxlevels+1] = { 15, 70, 150, 250, 350, 450, 550, 650, 750, 850, 950, 1050, 1150, 1250, 1350, 1450, 1550, 1650, 1750, 1850, 1950, 2050, 2150, 2250, 2350, 2450, 2550,2650, 2750, 2850, 2950, 3050, 3150, 3250, 3350, 3450, 3550, 3650, 3750, 3850, 3950, 4050, 4150, 4250, 4350, 4450, 4550, 4650, 4750, 5000 }
new const ranks_names[maxranks][]= { "Noobest", "Noob", "Newbiee", "Easy", "Normal", "Hard", "Expert", "SuperExpert", "Specialist", "Leader", "Mayor", "Pro", "SuperPro", "Heroic", "God" }
public plugin_init() { register_plugin("XP + LEVEL + RANK SYSTEM", VERSION, AUTHOR)
// system of xp+lvl+rank playerPrefix = register_cvar("Player Prefix", "1") //1-Prefix by RANK, 2-Prefix by LEVEL rankLevelBonus = register_cvar("Level Up Bonus", "10000") // Amount of money when passing level. rankSaveType = register_cvar("XP Save Type", "2") // 1 - IP || 2 - Nick || 3 - SteamID register_cvar("XPLvlRankSystem", VERSION, FCVAR_SERVER | FCVAR_SPONLY ) //Search for variable on Gametracker.com
register_event("StatusValue", "showStatus", "be", "1=2", "2!0") register_event("StatusValue", "hideStatus", "be", "1=1", "2=0") register_clcmd("say", "hook_say"); register_clcmd("say_team", "hook_say_team"); register_dictionary("cs_rank_system.txt");
SzSayText = get_user_msgid ("SayText"); SzMaxPlayers = get_maxplayers(); register_message(SzSayText, "MsgDuplicate"); g_status_sync = CreateHudSyncObj() }
/*---------------------------------------------------------------------------------------------------------------- -HUD OF THE GAME ----------------------------------------------------------------------------------------------------------------*/ public hud_status(id) { if(!is_user_alive(id) || !is_user_connected(id) ) return; if(level[id] >= maxlevels) { static r, g, b; r = random_num(0, 255), g = random_num(0, 255), b = random_num(0, 255); set_hudmessage(r, g, b, 0.80, -1.0, 0, 1.0, 1.1, 0.0, 0.0, -1) show_hudmessage(id,"» Level: %d/%d^n» Rank: %s^n» XP: %d/%d", level[id], maxlevels, ranks_names[rank[id]], xp[id], xp[id]) } else { set_hudmessage(255, 255, 255, 0.80, -1.0, 0, 1.0, 1.1, 0.0, 0.0, -1) show_hudmessage(id,"» Level: %d/%d^n» Rank: %s^n» XP: %d/%d", level[id], maxlevels, ranks_names[rank[id]], xp[id], xp_num[level[id]]) } }
/*---------------------------------------------------------------------------------------------------------------- -CHAT PREFIX ----------------------------------------------------------------------------------------------------------------*/ public MsgDuplicate(id){ return PLUGIN_HANDLED; }
public hook_say(id) { new SzMessages[192], SzName[32]; new SzAlive = is_user_alive(id); read_args(SzMessages, 191); remove_quotes(SzMessages); get_user_name(id, SzName, 31); if(!is_valid_msg(SzMessages)) return PLUGIN_CONTINUE; switch(get_pcvar_num(playerPrefix)) { case 1 :(SzAlive ? format(SzMessages, 191, "^4[%s] ^3%s : ^1%s", ranks_names[rank[id]], SzName, SzMessages) : format(SzMessages, 191, "^1*DEAD* ^4[%s] ^3%s : ^1%s", ranks_names[rank[id]], SzName, SzMessages)); case 2 :(SzAlive ? format(SzMessages, 191, "^4[Level %d] ^3%s : ^1%s", level[id], SzName, SzMessages) : format(SzMessages, 191, "^1*DEAD* ^4[Level %d] ^3%s : ^1%s", level[id], SzName, SzMessages)); } for(new i = 1; i <= SzMaxPlayers; i++) { if(!is_user_connected(i)) continue; message_begin(MSG_ONE, get_user_msgid("SayText"), {0, 0, 0}, i); write_byte(id); write_string(SzMessages); message_end(); } return PLUGIN_CONTINUE; }
public hook_say_team(id) { new SzMessages[192], SzName[32]; new SzAlive = is_user_alive(id); new SzGetTeam = get_user_team(id); read_args(SzMessages, 191); remove_quotes(SzMessages); get_user_name(id, SzName, 31); if(!is_valid_msg(SzMessages)) return PLUGIN_CONTINUE; switch(get_pcvar_num(playerPrefix)) { case 1 : (SzAlive ? format(SzMessages, 191, "^1(%s) ^4[%s] ^3%s : ^1%s", SzGTeam[SzGetTeam], ranks_names[rank[id]], SzName, SzMessages) : format(SzMessages, 191, "^1*DEAD* ^1(%s) ^4[%s] ^3%s : ^1%s", SzGTeam[SzGetTeam], ranks_names[rank[id]], SzName, SzMessages)); case 2 : (SzAlive ? format(SzMessages, 191, "^1(%s) ^4[Level %d] ^3%s : ^1%s", SzGTeam[SzGetTeam], level[id], SzName, SzMessages) : format(SzMessages, 191, "^1*DEAD* ^1(%s) ^4[Level %d] ^3%s : ^1%s", SzGTeam[SzGetTeam], level[id], SzName, SzMessages)); } for(new i = 1; i <= SzMaxPlayers; i++) { if(!is_user_connected(i)) continue; if(get_user_team(i) != SzGetTeam) continue; message_begin(MSG_ONE, get_user_msgid("SayText"), {0, 0, 0}, i); write_byte(id); write_string(SzMessages); message_end(); } return PLUGIN_CONTINUE; }
bool:is_valid_msg(const SzMessages[]) { if( SzMessages[0] == '@' || !strlen(SzMessages)){ return false; } return true; }
/*---------------------------------------------------------------------------------------------------------------- -EVENT TO ADD XP ----------------------------------------------------------------------------------------------------------------*/
public client_death(killer, victim, weapon, hitplace) { new victim_name[32] get_user_name(victim, victim_name, charsmax(victim_name)) new killer_team = get_user_team(killer) new victim_team = get_user_team(victim) //NORMAL KILL if((killer != victim) && !(killer_team == victim_team) && !(hitplace == HIT_HEAD) && !(weapon == CSW_HEGRENADE) && !(weapon == CSW_KNIFE)) { xp[killer]++ client_print_color(killer, "!g[%s] %L", xPrefix, LANG_PLAYER, "MSG_NORMAL_KILL", victim_name) } //HEADSHOT if(hitplace == HIT_HEAD && !(weapon == CSW_KNIFE) && !(killer_team == victim_team)) { xp[killer]+=3 client_print_color(killer, "!g[%s] %L", xPrefix, LANG_PLAYER, "MSG_HEADSHOT_KILL", victim_name) } //KNIFE KILL if(weapon == CSW_KNIFE && !(hitplace == HIT_HEAD) && !(killer_team == victim_team)) { xp[killer]+=5 client_print_color(killer, "!g[%s] %L", xPrefix, LANG_PLAYER, "MSG_KNIFE_KILL", victim_name) } //KNIFE + HEADSHOT if(weapon == CSW_KNIFE && (hitplace == HIT_HEAD) && !(killer_team == victim_team)) { xp[killer]+=7 client_print_color(killer, "!g[%s] %L", xPrefix, LANG_PLAYER, "MSG_KNIFE_HEAD_KILL", victim_name) } //GRENADE KILL if(weapon == CSW_HEGRENADE && (killer != victim) && !(killer_team == victim_team)) { xp[killer]+=5 client_print_color(killer, "!g[%s] %L", xPrefix, LANG_PLAYER, "MSG_GRENADE_KILL", victim_name) } //SUICIDE if(killer == victim) { xp[killer]-=2 client_print_color(killer, "!g[%s] %L", xPrefix, LANG_PLAYER, "MSG_SUICIDE") } //TEAM KILL if(killer != victim && (killer_team == victim_team)) { xp[killer]-=10 client_print_color(killer, "!g[%s] %L", xPrefix, LANG_PLAYER, "MSG_TEAM_KILL") } check_level(killer, 1) save_data(killer) }
/*---------------------------------------------------------------------------------------------------------------- -CHECK LEVEL OF ADD ++ ----------------------------------------------------------------------------------------------------------------*/ public check_level(id, sound) { if(!is_user_connected(id)) return PLUGIN_HANDLED; new name[32]; get_user_name(id, name, 31) if(level[id] < maxlevels) { while(xp[id] >= xp_num[level[id]]) { level[id]++ if(sound) { if(level[id] == maxlevels) { client_print_color(id, "!g[%s] %L", xPrefix, LANG_PLAYER, "MSG_MAXLVL_ID", level[id]) client_print_color(0, "!g[%s] %L",xPrefix, LANG_PLAYER, "MSG_MAXLVL_ALL", name, level[id]) client_cmd(0, "spk ambience/wolfhowl02.wav") return PLUGIN_HANDLED } client_print_color(id,"!g[%s] %L",xPrefix,LANG_PLAYER, "MSG_RAISE_LEVEL_ID", get_pcvar_num(rankLevelBonus)) client_print_color(0, "!g[%s] %L",xPrefix,LANG_PLAYER, "MSG_RAISE_LEVEL_ALL", name, get_pcvar_num(rankLevelBonus)) cs_set_user_money(id, cs_get_user_money(id) + get_pcvar_num(rankLevelBonus)) client_cmd(0, "spk ambience/lv_fruit1.wav") set_ranks(id) } } } // Bug Preventions... (Back to top) if(level[id] == maxlevels && xp[id] > xp_num[level[id]-1]) { xp[id] = xp_num[level[id]-1] save_data(id) } if(level[id] >= maxlevels) { level[id] = maxlevels xp[id] = xp_num[level[id]-1] save_data(id) } return PLUGIN_HANDLED }
/*---------------------------------------------------------------------------------------------------------------- -SET THE RANK POSITION ----------------------------------------------------------------------------------------------------------------*/ public set_ranks(id) { if(level[id] <= 2) rank[id] = RANKS_Noobest if(level[id] >= 2) rank[id] = RANKS_Noob if(level[id] >= 5) rank[id] = RANKS_Newbiee if(level[id] >= 8) rank[id] = RANKS_Easy if(level[id] >= 11) rank[id] = RANKS_Normal if(level[id] >= 14) rank[id] = RANKS_Hard if(level[id] >= 17) rank[id] = RANKS_Expert if(level[id] >= 20) rank[id] = RANKS_SuperExpert if(level[id] >= 23) rank[id] = RANKS_Specialist if(level[id] >= 26) rank[id] = RANKS_Leader if(level[id] >= 29) rank[id] = RANKS_Mayor if(level[id] >= 32) rank[id] = RANKS_Pro if(level[id] >= 33) rank[id] = RANKS_SuperPro if(level[id] >= 36) rank[id] = RANKS_Heroic if(level[id] >= 43) rank[id] = RANKS_God }
/*---------------------------------------------------------------------------------------------------------------- -SAVE LEVEL, XP AND RANK ----------------------------------------------------------------------------------------------------------------*/ public save_data(id) { if(!is_user_connected(id)) return PLUGIN_HANDLED; new auth[40], data[50] switch(get_pcvar_num(rankSaveType)) { case 1: get_user_ip(id, auth, charsmax(auth), 1) case 2: get_user_name(id, auth, charsmax(auth)) case 3: get_user_authid(id, auth, charsmax(auth)) } formatex(data, charsmax(data), "%d %d", level[id], xp[id]) fvault_pset_data(db_save, auth, data) return PLUGIN_HANDLED; }
/*---------------------------------------------------------------------------------------------------------------- -LOAD DATA ----------------------------------------------------------------------------------------------------------------*/
public client_authorized(id) { new auth[40], data[50], x1[10], x2[10] switch(get_pcvar_num(rankSaveType)) { case 1: get_user_ip(id, auth, charsmax(auth), 1) case 2: get_user_name(id, auth, charsmax(auth)) case 3: get_user_authid(id, auth, charsmax(auth)) } fvault_get_data(db_save, auth, data, charsmax(data)) parse(data, x1, charsmax(x1), x2, charsmax(x2)) level[id] = str_to_num(x1) xp[id] = str_to_num(x2) set_task(2.0, "set_ranks", id) check_level(id, 0) set_task(1.1, "hud_status", id, _, _, "b") }
/*---------------------------------------------------------------------------------------------------------------- -SHOW XP BY LOOKING AT THE PERSON ----------------------------------------------------------------------------------------------------------------*/
public showStatus(id) { if(!is_user_bot(id) && is_user_connected(id)) { new name[32], pid = read_data(2) get_user_name(pid, name, 31) new xxx = get_user_team(id) new xxx2 = get_user_team(pid) static r, g, b; r = random_num(0, 255), g = random_num(0, 255), b = random_num(0, 255); if (xxx == xxx2) // friend { set_hudmessage(r, g, b, -1.0, 0.60, 1, 0.01, 3.0, 0.01, 0.01, -1) ShowSyncHudMsg(id, g_status_sync, "Name: %s^nRank: %s^nLevel: %d^nXP: %d/%d", name, ranks_names[rank[pid]], level[pid], xp[pid], xp_num[level[pid]]) } } }
public hideStatus(id) { ClearSyncHud(id, g_status_sync) }
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1046\\ f0\\ fs16 \n\\ par } */ /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang16393\\ f0\\ fs16 \n\\ par } */
|