Търся плъгин за запазване в база данни ника и steamid на играч

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Аватар
qwertymi
Извън линия
Потребител
Потребител
Мнения: 45
Регистриран на: 13 Мар 2020, 19:18
Се отблагодари: 9 пъти
Получена благодарност: 5 пъти
Обратна връзка:

Търся плъгин за запазване в база данни ника и steamid на играч

Мнение от qwertymi » 09 Май 2020, 02:14

Здравейте търся плъгин който да запазва в база данни името и steamid на играч.
Относно таблицата, може да бъде много проста: ID(int) номер за всеки ред, Nickname, Steamid.
AWP ONLY: 185.148.145.234:27022

Аватар
mi0
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 534
Регистриран на: 09 Дек 2016, 22:02
Се отблагодари: 97 пъти
Получена благодарност: 120 пъти
Обратна връзка:

Търся плъгин за запазване в база данни ника и steamid на играч

Мнение от mi0 » 09 Май 2020, 12:55

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <amxmisc>
#include <sqlx>

// ТРЯБВА ДА НЯМАШ СЪЗДАДЕНА ТАБЛИЦА!!!
#define HOST 	"localhost"
#define USER 	"root"
#define PASS 	""
#define BASE 	"csusers"
#define TABLE 	"users"

new Handle:g_iSqlTuple
new g_szPlayersNames[33][33]

public plugin_init()
{
	register_plugin("SteamID/Nick Sql Save", "1.0", "mi0")
}

public plugin_cfg()
{
	set_task(0.5, "SQLInit")
}

public SQLInit()
{
	g_iSqlTuple = SQL_MakeDbTuple(HOST, USER, PASS, BASE)

	new iErrorCode, g_szError[512], Handle:iSqlConnection
	iSqlConnection = SQL_Connect(g_iSqlTuple, iErrorCode, g_szError, charsmax(g_szError))

	if (iSqlConnection == Empty_Handle)
	{
		set_fail_state(g_szError)
	}

	new Handle:iQueries = SQL_PrepareQuery(iSqlConnection, "CREATE TABLE IF NOT EXISTS `%s`\
	(`id` INT(10) NOT NULL AUTO_INCREMENT,\
	`nickname` VARCHAR(64) NOT NULL,\
	`steamid` VARCHAR(64) NOT NULL,\
	PRIMARY KEY (`id`));", TABLE)

	if (!SQL_Execute(iQueries))
	{
		SQL_QueryError(iQueries, g_szError, charsmax(g_szError))
		set_fail_state(g_szError)
	}

	SQL_FreeHandle(iQueries)
	SQL_FreeHandle(iSqlConnection)
}

public client_authorized(id, const szAuthID[])
{
	get_user_name(id, g_szPlayersNames[id], charsmax(g_szPlayersNames[]))
	new szUserID[64]
	copy(szUserID, charsmax(szUserID), szAuthID)
	Func_SavePlayer(id, szUserID)
}

public client_infochanged(id)
{
	new szNewName[33]
	get_user_info(id, "name", szNewName, charsmax(szNewName))
	if (!equal(szNewName, g_szPlayersNames[id]))
	{
		copy(g_szPlayersNames[id], charsmax(g_szPlayersNames[]), szNewName)
		new szAuthID[64]
		get_user_authid(id, szAuthID, charsmax(szAuthID))
		Func_SavePlayer(id, szAuthID)
	}
}

Func_SavePlayer(id, szAuthID[64])
{
	new iErrorCode, g_szError[512], Handle:iSqlConnection
	iSqlConnection = SQL_Connect(g_iSqlTuple, iErrorCode, g_szError, charsmax(g_szError))

	if (iSqlConnection == Empty_Handle)
	{
		set_fail_state(g_szError)
	}

	new szQuery[128]
	formatex(szQuery, charsmax(szQuery), "SELECT `nickname`, `steamid` FROM `%s` WHERE `nickname` = '%s' AND `steamid` = '%s';", TABLE, g_szPlayersNames[id], szAuthID)
	szAuthID[63] = id
	SQL_ThreadQuery(g_iSqlTuple, "OnSelectExecuted", szQuery, szAuthID, sizeof(szAuthID))
}

public OnSelectExecuted(iFailState, Handle:iQuery, szError[], iError, szData[], iDataSize)
{
	if (iFailState != TQUERY_SUCCESS)
	{
		set_fail_state(szError)
	}

	if (Func_CheckForResults(iQuery))
	{
		return
	}

	new szQuery[128]
	formatex(szQuery, charsmax(szQuery), "INSERT INTO `%s` (`nickname`, `steamid`) VALUES ('%s', '%s');", TABLE, g_szPlayersNames[szData[63]], szData)
	SQL_ThreadQuery(g_iSqlTuple, "QueryEmptyHandle", szQuery)
}

public QueryEmptyHandle(iFailState, Handle:iQuery, szError[])
{
	if (iFailState != TQUERY_SUCCESS)
	{
		set_fail_state(szError)
	}
}

bool:Func_CheckForResults(Handle:iQueryHandle)
{
	return SQL_NumResults(iQueryHandle) >= 1
}
Можеш да тестваш.
aka kurdokoleno
Catch Mod - 87.121.112.232:27021

Аватар
sf4n
Извън линия
Потребител
Потребител
Мнения: 311
Регистриран на: 08 Яну 2018, 11:25
Се отблагодари: 25 пъти
Получена благодарност: 14 пъти

Търся плъгин за запазване в база данни ника и steamid на играч

Мнение от sf4n » 09 Май 2020, 14:24

Няма ли да е по добре да се записват в txt файл? Няма да се налага да го свързваш с база данни.
Изображение

Единствен по рода си Zombie BaseBuilder с уникален мод и коректни админи по всяко време в сървъра.
IP: bb.cs-zapad.eu:27013

Respawn сървър.
IP: re.cs-zapad.eu:27015

Furien сървър.
IP: fu.cs-zapad.eu:27016

Нашият Сайт
Нашият Форум

Аватар
qwertymi
Извън линия
Потребител
Потребител
Мнения: 45
Регистриран на: 13 Мар 2020, 19:18
Се отблагодари: 9 пъти
Получена благодарност: 5 пъти
Обратна връзка:

Търся плъгин за запазване в база данни ника и steamid на играч

Мнение от qwertymi » 09 Май 2020, 14:42

mi0 написа: 09 Май 2020, 12:55

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <amxmisc>
#include <sqlx>

// ТРЯБВА ДА НЯМАШ СЪЗДАДЕНА ТАБЛИЦА!!!
#define HOST 	"localhost"
#define USER 	"root"
#define PASS 	""
#define BASE 	"csusers"
#define TABLE 	"users"

new Handle:g_iSqlTuple
new g_szPlayersNames[33][33]

public plugin_init()
{
	register_plugin("SteamID/Nick Sql Save", "1.0", "mi0")
}

public plugin_cfg()
{
	set_task(0.5, "SQLInit")
}

public SQLInit()
{
	g_iSqlTuple = SQL_MakeDbTuple(HOST, USER, PASS, BASE)

	new iErrorCode, g_szError[512], Handle:iSqlConnection
	iSqlConnection = SQL_Connect(g_iSqlTuple, iErrorCode, g_szError, charsmax(g_szError))

	if (iSqlConnection == Empty_Handle)
	{
		set_fail_state(g_szError)
	}

	new Handle:iQueries = SQL_PrepareQuery(iSqlConnection, "CREATE TABLE IF NOT EXISTS `%s`\
	(`id` INT(10) NOT NULL AUTO_INCREMENT,\
	`nickname` VARCHAR(64) NOT NULL,\
	`steamid` VARCHAR(64) NOT NULL,\
	PRIMARY KEY (`id`));", TABLE)

	if (!SQL_Execute(iQueries))
	{
		SQL_QueryError(iQueries, g_szError, charsmax(g_szError))
		set_fail_state(g_szError)
	}

	SQL_FreeHandle(iQueries)
	SQL_FreeHandle(iSqlConnection)
}

public client_authorized(id, const szAuthID[])
{
	get_user_name(id, g_szPlayersNames[id], charsmax(g_szPlayersNames[]))
	new szUserID[64]
	copy(szUserID, charsmax(szUserID), szAuthID)
	Func_SavePlayer(id, szUserID)
}

public client_infochanged(id)
{
	new szNewName[33]
	get_user_info(id, "name", szNewName, charsmax(szNewName))
	if (!equal(szNewName, g_szPlayersNames[id]))
	{
		copy(g_szPlayersNames[id], charsmax(g_szPlayersNames[]), szNewName)
		new szAuthID[64]
		get_user_authid(id, szAuthID, charsmax(szAuthID))
		Func_SavePlayer(id, szAuthID)
	}
}

Func_SavePlayer(id, szAuthID[64])
{
	new iErrorCode, g_szError[512], Handle:iSqlConnection
	iSqlConnection = SQL_Connect(g_iSqlTuple, iErrorCode, g_szError, charsmax(g_szError))

	if (iSqlConnection == Empty_Handle)
	{
		set_fail_state(g_szError)
	}

	new szQuery[128]
	formatex(szQuery, charsmax(szQuery), "SELECT `nickname`, `steamid` FROM `%s` WHERE `nickname` = '%s' AND `steamid` = '%s';", TABLE, g_szPlayersNames[id], szAuthID)
	szAuthID[63] = id
	SQL_ThreadQuery(g_iSqlTuple, "OnSelectExecuted", szQuery, szAuthID, sizeof(szAuthID))
}

public OnSelectExecuted(iFailState, Handle:iQuery, szError[], iError, szData[], iDataSize)
{
	if (iFailState != TQUERY_SUCCESS)
	{
		set_fail_state(szError)
	}

	if (Func_CheckForResults(iQuery))
	{
		return
	}

	new szQuery[128]
	formatex(szQuery, charsmax(szQuery), "INSERT INTO `%s` (`nickname`, `steamid`) VALUES ('%s', '%s');", TABLE, g_szPlayersNames[szData[63]], szData)
	SQL_ThreadQuery(g_iSqlTuple, "QueryEmptyHandle", szQuery)
}

public QueryEmptyHandle(iFailState, Handle:iQuery, szError[])
{
	if (iFailState != TQUERY_SUCCESS)
	{
		set_fail_state(szError)
	}
}

bool:Func_CheckForResults(Handle:iQueryHandle)
{
	return SQL_NumResults(iQueryHandle) >= 1
}
Можеш да тестваш.
Хм, имам 2 записа на играч с един и същ ник и steamid :shok:
Може ли да се добави проверка ако steamid-то на играч е било записано вече в базата данни да презаписва реда на steamid-то с новото име? Много благодаря за кода.
sf4n написа: 09 Май 2020, 14:24 Няма ли да е по добре да се записват в txt файл? Няма да се налага да го свързваш с база данни.
Целта е да използвам именно база данни. Защото останалите плъгини са също към базата данни, но всичките 5-6 плъгина записват информация за играча по steamid, а аз няма как да извадя информацията за конкретен играч по никнейм (примерно като се опитам да направя с php класация на топ играчи или да ги селектирам по някакъв начин, за да може информацията ми да е достъпна с ника. Ако направя в сайта пример top15 на играчи? Вместо имената ще им изкарва steamid-тата :coffee:
AWP ONLY: 185.148.145.234:27022

Аватар
mi0
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 534
Регистриран на: 09 Дек 2016, 22:02
Се отблагодари: 97 пъти
Получена благодарност: 120 пъти
Обратна връзка:

Търся плъгин за запазване в база данни ника и steamid на играч

Мнение от mi0 » 09 Май 2020, 15:25

Такава проверка съществува. Може ли да дадеш снимка на двата еднакви записа? Провери дали плъгин-а е fail-нал и кажи reason-а.
Ето ти и код с промените.

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <amxmisc>
#include <sqlx>

#define HOST 	"localhost"
#define USER 	"root"
#define PASS 	""
#define BASE 	"csusers"
#define TABLE 	"users"

new Handle:g_iSqlTuple
new g_szPlayersNames[33][33]

public plugin_init()
{
	register_plugin("SteamID/Nick Sql Save", "1.0", "mi0")
}

public plugin_cfg()
{
	set_task(0.5, "SQLInit")
}

public SQLInit()
{
	g_iSqlTuple = SQL_MakeDbTuple(HOST, USER, PASS, BASE)

	new iErrorCode, g_szError[512], Handle:iSqlConnection
	iSqlConnection = SQL_Connect(g_iSqlTuple, iErrorCode, g_szError, charsmax(g_szError))

	if (iSqlConnection == Empty_Handle)
	{
		set_fail_state(g_szError)
	}

	new Handle:iQueries = SQL_PrepareQuery(iSqlConnection, "CREATE TABLE IF NOT EXISTS `%s`\
	(`id` INT(10) NOT NULL AUTO_INCREMENT,\
	`nickname` VARCHAR(64) NOT NULL,\
	`steamid` VARCHAR(64) NOT NULL,\
	PRIMARY KEY (`id`));", TABLE)

	if (!SQL_Execute(iQueries))
	{
		SQL_QueryError(iQueries, g_szError, charsmax(g_szError))
		set_fail_state(g_szError)
	}

	SQL_FreeHandle(iQueries)
	SQL_FreeHandle(iSqlConnection)
}

public client_authorized(id, const szAuthID[])
{
	get_user_name(id, g_szPlayersNames[id], charsmax(g_szPlayersNames[]))
	new szUserID[64]
	copy(szUserID, charsmax(szUserID), szAuthID)
	Func_SavePlayer(id, szUserID)
}

public client_infochanged(id)
{
	new szNewName[33]
	get_user_info(id, "name", szNewName, charsmax(szNewName))
	if (!equal(szNewName, g_szPlayersNames[id]))
	{
		copy(g_szPlayersNames[id], charsmax(g_szPlayersNames[]), szNewName)
		new szAuthID[64]
		get_user_authid(id, szAuthID, charsmax(szAuthID))
		Func_SavePlayer(id, szAuthID)
	}
}

Func_SavePlayer(id, szAuthID[64])
{
	new iErrorCode, g_szError[512], Handle:iSqlConnection
	iSqlConnection = SQL_Connect(g_iSqlTuple, iErrorCode, g_szError, charsmax(g_szError))

	if (iSqlConnection == Empty_Handle)
	{
		set_fail_state(g_szError)
	}

	new szQuery[128]
	formatex(szQuery, charsmax(szQuery), "SELECT * FROM `%s` WHERE `steamid` = '%s';", TABLE, g_szPlayersNames[id], szAuthID)
	szAuthID[63] = id
	SQL_ThreadQuery(g_iSqlTuple, "OnSelectExecuted", szQuery, szAuthID, sizeof(szAuthID))
}

public OnSelectExecuted(iFailState, Handle:iQuery, szError[], iError, szData[], iDataSize)
{
	if (iFailState != TQUERY_SUCCESS)
	{
		set_fail_state(szError)
	}

	new szQuery[128]
	if (Func_CheckForResults(iQuery))
	{
		formatex(szQuery, charsmax(szQuery), "UPDATE %s SET `nickname` = '%s' WHERE `steamid` = '%s';", TABLE, g_szPlayersNames[szData[63]], szData)	
	}
	else
	{
		formatex(szQuery, charsmax(szQuery), "INSERT INTO `%s` (`nickname`, `steamid`) VALUES ('%s', '%s');", TABLE, g_szPlayersNames[szData[63]], szData)
	}

	SQL_ThreadQuery(g_iSqlTuple, "QueryEmptyHandle", szQuery)
}

public QueryEmptyHandle(iFailState, Handle:iQuery, szError[])
{
	if (iFailState != TQUERY_SUCCESS)
	{
		set_fail_state(szError)
	}
}

bool:Func_CheckForResults(Handle:iQueryHandle)
{
	return SQL_NumResults(iQueryHandle) >= 1
}
qwertymi написа: 09 Май 2020, 14:42 Целта е да използвам именно база данни. Защото останалите плъгини са също към базата данни, но всичките 5-6 плъгина записват информация за играча по steamid, а аз няма как да извадя информацията за конкретен играч по никнейм (примерно като се опитам да направя с php класация на топ играчи или да ги селектирам по някакъв начин, за да може информацията ми да е достъпна с ника. Ако направя в сайта пример top15 на играчи? Вместо имената ще им изкарва steamid-тата :coffee:
Определено това е най-достъпния и лесен начин.
aka kurdokoleno
Catch Mod - 87.121.112.232:27021

Аватар
qwertymi
Извън линия
Потребител
Потребител
Мнения: 45
Регистриран на: 13 Мар 2020, 19:18
Се отблагодари: 9 пъти
Получена благодарност: 5 пъти
Обратна връзка:

Търся плъгин за запазване в база данни ника и steamid на играч

Мнение от qwertymi » 09 Май 2020, 15:55

Хм, променям sma файла > настройвам mysql връзката > спирам сървъра > комплирам плъгина и го замествам > трия таблицата с записите >
пускам сървъра > влизам в сървъра > отварям базата данни и вече записите са 3 :mad:
Edit: и когато влезна с друго име се създава нов запис не се обновява стийм идто с новия nick. Правят се още 2 записа на потребителя с новия ник; не мога да разбера що се правят 2 записа :headbang: Тъп mysql!
steamidnick.png
steamidnick.png (13.26 KiB) Преглеждано 2464 пъти
steamidnick.png
steamidnick.png (13.26 KiB) Преглеждано 2464 пъти
AWP ONLY: 185.148.145.234:27022

Аватар
mi0
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 534
Регистриран на: 09 Дек 2016, 22:02
Се отблагодари: 97 пъти
Получена благодарност: 120 пъти
Обратна връзка:

Търся плъгин за запазване в база данни ника и steamid на играч

Мнение от mi0 » 09 Май 2020, 16:18

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <amxmisc>
#include <sqlx>

#define HOST 	"localhost"
#define USER 	"root"
#define PASS 	""
#define BASE 	"csusers"
#define TABLE 	"users"

new Handle:g_iSqlTuple
new g_szPlayersNames[33][33]

public plugin_init()
{
	register_plugin("SteamID/Nick Sql Save", "1.0", "mi0")
}

public plugin_cfg()
{
	set_task(0.5, "SQLInit")
}

public SQLInit()
{
	g_iSqlTuple = SQL_MakeDbTuple(HOST, USER, PASS, BASE)

	new iErrorCode, g_szError[512], Handle:iSqlConnection
	iSqlConnection = SQL_Connect(g_iSqlTuple, iErrorCode, g_szError, charsmax(g_szError))

	if (iSqlConnection == Empty_Handle)
	{
		set_fail_state(g_szError)
	}

	new Handle:iQueries = SQL_PrepareQuery(iSqlConnection, "CREATE TABLE IF NOT EXISTS `%s`\
	(`id` INT(10) NOT NULL AUTO_INCREMENT,\
	`nickname` VARCHAR(64) NOT NULL,\
	`steamid` VARCHAR(64) NOT NULL,\
	PRIMARY KEY (`id`));", TABLE)

	if (!SQL_Execute(iQueries))
	{
		SQL_QueryError(iQueries, g_szError, charsmax(g_szError))
		set_fail_state(g_szError)
	}

	SQL_FreeHandle(iQueries)
	SQL_FreeHandle(iSqlConnection)
}

public client_authorized(id, const szAuthID[])
{
	get_user_name(id, g_szPlayersNames[id], charsmax(g_szPlayersNames[]))
	new szUserID[64]
	copy(szUserID, charsmax(szUserID), szAuthID)
	Func_SavePlayer(id, szUserID)
}

public client_infochanged(id)
{
	new szNewName[33]
	get_user_info(id, "name", szNewName, charsmax(szNewName))
	if (!equal(szNewName, g_szPlayersNames[id]))
	{
		copy(g_szPlayersNames[id], charsmax(g_szPlayersNames[]), szNewName)
		new szAuthID[64]
		get_user_authid(id, szAuthID, charsmax(szAuthID))
		Func_SavePlayer(id, szAuthID)
	}
}

Func_SavePlayer(id, szAuthID[64])
{
	new iErrorCode, g_szError[512], Handle:iSqlConnection
	iSqlConnection = SQL_Connect(g_iSqlTuple, iErrorCode, g_szError, charsmax(g_szError))

	if (iSqlConnection == Empty_Handle)
	{
		set_fail_state(g_szError)
	}

	new szQuery[128]
	formatex(szQuery, charsmax(szQuery), "SELECT * FROM `%s` WHERE `steamid` = '%s';", TABLE, szAuthID)
	szAuthID[63] = id
	SQL_ThreadQuery(g_iSqlTuple, "OnSelectExecuted", szQuery, szAuthID, sizeof(szAuthID))
}

public OnSelectExecuted(iFailState, Handle:iQuery, szError[], iError, szData[], iDataSize)
{
	if (iFailState != TQUERY_SUCCESS)
	{
		set_fail_state(szError)
	}

	new szQuery[128]
	if (Func_CheckForResults(iQuery))
	{
		formatex(szQuery, charsmax(szQuery), "UPDATE %s SET `nickname` = '%s' WHERE `steamid` = '%s';", TABLE, g_szPlayersNames[szData[63]], szData)	
	}
	else
	{
		formatex(szQuery, charsmax(szQuery), "INSERT INTO `%s` (`nickname`, `steamid`) VALUES ('%s', '%s');", TABLE, g_szPlayersNames[szData[63]], szData)
	}

	SQL_ThreadQuery(g_iSqlTuple, "QueryEmptyHandle", szQuery)
}

public QueryEmptyHandle(iFailState, Handle:iQuery, szError[])
{
	if (iFailState != TQUERY_SUCCESS)
	{
		set_fail_state(szError)
	}
}

bool:Func_CheckForResults(Handle:iQueryHandle)
{
	return SQL_NumResults(iQueryHandle) >= 1
}
aka kurdokoleno
Catch Mod - 87.121.112.232:27021

Аватар
qwertymi
Извън линия
Потребител
Потребител
Мнения: 45
Регистриран на: 13 Мар 2020, 19:18
Се отблагодари: 9 пъти
Получена благодарност: 5 пъти
Обратна връзка:

Търся плъгин за запазване в база данни ника и steamid на играч

Мнение от qwertymi » 09 Май 2020, 16:24

Хах, работи! Браво бе машино!
Може да локвате! :lock:
AWP ONLY: 185.148.145.234:27022

Заключено
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Заявки за плъгини”

Кой е на линия

Потребители разглеждащи този форум: Google [Bot] и 5 госта