Bars
Пользователь
- Регистрация
- 10 Июн 2017
- Сообщения
- 76
- Симпатии
- 4
- Пол
- Мужской
Код:
#include <amxmodx>
#include <hamsandwich>
#include <cstrike>
#include <sqlx>
new iOneStepKills = 10
new iUserKillsStep = 15
new iUserLevel[33], iUserKills[33], iLevelNext[33]
new iMaxPlayers, gMsgSayText
new Host[] = "80.77.174.154"
new User[] = "u117967amfn"
new Pass[] = "nPAUC3oDklEwvdm6bgJE"
new Db[] = "db117967"
new Handle:g_SqlTuple
new g_Error[512]
public plugin_init()
{
register_plugin("LVL System [MySQL]", "1.0", "MaJIou' / Remake by Pain")
register_message(get_user_msgid("SayText"),"Tekst") // Отлавливаем событие написания игроком сообщения
RegisterHam(Ham_Killed, "player", "fw_Killed", 1)
iMaxPlayers = get_maxplayers()
gMsgSayText = get_user_msgid("SayText")
set_task(1.0, "MySql_Init")
}
public plugin_precache() precache_sound("MG_SOUND/levelup.wav" )
public plugin_natives()
{
register_native("get_level", "native_get_level", 1)
register_native("set_level", "native_set_level", 1)
}
public native_get_level(id)
{
return iUserLevel[id]
}
public native_set_level(id, level)
{
iUserLevel[id] = level
Save_MySql(id)
}
public client_putinserver(id)
{
iUserLevel[id] = 0
iUserKills[id] = 0
iLevelNext[id] = 0
Load_MySql(id)
set_task(2.0, "CheckLevel", id)
}
public client_disconnect(id)
{
Save_MySql(id)
remove_task(id + 123321)
}
public MySql_Init()
{
// we tell the API that this is the information we want to connect to,
// just not yet. basically it's like storing it in global variables
g_SqlTuple = SQL_MakeDbTuple(Host, User, Pass, Db)
// ok, we're ready to connect
new ErrorCode,Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, g_Error, charsmax(g_Error))
if(SqlConnection == Empty_Handle)
// stop the plugin with an error message
set_fail_state(g_Error)
new Handle:Queries
// we must now prepare some random queries
Queries = SQL_PrepareQuery(SqlConnection, "CREATE TABLE IF NOT EXISTS tutorial (name varchar(32),next INT(11),kills INT(11),level INT(11))")
if(!SQL_Execute(Queries))
{
// if there were any problems
SQL_QueryError(Queries, g_Error, charsmax(g_Error))
set_fail_state(g_Error)
}
// close the handle
SQL_FreeHandle(Queries)
// you free everything with SQL_FreeHandle
SQL_FreeHandle(SqlConnection)
}
public Load_MySql(id)
{
new szName[32], szTemp[512]
get_user_name(id, szName, charsmax(szName))
new Data[1]
Data[0] = id
//we will now select from the table `tutorial` where the steamid match
format(szTemp, charsmax(szTemp), "SELECT * FROM `tutorial` WHERE (`tutorial`.`name` = '%s')", szName)
SQL_ThreadQuery(g_SqlTuple, "register_client", szTemp, Data, 1)
}
public register_client(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)
}
new id
id = Data[0]
if(SQL_NumResults(Query) < 1)
{
//.if there are no results found
new szName[32]
get_user_name(id, szName, charsmax(szName)) // get user's name
// if its still pending we can't do anything with it
if (equal(szName,"ID_PENDING"))
return PLUGIN_HANDLED
new szTemp[512]
// now we will insturt the values into our table.
format(szTemp, charsmax(szTemp), "INSERT INTO `tutorial` ( `name` , `level`, `kills`, `next`) VALUES ('%s',%i,%i,%i);", szName, iUserLevel[id], iUserKills[id], iLevelNext[id])
//DEBUG
server_print("%s", szTemp)
SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", szTemp)
}
else
{
new iNext, sNext[11],
iLevel, sLevel[11],
iKills, sKills[11]
iNext = SQL_FieldNameToNum(Query, "next")
iLevel = SQL_FieldNameToNum(Query, "level")
iKills = SQL_FieldNameToNum(Query, "kills")
SQL_ReadResult(Query, iNext, sNext, charsmax(sNext))
SQL_ReadResult(Query, iLevel, sLevel, charsmax(sLevel))
SQL_ReadResult(Query, iKills, sKills, charsmax(sKills))
iLevelNext[id] = str_to_num(sNext)
iUserLevel[id] = str_to_num(sLevel)
iUserKills[id] = str_to_num(sKills)
}
return PLUGIN_HANDLED
}
public Save_MySql(id)
{
new szName[32], szTemp[512]
get_user_name(id, szName, charsmax(szName))
// Here we will update the user hes information in the database where the steamid matches.
format(szTemp, charsmax(szTemp), "UPDATE `tutorial` SET `Level` = '%i' , `kills` = '%i', `next` = '%i' WHERE `tutorial`.`name` = '%s';", iUserLevel[id], iUserKills[id], iLevelNext[id], szName)
SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", szTemp)
}
public IgnoreHandle(FailState, Handle:Query, Error[], Errcode, Data[], DataSize)
{
SQL_FreeHandle(Query)
return PLUGIN_HANDLED
}
public plugin_end() SQL_FreeHandle(g_SqlTuple)
public CheckLevel(id)
{
if(iUserLevel[id] < 1)
{
iUserLevel[id] = 1
iLevelNext[id] = iOneStepKills
}
Task_Player(id, 1.0)
}
public fw_Killed(victim, attacker, corpse)
{
new gName[32]
get_user_name(attacker, gName, charsmax( gName ))
if(!is_user_connected(victim) || !is_user_connected(attacker) || victim == attacker)
return
iUserKills[attacker]++
if(iUserKills[attacker] >= iLevelNext[attacker])
{
iLevelNext[attacker] += iUserKillsStep
iUserLevel[attacker]++
if(iUserLevel[attacker] == (2 | 3 | 4 | 5 | 8 | 10 | 15 | 20))
colored_print(attacker, "^x03[LEVEL] Достижение^x04 %d ^x03уровня. Вам стали доступны новые товары в магазине!", iUserLevel[attacker], iLevelNext[attacker])
else
colored_print(attacker, "^x03[LEVEL] Вы достигли^x04 %d ^x03уровня. Следующий через^x04 %d ^x03убийств", iUserLevel[attacker], iLevelNext[attacker])
colored_print(0, "^x03[LEVEL] ^x01Игрок^x04 %s ^x03достиг уровня^x04 %i", gName, iUserLevel[attacker])
iUserKills[attacker] = 0
client_cmd(attacker, "spk MG_SOUND/levelup.wav")
}
}
public Tekst(msgId,msgDest,msgEnt)
{
new id = get_msg_arg_int(1) // сокращаем ид игрока который пишет сообщения
if(!is_user_connected(id)) return PLUGIN_CONTINUE;
new szTmp[256],szTmp2[256], szPrefix[64];
get_msg_arg_string(2,szTmp, charsmax( szTmp ) ) // поулчаем написаное сообщение
if(get_user_flags(id) & ADMIN_CHAT)
{
formatex(szPrefix, charsmax( szPrefix ), "^x03[^x04ADMIN^x03]^x03[^x04%i LVL^x03]^x04", iUserLevel[id])
}
else
{
formatex(szPrefix, charsmax( szPrefix ), "^x04[%i LVL]", iUserLevel[id])
}
if(!equal(szTmp,"#Cstrike_Chat_All")) // Если чат между коммандой
{
add(szTmp2,charsmax(szTmp2),szPrefix); // Ставим наш префикс
add(szTmp2,charsmax(szTmp2)," ");
add(szTmp2,charsmax(szTmp2),szTmp); // Сообщение
}
else
{ // Если чат общий
add(szTmp2,charsmax(szTmp2),szPrefix); //наш префикс
add(szTmp2,charsmax(szTmp2)," ^x03%s1^x01: ^x01%s2") // Имя игрока и сообщение
}
set_msg_arg_string(2,szTmp2); //Устанавливаем вид который мы сделали выше
return PLUGIN_CONTINUE // Продолжаем работу плагина
}
public PlayerInfo(id)
{
id -= 123321
set_hudmessage(0, 255, 255, -1.0, 0.10, 0, 6.0, 1.1);
show_hudmessage(id, "Уровень: %d^nУбийств: %i | До сл. уровня: %i ^nНаша Группа: vk.com/csscreative", iUserLevel[id], iUserKills[id], iLevelNext[id] - iUserKills[id])
}
stock colored_print( target, const message[], any:... )
{
static buffer[ 512 ]
if( !target )
{
static player
for( player = 1; player <= iMaxPlayers; player++ )
{
if ( !is_user_connected( player ) )
continue;
vformat( buffer, charsmax( buffer ), message, 3 )
message_begin( MSG_ONE_UNRELIABLE, gMsgSayText, _, player )
write_byte( player )
write_string( buffer )
message_end()
}
}
else
{
vformat( buffer, charsmax( buffer ), message, 3 )
message_begin( MSG_ONE, gMsgSayText, _, target )
write_byte( target )
write_string( buffer )
message_end()
}
}
stock Task_Player(const id, Float:TIME)
{
if(task_exists(id + 123321))
remove_task(id + 123321)
set_task(TIME, "PlayerInfo", id + 123321, _, _, "b")
}
Вложения
-
9,3 KB Просмотры: 2