Иконка ресурса

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
  • Автор ресурса
  • #1
dPInfo
Direct Player Info

Статус:

CSGO | CSS | v3.1 | by Primo

Описание:

В основном сделан для того, чтобы избавить людей (в основном новичков в скриптинге) от трудностей сохранения данных игрока. Этот плагин будет записывать статистику игрока, что позволит управлять этой статистикой из других плагинов с помощью Native's.
Запись происходит в базу SQLite MySQL. Записываются убийства, смерти и прочее. Также есть готовая простая система уровней, вам лишь остаётся привязать к определённым уровням различные функции.


Нативы и квары:
Native's:
C-подобный:
// Получает уровень игрока
native pGetPlayerLevel(client);

//Получает опыт игрока
native pGetPlayerEXP(client);

//Устанавливает уровень игрока
native pSetPlayerLevel(client, num1);

//Устанавливает опыт игрока
native pSetPlayerEXP(client, num1);

//Выводит статистику игрока в чат
native pViewStatistic(client);

//Получает кол-во кредитов игрока
native pGetPlayerCredits(client);

//Устанавливает кредиты игроку
native pSetPlayerCredits(client, num1);

//Получает кол-во убийств игрока
native pGetPlayerKills(client);

//Устанавливает кол-во убийств игрока
native pSetPlayerKills(client, num1);

//Получает кол-во смертей игрока
native pGetPlayerDeaths(client);

//Устанавливает кол-во смертей игрока
native pSetPlayerDeaths(client, num1);

//Получает кол-во серии убийств
native pGetPlayerKillStreak(client);

//Устанавливает кол-во серии убийств
native pSetPlayerKillStreak(client, num1);

//Получает значение блокировки
native pGetPlayerBanValue(client);

//Устанавливает значение блокировки
native pSetPlayerBanValue(client, num1);

//Получает значение Custom
native pGetCustom1Value(client);

//Устанавливает значение Custom
native pSetCustom1Value(client, num1);

//Получает значение Custom
native pGetCustom2Value(client);

//Устанавливает значение Custom
native pSetCustom2Value(client, num1);

//Получает значение Custom
native pGetCustom3Value(client);

//Устанавливает значение Custom
native pSetCustom3Value(client, num1);

//Получает значение Custom
native pGetCustom4Value(client);

//Устанавливает значение Custom
native pSetCustom4Value(client, num1);

//Получает значение Custom
native pGetCustom5Value(client);

//Устанавливает значение Custom
native pSetCustom5Value(client, num1);

Cvar's:
C-подобный:
dp_level_enable 1 //1 - вкл. ; 0 - выкл. систему уровней
dp_credit_enable 1 //1- вкл. ; 0 - выкл. кредиты
dp_stats_enable 1 //1- вкл. ; 0 - выкл. вывод статистики
dp_exp_toup 200 // * - значение, которое будет умножаться на уровень игрока для получения требуемого количества опыта для повышения уровня.

Команда для вывода статистики в чат:

C-подобный:
!dpinfo

Установка:
Извлеките содержимое архива в папку addons/sourcemod/
Перейдите в папку addons/sourcemod/configs/, и откройте файл databases.cfg
Добавьте туда:
Для SQLite
PHP:
"dpInfo"
    {
        "driver"    "sqlite"
        "database"  "dp_users"
    }
Для MySQL
PHP:
"dpInfo"
    {
        "driver" "mysql"
        "host" "адрес"
        "database" "имя базы"
        "user" "пользователь"
        "pass" "пароль"
        "port" "3306"
    }

P.S. Использовал этот плагин в качестве основы для моих предыдущих плагинов, и, подумав, решил выложить людям на пользование, ибо это может облегчить работу с сохранением данных и послужить отличной основой для хороших плагинов, требующих запись данных. Создавайте новые плагины с использованием этого с помощью native's. Вы можете использовать сохраняемые строки для других нужд.

Дополнения:
[CS: GO] - dP Hellish Santa - Дополнение к dPInfo
[CS:S/CS:GO] - dP CT Ban - Дополнение к dpInfo

Также, предлагаю обратить внимание на мои предыдущие плагины, сделанные на основе этого:
dPI Game
dPI Random
 
Последнее редактирование модератором:

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
  • Автор ресурса
  • #2
Re: [CSGO] dPInfo 1.1

dPInfo 1.2

Добавлена строка BanValue. Сделана для того, чтобы была возможность сохранить значение для блокировки чего-либо. К примеру для того, чтобы блокировать игрока, чтобы тот не смог заходить за команду КТ, и при выходе значение сохранялось.

Добавлены Natives:
C-подобный:
//Получает значение блокировки
native pGetPlayerBanValue(client);

//Устанавливает значение блокировки
native pSetPlayerBanValue(client, num1);

Добавлено через 4 часа 34 минуты
dPInfo 1.2 fix

Исправлены ошибки в коде.
 
Последнее редактирование:

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
  • Автор ресурса
  • #3
Re: [CSGO|CSS] dPInfo 1.1

dPInfo 1.3

Добавлены Custom строки.

PHP:
//Получает значение Custom
native pGetCustom1Value(client);

//Устанавливает значение Custom
native pSetCustom1Value(client, num1);

//Получает значение Custom
native pGetCustom2Value(client);

//Устанавливает значение Custom
native pSetCustom2Value(client, num1);

//Получает значение Custom
native pGetCustom3Value(client);

//Устанавливает значение Custom
native pSetCustom3Value(client, num1);

//Получает значение Custom
native pGetCustom4Value(client);

//Устанавливает значение Custom
native pSetCustom4Value(client, num1);

//Получает значение Custom
native pGetCustom5Value(client);

//Устанавливает значение Custom
native pSetCustom5Value(client, num1);
 

Webman

Nevermind
Сообщения
803
Реакции
330
Re: [CSGO|CSS] dPInfo 1.1

Хорошая штука, спасибо.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #5
Re: [CSGO|CSS] dPInfo 1.1

Оффтоп
 

Webman

Nevermind
Сообщения
803
Реакции
330
Re: [CSGO|CSS] dPInfo 1.1

Странно.
Поставил на сервер CS:S
У игроков пропала возможность закупки оружия. Убрал плагин - стало нормально. В чем проблема?
 

Webman

Nevermind
Сообщения
803
Реакции
330
Re: [CSGO|CSS] dPInfo 1.1

AlmazON, Только этот плагин стоял и все.
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
  • Автор ресурса
  • #8
Re: [CSGO|CSS] dPInfo 1.1

dPInfo 1.3 fix

В этой версии нет проблем с покупкой.
 

Вложения

  • dPInfo 1.3 fix.zip
    12.4 КБ · Просмотры: 12

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #9
Re: [CSGO|CSS] dPInfo 1.1

Оффтоп
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
  • Автор ресурса
  • #10
Re: [CSGO|CSS] dPInfo 1.1

Оффтоп

Оффтоп
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
  • Автор ресурса
  • #11
Re: [CSGO|CSS] dPInfo 1.3

dPInfo 2.0

Использование MySQL для хранения бд.
Поддержка SQLite не проверялась!!!
Переписан способ сохранения данных. Нет проблем с записью данных и загрузкой данных игрока. Данные игрока больше не пропадают. Чужие данные не загружаются.
 

Вложения

  • dpInfo 2.0.zip
    13.6 КБ · Просмотры: 9

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #12
Re: [CSGO|CSS] dPInfo 2.0

PHP:
else if(MYSQL)
	{
		SQL_TQuery(db, SQL_SelectPlayerCallback, "CREATE TABLE IF NOT EXISTS users (\ 
				Steam varchar(35) NOT NULL, \
				Nick varchar(100) NOT NULL, \
				Kills int(20) NOT NULL default '0',\
				Deaths int(20) NOT NULL default '0',\
				Level int(20) NOT NULL default '0',\
				EXP int(20) NOT NULL default '0',\
				Credits int(20) NOT NULL default '0',\
				BotKills int(20) NOT NULL default '0',\
				BanValue int(20) NOT NULL default '0',\
				Custom1 int(20) NOT NULL default '0',\
				Custom2 int(20) NOT NULL default '0',\
				Custom3 int(20) NOT NULL default '0',\
				Custom4 int(20) NOT NULL default '0',\
				Custom5 int(20) NOT NULL default '0',\
				PlayerJoin int(20) NOT NULL, \
				PRIMARY KEY (Steam)) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
	}

И при создании таблиц, такой отбратный вызов бред:
PHP:
SQL_TQuery(db, SQL_SelectPlayerCallback,

Сделай так:
PHP:
SQL_TQuery(db, SQL_CheckError, "запрос");

public SQL_CheckError(Handle:owner, Handle:hndle, const String:error[], any:data)
{
	if(error[0]) LogError("Query Failed: %s", error);
}

PHP:
FormatEx(query, sizeof(query), "UPDATE users SET Steam = '%s', Nick = '%s', Kills = %d, Deaths = %d, Level = %d, EXP = %d, Credits = %d, BotKills = %d, BanValue = %d, Custom1 = %d, Custom2 = %d, Custom3 = %d, Custom4 = %d, Custom5 = %d, PlayerJoin = %d WHERE Steam = '%s'", sAuth, pName, Player[pKills][client], Player[pDeaths][client], Player[pLevel][client], Player[pEXP][client], Player[pCredit][client], Player[pBotKills][client], Player[pBanValue][client], Player[Custom1][client], Player[Custom2][client], Player[Custom3][client], Player[Custom4][client], Player[Custom5][client], Player[PlayerJoin][client], sAuth); 
SQL_TQuery(db, SQL_SelectPlayerCallback, query);
И опять тот же каллбек.
И опять 25.
PHP:
public VErtoe_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
	new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
	new victim = GetClientOfUserId(GetEventInt(event, "userid"));
	new bool:headshot = GetEventBool(event, "headshot");
	if(attacker > 0 && victim > 0)
	{
		if(IsClientInGame(attacker) && IsClientInGame(victim))
		{
			if(IsFakeClient(victim))
			{
				Player[pBotKills][attacker]++;
			}
			Player[pKills][attacker]++;
			Player[pDeaths][victim]++;
			if(EnCr == 1 && attacker != victim) Player[pCredit][attacker]++;
			Player[pKillStreak][attacker]++;
			Player[pKillStreak][victim] = 0
			if(EnLvl == 1)
			{
				new nLVLxp = GetClientHealth(attacker)*Player[pLevel][victim]/10
				nLVLxp = nLVLxp+Player[pEXP][attacker]
				Player[pEXP][attacker] = nLVLxp
				if(Player[pKillStreak][victim] > 0)
				{
					new nLVLxp2 = Player[pLevel][victim]*Player[pKillStreak][victim];
					Player[pEXP][attacker] = Player[pEXP][attacker]+nLVLxp2
					PrintToChat(attacker, "Вы получили дополнительно \x01\x04%d \x01\x05опыта за убившего \x01\x04\%d \x01\x05людей", nLVLxp2, Player[pKillStreak][victim]);
				}
				if(headshot)
				{
					Player[pEXP][attacker] = Player[pEXP][attacker]+50;
					PrintToChat(attacker, "Вы получили \x01\x04 50\x01\x05 опыта за убийство в голову");
				}
				CheckLevel(attacker);
				CheckLevel(victim);
			}

		}
    }
}
Создаешь переменные еще за долго до их использования и не факт что они будут использоваться, и к тому же их можно не создавать.
PHP:
public VErtoe_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
	new attacker = GetClientOfUserId(GetEventInt(event, "attacker")),
		victim = GetClientOfUserId(GetEventInt(event, "userid"));

	if(attacker > 0 && victim > 0 && IsClientInGame(attacker) && IsClientInGame(victim))
	{
		if(IsFakeClient(victim))
		{
			Player[pBotKills][attacker]++;
		}
		Player[pKills][attacker]++;
		Player[pDeaths][victim]++;
		if(EnCr == 1 && attacker != victim) Player[pCredit][attacker]++;
		Player[pKillStreak][attacker]++;
		Player[pKillStreak][victim] = 0
		if(EnLvl == 1)
		{
			new nLVLxp = GetClientHealth(attacker)*Player[pLevel][victim]/10
			nLVLxp = nLVLxp+Player[pEXP][attacker]
			Player[pEXP][attacker] = nLVLxp
			if(Player[pKillStreak][victim] > 0)
			{
				new nLVLxp2 = Player[pLevel][victim]*Player[pKillStreak][victim];
				Player[pEXP][attacker] = Player[pEXP][attacker]+nLVLxp2
				PrintToChat(attacker, "Вы получили дополнительно \x01\x04%d \x01\x05опыта за убившего \x01\x04\%d \x01\x05людей", nLVLxp2, Player[pKillStreak][victim]);
			}
			if(GetEventBool(event, "headshot"))
			{
				Player[pEXP][attacker] = Player[pEXP][attacker]+50;
				PrintToChat(attacker, "Вы получили \x01\x04 50\x01\x05 опыта за убийство в голову");
			}
			CheckLevel(attacker);
			CheckLevel(victim);
		}
	}
}
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
  • Автор ресурса
  • #13
Re: [CSGO|CSS] dPInfo 2.0

PHP:
else if(MYSQL)
	{
		SQL_TQuery(db, SQL_SelectPlayerCallback, "CREATE TABLE IF NOT EXISTS users (\ 
				Steam varchar(35) NOT NULL, \
				Nick varchar(100) NOT NULL, \
				Kills int(20) NOT NULL default '0',\
				Deaths int(20) NOT NULL default '0',\
				Level int(20) NOT NULL default '0',\
				EXP int(20) NOT NULL default '0',\
				Credits int(20) NOT NULL default '0',\
				BotKills int(20) NOT NULL default '0',\
				BanValue int(20) NOT NULL default '0',\
				Custom1 int(20) NOT NULL default '0',\
				Custom2 int(20) NOT NULL default '0',\
				Custom3 int(20) NOT NULL default '0',\
				Custom4 int(20) NOT NULL default '0',\
				Custom5 int(20) NOT NULL default '0',\
				PlayerJoin int(20) NOT NULL, \
				PRIMARY KEY (`Steam`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
	}

Стоял Primary Key, однако с тем запросом Primary Key не меняется. Да и смысл давать изначальные значения, если они всё-равно потом добавятся.

Добавлено через 4 минуты
И при создании таблиц, такой отбратный вызов бред:
PHP:
SQL_TQuery(db, SQL_SelectPlayerCallback,

Сделай так:
PHP:
SQL_TQuery(db, SQL_CheckError, "запрос");

public SQL_CheckError(Handle:owner, Handle:hndle, const String:error[], any:data)
{
	if(error[0]) LogError("Query Failed: %s", error);
}

А чем он бред то? Ошибка в любом случае выводится в логи, а так я одной и той же функцией получаю данные, а так же вывожу ошибку.

Ну а второе - косяк, это да)
 
Последнее редактирование:

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #14
Re: [CSGO|CSS] dPInfo 2.0

А чем он бред то? Ошибка в любом случае выводится в логи, а так я одной и той же функцией получаю данные, а так же вывожу ошибку.
PHP:
if(hndl == INVALID_HANDLE)
	{
		LogError("Ошибка подключения к базе данных (%s)", error);
	}
	else
	{
		if(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl) && IsClientInGame(iClient))
		{
А потом else и if(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl) && IsClientInGame(iClient))
Так 1 проверка, а так ветвление + еще несколько проверок.
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
  • Автор ресурса
  • #15
Re: [CSGO|CSS] dPInfo 2.0

PHP:
if(hndl == INVALID_HANDLE)
	{
		LogError("Ошибка подключения к базе данных (%s)", error);
	}
	else
	{
		if(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl) && IsClientInGame(iClient))
		{
А потом else и if(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl) && IsClientInGame(iClient))
Так 1 проверка, а так ветвление + еще несколько проверок.

Однако, далее идёт получение данных. Или лучше делать 2 разные функции? Одна на получение данных, а другая на возврат ошибки?
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #16
Re: [CSGO|CSS] dPInfo 2.0

Primo, обрати внимание на свою функцию и на мою. Моя проверяет есть ли ошибка, а твоя всё ли нормально с подключением.
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
  • Автор ресурса
  • #17
Re: [CSGO|CSS] dPInfo 2.0

Primo, обрати внимание на свою функцию и на мою. Моя проверяет есть ли ошибка, а твоя всё ли нормально с подключением.

Ну если вы смотрите на выводимый текст, то да.
Однако, тут и нужно проверять подключение к бд, если с запросами проблем нет. Если подключение осуществлено без проблем, то какие могут быть ошибки?
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #18
Re: [CSGO|CSS] dPInfo 2.0

Primo, а мало ли? Опечатался в названии поля, не верный синтаксис, не верное количество передаваемых значений и т.д.
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
  • Автор ресурса
  • #19
Re: [CSGO|CSS] dPInfo 2.0

Primo, а мало ли? Опечатался в названии поля, не верный синтаксис, не верное количество передаваемых значений и т.д.

Ну это уже дело того, кто как-то изменяет плагин.
Задача плагина лишь оперировать с уже имеющимися значениями. А ошибку выводить в том случае, если не установлено соединение с бд.
Я не несу ответственность за то, что кто-то изменяет этот плагин так, как ему нужно.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #20
Re: [CSGO|CSS] dPInfo 2.0

AlmazON, соглсен, но лень было всё исправлять.
Но не всегда, в плагинах статы не так.
 
Сверху Снизу