• Из-за обновления GTA 5 (был добавлен новый патч) может временно не работать вход в RAGE Multiplayer.

    Ошибка: Ваша версия Grand Theft Auto V не поддерживается RAGE Multiplayer.
    ERROR: Your game version is not supported by RAGE Multiplayer.

    Данная ошибка говорит о том, что GTA V обновилась до новой версии (GTA Online тоже). Вам необходимо обновить саму игру в главном меню вашего приложения (Steam / Epic Games / Rockstar Games).
    Если после этого RAGE:MP все равно не работает - вам нужно дождаться выхода патча для самого мультиплеера (обычно это занимает от нескольких часов до нескольких дней).

    Новости и апдейты Rockstar Games - https://www.rockstargames.com/newswire/
    Статус всех служб для Rockstar Games Launcher и поддерживаемых игр: https://support.rockstargames.com/ru/servicestatus


    Grand Theft Auto 5 (+ GTA Online) последний раз были обновлены:

Проблема Система урона

qweqweqwe123123123

Участник портала
24 Июн 2025
99
15
18
Привет всем. Делаю систему урона, столкнулся с такой проблемой:

Я на клиентской стороне подписываюсь на метод outgoingDamage и в нем вызываю событие на сервер, при этом предаю targetRemoteId. На серверной стороне по targetRemoteId я нахожу target и вычитаю ему 1 хп. Суть: когда я стреляю из пистолета, target ХП уменьшается и все работает. Но как только я начинаю стрелять быстрее, например из автомата, то ХП не успевает уменьшаться. Как быть, кто сталкивался с подобным ?

1773096219728.png
 

Jerry (ChatGPT)

AI-powered language model
VIP
helper
17 Окт 2023
2,907
293
100
Привет! Скорее всего, проблема в том, что при частых вызовах событие обрабатывается не последовательно или накладываются друг на друга. Попробуй на сервере вместо прямого уменьшения HP делать очередь или буфер урона и применять урон раз в тик. Либо использовать атомарные операции и блокировки, чтобы избежать "перезаписи" HP между вызовами. Также убедись, что клиент не отправляет слишком много событий за слишком короткое время — можно ограничить частоту или сгруппировать урон для оптимизации.
 

nafanych!

naffanch
BackEnd developer
FrontEnd developer
25 Ноя 2023
348
70
70
ахахха дааа) в течении почти трех лет я пытался написать свою регу примерно так же, в этом и проблема что если стрелять быстро - оно просто не регает.

есть вариант отнимать ХП на клиенте (но как сделать это безопасно) - хз
в целом было бы круто если кто то подсказал правильное решение)
 

qweqweqwe123123123

Участник портала
24 Июн 2025
99
15
18
ахахха дааа) в течении почти трех лет я пытался написать свою регу примерно так же, в этом и проблема что если стрелять быстро - оно просто не регает.

есть вариант отнимать ХП на клиенте (но как сделать это безопасно) - хз
в целом было бы круто если кто то подсказал правильное решение)
1773096730081.png

я своего не придумал, я просто взял код Korpa (а он сильный разраб, неужели он не заметил этого???), и сделал 1 в 1... Он вызывает сервер из метода outgoingDamage...
 

qweqweqwe123123123

Участник портала
24 Июн 2025
99
15
18
это типа каждую пульку вызывается серверный евент?

Да, думаешь это плохой варинат ?
Есть, конечно, вариант сделать через клиент (target.applyDamageTo(1, true) или mp.game.weapon.setCurrentDamageEventAmount(1)), но как тогда это сделать безопасно (от читеров) ?
 

0x4f4b

Новый участник
7 Мар 2026
2
1
5
Привет! Скорее всего, проблема в том, что при частых вызовах событие обрабатывается не последовательно или накладываются друг на друга. Попробуй на сервере вместо прямого уменьшения HP делать очередь или буфер урона и применять урон раз в тик. Либо использовать атомарные операции и блокировки, чтобы избежать "перезаписи" HP между вызовами. Также убедись, что клиент не отправляет слишком много событий за слишком короткое время — можно ограничить частоту или сгруппировать урон для оптимизации.
Хороший ответ, почему никто не обращает внимание? Так работает рега в гта онлайн
 
Реакции: Inoi

Inoi

/dev/null
Команда форума
Moderator
VIP
15 Окт 2020
4,884
2,473
208
36
Да, думаешь это плохой варинат ?
Есть, конечно, вариант сделать через клиент (target.applyDamageTo(1, true) или mp.game.weapon.setCurrentDamageEventAmount(1)), но как тогда это сделать безопасно (от читеров) ?
это пизда какой плохой вариант, очевидно

во первых ты превращаешь любые автоматные очереди в рпс-спам
ты просто ебашишь сервак по кд, это пиздец с нулевой

во-вторых по самой ну логике кода, никакой защиты от читаков нет - евент из кода который ты показываешь буквально сам сообщает серверу targetRemoteId и boneIndex
это значит что любой защиты 0, он абсолютно уязвим, потому что модифицированный клиент может слать этот евент без попадания вообще

если хочется заебаться - то что говорит бот в целом плюс-минус верно
клиент собирает батчами попадания по 60-100мс, в батч шлёт не пулю а какой-то агрегат с таргетом, оружием, костями, расстоянием
сервер это всё валидирует
дистанцию, оружие, максимум попаданий за окно, допустимые множители
и применяет изменения хп-армора
 

0x4f4b

Новый участник
7 Мар 2026
2
1
5
Немного поразмыслив, можно сделать так - с самого начала делаем на клиентской части так называемый тротлинг, т.е. мы берем и собираем в пул все выстрелы игрока, возьмем например 10 выстрелов, далее каждые 100 мс (интервал можно настраивать как вам угодно) отправляем серверу данные со всеми выстрелами, валидируем каждый выстрел (на серврной стороне) и там же применяем весь урон или как вам там удобно его разделяйте, модифицируйте, суть в том чтобы не перегружать сервер 10 вызовами каждой пули, а отправлять инфу один раз за определенное количество времени, так же могу от себя порекомендовать делать динамический урон - а именно разделите валидацию урона для каждого отдельного типа оружия, пример: для автоматов и т.д. можно сделать отдельные валидации, где и применять то, что я описал выше, а для пистолетов или снайперок либо без валидации, либо изменять ее минимально, ибо там не будет много выстрелов за малое время
 

akudinov28

Старожил
24 Фев 2021
488
238
106
Я вот до кастомной регистрации урона еще не дошел, но вот очень интересно: вы все говорите про валидацию урона на стороне сервера. А как, собственно, вы его валидируете? Как на стороне сервера определить, что игрок действительно выстрелил и действительно попал? Ведь с клиента можно подделать вызовы эвентов.
 

Inoi

/dev/null
Команда форума
Moderator
VIP
15 Окт 2020
4,884
2,473
208
36
Я вот до кастомной регистрации урона еще не дошел, но вот очень интересно: вы все говорите про валидацию урона на стороне сервера. А как, собственно, вы его валидируете? Как на стороне сервера определить, что игрок действительно выстрелил и действительно попал? Ведь с клиента можно подделать вызовы эвентов.
никак

ты можешь предположить
у чела реально эта пушка, есть патроны, нет невозможной очереди какой то
можешь сверять я хз позицию и рейкаст если ты упоротый
сверяться по табличкам урона
и получать "допустимый результат"

то есть пересчитывать по какой-то схеме

стопроцентной защиты нет, в случае с рейджом по крайней мере
нет ну что то изобрести можно, но это просто на уровне идеи звучит как абсолютно избыточная хуета

потому что нет никакого смысла подделывать реалистичный урон, который пройдёт твои валидации

условно читака который будет просто массово рассылать урон всем вокруг избыточный - ты таким образом определишь и забанишь

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

akudinov28

Старожил
24 Фев 2021
488
238
106
никак

ты можешь предположить
у чела реально эта пушка, есть патроны, нет невозможной очереди какой то
можешь сверять я хз позицию и рейкаст если ты упоротый
сверяться по табличкам урона
и получать "допустимый результат"

то есть пересчитывать по какой-то схеме

стопроцентной защиты нет, в случае с рейджом по крайней мере
нет ну что то изобрести можно, но это просто на уровне идеи звучит как абсолютно избыточная хуета

потому что нет никакого смысла подделывать реалистичный урон, который пройдёт твои валидации

условно читака который будет просто массово рассылать урон всем вокруг избыточный - ты таким образом определишь и забанишь

человек который встраиваясь в твои паттерны рассылает урон который ты считаешь допустимым по одной цели - шизофреник, в этом просто нет смысла
на кой хуй подделывать незаметно то, что и так выглядит реалистичным?
Принято, спасибо. Я так примерно и думал. Просто в теме столько упоминаний валидации, вот я и предположил, что до чего-то более точного у меня просто мозгов не хватило дойти)
 

qweqweqwe123123123

Участник портала
24 Июн 2025
99
15
18
ты можешь предположить
у чела реально эта пушка, есть патроны, нет невозможной очереди какой то
можешь сверять я хз позицию и рейкаст если ты упоротый
сверяться по табличкам урона
и получать "допустимый результат"
ну в таком случае ведь все равно надо каждый выстрел отправлять с клиента на сервер и делать эти проверки... ?
 

akudinov28

Старожил
24 Фев 2021
488
238
106
ну в таком случае ведь все равно надо каждый выстрел отправлять с клиента на сервер и делать эти проверки... ?
Ну так да, об этом и речь же. Только делать грамотнее, как писали выше. Создавать какой-то небольшой кэш урона, отправлять его на сервер дозированно.
 

Inoi

/dev/null
Команда форума
Moderator
VIP
15 Окт 2020
4,884
2,473
208
36
ну в таком случае ведь все равно надо каждый выстрел отправлять с клиента на сервер и делать эти проверки... ?
ну подумай сам
попробуй в математику простую

если клиент евент дёргает сервер каждый выстрел
у тебя есть условный автомат, который может выстреливать 10 пуль в секунду

зафиксировали

если на сервере 100 игроков стреляет одновременно
100х10 = 1000 евентов в секунду

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

фиксировать попадания должен клиент
ты собираешь батч попаданий, условно у тебя есть 5 попаданий

Код:
t=0ms  hit
t=20ms hit
t=40ms hit
t=60ms hit
t=80ms hit

вместо того чтобы ебашить 5 вызовов серверного эвента, ты обрабатываешь всё на клиенте, собираешь батч и условные каждый 100мс кидаешь на сервер валидацию

Код:
damageBatch:
[
hit1,
hit2,
hit3,
hit4,
hit5
]

сервер вместо 5 событий - получает одно

сервер не должен проверять "а правда ли он попал"
ты всё это можешь делать на клиентах, сервер должен валидировать правдоподобность

например если он видит что чел с глока попал с рпмом 1000, когда должно быть 100 - значит это чит и его можно банить

то есть логика не в том, что ты строишь всю систему урона как клиент-сервер-клиент
а в том что ты отдаёшь сам урон - клиентам, а сервером ПЕРИОДИЧЕСКИ только ВАЛИДИРУЕШЬ ПРАВДОПОДОБНОСТЬ

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

Similar threads