Cпавн транспорта читерами!
#21

Что эта за версия собейта... Если это действительно то как вы говорите, то это действительно СЕРЬЁЗНАЯ и ГЛОБАЛЬНАЯ проблема, дырка в SAMP. Как вообще создаётся сценарий от ИНКОГНИТО... В OnVehicleDeath срочно нужно добавлять новый аргумент. OnVehicleDeath(vehicleid, killerid, syncerid)

Stepashka, очень не пренебрежительное отношение к ситуации...
eakwarp, лучшая защита не создавать сервер. Как не пускать читеров? Проводить жёсткий отбор и иметь онлайн 50 игроков? И это при том условии что если вдруг человек всё таки начал читерить, поймать его на этом вредительстве будет невозможно (имею ввиду этот респавн машин).

Тем не менее, ТС, вы уверены в том, что OnUnoccupiedVehicleUpdate не реагирует
Reply
#22

Quote:
Originally Posted by AirKite
Посмотреть сообщение
Что эта за версия собейта... Если это действительно то как вы говорите, то это действительно СЕРЬЁЗНАЯ и ГЛОБАЛЬНАЯ проблема, дырка в SAMP. Как вообще создаётся сценарий от ИНКОГНИТО... В OnVehicleDeath срочно нужно добавлять новый аргумент. OnVehicleDeath(vehicleid, killerid, syncerid)

Stepashka, очень не пренебрежительное отношение к ситуации...
Приятно удивили. Версию собейта могу отправить в лс, если интересно конечно
Reply
#23

Quote:
Originally Posted by Egor123
Посмотреть сообщение
Приятно удивили. Версию собейта могу отправить в лс, если интересно конечно
Кидай, можно с ссылками. Правда то, что гляну не могу гарантировать, времени нехватка. В остальном допустить такое абсурдно... я лично неоднократно просил Kye сделать возможность отслежки синхронизации, объяснив ситуацию с изменением позиции автомобиля (ну реализовал он OnUnoccupiedVehicleUpdate). Теоретически OnUnoccupiedVehicleUpdate должен отображать любые синхронизирующие пакеты от игрока направленные на транспорт без водителя (ибо с водителем синхронизатор ТОЛЬКО водитель, но и тут есть возможность обхода, став на некоторое время водителем не заметно для настоящего водителя), похоже если то что ты говоришь действительность, выходит OnUnoccupiedVehicleUpdate вызывается только при изменении Pos, Velocity, Angle и QuatRot. Хотя должен как я говорил выше, при ЛЮБЫХ изменениях.

Кстати ситуация когда игрок сидит за рулём автомобиля и тут бац его машиной начинает кто то управлять (хотя он кроме себя в машине никого не видит) вполне реальна. Правда такого читера можно легко отловить скриптами.

p.s. Из последнего помнится как не серьёзно отнеслись к возможности подмены ID диалога. Писал где, почему и как легко пофиксить. Kye вшил фикс в сервер.
Reply
#24

Меня тоже удивила эта функция, это что-то новое для собейта. Раньше хоть телепортировался в машину или еще чего, а тут даже никаких признаков. Лишь 5 секунд надо ждать, это настораживает.
Но все же, буду искать, что-то да должно "паранормально" при этом изменяться для читера.
Reply
#25

Да ничего вы паранормального не найдёте. Чему вы удивлены? Сервер принимает команду что машина умерла (упала в воду например). При этом сервер то конечно знает от кого он принял эту информацию. А вот при вызове OnVehicleDeath отправляется аргумент vehicleid=ид машины, killerid=убийца машины (255 вода), т.е. killerid равен тому кто убил машину а не тот кто отправил серверу информацию о том что машина была убита.

Доп инфа, для тех кто не вкурсе: (Сервер это лишь синхронизатор, связь между игроками, у него нет физики игры и сервер не может знать при каких условиях машина тонет (умирает) и т.д., поэтому приходится слушаться игроков) Мы конечно могли бы отслеживать подозрительные вещи, но тут стоит вопрос в недостатке информации а именно дополнительном аргументе, типа OnVehicleDeath(vehicleid, killerid, syncerid) где syncerid = иду игрока который отправил инфу о смерте транспорта.
Reply
#26

Багов с автомобилями достаточно, на одной машине может весь сервер ездить, правда они друг друга видеть не будут (рассинхронизация) а всего лишь достаточно пару условий, кто первый сел того и тачка, остальные идут лесом.
Reply
#27

[ame]http://www.youtube.com/watch?v=HT6NKrg-x6U[/ame]
Reply
#28

Киньте в ЛС сиё творение, есть одна мысля как это отследить и отловить того кто читерит.
Reply
#29

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Киньте в ЛС сиё творение, есть одна мысля как это отследить и отловить того кто читерит.
Скинул.
Reply
#30

Quote:
Originally Posted by AirKite
Посмотреть сообщение
А вот при вызове OnVehicleDeath отправляется аргумент vehicleid=ид машины, killerid=убийца машины (255 вода), т.е. killerid равен тому кто убил машину а не тот кто отправил серверу информацию о том что машина была убита.
А wiki говорит, что агрумент у функции всего один - vehicleid.
Reply
#31

Проверил 0.3х, баг остался... Вообще создал тему https://sampforum.blast.hk/showthread.php?pid=2313220#pid2313220 мб не останется без внимания. Вообще как то тупо что killerid = 255 если машина утоплена. (Актуально лишь когда максимальное количество игроков было 200).
Reply
#32

Quote:
Originally Posted by AirKite
Посмотреть сообщение
Проверил 0.3х, баг остался... Вообще создал тему https://sampforum.blast.hk/showthread.php?pid=2313220#pid2313220 мб не останется без внимания. Вообще как то тупо что killerid = 255 если машина утоплена. (Актуально лишь когда максимальное количество игроков было 200).
Во-первых, давно уже создан запрос (маленько с именем переменной только просчитался, виноват).
Во-вторых, уже давно
pawn Код:
#define INVALID_PLAYER_ID (0xFFFF)
что равно 65535. Откуда ты взял 255 вообще не представляю.


Или чит присылает именно 255, а не INVALID_PLAYER_ID ?
Reply
#33

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Во-первых, давно уже создан запрос (маленько с именем переменной только просчитался, виноват).
Во-вторых, уже давно
pawn Код:
#define INVALID_PLAYER_ID (0xFFFF)
что равно 65535. Откуда ты взял 255 вообще не представляю.


Или чит присылает именно 255, а не INVALID_PLAYER_ID ?
Да, ты ведь ответил в моей теме, которую снесли. Кстати лучше поддержите следующий пост http://forum.sa-mp.com/showpost.php?...0&postcount=54

Я создал тему отдельно ибо это не только предложение но и баг как бы. Вся соль в том, что OnVehicleDeath в killerid не возвращает INVALID_PLAYER_ID, он возвращает именно 255 (т.е. старый INVALID_PLAYER_ID, когда ещё игрок не мог быть 255 идом в связи с ограничением в 200 игроков). Причём это не чит отправляет killerid (сам SAMP в принципе не принимает таких данных), а сам SAMP формирует его. т.е. без чита просто выкидываем машину в воду или взрываем её, после чего получаем
Код:
OnVehicleDeath(ид_машины, 255)
код проверки
pawn Код:
public OnVehicleDeath(vehicleid, killerid) {
    new string[128]; format(string, 128, "OnVehicleDeath(%d, %d)", vehicleid, killerid);
    SendClientMessageToAll(-1, string);
}
проверено и на 0.3х тоже (надеялся что пофиксят). Считаю это достаточно критичным багом
Reply
#34

Quote:
Originally Posted by AirKite
Посмотреть сообщение
Да, ты ведь ответил в моей теме, которую снесли. Кстати лучше поддержите следующий пост http://forum.sa-mp.com/showpost.php?...0&postcount=54
спасиб, уже понял и поправил свой пост.
Reply
#35

Возможно я что-то не так понял, но в сервере 255 действительно забито константой
В текущей версии сервера (0.3x RC1, ну и в предыдущих также) от игрока приходит пакет, в котором просто прописан ид машинки. После проверок что валидный игрок и машинка (что-то там не похоже, что проверяются какие машинки у игрока в зоне стриминга) у машинки прописывается флаг на респавн. Потом в отдельном цикле проверяются все машинки и вызывается событие OnVehicleDeath.
Reply
#36

Quote:
Originally Posted by dimonml
Посмотреть сообщение
Возможно я что-то не так понял, но в сервере 255 действительно забито константой
В текущей версии сервера (0.3x RC1, ну и в предыдущих также) от игрока приходит пакет, в котором просто прописан ид машинки. После проверок что валидный игрок и машинка (что-то там не похоже, что проверяются какие машинки у игрока в зоне стриминга) у машинки прописывается флаг на респавн. Потом в отдельном цикле проверяются все машинки и вызывается событие OnVehicleDeath.
Я думаю на это стоит обратить внимание того же ******, личным сообщением, а то насколько я помню Kalcor редко читает ЛС, в виду их большого числа, хотя можно и ему продублировать.

Я думаю к тебе как к разработчику адаптаций они прислушаются.
Reply
#37

dimonml прав, аппдейт с 0.2 на 0.3 в некоторых местах прошел не полностью и до сих пор не обновлен до конца
еще один пример этому: в 0.2x лимит авто был 700, а в 0.3 поднялся уже до 2000. Но если в одной позиции стрима поставить 700 авто, то самп войдет в бесконечный цикл, и останется только убивать процесс

P.S. и не надо тут говорить, что игра виснет от большого кол-ва тачек в одном месте. Я ставил 699 авто и фпс было около 7, а одно авто не прибавит столько груза
Reply
#38

Quote:
Originally Posted by dimonml
Посмотреть сообщение
Возможно я что-то не так понял, но в сервере 255 действительно забито константой
В текущей версии сервера (0.3x RC1, ну и в предыдущих также) от игрока приходит пакет, в котором просто прописан ид машинки. После проверок что валидный игрок и машинка (что-то там не похоже, что проверяются какие машинки у игрока в зоне стриминга) у машинки прописывается флаг на респавн. Потом в отдельном цикле проверяются все машинки и вызывается событие OnVehicleDeath.
Скорее всего так: Приходит пакет, после чего ставится флаг машинке что она мертва и сразу же вызывается OnVehicleDeath. Затем в цикле или по таймеру срабатывает проверка на занятость автомобиля, если игрок не находится в авто, то его респавнит и сразу же вызывает OnVehicleSpawn (который кстати вызывается только в GM) - хм... уже вызывается и в FS =)

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Я думаю на это стоит обратить внимание того же ******, личным сообщением, а то насколько я помню Kalcor редко читает ЛС, в виду их большого числа, хотя можно и ему продублировать.

Я думаю к тебе как к разработчику адаптаций они прислушаются.
Reply
#39

>сразу же вызывается OnVehicleDeath
Нет, не так. Сразу же ничего не вызывается. В обработчике события от клиента только ставиться флаг.

PS: кстати, есть еще забавная штука в цикле, который пробегается по всем машинкам сервера и вызывает OnVehicleDeath. Там стоит условие типа if (rand() % 20) - то есть в одном из 20 случаем мы машинку не респавним
Reply
#40

Теперь понятно почему исходники сампа закрыты: код, как видно, петросянский xD
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)