Перейти к содержимому


Фотография

Единая тема для поиска плагинов L4D

поиск плагин помогите найти

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 1453

#1341 Alexander_Mirny

Alexander_Mirny

    Пользователь

  • Пользователь
  • PipPipPip
  • 378 сообщений

Отправлено 03 Январь 2024 - 20:27

Если актуально. Я могу присоединиться 

Смотря какой режим тебе интересен. 

Мне как бы 2 режима нравятся, survival n coop



#1342 Alexander_Mirny

Alexander_Mirny

    Пользователь

  • Пользователь
  • PipPipPip
  • 378 сообщений

Отправлено 08 Январь 2024 - 8:40

Писал на скорую руку, не тестировал.
Для try кодеров, используется новый синтаксис.
https://github.com/B...ntimat-russian-

#1343 Райский

Райский

    Пользователь

  • Пользователь
  • PipPipPip
  • 274 сообщений

Отправлено 08 Январь 2024 - 10:25

Писал на скорую руку, не тестировал.
Для try кодеров, используется новый синтаксис.
https://github.com/B...ntimat-russian-

 

 

Начну по порядку, глянув вскользь на код скажу так:

1) Таймер зачем-то в плагин старте каждые 3 секунды, раз он там всё же есть то должен быть каждую секунду а зачем ? Если игроков на сервере допустм нет.

2) Время 200 секунд в таймере по 3 секунды и того 200*3=600 сек.

3) Фильтр сработает по моему только если просто написать слово а если его добавить в предложение " привет ***ас "  то плагин не сработает.

 

Исправление:

Хукать событие say в чат 

Перебрать текст по словам и сравнить его со списком фильтра. 

Если мат в слове из предложения найден блокируем его следующие сообщения в чат

Блокировку нужно где-то сохранить ибо перезаход решит проблему с доступом.

 

Это поверхностное ТЗ на "скорую руку"  :D

 

Скрытый текст
 


Сообщение отредактировал Райский: 08 Январь 2024 - 10:27


#1344 Alexander_Mirny

Alexander_Mirny

    Пользователь

  • Пользователь
  • PipPipPip
  • 378 сообщений

Отправлено 08 Январь 2024 - 13:06

Начну по порядку, глянув вскользь на код скажу так:
1) Таймер зачем-то в плагин старте каждые 3 секунды, раз он там всё же есть то должен быть каждую секунду а зачем ? Если игроков на сервере допустм нет.
2) Время 200 секунд в таймере по 3 секунды и того 200*3=600 сек.
3) Фильтр сработает по моему только если просто написать слово а если его добавить в предложение " привет ***ас "  то плагин не сработает.
 
Исправление:
Хукать событие say в чат 
Перебрать текст по словам и сравнить его со списком фильтра. 
Если мат в слове из предложения найден блокируем его следующие сообщения в чат
Блокировку нужно где-то сохранить ибо перезаход решит проблему с доступом.
 
Это поверхностное ТЗ на "скорую руку"  :D
 

Скрытый текст


Сегодня будет фикс

#1345 AlexMy

AlexMy

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 037 сообщений

Отправлено 08 Январь 2024 - 23:13

Если актуально. Я могу присоединиться 

Для таких моментов я советую взять vds сервер по серьезней, скидываться деньгами по полам и все. И поставить каждому свой сервер. Опыт подсказывает так,что не сколько админом на одном сервер нечему хорошему не приведут. 



#1346 DenMarko

DenMarko

    Участник

  • Пользователь
  • PipPip
  • 60 сообщений

Отправлено 09 Январь 2024 - 14:27

для тех кто может написать на плюсах наброски мат фильтра,
себе на сервер добавлял через перехват команд say и say_team
сам файл Прикрепленный файл  mat_list.txt   5,46К   0 Количество загрузок:

#include <iostream>
#include <Windows.h>
#include <time.h>
#include <vector>
#include <regex>
#include <cctype>

unsigned int my_tolower(unsigned int c)
{
	if (c >= 'A' && c <= 'Z')
	{
		return c + ('a' - 'A');
	}
	else if (c >= 0xffffffC0 && c <= 0xffffffDf)
	{
		return c + (0xffffffE0 - 0xffffffC0);
	}
	return c;
}

int my_strcmp(const char* s1, const char* s2)
{
	int i = 0;
	while (s1[i] == s2[i])
	{
		if (s1[i] == '\0')
		{
			return 0;
		}
		i++;
	}
	return s1[i] - s2[i];
}


unsigned int strncopy(char *dest, const char *src, size_t count)
{
	if (!count)
	{
		return 0;
	}

	char *start = dest;
	while ((*src) && (--count))
	{
		*dest++ = *src++;
	}
	*dest = '\0';

	return (dest - start);
}

int my_strncmp(const char* s1, const char* s2, size_t n)
{
	for (size_t i = 0; i < n; i++, s1++, s2++)
	{
		if (my_tolower(*s1) != my_tolower(*s2))
		{
			return (my_tolower(*s1) - my_tolower(*s2));
		}
		if (*s1 == '\0')
		{
			return 0;
		}
	}
	return 0;
}


char *UTIL_ReplaceEx(char *subject, size_t maxLen, const char *search, size_t searchLen, const char *replace, size_t replaceLen)
{
	char *ptr = subject;
	size_t browsed = 0;
	size_t textLen = strlen(subject);

	if (searchLen > textLen)
	{
		return NULL;
	}

	if (maxLen == 1)
	{
		if (my_strcmp(subject, search) == 0 && replaceLen == 0)
		{
			*subject = '\0';
			return subject;
		}
		else
		{
			return NULL;
		}
	}

	maxLen--;

	while (*ptr != '\0' && (browsed <= textLen - searchLen))
	{
		if (my_strncmp(ptr, search, searchLen) == 0)
		{
			if (replaceLen > searchLen)
			{
				if (maxLen - textLen < replaceLen - searchLen)
				{
					if (browsed + replaceLen >= maxLen)
					{
						replaceLen = maxLen - browsed;
						strncopy(ptr, replace, replaceLen + 1);
					}
					else
					{
						size_t origBytesToCopy = (textLen - (browsed + searchLen)) + 1;
						size_t realBytesToCopy = (maxLen - (browsed + replaceLen)) + 1;
						char *moveFrom = ptr + searchLen + (origBytesToCopy - realBytesToCopy);
						char *moveTo = ptr + replaceLen;

						memmove(moveTo, moveFrom, realBytesToCopy);

						memcpy(ptr, replace, replaceLen);
					}
				}
				else
				{
					char *moveFrom = ptr + searchLen;
					char *moveTo = ptr + replaceLen;

					size_t bytesToCopy = (textLen - (browsed + searchLen)) + 1;
					memmove(moveTo, moveFrom, bytesToCopy);

					memcpy(ptr, replace, replaceLen);
				}
			}
			else if (replaceLen < searchLen)
			{
				char *moveFrom = ptr + searchLen;
				char *moveTo = ptr + replaceLen;

				if (replaceLen)
				{
					memcpy(ptr, replace, replaceLen);
				}

				size_t bytesToCopy = (textLen - (browsed + searchLen)) + 1;

				memmove(moveTo, moveFrom, bytesToCopy);
			}
			else
			{
				memcpy(ptr, replace, replaceLen);
			}

			return ptr + replaceLen;
		}
		ptr++;
		browsed++;
	}

	return NULL;
}

unsigned int UTIL_ReplaceAll(char *subject, size_t maxlength, const char *search, const char *replace)
{
	size_t searchLen = strlen(search);
	size_t replaceLen = strlen(replace);

	char *ptr = subject;
	unsigned int total = 0;
	while ((ptr = UTIL_ReplaceEx(ptr, maxlength, search, searchLen, replace, replaceLen)) != NULL)
	{
		total++;
		if (*ptr == '\0')
		{
			break;
		}
	}

	return total;
}

const char *my_stristr(const char *str, const char *substr)
{
	if (!*substr)
	{
		return ((char *)str);
	}

	char *needle = (char *)substr;
	char *prevloc = (char *)str;
	char *haystack = (char *)str;

	while (*haystack)
	{
		if (my_tolower(*haystack) == my_tolower(*needle))
		{
			haystack++;
			if (!*++needle)
			{
				return prevloc;
			}
		}
		else
		{
			haystack = ++prevloc;
			needle = (char *)substr;
		}
	}

	return NULL;
}

#pragma warning(disable : 4996)

int main()
{
	SetConsoleCP(1251); //65001 CP_UTF8 1251
	SetConsoleOutputCP(1251);

	char text[128];
	char buffer[64];
	FILE *fo = nullptr;
	std::vector<std::string*> *list = new std::vector<std::string *>();

	fopen_s(&fo, "mat_list.txt", "r");
	if (fo == nullptr)
	{
		printf_s("file not open\n");
		system("PAUSE");
		return 0;
	}

	while (fscanf(fo, "%s", buffer) == 1)
	{
		list->push_back(new std::string(buffer));
	}

	fclose(fo);
ty:
	printf_s("Hапешить любой слог\n");
	std::cin.getline(text, sizeof(text));
	printf_s("%s\n", text);
	
	for (auto& info : *list)
	{
		size_t len = info->length();
		if (my_stristr(text, info->c_str()))
		{
			std::string start(len, '*');
			UTIL_ReplaceAll(text, sizeof(text), info->c_str(), start.c_str());
			printf_s("совпадение\n");
		}
	}

	printf_s("%s\n", text);
	goto ty;
	delete list;
	system("PAUSE");
	return 0;
}


Сообщение отредактировал DenMarko: 09 Январь 2024 - 14:31

  • Райский и Lider99 это нравится

#1347 Alexander_Mirny

Alexander_Mirny

    Пользователь

  • Пользователь
  • PipPipPip
  • 378 сообщений

Отправлено 09 Январь 2024 - 21:23

для тех кто может написать на плюсах наброски мат фильтра,
себе на сервер добавлял через перехват команд say и say_team

сам файл attachicon.gif mat_list.txt

#include <iostream>
#include <Windows.h>
#include <time.h>
#include <vector>
#include <regex>
#include <cctype>

unsigned int my_tolower(unsigned int c)
{
	if (c >= 'A' && c <= 'Z')
	{
		return c + ('a' - 'A');
	}
	else if (c >= 0xffffffC0 && c <= 0xffffffDf)
	{
		return c + (0xffffffE0 - 0xffffffC0);
	}
	return c;
}

int my_strcmp(const char* s1, const char* s2)
{
	int i = 0;
	while (s1[i] == s2[i])
	{
		if (s1[i] == '\0')
		{
			return 0;
		}
		i++;
	}
	return s1[i] - s2[i];
}


unsigned int strncopy(char *dest, const char *src, size_t count)
{
	if (!count)
	{
		return 0;
	}

	char *start = dest;
	while ((*src) && (--count))
	{
		*dest++ = *src++;
	}
	*dest = '\0';

	return (dest - start);
}

int my_strncmp(const char* s1, const char* s2, size_t n)
{
	for (size_t i = 0; i < n; i++, s1++, s2++)
	{
		if (my_tolower(*s1) != my_tolower(*s2))
		{
			return (my_tolower(*s1) - my_tolower(*s2));
		}
		if (*s1 == '\0')
		{
			return 0;
		}
	}
	return 0;
}


char *UTIL_ReplaceEx(char *subject, size_t maxLen, const char *search, size_t searchLen, const char *replace, size_t replaceLen)
{
	char *ptr = subject;
	size_t browsed = 0;
	size_t textLen = strlen(subject);

	if (searchLen > textLen)
	{
		return NULL;
	}

	if (maxLen == 1)
	{
		if (my_strcmp(subject, search) == 0 && replaceLen == 0)
		{
			*subject = '\0';
			return subject;
		}
		else
		{
			return NULL;
		}
	}

	maxLen--;

	while (*ptr != '\0' && (browsed <= textLen - searchLen))
	{
		if (my_strncmp(ptr, search, searchLen) == 0)
		{
			if (replaceLen > searchLen)
			{
				if (maxLen - textLen < replaceLen - searchLen)
				{
					if (browsed + replaceLen >= maxLen)
					{
						replaceLen = maxLen - browsed;
						strncopy(ptr, replace, replaceLen + 1);
					}
					else
					{
						size_t origBytesToCopy = (textLen - (browsed + searchLen)) + 1;
						size_t realBytesToCopy = (maxLen - (browsed + replaceLen)) + 1;
						char *moveFrom = ptr + searchLen + (origBytesToCopy - realBytesToCopy);
						char *moveTo = ptr + replaceLen;

						memmove(moveTo, moveFrom, realBytesToCopy);

						memcpy(ptr, replace, replaceLen);
					}
				}
				else
				{
					char *moveFrom = ptr + searchLen;
					char *moveTo = ptr + replaceLen;

					size_t bytesToCopy = (textLen - (browsed + searchLen)) + 1;
					memmove(moveTo, moveFrom, bytesToCopy);

					memcpy(ptr, replace, replaceLen);
				}
			}
			else if (replaceLen < searchLen)
			{
				char *moveFrom = ptr + searchLen;
				char *moveTo = ptr + replaceLen;

				if (replaceLen)
				{
					memcpy(ptr, replace, replaceLen);
				}

				size_t bytesToCopy = (textLen - (browsed + searchLen)) + 1;

				memmove(moveTo, moveFrom, bytesToCopy);
			}
			else
			{
				memcpy(ptr, replace, replaceLen);
			}

			return ptr + replaceLen;
		}
		ptr++;
		browsed++;
	}

	return NULL;
}

unsigned int UTIL_ReplaceAll(char *subject, size_t maxlength, const char *search, const char *replace)
{
	size_t searchLen = strlen(search);
	size_t replaceLen = strlen(replace);

	char *ptr = subject;
	unsigned int total = 0;
	while ((ptr = UTIL_ReplaceEx(ptr, maxlength, search, searchLen, replace, replaceLen)) != NULL)
	{
		total++;
		if (*ptr == '\0')
		{
			break;
		}
	}

	return total;
}

const char *my_stristr(const char *str, const char *substr)
{
	if (!*substr)
	{
		return ((char *)str);
	}

	char *needle = (char *)substr;
	char *prevloc = (char *)str;
	char *haystack = (char *)str;

	while (*haystack)
	{
		if (my_tolower(*haystack) == my_tolower(*needle))
		{
			haystack++;
			if (!*++needle)
			{
				return prevloc;
			}
		}
		else
		{
			haystack = ++prevloc;
			needle = (char *)substr;
		}
	}

	return NULL;
}

#pragma warning(disable : 4996)

int main()
{
	SetConsoleCP(1251); //65001 CP_UTF8 1251
	SetConsoleOutputCP(1251);

	char text[128];
	char buffer[64];
	FILE *fo = nullptr;
	std::vector<std::string*> *list = new std::vector<std::string *>();

	fopen_s(&fo, "mat_list.txt", "r");
	if (fo == nullptr)
	{
		printf_s("file not open\n");
		system("PAUSE");
		return 0;
	}

	while (fscanf(fo, "%s", buffer) == 1)
	{
		list->push_back(new std::string(buffer));
	}

	fclose(fo);
ty:
	printf_s("Hапешить любой слог\n");
	std::cin.getline(text, sizeof(text));
	printf_s("%s\n", text);
	
	for (auto& info : *list)
	{
		size_t len = info->length();
		if (my_stristr(text, info->c_str()))
		{
			std::string start(len, '*');
			UTIL_ReplaceAll(text, sizeof(text), info->c_str(), start.c_str());
			printf_s("совпадение\n");
		}
	}

	printf_s("%s\n", text);
	goto ty;
	delete list;
	system("PAUSE");
	return 0;
}


Можно собрать в единый .so и залить, но потребуется создать библиотеку самих функций предварительно указав native.

#1348 BloodyBlade

BloodyBlade

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 154 сообщений

Отправлено 10 Январь 2024 - 6:31

Начну по порядку, глянув вскользь на код скажу так:

1) Таймер зачем-то в плагин старте каждые 3 секунды, раз он там всё же есть то должен быть каждую секунду а зачем ? Если игроков на сервере допустм нет.

2) Время 200 секунд в таймере по 3 секунды и того 200*3=600 сек.

3) Фильтр сработает по моему только если просто написать слово а если его добавить в предложение " привет ***ас "  то плагин не сработает.

 

Исправление:

Хукать событие say в чат 

Перебрать текст по словам и сравнить его со списком фильтра. 

Если мат в слове из предложения найден блокируем его следующие сообщения в чат

Блокировку нужно где-то сохранить ибо перезаход решит проблему с доступом.

 

Это поверхностное ТЗ на "скорую руку"  :D

 

Скрытый текст
 

Можно так например:

Скрытый текст

Сообщение отредактировал BloodyBlade: 10 Январь 2024 - 6:31

  • Райский и Alexander_Mirny это нравится

#1349 Alexander_Mirny

Alexander_Mirny

    Пользователь

  • Пользователь
  • PipPipPip
  • 378 сообщений

Отправлено 10 Январь 2024 - 7:12

Можно так например:

Скрытый текст

Отлично получилось, закину в релизы укажу что автор доработки ты.

#1350 Райский

Райский

    Пользователь

  • Пользователь
  • PipPipPip
  • 274 сообщений

Отправлено 10 Январь 2024 - 9:16

Можно так например:

Скрытый текст

Предлагаю добавить куки для хранения мута. И игрок чтобы Мут сняло должен отыграть эти N секунд на сервере для разблокировки.

 

Или добавить поддержку sourcebans, sbpp, materialadmin. 

 

Так как такую блокировку можно обойти перезаходом  и будет довольно хороший плагин. 

 

И сделать список запрещённых слов в формат конфига kv или использовать другой метод списка слов без необходимости перекомпиляции плагина так как далеко не многие это умеют. 


Сообщение отредактировал Райский: 10 Январь 2024 - 9:19


#1351 BloodyBlade

BloodyBlade

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 154 сообщений

Отправлено 10 Январь 2024 - 18:41

Предлагаю добавить куки для хранения мута. И игрок чтобы Мут сняло должен отыграть эти N секунд на сервере для разблокировки.

 

Или добавить поддержку sourcebans, sbpp, materialadmin. 

 

Так как такую блокировку можно обойти перезаходом  и будет довольно хороший плагин. 

 

И сделать список запрещённых слов в формат конфига kv или использовать другой метод списка слов без необходимости перекомпиляции плагина так как далеко не многие это умеют. 

Имеется мут или нет уже в куки хранится. Так что, обойти он не обойдёт, даже если перезайдёт. Время тикает в реальном времени.


  • Райский это нравится

#1352 Райский

Райский

    Пользователь

  • Пользователь
  • PipPipPip
  • 274 сообщений

Отправлено 10 Январь 2024 - 20:29

Имеется мут или нет уже в куки хранится. Так что, обойти он не обойдёт, даже если перезайдёт. Время тикает в реальном времени.

Мат лист надо только =)  подскажу (ReadFile Function) Там же есть функции для добавления записей, удаления (в нашем случае слов. Это можно реализовать админ командой пример: !add_filter мат и добавит в лист матов еще 1 строку мат и т.д) И будет хороший свеже-написанный матфильтр. 



#1353 Alexander_Mirny

Alexander_Mirny

    Пользователь

  • Пользователь
  • PipPipPip
  • 378 сообщений

Отправлено 14 Январь 2024 - 11:59

Парни в чем проблема? вроде уже не первый год в этом, но уже сижу и думаю а что я сделал не так?

 

Такая ошибка в логах 

Скрытый текст


#1354 BloodyBlade

BloodyBlade

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 154 сообщений

Отправлено 14 Январь 2024 - 12:28

Парни в чем проблема? вроде уже не первый год в этом, но уже сижу и думаю а что я сделал не так?

 

Такая ошибка в логах 

Скрытый текст

Тебе прямым текстом написано, что нужно 4 аргумента, а у тебя указано только 3 из них



#1355 Alexander_Mirny

Alexander_Mirny

    Пользователь

  • Пользователь
  • PipPipPip
  • 378 сообщений

Отправлено 14 Январь 2024 - 20:28

Тебе прямым текстом написано, что нужно 4 аргумента, а у тебя указано только 3 из них

Не поверишь дружище, вообще не вдублил досихпор. 



#1356 BloodyBlade

BloodyBlade

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 154 сообщений

Отправлено 14 Январь 2024 - 21:53

Не поверишь дружище, вообще не вдублил досихпор. 

Файл перевода скинь сюда



#1357 Alexander_Mirny

Alexander_Mirny

    Пользователь

  • Пользователь
  • PipPipPip
  • 378 сообщений

Отправлено 15 Январь 2024 - 11:06

Файл перевода скинь сюда

Прикрепленные файлы



#1358 JustMadMan

JustMadMan

    Новичок

  • Пользователь
  • Pip
  • 14 сообщений

Отправлено 15 Январь 2024 - 14:47

Ты как его вообще переводил?
В общем я поставил родной язык,для родного языка (т.е испанский),переименовал слова,которые являются синонимами в английском языке,а также исправил опечатки автора



#1359 ???

???

    Новичок

  • Пользователь
  • Pip
  • 47 сообщений

Отправлено 15 Январь 2024 - 16:39

Всем привет!3 вопросика
1.Не могу вспомнить название одного плагина который позваляет в отключке брать оружие и бросать гранату
2.Есть ли плагин Супер ведьмы?И его можно скачать? На серверах Омеги видел
3.Знаю не по теме будет вопрос но все равно.Где скачать SDK Hooks?И как установить?
Очень надеюсь что тема не заброшена и кто то ответет мне
И ещё скажите как менять Карты?По типу в Жертве вместо обычного пути надо идти по другому

#1360 Alexander_Mirny

Alexander_Mirny

    Пользователь

  • Пользователь
  • PipPipPip
  • 378 сообщений

Отправлено 15 Январь 2024 - 16:59

Всем привет!3 вопросика
1.Не могу вспомнить название одного плагина который позваляет в отключке брать оружие и бросать гранату
2.Есть ли плагин Супер ведьмы?И его можно скачать? На серверах Омеги видел
3.Знаю не по теме будет вопрос но все равно.Где скачать SDK Hooks?И как установить?
Очень надеюсь что тема не заброшена и кто то ответет мне И ещё скажите как менять Карты?По типу в Жертве вместо обычного пути надо идти по другому


На 1 из вопросов отвечу, sdkhooks это библиотека которая идет по стандарту в sourcemod.



Темы с аналогичным тегами поиск, плагин, помогите, найти

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных