#pragma semicolon 1
#include <amxmodx>
#include <reapi>
#include <nvault>
new const ChatTag[] = "^1[^4Emircw^1]";
new const sLevelSystem[][][] = {
{ "Rutbesiz", 0 }, // 0
{ "I.Yeniceri", 50 }, // 1
{ "II.Timarli Sipahi", 100 }, // 2
{ "III.Atli Suvari", 200 }, // 3
{ "IV.Silahtar Aga", 400 }, // 4
{ "V.Uc Beyi", 550 }, // 5
{ "VI.Akinci Beyi", 800 }, // 6
{ "VII.Sancak Beyi", 1250 }, // 7
{ "VIII.Beyler Beyi", 1750 }, // 8
{ "IX.Subasi", 2000 }, // 9
{ "X.Nisanci", 2500 }, // 10
{ "XI.SerAsker Kethudasi", 3000 }, // 11
{ "XII.Kapudan Pasa", 3500 }, // 12
{ "XIII.KazAsker", 4000 }, // 13
{ "XIV.KubbeAlti Veziri", 4500 }, // 14
{ "XV.Sadrazam", 5000 }, // 15
{ "XVI.Sehzade", 5750 }, // 16
{ "XVII.Hukumdar", 6500 }, // 17
};
enum _: Variables {
Exp,
Level
}
new Vars[MAX_PLAYERS + 1][Variables], iCvars[3], iVault, iForward, iReturn, iSyncHud;
public plugin_init() {
register_plugin("Advanced Level System", "1.0", "PawNod', LyNcH");
register_concmd("amx_give_level", "@GiveLevel", ADMIN_RCON, "<isim> <miktar>, belirlenen kisiye level verir");
register_clcmd("say /rutbe", "RutbeInformation");
register_clcmd("say !rutbe", "RutbeInformation");
register_clcmd("say .rutbe", "RutbeInformation");
register_clcmd("say /rütbe", "RutbeInformation");
register_clcmd("say !rütbe", "RutbeInformation");
register_clcmd("say .rütbe", "RutbeInformation");
RegisterHookChain(RG_CBasePlayer_Killed, "@IsKilled", .post = true);
iForward = CreateMultiForward("pUserLevelUp", ET_IGNORE, FP_CELL);
Cvars();
iSyncHud = CreateHudSyncObj();
}
Cvars() {
bind_pcvar_num(create_cvar("ALS_Give_Exp", "1"), iCvars[0]); // Bu değeri 0 yaparsanız ALS_Give_Max_Exp ve ALS_Give_Min_Exp değerleri arasından rastgele exp verecektir.
bind_pcvar_num(create_cvar("ALS_Give_Min_Exp", "20"), iCvars[1]);
bind_pcvar_num(create_cvar("ALS_Give_Max_Exp", "70"), iCvars[2]);
}
@GiveLevel(const iPlayer, const iLVL, const iCid) {
if (~get_user_flags(iPlayer) & iLVL)
return PLUGIN_HANDLED;
new iStringName[18], iStringAmount[18];
read_argv(1, iStringName, 17);
read_argv(2, iStringAmount, 17);
if (iStringName[0] == '@') {
new iPlayers[32], iPlayerNum, iPlayerad, iAmmount = str_to_num(iStringAmount);
switch (iStringName[1]) {
case 't', 'T'
: {
get_players(iPlayers, iPlayerNum, "ae", "TERRORIST");
client_print_color(0, 0, "^4[ ^3%n ^4] ^1adli admin ^4[ ^3Zombiler ^4] ^1'e ^4[ ^3%i Level ^4] ^1verdi^4.", iPlayer, iAmmount);
}
case 'c', 'C'
: {
get_players(iPlayers, iPlayerNum, "ae", "CT");
client_print_color(0, 0, "^4[ ^3%n ^4] ^1adli admin ^4[ ^3Insanlar ^4] ^1'a ^4[ ^3%i Level ^4] ^1verdi^4.", iPlayer, iAmmount);
}
case 'a', 'A'
: {
get_players(iPlayers, iPlayerNum, "a");
client_print_color(0, 0, "^4[ ^3%n ^4] ^1adli admin ^4[ ^3Herkes ^4] ^1'e ^4[ ^3%i Level ^4] ^1verdi^4.", iPlayer, iAmmount);
}
default: {
get_players(iPlayers, iPlayerNum, "a");
client_print_color(0, 0, "^4[ ^3%n ^4] ^1adli admin ^4[ ^3Herkes ^4] ^1'e ^4[ ^3%i Level ^4] ^1verdi^4.", iPlayer, iAmmount);
}
}
for (new i = 0; i < iPlayerNum; i++) {
iPlayerad = iPlayers[i];
if (Vars[iPlayerad][Level] + iAmmount >= (sizeof(sLevelSystem) - 1)) {
Vars[iPlayerad][Level] = (sizeof(sLevelSystem) - 1);
Vars[iPlayerad][Exp] = sLevelSystem[(sizeof(sLevelSystem) - 1)][1][0];
} else {
Vars[iPlayerad][Exp] = sLevelSystem[Vars[iPlayerad][Level] + iAmmount][1][0];
Vars[iPlayerad][Level] += iAmmount;
}
}
return PLUGIN_HANDLED;
}
new iAmmount, iUID = find_player("bl", iStringName);
iAmmount = str_to_num(iStringAmount);
client_print_color(0, 0, "^4[ ^3%n ^4] ^1adli admin ^4[ ^3%n ^4] ^1adli kisiye ^4[ ^3%i Level ^4] ^1verdi^4.", iPlayer, iUID, iAmmount);
if (Vars[iUID][Level] + iAmmount >= (sizeof(sLevelSystem) - 1)) {
Vars[iUID][Level] = (sizeof(sLevelSystem) - 1);
Vars[iUID][Exp] = sLevelSystem[(sizeof(sLevelSystem) - 1)][1][0];
} else {
Vars[iUID][Exp] = sLevelSystem[Vars[iUID][Level] + iAmmount][1][0];
Vars[iUID][Level] += iAmmount;
}
new sSteamID[64];
get_user_authid(iUID, sSteamID, 63);
sSetIntData("%s>Level", Vars[iUID][Level], sSteamID);
sSetIntData("%s>Exp", Vars[iUID][Exp], sSteamID);
return PLUGIN_HANDLED;
}
@IsKilled(const iVictim, const iAttacker) {
if (!is_user_connected(iAttacker) || iVictim == iAttacker) return;
if (LevelChecker(iAttacker, false, (iCvars[0] == 0) ? random_num(iCvars[1], iCvars[2]) : iCvars[0])) {
(iCvars[0] == 0) ? (Vars[iAttacker][Exp] += random_num(iCvars[1], iCvars[2])) : (Vars[iAttacker][Exp] += iCvars[0]);
new sSteamID[64];
get_user_authid(iAttacker, sSteamID, 63);
sSetIntData("%s>Exp", Vars[iAttacker][Exp], sSteamID);
}
if (LevelChecker(iAttacker, true, 0))
@LevelUp(iAttacker);
}
@LevelUp(const iPlayer) {
Vars[iPlayer][Level]++;
ExecuteForward(iForward, iReturn, iPlayer);
client_print_color(iPlayer, iPlayer, "%s ^1Basarili bir sekilde ^4Level Atladiniz^1!", ChatTag);
new sSteamID[64];
get_user_authid(iPlayer, sSteamID, 63);
sSetIntData("%s>Level", Vars[iPlayer][Level], sSteamID);
sSetIntData("%s>Exp", Vars[iPlayer][Exp], sSteamID);
}
public client_putinserver(iPlayer) {
new sSteamID[64];
get_user_authid(iPlayer, sSteamID, 63);
Vars[iPlayer][Exp] = sGetIntData("%s>Exp", sSteamID);
Vars[iPlayer][Level] = sGetIntData("%s>Level", sSteamID);
set_task(3.0, "ChatReklami", iPlayer);
set_task(5.0, "ShowHudMessage", iPlayer + 125721, .flags = "b");
}
public ShowHudMessage(Taskid) {
new id = Taskid - 125721;
if (is_user_connected(id)) {
set_hudmessage(0, 255, 0, 1.0, 0.50, 0, 0.0, 5.0);
if (Vars[id][Level] < (sizeof(sLevelSystem) - 1)) ShowSyncHudMsg(id, iSyncHud, "[Rutben: %s]^n[Frag: %i / %i]", sLevelSystem[Vars[id][Level]][0][0], Vars[id][Exp], sLevelSystem[Vars[id][Level] + 1][1][0]);
else ShowSyncHudMsg(id, iSyncHud, "[Rutben: %s]^n[Frag: %i / Max]", sLevelSystem[Vars[id][Level]][0][0], Vars[id][Exp]);
}
}
public ChatReklami(id) {
if (is_user_connected(id)) {
client_print_color(id, id, "%s ^4Servera hosgeldiniz, serverda level sistemi vardir^1!", ChatTag);
if (Vars[id][Level] < (sizeof(sLevelSystem) - 1)) {
client_print_color(id, id, "%s ^4Sonraki rutbeye gecmek icin ^3%i kill ^4daha al^1!", ChatTag, sLevelSystem[Vars[id][Level] + 1][1][0] - Vars[id][Exp]);
}
}
}
public plugin_natives() {
register_native("ALS_GetUserExp", "@ALS_GUEX");
register_native("ALS_SetUserExp", "@ALS_SUEX");
register_native("ALS_GetUserLevel", "@ALS_GULV");
register_native("ALS_SetUserLevel", "@ALS_SULV");
register_native("ALS_GetLevelName", "@ALS_GETNAME");
register_native("ALS_GetMaxLevel", "@ALS_GMLV");
}
@ALS_GETNAME() {
new levelid = get_param(1);
new len = get_param(2);
set_string(2, fmt("%s", sLevelSystem[levelid][0][0]), len);
}
@ALS_GUEX() {
new nPlayerID = get_param(1);
return Vars[nPlayerID][Exp];
}
@ALS_SUEX() {
new nPlayerID = get_param(1), nAmount = get_param(2);
if (nAmount >= sLevelSystem[(sizeof(sLevelSystem) - 1)][1][0]) {
Vars[nPlayerID][Level] = (sizeof(sLevelSystem) - 1);
Vars[nPlayerID][Exp] = sLevelSystem[(sizeof(sLevelSystem) - 1)][1][0];
} else {
Vars[nPlayerID][Exp] = nAmount;
for (new i = 0; i < sizeof(sLevelSystem); i++) {
if (nAmount >= sLevelSystem[i][1][0]) {
Vars[nPlayerID][Exp] = i;
break;
}
}
}
return PLUGIN_CONTINUE;
}
@ALS_GULV() {
new nPlayerID = get_param(1);
return Vars[nPlayerID][Level];
}
@ALS_SULV() {
new nPlayerID = get_param(1), nAmount = get_param(2);
if (nAmount >= (sizeof(sLevelSystem) - 1)) {
Vars[nPlayerID][Level] = (sizeof(sLevelSystem) - 1);
Vars[nPlayerID][Exp] = sLevelSystem[(sizeof(sLevelSystem) - 1)][1][0];
} else {
Vars[nPlayerID][Exp] = sLevelSystem[nAmount][1][0];
Vars[nPlayerID][Level] = nAmount;
}
return PLUGIN_CONTINUE;
}
@ALS_GMLV() {
return (sizeof(sLevelSystem) - 1);
}
public plugin_cfg()
iVault = nvault_open("ALS_V1");
public plugin_end()
nvault_close(iVault);
bool:LevelChecker(const iPlayer, const bool:IsExp, const iExpAmout) {
new iMaxExp, iMaxLevel;
iMaxLevel = (sizeof(sLevelSystem) - 1);
iMaxExp = sLevelSystem[iMaxLevel][1][0];
if (IsExp) {
if (Vars[iPlayer][Exp] >= iMaxExp) {
Vars[iPlayer][Level] = iMaxLevel;
return false;
}
if (Vars[iPlayer][Exp] < sLevelSystem[Vars[iPlayer][Level] + 1][1][0])
return false;
if (Vars[iPlayer][Level] >= iMaxLevel) {
Vars[iPlayer][Level] = iMaxLevel;
return false;
}
} else {
if (Vars[iPlayer][Exp] + iExpAmout >= iMaxExp) {
Vars[iPlayer][Exp] = iMaxExp;
return false;
}
}
return true;
}
stock sGetIntData(const sKey[], any:...) {
new sFixedData[128];
vformat(sFixedData, 127, sKey, 2);
return nvault_get(iVault, sFixedData);
}
stock sSetIntData(const sKey[], const iData, any:...) {
new sFixedData[128], sNTS[48];
vformat(sFixedData, 127, sKey, 3);
num_to_str(iData, sNTS, 47);
nvault_set(iVault, sFixedData, sNTS);
}
public RutbeInformation(Player) {
new Arg[2126], Num;
Num += formatex(Arg[Num], 2126 - Num, "<meta charset=UTF-8><style>body{background:#000;font-family:Arial}th{border-left:1px solid #FF0000;border-top:1px solid #FF0000}table{background:#000;font-size:11px;color:#FFF;border-right:1px solid #FF0000;border-bottom:1px solid #FF0000;padding:3px}h2,h3{color:#FFF}#c{background:#FF9B00;color:#000}img{height:10px;background:#00E930;margin:0 3px}#r{height:10px;background:#B6423C}#clr{background:none;color:#FFF;font-size:20px;border:0} .powered{color:#FF0000}</style>");
Num += formatex(Arg[Num], 2126 - Num, "<body><table width=100%% border=0 align=center cellpadding=0 cellspacing=1>");
Num += formatex(Arg[Num], 2126 - Num, "<tr><th>#<th>Rütbe Adı<th>Gereken Kill</tr>");
for (new i = 1; i < sizeof(sLevelSystem); i++) {
Num += formatex(Arg[Num], 2126 - Num, "<tr><th>%i<th>%s<th>%d</tr>", i, sLevelSystem[i][0][0], sLevelSystem[i][1][0]);
}
Num += formatex(Arg[Num], 2126 - Num, "</table><br><center class='powered'>Powered By WEBAilesi.COM</center>");
show_motd(Player, Arg, "Rütbe Bilgilendirmesi");
}