Наглость второе счастье )
Так что прошу еще раз помочь
Добавил выдачу опыта в вип меню
При выдаче появляется ошибка то есть
У вас 21 level [155/160] exp. И вы из вип меню взяли 10 exp
22 level[165/200] - должно получится как то так
А получается вот так
21 level [155/160] exp. Берем 10 exp
21 level [165/160] - и вот получается вот это
Помогите пж исправить
Еще если не сложна помогите вывести уровень и exp в худ жизни/класс/аммо
Исходник левел системы
- Код: Выделить всё
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <nvault>
#include <sqlx>
#define is_user_valid(%1) (1 <= %1 <= g_iMaxPlayers)
#define linux_diff_player 5
#define m_LastHitGroup 75
#define MsgId_SayText 76
#define PLAYERS_PER_PAGE 8
#define TASK_GIVEEXP 601000
#define TASK_INFORMER 602000
#define CVAR_SAVE_TYPE 0
#define CVAR_MODE_TYPE 1
#define CVAR_INFO_COLOR_R 2
#define CVAR_INFO_COLOR_G 3
#define CVAR_INFO_COLOR_B 4
#define CVAR_MODE_DAMAGE 5
#define CVAR_TIME_EXP 6
#define CVAR_DAMAGE_EXP 7
#define CVAR_KILLED_HEAD_EXP 8
#define CVAR_KILLED_KNIFE_EXP 9
#define CVAR_KILLED_EXP 10
#define CVAR_ADMIN_TIME_EXP 11
#define CVAR_ADMIN_DAMAGE_EXP 12
#define CVAR_ADMIN_KILLED_HEAD_EXP 13
#define CVAR_ADMIN_KILLED_KNIFE_EXP 14
#define CVAR_ADMIN_KILLED_EXP 15
#define CVAR_PLAYER_TYPE 16
#define CVAR_INFORMER 17
#define CVAR_INFORMER_TARGET 18
#define CVAR_INFO_TARGET_COLOR_R 19
#define CVAR_INFO_TARGET_COLOR_G 20
#define CVAR_INFO_TARGET_COLOR_B 21
#define CVAR_INFO_COORD_X 0
#define CVAR_INFO_COORD_Y 1
#define CVAR_MODE_TIME 2
#define CVAR_INFO_TARGET_COORD_X 3
#define CVAR_INFO_TARGET_COORD_Y 4
#define CVAR_MYSQL_HOST 0
#define CVAR_MYSQL_BD 1
#define CVAR_MYSQL_USER 2
#define CVAR_MYSQL_PASS 3
#define CVAR_MENU_FLAGS 4
#define CVAR_ADMIN_FLAGS 5
#define CVAR_INFO_COLOR 6
#define CVAR_INFO_TRAGET_COLOR 7
new Float:g_szFactor[7] = { 0.0, 0.1, 0.3, 0.5, 0.7, 0.9, 1.0 };
new g_iMaxPlayers, g_iSyncStatusText, g_iSyncInformer, g_iUserLoadingLevel[33], g_iUserLevel[33], g_iUserExp[33], g_iUserDamage[33], g_iNumCvar[22],
g_iStringCvar[8][32], Float:g_iFloatCvar[5], g_iUserAdminMenu[33], g_iUserNum[33], g_iMenuTarget[33];
new g_iMenuPlayers[33][32], g_iMenuPosition[33];
new g_PlayerSumLine, g_iMaxLevels, Handle:g_SQL_Connection,
Handle:g_SQL_Tuple, g_Vault;
new const g_iMenuStatus[5][64] =
{
"",
"ILS_MENU_STATUS_1",
"ILS_MENU_STATUS_2",
"ILS_MENU_STATUS_3",
"ILS_MENU_STATUS_4"
}
new const g_iGiveStatus[5][64] =
{
"",
"ILS_MENU_GIVE_STATUS_1",
"ILS_MENU_GIVE_STATUS_2",
"ILS_MENU_GIVE_STATUS_3",
"ILS_MENU_GIVE_STATUS_4"
}
new Array:g_aDataInfoPlayer, Array:g_aDataMaxLevels, g_iMaxExp;
enum _:DATA_PLAYER_INFO
{
LANG_PLAYERAUTCH[32],
MODE_PLAYEREXP
};
public plugin_precache()
{
new szCfgDir[64], szCfgFile[128];
get_localinfo("amxx_configsdir", szCfgDir, charsmax(szCfgDir));
formatex(szCfgFile, charsmax(szCfgFile), "%s/IdealLevelSystem.ini", szCfgDir);
switch(file_exists(szCfgFile))
{
case 0: log_to_file("%s/log_error.log", "File ^"%s^" not found!", szCfgDir, szCfgFile);
case 1: ils_levels_read_file(szCfgFile);
}
formatex(szCfgFile, charsmax(szCfgFile), "%s/ILS_MaxLevels.ini", szCfgDir);
switch(file_exists(szCfgFile))
{
case 0: log_to_file("%s/log_error.log", "File ^"%s^" not found!", szCfgDir, szCfgFile);
case 1: ils_maxlevels_read_file(szCfgFile);
}
}
public plugin_init()
{
register_plugin ("Ideal Level System FINAL", "1.3", "Freeman4iK");
register_dictionary("ideal_level_system.txt");
RegisterHam(Ham_Killed, "player", "Ham_PlayerKilled_Post", true);
RegisterHam(Ham_TraceAttack, "player", "Ham_TraceAttack_Player", false);
register_event("StatusValue", "Event_StatusValueHide", "be", "1=1", "2=0");
register_event("StatusValue", "Event_StatusValueShow", "be", "1=2", "2!0");
register_clcmd("ils_give", "ClCmd_GiveNum");
register_clcmd("ils_admin_give", "Show_GiveAdminMenu");
register_menucmd(register_menuid("Show_GiveAdminMenu"), (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9), "Handle_GiveAdminMenu");
register_menucmd(register_menuid("Show_NumGiveAdminMenu"), (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9), "Handle_NumGiveAdminMenu");
register_menucmd(register_menuid("Show_PlayerGive"), (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9), "Handle_PlayerGive");
cvars_init();
g_iMaxPlayers = get_maxplayers();
g_iSyncInformer = CreateHudSyncObj();
g_iSyncStatusText = CreateHudSyncObj();
}
public plugin_natives()
{
register_native("ils_get_user_level", "native_get_user_level", 1);
register_native("ils_set_user_level", "native_set_user_level", 1);
register_native("ils_get_user_exp", "native_get_user_exp", 1);
register_native("ils_set_user_exp", "native_set_user_exp", 1);
register_native("ils_get_user_maxexp", "naive_get_user_maxexp", 1);
}
public plugin_cfg()
{
new szCfgDir[64];
get_localinfo("amxx_configsdir", szCfgDir, charsmax(szCfgDir));
server_cmd("exec %s/IdealLevelSystem.cfg", szCfgDir);
set_task(0.1, "get_cvars");
set_task(1.0, "loading_bd");
}
public plugin_end()
{
if(g_iNumCvar[CVAR_SAVE_TYPE] == 2)
{
if(g_SQL_Tuple) SQL_FreeHandle(g_SQL_Tuple);
if(g_SQL_Connection) SQL_FreeHandle(g_SQL_Connection);
}
else if(g_iNumCvar[CVAR_SAVE_TYPE] == 3) nvault_close(g_Vault);
}
public client_disconnect(id)
{
if(task_exists(id + TASK_INFORMER)) remove_task(id + TASK_INFORMER);
if(task_exists(id + TASK_GIVEEXP)) remove_task(id + TASK_GIVEEXP);
g_iUserAdminMenu[id] = 0;
g_iUserNum[id] = 0;
g_iUserDamage[id] = 0;
Save_Levels(id);
}
public client_putinserver(id)
{
if(g_iNumCvar[CVAR_INFORMER]) set_task(1.0, "Task_Informer", id + TASK_INFORMER, _, _, "b");
if(g_iNumCvar[CVAR_MODE_TYPE] == 2) set_task(g_iFloatCvar[CVAR_MODE_TIME], "Task_GiveExp", id + TASK_GIVEEXP, _, _, "b");
Loading_Level(id);
}
public ils_levels_read_file(szCfgFile[])
{
new aDataPlayerInfo[DATA_PLAYER_INFO];
g_aDataInfoPlayer = ArrayCreate(DATA_PLAYER_INFO);
new szBuffer[128], iLine, iLen, szParse[2][32];
while(read_file(szCfgFile, iLine++, szBuffer, charsmax(szBuffer), iLen))
{
if(!iLen || szBuffer[0] == ';') continue;
parse(szBuffer, szParse[0], charsmax(szParse[]), szParse[1], charsmax(szParse[]));
copy(aDataPlayerInfo[LANG_PLAYERAUTCH], charsmax(aDataPlayerInfo[LANG_PLAYERAUTCH]), szParse[0]);
aDataPlayerInfo[MODE_PLAYEREXP] = str_to_num(szParse[1]);
ArrayPushArray(g_aDataInfoPlayer, aDataPlayerInfo);
g_PlayerSumLine++;
}
}
public ils_maxlevels_read_file(szCfgFile[])
{
g_aDataMaxLevels = ArrayCreate(32);
ArrayPushCell(g_aDataMaxLevels, 0);
new szBuffer[128], szMaxExp[8], iLine, iLen, aDataExp;
while(read_file(szCfgFile, iLine++, szBuffer, charsmax(szBuffer), iLen))
{
if(!iLen || szBuffer[0] == ';') continue;
parse(szBuffer, szMaxExp, charsmax(szMaxExp));
if(is_str_num(szMaxExp))
{
g_iMaxLevels++;
aDataExp = str_to_num(szMaxExp);
ArrayPushCell(g_aDataMaxLevels, aDataExp);
}
}
g_iMaxExp = ArrayGetCell(g_aDataMaxLevels, g_iMaxLevels);
}
public cvars_init()
{
register_cvar("ils_save_type", "1"); // Тип сохранения данных (0 - не сохранять |1 - в файле IdealLevelSystem.ini | 2 - Через MySql | 3 - Через nVault)
register_cvar("ils_mode_type", "1"); // Тип выдачи Опыта (1 - за убийство игрока | 2 - за время игры | 3 - за нанесенный урон)
register_cvar("ils_player_type", "1"); // Тип данных игрока (1 - Сохранять по нику игрока | 2 - Сохранять по SteamId игрока)
register_cvar("ils_informer", "1"); // Показывать ли информер уровня и опыта игрока? (0 - не показывать | 1 - показывать)
register_cvar("ils_info_color", "0, 255, 0"); // Цвет информера в формате RGB
register_cvar("ils_info_coord_x", "0.02"); // Координаты X информера (уровня и опыта)
register_cvar("ils_info_coord_y", "0.9"); // Координаты Y информера (уровня и опыта)
register_cvar("ils_informer_target", "1"); // Показывать ли информер уровня и опыта при наводке прицела на игрока? (0 - не показывать | 1 - показывать)
register_cvar("ils_info_target_color", "0, 0, 255"); // Цвет информера в формате RGB (при наводке прицела на игрока)
register_cvar("ils_info_target_coord_x", "-1.0"); // Координаты X информера (при наводке прицела на игрока)
register_cvar("ils_info_target_coord_y", "0.8"); // Координаты Y информера (при наводке прицела на игрока)
register_cvar("ils_give_time", "60.0"); // Через какое время выдавать очко опыта(в секундах) при ils_mode_type = 2
register_cvar("ils_give_damage", "150"); // За какой нанесенный урон выдавать очко опыта при ils_mode_type = 3
register_cvar("ils_mysql_host", "localhost"); // Хост базы данных
register_cvar("ils_mysql_bd", "bd"); // Имя базы данных
register_cvar("ils_mysql_user", "User"); // Имя пользователя
register_cvar("ils_mysql_password", "Password"); // Пароль пользователя
register_cvar("ils_menu_flags", "l"); // Флаг доступа для открытия меню выдачи опыта и уровня
register_cvar("ils_admin_flags", "d"); // Флаг админа для множетеля получения опыта
register_cvar("ils_time_exp", "1"); // Сколько давать Exp за время игры которое указано в кваре ils_give_time(работает при ils_mode_type = 2)
register_cvar("ils_damage_exp", "1"); // Сколько давать Exp за нанисение урона который указан в кваре ils_give_damage (работает при ils_mode_type = 3)
register_cvar("ils_killed_exp", "1"); // Сколько давать Exp за убийство игрока (работает при ils_mode_type = 1)
register_cvar("ils_killed_head_exp", "2"); // Сколько давать Exp за убийство в голову (работает при ils_mode_type = 1)
register_cvar("ils_killed_knife_exp", "3"); // Сколько давать Exp за убийство игрока с ножа (работает при ils_mode_type = 1)
register_cvar("ils_admin_time_exp", "1"); // Сколько давать админу Exp за время игры которое указано в кваре ils_give_time(работает при ils_mode_type = 2)
register_cvar("ils_admin_damage_exp", "1"); // Сколько давать админу Exp за нанисение урона который указан в кваре ils_give_damage (работает при ils_mode_type = 3)
register_cvar("ils_admin_killed_head_exp", "2"); // Сколько давать админу Exp за убийство в голову (работает при ils_mode_type = 1)
register_cvar("ils_admin_killed_knife_exp", "3"); // Сколько давать админу Exp за убийство игрока с ножа (работает при ils_mode_type = 1)
register_cvar("ils_admin_killed_exp", "1"); // Сколько давать админу Exp за убийство игрока (работает при ils_mode_type = 1)
}
public get_cvars()
{
g_iNumCvar[CVAR_SAVE_TYPE] = get_cvar_num("ils_save_type");
g_iNumCvar[CVAR_MODE_TYPE] = get_cvar_num("ils_mode_type");
g_iNumCvar[CVAR_PLAYER_TYPE] = get_cvar_num("ils_player_type");
g_iNumCvar[CVAR_INFORMER] = get_cvar_num("ils_informer");
g_iNumCvar[CVAR_MODE_DAMAGE] = get_cvar_num("ils_give_damage");
g_iNumCvar[CVAR_INFORMER_TARGET] = get_cvar_num("ils_informer_target");
g_iNumCvar[CVAR_TIME_EXP] = get_cvar_num("ils_time_exp");
g_iNumCvar[CVAR_DAMAGE_EXP] = get_cvar_num("ils_damage_exp");
g_iNumCvar[CVAR_KILLED_HEAD_EXP] = get_cvar_num("ils_killed_head_exp");
g_iNumCvar[CVAR_KILLED_KNIFE_EXP] = get_cvar_num("ils_killed_knife_exp");
g_iNumCvar[CVAR_KILLED_EXP] = get_cvar_num("ils_killed_exp");
g_iNumCvar[CVAR_ADMIN_TIME_EXP] = get_cvar_num("ils_admin_time_exp");
g_iNumCvar[CVAR_ADMIN_DAMAGE_EXP] = get_cvar_num("ils_admin_damage_exp");
g_iNumCvar[CVAR_ADMIN_KILLED_HEAD_EXP] = get_cvar_num("ils_admin_killed_head_exp");
g_iNumCvar[CVAR_ADMIN_KILLED_KNIFE_EXP] = get_cvar_num("ils_admin_killed_knife_exp");
g_iNumCvar[CVAR_ADMIN_KILLED_EXP] = get_cvar_num("ils_admin_killed_exp");
g_iFloatCvar[CVAR_INFO_COORD_X] = get_cvar_float("ils_info_coord_x");
g_iFloatCvar[CVAR_INFO_COORD_Y] = get_cvar_float("ils_info_coord_y");
g_iFloatCvar[CVAR_INFO_TARGET_COORD_X] = get_cvar_float("ils_info_target_coord_x");
g_iFloatCvar[CVAR_INFO_TARGET_COORD_Y] = get_cvar_float("ils_info_target_coord_y");
g_iFloatCvar[CVAR_MODE_TIME] = get_cvar_float("ils_give_time");
get_cvar_string("ils_mysql_host", g_iStringCvar[CVAR_MYSQL_HOST], charsmax(g_iStringCvar[]));
get_cvar_string("ils_mysql_bd", g_iStringCvar[CVAR_MYSQL_BD], charsmax(g_iStringCvar[]));
get_cvar_string("ils_mysql_user", g_iStringCvar[CVAR_MYSQL_USER], charsmax(g_iStringCvar[]));
get_cvar_string("ils_mysql_password", g_iStringCvar[CVAR_MYSQL_PASS], charsmax(g_iStringCvar[]));
get_cvar_string("ils_menu_flags", g_iStringCvar[CVAR_MENU_FLAGS], charsmax(g_iStringCvar[]));
get_cvar_string("ils_admin_flags", g_iStringCvar[CVAR_ADMIN_FLAGS], charsmax(g_iStringCvar[]));
get_cvar_string("ils_info_color", g_iStringCvar[CVAR_INFO_COLOR], charsmax(g_iStringCvar[]));
get_cvar_string("ils_info_target_color", g_iStringCvar[CVAR_INFO_TRAGET_COLOR], charsmax(g_iStringCvar[]));
GetColorInformer(g_iNumCvar[CVAR_INFO_COLOR_R], g_iNumCvar[CVAR_INFO_COLOR_G], g_iNumCvar[CVAR_INFO_COLOR_B], true);
GetColorInformer(g_iNumCvar[CVAR_INFO_TARGET_COLOR_R], g_iNumCvar[CVAR_INFO_TARGET_COLOR_G], g_iNumCvar[CVAR_INFO_TARGET_COLOR_B], false);
}
public loading_bd()
{
if(g_iNumCvar[CVAR_SAVE_TYPE] == 2)
{
new iErr, szEror[256];
g_SQL_Tuple = SQL_MakeDbTuple(g_iStringCvar[CVAR_MYSQL_HOST], g_iStringCvar[CVAR_MYSQL_USER], g_iStringCvar[CVAR_MYSQL_PASS], g_iStringCvar[CVAR_MYSQL_BD]);
g_SQL_Connection = SQL_Connect(g_SQL_Tuple, iErr, szEror, charsmax(szEror));
if(g_SQL_Connection)
{
log_amx("[Ideal Level System] Conected to DataBase: OK");
SQL_QueryAndIgnore(g_SQL_Connection, "CREATE TABLE IF NOT EXISTS `ils_levels` (`id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(64) NOT NULL DEFAULT '0',`exp` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`)) DEFAULT CHARSET=utf8");
}
else log_amx("[Ideal Level System] Conected to DataBase: ERROR %d (%s)", iErr, szEror);
}
else if(g_iNumCvar[CVAR_SAVE_TYPE] == 3) g_Vault = nvault_open("ils_levels");
}
public GetColorInformer(&iRed, &iGreen, &iBlue, bool:iMode)
{
new szRed[5], szGreen[5], szBlue[5];
if(iMode) parse(g_iStringCvar[CVAR_INFO_COLOR], szRed, charsmax(szRed), szGreen, charsmax(szGreen), szBlue, charsmax(szBlue));
else parse(g_iStringCvar[CVAR_INFO_TRAGET_COLOR], szRed, charsmax(szRed), szGreen, charsmax(szGreen), szBlue, charsmax(szBlue));
iRed = str_to_num(szRed);
iGreen = str_to_num(szGreen);
iBlue = str_to_num(szBlue);
}
public Ham_PlayerKilled_Post(iVictim, iKiller)
{
if(!is_user_valid(iKiller) || !is_user_connected(iKiller) || !is_user_connected(iVictim) || iKiller == iVictim ||
g_iUserExp[iKiller] >= g_iMaxExp || g_iNumCvar[CVAR_MODE_TYPE] != 1) return HAM_IGNORED;
{
if(get_user_weapon(iKiller) == CSW_KNIFE)
{
if(CheckFlag(iKiller, CVAR_ADMIN_FLAGS)) g_iUserExp[iKiller] += g_iNumCvar[CVAR_ADMIN_KILLED_KNIFE_EXP];
else g_iUserExp[iKiller] += g_iNumCvar[CVAR_KILLED_KNIFE_EXP];
}
else if(get_pdata_int(iVictim, m_LastHitGroup, linux_diff_player) == HIT_HEAD)
{
if(CheckFlag(iKiller, CVAR_ADMIN_FLAGS)) g_iUserExp[iKiller] += g_iNumCvar[CVAR_ADMIN_KILLED_HEAD_EXP];
else g_iUserExp[iKiller] += g_iNumCvar[CVAR_KILLED_HEAD_EXP];
}
else
{
if(CheckFlag(iKiller, CVAR_ADMIN_FLAGS)) g_iUserExp[iKiller] += g_iNumCvar[CVAR_ADMIN_KILLED_EXP];
else g_iUserExp[iKiller] += g_iNumCvar[CVAR_KILLED_EXP];
}
if(g_iUserExp[iKiller] > g_iMaxExp) g_iUserExp[iKiller] = g_iMaxExp;
while(g_iUserExp[iKiller] >= ArrayGetCell(g_aDataMaxLevels, g_iUserLevel[iKiller]) && g_iUserLevel[iKiller] < g_iMaxLevels) g_iUserLevel[iKiller] += 1;
}
return HAM_IGNORED;
}
public Ham_TraceAttack_Player(iVictim, iAttacker, Float:fDamage, Float:fDeriction[3], iTraceHandle, iBitDamage)
{
if(!is_user_connected(iAttacker) || iAttacker == iVictim || g_iNumCvar[CVAR_MODE_TYPE] != 3 || g_iUserExp[iAttacker] >= g_iMaxExp) return HAM_IGNORED;
g_iUserDamage[iAttacker] += floatround(fDamage);
while(g_iUserDamage[iAttacker] >= g_iNumCvar[CVAR_MODE_DAMAGE])
{
if(CheckFlag(iAttacker, CVAR_ADMIN_FLAGS)) g_iUserExp[iAttacker] += g_iNumCvar[CVAR_ADMIN_DAMAGE_EXP];
else g_iUserExp[iAttacker] += g_iNumCvar[CVAR_DAMAGE_EXP];
g_iUserDamage[iAttacker] -= g_iNumCvar[CVAR_MODE_DAMAGE];
}
if(g_iUserExp[iAttacker] > g_iMaxExp) g_iUserExp[iAttacker] = g_iMaxExp;
while(g_iUserExp[iAttacker] >= ArrayGetCell(g_aDataMaxLevels, g_iUserLevel[iAttacker]) && g_iUserLevel[iAttacker] <= g_iMaxLevels) g_iUserLevel[iAttacker] += 1;
return HAM_IGNORED;
}
public Task_Informer(id)
{
id -= TASK_INFORMER;
set_hudmessage(g_iNumCvar[CVAR_INFO_COLOR_R], g_iNumCvar[CVAR_INFO_COLOR_G], g_iNumCvar[CVAR_INFO_COLOR_B], g_iFloatCvar[CVAR_INFO_COORD_X],
g_iFloatCvar[CVAR_INFO_COORD_Y], 0, 0.1, 1.0, 0.02, 0.02, -1);
ShowSyncHudMsg(id, g_iSyncInformer, "%L", id, "ILS_INFORMER", g_iUserLevel[id], g_iUserExp[id], ArrayGetCell(g_aDataMaxLevels, g_iUserLevel[id]));
}
public Event_StatusValueHide(id) ClearSyncHud(id, g_iSyncStatusText);
public Event_StatusValueShow(id)
{
if(g_iNumCvar[CVAR_INFORMER_TARGET])
{
new iTarget = read_data(2), szName[32];
get_user_name(iTarget, szName, charsmax(szName));
set_hudmessage(g_iNumCvar[CVAR_INFO_TARGET_COLOR_R], g_iNumCvar[CVAR_INFO_TARGET_COLOR_G], g_iNumCvar[CVAR_INFO_TARGET_COLOR_B],
g_iFloatCvar[CVAR_INFO_TARGET_COORD_X], g_iFloatCvar[CVAR_INFO_TARGET_COORD_Y], 0, 0.0, 10.0, 0.0, 0.0, -1);
ShowSyncHudMsg(id, g_iSyncStatusText, "%L", id, "ILS_HUD_STATUS_TEXT", szName, g_iUserLevel[iTarget], g_iUserExp[iTarget],
ArrayGetCell(g_aDataMaxLevels, g_iUserLevel[iTarget]));
}
}
public Task_GiveExp(id)
{
id -= TASK_GIVEEXP;
if(is_user_connected(id))
{
if(g_iUserExp[id] < g_iMaxExp)
{
if(CheckFlag(id, CVAR_ADMIN_FLAGS)) g_iUserExp[id] += g_iNumCvar[CVAR_ADMIN_TIME_EXP];
else g_iUserExp[id] += g_iNumCvar[CVAR_TIME_EXP];
if(g_iUserExp[id] > g_iMaxExp) g_iUserExp[id] = g_iMaxExp;
while(g_iUserExp[id] >= ArrayGetCell(g_aDataMaxLevels, g_iUserLevel[id]) && g_iUserLevel[id] < g_iMaxLevels) g_iUserLevel[id] += 1;
}
}
}
public ClCmd_GiveNum(id, iTarget, iNum)
{
if(!CheckFlag(id, CVAR_MENU_FLAGS)) return PLUGIN_HANDLED;
if(!iTarget)
{
new szArg1[5], szArg2[5];
read_argv(1, szArg1, charsmax(szArg1));
read_argv(2, szArg2, charsmax(szArg2));
if(!is_str_num(szArg1) || !is_str_num(szArg2))
{
UTIL_SayText(id, "%L", id, "ILS_CHAT_ADMIN_EROR");
return PLUGIN_HANDLED;
}
iTarget = str_to_num(szArg1);
iNum = str_to_num(szArg2);
}
if(iNum <= 0 || !is_user_connected(iTarget))
{
UTIL_SayText(id, "%L", id, "ILS_CHAT_ADMIN_EROR");
return PLUGIN_HANDLED;
}
new szName[32], szTargetName[32];
get_user_name(id, szName, charsmax(szName));
get_user_name(iTarget, szTargetName, charsmax(szTargetName));
switch(g_iUserAdminMenu[id])
{
case 1:
{
if(g_iUserExp[iTarget] + iNum > g_iMaxExp)
{
UTIL_SayText(id, "%L", id, "ILS_CHAT_ADMIN_EROR");
return Show_PlayerGive(id, g_iMenuPosition[id]);
}
else
{
UTIL_SayText(0, "%L", LANG_PLAYER, "ILS_CHAT_GIVE_EXP", szName, szTargetName, iNum);
g_iUserExp[iTarget] += iNum;
while(g_iUserExp[iTarget] >= ArrayGetCell(g_aDataMaxLevels, g_iUserLevel[iTarget]) && g_iUserLevel[iTarget] < g_iMaxLevels) g_iUserLevel[iTarget] += 1;
}
}
case 2:
{
if(g_iUserExp[iTarget] - iNum < 0)
{
UTIL_SayText(id, "%L", id, "ILS_CHAT_ADMIN_EROR");
return Show_PlayerGive(id, g_iMenuPosition[id]);
}
else
{
UTIL_SayText(0, "%L", LANG_PLAYER, "ILS_CHAT_SELECT_EXP", szName, szTargetName, iNum);
g_iUserExp[iTarget] -= iNum;
while(g_iUserExp[iTarget] < ArrayGetCell(g_aDataMaxLevels, g_iUserLevel[iTarget] - 1) && g_iUserLevel[iTarget] != 0) g_iUserLevel[iTarget] -= 1;
}
}
case 3:
{
if(g_iUserLevel[iTarget] + iNum > g_iMaxLevels)
{
UTIL_SayText(id, "%L", id, "ILS_CHAT_ADMIN_EROR");
return Show_PlayerGive(id, g_iMenuPosition[id]);
}
else
{
UTIL_SayText(0, "%L", LANG_PLAYER, "ILS_CHAT_GIVE_LEVEL", szName, szTargetName, iNum);
g_iUserLevel[iTarget] += iNum;
while(g_iUserExp[iTarget] < ArrayGetCell(g_aDataMaxLevels, g_iUserLevel[iTarget] - 1)) g_iUserExp[iTarget] += 1;
while(g_iUserExp[iTarget] >= ArrayGetCell(g_aDataMaxLevels, g_iUserLevel[iTarget]) && g_iUserLevel[iTarget] < g_iMaxLevels) g_iUserLevel[iTarget] += 1;
}
}
case 4:
{
new iSum = g_iUserLevel[iTarget] - iNum;
if(iSum < 0)
{
UTIL_SayText(id, "%L", id, "ILS_CHAT_ADMIN_EROR");
return Show_PlayerGive(id, g_iMenuPosition[id]);
}
else
{
if(!iSum) iNum -= 1;
UTIL_SayText(0, "%L", LANG_PLAYER, "ILS_CHAT_SELECT_LEVEL", szName, szTargetName, iNum);
g_iUserLevel[iTarget] -= iNum;
while(g_iUserExp[iTarget] > ArrayGetCell(g_aDataMaxLevels, g_iUserLevel[iTarget] - 1)) g_iUserExp[iTarget] -= 1;
while(g_iUserExp[iTarget] >= ArrayGetCell(g_aDataMaxLevels, g_iUserLevel[iTarget]) && g_iUserLevel[iTarget] < g_iMaxLevels) g_iUserLevel[iTarget] += 1;
}
}
}
return PLUGIN_HANDLED;
}
public Show_GiveAdminMenu(id)
{
if(!CheckFlag(id, CVAR_MENU_FLAGS)) return PLUGIN_HANDLED;
new szMenu[512], iLen = formatex(szMenu, charsmax(szMenu), "\y%L^n^n", id, "ILS_MENU_TITLE");
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L \w%L^n", id, "ILS_MENU_SLOT_1", id, "ILS_MENU_GIVE_EXP");
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L \w%L^n", id, "ILS_MENU_SLOT_2", id, "ILS_MENU_SELECT_EXP");
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L \w%L^n", id, "ILS_MENU_SLOT_3", id, "ILS_MENU_GIVE_LEVEL");
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L \w%L^n", id, "ILS_MENU_SLOT_4", id, "ILS_MENU_SELECT_LEVEL");
formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\y[\r0\y] \w%L", id, "ILS_MENU_EXIT");
return show_menu(id, ((1<<0|1<<1|1<<2|1<<3|1<<9)), szMenu, -1, "Show_GiveAdminMenu");
}
public Handle_GiveAdminMenu(id, iKey)
{
if(!CheckFlag(id, CVAR_MENU_FLAGS)) return PLUGIN_HANDLED;
if(iKey != 9)
{
g_iUserAdminMenu[id] = iKey + 1;
Show_PlayerGive(id, g_iMenuPosition[id] = 0);
}
return PLUGIN_HANDLED;
}
public Show_PlayerGive(id, iPos)
{
if(iPos < 0 || !CheckFlag(id, CVAR_MENU_FLAGS)) return PLUGIN_HANDLED;
new iPlayersNum;
for(new i = 1; i <= g_iMaxPlayers; i++)
{
if(!is_user_connected(i)) continue;
g_iMenuPlayers[id][iPlayersNum++] = i;
}
new iStart = iPos * PLAYERS_PER_PAGE;
if(iStart > iPlayersNum) iStart = iPlayersNum;
iStart = iStart - (iStart % 8);
g_iMenuPosition[id] = iStart / PLAYERS_PER_PAGE;
new iEnd = iStart + PLAYERS_PER_PAGE;
if(iEnd > iPlayersNum) iEnd = iPlayersNum;
new szMenu[512], iLen, iPagesNum = (iPlayersNum / PLAYERS_PER_PAGE + ((iPlayersNum % PLAYERS_PER_PAGE) ? 1 : 0));
switch(iPagesNum)
{
case 0:
{
UTIL_SayText(id, "%L", id, "ILS_CHAT_ID_PLAYERS_NOT_VALID");
return Show_GiveAdminMenu(id);
}
default: iLen = formatex(szMenu, charsmax(szMenu), "\y%L \w[%d|%d]^n^n", id, g_iMenuStatus[g_iUserAdminMenu[id]], iPos + 1, iPagesNum);
}
new szName[32], i, iKeys = (1<<9), b;
for(new a = iStart; a < iEnd; a++)
{
i = g_iMenuPlayers[id][a];
get_user_name(i, szName, charsmax(szName));
iKeys |= (1<<b);
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%L \w%s \r[%d]^n", id, "ILS_MENU_SLOT_D", ++b, szName, g_iUserAdminMenu[id] <= 2 ? g_iUserExp[i] : g_iUserLevel[i]);
}
for(new i = b; i < PLAYERS_PER_PAGE; i++) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n");
if(iEnd < iPlayersNum)
{
iKeys |= (1<<8);
formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n%L \w%L^n%L \w%L", id, "ILS_MENU_SLOT_0", id, "ILS_MENU_NEXT", id, "ILS_MENU_SLOT_9",
id, iPos ? "ILS_MENU_BACK" : "ILS_MENU_EXIT");
}
else formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n%L \w%L", id, "ILS_MENU_SLOT_0", id, iPos ? "ILS_MENU_BACK" : "ILS_MENU_EXIT");
return show_menu(id, iKeys, szMenu, -1, "Show_PlayerGive");
}
public Handle_PlayerGive(id, iKey)
{
if(!CheckFlag(id, CVAR_MENU_FLAGS)) return PLUGIN_HANDLED;
switch(iKey)
{
case 8: return Show_PlayerGive(id, ++g_iMenuPosition[id]);
case 9: return Show_PlayerGive(id, --g_iMenuPosition[id]);
default:
{
new iTarget = g_iMenuPlayers[id][g_iMenuPosition[id] * PLAYERS_PER_PAGE + iKey];
if(!is_user_connected(iTarget)) return Show_PlayerGive(id, g_iMenuPosition[id]);
g_iMenuTarget[id] = iTarget;
return Show_NumGiveAdminMenu(id);
}
}
return Show_PlayerGive(id, g_iMenuPosition[id]);
}
public Show_NumGiveAdminMenu(id)
{
if(!CheckFlag(id, CVAR_MENU_FLAGS)) return PLUGIN_HANDLED;
if(!g_iMenuTarget[id]) return Show_PlayerGive(id, g_iMenuPosition[id]);
new szMenu[512], szBuffer[32], iKeys = (1<<6|1<<9), iKey,
iLen = formatex(szMenu, charsmax(szMenu), "\y%L^n^n", id, g_iGiveStatus[g_iUserAdminMenu[id]]), iCheck;
for(new i = 1; i < 7; i++)
{
iKey = i - 1;
formatex(szBuffer, charsmax(szBuffer), "ILS_MENU_SLOT_%d", i);
switch(g_iUserAdminMenu[id])
{
case 1:
{
iCheck = floatround((g_iMaxExp - g_iUserExp[g_iMenuTarget[id]]) * g_szFactor[i]);
if(iCheck < i) iCheck = i;
if(iCheck + g_iUserExp[g_iMenuTarget[id]] <= g_iMaxExp)
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L \w%d^n", id, szBuffer, iCheck);
iKeys |= (1<<iKey);
}
else if(i == 1) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L \w0^n", id, szBuffer);
else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n");
}
case 2:
{
iCheck = floatround(g_iUserExp[g_iMenuTarget[id]] * g_szFactor[i]);
if(iCheck < i) iCheck = i;
if(g_iUserExp[g_iMenuTarget[id]] - iCheck >= 0)
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L \w%d^n", id, szBuffer, iCheck);
iKeys |= (1<<iKey);
}
else if(i == 1) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L \w0^n", id, szBuffer);
else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n");
}
case 3:
{
iCheck = floatround((g_iMaxLevels - g_iUserLevel[g_iMenuTarget[id]]) * g_szFactor[i]);
if(iCheck < i) iCheck = i;
if(g_iUserLevel[g_iMenuTarget[id]] + iCheck <= g_iMaxLevels)
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L \w%d^n", id, szBuffer, iCheck);
iKeys |= (1<<iKey);
}
else if(i == 1) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L \w0^n", id, szBuffer);
else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n");
}
case 4:
{
iCheck = floatround((g_iUserLevel[g_iMenuTarget[id]] - 1) * g_szFactor[i]);
if(iCheck < i) iCheck = i;
if(g_iUserLevel[g_iMenuTarget[id]] - iCheck > 0)
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L \w%d^n", id, szBuffer, iCheck);
iKeys |= (1<<iKey);
}
else if(i == 1) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L \w0^n", id, szBuffer);
else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n");
}
}
}
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L \y%L^n^n^n", id, "ILS_MENU_SLOT_7", id, "ILS_MENU_OTHER");
formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n%L \w%L", id, "ILS_MENU_SLOT_0", id, "ILS_MENU_EXIT");
return show_menu(id, iKeys, szMenu, -1, "Show_NumGiveAdminMenu");
}
public Handle_NumGiveAdminMenu(id, iKey)
{
if(!CheckFlag(id, CVAR_MENU_FLAGS)) return PLUGIN_HANDLED;
if(!g_iMenuTarget[id]) return Show_PlayerGive(id, g_iMenuPosition[id] = 0);
new iCheck;
switch(iKey)
{
case 5:
{
switch(g_iUserAdminMenu[id])
{
case 1: iCheck = g_iMaxExp - g_iUserExp[g_iMenuTarget[id]];
case 2: iCheck = g_iUserExp[g_iMenuTarget[id]];
case 3: iCheck = g_iMaxLevels - g_iUserLevel[g_iMenuTarget[id]];
case 4: iCheck = g_iUserLevel[g_iMenuTarget[id]] - 1;
}
}
case 6:
{
client_cmd(id, "messagemode ^"ils_give %d^"", g_iMenuTarget[id]);
return PLUGIN_HANDLED;
}
case 9: return PLUGIN_HANDLED;
}
if(iKey != 5)
{
switch(g_iUserAdminMenu[id])
{
case 1:
{
iCheck = floatround((g_iMaxExp - g_iUserExp[g_iMenuTarget[id]]) * g_szFactor[iKey+1]);
if(iCheck < iKey+1) iCheck = iKey+1;
if(iCheck + g_iUserExp[g_iMenuTarget[id]] > g_iMaxExp) return PLUGIN_HANDLED;
}
case 2:
{
iCheck = floatround(g_iUserExp[g_iMenuTarget[id]] * g_szFactor[iKey+1]);
if(iCheck < iKey+1) iCheck = iKey+1;
if(g_iUserExp[g_iMenuTarget[id]] - iCheck < 0) return PLUGIN_HANDLED;
}
case 3:
{
iCheck = floatround((g_iMaxLevels - g_iUserLevel[g_iMenuTarget[id]]) * g_szFactor[iKey+1]);
if(iCheck < iKey+1) iCheck = iKey+1;
if(g_iUserLevel[g_iMenuTarget[id]] + iCheck > g_iMaxLevels) return PLUGIN_HANDLED;
}
case 4:
{
iCheck = floatround((g_iUserLevel[g_iMenuTarget[id]] - 1) * g_szFactor[iKey+1]);
if(iCheck < iKey+1) iCheck = iKey+1;
if(g_iUserLevel[g_iMenuTarget[id]] - iCheck <= 0) return PLUGIN_HANDLED;
}
}
}
return ClCmd_GiveNum(id, g_iMenuTarget[id], iCheck);
}
public Loading_Level(id)
{
new szAuthid[35];
switch(g_iNumCvar[CVAR_SAVE_TYPE])
{
case 1:
{
if(g_iNumCvar[CVAR_PLAYER_TYPE] == 1) get_user_name(id, szAuthid, charsmax(szAuthid));
else get_user_authid(id, szAuthid, charsmax(szAuthid));
for(new i = 0; i < g_PlayerSumLine; i++)
{
new aDataPlayerInfo[DATA_PLAYER_INFO];
ArrayGetArray(g_aDataInfoPlayer, i, aDataPlayerInfo);
if(equali(szAuthid, aDataPlayerInfo[LANG_PLAYERAUTCH]))
{
g_iUserExp[id] = aDataPlayerInfo[MODE_PLAYEREXP];
g_iUserLoadingLevel[id] = i;
break;
}
}
if(g_iUserExp[id] > g_iMaxExp) g_iUserExp[id] = g_iMaxExp;
while(g_iUserExp[id] >= ArrayGetCell(g_aDataMaxLevels, g_iUserLevel[id]) && g_iUserLevel[id] < g_iMaxLevels) g_iUserLevel[id] += 1;
}
case 2:
{
new szData[2], szQuery[512], szQuoted[64];
szData[0] = id;
szData[1] = get_user_userid(id);
if(g_iNumCvar[CVAR_PLAYER_TYPE] == 1) get_user_name(id, szAuthid, charsmax(szAuthid));
else get_user_authid(id, szAuthid, charsmax(szAuthid));
SQL_QuoteString(g_SQL_Connection, szQuoted, 63, szAuthid);
formatex(szQuery, charsmax(szQuery), "SELECT `exp` FROM `ils_levels` WHERE `name` = '%s'", szQuoted);
SQL_ThreadQuery(g_SQL_Tuple, "LoginHandler", szQuery, szData, 2);
}
case 3:
{
new szData[256], iTimeStamp, szExp[5];
if(g_iNumCvar[CVAR_PLAYER_TYPE] == 1) get_user_name(id, szAuthid, charsmax(szAuthid));
else get_user_authid(id, szAuthid, charsmax(szAuthid));
if(nvault_lookup(g_Vault, szAuthid, szData, charsmax(szData), iTimeStamp) )
{
replace_all(szData, charsmax(szData), "|"," ");
parse(szData, szExp, charsmax(szExp));
g_iUserExp[id] = str_to_num(szExp);
if(g_iUserExp[id] > g_iMaxExp) g_iUserExp[id] = g_iMaxExp;
while(g_iUserExp[id] >= ArrayGetCell(g_aDataMaxLevels, g_iUserLevel[id]) && g_iUserLevel[id] < g_iMaxLevels) g_iUserLevel[id] += 1;
}
}
}
}
public LoginHandler(failState, Handle:szQuery, szError[], iErr, szData[], size, Float:queryTime)
{
if(failState != TQUERY_SUCCESS)
{
log_amx("[LEVEL_System] Query error %d, %s", iErr, szError)
return
}
new id = szData[0];
if(get_user_userid(id) != szData[1]) return;
if(SQL_NumResults(szQuery)) g_iUserExp[id] = SQL_ReadResult(szQuery, SQL_FieldNameToNum(szQuery, "exp"));
if(g_iUserExp[id] > g_iMaxExp) g_iUserExp[id] = g_iMaxExp;
while(g_iUserExp[id] >= ArrayGetCell(g_aDataMaxLevels, g_iUserLevel[id]) && g_iUserLevel[id] < g_iMaxLevels) g_iUserLevel[id] += 1;
}
public Save_Levels(id)
{
if(g_iUserExp[id] > 0)
{
new szAuthid[35];
switch(g_iNumCvar[CVAR_SAVE_TYPE])
{
case 1:
{
new szCfgDir[64], szCfgFile[128], szBuffer[128], aDataPlayerInfo[DATA_PLAYER_INFO];
if(g_iNumCvar[CVAR_PLAYER_TYPE] == 1) get_user_name(id, szAuthid, charsmax(szAuthid));
else get_user_authid(id, szAuthid, charsmax(szAuthid));
get_localinfo("amxx_configsdir", szCfgDir, charsmax(szCfgDir));
formatex(szCfgFile, charsmax(szCfgFile), "%s/IdealLevelSystem.ini", szCfgDir);
formatex(szBuffer, charsmax(szBuffer), "^"%s^" ^"%d^"", szAuthid, g_iUserExp[id]);
if(g_iUserLoadingLevel[id])
{
ArrayGetArray(g_aDataInfoPlayer, g_iUserLoadingLevel[id], aDataPlayerInfo);
if(equali(szAuthid, aDataPlayerInfo[LANG_PLAYERAUTCH]))
{
aDataPlayerInfo[MODE_PLAYEREXP] = g_iUserExp[id];
ArraySetArray(g_aDataInfoPlayer, g_iUserLoadingLevel[id], aDataPlayerInfo);
write_file(szCfgFile, szBuffer, g_iUserLoadingLevel[id]);
g_iUserLoadingLevel[id] = 0;
}
}
else
{
formatex(aDataPlayerInfo[LANG_PLAYERAUTCH], aDataPlayerInfo[LANG_PLAYERAUTCH], szAuthid);
aDataPlayerInfo[MODE_PLAYEREXP] = g_iUserExp[id];
ArrayPushArray(g_aDataInfoPlayer, aDataPlayerInfo);
write_file(szCfgFile, szBuffer, -1);
g_PlayerSumLine++;
}
}
case 2:
{
new szQuery[512], szQuoted[64];
if(g_iNumCvar[CVAR_PLAYER_TYPE] == 1) get_user_name(id, szAuthid, charsmax(szAuthid));
else get_user_authid(id, szAuthid, charsmax(szAuthid));
SQL_QuoteString(g_SQL_Connection, szQuoted, charsmax(szQuoted), szAuthid);
formatex(szQuery, charsmax(szQuery), "INSERT INTO `ils_levels` (`name`, `exp`) VALUES('%s', %i) ON DUPLICATE KEY UPDATE `exp` = VALUES(`exp`)",
szQuoted, g_iUserExp[id]);
SQL_QueryAndIgnore(g_SQL_Connection, szQuery);
}
case 3:
{
new szData[256];
if(g_iNumCvar[CVAR_PLAYER_TYPE] == 1) get_user_name(id, szAuthid, charsmax(szAuthid));
else get_user_authid(id, szAuthid, charsmax(szAuthid));
formatex(szData, charsmax(szData), "|%i|", g_iUserExp[id]);
nvault_set(g_Vault, szAuthid, szData);
}
}
}
g_iUserExp[id] = 0;
g_iUserLevel[id] = 0;
}
public native_get_user_exp(id) return g_iUserExp[id];
public native_set_user_exp(id, amount) g_iUserExp[id] = amount;
public native_get_user_level(id) return g_iUserLevel[id];
public native_set_user_level(id, amount) g_iUserLevel[id] = amount;
public naive_get_user_maxexp(id) return ArrayGetCell(g_aDataMaxLevels, g_iUserLevel[id]);
stock CheckFlag(id, iType)
{
new szFlags[32], iFlags = get_user_flags(id);
get_flags(iFlags, szFlags, charsmax(szFlags));
if(containi(szFlags, g_iStringCvar[iType]) != -1) return true;
return false;
}
stock UTIL_SayText(pPlayer, const szMessage[], any:...)
{
new szBuffer[190];
if(numargs() > 2) vformat(szBuffer, charsmax(szBuffer), szMessage, 3);
else copy(szBuffer, charsmax(szBuffer), szMessage);
while(replace(szBuffer, charsmax(szBuffer), "!y", "^1")) {}
while(replace(szBuffer, charsmax(szBuffer), "!t", "^3")) {}
while(replace(szBuffer, charsmax(szBuffer), "!g", "^4")) {}
switch(pPlayer)
{
case 0:
{
for(new iPlayer = 1; iPlayer <= g_iMaxPlayers; iPlayer++)
{
if(!is_user_connected(iPlayer)) continue;
engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, MsgId_SayText, {0.0, 0.0, 0.0}, iPlayer);
write_byte(iPlayer);
write_string(szBuffer);
message_end();
}
}
default:
{
engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, MsgId_SayText, {0.0, 0.0, 0.0}, pPlayer);
write_byte(pPlayer);
write_string(szBuffer);
message_end();
}
}
}
Исходник вип меню
- Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#include <fun>
#include <zombieplague>
new g_item1[33], g_item2[33], g_item3[33], g_item4[33], g_item5[33], g_item6[33], g_item7[33], g_exp_count[33]
native balrog_ak47(id)
native balrog7(id)
native ils_get_user_exp(id)
native ils_set_user_exp(id, set)
const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0
public plugin_init()
{
register_plugin ("[ZP] Boss menu", "1.1" , "BuB9neC" )
register_menu("X Menu", KEYSMENU, "menu_main")
register_clcmd("/vip_menu", "vip_menu")
register_logevent("fw_new_round", 2, "1=Round_Start")
}
public vip_menu(id)
{
static menu[512], userflags
new len
userflags = get_user_flags(id)
if(userflags & ADMIN_RESERVATION)
{
len += formatex( menu[ len ] , charsmax( menu ) - len , "\r[ZP] \wМеню \r[\yВип\r]^n^n" )
if(g_item1[id] == 0)
len += formatex(menu[len] , charsmax(menu) - len , "\r[\w1\r] \wВзять \y[+75 Брони]^n" )
else len += formatex(menu[len] , charsmax(menu) - len , "\d[1] Взять [+75 Брони]^n" )
if(g_item2[id] == 0)
len += formatex(menu[len] , charsmax(menu) - len , "\r[\w2\r] \wВзять \y[+75 ХП]^n" )
else len += formatex(menu[len] , charsmax(menu) - len , "\d[2] Взять [+75 ХП]^n" )
if(g_item3[id] == 0)
len += formatex(menu[len] , charsmax(menu) - len , "\r[\w3\r] \wВзять \y[+25 Аммо]^n^n" )
else len += formatex(menu[len] , charsmax(menu) - len , "\d[3] Взять [+25 Аммо]^n^n" )
if(g_item4[id] == 0)
len += formatex(menu[len] , charsmax(menu) - len , "\r[\w4\r] \wВзять \y[A] \rAK-47 Balrog^n" )
else len += formatex(menu[len] , charsmax(menu) - len , "\d[4] Взять [A] AK-47 Balrog^n" )
if(g_item5[id] == 0)
len += formatex(menu[len] , charsmax(menu) - len , "\r[\w5\r] \wВзять \y[A] \rBalrog-7^n" )
else len += formatex(menu[len] , charsmax(menu) - len , "\d[5] Взять [A] Balrog-7^n" )
if(g_exp_count[id]>=60)
len += formatex(menu[len], charsmax(menu) - len, "\d[6] Взять [+15 Опыт]^n")
else len += formatex(menu[len], charsmax(menu) - len, "\r[\w6\r] \wВзять \y[+15 Опыт]^n", g_exp_count[id])
len += formatex(menu[len] , charsmax(menu) - len , "^n\r[\w0\r] Выход" )
}
else
{
len += formatex( menu[ len ] , charsmax( menu ) - len , "\r[ZP] \wМеню \r[\yВип\r]^n^n" )
len += formatex(menu[len] , charsmax(menu) - len , "\d[1] Взять [+75 Брони]^n" )
len += formatex(menu[len] , charsmax(menu) - len , "\d[2] Взять [+75 ХП]^n" )
len += formatex(menu[len] , charsmax(menu) - len , "\d[3] Взять [+50 Аммо]^n" )
len += formatex(menu[len] , charsmax(menu) - len , "\d[4] Взять [A] AK-47 Balrog^n" )
len += formatex(menu[len] , charsmax(menu) - len , "\d[5] Взять [A] Balrog-7^n" )
len += formatex(menu[len] , charsmax(menu) - len , "\d[6] Взять [+15 Опыт]^n" )
len += formatex(menu[len] , charsmax(menu) - len , "^n\r[0]\w Выход" )
len += formatex(menu[len] , charsmax(menu) - len,"^n\yВы не \rВип\y игрок!")
}
set_pdata_int(id , 205 , 0 )
show_menu(id, KEYSMENU , menu , -1 , "X Menu" )
}
public menu_main(id,key)
{
if (!is_user_connected(id))
return PLUGIN_HANDLED;
static userflags
userflags = get_user_flags(id)
if(!(userflags & ADMIN_RESERVATION))
{
ChatColor(id, "!g«Зомби-Подростки®» !yУ Вас \rнет прав \teamВип! \wПокупка !g[В]к: vk.com/zm_podrostki")
return 1
}
else if(!is_user_alive(id))
{
ChatColor(id, "!g«Зомби-Подростки®»!y Недоступно для мертвых.")
return 1
}
switch (key)
{
case 0:
{
if(!is_user_connected(id))
return PLUGIN_HANDLED;
else if(zp_get_user_zombie(id) || zp_get_user_survivor(id))
{
ChatColor(id, "!g«Зомби-Подростки®»!y Доступно только !tЛюдям!y.")
return PLUGIN_HANDLED;
}
else if(g_item1[id] == 0)
{
g_item1[id] = 1;
set_pev(id, pev_armorvalue, pev(id, pev_armorvalue) + 75.0);
vip_menu(id)
}
else
{
ChatColor(id, "!g«Зомби-Подростки®»!y Можно брать только раз за раунд.");
return PLUGIN_HANDLED;
}
}
case 1:
{
if(!is_user_connected(id))
return PLUGIN_HANDLED;
else if(zp_get_user_zombie(id) || zp_get_user_survivor(id))
{
ChatColor(id, "!g«Зомби-Подростки®»!y Доступно только !tЛюдям!y.")
return PLUGIN_HANDLED;
}
else if(g_item2[id] == 0)
{
g_item2[id] = 1;
set_pev(id, pev_health, pev(id, pev_health) + 75.0);
vip_menu(id)
}
else
{
ChatColor(id, "!g«Зомби-Подростки®»!y Можно брать только раз за раунд.");
return PLUGIN_HANDLED;
}
}
case 2:
{
if(!is_user_connected(id))
return PLUGIN_HANDLED;
else if(zp_get_user_zombie(id) || zp_get_user_survivor(id))
{
ChatColor(id, "!g«Зомби-Подростки®»!y Доступно только !tЛюдям!y.")
return PLUGIN_HANDLED;
}
else if(g_item3[id] == 0)
{
g_item3[id]
zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + 50);
vip_menu(id)
}
else
{
ChatColor(id, "!g«Зомби-Подростки®»!y Можно брать только раз за раунд.");
return PLUGIN_HANDLED;
}
}
case 3:
{
if(!is_user_connected(id))
return PLUGIN_HANDLED;
else if(zp_get_user_zombie(id) || zp_get_user_survivor(id))
{
ChatColor(id, "!g«Зомби-Подростки®»!y Доступно только !tЛюдям!y.")
return PLUGIN_HANDLED;
}
else if(g_item4[id] == 0)
{
g_item4[id] = 1;
balrog_ak47(id);
}
else
{
ChatColor(id, "!g«Зомби-Подростки®»!y Можно брать только раз за раунд.");
return PLUGIN_HANDLED;
}
}
case 4:
{
if(!is_user_connected(id))
return PLUGIN_HANDLED;
else if(zp_get_user_zombie(id) || zp_get_user_survivor(id))
{
ChatColor(id, "!g«Зомби-Подростки®»!y Доступно только !tЛюдям!y.")
return PLUGIN_HANDLED;
}
else if(g_item5[id] == 0)
{
g_item5[id] = 1;
balrog7(id);
}
else
{
ChatColor(id, "!g«Зомби-Подростки®»!y Можно брать только раз за раунд.");
return PLUGIN_HANDLED;
}
}
case 5:
{
if(g_exp_count[id]) {
ChatColor(id, "!g«Зомби-Подростки®» !yМожно брать только раз за карту.")
vip_menu(id)
return PLUGIN_HANDLED;
}
ils_set_user_exp(id, ils_get_user_exp(id)+15)
ChatColor(id, "!g«Зомби-Подростки®» !yВы взяли опыт")
g_exp_count[id] += 60
vip_menu(id)
}
}
return PLUGIN_HANDLED;
}
public fw_new_round(id)
{
for(new id = 0; id < 33; id++)
{
if(g_item1[id] > 0)
{
g_item1[id] -= 1
}
if(g_item2[id] > 0)
{
g_item2[id] -= 1
}
if(g_item3[id] > 0)
{
g_item3[id] -= 1
}
if(g_item4[id] > 0)
{
g_item4[id] -= 1
}
if(g_item5[id] > 0)
{
g_item5[id] -= 1
}
if(g_item6[id] > 0)
{
g_item6[id] -= 1
}
if(g_item7[id] > 0)
{
g_item7[id] -= 1
}
}
}
stock ChatColor(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)
replace_all(msg, 190, "!g", "^4")
replace_all(msg, 190, "!y", "^1")
replace_all(msg, 190, "!t", "^3")
if (id) players[0] = id; else get_players(players, count, "ch")
{
for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}