Написание плагинов

semjef

semjef.ru
Сообщения
993
Реакции
444
InVeR, я понял только то, что надо вычитать жизни у того кто убил другого игрока, а вот сколько вычитать мне не понятно, напиши подробнее.


Maus, надо чтоб баны брало из какого плагина? дефолтный basebans? для этого лучше поставить что-то, что заносит баны в sqlite, а после уже писать плагин по выводу этих банов
 

InVeR

Участник
Сообщения
11
Реакции
1
semjef, Спс за отклик , временно отбой .
Оффтоп
 
Последнее редактирование:

semjef

semjef.ru
Сообщения
993
Реакции
444
InVeR, Maus, я в воскресенье буду, если будет актуально - сделаю
 

Razor

wcs-world.ru team-vs.ru
Сообщения
93
Реакции
32
The End Is Near..., посмотри пожалуйста сюда, сегодня утром тему создал, а на твою ветку ток щас наткнулся.
Что скажешь по поводу плагина?
 

Maus

Участник
Сообщения
125
Реакции
6
semjef, это весьма актуально:) я тут подумал, если баны будут в базу заноситься, можно сделать 2 плагина: первый - список всех банов в базе (пусть хоть 100000 но они должны выводиться) ну и второй: все так его хотели в админке - это разбан;) ведь классно будет;) а ещё сделать 2 версии плагина:) 1 для sql а другую для mysql, ведь многие mysql используют))) ну и ещё можно сделать в листе банов чтобы нажать на ник забаненного и там отобразилось:

Забаненный: %username%:
Дата когда забанили:
На какой карте забанили:
Какой админ забанил:
Дата когда истекает бан:
Причина бана:
SteamID игрока:
IP игрока:
Страна игрока:
Регион игрока:
Город игрока:
Время онлайна игрока за последний заход:
Общее время онлана игрока на сервере:
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
Maus, бесплатно это делать вряд ли кто будет.
Хотя это весьма нужно.
 

Maus

Участник
Сообщения
125
Реакции
6
R1KO, согласен;) получится некий аналог Sourcebans даже)) Если ещё расширенное меню сделать ну как я описал или наподобие то ваще отлично будет:) мне кажется сделать чтобы баны заносились в sql это просто) хотя я могу ошибаться ведь в sourcepawn я дуб дубом:D
 

Razor

wcs-world.ru team-vs.ru
Сообщения
93
Реакции
32
Razor
Это пробовал?

Именно этот плагин и нехочет работать с версией 3.2

122234_vbn.png
 

Razor

wcs-world.ru team-vs.ru
Сообщения
93
Реакции
32
The End Is Near..., все работает, ток небольшая поправочка версия пишется полностью 3.2.2b например.
Оказывается настолько все просто! как же я сам не догадался((( даже стыдно.
Кароче респект и уважуха!!!
 

Maus

Участник
Сообщения
125
Реакции
6
semjef, ну этот плагин сохраняет баны в базу насколько я знаю))) а можно подпилить чтобы меню с разбаном была?)
 

diller110

Добрая душа
Сообщения
353
Реакции
278
1. Название плагина: SM JoinCounter
2. Детальное описание
Прошу сделать копию EventScript плагина, который выводит в чат (для всех) сообщение: "Игрок %UserName% заходил %Number% раз."
+ для админов (можно с флагом Z) Сообщение было с SteaId: Игрок %UserName%(%SteamId%) заходил %Number% раз.

Upd: Дам, забыл) Сообщение должно выводиться при каждом заходе на сервер, т.е. алгоритм a:=a+1. Не знаю можно ли организовать, но при смене карты человек, наверно переподключается к серверу, так вот это было бы неплохо не учитывать, как заход на сервер.
 
Последнее редактирование:

Maus

Участник
Сообщения
125
Реакции
6
diller110, а точнее? сколько раз за карту? за месяц? за год? это же уточнять надо:-) я хоть и не пишу плагины, но всё же мелочи важны как уже убедился)
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
diller110
Пробуй
PHP:
#include <sourcemod>

#define SQL_DatabaseName "Table_JoinCounter"

new Handle:hDataBase = INVALID_HANDLE;

public Plugin:myinfo =
{
	name        = "Join Count",
	author      = "The End Is Near...",
	version     = "1.0",
	url			= "http://world-source.ru/"
};

public OnPluginStart()
{
	decl String:error[1024];
	hDataBase = SQLite_UseDatabase(SQL_DatabaseName, error, sizeof(error));

	if (hDataBase == INVALID_HANDLE)
	{
		SetFailState("Ошибка подключения к базе данных. Имя базы данных: '%s'|| Ошибка: %s", SQL_DatabaseName, error);
	}
	else
	{
		Format(error, sizeof(error), "CREATE TABLE IF NOT EXISTS %s ('Table_ClientSteamID' varchar (256), Table_ClientJoinCount int (20), PRIMARY KEY ('Table_ClientSteamID'));", SQL_DatabaseName);

		if (!SQL_FastQuery(hDataBase, error))
		{
			if (SQL_GetError(hDataBase, error, sizeof(error)))
			{
				SetFailState("Ошибка создания таблицы. Ошибка: %s", error);
			}
		}
	}
}

public OnClientAuthorized(client, const String:auth[])
{
	if (!IsFakeClient(client))
	{
		decl String:query[1024];
		Format(query, sizeof(query), "SELECT Table_ClientCountJoin FROM %s WHERE Table_ClientSteamID = '%s';", SQL_DatabaseName, auth);

		SQL_TQuery(hDataBase, SQL_ConnectPlayer, query, client);
	}
}

public SQL_ConnectPlayer(Handle:owner, Handle:hndl, const String:error[], any:data)
{
	if (hndl == INVALID_HANDLE)
	{
		LogError("Не удалось выполнить запрос. Ошибка: %s", error);
	}
	else
	{
		decl String:SteamID[40];
		if (GetClientAuthString(data, SteamID, sizeof(SteamID)))
		{
			decl count;

			if (SQL_FetchRow(hndl))
			{
				count = SQL_FetchInt(hndl, 0) + 1;

				decl String:query[1024];
				Format(query, sizeof(query), "UPDATE %s SET Table_ClientJoinCount = %d WHERE Table_ClientSteamID = '%s';", SQL_DatabaseName, count, SteamID);

				if (!SQL_FastQuery(hDataBase, query))
				{
					if (SQL_GetError(hDataBase, query, sizeof(query)))
					{
						LogError("Не сохранить данные. Ошибка: %s", query);
					}
				}
			}
			else
			{		
				decl String:query[1024];
				Format(query, sizeof(query), "INSERT INTO %s ('Table_ClientSteamID', Table_ClientJoinCount) VALUES ('%s', 0);", SQL_DatabaseName, SteamID);

				if (!SQL_FastQuery(hDataBase, query))
				{
					if (SQL_GetError(hDataBase, query, sizeof(query)))
					{
						LogError("Не удалось создать игрока Ошибка: %s", query);
					}
				}

				count = 1;
			}

			PrintToChatAll("\x01Игрок \x04%N \x01(\x04%s\x01) заходил \x04%d \x01раз", data, SteamID, count);
		}
	}
}
 

diller110

Добрая душа
Сообщения
353
Реакции
278
The End Is Near..., Спасибо за старания, но в консоль выдает ошибку:
L 09/10/2013 - 22:23:59: [joincounter.smx] Не удалось выполнить запрос. Ошибка: no such column: Table_ClientCountJoin
И в игре ничего не происходит. Может нужно создать какую-нибудь базу данных?
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
diller110
Перепутал немного, пробуй так
PHP:
#include <sourcemod>

#define SQL_DatabaseName "Table_JoinCounter"

new Handle:hDataBase = INVALID_HANDLE;

public Plugin:myinfo =
{
	name        = "Join Count",
	author      = "The End Is Near...",
	version     = "1.1",
	url			= "http://world-source.ru/"
};

public OnPluginStart()
{
	decl String:error[1024];
	hDataBase = SQLite_UseDatabase(SQL_DatabaseName, error, sizeof(error));

	if (hDataBase == INVALID_HANDLE)
	{
		SetFailState("Ошибка подключения к базе данных. Имя базы данных: '%s'|| Ошибка: %s", SQL_DatabaseName, error);
	}
	else
	{
		Format(error, sizeof(error), "CREATE TABLE IF NOT EXISTS %s ('Table_ClientSteamID' varchar (256), Table_ClientJoinCount int (20), PRIMARY KEY ('Table_ClientSteamID'));", SQL_DatabaseName);

		if (!SQL_FastQuery(hDataBase, error))
		{
			if (SQL_GetError(hDataBase, error, sizeof(error)))
			{
				SetFailState("Ошибка создания таблицы. Ошибка: %s", error);
			}
		}
	}
}

public OnClientAuthorized(client, const String:auth[])
{
	if (!IsFakeClient(client))
	{
		decl String:query[1024];
		Format(query, sizeof(query), "SELECT Table_ClientJoinCount FROM %s WHERE Table_ClientSteamID = '%s';", SQL_DatabaseName, auth);

		SQL_TQuery(hDataBase, SQL_ConnectPlayer, query, client);
	}
}

public SQL_ConnectPlayer(Handle:owner, Handle:hndl, const String:error[], any:data)
{
	if (hndl == INVALID_HANDLE)
	{
		LogError("Не удалось выполнить запрос. Ошибка: %s", error);
	}
	else
	{
		decl String:SteamID[40];
		if (GetClientAuthString(data, SteamID, sizeof(SteamID)))
		{
			decl count;

			if (SQL_FetchRow(hndl))
			{
				count = SQL_FetchInt(hndl, 0) + 1;

				decl String:query[1024];
				Format(query, sizeof(query), "UPDATE %s SET Table_ClientJoinCount = %d WHERE Table_ClientSteamID = '%s';", SQL_DatabaseName, count, SteamID);

				if (!SQL_FastQuery(hDataBase, query))
				{
					if (SQL_GetError(hDataBase, query, sizeof(query)))
					{
						LogError("Не сохранить данные. Ошибка: %s", query);
					}
				}
			}
			else
			{		
				decl String:query[1024];
				Format(query, sizeof(query), "INSERT INTO %s ('Table_ClientSteamID', Table_ClientJoinCount) VALUES ('%s', 0);", SQL_DatabaseName, SteamID);

				if (!SQL_FastQuery(hDataBase, query))
				{
					if (SQL_GetError(hDataBase, query, sizeof(query)))
					{
						LogError("Не удалось создать игрока Ошибка: %s", query);
					}
				}

				count = 1;
			}

			PrintToChatAll("\x01Игрок \x04%N \x01(\x04%s\x01) заходил \x04%d \x01раз", data, SteamID, count);
		}
	}
}
 

diller110

Добрая душа
Сообщения
353
Реакции
278
The End Is Near..., Ошибку перестал писать. Но в игре ничего...

Upd: Отключил большинство плагинов, в чате все равно ничего.


Ups: Все работает, большое спасибо.
 
Последнее редактирование:
Сверху Снизу