Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

19 страниц V  « 15 16 17 18 »

Army Ranks 1.3.1

, от 26.03.13
Safety1st
сообщение 23.12.2013, 14:34
Сообщение #301
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

1500 р. в 5 рук - это мало на самом деле. Все остальное - дело каждого, ставить ли такие штуки.
Еще могу предложить gameME, там никаких плюшек, чисто соревновательный момент.
Того, что вы хотите - что-то действительно интересного, бесплатно быть не может: есть крутая штука в паблике = есть у всех, уникальности 0.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя ReClubMix
сообщение 28.12.2013, 20:27
Сообщение #302
Стаж: 12 лет

Сообщений: 2
Благодарностей: 1
Полезность: 0

Мужики помогите исправить ошибку.
army_ranks 1.3.1 при работе через nvault всё нормально.
но при на стройке на MYSQL работать не хочет.
Вот лог
лог
L 12/28/2013 - 21:11:55: Info (map "de_dust2_2x2") (file "addons/amxmodx/logs/error_20131228.log")
L 12/28/2013 - 21:11:55: [AMXX] Plugin ("army_ranks.amxx") is setting itself as failed.
L 12/28/2013 - 21:11:55: [AMXX] Plugin says: Access denied for user 'root'@'localhost' (using password: YES)
L 12/28/2013 - 21:11:55: [AMXX] Displaying debug trace (plugin "army_ranks.amxx")
L 12/28/2013 - 21:11:55: [AMXX] Run time error 1: forced exit
L 12/28/2013 - 21:11:55: [AMXX] [0] army_ranks.sma::sql_init (line 194)

Из лога я понял что в SQL_Connect приходят неверные параметры, а почему я не знаю.
подключение к дб прописал верно, может ещё что-то забыл?
army_ranks.sma
army_ranks.sma

/*
Обещанного три года ждут ;)
*/
#include <amxmodx>
#include <amxmisc>
#include <colorchat>
#include <fun>
#include <cstrike>
#include <nvault>
#include <sqlx>
#include <fakemeta>
//
#define PLUGIN "Army Ranks"
#define VERSION "1.3.1"
#define AUTHOR "Arctic"
#pragma tabsize 0
#define ADM_MENU ADMIN_IMMUNITY // menu access flag
//
new g_vault;
new Handle:g_SqlTuple;
new g_Error[512];
enum _:PlData
{
gId,gExp,gLevel,gTempKey
};
new UserData[33][PlData];
new gMessage[256];
new g_MsgHud,MaxPlayers,levelUp[33],gSayText,gStatusText
new bool:restr_blocked;
new const gRankNames[][] =
{
"I_0","I_1","I_2","I_3","I_4","I_5","I_6","I_7","I_8","I_9","I_10","I_11","I_12","I_13","I_14",
"I_15","I_16","I_17","I_18","I_19","I_20"
};
new const gLevels[] =
{
0,15,30,60,100,180,350,750,999,1500,2200,2800,3200,3900,4500,5000,5500,6000,7000
,8000
};
new const gNades[][] =
{
{0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1},
{0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1}
}
new const restrict_bonus[][] =
{
"35hp",
"most_wanted",
"ka_wintershank"
};
new gRestrictMaps,gAdminGMsg,gBonusLevel,gFlash,gSmoke,gHe,gHpbylevel,gApbylevel
,gArmyChat,gSaveType,gTableName,gHost,gUser,gPassword,gDbName,gSlash,
gTk,gLostXpTk,gLevelUpmsg,gAllChat,gProgressBar,gBombDefuseXp,gBombPlantXp,gBomb
, gMinPlayers
//
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_cvar("army_ranks",VERSION, FCVAR_SERVER | FCVAR_SPONLY);
set_cvar_string("army_ranks",VERSION);
//
gRestrictMaps = register_cvar( "restrict_maps", "0");// вкл запрет бонусов на карте.
gBonusLevel = register_cvar( "level_bonus", "0");// вкл оружие при получении уровня.
gFlash = register_cvar( "flash_nades", "0");// вкл бонуса флешек
gSmoke = register_cvar( "smoke_nades", "1");// вкл бонуса дымовых
gHe = register_cvar( "he_nades", "1");// вкл бонуса осколочных
gHpbylevel = register_cvar( "hp_by_level", "3");// кол-во хп, которое дается за лвл, если = 0 - то выкл
gApbylevel = register_cvar( "ap_by_level", "5");// кол-во брони, которое дается за лвл, если = 0 - то выкл
gArmyChat = register_cvar( "army_chat", "1");// использовать чат плагина, то есть приставка в чате, цвет сообщ. для админа
gAdminGMsg = register_cvar( "admin_color", "1");// 1 = сообщ.админа зеленое,0 = желтое, 2 = цвета команды
gSaveType = register_cvar( "save_type", "1");// 0 - nvault, 1- mysql.
gSlash = register_cvar( "slash_messages", "1");// не отображать команды со слэшем
gTk = register_cvar( "team_kill_lost_xp", "1");// терять exp при тимкилле
gLostXpTk = register_cvar( "lost_xp_val", "3");// кол-во теряемых exp при тк
gLevelUpmsg = register_cvar( "level_up_msg", "1");// сообщение при лвл-апе игрока : 1- вкл (всем), 2 - только игроку
gAllChat = register_cvar( "all_chat", "0");// 1 - чат для всех(метвые и живые), 0-живые не видят чат мертвых и наоборот
/***/ gProgressBar = register_cvar( "progress_bar_pos", "0");// расположение данных игрока: 0 - hud(под радаром), 1 - под чатом
gMinPlayers = register_cvar( "min_players", "4");// мин.кол-во игроков для получения опыта за действия с бомбой
gBomb = register_cvar( "bomb_xp", "1");// вкл получения опыта над действиями с бомбой
gBombDefuseXp = register_cvar( "bdefuse_xp", "5");// кол-во получаемых exp при разминировании бомбы
gBombPlantXp = register_cvar( "bplant_xp", "4");// кол-во получаемых exp при минировании бомбы
// для mysql
gHost = register_cvar( "mysql_host", "localhost"); // host
gUser = register_cvar( "mysql_user", "reclubmix"); // username
gPassword = register_cvar( "mysql_password", "12345"); // password
gDbName = register_cvar( "mysql_db_name", "test"); // database name
gTableName = register_cvar( "mysql_table_name", "army_ranks"); // название таблицы mysql
//
register_logevent( "EventRoundStart", 2, "1=Round_Start" );
register_forward(FM_Sys_Error, "fw_ServerDown");
register_forward(FM_GameShutdown, "fw_ServerDown");
register_forward(FM_ServerDeactivate, "fw_ServerDown");
register_event( "DeathMsg","EventDeath","a");
if(get_pcvar_num(gProgressBar) != 0){
set_task(1.0,"StatusText",_,_,_, "b");
} else {
set_task(1.0,"Info",_,_,_, "b");
}
//
register_message(get_user_msgid("SayText"), "msg_SayText");
gStatusText = get_user_msgid("StatusText");
gSayText = get_user_msgid ("SayText");
//
g_MsgHud = CreateHudSyncObj();
MaxPlayers = get_maxplayers();
register_dictionary("army.txt" );
//
if(get_pcvar_num(gRestrictMaps))
{
new szMapName[64];
get_mapname(szMapName,63);
for(new a = 0; a < sizeof restrict_bonus; a++)
{
if(equal(szMapName, restrict_bonus[a]))
{
restr_blocked = true;
log_amx("[army ranks] weapon menu is blocked on map [%s].",restrict_bonus[a]);
break;
} else {
restr_blocked = false;
}
}
}
//
switch(get_pcvar_num(gSaveType))
{
case 0:
{
g_vault = nvault_open("army_ranks");
}
case 1:
{
set_task(0.1, "sql_init");
}
default:
{
g_vault = nvault_open("army_ranks");
}
}
//
if(get_pcvar_num(gArmyChat))
{
register_clcmd("say", "hookSay")
register_clcmd("say_team", "hookSayTeam");
}
register_clcmd("add_exp", "add_exp_post")
register_clcmd("amx_setlevel", "admin_menu")
}
public plugin_cfg()
{
new szCfgDir[64], szFile[192];
get_configsdir(szCfgDir, charsmax(szCfgDir));
formatex(szFile,charsmax(szFile),"%s/army_ranks.cfg",szCfgDir);
if(file_exists(szFile))
server_cmd("exec %s", szFile);
}
public bomb_defused(id)
{
if(!is_user_connected(id)|| !is_user_alive(id) || get_user_team(id) != 2 || get_pcvar_num(gBombDefuseXp) < 1 || get_pcvar_num(gBomb) !=1)
return

if(get_playersnum() <= get_pcvar_num(gMinPlayers))
{
ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"MIN_PLAYERS")
} else {
UserData[id][gExp] += get_pcvar_num(gBombDefuseXp);
ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"DEFUSE_XP",get_pcvar_num(gBombDefuseXp))
}
}
public bomb_planted(id)
{
if(!is_user_connected(id)|| !is_user_alive(id) || get_user_team(id) != 1 || get_pcvar_num(gBombPlantXp) < 1 || get_pcvar_num(gBomb) !=1)
return

if(get_playersnum() <= get_pcvar_num(gMinPlayers))
{
ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"MIN_PLAYERS")
} else {
UserData[id][gExp] += get_pcvar_num(gBombPlantXp);
ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"PLANT_XP",get_pcvar_num(gBombPlantXp))
}
}
//
public sql_init()
{
new szTableName[64],szHost[64],szUser[64],szPassword[64],szDbName[64],ErrorCode;
get_pcvar_string(gTableName,szTableName,63);
get_pcvar_string(gHost,szHost,63);
get_pcvar_string(gUser,szUser,63);
get_pcvar_string(gPassword,szPassword,63);
get_pcvar_string(gDbName,szDbName,63);
g_SqlTuple = SQL_MakeDbTuple(szHost,szUser,szPassword,szDbName);
new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
if(SqlConnection == Empty_Handle)
set_fail_state(g_Error);

new Handle:Queries = SQL_PrepareQuery(SqlConnection,"CREATE TABLE IF NOT EXISTS `%s`(`id` INT(10) NOT NULL AUTO_INCREMENT,`name` VARCHAR(32) NOT NULL,`exp` INT(10) NOT NULL,`level` INT(10) NOT NULL,PRIMARY KEY (id));", szTableName)
if(!SQL_Execute(Queries))
{
SQL_QueryError(Queries,g_Error,charsmax(g_Error))
set_fail_state(g_Error);
}
SQL_FreeHandle(Queries)
SQL_FreeHandle(SqlConnection);
}
//
public plugin_end()
{
switch(get_pcvar_num(gSaveType))
{
case 0:
{
nvault_close(g_vault);
}
case 1:
{
if(g_SqlTuple != Empty_Handle)
SQL_FreeHandle(g_SqlTuple);
}
default:
{
nvault_close(g_vault);
}
}
}
//
public client_putinserver(id) // путинсервер)
{
for(new i = 0; i<PlData ; i++)
UserData[id][i] = 0;

load_data(id);
}
//
public client_disconnect(id)
{
save_usr(id);
for(new i = 0; i<PlData ; i++)
UserData[id][i] = 0;
}
//
public check_level(id)
{
if(UserData[id][gLevel] <= 0)
UserData[id][gLevel] = 1;

if(UserData[id][gExp] < 0)
UserData[id][gExp] = 0;

while(UserData[id][gExp] >= gLevels[UserData[id][gLevel]])
{
UserData[id][gLevel]++;
levelUp[id] = 1;
switch(get_pcvar_num(gLevelUpmsg))
{
case 1:
{
new szName[33];
get_user_name(id, szName, 32);
static buffer[192],len;
len = format(buffer, charsmax(buffer), "^4[^3Army Ranks^4]^1 %L ^4%s^1",LANG_PLAYER,"PLAYER",szName);
len += format(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,"NEW_LEVEL");
len += format(buffer[len], charsmax(buffer) - len, " ^4%L^1.",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
len += format(buffer[len], charsmax(buffer) - len, "%L",LANG_PLAYER,"CONTR");
ColorChat(0,NORMAL,buffer);
}
case 2:
{
new szName[33];
get_user_name(id, szName, 32);
static buffer[192],len;
len = format(buffer, charsmax(buffer), "^4[^3Army Ranks^4]^1 %L ^4%s^1",LANG_PLAYER,"PLAYER",szName);
len += format(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,"NEW_LEVEL");
len += format(buffer[len], charsmax(buffer) - len, " ^4%L^1.",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
len += format(buffer[len], charsmax(buffer) - len, "%L",LANG_PLAYER,"CONTR");
ColorChat(id,NORMAL,buffer);
}
}
}
}
public EventDeath()
{
new iKiller = read_data(1);
new iVictim = read_data(2);
new head = read_data(3);
if(iKiller != iVictim && is_user_connected(iKiller) && is_user_connected(iVictim) && UserData[iKiller][gLevel] <= 19)
{
// if tk?
if(get_pcvar_num(gTk) && get_user_team(iKiller) == get_user_team(iVictim))
{
UserData[iKiller][gExp] -= get_pcvar_num(gLostXpTk);
return PLUGIN_CONTINUE;
}
new weapon = get_user_weapon(iKiller);
UserData[iKiller][gExp] += 1;
if(weapon == CSW_KNIFE)
UserData[iKiller][gExp] += 3;

if(head)
UserData[iKiller][gExp] += 2;

if(weapon == CSW_HEGRENADE)
UserData[iKiller][gExp] += 1;

check_level(iKiller);
}
return PLUGIN_CONTINUE;
}
public EventRoundStart()
{
for(new id = 0; id <= MaxPlayers; id++)
{
if(is_user_alive(id) && is_user_connected(id))
{
if(restr_blocked)
return PLUGIN_CONTINUE;

if(get_pcvar_num(gFlash) && gNades[0][UserData[id][gLevel]])
give_item(id,"weapon_flashbang");

if(get_pcvar_num(gSmoke) && gNades[1][UserData[id][gLevel]])
give_item(id,"weapon_smokegrenade");

if(get_pcvar_num(gHe) && gNades[2][UserData[id][gLevel]])
give_item(id,"weapon_hegrenade");

if(get_pcvar_num(gHpbylevel) != 0)
set_user_health(id,get_user_health(id)+get_pcvar_num(gHpbylevel)*UserData[id][gL
evel]);

if(get_pcvar_num(gApbylevel) != 0)
set_user_armor(id,get_user_armor(id)+get_pcvar_num(gApbylevel)*UserData[id][gLev
el]);

if(levelUp[id] == 1 && get_pcvar_num(gBonusLevel))
{
GetWeapon(id);
levelUp[id] = 0;
}
}
}
return PLUGIN_CONTINUE;
}
////////// save
public load_data(id)
{
new szName[33];
get_user_name(id,szName,32);
switch(get_pcvar_num(gSaveType))
{
case 0:
{
static data[256], timestamp;
if(nvault_lookup(g_vault, szName, data, sizeof(data) - 1, timestamp) )
{
next_load_data(id, data, sizeof(data) - 1);
return;
} else {
register_player(id,"");
}
}
case 1:
{
new szTableName[32],ErrorCode;
new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
SQL_QuoteString(SqlConnection, szName, 32, szName);
get_pcvar_string(gTableName,szTableName,31);
if(SqlConnection == Empty_Handle)
{
log_amx(g_Error);
return ;
}
new Handle:Query = SQL_PrepareQuery(SqlConnection,"SELECT id FROM %s WHERE name = '%s';",szTableName,szName)
if(!SQL_Execute(Query))
{
SQL_QueryError(Query,g_Error,511);
log_amx(g_Error);
return ;
}
if(SQL_NumResults(Query) > 0 )
{
next_load_data(id, "", 0);
} else {
register_player(id,"");
}
SQL_FreeHandle(Query);
SQL_FreeHandle(SqlConnection);
}
default:
{
static data[256], timestamp;
if(nvault_lookup(g_vault, szName, data, sizeof(data) - 1, timestamp) )
{
next_load_data(id, data, sizeof(data) - 1);
return;
} else {
register_player(id,"");
}
}
}
}
public next_load_data(id,data[],len)
{
new szName[33];
get_user_name(id,szName,32);
switch(get_pcvar_num(gSaveType))
{
case 0:
{
replace_all(data,len,"|"," ");
new exp[5],level[5];
parse(data,exp,4,level,4);
UserData[id][gExp]= str_to_num(exp);
UserData[id][gLevel]= str_to_num(level);
}
case 1:
{
new szTableName[32],ErrorCode;
new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
SQL_QuoteString(SqlConnection, szName, 32, szName);
get_pcvar_string(gTableName,szTableName,31);
if(SqlConnection == Empty_Handle)
{
log_amx(g_Error);
return ;
}
new Handle:Query = SQL_PrepareQuery(SqlConnection,"SELECT id,exp,level FROM %s WHERE name = '%s';",szTableName,szName)
if(!SQL_Execute(Query))
{
SQL_QueryError(Query,g_Error,511)
log_amx(g_Error)
}
if( SQL_NumResults(Query) > 0)
{
UserData[id][gId]= SQL_ReadResult(Query,0);
UserData[id][gExp]= SQL_ReadResult(Query,1);
UserData[id][gLevel]= SQL_ReadResult(Query,2);
}
SQL_FreeHandle(Query);
SQL_FreeHandle(SqlConnection);
}
default:
{
replace_all(data,len,"|"," ");
new exp[5],level[5];
parse(data,exp,4,level,4);
UserData[id][gExp]= str_to_num(exp);
UserData[id][gLevel]= str_to_num(level);
}
}
// mini-check lvl_up
if(UserData[id][gLevel] <= 0)
UserData[id][gLevel] = 1;

while(UserData[id][gExp] >= gLevels[UserData[id][gLevel]])
UserData[id][gLevel]++;
}
public register_player(id,data[])
{
new szName[33];
get_user_name(id,szName,32);
switch(get_pcvar_num(gSaveType))
{
case 0:
{
UserData[id][gExp]= 0
UserData[id][gLevel]= 1;
}
case 1:
{
new szTableName[32],ErrorCode;
new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
SQL_QuoteString(SqlConnection, szName, 32, szName);
get_pcvar_string(gTableName,szTableName,31);
if(SqlConnection == Empty_Handle)
{
log_amx(g_Error);
return ;
}
new Handle:Query = SQL_PrepareQuery(SqlConnection,"INSERT INTO %s (`id`,`name`,`exp`,`level`) VALUES (NULL,'%s','0','1');",szTableName,szName);
if(!SQL_Execute(Query))
{
SQL_QueryError(Query,g_Error,511)
log_amx(g_Error)
}
SQL_FreeHandle(Query);
SQL_FreeHandle(SqlConnection);
UserData[id][gExp] = 0;
UserData[id][gLevel] = 1;
get_user_id(id);
}
default:
{
UserData[id][gExp]= 0;
UserData[id][gLevel]= 1;
}
}
}
public save_usr(id)
{
new szName[33];
get_user_name(id,szName,32);
switch(get_pcvar_num(gSaveType))
{
case 0:
{
static data[256];
formatex(data, 255, "|%i|%i|", UserData[id][gExp],UserData[id][gLevel]);
nvault_set(g_vault, szName, data);
}
case 1:
{
new szTemp[512],szTable[64];
get_pcvar_string(gTableName,szTable,63);
format(szTemp,charsmax(szTemp),"UPDATE `%s` SET `exp`='%d',`level`='%d' WHERE `id`='%d';",szTable,UserData[id][gExp],UserData[id][gLevel],UserData[id][gId]);
SQL_ThreadQuery(g_SqlTuple,"QueryHandler",szTemp)

server_print("==========================================");
server_print("UPDATE `%s` SET `exp`='%d',`level`='%d' WHERE `id`='%d';",szTable,UserData[id][gExp],UserData[id][gLevel],UserData[id][gId]);

}
default:
{
static data[256];
formatex(data, 255, "|%i|%i|", UserData[id][gExp],UserData[id][gLevel]);
nvault_set(g_vault, szName, data);
}
}
}
stock get_user_id(id)
{
new szName[33],ErrorCode;
get_user_name(id,szName,32);
new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
SQL_QuoteString(SqlConnection, szName, 32, szName);
if(SqlConnection == Empty_Handle)
{
log_amx(g_Error);
return;
}
new Handle:Query = SQL_PrepareQuery(SqlConnection,"SELECT id FROM hmm WHERE name = '%s';",szName)
if(!SQL_Execute(Query))
{
SQL_QueryError(Query,g_Error,511);
log_amx(g_Error);
return;
}
if(SQL_NumResults(Query) > 0 )
UserData[id][gId]= SQL_ReadResult(Query,0);
SQL_FreeHandle(Query);
SQL_FreeHandle(SqlConnection);
}
///////// chat event
public hookSay(id)
{
if(is_user_hltv(id) || is_user_bot(id) || !is_user_connected(id))
return PLUGIN_CONTINUE;

new message[192],Len;
read_args(message, 191);
remove_quotes(message);
if(is_admin_msg(message))
return PLUGIN_CONTINUE;

if(is_empty_message(message))
{
ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"EMPTY_MSG")
return PLUGIN_HANDLED
}
if(get_pcvar_num(gSlash))
{
if(is_has_slash(message))
return PLUGIN_HANDLED_MAIN
}
new szName[32];
get_user_name(id,szName,31);
if(is_user_admin(id))
{
Len = format(gMessage[Len], charsmax(gMessage) - 1, "^4[^3%L^4] ",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
switch(get_pcvar_num(gAdminGMsg))
{
case 1:
{
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "%s",message);
}
case 2:
{
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s",message);
}
default:
{
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
}
}
Chat(id,0,get_pcvar_num(gAllChat));
}
else
{
Len = format(gMessage[Len], charsmax(gMessage) - 1, "^4[^3%L^4] ",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
Chat(id,0,get_pcvar_num(gAllChat));
}
return PLUGIN_HANDLED_MAIN
}
public hookSayTeam(id)
{
if(is_user_hltv(id) || is_user_bot(id) || !is_user_connected(id))
return PLUGIN_CONTINUE;

new message[192],Len;
read_args(message, 191);
remove_quotes(message);
if(is_admin_msg(message))
return PLUGIN_CONTINUE;

if(is_empty_message(message))
{
ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"EMPTY_MSG");
return PLUGIN_HANDLED
}
if(get_pcvar_num(gSlash))
{
if(is_has_slash(message))
return PLUGIN_HANDLED_MAIN
}
new szName[32];
get_user_name(id,szName,31);
if(is_user_admin(id))
{
Len = format(gMessage[Len], charsmax(gMessage) - 1, "^3%L^1 ^4[^3%L^4] ^3%s^4 : ",LANG_PLAYER,"SEND_TEAM",LANG_PLAYER,gRankNames[UserData[id][gLevel]],szName);
switch(get_pcvar_num(gAdminGMsg))
{
case 1:
{
Len += format(gMessage[Len], charsmax(gMessage) - 1, "%s",message);
}
case 2:
{
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s",message);
}
default:
{
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
}
}
Chat(id,1,get_pcvar_num(gAllChat));
}
else
{
Len = format(gMessage[Len], charsmax(gMessage) - 1, "^3%L^1 ^4[^3%L^4] ",LANG_PLAYER,"SEND_TEAM",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
Chat(id,1,get_pcvar_num(gAllChat));
}
return PLUGIN_HANDLED_MAIN
}
stock is_admin_msg(const Message[])
{
if(Message[0] == '@')
return true;

return false;
}
stock is_empty_message(const Message[])
{
if(equal(Message, "") || !strlen(Message))
return true;

return false;
}
stock Chat(id,team,chat_type)
{
if(team)
{
if(chat_type)
{
for(new i = 0; i <= MaxPlayers; i++)
{
if(!is_user_connected(i))
continue

if(get_user_team(id) == get_user_team(i))
send_message(gMessage, id, i);
}
} else {
if(is_user_alive(id))
{
for(new i = 0; i <= MaxPlayers; i++)
{
if(!is_user_connected(i) || !is_user_alive(i))
continue

if(get_user_team(id) == get_user_team(i))
send_message(gMessage, id, i);
}
} else if(!is_user_alive(id)){
for(new i = 0; i <= MaxPlayers; i++)
{
if(!is_user_connected(i) || is_user_alive(i))
continue

if(get_user_team(id) == get_user_team(i))
send_message(gMessage, id, i);
}
}
}
} else{
if(chat_type)
{
for(new i = 0; i <= MaxPlayers; i++)
{
if(!is_user_connected(i))
continue

send_message(gMessage, id, i);
}
} else {
if(is_user_alive(id))
{
for(new i = 0; i <= MaxPlayers; i++)
{
if(!is_user_connected(i) || !is_user_alive(i))
continue

send_message(gMessage, id, i);
}
} else if(!is_user_alive(id)){
for(new i = 0; i <= MaxPlayers; i++)
{
if(!is_user_connected(i) || is_user_alive(i))
continue

send_message(gMessage, id, i);
}
}
}
}
}
stock send_message(const message[], const id, const i)
{
message_begin(MSG_ONE, gSayText, {0, 0, 0}, i)
write_byte(id)
write_string(message)
message_end()
}
stock is_has_slash(const Message[])
{
if(Message[0] == '/')
return true;

return false;
}

public client_infochanged(id)
{
new newname[32],oldname[32]
get_user_info(id, "name", newname,31)
get_user_name(id,oldname,31)
if(!is_user_connected(id) || is_user_bot(id))
return PLUGIN_CONTINUE

if(!equali(newname, oldname))
{
new szTemp[512],szTable[64];
get_pcvar_string(gTableName,szTable,63);
format(szTemp,charsmax(szTemp),"UPDATE `%s` SET `name`='%s' WHERE `id`='%d';",szTable,newname,UserData[id][gId]);
SQL_ThreadQuery(g_SqlTuple,"QueryHandler",szTemp)
}
return PLUGIN_CONTINUE
}
public msg_SayText()
{
new arg[32]
get_msg_arg_string(2, arg, 31)
if(containi(arg,"name")!=-1)
return PLUGIN_HANDLED

return PLUGIN_CONTINUE
}
/////////// natives
public plugin_natives()
{
register_native("get_user_exp", "native_get_user_exp", 1);
register_native("get_user_lvl", "native_get_user_lvl", 1);
register_native("set_user_exp", "native_set_user_exp", 1);
register_native("set_user_lvl", "native_set_user_lvl", 1);
register_native("get_user_rankname", "native_get_user_rankname", 1);
}
public native_set_user_exp(id,num)
{
UserData[id][gExp] = num;
}
public native_set_user_lvl(id,num)
{
UserData[id][gLevel] = num;
}
public native_get_user_exp(id)
{
return UserData[id][gExp];
}
public native_get_user_lvl(id)
{
return UserData[id][gLevel];
}
public native_get_user_rankname(id)
{
static szRankName[64];
format(szRankName, charsmax(szRankName), "%L",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
return szRankName;
}
//////// informer
public Info()
{
for(new id = 0; id <= MaxPlayers; id++)
{
if(!is_user_bot(id) && is_user_connected(id))
{
set_hudmessage(100, 100, 100, 0.01, 0.13, 0, 1.0, 1.0, _, _, -1)

static buffer[192], len;
len = format(buffer, charsmax(buffer), "%L",LANG_PLAYER,"ZVANIE");
len += format(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
if(UserData[id][gLevel] <= 19)
{
len += format(buffer[len], charsmax(buffer) - len, "^n%L",LANG_PLAYER,"PL_XP",UserData[id][gExp],gLevels[UserData[id][gLevel]]);
} else {
len += format(buffer[len], charsmax(buffer) - len, "^n%L",LANG_PLAYER,"PL_MAX");
}
ShowSyncHudMsg(id, g_MsgHud, "%s", buffer);
}
}
return PLUGIN_CONTINUE
}
public StatusText()
{
for(new id = 0; id <= MaxPlayers; id++)
{
if(!is_user_bot(id) && is_user_connected(id) && is_user_alive(id))
{
static buffer[100], len;
len = format(buffer, charsmax(buffer), "%L",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
if(UserData[id][gLevel] <= 19)
{
len += format(buffer[len], charsmax(buffer) - len, " | %L",LANG_PLAYER,"PL_XP_STEXT",UserData[id][gExp],gLevels[UserData[id][gLevel]]);
} else {
len += format(buffer[len], charsmax(buffer) - len, " | %L",LANG_PLAYER,"PL_MAX");
}
message_begin(MSG_ONE_UNRELIABLE, gStatusText, _, id)
write_byte(0)
write_string(buffer)
message_end();
}
}
}
/////// weap menu per lvl
public GetWeapon(id)
{
new szText[700 char];
formatex( szText, charsmax( szText ), "%L", id, "GW_TITLE");
new menu = menu_create( szText, "gw_menu" );
//
formatex( szText, charsmax( szText ), "awp");
menu_additem( menu, szText, "1", 0 );
//
formatex( szText, charsmax( szText ), "ak-47");
menu_additem( menu, szText, "2", 0 );
//
formatex( szText, charsmax( szText ), "m4a1");
menu_additem( menu, szText, "3", 0 );
//
formatex( szText, charsmax( szText ), "famas");
menu_additem( menu, szText, "4", 0 );
//
menu_setprop( menu, MPROP_EXIT, MEXIT_ALL );
menu_display( id, menu,0);
return PLUGIN_CONTINUE;
}
public gw_menu(id,menu,item)
{
if( item == MENU_EXIT )
{
return PLUGIN_HANDLED;
}

new data[ 6 ], iName[ 64 ], access, callback;
menu_item_getinfo( menu, item, access, data, charsmax( data ), iName, charsmax( iName ), callback );
new key = str_to_num( data );
switch( key )
{
case 1:
{
give_item(id,"weapon_awp");
cs_set_user_bpammo( id, CSW_AWP, 100);
}
case 2:
{
give_item(id,"weapon_ak47");
cs_set_user_bpammo( id, CSW_AK47, 200);
}
case 3:
{
give_item(id,"weapon_m4a1");
cs_set_user_bpammo( id, CSW_M4A1, 200);
}
case 4:
{
give_item(id,"weapon_famas");
cs_set_user_bpammo( id, CSW_FAMAS, 200);
}
}

return PLUGIN_HANDLED;
}
public QueryHandler(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
switch(FailState)
{
case -2: log_amx("[Army Ranks] Failed to connect (%d): %s", Errcode, Error);
case -1: log_amx("[Army Ranks] (%d): %s", Errcode, Error);
}
return PLUGIN_HANDLED
}
public fw_ServerDown()
{
for(new i = 0; i <= MaxPlayers; i++)
{
if(is_user_connected(i))
save_usr(i)
}
}
public admin_menu(id)
{
new szText[700 char];
formatex( szText, charsmax( szText ), "%L", id, "ARMY_MENU");
new menu = menu_create( szText, "admin_menu_hl" );
//
formatex( szText, charsmax( szText ), "%L", id, "ADD_EXP");
menu_additem( menu, szText, "1", 0 );
formatex( szText, charsmax( szText ), "%L", id, "SET_LVL");
menu_additem( menu, szText, "2", 0 );
//
menu_setprop( menu, MPROP_EXIT, MEXIT_ALL );
menu_display( id, menu,0);
return PLUGIN_CONTINUE;
}
public admin_menu_hl(id,menu,item)
{
if( item == MENU_EXIT )
{
return PLUGIN_HANDLED;
}

new data[ 6 ], iName[ 64 ], access, callback;
menu_item_getinfo( menu, item, access, data, charsmax( data ), iName, charsmax( iName ), callback );
new key = str_to_num( data );
switch( key )
{
case 1:
{
give_exp_menu(id);
}
case 2:
{
set_level_menu(id)
}
}

return PLUGIN_HANDLED;
}
public give_exp_menu(id)
{
if(get_user_flags(id) & ADM_MENU)
{
new players[32], num;
get_players(players, num)
new tempname[32], info[10];
new players_menu = menu_create("Выберите игрока :", "give_exp_hl")
for(new i = 0; i < num; i++)
{
get_user_name(players[i], tempname, 31);
num_to_str(players[i], info, 9);
menu_additem(players_menu, tempname, info, 0);
}
menu_setprop(players_menu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, players_menu, 0);
}
return PLUGIN_CONTINUE
}
public give_exp_hl(id, players_menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(players_menu)
return PLUGIN_HANDLED
}
new data[6],accessmenu, iName[64], callback;
menu_item_getinfo(players_menu, item, accessmenu, data, charsmax(data), iName, charsmax(iName), callback)
new player = str_to_num(data)
client_cmd(id, "messagemode ^"add_exp %i^"", player);
ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"TYPE_AMOUNT");
return PLUGIN_CONTINUE
}

public add_exp_post(id)
{
if(get_user_flags(id) & ADM_MENU)
{
new param[10]
read_argv(2, param, charsmax(param))
for (new x; x < strlen(param); x++)
{
if(!isdigit(param[x]))
{
ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"MUST_NUM")
give_exp_menu(id)
return PLUGIN_HANDLED
}
}
new amount = str_to_num(param);
if (amount < 1)
{
ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"MIN_EXP")
give_exp_menu(id)
return PLUGIN_HANDLED
}
if (amount > 999)
{
ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"MAX_EXP")
give_exp_menu(id)
return PLUGIN_HANDLED
}
read_argv(1, param, charsmax(param))
new player = str_to_num(param)
//
UserData[player][gExp] += amount;
if(UserData[player][gLevel] <= 0)
UserData[player][gLevel] = 1;

while(UserData[player][gExp] >= gLevels[UserData[player][gLevel]])
UserData[player][gLevel]++;
//
new names[2][32]
get_user_name(id, names[0], 31)
get_user_name(player, names[1], 31)
ColorChat(0, NORMAL, "^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"ADMIN_ADD", names[0], amount, names[1]);
save_usr(player);
}
return PLUGIN_HANDLED
}
public set_level_menu(id)
{
if(get_user_flags(id) & ADM_MENU)
{
UserData[id][gTempKey] = 0;
new players[32], num;
get_players(players, num)
new tempname[32], info[10];
new players_menu = menu_create("Выберите игрока :", "set_level_hl")
for(new i = 0; i < num; i++)
{
get_user_name(players[i], tempname, 31);
num_to_str(players[i], info, 9);
menu_additem(players_menu, tempname, info, 0);
}
menu_setprop(players_menu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, players_menu, 0);
}
return PLUGIN_CONTINUE
}
public set_level_hl(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], _access, callback;
menu_item_getinfo( menu, item, _access, data, charsmax(data), _, _, callback);
UserData[id][gTempKey] = str_to_num(data);
set_level_pl(id);
return PLUGIN_CONTINUE
}
public set_level_pl(id)
{
static szText[1024];
formatex(szText,charsmax(szText), "%L", id, "CHOOSE_RANKN");
new menu = menu_create( szText, "set_level_phl");
//======
for(new i = 1; i < sizeof(gRankNames); i++)
{
new szItem[100],lang[10],num[5];
format(lang,9,"I_%d",i);
format(num,4,"%d",i);
formatex(szItem,charsmax(szItem),"%L",id,lang);
menu_additem(menu,szItem,num);
}
//======
menu_setprop(menu, MPROP_BACKNAME, "Назад ");
menu_setprop(menu, MPROP_NEXTNAME, "Далее ");
menu_setprop(menu, MPROP_EXITNAME, "Выход ");
menu_display( id, menu,0);
return PLUGIN_CONTINUE;
}
public set_level_phl(id,menu,item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], _access, callback;
menu_item_getinfo( menu, item, _access, data, charsmax(data), _, _, callback);
new level = str_to_num(data);
if(UserData[id][gTempKey] >= 1 && UserData[id][gTempKey] <= 32)
{
UserData[UserData[id][gTempKey]][gLevel] = level;
UserData[UserData[id][gTempKey]][gExp] = gLevels[level-1];
new szName[2][32];
get_user_name(id, szName[0], 31);
get_user_name(UserData[id][gTempKey], szName[1], 31);
ColorChat(0, NORMAL, "^4[^3Army Ranks^4]^1 %L %L %s",LANG_PLAYER,"ADMIN_LEVEL", szName[0],LANG_PLAYER,gRankNames[level],szName[1])
save_usr(UserData[id][gTempKey]);
} else {
set_level_menu(id);
}
UserData[id][gTempKey] = 0;
return PLUGIN_HANDLED;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg1252\\ deff0{\\ fonttbl{\\ f0\\ fnil\\ fcharset0 Tahoma;}}\n{\\ colortbl ;\\ red0\\ green0\\ blue0;}\n\\ viewkind4\\ uc1\\ pard\\ cf1\\ lang1033\\ f0\\ fs16 \n\\ par }
*/





з.ы. army_ranks 1.2 работает с базой без нареканий))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Dreandy
сообщение 29.12.2013, 13:55
Сообщение #303
Стаж: 12 лет

Сообщений: 1394
Благодарностей: 231
Полезность: 37

А можно предотвратить такое,что после каждого рестарта сервера, звания слетали.


критика - это лучший способ изменить человека
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 30.12.2013, 10:12
Сообщение #304
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(ReClubMix @ 28.12.2013, 22:27) *
Из лога я понял что в SQL_Connect приходят неверные параметры, а почему я не знаю.
подключение к дб прописал верно

MySQL-сервер не пускает по вашим прописанным параметрам. Если уверены, что все параметры заданы верно - попробуйте вместо localhost использовать 127.0.0.1.

Я уже писал, что в этой версии попытка обращения к базе выполняется раньше применения настроек из конфига, поэтому на первой карте после старта сервера всегда будет ошибка, если свои параметры заданы в конфиге.

Цитата(Dreandy @ 29.12.2013, 15:55) *
А можно предотвратить такое,что после каждого рестарта сервера, звания слетали.

Вроде больше никто не жаловался на слёт по рестарта...


Версия 1.3.1 ещё глупее сделана, чем 1.2. Это как раз тот случай, когда не стоит обновляться, если предыдущая в принципе устраивает.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Dreandy
сообщение 30.12.2013, 11:41
Сообщение #305
Стаж: 12 лет

Сообщений: 1394
Благодарностей: 231
Полезность: 37

Цитата(Safety1st @ 30.12.2013, 11:12) *
Вроде больше никто не жаловался на слёт по рестарта...
Версия 1.3.1 ещё глупее сделана, чем 1.2. Это как раз тот случай, когда не стоит обновляться, если предыдущая в принципе устраивает.

У меня слетает. Какую версию попробовать поставить?


критика - это лучший способ изменить человека
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Deniesha
сообщение 14.1.2014, 16:43
Сообщение #306


Стаж: 17 лет

Сообщений: 9
Благодарностей: 2
Полезность: 0

Помогите скомпилить
Скрытый текст
/*
Обещанного три года ждут ;)
*/
#include <amxmodx>
#include <amxmisc>
#include <colorchat>
#include <fun>
#include <cstrike>
#include <nvault>
#include <sqlx>
#include <fakemeta>
//
#define PLUGIN "Army Ranks"
#define VERSION "1.3.1"
#define AUTHOR "Arctic"
#pragma tabsize 0
#define ADM_MENU ADMIN_IMMUNITY // menu access flag
//
new g_vault;
new Handle:g_SqlTuple;
new g_Error[512];
enum _:PlData
{
gId,gExp,gLevel,gTempKey
};
new UserData[33][PlData];
new gMessage[256];
new g_MsgHud,MaxPlayers,levelUp[33],gSayText,gStatusText
new bool:restr_blocked;
new const gRankNames[][] =
{
"I_0","I_1","I_2","I_3","I_4","I_5","I_6","I_7","I_8","I_9","I_10","I_11","I_12","I_13","I_14",
"I_15","I_16","I_17","I_18","I_19","I_20"
};
new const gLevels[] =
{
0,15,30,60,100,180,350,450,600,700,800,900,1100,1200,1300,1400,1500,1600,1700,18
00
};
new const gNades[][] =
{
{0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
}
new const restrict_bonus[][] =
{
"35hp",
"most_wanted",
"ka_wintershank"
};
new gRestrictMaps,gAdminGMsg,gBonusLevel,gFlash,gSmoke,gHe,gHpbylevel,gApbylevel
,gArmyChat,gSaveType,gTableName,gHost,gUser,gPassword,gDbName,gSlash,
gTk,gLostXpTk,gLevelUpmsg,gAllChat,gProgressBar,gBombDefuseXp,gBombPlantXp,gBomb
, gMinPlayers
//
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_cvar("army_ranks",VERSION, FCVAR_SERVER | FCVAR_SPONLY);
set_cvar_string("army_ranks",VERSION);
//
gRestrictMaps = register_cvar( "restrict_maps", "0");// вкл запрет бонусов на карте.
gBonusLevel = register_cvar( "level_bonus", "1");// вкл оружие при получении уровня.
gFlash = register_cvar( "flash_nades", "1");// вкл бонуса флешек
gSmoke = register_cvar( "smoke_nades", "1");// вкл бонуса дымовых
gHe = register_cvar( "he_nades", "1");// вкл бонуса осколочных
gHpbylevel = register_cvar( "hp_by_level", "0");// кол-во хп, которое дается за лвл, если = 0 - то выкл
gApbylevel = register_cvar( "ap_by_level", "0");// кол-во брони, которое дается за лвл, если = 0 - то выкл
gArmyChat = register_cvar( "army_chat", "1");// использовать чат плагина, то есть приставка в чате, цвет сообщ. для админа
gAdminGMsg = register_cvar( "admin_color", "1");// 1 = сообщ.админа зеленое,0 = желтое, 2 = цвета команды
gSaveType = register_cvar( "save_type", "0");// 0 - nvault, 1- mysql.
gSlash = register_cvar( "slash_messages", "1");// не отображать команды со слэшем
gTk = register_cvar( "team_kill_lost_xp", "1");// терять exp при тимкилле
gLostXpTk = register_cvar( "lost_xp_val", "3");// кол-во теряемых exp при тк
gLevelUpmsg = register_cvar( "level_up_msg", "1");// сообщение при лвл-апе игрока : 1- вкл (всем), 2 - только игроку
gAllChat = register_cvar( "all_chat", "1");// 1 - чат для всех(метвые и живые), 0-живые не видят чат мертвых и наоборот
/***/ gProgressBar = register_cvar( "progress_bar_pos", "0");// расположение данных игрока: 0 - hud(под радаром), 1 - под чатом
gMinPlayers = register_cvar( "min_players", "1");// мин.кол-во игроков для получения опыта за действия с бомбой
gBomb = register_cvar( "bomb_xp", "1");// вкл получения опыта над действиями с бомбой
gBombDefuseXp = register_cvar( "bdefuse_xp", "3");// кол-во получаемых exp при разминировании бомбы
gBombPlantXp = register_cvar( "bplant_xp", "3");// кол-во получаемых exp при минировании бомбы
// для mysql
gHost = register_cvar( "mysql_host", "127.0.0.1"); // host
gUser = register_cvar( "mysql_user", "root"); // username
gPassword = register_cvar( "mysql_password", "qwerty"); // password
gDbName = register_cvar( "mysql_db_name", "test"); // database name
gTableName = register_cvar( "mysql_table_name", "army_ranks"); // название таблицы mysql
//
register_logevent( "EventRoundStart", 2, "1=Round_Start" );
register_forward(FM_Sys_Error, "fw_ServerDown");
register_forward(FM_GameShutdown, "fw_ServerDown");
register_forward(FM_ServerDeactivate, "fw_ServerDown");
register_event( "DeathMsg","EventDeath","a");
if(get_pcvar_num(gProgressBar) != 0){
set_task(1.0,"StatusText",_,_,_, "b");
} else {
set_task(1.0,"Info",_,_,_, "b");
}
//
register_message(get_user_msgid("SayText"), "msg_SayText");
gStatusText = get_user_msgid("StatusText");
gSayText = get_user_msgid ("SayText");
//
g_MsgHud = CreateHudSyncObj();
MaxPlayers = get_maxplayers();
register_dictionary("army.txt" );
//
if(get_pcvar_num(gRestrictMaps))
{
new szMapName[64];
get_mapname(szMapName,63);
for(new a = 0; a < sizeof restrict_bonus; a++)
{
if(equal(szMapName, restrict_bonus[a]))
{
restr_blocked = true;
log_amx("[army ranks] weapon menu is blocked on map [%s].",restrict_bonus[a]);
break;
} else {
restr_blocked = false;
}
}
}
//
switch(get_pcvar_num(gSaveType))
{
case 0:
{
g_vault = nvault_open("army_ranks");
}
case 1:
{
set_task(0.1, "sql_init");
}
default:
{
g_vault = nvault_open("army_ranks");
}
}
//
if(get_pcvar_num(gArmyChat))
{
register_clcmd("say", "hookSay")
register_clcmd("say_team", "hookSayTeam");
}
register_clcmd("add_exp", "add_exp_post")
register_clcmd("amx_setlevel", "admin_menu")
}
public plugin_cfg()
{
new szCfgDir[64], szFile[192];
get_configsdir(szCfgDir, charsmax(szCfgDir));
formatex(szFile,charsmax(szFile),"%s/army_ranks.cfg",szCfgDir);
if(file_exists(szFile))
server_cmd("exec %s", szFile);
}
public bomb_defused(id)
{
if(!is_user_connected(id)|| !is_user_alive(id) || get_user_team(id) != 2 || get_pcvar_num(gBombDefuseXp) < 1 || get_pcvar_num(gBomb) !=1)
return

if(get_playersnum() <= get_pcvar_num(gMinPlayers))
{
ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"MIN_PLAYERS")
} else {
UserData[id][gExp] += get_pcvar_num(gBombDefuseXp);
ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"DEFUSE_XP",get_pcvar_num(gBombDefuseXp))
}
}
public bomb_planted(id)
{
if(!is_user_connected(id)|| !is_user_alive(id) || get_user_team(id) != 1 || get_pcvar_num(gBombPlantXp) < 1 || get_pcvar_num(gBomb) !=1)
return

if(get_playersnum() <= get_pcvar_num(gMinPlayers))
{
ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"MIN_PLAYERS")
} else {
UserData[id][gExp] += get_pcvar_num(gBombPlantXp);
ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"PLANT_XP",get_pcvar_num(gBombPlantXp))
}
}
//
public sql_init()
{
new szTableName[64],szHost[64],szUser[64],szPassword[64],szDbName[64],ErrorCode;
get_pcvar_string(gTableName,szTableName,63);
get_pcvar_string(gHost,szHost,63);
get_pcvar_string(gUser,szUser,63);
get_pcvar_string(gPassword,szPassword,63);
get_pcvar_string(gDbName,szDbName,63);
g_SqlTuple = SQL_MakeDbTuple(szHost,szUser,szPassword,szDbName);
new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
if(SqlConnection == Empty_Handle)
set_fail_state(g_Error);

new Handle:Queries = SQL_PrepareQuery(SqlConnection,"CREATE TABLE IF NOT EXISTS `%s`(`id` INT(10) NOT NULL AUTO_INCREMENT,`name` VARCHAR(32) NOT NULL,`exp` INT(10) NOT NULL,`level` INT(10) NOT NULL,PRIMARY KEY (id));", szTableName)
if(!SQL_Execute(Queries))
{
SQL_QueryError(Queries,g_Error,charsmax(g_Error))
set_fail_state(g_Error);
}
SQL_FreeHandle(Queries)
SQL_FreeHandle(SqlConnection);
}
//
public plugin_end()
{
switch(get_pcvar_num(gSaveType))
{
case 0:
{
nvault_close(g_vault);
}
case 1:
{
if(g_SqlTuple != Empty_Handle)
SQL_FreeHandle(g_SqlTuple);
}
default:
{
nvault_close(g_vault);
}
}
}
//
public client_putinserver(id) // путинсервер)
{
for(new i = 0; i<PlData ; i++)
UserData[id][i] = 0;

load_data(id);
}
//
public client_disconnect(id)
{
save_usr(id);
for(new i = 0; i<PlData ; i++)
UserData[id][i] = 0;
}
//
public check_level(id)
{
if(UserData[id][gLevel] <= 0)
UserData[id][gLevel] = 1;

if(UserData[id][gExp] < 0)
UserData[id][gExp] = 0;

while(UserData[id][gExp] >= gLevels[UserData[id][gLevel]])
{
UserData[id][gLevel]++;
levelUp[id] = 1;
switch(get_pcvar_num(gLevelUpmsg))
{
case 1:
{
new szName[33];
get_user_name(id, szName, 32);
static buffer[192],len;
len = format(buffer, charsmax(buffer), "^4[^3Army Ranks^4]^1 %L ^4%s^1",LANG_PLAYER,"PLAYER",szName);
len += format(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,"NEW_LEVEL");
len += format(buffer[len], charsmax(buffer) - len, " ^4%L^1.",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
len += format(buffer[len], charsmax(buffer) - len, "%L",LANG_PLAYER,"CONTR");
ColorChat(0,NORMAL,buffer);
}
case 2:
{
new szName[33];
get_user_name(id, szName, 32);
static buffer[192],len;
len = format(buffer, charsmax(buffer), "^4[^3Army Ranks^4]^1 %L ^4%s^1",LANG_PLAYER,"PLAYER",szName);
len += format(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,"NEW_LEVEL");
len += format(buffer[len], charsmax(buffer) - len, " ^4%L^1.",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
len += format(buffer[len], charsmax(buffer) - len, "%L",LANG_PLAYER,"CONTR");
ColorChat(id,NORMAL,buffer);
}
}
}
}
public EventDeath()
{
new iKiller = read_data(1);
new iVictim = read_data(2);
new head = read_data(3);
if(iKiller != iVictim && is_user_connected(iKiller) && is_user_connected(iVictim) && UserData[iKiller][gLevel] <= 19)
{
// if tk?
if(get_pcvar_num(gTk) && get_user_team(iKiller) == get_user_team(iVictim))
{
UserData[iKiller][gExp] -= get_pcvar_num(gLostXpTk);
return PLUGIN_CONTINUE;
}
new weapon = get_user_weapon(iKiller);
UserData[iKiller][gExp] += 1;
if(weapon == CSW_KNIFE)
UserData[iKiller][gExp] += 3;

if(head)
UserData[iKiller][gExp] += 2;

if(weapon == CSW_HEGRENADE)
UserData[iKiller][gExp] += 1;

check_level(iKiller);
}
return PLUGIN_CONTINUE;
}
public EventRoundStart()
{
for(new id = 0; id <= MaxPlayers; id++)
{
if(is_user_alive(id) && is_user_connected(id))
{
if(restr_blocked)
return PLUGIN_CONTINUE;

if(get_pcvar_num(gFlash) && gNades[0][UserData[id][gLevel]])
give_item(id,"weapon_flashbang");

if(get_pcvar_num(gSmoke) && gNades[1][UserData[id][gLevel]])
give_item(id,"weapon_smokegrenade");

if(get_pcvar_num(gHe) && gNades[2][UserData[id][gLevel]])
give_item(id,"weapon_hegrenade");

if(get_pcvar_num(gHpbylevel) != 0)
set_user_health(id,get_user_health(id)+get_pcvar_num(gHpbylevel)*UserData[id][gL
evel]);

if(get_pcvar_num(gApbylevel) != 0)
set_user_armor(id,get_user_armor(id)+get_pcvar_num(gApbylevel)*UserData[id][gLev
el]);

if(levelUp[id] == 1 && get_pcvar_num(gBonusLevel))
{
GetWeapon(id);
levelUp[id] = 0;
}
}
}
return PLUGIN_CONTINUE;
}
////////// save
public load_data(id)
{
new szName[33];
get_user_name(id,szName,32);
switch(get_pcvar_num(gSaveType))
{
case 0:
{
static data[256], timestamp;
if(nvault_lookup(g_vault, szName, data, sizeof(data) - 1, timestamp) )
{
next_load_data(id, data, sizeof(data) - 1);
return;
} else {
register_player(id,"");
}
}
case 1:
{
new szTableName[32],ErrorCode;
new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
SQL_QuoteString(SqlConnection, szName, 32, szName);
get_pcvar_string(gTableName,szTableName,31);
if(SqlConnection == Empty_Handle)
{
log_amx(g_Error);
return ;
}
new Handle:Query = SQL_PrepareQuery(SqlConnection,"SELECT id FROM %s WHERE name = '%s';",szTableName,szName)
if(!SQL_Execute(Query))
{
SQL_QueryError(Query,g_Error,511);
log_amx(g_Error);
return ;
}
if(SQL_NumResults(Query) > 0 )
{
next_load_data(id, "", 0);
} else {
register_player(id,"");
}
SQL_FreeHandle(Query);
SQL_FreeHandle(SqlConnection);
}
default:
{
static data[256], timestamp;
if(nvault_lookup(g_vault, szName, data, sizeof(data) - 1, timestamp) )
{
next_load_data(id, data, sizeof(data) - 1);
return;
} else {
register_player(id,"");
}
}
}
}
public next_load_data(id,data[],len)
{
new szName[33];
get_user_name(id,szName,32);
switch(get_pcvar_num(gSaveType))
{
case 0:
{
replace_all(data,len,"|"," ");
new exp[5],level[5];
parse(data,exp,4,level,4);
UserData[id][gExp]= str_to_num(exp);
UserData[id][gLevel]= str_to_num(level);
}
case 1:
{
new szTableName[32],ErrorCode;
new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
SQL_QuoteString(SqlConnection, szName, 32, szName);
get_pcvar_string(gTableName,szTableName,31);
if(SqlConnection == Empty_Handle)
{
log_amx(g_Error);
return ;
}
new Handle:Query = SQL_PrepareQuery(SqlConnection,"SELECT id,exp,level FROM %s WHERE name = '%s';",szTableName,szName)
if(!SQL_Execute(Query))
{
SQL_QueryError(Query,g_Error,511)
log_amx(g_Error)
}
if( SQL_NumResults(Query) > 0)
{
UserData[id][gId]= SQL_ReadResult(Query,0);
UserData[id][gExp]= SQL_ReadResult(Query,1);
UserData[id][gLevel]= SQL_ReadResult(Query,2);
}
SQL_FreeHandle(Query);
SQL_FreeHandle(SqlConnection);
}
default:
{
replace_all(data,len,"|"," ");
new exp[5],level[5];
parse(data,exp,4,level,4);
UserData[id][gExp]= str_to_num(exp);
UserData[id][gLevel]= str_to_num(level);
}
}
// mini-check lvl_up
if(UserData[id][gLevel] <= 0)
UserData[id][gLevel] = 1;

while(UserData[id][gExp] >= gLevels[UserData[id][gLevel]])
UserData[id][gLevel]++;
}
public register_player(id,data[])
{
new szName[33];
get_user_name(id,szName,32);
switch(get_pcvar_num(gSaveType))
{
case 0:
{
UserData[id][gExp]= 0
UserData[id][gLevel]= 1;
}
case 1:
{
new szTableName[32],ErrorCode;
new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
SQL_QuoteString(SqlConnection, szName, 32, szName);
get_pcvar_string(gTableName,szTableName,31);
if(SqlConnection == Empty_Handle)
{
log_amx(g_Error);
return ;
}
new Handle:Query = SQL_PrepareQuery(SqlConnection,"INSERT INTO %s (`id`,`name`,`exp`,`level`) VALUES (NULL,'%s','0','1');",szTableName,szName);
if(!SQL_Execute(Query))
{
SQL_QueryError(Query,g_Error,511)
log_amx(g_Error)
}
SQL_FreeHandle(Query);
SQL_FreeHandle(SqlConnection);
UserData[id][gExp] = 0;
UserData[id][gLevel] = 1;
}
default:
{
UserData[id][gExp]= 0
UserData[id][gLevel]= 1;
}
}
}
public save_usr(id)
{
new szName[33];
get_user_name(id,szName,32);
switch(get_pcvar_num(gSaveType))
{
case 0:
{
static data[256];
formatex(data, 255, "|%i|%i|", UserData[id][gExp],UserData[id][gLevel]);
nvault_set(g_vault, szName, data);
}
case 1:
{
new szTableName[32],ErrorCode;
new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
new Handle:Queries = SQL_PrepareQuery(SqlConnection, "UPDATE `%s` SET `exp`='%d',`level`='%d' WHERE `id`='%d';",szTableName,UserData[id][gExp],UserData[id][gLevel],UserData[id][gId]);
if(!SQL_Execute(Queries))
{
SQL_QueryError(Queries,g_Error,511)
log_amx(g_Error);
SQL_FreeHandle(Queries);
SQL_FreeHandle(SqlConnection);
return;
}
SQL_FreeHandle(Queries);
}
default:
{
static data[256];
formatex(data, 255, "|%i|%i|", UserData[id][gExp],UserData[id][gLevel]);
nvault_set(g_vault, szName, data);
}
}
}
///////// chat event
public hookSay(id)
{
if(is_user_hltv(id) || is_user_bot(id) || !is_user_connected(id))
return PLUGIN_CONTINUE;

new message[192],Len;
read_args(message, 191);
remove_quotes(message);
if(is_admin_msg(message))
return PLUGIN_CONTINUE;

if(is_empty_message(message))
{
ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"EMPTY_MSG")
return PLUGIN_HANDLED
}
if(get_pcvar_num(gSlash))
{
if(is_has_slash(message))
return PLUGIN_HANDLED_MAIN
}
new szName[32];
get_user_name(id,szName,31);
if(is_user_admin(id))
{
Len = format(gMessage[Len], charsmax(gMessage) - 1, "^4[^3%L^4] ",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
switch(get_pcvar_num(gAdminGMsg))
{
case 1:
{
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "%s",message);
}
case 2:
{
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s",message);
}
default:
{
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
}
}
Chat(id,0,get_pcvar_num(gAllChat));
}
else
{
Len = format(gMessage[Len], charsmax(gMessage) - 1, "^4[^3%L^4] ",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
Chat(id,0,get_pcvar_num(gAllChat));
}
return PLUGIN_HANDLED_MAIN
}
public hookSayTeam(id)
{
if(is_user_hltv(id) || is_user_bot(id) || !is_user_connected(id))
return PLUGIN_CONTINUE;

new message[192],Len;
read_args(message, 191);
remove_quotes(message);
if(is_admin_msg(message))
return PLUGIN_CONTINUE;

if(is_empty_message(message))
{
ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"EMPTY_MSG");
return PLUGIN_HANDLED
}
if(get_pcvar_num(gSlash))
{
if(is_has_slash(message))
return PLUGIN_HANDLED_MAIN
}
new szName[32];
get_user_name(id,szName,31);
if(is_user_admin(id))
{
Len = format(gMessage[Len], charsmax(gMessage) - 1, "^3%L^1 ^4[^3%L^4] ^3%s^4 : ",LANG_PLAYER,"SEND_TEAM",LANG_PLAYER,gRankNames[UserData[id][gLevel]],szName);
switch(get_pcvar_num(gAdminGMsg))
{
case 1:
{
Len += format(gMessage[Len], charsmax(gMessage) - 1, "%s",message);
}
case 2:
{
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s",message);
}
default:
{
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
}
}
Chat(id,1,get_pcvar_num(gAllChat));
}
else
{
Len = format(gMessage[Len], charsmax(gMessage) - 1, "^3%L^1 ^4[^3%L^4] ",LANG_PLAYER,"SEND_TEAM",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
Chat(id,1,get_pcvar_num(gAllChat));
}
return PLUGIN_HANDLED_MAIN
}
stock is_admin_msg(const Message[])
{
if(Message[0] == '@')
return true;

return false;
}
stock is_empty_message(const Message[])
{
if(equal(Message, "") || !strlen(Message))
return true;

return false;
}
stock Chat(id,team,chat_type)
{
if(team)
{
if(chat_type)
{
for(new i = 0; i <= MaxPlayers; i++)
{
if(!is_user_connected(i))
continue

if(get_user_team(id) == get_user_team(i))
send_message(gMessage, id, i);
}
} else {
if(is_user_alive(id))
{
for(new i = 0; i <= MaxPlayers; i++)
{
if(!is_user_connected(i) || !is_user_alive(i))
continue

if(get_user_team(id) == get_user_team(i))
send_message(gMessage, id, i);
}
} else if(!is_user_alive(id)){
for(new i = 0; i <= MaxPlayers; i++)
{
if(!is_user_connected(i) || is_user_alive(i))
continue

if(get_user_team(id) == get_user_team(i))
send_message(gMessage, id, i);
}
}
}
} else{
if(chat_type)
{
for(new i = 0; i <= MaxPlayers; i++)
{
if(!is_user_connected(i))
continue

send_message(gMessage, id, i);
}
} else {
if(is_user_alive(id))
{
for(new i = 0; i <= MaxPlayers; i++)
{
if(!is_user_connected(i) || !is_user_alive(i))
continue

send_message(gMessage, id, i);
}
} else if(!is_user_alive(id)){
for(new i = 0; i <= MaxPlayers; i++)
{
if(!is_user_connected(i) || is_user_alive(i))
continue

send_message(gMessage, id, i);
}
}
}
}
}
stock send_message(const message[], const id, const i)
{
message_begin(MSG_ONE, gSayText, {0, 0, 0}, i)
write_byte(id)
write_string(message)
message_end()
}
stock is_has_slash(const Message[])
{
if(Message[0] == '/')
return true;

return false;
}

public client_infochanged(id)
{
new newname[32],oldname[32]
get_user_info(id, "name", newname,31)
get_user_name(id,oldname,31)
if(!is_user_connected(id) || is_user_bot(id))
return PLUGIN_CONTINUE

if(!equali(newname, oldname))
{
new szTableName[32],ErrorCode;
new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
new Handle:Queries = SQL_PrepareQuery(SqlConnection, "UPDATE `%s` SET `name`='%s' WHERE `id`='%d';",szTableName,newname,UserData[id][gId]);
if(!SQL_Execute(Queries))
{
SQL_QueryError(Queries,g_Error,511)
log_amx(g_Error);
SQL_FreeHandle(Queries);
SQL_FreeHandle(SqlConnection);
return PLUGIN_CONTINUE;
}
SQL_FreeHandle(Queries);
}
return PLUGIN_CONTINUE
}
public msg_SayText()
{
new arg[32]
get_msg_arg_string(2, arg, 31)
if(containi(arg,"name")!=-1)
return PLUGIN_HANDLED

return PLUGIN_CONTINUE
}
/////////// natives
public plugin_natives()
{
register_native("get_user_exp", "native_get_user_exp", 1);
register_native("get_user_lvl", "native_get_user_lvl", 1);
register_native("set_user_exp", "native_set_user_exp", 1);
register_native("set_user_lvl", "native_set_user_lvl", 1);
register_native("get_user_rankname", "native_get_user_rankname", 1);
}
public native_set_user_exp(id,num)
{
UserData[id][gExp] = num;
}
public native_set_user_lvl(id,num)
{
UserData[id][gLevel] = num;
}
public native_get_user_exp(id)
{
return UserData[id][gExp];
}
public native_get_user_lvl(id)
{
return UserData[id][gLevel];
}
public native_get_user_rankname(id)
{
static szRankName[64];
format(szRankName, charsmax(szRankName), "%L",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
return szRankName;
}
//////// informer
public Info()
{
for(new id = 0; id <= MaxPlayers; id++)
{
if(!is_user_bot(id) && is_user_connected(id))
{
set_hudmessage(100, 100, 100, 0.01, 0.13, 0, 1.0, 1.0, _, _, -1)

static buffer[192], len;
len = format(buffer, charsmax(buffer), "%L",LANG_PLAYER,"ZVANIE");
len += format(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
if(UserData[id][gLevel] <= 19)
{
len += format(buffer[len], charsmax(buffer) - len, "^n%L",LANG_PLAYER,"PL_XP",UserData[id][gExp],gLevels[UserData[id][gLevel]]);
} else {
len += format(buffer[len], charsmax(buffer) - len, "^n%L",LANG_PLAYER,"PL_MAX");
}
ShowSyncHudMsg(id, g_MsgHud, "%s", buffer);
}
}
return PLUGIN_CONTINUE
}
public StatusText()
{
for(new id = 0; id <= MaxPlayers; id++)
{
if(!is_user_bot(id) && is_user_connected(id) && is_user_alive(id))
{
static buffer[100], len;
len = format(buffer, charsmax(buffer), "%L",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
if(UserData[id][gLevel] <= 19)
{
len += format(buffer[len], charsmax(buffer) - len, " | %L",LANG_PLAYER,"PL_XP_STEXT",UserData[id][gExp],gLevels[UserData[id][gLevel]]);
} else {
len += format(buffer[len], charsmax(buffer) - len, " | %L",LANG_PLAYER,"PL_MAX");
}
message_begin(MSG_ONE_UNRELIABLE, gStatusText, _, id)
write_byte(0)
write_string(buffer)
message_end();
}
}
}
/////// weap menu per lvl
public GetWeapon(id)
{
new szText[700 char];
formatex( szText, charsmax( szText ), "%L", id, "GW_TITLE");
new menu = menu_create( szText, "gw_menu" );
//
formatex( szText, charsmax( szText ), "awp");
menu_additem( menu, szText, "1", 0 );
//
formatex( szText, charsmax( szText ), "ak-47");
menu_additem( menu, szText, "2", 0 );
//
formatex( szText, charsmax( szText ), "m4a1");
menu_additem( menu, szText, "3", 0 );
//
formatex( szText, charsmax( szText ), "famas");
menu_additem( menu, szText, "4", 0 );
//
menu_setprop( menu, MPROP_EXIT, MEXIT_ALL );
menu_display( id, menu,0);
return PLUGIN_CONTINUE;
}
public gw_menu(id,menu,item)
{
if( item == MENU_EXIT )
{
return PLUGIN_HANDLED;
}

new data[ 6 ], iName[ 64 ], access, callback;
menu_item_getinfo( menu, item, access, data, charsmax( data ), iName, charsmax( iName ), callback );
new key = str_to_num( data );
switch( key )
{
case 1:
{
give_item(id,"weapon_awp");
cs_set_user_bpammo( id, CSW_AWP, 100);
}
case 2:
{
give_item(id,"weapon_ak47");
cs_set_user_bpammo( id, CSW_AK47, 200);
}
case 3:
{
give_item(id,"weapon_m4a1");
cs_set_user_bpammo( id, CSW_M4A1, 200);
}
case 4:
{
give_item(id,"weapon_famas");
cs_set_user_bpammo( id, CSW_FAMAS, 200);
}
}

return PLUGIN_HANDLED;
}
public QueryHandler(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
switch(FailState)
{
case -2: log_amx("[Army Ranks] Failed to connect (%d): %s", Errcode, Error);
case -1: log_amx("[Army Ranks] (%d): %s", Errcode, Error);
}
return PLUGIN_HANDLED
}
public fw_ServerDown()
{
for(new i = 0; i <= MaxPlayers; i++)
{
if(is_user_connected(i))
save_usr(i)
}
}
public admin_menu(id)
{
new szText[700 char];
formatex( szText, charsmax( szText ), "%L", id, "ARMY_MENU");
new menu = menu_create( szText, "admin_menu_hl" );
//
formatex( szText, charsmax( szText ), "%L", id, "ADD_EXP");
menu_additem( menu, szText, "1", 0 );
formatex( szText, charsmax( szText ), "%L", id, "SET_LVL");
menu_additem( menu, szText, "2", 0 );
//
menu_setprop( menu, MPROP_EXIT, MEXIT_ALL );
menu_display( id, menu,0);
return PLUGIN_CONTINUE;
}
public admin_menu_hl(id,menu,item)
{
if( item == MENU_EXIT )
{
return PLUGIN_HANDLED;
}

new data[ 6 ], iName[ 64 ], access, callback;
menu_item_getinfo( menu, item, access, data, charsmax( data ), iName, charsmax( iName ), callback );
new key = str_to_num( data );
switch( key )
{
case 1:
{
give_exp_menu(id);
}
case 2:
{
set_level_menu(id)
}
}

return PLUGIN_HANDLED;
}
public give_exp_menu(id)
{
if(get_user_flags(id) & ADM_MENU)
{
new players[32], num;
get_players(players, num)
new tempname[32], info[10];
new players_menu = menu_create("Выберите игрока :", "give_exp_hl")
for(new i = 0; i < num; i++)
{
get_user_name(players[i], tempname, 31);
num_to_str(players[i], info, 9);
menu_additem(players_menu, tempname, info, 0);
}
menu_setprop(players_menu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, players_menu, 0);
}
return PLUGIN_CONTINUE
}
public give_exp_hl(id, players_menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(players_menu)
return PLUGIN_HANDLED
}
new data[6],accessmenu, iName[64], callback;
menu_item_getinfo(players_menu, item, accessmenu, data, charsmax(data), iName, charsmax(iName), callback)
new player = str_to_num(data)
client_cmd(id, "messagemode ^"add_exp %i^"", player);
ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"TYPE_AMOUNT");
return PLUGIN_CONTINUE
}

public add_exp_post(id)
{
if(get_user_flags(id) & ADM_MENU)
{
new param[10]
read_argv(2, param, charsmax(param))
for (new x; x < strlen(param); x++)
{
if(!isdigit(param[x]))
{
ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"MUST_NUM")
give_exp_menu(id)
return PLUGIN_HANDLED
}
}
new amount = str_to_num(param);
if (amount < 1)
{
ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"MIN_EXP")
give_exp_menu(id)
return PLUGIN_HANDLED
}
if (amount > 999)
{
ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"MAX_EXP")
give_exp_menu(id)
return PLUGIN_HANDLED
}
read_argv(1, param, charsmax(param))
new player = str_to_num(param)
//
UserData[player][gExp] += amount;
if(UserData[player][gLevel] <= 0)
UserData[player][gLevel] = 1;

while(UserData[player][gExp] >= gLevels[UserData[player][gLevel]])
UserData[player][gLevel]++;
//
new names[2][32]
get_user_name(id, names[0], 31)
get_user_name(player, names[1], 31)
ColorChat(0, NORMAL, "^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"ADMIN_ADD", names[0], amount, names[1]);
save_usr(player);
}
return PLUGIN_HANDLED
}
public set_level_menu(id)
{
if(get_user_flags(id) & ADM_MENU)
{
UserData[id][gTempKey] = 0;
new players[32], num;
get_players(players, num)
new tempname[32], info[10];
new players_menu = menu_create("Выберите игрока :", "set_level_hl")
for(new i = 0; i < num; i++)
{
get_user_name(players[i], tempname, 31);
num_to_str(players[i], info, 9);
menu_additem(players_menu, tempname, info, 0);
}
menu_setprop(players_menu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, players_menu, 0);
}
return PLUGIN_CONTINUE
}
public set_level_hl(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], _access, callback;
menu_item_getinfo( menu, item, _access, data, charsmax(data), _, _, callback);
UserData[id][gTempKey] = str_to_num(data);
set_level_pl(id);
return PLUGIN_CONTINUE
}
public set_level_pl(id)
{
static szText[1024];
formatex(szText,charsmax(szText), "%L", id, "CHOOSE_RANKN");
new menu = menu_create( szText, "set_level_phl");
//======
for(new i = 1; i < sizeof(gRankNames); i++)
{
new szItem[100],lang[10],num[5];
format(lang,9,"I_%d",i);
format(num,4,"%d",i);
formatex(szItem,charsmax(szItem),"%L",id,lang);
menu_additem(menu,szItem,num);
}
//======
menu_setprop(menu, MPROP_BACKNAME, "Назад ");
menu_setprop(menu, MPROP_NEXTNAME, "Далее ");
menu_setprop(menu, MPROP_EXITNAME, "Выход ");
menu_display( id, menu,0);
return PLUGIN_CONTINUE;
}
public set_level_phl(id,menu,item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], _access, callback;
menu_item_getinfo( menu, item, _access, data, charsmax(data), _, _, callback);
new level = str_to_num(data);
if(UserData[id][gTempKey] >= 1 && UserData[id][gTempKey] <= 32)
{
UserData[UserData[id][gTempKey]][gLevel] = level;
UserData[UserData[id][gTempKey]][gExp] = gLevels[level-1];
new szName[2][32];
get_user_name(id, szName[0], 31);
get_user_name(UserData[id][gTempKey], szName[1], 31);
ColorChat(0, NORMAL, "^4[^3Army Ranks^4]^1 %L %L %s",LANG_PLAYER,"ADMIN_LEVEL", szName[0],LANG_PLAYER,gRankNames[level],szName[1])
save_usr(UserData[id][gTempKey]);
} else {
set_level_menu(id);
}
UserData[id][gTempKey] = 0;
return PLUGIN_HANDLED;
}


косяк в том что

в логах пишет следующие
Скрытый текст
L 01/14/2014 - 20:54:28: Info (map "de_dust2") (file "addons/amxmodx/logs/error_20140114.log")
L 01/14/2014 - 20:54:28: [AMXX] Plugin ("army_ranks.amxx") is setting itself as failed.
L 01/14/2014 - 20:54:28: [AMXX] Plugin says: Can't connect to MySQL server on 'localhost' (10061)
L 01/14/2014 - 20:54:28: [AMXX] Run time error 1 (plugin "army_ranks.amxx") - forced exit


amxх.cfg прописано
Скрытый текст
restrict_maps "0" // вкл запрет бонусов на карте.
level_bonus "1" // вкл оружие при получении уровня.
flash_nades "1" // вкл бонуса флешек
smoke_nades "1" // вкл бонуса дымовых
he_nades "1" // вкл бонуса осколочных
hp_by_level "0" // кол-во хп, которое дается за лвл, если = 0 - то выкл
ap_by_level "0" // кол-во брони, которое дается за лвл, если = 0 - то выкл
hide_radar "0" // скрывать радар у игрока
army_chat "1" // использовать чат плагина, то есть приставка в чате, цвет сообщ. для админа
admin_color "1" // 1 = сообщ.админа зеленое,0 = желтое, 2 = цвета команды
save_type "0" // 0 - nvault, 1- mysql.
slash_messages "1" // не отображать команды со слэшем
team_kill_lost_xp "1" // терять exp при тимкилле
lost_xp_val "3" // кол-во теряемых exp при тк
level_up_msg "1" // сообщение при лвл-апе игрока : 1- вкл (всем), 2 - только игроку
progress_bar_pos "0" // расположение данных игрока: 0 - hud(под радаром), 1 - под чатом
min_players "1" // мин.кол-во игроков для получения опыта за действия с бомбой
bomb_xp "1" // вкл получения опыта над действиями с бомбой
bdefuse_xp "3" // кол-во получаемых exp при разминировании бомбы
bplant_xp "3"

Может я в чем то ошибся??

Отредактировал: Deniesha, - 14.1.2014, 17:07
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 15.1.2014, 3:08
Сообщение #307
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(Deniesha @ 14.1.2014, 18:43) *
Может я в чем то ошибся??

Точно ошиблись где-то. У вас плагин ведёт себя как будто бы save_type 1 стоит.
Сразу после запуска сервера посмотрите значение save_type там: amx_cvar save_type с клиента если.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Deniesha
сообщение 15.1.2014, 15:28
Сообщение #308


Стаж: 17 лет

Сообщений: 9
Благодарностей: 2
Полезность: 0

"save_type" is "0".... Как видно параметр выбран правильно.
А все смог решить проблему, каму интересно суть в том что каким то образом плагин зачитывает информацию не только с amxx.cfg но и из army_ranks.cfg Поэтому если кто то сталкивается с подобными ошибками советую проверить те 2 конфига...Лично я с мог решить проблему только так!

Отредактировал: Deniesha, - 15.1.2014, 15:32
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Safety1st
сообщение 15.1.2014, 15:32
Сообщение #309
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Я не вижу, что вы действительно хотите решить проблему. Ну, дело ваше.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Deniesha
сообщение 15.1.2014, 15:38
Сообщение #310


Стаж: 17 лет

Сообщений: 9
Благодарностей: 2
Полезность: 0

Да нет вы неправильно меня поняли...
] amx_cvar save_type
[AMXX] Значение "save_type" равно "0"
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 15.1.2014, 15:40
Сообщение #311
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Аа)
Спасибо, что сообщили найденное решение!

Цитата(Arctiq @ 26.3.2013, 15:43) *
Полезно знать:
...
Если вы ставите версию поновее - не забудьте ОБНОВИТЬ/изменить под себя army_ranks.cfg
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Deniesha
сообщение 15.1.2014, 15:42
Сообщение #312


Стаж: 17 лет

Сообщений: 9
Благодарностей: 2
Полезность: 0

Незашто.. Всегда сам рад помочь
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SivAnOl
сообщение 17.1.2014, 21:29
Сообщение #313


Стаж: 16 лет

Сообщений: 416
Благодарностей: 49
Полезность: 13

Приветствую всех!
Очень хотелось бы уточнить, сразу прошу прощения, если повторюсь.
Стоит Army Ranks 1.3.1 (в самом исходнике все квары изменены + в конфиге все квары идентичны).
Никаких ошибочных логов типа error_****.log нет.
Но! Есть логирование в основной лог amxx типа L********.log.
И сами записи бывают разного типа. К примеру:
Код
[army_ranks.amxx] Table 'serverb.hmm' doesn't exist

Либо:
Код
[army_ranks.amxx] [Army Ranks] (1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'HaBcErgA L y 4 LLl u u' :' WHERE `id`='0'' at line 1

Либо вообще:
Код
[army_ranks.amxx] [Army Ranks] Failed to connect (2003): Can't connect to MySQL server on '31.28.170.123' (4)

Сам лично я настроил ведение сохранения в базу MySQL (звания не слетают).
Но эти логи настараживают.
P.S. База данных вроде заполняется, веб-статистика обновляется (ссылка, НЕ РЕКЛАМА).
Так же приложу на всякий случай скрин с веб-панели хостинга с базой данных.

Кто сталкивался? Как решали? dntknw.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nicholas
сообщение 29.1.2014, 22:18
Сообщение #314
Стаж: 12 лет

Сообщений: 6
Благодарностей: 13
Полезность: 0

Подскажите пожалуйста, стоит данный плагин не через sql, работал нормально. Вот захотел обнулить ранги у всех, как это сделать?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя BornToBeFree
сообщение 30.1.2014, 14:13
Сообщение #315


Стаж: 12 лет

Сообщений: 741
Благодарностей: 287
Полезность: 602

Меценат Меценат

Цитата(Nicholas @ 30.1.2014, 0:18) *
Подскажите пожалуйста, стоит данный плагин не через sql, работал нормально. Вот захотел обнулить ранги у всех, как это сделать?

А через что, nvault ? Удали тогда файл рангов в папке vault


Скидка 5% при заказе сервера
Чтобы получить 5% скидку при заказе сервера на хостинге Serva4ok.ru
Необходимо ввести это кодовое слово gKUt-FENO-ZonE-aIaa
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nicholas
сообщение 30.1.2014, 22:12
Сообщение #316
Стаж: 12 лет

Сообщений: 6
Благодарностей: 13
Полезность: 0

Удалял,все ровно создает точно такой же и все ранги есть
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 30.1.2014, 22:16
Сообщение #317
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Так надо при выключенном сервере удалять.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mserega
сообщение 3.2.2014, 21:53
Сообщение #318
Стаж: 12 лет

Сообщений: 5
Благодарностей: 1
Полезность: 0

Ребят обьсните пожалуйста как исправить такую штуку у меня проблема конфикт из плигином statsx_shell и Colored_Translit. Что бы не обьяснять долго покажу на скрине

1. криво пишет в чате.
2. дублирует сообщение и без транслита.

я так понял что даже перестали работать некоторые команды типа /top15. зато работает /top10

Отредактировал: mserega, - 3.2.2014, 21:54
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя H9wko
сообщение 4.2.2014, 8:24
Сообщение #319
Стаж: 13 лет

Сообщений: 12
Благодарностей: 1
Полезность: 0

Подскажите как добавить префикс админам !!Что бы было как-то так >>> [Aдмин][Рядовой]
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SivAnOl
сообщение 15.2.2014, 17:44
Сообщение #320


Стаж: 16 лет

Сообщений: 416
Благодарностей: 49
Полезность: 13

Никто с ошибкой логов не поможет?
Лог ERROR
L 02/15/2014 - 14:53:53: [AMXX] Displaying debug trace (plugin "army_ranks.amxx")
L 02/15/2014 - 14:53:53: [AMXX] Run time error 4: index out of bounds
L 02/15/2014 - 14:53:53: [AMXX] [0] army_ranks.sma::next_load_data (line 472)
L 02/15/2014 - 14:53:53: [AMXX] [1] army_ranks.sma::load_data (line 399)
L 02/15/2014 - 14:53:53: [AMXX] [2] army_ranks.sma::client_putinserver (line 251)
Ошибка идет по всем картам.
Приложил сам плагин и код.
Код Плагина
#include <amxmodx>
#include <amxmisc>
#include <colorchat>
#include <fun>
#include <cstrike>
#include <nvault>
#include <sqlx>
#include <fakemeta>
//
#define PLUGIN "Army Ranks"
#define VERSION "1.3.1"
#define AUTHOR "Arctic"
#pragma tabsize 0
#define ADM_MENU ADMIN_LEVEL_A // menu access flag
//
new g_vault;
new Handle:g_SqlTuple;
new g_Error[512];
enum _:PlData
{
gId,gExp,gLevel,gTempKey
};
new UserData[33][PlData];
new gMessage[256];
new g_MsgHud,MaxPlayers,levelUp[33],gSayText,gStatusText
new bool:restr_blocked;
new const gRankNames[][] =
{
"I_0","I_1","I_2","I_3","I_4","I_5","I_6","I_7","I_8","I_9","I_10","I_11","I_12","I_13","I_14",
"I_15","I_16","I_17","I_18","I_19","I_20"
};
new const gLevels[] =
{
0,15,30,60,100,180,350,750,999,1500,2200,2800,3200,3900,4500,5000,5500,6000,7000
,8000
};
new const gNades[][] =
{
{0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1},
{0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1}
}
new const restrict_bonus[][] =
{
"35hp",
"most_wanted",
"$2000$",
"fy_extrapool",
"fy_pool_day",
"fy_snow",
"aim_map",
"$1000$",
"$3000$",
"35hp_2",
"aim_map_hlo",
"fy_attack",
"awp_assault",
"awp_city",
"awp_ruins",
"aim_aztec_vs_dust",
"awp_dust",
"awp_india",
"aim_headshot",
"awp_crossfire",
"aim_map_hlo",
"cf_snow_village",
"ka_wintershank"
};
new gRestrictMaps,gAdminGMsg,gBonusLevel,gFlash,gSmoke,gHe,gHpbylevel,gApbylevel
,gArmyChat,gSaveType,gTableName,gHost,gUser,gPassword,gDbName,gSlash,
gTk,gLostXpTk,gLevelUpmsg,gAllChat,gProgressBar,gBombDefuseXp,gBombPlantXp,gBomb
, gMinPlayers
//
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_cvar("army_ranks",VERSION, FCVAR_SERVER | FCVAR_SPONLY);
set_cvar_string("army_ranks",VERSION);
//
gRestrictMaps = register_cvar( "restrict_maps", "1");// вкл запрет бонусов на карте.
gBonusLevel = register_cvar( "level_bonus", "0");// вкл оружие при получении уровня.
gFlash = register_cvar( "flash_nades", "1");// вкл бонуса флешек
gSmoke = register_cvar( "smoke_nades", "1");// вкл бонуса дымовых
gHe = register_cvar( "he_nades", "1");// вкл бонуса осколочных
gHpbylevel = register_cvar( "hp_by_level", "1");// кол-во хп, которое дается за лвл, если = 0 - то выкл
gApbylevel = register_cvar( "ap_by_level", "5");// кол-во брони, которое дается за лвл, если = 0 - то выкл
gArmyChat = register_cvar( "army_chat", "1");// использовать чат плагина, то есть приставка в чате, цвет сообщ. для админа
gAdminGMsg = register_cvar( "admin_color", "1");// 1 = сообщ.админа зеленое,0 = желтое, 2 = цвета команды
gSaveType = register_cvar( "save_type", "1");// 0 - nvault, 1- mysql.
gSlash = register_cvar( "slash_messages", "1");// не отображать команды со слэшем
gTk = register_cvar( "team_kill_lost_xp", "0");// терять exp при тимкилле
gLostXpTk = register_cvar( "lost_xp_val", "0");// кол-во теряемых exp при тк
gLevelUpmsg = register_cvar( "level_up_msg", "1");// сообщение при лвл-апе игрока : 1- вкл (всем), 2 - только игроку
gAllChat = register_cvar( "all_chat", "0");// 1 - чат для всех(метвые и живые), 0-живые не видят чат мертвых и наоборот
/***/ gProgressBar = register_cvar( "progress_bar_pos", "0");// расположение данных игрока: 0 - hud(под радаром), 1 - под чатом
gMinPlayers = register_cvar( "min_players", "3");// мин.кол-во игроков для получения опыта за действия с бомбой
gBomb = register_cvar( "bomb_xp", "1");// вкл получения опыта над действиями с бомбой
gBombDefuseXp = register_cvar( "bdefuse_xp", "5");// кол-во получаемых exp при разминировании бомбы
gBombPlantXp = register_cvar( "bplant_xp", "3");// кол-во получаемых exp при минировании бомбы
// для mysql
gHost = register_cvar( "mysql_host", "31.28.170.123"); // host
gUser = register_cvar( "mysql_user", "serveru"); // username
gPassword = register_cvar( "mysql_password", "serverp"); // password
gDbName = register_cvar( "mysql_db_name", "serverb"); // database name
gTableName = register_cvar( "mysql_table_name", "army_ranks"); // название таблицы mysql
//
register_logevent( "EventRoundStart", 2, "1=Round_Start" );
register_forward(FM_Sys_Error, "fw_ServerDown");
register_forward(FM_GameShutdown, "fw_ServerDown");
register_forward(FM_ServerDeactivate, "fw_ServerDown");
register_event( "DeathMsg","EventDeath","a");
if(get_pcvar_num(gProgressBar) != 0){
set_task(1.0,"StatusText",_,_,_, "b");
} else {
set_task(1.0,"Info",_,_,_, "b");
}
//
register_message(get_user_msgid("SayText"), "msg_SayText");
gStatusText = get_user_msgid("StatusText");
gSayText = get_user_msgid ("SayText");
//
g_MsgHud = CreateHudSyncObj();
MaxPlayers = get_maxplayers();
register_dictionary("army.txt" );
//
if(get_pcvar_num(gRestrictMaps))
{
new szMapName[64];
get_mapname(szMapName,63);
for(new a = 0; a < sizeof restrict_bonus; a++)
{
if(equal(szMapName, restrict_bonus[a]))
{
restr_blocked = true;
log_amx("[army ranks] weapon menu is blocked on map [%s].",restrict_bonus[a]);
break;
} else {
restr_blocked = false;
}
}
}
//
switch(get_pcvar_num(gSaveType))
{
case 0:
{
g_vault = nvault_open("army_ranks");
}
case 1:
{
set_task(0.1, "sql_init");
}
default:
{
g_vault = nvault_open("army_ranks");
}
}
//
if(get_pcvar_num(gArmyChat))
{
register_clcmd("say", "hookSay")
register_clcmd("say_team", "hookSayTeam");
}
register_clcmd("add_exp", "add_exp_post")
register_clcmd("amx_setlevel", "admin_menu")
}
public plugin_cfg()
{
new szCfgDir[64], szFile[192];
get_configsdir(szCfgDir, charsmax(szCfgDir));
formatex(szFile,charsmax(szFile),"%s/army_ranks.cfg",szCfgDir);
if(file_exists(szFile))
server_cmd("exec %s", szFile);
}
public bomb_defused(id)
{
if(!is_user_connected(id)|| !is_user_alive(id) || get_user_team(id) != 2 || get_pcvar_num(gBombDefuseXp) < 1 || get_pcvar_num(gBomb) !=1)
return

if(get_playersnum() <= get_pcvar_num(gMinPlayers))
{
ColorChat(id,NORMAL,"[Армия]^1 %L",LANG_PLAYER,"MIN_PLAYERS")
} else {
UserData[id][gExp] += get_pcvar_num(gBombDefuseXp);
ColorChat(id,NORMAL,"[Армия]^1 %L",LANG_PLAYER,"DEFUSE_XP",get_pcvar_num(gBombDefuseXp))
}
}
public bomb_planted(id)
{
if(!is_user_connected(id)|| !is_user_alive(id) || get_user_team(id) != 1 || get_pcvar_num(gBombPlantXp) < 1 || get_pcvar_num(gBomb) !=1)
return

if(get_playersnum() <= get_pcvar_num(gMinPlayers))
{
ColorChat(id,NORMAL,"[Армия]^1 %L",LANG_PLAYER,"MIN_PLAYERS")
} else {
UserData[id][gExp] += get_pcvar_num(gBombPlantXp);
ColorChat(id,NORMAL,"[Армия]^1 %L",LANG_PLAYER,"PLANT_XP",get_pcvar_num(gBombPlantXp))
}
}
//
public sql_init()
{
new szTableName[64],szHost[64],szUser[64],szPassword[64],szDbName[64],ErrorCode;
get_pcvar_string(gTableName,szTableName,63);
get_pcvar_string(gHost,szHost,63);
get_pcvar_string(gUser,szUser,63);
get_pcvar_string(gPassword,szPassword,63);
get_pcvar_string(gDbName,szDbName,63);
g_SqlTuple = SQL_MakeDbTuple(szHost,szUser,szPassword,szDbName);
new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
if(SqlConnection == Empty_Handle)
set_fail_state(g_Error);

new Handle:Queries = SQL_PrepareQuery(SqlConnection,"CREATE TABLE IF NOT EXISTS `%s`(`id` INT(10) NOT NULL AUTO_INCREMENT,`name` VARCHAR(32) NOT NULL,`exp` INT(10) NOT NULL,`level` INT(10) NOT NULL,PRIMARY KEY (id));", szTableName)
if(!SQL_Execute(Queries))
{
SQL_QueryError(Queries,g_Error,charsmax(g_Error))
set_fail_state(g_Error);
}
SQL_FreeHandle(Queries)
SQL_FreeHandle(SqlConnection);
}
//
public plugin_end()
{
switch(get_pcvar_num(gSaveType))
{
case 0:
{
nvault_close(g_vault);
}
case 1:
{
if(g_SqlTuple != Empty_Handle)
SQL_FreeHandle(g_SqlTuple);
}
default:
{
nvault_close(g_vault);
}
}
}
//
public client_putinserver(id) // путинсервер)
{
for(new i = 0; i<PlData ; i++)
UserData[id][i] = 0;

load_data(id);
}
//
public client_disconnect(id)
{
save_usr(id);
for(new i = 0; i<PlData ; i++)
UserData[id][i] = 0;
}
//
public check_level(id)
{
if(UserData[id][gLevel] <= 0)
UserData[id][gLevel] = 1;

if(UserData[id][gExp] < 0)
UserData[id][gExp] = 0;

while(UserData[id][gExp] >= gLevels[UserData[id][gLevel]])
{
UserData[id][gLevel]++;
levelUp[id] = 1;
switch(get_pcvar_num(gLevelUpmsg))
{
case 1:
{
new szName[33];
get_user_name(id, szName, 32);
static buffer[192],len;
len = format(buffer, charsmax(buffer), "[Армия]^1 %L ^4%s^1",LANG_PLAYER,"PLAYER",szName);
len += format(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,"NEW_LEVEL");
len += format(buffer[len], charsmax(buffer) - len, " ^4%L^1.",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
len += format(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,"CONTR");
ColorChat(0,NORMAL,buffer);
}
case 2:
{
new szName[33];
get_user_name(id, szName, 32);
static buffer[192],len;
len = format(buffer, charsmax(buffer), "[Армия]^1 %L ^4%s^1",LANG_PLAYER,"PLAYER",szName);
len += format(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,"NEW_LEVEL");
len += format(buffer[len], charsmax(buffer) - len, " ^4%L^1.",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
len += format(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,"CONTR");
ColorChat(id,NORMAL,buffer);
}
}
}
}
public EventDeath()
{
new iKiller = read_data(1);
new iVictim = read_data(2);
new head = read_data(3);
if(iKiller != iVictim && is_user_connected(iKiller) && is_user_connected(iVictim) && UserData[iKiller][gLevel] <= 19)
{
// if tk?
if(get_pcvar_num(gTk) && get_user_team(iKiller) == get_user_team(iVictim))
{
UserData[iKiller][gExp] -= get_pcvar_num(gLostXpTk);
return PLUGIN_CONTINUE;
}
new weapon = get_user_weapon(iKiller);
UserData[iKiller][gExp] += 1;
if(weapon == CSW_KNIFE)
UserData[iKiller][gExp] += 3;

if(head)
UserData[iKiller][gExp] += 2;

if(weapon == CSW_HEGRENADE)
UserData[iKiller][gExp] += 1;

check_level(iKiller);
}
return PLUGIN_CONTINUE;
}
public EventRoundStart()
{
for(new id = 0; id <= MaxPlayers; id++)
{
if(is_user_alive(id) && is_user_connected(id))
{
if(restr_blocked)
return PLUGIN_CONTINUE;

if(get_pcvar_num(gFlash) && gNades[0][UserData[id][gLevel]])
give_item(id,"weapon_flashbang");

if(get_pcvar_num(gSmoke) && gNades[1][UserData[id][gLevel]])
give_item(id,"weapon_smokegrenade");

if(get_pcvar_num(gHe) && gNades[2][UserData[id][gLevel]])
give_item(id,"weapon_hegrenade");

if(get_pcvar_num(gHpbylevel) != 0)
set_user_health(id,get_user_health(id)+get_pcvar_num(gHpbylevel)*UserData[id][gL
evel]);

if(get_pcvar_num(gApbylevel) != 0)
set_user_armor(id,get_user_armor(id)+get_pcvar_num(gApbylevel)*UserData[id][gLev
el]);

if(levelUp[id] == 1 && get_pcvar_num(gBonusLevel))
{
GetWeapon(id);
levelUp[id] = 0;
}
}
}
return PLUGIN_CONTINUE;
}
////////// save
public load_data(id)
{
new szName[33];
get_user_name(id,szName,32);
switch(get_pcvar_num(gSaveType))
{
case 0:
{
static data[256], timestamp;
if(nvault_lookup(g_vault, szName, data, sizeof(data) - 1, timestamp) )
{
next_load_data(id, data, sizeof(data) - 1);
return;
} else {
register_player(id,"");
}
}
case 1:
{
new szTableName[32],ErrorCode;
new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
SQL_QuoteString(SqlConnection, szName, 32, szName);
get_pcvar_string(gTableName,szTableName,31);
if(SqlConnection == Empty_Handle)
{
log_amx(g_Error);
return ;
}
new Handle:Query = SQL_PrepareQuery(SqlConnection,"SELECT id FROM %s WHERE name = '%s';",szTableName,szName)
if(!SQL_Execute(Query))
{
SQL_QueryError(Query,g_Error,511);
log_amx(g_Error);
return ;
}
if(SQL_NumResults(Query) > 0 )
{
next_load_data(id, "", 0);
} else {
register_player(id,"");
}
SQL_FreeHandle(Query);
SQL_FreeHandle(SqlConnection);
}
default:
{
static data[256], timestamp;
if(nvault_lookup(g_vault, szName, data, sizeof(data) - 1, timestamp) )
{
next_load_data(id, data, sizeof(data) - 1);
return;
} else {
register_player(id,"");
}
}
}
}
public next_load_data(id,data[],len)
{
new szName[33];
get_user_name(id,szName,32);
switch(get_pcvar_num(gSaveType))
{
case 0:
{
replace_all(data,len,"|"," ");
new exp[5],level[5];
parse(data,exp,4,level,4);
UserData[id][gExp]= str_to_num(exp);
UserData[id][gLevel]= str_to_num(level);
}
case 1:
{
new szTableName[32],ErrorCode;
new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
SQL_QuoteString(SqlConnection, szName, 32, szName);
get_pcvar_string(gTableName,szTableName,31);
if(SqlConnection == Empty_Handle)
{
log_amx(g_Error);
return ;
}
new Handle:Query = SQL_PrepareQuery(SqlConnection,"SELECT id,exp,level FROM %s WHERE name = '%s';",szTableName,szName)
if(!SQL_Execute(Query))
{
SQL_QueryError(Query,g_Error,511)
log_amx(g_Error)
}
if( SQL_NumResults(Query) > 0)
{
UserData[id][gId]= SQL_ReadResult(Query,0);
UserData[id][gExp]= SQL_ReadResult(Query,1);
UserData[id][gLevel]= SQL_ReadResult(Query,2);
}
SQL_FreeHandle(Query);
SQL_FreeHandle(SqlConnection);
}
default:
{
replace_all(data,len,"|"," ");
new exp[5],level[5];
parse(data,exp,4,level,4);
UserData[id][gExp]= str_to_num(exp);
UserData[id][gLevel]= str_to_num(level);
}
}
// mini-check lvl_up
if(UserData[id][gLevel] <= 0)
UserData[id][gLevel] = 1;

while(UserData[id][gExp] >= gLevels[UserData[id][gLevel]])
UserData[id][gLevel]++;
}
public register_player(id,data[])
{
new szName[33];
get_user_name(id,szName,32);
switch(get_pcvar_num(gSaveType))
{
case 0:
{
UserData[id][gExp]= 0
UserData[id][gLevel]= 1;
}
case 1:
{
new szTableName[32],ErrorCode;
new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
SQL_QuoteString(SqlConnection, szName, 32, szName);
get_pcvar_string(gTableName,szTableName,31);
if(SqlConnection == Empty_Handle)
{
log_amx(g_Error);
return ;
}
new Handle:Query = SQL_PrepareQuery(SqlConnection,"INSERT INTO %s (`id`,`name`,`exp`,`level`) VALUES (NULL,'%s','0','1');",szTableName,szName);
if(!SQL_Execute(Query))
{
SQL_QueryError(Query,g_Error,511)
log_amx(g_Error)
}
SQL_FreeHandle(Query);
SQL_FreeHandle(SqlConnection);
UserData[id][gExp] = 0;
UserData[id][gLevel] = 1;
get_user_id(id);
}
default:
{
UserData[id][gExp]= 0;
UserData[id][gLevel]= 1;
}
}
}
public save_usr(id)
{
new szName[33];
get_user_name(id,szName,32);
switch(get_pcvar_num(gSaveType))
{
case 0:
{
static data[256];
formatex(data, 255, "|%i|%i|", UserData[id][gExp],UserData[id][gLevel]);
nvault_set(g_vault, szName, data);
}
case 1:
{
new szTemp[512],szTable[64];
get_pcvar_string(gTableName,szTable,63);
format(szTemp,charsmax(szTemp),"UPDATE `%s` SET `exp`='%d',`level`='%d' WHERE `id`='%d';",szTable,UserData[id][gExp],UserData[id][gLevel],UserData[id][gId]);
SQL_ThreadQuery(g_SqlTuple,"QueryHandler",szTemp)

server_print("==========================================");
server_print("UPDATE `%s` SET `exp`='%d',`level`='%d' WHERE `id`='%d';",szTable,UserData[id][gExp],UserData[id][gLevel],UserData[id][gId]);

}
default:
{
static data[256];
formatex(data, 255, "|%i|%i|", UserData[id][gExp],UserData[id][gLevel]);
nvault_set(g_vault, szName, data);
}
}
}
stock get_user_id(id)
{
new szName[33],ErrorCode;
get_user_name(id,szName,32);
new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
SQL_QuoteString(SqlConnection, szName, 32, szName);
if(SqlConnection == Empty_Handle)
{
log_amx(g_Error);
return;
}
new Handle:Query = SQL_PrepareQuery(SqlConnection,"SELECT id FROM hmm WHERE name = '%s';",szName)
if(!SQL_Execute(Query))
{
SQL_QueryError(Query,g_Error,511);
log_amx(g_Error);
return;
}
if(SQL_NumResults(Query) > 0 )
UserData[id][gId]= SQL_ReadResult(Query,0);
SQL_FreeHandle(Query);
SQL_FreeHandle(SqlConnection);
}
///////// chat event
public hookSay(id)
{
if(is_user_hltv(id) || is_user_bot(id) || !is_user_connected(id))
return PLUGIN_CONTINUE;

new message[192],Len;
read_args(message, 191);
remove_quotes(message);
if(is_admin_msg(message))
return PLUGIN_CONTINUE;

if(is_empty_message(message))
{
ColorChat(id,NORMAL,"[Армия]^1 %L",LANG_PLAYER,"EMPTY_MSG")
return PLUGIN_HANDLED
}
if(get_pcvar_num(gSlash))
{
if(is_has_slash(message))
return PLUGIN_HANDLED_MAIN
}
new szName[32];
get_user_name(id,szName,31);
if(is_user_admin(id))
{
Len = format(gMessage[Len], charsmax(gMessage) - 1, "^4[^3%L^4] ",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
switch(get_pcvar_num(gAdminGMsg))
{
case 1:
{
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "%s",message);
}
case 2:
{
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s",message);
}
default:
{
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
}
}
Chat(id,0,get_pcvar_num(gAllChat));
}
else
{
Len = format(gMessage[Len], charsmax(gMessage) - 1, "^4[^3%L^4] ",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
Chat(id,0,get_pcvar_num(gAllChat));
}
return PLUGIN_HANDLED_MAIN
}
public hookSayTeam(id)
{
if(is_user_hltv(id) || is_user_bot(id) || !is_user_connected(id))
return PLUGIN_CONTINUE;

new message[192],Len;
read_args(message, 191);
remove_quotes(message);
if(is_admin_msg(message))
return PLUGIN_CONTINUE;

if(is_empty_message(message))
{
ColorChat(id,NORMAL,"[Армия]^1 %L",LANG_PLAYER,"EMPTY_MSG");
return PLUGIN_HANDLED
}
if(get_pcvar_num(gSlash))
{
if(is_has_slash(message))
return PLUGIN_HANDLED_MAIN
}
new szName[32];
get_user_name(id,szName,31);
if(is_user_admin(id))
{
Len = format(gMessage[Len], charsmax(gMessage) - 1, "^3%L^1 ^4[^3%L^4] ^3%s^4 : ",LANG_PLAYER,"SEND_TEAM",LANG_PLAYER,gRankNames[UserData[id][gLevel]],szName);
switch(get_pcvar_num(gAdminGMsg))
{
case 1:
{
Len += format(gMessage[Len], charsmax(gMessage) - 1, "%s",message);
}
case 2:
{
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s",message);
}
default:
{
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
}
}
Chat(id,1,get_pcvar_num(gAllChat));
}
else
{
Len = format(gMessage[Len], charsmax(gMessage) - 1, "^3%L^1 ^4[^3%L^4] ",LANG_PLAYER,"SEND_TEAM",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
Chat(id,1,get_pcvar_num(gAllChat));
}
return PLUGIN_HANDLED_MAIN
}
stock is_admin_msg(const Message[])
{
if(Message[0] == '@')
return true;

return false;
}
stock is_empty_message(const Message[])
{
if(equal(Message, "") || !strlen(Message))
return true;

return false;
}
stock Chat(id,team,chat_type)
{
if(team)
{
if(chat_type)
{
for(new i = 0; i <= MaxPlayers; i++)
{
if(!is_user_connected(i))
continue

if(get_user_team(id) == get_user_team(i))
send_message(gMessage, id, i);
}
} else {
if(is_user_alive(id))
{
for(new i = 0; i <= MaxPlayers; i++)
{
if(!is_user_connected(i) || !is_user_alive(i))
continue

if(get_user_team(id) == get_user_team(i))
send_message(gMessage, id, i);
}
} else if(!is_user_alive(id)){
for(new i = 0; i <= MaxPlayers; i++)
{
if(!is_user_connected(i) || is_user_alive(i))
continue

if(get_user_team(id) == get_user_team(i))
send_message(gMessage, id, i);
}
}
}
} else{
if(chat_type)
{
for(new i = 0; i <= MaxPlayers; i++)
{
if(!is_user_connected(i))
continue

send_message(gMessage, id, i);
}
} else {
if(is_user_alive(id))
{
for(new i = 0; i <= MaxPlayers; i++)
{
if(!is_user_connected(i) || !is_user_alive(i))
continue

send_message(gMessage, id, i);
}
} else if(!is_user_alive(id)){
for(new i = 0; i <= MaxPlayers; i++)
{
if(!is_user_connected(i) || is_user_alive(i))
continue

send_message(gMessage, id, i);
}
}
}
}
}
stock send_message(const message[], const id, const i)
{
message_begin(MSG_ONE, gSayText, {0, 0, 0}, i)
write_byte(id)
write_string(message)
message_end()
}
stock is_has_slash(const Message[])
{
if(Message[0] == '/')
return true;

return false;
}

public client_infochanged(id)
{
new newname[32],oldname[32]
get_user_info(id, "name", newname,31)
get_user_name(id,oldname,31)
if(!is_user_connected(id) || is_user_bot(id))
return PLUGIN_CONTINUE

if(!equali(newname, oldname))
{
new szTemp[512],szTable[64];
get_pcvar_string(gTableName,szTable,63);
format(szTemp,charsmax(szTemp),"UPDATE `%s` SET `name`='%s' WHERE `id`='%d';",szTable,newname,UserData[id][gId]);
SQL_ThreadQuery(g_SqlTuple,"QueryHandler",szTemp)
}
return PLUGIN_CONTINUE
}
public msg_SayText()
{
new arg[32]
get_msg_arg_string(2, arg, 31)
if(containi(arg,"name")!=-1)
return PLUGIN_HANDLED

return PLUGIN_CONTINUE
}
/////////// natives
public plugin_natives()
{
register_native("get_user_exp", "native_get_user_exp", 1);
register_native("get_user_lvl", "native_get_user_lvl", 1);
register_native("set_user_exp", "native_set_user_exp", 1);
register_native("set_user_lvl", "native_set_user_lvl", 1);
register_native("get_user_rankname", "native_get_user_rankname", 1);
}
public native_set_user_exp(id,num)
{
UserData[id][gExp] = num;
}
public native_set_user_lvl(id,num)
{
UserData[id][gLevel] = num;
}
public native_get_user_exp(id)
{
return UserData[id][gExp];
}
public native_get_user_lvl(id)
{
return UserData[id][gLevel];
}
public native_get_user_rankname(id)
{
static szRankName[64];
format(szRankName, charsmax(szRankName), "%L",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
return szRankName;
}
//////// informer
public Info()
{
for(new id = 0; id <= MaxPlayers; id++)
{
if(!is_user_bot(id) && is_user_connected(id))
{
set_hudmessage(100, 100, 100, 0.01, 0.13, 0, 1.0, 1.0, _, _, -1)

static buffer[192], len;
len = format(buffer, charsmax(buffer), "%L",LANG_PLAYER,"ZVANIE");
len += format(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
if(UserData[id][gLevel] <= 19)
{
len += format(buffer[len], charsmax(buffer) - len, "^n%L",LANG_PLAYER,"PL_XP",UserData[id][gExp],gLevels[UserData[id][gLevel]]);
} else {
len += format(buffer[len], charsmax(buffer) - len, "^n%L",LANG_PLAYER,"PL_MAX");
}
ShowSyncHudMsg(id, g_MsgHud, "%s", buffer);
}
}
return PLUGIN_CONTINUE
}
public StatusText()
{
for(new id = 0; id <= MaxPlayers; id++)
{
if(!is_user_bot(id) && is_user_connected(id) && is_user_alive(id))
{
static buffer[100], len;
len = format(buffer, charsmax(buffer), "%L",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
if(UserData[id][gLevel] <= 19)
{
len += format(buffer[len], charsmax(buffer) - len, " | %L",LANG_PLAYER,"PL_XP_STEXT",UserData[id][gExp],gLevels[UserData[id][gLevel]]);
} else {
len += format(buffer[len], charsmax(buffer) - len, " | %L",LANG_PLAYER,"PL_MAX");
}
message_begin(MSG_ONE_UNRELIABLE, gStatusText, _, id)
write_byte(0)
write_string(buffer)
message_end();
}
}
}
/////// weap menu per lvl
public GetWeapon(id)
{
new szText[700 char];
formatex( szText, charsmax( szText ), "%L", id, "GW_TITLE");
new menu = menu_create( szText, "gw_menu" );
//
formatex( szText, charsmax( szText ), "awp");
menu_additem( menu, szText, "1", 0 );
//
formatex( szText, charsmax( szText ), "ak-47");
menu_additem( menu, szText, "2", 0 );
//
formatex( szText, charsmax( szText ), "m4a1");
menu_additem( menu, szText, "3", 0 );
//
formatex( szText, charsmax( szText ), "famas");
menu_additem( menu, szText, "4", 0 );
//
menu_setprop( menu, MPROP_EXIT, MEXIT_ALL );
menu_display( id, menu,0);
return PLUGIN_CONTINUE;
}
public gw_menu(id,menu,item)
{
if( item == MENU_EXIT )
{
return PLUGIN_HANDLED;
}

new data[ 6 ], iName[ 64 ], access, callback;
menu_item_getinfo( menu, item, access, data, charsmax( data ), iName, charsmax( iName ), callback );
new key = str_to_num( data );
switch( key )
{
case 1:
{
give_item(id,"weapon_awp");
cs_set_user_bpammo( id, CSW_AWP, 100);
}
case 2:
{
give_item(id,"weapon_ak47");
cs_set_user_bpammo( id, CSW_AK47, 200);
}
case 3:
{
give_item(id,"weapon_m4a1");
cs_set_user_bpammo( id, CSW_M4A1, 200);
}
case 4:
{
give_item(id,"weapon_famas");
cs_set_user_bpammo( id, CSW_FAMAS, 200);
}
}

return PLUGIN_HANDLED;
}
public QueryHandler(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
switch(FailState)
{
case -2: log_amx("[Army Ranks] Failed to connect (%d): %s", Errcode, Error);
case -1: log_amx("[Army Ranks] (%d): %s", Errcode, Error);
}
return PLUGIN_HANDLED
}
public fw_ServerDown()
{
for(new i = 0; i <= MaxPlayers; i++)
{
if(is_user_connected(i))
save_usr(i)
}
}
public admin_menu(id)
{
new szText[700 char];
formatex( szText, charsmax( szText ), "%L", id, "ARMY_MENU");
new menu = menu_create( szText, "admin_menu_hl" );
//
formatex( szText, charsmax( szText ), "%L", id, "ADD_EXP");
menu_additem( menu, szText, "1", 0 );
formatex( szText, charsmax( szText ), "%L", id, "SET_LVL");
menu_additem( menu, szText, "2", 0 );
//
menu_setprop( menu, MPROP_EXIT, MEXIT_ALL );
menu_display( id, menu,0);
return PLUGIN_CONTINUE;
}
public admin_menu_hl(id,menu,item)
{
if( item == MENU_EXIT )
{
return PLUGIN_HANDLED;
}

new data[ 6 ], iName[ 64 ], access, callback;
menu_item_getinfo( menu, item, access, data, charsmax( data ), iName, charsmax( iName ), callback );
new key = str_to_num( data );
switch( key )
{
case 1:
{
give_exp_menu(id);
}
case 2:
{
set_level_menu(id)
}
}

return PLUGIN_HANDLED;
}
public give_exp_menu(id)
{
if(get_user_flags(id) & ADM_MENU)
{
new players[32], num;
get_players(players, num)
new tempname[32], info[10];
new players_menu = menu_create("Выберите игрока :", "give_exp_hl")
for(new i = 0; i < num; i++)
{
get_user_name(players[i], tempname, 31);
num_to_str(players[i], info, 9);
menu_additem(players_menu, tempname, info, 0);
}
menu_setprop(players_menu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, players_menu, 0);
}
return PLUGIN_CONTINUE
}
public give_exp_hl(id, players_menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(players_menu)
return PLUGIN_HANDLED
}
new data[6],accessmenu, iName[64], callback;
menu_item_getinfo(players_menu, item, accessmenu, data, charsmax(data), iName, charsmax(iName), callback)
new player = str_to_num(data)
client_cmd(id, "messagemode ^"add_exp %i^"", player);
ColorChat(id,NORMAL,"[Армия]^1 %L",LANG_PLAYER,"TYPE_AMOUNT");
return PLUGIN_CONTINUE
}

public add_exp_post(id)
{
if(get_user_flags(id) & ADM_MENU)
{
new param[10]
read_argv(2, param, charsmax(param))
for (new x; x < strlen(param); x++)
{
if(!isdigit(param[x]))
{
ColorChat(id,NORMAL,"[Армия]^1 %L",LANG_PLAYER,"MUST_NUM")
give_exp_menu(id)
return PLUGIN_HANDLED
}
}
new amount = str_to_num(param);
if (amount < 1)
{
ColorChat(id,NORMAL,"[Армия]^1 %L",LANG_PLAYER,"MIN_EXP")
give_exp_menu(id)
return PLUGIN_HANDLED
}
if (amount > 999)
{
ColorChat(id,NORMAL,"[Армия]^1 %L",LANG_PLAYER,"MAX_EXP")
give_exp_menu(id)
return PLUGIN_HANDLED
}
read_argv(1, param, charsmax(param))
new player = str_to_num(param)
//
UserData[player][gExp] += amount;
if(UserData[player][gLevel] <= 0)
UserData[player][gLevel] = 1;

while(UserData[player][gExp] >= gLevels[UserData[player][gLevel]])
UserData[player][gLevel]++;
//
new names[2][32]
get_user_name(id, names[0], 31)
get_user_name(player, names[1], 31)
ColorChat(0, NORMAL, "[Армия]^1 %L",LANG_PLAYER,"ADMIN_ADD", names[0], amount, names[1]);
save_usr(player);
}
return PLUGIN_HANDLED
}
public set_level_menu(id)
{
if(get_user_flags(id) & ADM_MENU)
{
UserData[id][gTempKey] = 0;
new players[32], num;
get_players(players, num)
new tempname[32], info[10];
new players_menu = menu_create("Выберите игрока :", "set_level_hl")
for(new i = 0; i < num; i++)
{
get_user_name(players[i], tempname, 31);
num_to_str(players[i], info, 9);
menu_additem(players_menu, tempname, info, 0);
}
menu_setprop(players_menu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, players_menu, 0);
}
return PLUGIN_CONTINUE
}
public set_level_hl(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], _access, callback;
menu_item_getinfo( menu, item, _access, data, charsmax(data), _, _, callback);
UserData[id][gTempKey] = str_to_num(data);
set_level_pl(id);
return PLUGIN_CONTINUE
}
public set_level_pl(id)
{
static szText[1024];
formatex(szText,charsmax(szText), "%L", id, "CHOOSE_RANKN");
new menu = menu_create( szText, "set_level_phl");
//======
for(new i = 1; i < sizeof(gRankNames); i++)
{
new szItem[100],lang[10],num[5];
format(lang,9,"I_%d",i);
format(num,4,"%d",i);
formatex(szItem,charsmax(szItem),"%L",id,lang);
menu_additem(menu,szItem,num);
}
//======
menu_setprop(menu, MPROP_BACKNAME, "Назад ");
menu_setprop(menu, MPROP_NEXTNAME, "Далее ");
menu_setprop(menu, MPROP_EXITNAME, "Выход ");
menu_display( id, menu,0);
return PLUGIN_CONTINUE;
}
public set_level_phl(id,menu,item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], _access, callback;
menu_item_getinfo( menu, item, _access, data, charsmax(data), _, _, callback);
new level = str_to_num(data);
if(UserData[id][gTempKey] >= 1 && UserData[id][gTempKey] <= 32)
{
UserData[UserData[id][gTempKey]][gLevel] = level;
UserData[UserData[id][gTempKey]][gExp] = gLevels[level-1];
new szName[2][32];
get_user_name(id, szName[0], 31);
get_user_name(UserData[id][gTempKey], szName[1], 31);
ColorChat(0, NORMAL, "[Армия]^1 %L %L %s",LANG_PLAYER,"ADMIN_LEVEL", szName[0],LANG_PLAYER,gRankNames[level],szName[1])
save_usr(UserData[id][gTempKey]);
} else {
set_level_menu(id);
}
UserData[id][gTempKey] = 0;
return PLUGIN_HANDLED;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg1252\\ deff0{\\ fonttbl{\\ f0\\ fnil\\ fcharset0 Tahoma;}}\n{\\ colortbl ;\\ red0\\ green0\\ blue0;}\n\\ viewkind4\\ uc1\\ pard\\ cf1\\ lang1033\\ f0\\ fs16 \n\\ par }
*/
Некоторые жалуются что у них пропадают ранги, но большинство игроков нормально играют, люги пишутся, статистика на веб выводится... Вот только сама ошибка, кто знает отчего она...

Отредактировал: SivAnOl, - 15.2.2014, 17:45
Прикрепленные файлы:
Прикрепленный файл  army_ranks.sma ( 32,41 килобайт ) Кол-во скачиваний: 10
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
19 страниц V  « 15 16 17 18 »
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: