Ребята помогите допилить данную warn систему
всесто кика и бана сделать мут микро и чата.
Макс число предупреждений 3. связать с соурскомсом
макс мут на время до 2х недель
да и можно сделать причины примерно такие
Мат
Неадекватное поведение
Нарушение правил
Спам
Фоновый шум
Флуд
Вот сам код
/*
* ********************************************************
* EuroCSS.LT | Warning System **************************
* ********************************************************
* This plugins is part of EuroCSS.LT Gaming community
* Please do not remove the copyrights of this plugin, otherway,
* ***************************************************************
* I RAPE YOU I RAPE YOU I RAPE YOU I RAPE YOU I RAPE YOU I RAPE YOU *
* ********************************************************************
*
Special Thanks to Peace-Maker, who helped me a lot in creating this plugin.
MYSQL tables:
CREATE TABLE user_warn (
id int(10) unsigned NOT NULL auto_increment,
nick varchar(65) NOT NULL,
steam_id varchar(65) NOT NULL,
warn int(10) NOT NULL,
PRIMARY KEY (id)
);
*/
#pragma semicolon 1
#include <sourcemod>
#include <colors>
#define PLUGIN_VERSION "0.4a"
new Handle:warn_sistema = INVALID_HANDLE;
new Handle:warn_max = INVALID_HANDLE;
new Handle:warn_punishment = INVALID_HANDLE;
new Handle:warn_breason = INVALID_HANDLE;
new Handle:warn_kreason = INVALID_HANDLE;
new Handle:warn_ban_time = INVALID_HANDLE;
new Handle:db = INVALID_HANDLE;
public Plugin:myinfo =
{
name = "Warning system",
author = "MindziusLT",
description = "This system will ban players for 1 week, after they get warnings thereshold.",
version = PLUGIN_VERSION,
url = "EuroCSS.LT"
};
public OnPluginStart()
{
CreateConVar("warn_version", PLUGIN_VERSION, "Warn system version", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD);
RegAdminCmd("sm_warn", Command_Warn, ADMFLAG_BAN, "Warn command. ADMFLAG_BAN");
RegConsoleCmd("sm_mywarn", Command_MyWarn);
warn_max = CreateConVar("warn_max", "5", "Maximum WARN thereshold.", FCVAR_PLUGIN);
warn_punishment = CreateConVar("warn_punishment", "2", "Punishment: 1- KICK, 2-BAN", FCVAR_PLUGIN);
warn_breason = CreateConVar("warn_ban_reason", "[WARN] You've been bad boy. Take a rest", "Warn BAN reason.", FCVAR_PLUGIN);
warn_kreason = CreateConVar("warn_kick_reason", "[WARN] Slow down, Bieber", "Warn KICK reason.", FCVAR_PLUGIN);
warn_ban_time = CreateConVar("warn_ban_time", "60", "BAN time in minutes. Permanently[0] 1hour[60min] 1Day[1440min] 3days[4320min] 5days[7200min]", FCVAR_PLUGIN);
warn_sistema = CreateConVar("eurocss_warn", "1", "Enable/disable plugin", FCVAR_PLUGIN);
//This starts the connection defines the callback to run once connected/error'd
SQL_TConnect(SQL_OnConnect, "default");
AutoExecConfig(true, "warn_system_eurocss");
}
public SQL_OnConnect(Handle:owner, Handle:hndl, const String:error[], any:data)
{
//Since we are not guaranteed a connection, we make sure it actually worked
if (hndl == INVALID_HANDLE)
{
//It didn't work, so we log the error
LogError("Database failure: %s", error);
}
else
{
//It worked, so we set the global to the handle the callback provided for this connection
db = hndl;
}
}
public Action:Command_MyWarn(client, args) // Let's check my warning level.
{
if (GetConVarInt(warn_sistema) == 1)
{
decl String:auth[64];
GetClientAuthString(client,auth,sizeof(auth));
decl String:query[100];
Format(query,sizeof(query),"SELECT warn FROM user_warn WHERE steam_id = '%s'", auth);
SQL_TQuery(db,SQL_CheckWarnings, query, GetClientUserId(client));
}
else
{
ReplyToCommand(client, "\x03[WARN] Command: /warn <nick> <reason>");
}
return Plugin_Handled;
}
public Action:Command_Warn(client, args) // Let's add warning level to EMO.
{
if (GetConVarInt(warn_sistema) == 1)
{
if (args < 2)
{
ReplyToCommand(client, "\x03[WARN] Command: /warn <nick> <reason>");
return Plugin_Handled;
}
decl String:query[512];
decl String:arg1[32];
decl String:reason[32];
decl String:name[MAX_NAME_LENGTH];
GetCmdArg(1, arg1, sizeof(arg1));
new target = FindTarget(client, arg1,true,true);
GetClientName(target,name,sizeof(name));
decl String:auth[64];
GetClientAuthString(target,auth,sizeof(auth));
GetCmdArg(2, reason, sizeof(reason));
new Handle:dp = CreateDataPack();
WritePackCell(dp, GetClientUserId(target));
WritePackString(dp, reason);
ResetPack(dp);
Format(query,sizeof(query),"SELECT warn FROM user_warn WHERE steam_id = '%s'", auth);
SQL_TQuery(db,SQL_AddWarnings,query, dp);
}
else
{
ReplyToCommand (client, "\x03[WARN] Warn system is offline.");
}
return Plugin_Handled;
}
public SQL_NothingCallback(Handle:owner, Handle:hndl, const String:error[], any:data)
{
if(hndl == INVALID_HANDLE)
{
LogError("Could not connect to database: %s", error);
return;
}
LogMessage("[WARN] - Connected Successfully to Database");
}
public SQL_CheckWarnings(Handle:owner, Handle:hndl, const String:error[], any:data)
{
new client;
client = GetClientOfUserId(data);
if(client == 0)
return;
if (hndl == INVALID_HANDLE)
{
LogError("Query error: %s", error);
return;
}
decl String:warn[5];
while (SQL_FetchRow(hndl))
{
SQL_FetchString(hndl, 0, warn, sizeof(warn));
}
new kWarn = StringToInt(warn);
new iMax = GetConVarInt(warn_max);
CPrintToChat(client, "{red}[WARN] {olive}You have [{green}%d{olive}/{red}%d{olive}] warns.", kWarn, iMax);
}
public SQL_AddWarnings(Handle:owner, Handle:hndl, const String:error[], any:dp)
{
new target;
decl String:reason[32];
if(dp != INVALID_HANDLE)
{
target = GetClientOfUserId(ReadPackCell(dp));
ReadPackString(dp, reason, sizeof(reason));
CloseHandle(dp);
// THIS IS MANDATORY!! After you're done with reading the info from the datapack, you have to close the handle to avoid memory leaks.
// You also have to close the handle, even if you don't need the info in it at the time due to sql error or something.
// That's why it's even before error checking.
}
if (hndl == INVALID_HANDLE || strlen(error) > 0)
{
LogError("Query error: %s", error);
return;
}
if(target == 0)
return;
decl String:query[512];
decl String:name[MAX_NAME_LENGTH], String:auth[64];
GetClientName(target,name,sizeof(name));
GetClientAuthString(target,auth,sizeof(auth));
decl String:max_warn[5];
GetConVarString(warn_max, max_warn, sizeof(max_warn));
new iMax = StringToInt(max_warn);
// This player wasn't warned before? Add him to the database!
if(!SQL_MoreRows(hndl))
{
Format(query, sizeof(query), "INSERT INTO user_warn (nick, steam_id, warn) VALUES ('%s', '%s', 1)", name, auth);
SQL_TQuery(db,SQL_NothingCallback,query);
CPrintToChatAll("{red}[WARN]{green} %s {olive}have been warned [{green}1{olive}/{red}%d{olive}]. {red}Reason: {green}%s", name, iMax, reason);
}
// He's been warned before.. increase!
else
{
decl String:warn[5];
SQL_FetchRow(hndl);
SQL_FetchString(hndl, 0, warn, sizeof(warn));
new iWarn = StringToInt(warn);
// Increase the warn level
iWarn++;
Format(query, sizeof(query), "UPDATE user_warn SET warn = %d WHERE steam_id = '%s'", iWarn, auth);
SQL_TQuery(db,SQL_NothingCallback,query);
CPrintToChatAll("{red}[WARN]{green} %s {olive}have been warned [{green}%d{olive}/{red}%d{olive}]. {red}Reason: {green}%s", name, iWarn, iMax, reason);
if(iWarn >= GetConVarInt(warn_max))
{
if(GetConVarInt(warn_punishment) == 1)
{
if( target > 0 )
{
CPrintToChatAll("{red}[WARN]{green} %s {olive}kicked. [{green}%d{olive}/{red}%d{olive}].", name, iMax, iWarn);
Format(query, sizeof(query), "UPDATE user_warn SET warn = '0' WHERE steam_id = '%s'", auth);
SQL_TQuery(db,SQL_NothingCallback,query);
new String:kick_reason[50];
GetConVarString(warn_kreason, kick_reason, sizeof(kick_reason));
ServerCommand("sm_kick %s %s", name, kick_reason);
}
}
else if(GetConVarInt(warn_punishment) == 2)
{
if( target > 0 )
{
new String:bantime[30];
new String:ban_reason[50];
GetConVarString(warn_ban_time, bantime, sizeof(bantime));
new iBanTime = StringToInt(bantime);
GetConVarString(warn_breason, ban_reason, sizeof(ban_reason));
CPrintToChatAll("{red}[WARN]{green} %s {olive}is beeing banned [{green}%d{olive}/{red}%d{olive}]. {red}Ban Lenght: {green}%d min", name, iWarn, iMax, bantime);
Format(query, sizeof(query), "UPDATE user_warn SET warn = '0' WHERE steam_id = '%s'", auth);
SQL_TQuery(db,SQL_NothingCallback,query);
ServerCommand("sm_ban %s %d %s", name, iBanTime, ban_reason);
}
}
}
}
}