RU
RU
UA
EN
PL
ГЛАВНАЯ
УСЛУГИ
ПЛАГИНЫ
КАРТЫ
REBUY
SCANMON
CASSA
SALE
ФОРУМ
МОНИТОР
HELP
КОНТАКТ
Главная
/
Plugins
/
[CSDM] Level System
[CSDM] Level System
Теги:
Скачать плагины cs
Серверные
Система уровней для CSDM сервера.
За каждый уровень ваш урон будет увеличен на 1 %.
За каждое убийство выдает +1 к опыту.
Настройки производятся в:
level_system.cfg
ls_option_exp.ini
Компилятор: 1.8.2
+ZIP
1600
Команды:
Кваров и команд нет
.sma / .sp
#include
#include
#include
/*Таски*/ #define TASK_SETSQL 73561 #define TASKID_HUDINFO 862142 /*Прочее*/ #define MAX_PLAYERS 32 new g_syncHudMessage; /*Sql*/ new Handle:g_SqlTuple new Handle:SqlConnection; /*прочее для sql*/ new g_Error[512]; new const szTableName[] = "level_system" new szDataPlayerInfo[MAX_PLAYERS+1][64]; // Database CVARs new CVAR_ls_sql_dbhost,CVAR_ls_sql_dbuser,CVAR_ls_sql_dbpass,CVAR_ls_sql_dbname,CVAR_ls_sql_dbtype; //Other Cvars new CVAR_ls_save_by; //Значение игрока new g_iPlayerExp[MAX_PLAYERS + 1],g_iPlayerLvl[MAX_PLAYERS + 1]; /*Motd*/ #define MAX_BUFFER_LENGTH 1536 #define DESIGN_STYLE "
" new g_szMotd[ MAX_BUFFER_LENGTH + 1] /*Для Уровней*/ #define OPTION_FILE_EXP "/addons/amxmodx/configs/ls_option_exp.ini" #define MAX_LEVELS 100 new const Float:LS_MultiPlayer_Exp = 1.0 new iXPLevel[MAX_LEVELS+1]; //CSDM_GetUserLevel(idUser) - Получает уровень игрока //CSDM_GetUserExp(idUser) - Получает опыт игрока //CSDM_GetLevelExp(iLevel) - Получает кол-во опыта для определенного уровня(iLevel) //CSDM_SetUserExp(idUser,Exp) - Выдает N(exp) игроку public plugin_init() { register_plugin("[CSDM]Level System","1.0","daywer") /*HamHook*/ RegisterHam( Ham_Spawn, "player", "EVENT_Spawn", 1); RegisterHam( Ham_TakeDamage, "player", "fw_TakeDamage" ); RegisterHam( Ham_Killed, "player", "fw_PlayerKill" ); /*Настройки плагина*/ CVAR_ls_sql_dbtype = register_cvar( "ls_sql_dbtype" , "0" ); CVAR_ls_sql_dbhost = register_cvar( "ls_sql_dbhost" , "127.0.0.1" ); CVAR_ls_sql_dbuser = register_cvar( "ls_sql_dbuser" , "root" ); CVAR_ls_sql_dbpass = register_cvar( "ls_sql_dbpass" , "" ); CVAR_ls_sql_dbname = register_cvar( "ls_sql_dbname" , "amx" ); CVAR_ls_save_by = register_cvar( "ls_save_by" , "0" ); /*Команды*/ register_clcmd("say /toplvl", "ClCmd_Motd") register_clcmd("say /toplevel","ClCmd_Motd") /*Настройка опыта*/ Get_Option_Exp() /*Hud*/ g_syncHudMessage = CreateHudSyncObj(); } /*Убийство игрока*/ public fw_PlayerKill(victim, attacker, corpse) { if (victim != attacker && is_user_connected(attacker)) XP_Give(attacker,1) return HAM_IGNORED; } /*Урон*/ public fw_TakeDamage(victim, inflictor, attacker, Float:damage) { if (victim != attacker && is_user_connected(attacker)) { damage += damage * (g_iPlayerLvl[attacker] *0.01) SetHamParamFloat(4, damage) } return HAM_IGNORED; } /*Респ игрока*/ public EVENT_Spawn( idUser ) { if ( !is_user_alive( idUser ) ) return HAM_HANDLED; update_StatusText(idUser) return HAM_HANDLED; } public update_StatusText(id) { if (id >= TASKID_HUDINFO ) id -= TASKID_HUDINFO; static cache[256]; if(!is_user_alive(id)) return; /*Прогресс ЖИ ЕСТЬ!*/ //1 `|` = 5 % new szProgress[54]; new iProgressMax = 20,CountSymbol; new iPercent = get_percent(g_iPlayerExp[id],XP_NeedLevel(g_iPlayerLvl[id] + 1)) add( szProgress, 53, "{ " ); for (new iSymbol = 1; iSymbol <= (iPercent / 5); iSymbol++ ) { add( szProgress, 53, "|" ); CountSymbol++; } iProgressMax = iProgressMax - CountSymbol; for (new iSymbol = 1; iSymbol <= iProgressMax; iSymbol++ ) add( szProgress, 53, "^t" ); /*Конец*/ add( szProgress, 53, " }" ); format(cache, 255, "Уровень: %d ( %d / %d )%d%s^n%s",g_iPlayerLvl[id],g_iPlayerExp[id],XP_NeedLevel(g_iPlayerLvl[id] + 1),iPercent,"%%",szProgress) set_hudmessage( 0, 102, 204, -1.0, 0.88, 0, 5.0, 5.0, 2.0, 3.0, 3 ); ShowSyncHudMsg(id, g_syncHudMessage,cache) set_task(5.0, "update_StatusText", id + TASKID_HUDINFO); } /*Вызов Top 15*/ public ClCmd_Motd(id) { new szMotdTitle[64]; formatex(szMotdTitle, charsmax(szMotdTitle),"Топ Игроков"); show_motd(id, g_szMotd, szMotdTitle); return PLUGIN_CONTINUE } public plugin_cfg() { new szConfigFile[64]; add( szConfigFile, 63, "addons/amxmodx/configs/level_system.cfg" ); if ( file_exists( szConfigFile ) ) server_cmd( "exec %s", szConfigFile ); else { server_print("[Level System]Error load config level_system.cfg ") set_fail_state( "Config file - level_system.cfg is missing, unable to load plugin" ); } set_task( 1.0, "DBStats_Init", TASK_SETSQL ); } /*Игрок заходит*/ public client_putinserver( PlayerID ) { szDataPlayerInfo[PlayerID] = "" g_iPlayerExp[PlayerID] = 0; g_iPlayerLvl[PlayerID] = 0; DB_GetKey( PlayerID, szDataPlayerInfo[PlayerID], 63 ) ClientLoadSql(PlayerID) } /*Игрок отсоед*/ public client_disconnect( PlayerID ) { ClientSaveSql(PlayerID) if(task_exists(PlayerID + TASKID_HUDINFO )) remove_task(PlayerID + TASKID_HUDINFO) } public plugin_end() DB_Close() public DBStats_Init() { switch(get_pcvar_num(CVAR_ls_sql_dbtype)) { case 0: { SQL_SetAffinity( "sqlite" ); g_SqlTuple = SQL_MakeDbTuple( "", "", "", "level_system" ); } case 1: { SQL_SetAffinity( "mysql" ); new szHost[64], szUser[32], szPass[32], szDB[32]; get_pcvar_string( CVAR_ls_sql_dbhost , szHost , 63 ); get_pcvar_string( CVAR_ls_sql_dbuser , szUser , 31 ); get_pcvar_string( CVAR_ls_sql_dbpass , szPass , 31 ); get_pcvar_string( CVAR_ls_sql_dbname , szDB , 31 ); g_SqlTuple = SQL_MakeDbTuple( szHost, szUser, szPass, szDB ); } } new ErrorCode; SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,charsmax(g_Error)) if(SqlConnection == Empty_Handle) set_fail_state(g_Error) if( !SQL_TableExists( SqlConnection, szTableName ) ) { new szSendQuery[256]; format(szSendQuery,255,"CREATE TABLE IF NOT EXISTS %s (`PlayerData` varchar(64),`Exp` INT(4))",szTableName); new Handle:Queries = SQL_PrepareQuery(SqlConnection,szSendQuery); if(!SQL_Execute(Queries)) set_fail_state(g_Error); } SQL_QueryAndIgnore( SqlConnection, "SET NAMES utf8" ); server_print( "[Level System] SQL database connection successful" ); MakeTop() } /*Создание TOP */ public MakeTop( ) { new szQuery[ 256 ] formatex( szQuery, charsmax( szQuery ), "SELECT PlayerData,Exp FROM %s ORDER BY Exp DESC LIMIT 10",szTableName ) SQL_ThreadQuery( g_SqlTuple, "MakeTop_QueryHandler", szQuery ) } public MakeTop_QueryHandler( FailState, Handle:Query, Error[ ], Errcode, Data[ ], DataSize ) { if( !SQL_IsFail( FailState, Errcode, Error ) ) { new szName[ 44 ] new iLen new lExp[30],lNick[30]; format(lNick, 29, "Имя Игрока") replace_all(lNick, 29, " ", " ") format(lExp, 29, "Опыт") replace_all(lExp, 29, " ", " ") iLen = format(g_szMotd, MAX_BUFFER_LENGTH, DESIGN_STYLE) iLen += format(g_szMotd[iLen], MAX_BUFFER_LENGTH - iLen, "
") iLen += format(g_szMotd[iLen], MAX_BUFFER_LENGTH - iLen, "
%s
%s
%s
", "#", lNick,lExp) new PlayerExp; new i = 1 while( SQL_MoreResults( Query ) ) { SQL_ReadResult( Query, 0, szName, charsmax( szName ) ) PlayerExp = SQL_ReadResult( Query, 1 ) replace_all( szName, charsmax( szName ), "<", "[" ) replace_all( szName, charsmax( szName ), ">", "]" ) iLen += formatex(g_szMotd[iLen], charsmax( g_szMotd ) - iLen, "
%d
%s
%d
", (i), szName, PlayerExp) i++ SQL_NextRow( Query ) } } } SQL_IsFail( FailState, Errcode, Error[ ] ) { if( FailState == TQUERY_CONNECT_FAILED ) { log_amx( "[Error] Could not connect to SQL database: %s", Error ) return true } if( FailState == TQUERY_QUERY_FAILED ) { log_amx( "[Error] Query failed: %s", Error ) return true } if( Errcode ) { log_amx( "[Error] Error on query: %s", Error ) return true } return false } /*Загрузка*/ public ClientLoadSql(PlayerID) { new szTemp[186]; new Data[1]; Data[0] = PlayerID; format(szTemp,charsmax(szTemp),"SELECT * FROM `%s` WHERE (`%s`.`PlayerData` = '%s')",szTableName,szTableName,szDataPlayerInfo[PlayerID]) SQL_ThreadQuery(g_SqlTuple,"HookClientRegisterSql",szTemp,Data,1) } public HookClientRegisterSql(FailState,Handle:Query,Error[],Errcode,Data[],DataSize) { if(FailState == TQUERY_CONNECT_FAILED) log_amx("Load - Could not connect to SQL database. [%d] %s", Errcode, Error) else if(FailState == TQUERY_QUERY_FAILED) log_amx("Load Query failed. [%d] %s", Errcode, Error) static PlayerID; PlayerID = Data[0] if(SQL_NumResults(Query) < 1) { /*Игрок не найден*/ new szTemp[256]; format(szTemp,charsmax(szTemp),"INSERT INTO `%s` ( `PlayerData` , `Exp` )VALUES ('%s','0');",szTableName,szDataPlayerInfo[PlayerID]) SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp) } else { g_iPlayerExp[PlayerID] = SQL_ReadResult(Query, 1); g_iPlayerLvl[PlayerID] = XP_GetLevelByXP( g_iPlayerExp[PlayerID] ); } return PLUGIN_HANDLED } /*Сохранение*/ public ClientSaveSql(PlayerID) { new szTemp[512] format(szTemp,charsmax(szTemp),"UPDATE `%s` SET `Exp` = '%i' WHERE `%s`.`PlayerData` = '%s';",szTableName,g_iPlayerExp[PlayerID],szTableName,szDataPlayerInfo[PlayerID]) SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp) } public IgnoreHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize) { SQL_FreeHandle(Query) return PLUGIN_HANDLED; } /*Завершение работы BD */ DB_Close() { if ( g_SqlTuple ) SQL_FreeHandle( g_SqlTuple ); if ( SqlConnection ) SQL_FreeHandle( SqlConnection ); } /*Возвращает нужные данные о игроке*/ DB_GetKey( id, szKey[], len ) { switch(get_pcvar_num(CVAR_ls_save_by)) { case 2: { get_user_name( id, szKey, len ); replace_all( szKey, len, "'", "\'" ); replace_all( szKey, len, "'", "''" ); replace_all(szKey, len, ")", ""); replace_all(szKey, len, "(", ""); replace_all(szKey, len, "^"", ""); replace_all(szKey, len, "%", ""); replace_all(szKey, len, "@", ""); replace_all(szKey, len, "/", ""); } case 1: get_user_ip( id, szKey, len, 1 ); case 0: get_user_authid( id, szKey, len ); } } /*Конфиг опыта*/ public Get_Option_Exp() { new path[64] format(path, charsmax(path), "%s",OPTION_FILE_EXP) if (!file_exists(path)) { new error[100] formatex(error, charsmax(error), "Cannot load options exp file %s!", path) set_fail_state(error) return; } new linedata[1024], key[64], value[600], section; new msg_exp[41]; new file = fopen(path, "rt") while (file && !feof(file)) { fgets(file, linedata, 1023) replace(linedata, 1023, "^n", "") if (!linedata[0] || linedata[0] == ';') continue; if (linedata[0] == '[') { section++ continue; } strtok(linedata, key, charsmax(key), value, 599, '=') trim(key) trim(value) switch (section) { case 1: { replace_all(key, 64, "-", " "); new msg_opt[20], level[15],iLevel; parse(key, msg_opt, 19, level,14); iLevel = str_to_num(level); format(msg_exp,40,"XP_LVL %d",iLevel); if(iLevel >= MAX_LEVELS+1) { server_print("[Level System] ERROR! reconfigure ls_option_exp.ini") continue; } if (equal(key, msg_exp)) iXPLevel[iLevel] = str_to_num(value) } /*прочее*/ } } if (file) fclose(file) } XP_Give(PlayerID,value) { g_iPlayerExp[PlayerID] += value; g_iPlayerLvl[PlayerID] = XP_GetLevelByXP( g_iPlayerExp[PlayerID] ); update_StatusText(PlayerID) } //CSDM_GetUserLevel(idUser) - Получает уровень игрока //CSDM_GetUserExp(idUser) - Получает опыт игрока //CSDM_GetLevelExp(iLevel) - Получает кол-во опыта для определенного уровня(iLevel) //CSDM_SetUserExp(idUser,Exp) - Выдает N(exp) игроку public plugin_natives( ) { register_native( "CSDM_GetUserLevel", "Native_CSDM_GetUserLevel", 1 ); register_native( "CSDM_GetUserExp", "Native_CSDM_GetUserExp", 1 ); register_native( "CSDM_GetLevelExp", "Native_CSDM_GetNextLevelExp", 1 ); register_native( "CSDM_SetUserExp", "Native_CSDM_SetUserExp", 1 ); } public Native_CSDM_GetUserLevel(PlayerID) return g_iPlayerLvl[PlayerID]; public Native_CSDM_GetUserExp(PlayerID) return g_iPlayerExp[PlayerID]; public Native_CSDM_GetNextLevelExp(iLevel) return iXPLevel[iLevel]; public Native_CSDM_SetUserExp(PlayerID,value) XP_Give(PlayerID,value) /*Получаем уровень */ XP_GetLevelByXP( iXP ) { if ( iXP < 0 || iXP == 0 ) return 0; new iResultLevel = 0; for (new iLevel = 0; iLevel <= MAX_LEVELS; iLevel++ ) { if(iXP >= floatround(iXPLevel[iLevel] * LS_MultiPlayer_Exp )) iResultLevel = iLevel; } return iResultLevel; } XP_NeedLevel(iLevel) return iXPLevel[iLevel]; stock get_percent(value, tvalue) return floatround(floatmul(float(value) / float(tvalue) , 100.0)); stock bool: SQL_TableExists( Handle: hDataBase, const szTable[ ] ) { new Handle: hQuery = SQL_PrepareQuery( hDataBase, "SELECT * FROM information_schema.tables WHERE table_name = '%s' LIMIT 1;", szTable ); new szError[ 512 ]; if( !SQL_Execute( hQuery ) ) { SQL_QueryError( hQuery, szError, charsmax( szError ) ); set_fail_state( szError ); } else if( !SQL_NumResults( hQuery ) ) { SQL_FreeHandle( hQuery ); return false; } SQL_FreeHandle( hQuery ); return true; }
Отправить
Загрузил
exec208
2019-01-04 14:55:57
4
131
Установить на сервер
Скачать
Нет оплаченых серверов
Купить сервер CS 1.6
Купить сервер CS:GO
Купить сервер CSS v34
Подключить свой VDS к панели
Я нажал установить на сервер но уровня нету !
DanylSt
2019-01-29 12:09:01
Если не работает, напишите какая ошибка
root
2019-01-05 03:52:24
Если бы он не работал . Плагин бы не прошел проверку.
exec208
2019-01-04 23:04:12
не работает
DanylSt
2019-01-04 22:15:52
Данная иконка означает, что плагин был проверен администрацией хостинга на тестовом сервере, и проблем с ним не было выявлено. Рекомендуем ставить исключительно проверенные плагины.
Плагин загружен на сервер, но проверка еще не была проведена.
CSHOST.COM.UA 2012-2025 Хостинг игровых серверов