Как сделать анти-спам

Lavas653

Активный участник
Регистрация
3 Май 2023
Сообщения
30
Мне надо сделать чтоб игрок не создавал спам и ему пиcало "не спам"
 

Apotheoses

Эксперт
Регистрация
19 Июн 2023
Сообщения
60
Это анти-спам, а не авто-спам
 

Lavas653

Активный участник
Регистрация
3 Май 2023
Сообщения
30
знаешь на этот ответ если нет зач писать тут
 

Sokolli

Участник
Регистрация
3 Май 2023
Сообщения
118
Событие чата: присвоить переменную: <%player%_cooldown> = 1
Ждать: 100
Присвоить переменную: <%player%_cooldown> = 0

Если значение: <%player%_cooldown> = 1 - отменить событие
 

onn512

Эксперт
Регистрация
2 Май 2023
Сообщения
124
Код:
Событие игрока(Вход):
    Начать цикл(cooldown_chat)
    
Событие игрока(Событие чата):
    Отменить событие()
    Если переменная(%player%_cooldown_chat <= 0):
        Установить(%player%_cooldown_chat = 3)
        Сообщение(%player%_prefix, "%player%&7: &f", Сообщение игрока) [Все игроки]
    Иначе:
        Сообщение("&fНельзя так часто писать. Подожди: &6", %player%_cooldown_chat, "&6 сек.")

Цикл(cooldown_chat, 20 тиков):
    Выбрать игрока по сравнить число(%selected%_cooldown_chat > 0)
    Отнять(%selected%_cooldown_chat -= 1)

Замени оформление на свое и переменные с префиксом/суффиксом.
 

maxim34a

Эксперт
Регистрация
10 Июн 2023
Сообщения
538
Этот код всегда работал. Мб у тебя префиксы в игре?
Нет, он не будет работать. У нас получается такая логика:
Игрок пишет в чат -> Присваиваем значение переменной 1 -> Ждать(5 секунд) -> Присваиваем значение переменной 0
Игрок СНОВА пишет в чат, пока идёт отсчёт тех 5 секунд, тем самым снова присваивая значений переменной 1 и запуская все то же самое.
К тому же, проверка на "Если значение" идёт через 5 секунд, и если игрок опять же в течении этих 5 секунд напишет в чат - все сломается.
Код:
Событие игрока(Вход):
    Начать цикл(cooldown_chat)
   
Событие игрока(Событие чата):
    Отменить событие()
    Если переменная(%player%_cooldown_chat <= 0):
        Установить(%player%_cooldown_chat = 3)
        Сообщение(%player%_prefix, "%player%&7: &f", Сообщение игрока) [Все игроки]
    Иначе:
        Сообщение("&fНельзя так часто писать. Подожди: &6", %player%_cooldown_chat, "&6 сек.")

Цикл(cooldown_chat, 20 тиков):
    Выбрать игрока по сравнить число(%selected%_cooldown_chat > 0)
    Отнять(%selected%_cooldown_chat -= 1)

Замени оформление на свое и переменные с префиксом/суффиксом.
Незачем вечно прогонять цикл cooldown_chat. Можно сделать вот так:
Форматирование (BB-код):
Событие игрока(Событие чата):
    #Ставим стрелочкой "НЕ"
    Если переменная(%player%_cooldown_chat > 0) {
        Отменить событие
        Сообщение("&fНельзя так часто писать. Подожди: &6", %player%_cooldown_chat, "&6 сек.")
    } Иначе {
        Установить(%player%_cooldown_chat = 3)
        Запустить цикл(cooldown_chat)
    }

Цикл(cooldown_chat, 20 тиков):
    #Если я правильно понимаю работу циклов и функций - можно убрать выборку и поставить %player%_cooldown_chat
    #Кому не лень - проверьте.
    Выбрать игрока по сравнить число(%selected%_cooldown_chat > 0)
    Отнять(%selected%_cooldown_chat -= 1)
    Если значение переменной(%selected%_cooldown_chat <= 0) {
        Остановить цикл(cooldown_chat)
    }
 

SashaLab7

Эксперт
Регистрация
3 Май 2023
Сообщения
94
Нет, он не будет работать.
Уже поняла, достаточно добавить пару проверок.
Незачем вечно прогонять цикл cooldown_chat. Можно сделать вот так:
Разницы практически никакой нет, да и такой цикл может багаться из-за постоянных его включений и выключений.
 

maxim34a

Эксперт
Регистрация
10 Июн 2023
Сообщения
538
да и такой цикл может багаться из-за постоянных его включений и выключений.
Не может. Мы запускаем цикл 1 раз, когда игрок пишет в чат.
Разницы практически никакой нет
1688376894816.png
Будешь вечно держать цикл в действии? А если у тебя 50 игроков в игре сразу? А если у тебя ещё несколько циклов, например на топы?
 

SashaLab7

Эксперт
Регистрация
3 Май 2023
Сообщения
94
Будешь вечно держать цикл в действии? А если у тебя 50 игроков в игре сразу? А если у тебя ещё несколько циклов, например на топы?
Практически в любой игре есть цикл в 20 тиков, почему бы не использовать его? Шанс набрать больше 30 игроков - крайне мал, и каждый игрок будет добавлять к макс. числу действий за 5 тиков. Лучше уж сделать цикл в 40 тиков и отнимать по 2 секунды.
 

onn512

Эксперт
Регистрация
2 Май 2023
Сообщения
124
Незачем вечно прогонять цикл cooldown_chat. Можно сделать вот так:
С таким кодом требуется использовать новый цикл для каждой задержки. Более эффективным решением будет иметь один цикл, работающий на протяжении всей игры и обрабатывающий все задержки каждые 20 тиков.
 

maxim34a

Эксперт
Регистрация
10 Июн 2023
Сообщения
538
Шанс набрать больше 30 игроков - крайне мал
Крайне мал, но он есть. Нагибатор6000ЛоЛ недавно набрал 50 игроков на игре "Кто пройдёт игру - получит импера".
Лучше уж сделать цикл в 40 тиков и отнимать по 2 секунды.
С такой логикой лучше всего сделать "Ждать(3 секунд)" и не париться с циклами)0)
Практически в любой игре есть цикл в 20 тиков, почему бы не использовать его?
Цикл в 20 тиков, который вечно в действии?
1688377534139.jpeg
и каждый игрок будет добавлять к макс. числу действий за 5 тиков.
Что добавлять? Куда добавлять? Зачем добавлять?
Более эффективным решением будет иметь один цикл, работающий на протяжении всей игры и обрабатывающий все задержки каждые 20 тиков.
И при большом онлайне уйти в ошибки, да?
С таким кодом требуется использовать новый цикл для каждой задержки.
Для какой "каждой задержки"? Чем отличается твой цикл и мой, если они повторяются одинаково раз в 20 тиков?
 

SashaLab7

Эксперт
Регистрация
3 Май 2023
Сообщения
94
Крайне мал, но он есть. Нагибатор6000ЛоЛ недавно набрал 50 игроков на игре "Кто пройдёт игру - получит импера".
Молодец нагибатор, но шанс набрать много игроков все так-же мал.
С такой логикой лучше всего сделать "Ждать(3 секунд)" и не париться с циклами)0)
С точки зрения оптимизации этот способ - лучший, с точки зрения красоты и наглядности - способ с циклами.
Что добавлять? Куда добавлять? Зачем добавлять?
К лимиту действий за 5 тиков, именно из-за этого лимита можно крашнуть игру.
(От доната создателя мира зависят числа, прибавляемые к лимиту)
И при большом онлайне уйти в ошибки, да?
Даже при больших лимитах, получить ошибки от онлайна практически не возможно. И никакой цикл в 20 тиков практически не влияет на лимиты. Средний онлайн - 15 человек, такой цикл выполняет только 3 действия в 5 тиков, хотя общий лимит действий будет около 2000, а то и больше (В зависимости от ранга создателя мира)
 

Lavas653

Активный участник
Регистрация
3 Май 2023
Сообщения
30
Спасибо вам за помощь!
 

maxim34a

Эксперт
Регистрация
10 Июн 2023
Сообщения
538
С точки зрения оптимизации этот способ - лучший, с точки зрения красоты и наглядности - способ с циклами.
Красоты и наглядности? Только в программировании на красоту и наглядность всем плевать.
Даже при больших лимитах, получить ошибки от онлайна практически не возможно. И никакой цикл в 20 тиков практически не влияет на лимиты.
А если у игрока низкий донат? А если у него итак кучу всего запуститься в один момент? К тому же, ты бери не сам цикл, а совокупность всего: Допустим у тебя цикл с отсчётом, цикл с задержкой в 1 тик ещё для чего-то, и совокупность всего этого и будет бить тебе ошибки
такой цикл выполняет только 3
4 действия.
Средний онлайн - 15 человек, такой цикл выполняет только 3 действия в 5 тиков
откуда у тебя 5 тиков?
хотя общий лимит действий будет около 2000
у геймера лимит 400. Что делать тем, кто перепишет код onn512'а с геймером?

Повторюсь, код onn512 - полная лажа. Никто в здравом уме не будет держать вечный цикл, и если эти слова
1688381272444.png
не пустословие - ты должна это понимать
 

onn512

Эксперт
Регистрация
2 Май 2023
Сообщения
124
откуда у тебя 5 тиков?
1688381852808.png
у геймера лимит 400. Что делать тем, кто перепишет код onn512'а с геймером?
У Эксперта тоже 400, держу в курсе.

1688381952873.png

Крайне мал, но он есть. Нагибатор6000ЛоЛ недавно набрал 50 игроков на игре "Кто пройдёт игру - получит импера".
С 50 онлайн его лимит был 20400 действий на 5 тиков, мало?
 

maxim34a

Эксперт
Регистрация
10 Июн 2023
Сообщения
538
А есть и другие ошибки, за 1 тик например)
Посмотреть вложение 1604
С 50 онлайн его лимит был 20400 действий на 5 тиков, мало?
11111 вот что происходит, когда следуешь советам onn512 и делаешь бесконечный цикл)0) Чувак пробил лимит в 6400)
 

Mee8YT

Эксперт
Регистрация
3 Май 2023
Сообщения
327
Этот код всегда работал. Мб у тебя префиксы в игре?
Добавь пару проверок, чтобы не багалось ничего.
достаточно сделать выборку игрока по умолчанию после блока ждать, мл момент
 
Сверху