Если актуально. Я могу присоединиться
Смотря какой режим тебе интересен.
Мне как бы 2 режима нравятся, survival n coop
Отправлено 03 Январь 2024 - 20:27
Если актуально. Я могу присоединиться
Смотря какой режим тебе интересен.
Мне как бы 2 режима нравятся, survival n coop
Отправлено 08 Январь 2024 - 8:40
Отправлено 08 Январь 2024 - 10:25
Писал на скорую руку, не тестировал.
Для try кодеров, используется новый синтаксис.
https://github.com/B...ntimat-russian-
Начну по порядку, глянув вскользь на код скажу так:
1) Таймер зачем-то в плагин старте каждые 3 секунды, раз он там всё же есть то должен быть каждую секунду а зачем ? Если игроков на сервере допустм нет.
2) Время 200 секунд в таймере по 3 секунды и того 200*3=600 сек.
3) Фильтр сработает по моему только если просто написать слово а если его добавить в предложение " привет ***ас " то плагин не сработает.
Исправление:
Хукать событие say в чат
Перебрать текст по словам и сравнить его со списком фильтра.
Если мат в слове из предложения найден блокируем его следующие сообщения в чат
Блокировку нужно где-то сохранить ибо перезаход решит проблему с доступом.
Это поверхностное ТЗ на "скорую руку"
Сообщение отредактировал Райский: 08 Январь 2024 - 10:27
Отправлено 08 Январь 2024 - 13:06
Начну по порядку, глянув вскользь на код скажу так:
1) Таймер зачем-то в плагин старте каждые 3 секунды, раз он там всё же есть то должен быть каждую секунду а зачем ? Если игроков на сервере допустм нет.
2) Время 200 секунд в таймере по 3 секунды и того 200*3=600 сек.
3) Фильтр сработает по моему только если просто написать слово а если его добавить в предложение " привет ***ас " то плагин не сработает.
Исправление:
Хукать событие say в чат
Перебрать текст по словам и сравнить его со списком фильтра.
Если мат в слове из предложения найден блокируем его следующие сообщения в чат
Блокировку нужно где-то сохранить ибо перезаход решит проблему с доступом.
Это поверхностное ТЗ на "скорую руку"
Скрытый текст
Отправлено 08 Январь 2024 - 23:13
Если актуально. Я могу присоединиться
Для таких моментов я советую взять vds сервер по серьезней, скидываться деньгами по полам и все. И поставить каждому свой сервер. Опыт подсказывает так,что не сколько админом на одном сервер нечему хорошему не приведут.
Отправлено 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
Отправлено 09 Январь 2024 - 21:23
для тех кто может написать на плюсах наброски мат фильтра,
себе на сервер добавлял через перехват команд say и say_team
сам файл 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; }
Отправлено 10 Январь 2024 - 6:31
Начну по порядку, глянув вскользь на код скажу так:
1) Таймер зачем-то в плагин старте каждые 3 секунды, раз он там всё же есть то должен быть каждую секунду а зачем ? Если игроков на сервере допустм нет.
2) Время 200 секунд в таймере по 3 секунды и того 200*3=600 сек.
3) Фильтр сработает по моему только если просто написать слово а если его добавить в предложение " привет ***ас " то плагин не сработает.
Исправление:
Хукать событие say в чат
Перебрать текст по словам и сравнить его со списком фильтра.
Если мат в слове из предложения найден блокируем его следующие сообщения в чат
Блокировку нужно где-то сохранить ибо перезаход решит проблему с доступом.
Это поверхностное ТЗ на "скорую руку"
Скрытый текст
Можно так например:
Сообщение отредактировал BloodyBlade: 10 Январь 2024 - 6:31
Отправлено 10 Январь 2024 - 7:12
Можно так например:
Скрытый текст
Отправлено 10 Январь 2024 - 9:16
Можно так например:
Скрытый текст
Предлагаю добавить куки для хранения мута. И игрок чтобы Мут сняло должен отыграть эти N секунд на сервере для разблокировки.
Или добавить поддержку sourcebans, sbpp, materialadmin.
Так как такую блокировку можно обойти перезаходом и будет довольно хороший плагин.
И сделать список запрещённых слов в формат конфига kv или использовать другой метод списка слов без необходимости перекомпиляции плагина так как далеко не многие это умеют.
Сообщение отредактировал Райский: 10 Январь 2024 - 9:19
Отправлено 10 Январь 2024 - 18:41
Предлагаю добавить куки для хранения мута. И игрок чтобы Мут сняло должен отыграть эти N секунд на сервере для разблокировки.
Или добавить поддержку sourcebans, sbpp, materialadmin.
Так как такую блокировку можно обойти перезаходом и будет довольно хороший плагин.
И сделать список запрещённых слов в формат конфига kv или использовать другой метод списка слов без необходимости перекомпиляции плагина так как далеко не многие это умеют.
Имеется мут или нет уже в куки хранится. Так что, обойти он не обойдёт, даже если перезайдёт. Время тикает в реальном времени.
Отправлено 10 Январь 2024 - 20:29
Имеется мут или нет уже в куки хранится. Так что, обойти он не обойдёт, даже если перезайдёт. Время тикает в реальном времени.
Мат лист надо только =) подскажу (ReadFile Function) Там же есть функции для добавления записей, удаления (в нашем случае слов. Это можно реализовать админ командой пример: !add_filter мат и добавит в лист матов еще 1 строку мат и т.д) И будет хороший свеже-написанный матфильтр.
Отправлено 14 Январь 2024 - 11:59
Парни в чем проблема? вроде уже не первый год в этом, но уже сижу и думаю а что я сделал не так?
Такая ошибка в логах
Отправлено 14 Январь 2024 - 12:28
Парни в чем проблема? вроде уже не первый год в этом, но уже сижу и думаю а что я сделал не так?
Такая ошибка в логах
Скрытый текст
Тебе прямым текстом написано, что нужно 4 аргумента, а у тебя указано только 3 из них
Отправлено 14 Январь 2024 - 20:28
Тебе прямым текстом написано, что нужно 4 аргумента, а у тебя указано только 3 из них
Не поверишь дружище, вообще не вдублил досихпор.
Отправлено 14 Январь 2024 - 21:53
Не поверишь дружище, вообще не вдублил досихпор.
Файл перевода скинь сюда
Отправлено 15 Январь 2024 - 11:06
Файл перевода скинь сюда
Отправлено 15 Январь 2024 - 14:47
Ты как его вообще переводил?
В общем я поставил родной язык,для родного языка (т.е испанский),переименовал слова,которые являются синонимами в английском языке,а также исправил опечатки автора
Отправлено 15 Январь 2024 - 16:39
Отправлено 15 Январь 2024 - 16:59
Всем привет!3 вопросика
1.Не могу вспомнить название одного плагина который позваляет в отключке брать оружие и бросать гранату
2.Есть ли плагин Супер ведьмы?И его можно скачать? На серверах Омеги видел
3.Знаю не по теме будет вопрос но все равно.Где скачать SDK Hooks?И как установить?
Очень надеюсь что тема не заброшена и кто то ответет мне И ещё скажите как менять Карты?По типу в Жертве вместо обычного пути надо идти по другому
Новости, обсуждения, предложения →
Общие вопросы →
Это капец....Автор 53SATURN35 , 19 янв 2024 Rust, Помогите, Помощь, Раст |
|
|
||
Игровые сервера →
Counter-Strike 1.6 →
Проблема CSDM cs 1.6 с респауномАвтор armick , 11 дек 2023 Cs16, Проблема, Помогите, Csdm |
|
|
||
Игровые сервера →
Left 4 Dead →
Сохранение модели и оружия (cookies)Автор wwdbear , 20 авг 2023 модели, оружие, плагин |
|
|
||
Игровые сервера →
Counter-Strike: Global Offensive →
Как поменять режим на соревновательный с обычного?Автор UKVATOP , 01 апр 2023 Помогите, режим, соревновательный и 5 еще... |
|
|
||
Игровые сервера →
Counter-Strike: Global Offensive →
Настройка databases.cfgАвтор POISONone , 13 янв 2023 databases, настройка сервера и 8 еще... |
|
|
0 пользователей, 0 гостей, 0 анонимных