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

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

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

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

Армиранк по нику -> Армиранк по стим_ид

, Плавный переход ..
Статус пользователя ssx
сообщение 19.9.2014, 17:39
Сообщение #1


Стаж: 12 лет

Сообщений: 2237
Благодарностей: 1343
Полезность: 836

Подскажите как:

1. Как правильно плагином амхх записать timestamp что бы потом скриптом чистить записи старше N времени?
Поле в таблице создал .. Осталось туда записывать timestamp

2. Как правильно впихнуть функцию поиска по нику игрока после того как не нашло по стим_ид ?
И если найдет по нику - привяжет стим_ид (ну и заодно timestamp)

Что хочу сделать:
Переехать на стату по стим_ид без потери статистики.

Код армиранка по стим_ид взял отсюда http://amx-x.ru/viewtopic.php?f=8&t=21640

Кусок кода

Код:

public load_data(id)

{

new szName[33];

new szSteam[33]

get_user_name(id,szName,32);

get_user_authid(id,szSteam,charsmax(szSteam));

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, szSteam, 32, szSteam);

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 SteamId = '%s';",szTableName,szSteam)

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];

new szSteam[33];

get_user_name(id,szName,32);

get_user_authid(id,szSteam,charsmax(szSteam));

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, szSteam, 32, szSteam);

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 SteamId = '%s';",szTableName,szSteam)

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];

new szSteam[33];

get_user_name(id,szName,32);

get_user_authid(id,szSteam,charsmax(szSteam));

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, szSteam, 32, szSteam);

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`,`SteamId`,`Name`,`exp`,`level`) VALUES (NULL,'%s','%s','0','1');",szTableName,szSteam,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',`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]

new szSteam[33],ErrorCode;

get_user_name(id,szName,32);

get_user_authid(id,szSteam,charsmax(szSteam))

new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)

SQL_QuoteString(SqlConnection, szSteam, 32, szSteam);

if(SqlConnection == Empty_Handle)

{

log_amx(g_Error);

return;

}

new Handle:Query = SQL_PrepareQuery(SqlConnection,"SELECT id FROM `army_ranks` WHERE `SteamId` = '%s';",szSteam)

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);

}




[Half-Life DM FFA] 78.152.169.100:27016
[CS 1.6 GunGame] 78.152.169.100:27018
[CS 1.6 DM AIM] 78.152.169.100:27017
[CS 1.6 DM FFA] 78.152.169.100:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя RoccatZERO
сообщение 19.9.2014, 17:41
Сообщение #2
Стаж: 11 лет

Сообщений: 65
Благодарностей: 14
Полезность: 116

Мда, используете старый *** плагин, когда есть в разы лучше, к примеру AES
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ssx
сообщение 19.9.2014, 17:44
Сообщение #3


Стаж: 12 лет

Сообщений: 2237
Благодарностей: 1343
Полезность: 836

Цитата(RoccatZERO @ 19.9.2014, 17:41) *
Мда, используете старый *** плагин, когда есть в разы лучше, к примеру AES

Спасибо, я прекрасно знаю что есть AES и еще лучше знаю что мне он не подходит .


По сути у меня армиранк только для подсчета опыта и записи его в БД . То есть без всяких плюшек (мне не нужных).


[Half-Life DM FFA] 78.152.169.100:27016
[CS 1.6 GunGame] 78.152.169.100:27018
[CS 1.6 DM AIM] 78.152.169.100:27017
[CS 1.6 DM FFA] 78.152.169.100:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ssx
сообщение 19.9.2014, 17:50
Сообщение #4


Стаж: 12 лет

Сообщений: 2237
Благодарностей: 1343
Полезность: 836

По сути нужно как-то сделать что бы искало по стим_ид , если не нашло - искало по нику , если нашло то привязывало стим_ид к нику и в след раз уже по стим_ид будет находить. Если же и по нику не нашло то тогда регистрировать игрока (ид,стим_ид,ник,опыт,уровень,дата последнего входа)


[Half-Life DM FFA] 78.152.169.100:27016
[CS 1.6 GunGame] 78.152.169.100:27018
[CS 1.6 DM AIM] 78.152.169.100:27017
[CS 1.6 DM FFA] 78.152.169.100:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя RoccatZERO
сообщение 19.9.2014, 18:27
Сообщение #5
Стаж: 11 лет

Сообщений: 65
Благодарностей: 14
Полезность: 116

Цитата(ssx @ 19.9.2014, 20:50) *
По сути нужно как-то сделать что бы искало по стим_ид , если не нашло - искало по нику , если нашло то привязывало стим_ид к нику и в след раз уже по стим_ид будет находить. Если же и по нику не нашло то тогда регистрировать игрока (ид,стим_ид,ник,опыт,уровень,дата последнего входа)

Завтра, с новыми силами, сделаю.
Утро вечера мудренее;)

Неплохо бы было, если скинул бы ты весь код, а не кусочек;)

Отредактировал: RoccatZERO, - 19.9.2014, 18:23
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя ssx
сообщение 19.9.2014, 18:31
Сообщение #6


Стаж: 12 лет

Сообщений: 2237
Благодарностей: 1343
Полезность: 836

Цитата(RoccatZERO @ 19.9.2014, 18:27) *
Завтра, с новыми силами, сделаю.
Утро вечера мудренее;)

Неплохо бы было, если скинул бы ты весь код, а не кусочек;)


SQL в бд
Скрытый текст

Код
-- phpMyAdmin SQL Dump
-- version 3.1.1
-- http://www.phpmyadmin.net
--
-- Хост: localhost
-- Время создания: Сен 19 2014 г., 19:29
-- Версия сервера: 5.1.30
-- Версия PHP: 5.2.8

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- База данных: `army_ranks`
--

-- --------------------------------------------------------

--
-- Структура таблицы `army_ranks`
--

CREATE TABLE IF NOT EXISTS `army_ranks` (
  `SteamId` text,
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL,
  `exp` int(10) NOT NULL,
  `level` int(10) NOT NULL,
  `lastvisit` text,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=48776;

--
-- Дамп данных таблицы `army_ranks`
--

INSERT INTO `army_ranks` (`SteamId`, `id`, `name`, `exp`, `level`, `lastvisit`) VALUES
('STEAM_0:1:22878152', 1, 'ololo111a', 4321, 15, NULL);


плагин весь


[pawn]/*

Обещанного три года ждут ;)

*/

#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", "root"); // username

gPassword = register_cvar( "mysql_password", "qwerty"); // password

gDbName = register_cvar( "mysql_db_name", "database"); // 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,charsmax(szTableName));

get_pcvar_string(gHost,szHost,charsmax(szHost));

get_pcvar_string(gUser,szUser,charsmax(szUser));

get_pcvar_string(gPassword,szPassword,charsmax(szPassword));

get_pcvar_string(gDbName,szDbName,charsmax(szDbName));

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,`SteamId` varchar(32) NOT NULL, `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];

new szSteam[33]

get_user_name(id,szName,32);

get_user_authid(id,szSteam,charsmax(szSteam));

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, szSteam, 32, szSteam);

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 SteamId = '%s';",szTableName,szSteam)

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];

new szSteam[33];

get_user_name(id,szName,32);

get_user_authid(id,szSteam,charsmax(szSteam));

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, szSteam, 32, szSteam);

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 SteamId = '%s';",szTableName,szSteam)

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];

new szSteam[33];

get_user_name(id,szName,32);

get_user_authid(id,szSteam,charsmax(szSteam));

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, szSteam, 32, szSteam);

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`,`SteamId`,`Name`,`exp`,`level`) VALUES (NULL,'%s','%s','0','1');",szTableName,szSteam,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]

new szSteam[33],ErrorCode;

get_user_name(id,szName,32);

get_user_authid(id,szSteam,charsmax(szSteam))

new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)

SQL_QuoteString(SqlConnection, szSteam, 32, szSteam);

if(SqlConnection == Empty_Handle)

{

log_amx(g_Error);

return;

}

new Handle:Query = SQL_PrepareQuery(SqlConnection,"SELECT id FROM `army_ranks` WHERE `SteamId` = '%s';",szSteam)

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 }

*/

[/pawn]


Отредактировал: ssx, - 19.9.2014, 18:44
Прикрепленные файлы:
Прикрепленный файл  army_steam_id.sma ( 47,69 килобайт ) Кол-во скачиваний: 7


[Half-Life DM FFA] 78.152.169.100:27016
[CS 1.6 GunGame] 78.152.169.100:27018
[CS 1.6 DM AIM] 78.152.169.100:27017
[CS 1.6 DM FFA] 78.152.169.100:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: