На първо време може да се направи лист с ник и съответно айпи. Проблема е за тези с динамичните...
. Трябват му няколко промени.
Код: Избери всички
#include <sourcemod>
#include "dbi.inc"
#include <sdktools>
public Plugin:myinfo =
{
name = "Register nick",
author = "allied",
description = "Lets players register there nicknames.",
version = "0.1",
url = "http://alliedmods.org"
}
new Handle:Database = INVALID_HANDLE;
new Handle:CVar_rn_debug = INVALID_HANDLE;
new Handle:CVar_rn_use_ip = INVALID_HANDLE;
new Handle:CVar_rn_reserve = INVALID_HANDLE;
new Handle:Admin = INVALID_HANDLE;
new String:logFile[1024];
new String:AdminFile[1024];
new bool:rlogsenabled = false;
new bool:useip = false;
new bool:reserveslot = false;
public OnPluginStart()
{
BuildPath(Path_SM, logFile, sizeof(logFile), "logs/css_clients.log");
SQL_TConnect(GotDatabase, "css_clients");
RegConsoleCmd("say", Command_Say);
RegConsoleCmd("say_team", Command_Say);
if (!HookEventEx("player_changename", EventNameChange))
{
LogToFile(logFile, "Unable to hook player_changename");
}
CVar_rn_debug = CreateConVar("rn_debug_enabled", "0", "loging.");
CVar_rn_use_ip = CreateConVar("rn_use_ip", "0", "Uses ip instead of steamid.");
CVar_rn_reserve = CreateConVar("rn_reserveslot", "0", "Give registered users reserved slots.");
}
public GotDatabase(Handle:owner, Handle:hndl, const String:error[], any:data)
{
if (hndl == INVALID_HANDLE)
{
LogToFile(logFile, "Query Failed GotDatabase Could not connect to the Database: %s", error);
}
else
{
Database = hndl;
InsertDB();
}
}
InsertDB()
{
decl String:driver[64];
SQL_ReadDriver(Database, driver, sizeof(driver));
decl String:query[1024];
if (strcmp(driver, "sqlite", false) == 0)
{
query = "CREATE TABLE IF NOT EXISTS css_clients ( \
ingamenick TEXT NOT NULL, \
steam TEXT PRIMARY KEY ON CONFLICT REPLACE);";
}
else
{
query = "CREATE TABLE IF NOT EXISTS css_clients ( \
ingamenick VARCHAR(50) NOT NULL , \
steam VARCHAR(50) NOT NULL , \
PRIMARY KEY (steam) ) \
ENGINE = InnoDB;";
}
SQL_TQuery(Database, T_Generic, query);
}
public T_Generic(Handle:owner, Handle:hndl, const String:error[], any:data)
{
if (hndl == INVALID_HANDLE)
{
LogToFile(logFile, "Query Failed T_generic: %s", error);
}
}
public OnMapStart()
{
if (GetConVarInt(CVar_rn_debug) == 1)
{
rlogsenabled = true;
}
if (GetConVarInt(CVar_rn_use_ip) == 1)
{
useip = true;
}
if (GetConVarInt(CVar_rn_reserve) == 1)
{
reserveslot = true;
}
}
public OnClientAuthorized(client, const String:auth[])
{
decl String:name[50];
decl String:q_name[101];
decl String:query[256];
GetClientName(client, name, sizeof(name));
SQL_EscapeString(Database, name, q_name, sizeof(q_name));
Format(query, sizeof(query), "SELECT `full_nick`, `password`, `privileges`, `flags` FROM `css_clients` WHERE `activated`='1' and `nickbanned`='0'");
SQL_TQuery(Database, T_CheckName, query, client);
if ( rlogsenabled )
{
LogToFile(logFile, "Checking data base for %s", name);
}
}
public T_CheckName(Handle:owner, Handle:hndl, const String:error[], any:data)
{
if (hndl == INVALID_HANDLE)
{
LogToFile(logFile, "Query Failed T_CheckName: %s", error);
return;
}
if (SQL_FetchRow(hndl))
{
decl String:name[50];
GetClientName(data, name, sizeof(name));
if (rlogsenabled)
{
LogToFile(logFile, "The name %s was found", name);
}
decl String:steam[100];
decl String:s_steam[201];
if (useip)
{
GetClientIP(data, steam, sizeof(steam));
}
else
{
GetClientAuthString(data, steam, sizeof(steam));
}
if (rlogsenabled)
{
LogToFile(logFile, "Checking to make sure %s can have nick %s", steam, name);
}
SQL_FetchString(hndl, 1, s_steam, sizeof(s_steam));
if (StrEqual(steam, s_steam) == false)
{
CreateTimer(10.0, ChangeName, data);
if (rlogsenabled)
{
LogToFile(logFile, "Changing %s name in 10 sec", steam);
}
}
else
{
if (rlogsenabled)
{
LogToFile(logFile, "%s has access to have the nick %s", steam, name);
}
}
}
}
public EventNameChange( Handle:event, const String:name[], bool:dontBroadcast )
{
new client = GetClientOfUserId(GetEventInt(event, "userid"));
if ( !client || !IsClientConnected( client ) || IsClientInKickQueue( client ) || IsFakeClient( client ) )
{
return;
}
decl String:newName[64];
decl String:q_newName[130];
decl String:query[256];
GetEventString(event, "newname", newName, sizeof(newName));
SQL_EscapeString(Database, newName, q_newName, sizeof(q_newName));
Format(query, sizeof(query), "SELECT * FROM `css_clients` WHERE `full_nick` = '%s'", q_newName);
SQL_TQuery(Database, T_CheckName, query, client);
if ( rlogsenabled )
{
decl String:steam[100];
if ( useip )
{
GetClientIP(client, steam, sizeof(steam));
}
else
{
GetClientAuthString(client, steam, sizeof(steam));
}
LogToFile(logFile, "%s changed his name to %s and we are checking to see if it is registered", steam, q_newName);
}
}
А това е кода за базата. Това е ако я няма. Иначе ще се връзва с тази на сайта.
Код: Избери всички
CREATE TABLE IF NOT EXISTS `css_clients` (
`id` int(11) NOT NULL auto_increment,
`nick` varchar(15) collate utf8_lithuanian_ci NOT NULL,
`full_nick` varchar(32) collate utf8_lithuanian_ci NOT NULL,
`password` varchar(34) collate utf8_lithuanian_ci NOT NULL,
`privileges` varchar(32) collate utf8_lithuanian_ci NOT NULL,
`flags` varchar(2) collate utf8_lithuanian_ci NOT NULL default 'a',
`email` varchar(32) collate utf8_lithuanian_ci NOT NULL,
`buy_date` date default NULL,
`reg_date` date NOT NULL,
`credits` int(32) NOT NULL default '0',
`warnings` int(1) NOT NULL default '0',
`banned` int(1) NOT NULL default '0',
`activated` int(1) NOT NULL default '0',
`admin` int(1) NOT NULL default '0',
`ip` varchar(15) collate utf8_lithuanian_ci NOT NULL default '000.000.000.000',
`language` varchar(2) collate utf8_lithuanian_ci NOT NULL,
`question` varchar(32) collate utf8_lithuanian_ci NOT NULL,
`answer` varchar(32) collate utf8_lithuanian_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_lithuanian_ci COMMENT='Source Mod Admins' AUTO_INCREMENT=1;