Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!: Анти-толкание машин - Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!

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

  • (4 Страниц) +
  • 1
  • 2
  • 3
  • Последняя »
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Pawn ]
Анти-толкание машин Помощь

#1
Пользователь офлайн   Bredemar12 

  • Местный
  • Вставить ник
  • Раскрыть информацию
public OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat, Float:new_x, Float:new_y, Float:new_z, Float:vel_x, Float:vel_y, Float:vel_z)
{

 new Float: VPos[3];
 for(new i; i < sizeof carrr; i++)
 {
 GetVehiclePos(carrr[i], VPos[0], VPos[1], VPos[2]);
 if(GetVehicleDistanceFromPoint(carrr[i],VehPos[0][carrr[i]
],VehPos[1][carrr[i]],VehPos[2][carrr[
i]]) > 1)
 {
  SetVehiclePos(carrr[i], VehPos[0][carrr[i]], VehPos[1][carrr[i]], VehPos[2][carrr[i]]);
  SetVehicleZAngle(carrr[i], VehPos1[carrr[i]]);
 }
 }
 return true;
}
реализовал вот такой "быдлокод" (с) DeimoS
Работает, но хочется решить трабл с выпрыгивание/выходом из машины, она просто респауниться. Пробывал ставить на таймеры, присваивать ей значения, вообще хз, мож я что-то с основным кодом нашумел.
0

#2
Пользователь офлайн   Bredemar12 

  • Местный
  • Вставить ник
  • Раскрыть информацию
Добавлю: Хочу, чтобы тачка не респаунилась сразу, а через несколько минут(если кто-то сядет и поедет и оставит среди леса)
0

#3
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию
А говорил, что система простая и я смешной :)
0

#4
Пользователь офлайн   Bredemar12 

  • Местный
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияDeimoS (08 Октябрь 2019 - 22:04) писал:

А говорил, что система простая и я смешной :)

Ой, я уже понял, что дебилко :), я чет испугался твоего последнего сообщения, там где ты цену указал :ohmy: :ohmy: , извини, если шо не так, я был на чувствах.
0

#5
Пользователь офлайн   Pa4enka 

  • Эксперт
  • Вставить ник
  • Раскрыть информацию
Не помню говорил тебе или нет, но система не стоит времени и потраченных сил. Слишком много уж запары.

Сообщение отредактировал Pa4enka: 09 Октябрь 2019 - 08:14

1

#6
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияPa4enka (09 Октябрь 2019 - 08:12) писал:

Не помню говорил тебе или нет, но система не стоит времени и потраченных сил. Слишком много уж запары.


Да нет, не так уж и много. Если не считать кода перехватов, то подобная система занимает чуть меньше ста строк (у меня - 87). Это если не просто тупо в нужные места код прописать, а сделать функции, которыми можно будет взаимодействовать на конкретный транспорт.
Точнее, если знать как работает коллбэк OnUnoccupiedVehicleUpdate и синхронизация транспорта, в целом, то написание системы не составит труда.

CoolStoryBob [Показать]

Сообщение отредактировал DeimoS: 09 Октябрь 2019 - 08:46

1

#7
Пользователь офлайн   Pa4enka 

  • Эксперт
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияDeimoS (09 Октябрь 2019 - 08:33) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]

Но все равно это не 10 строк, как думал автор изначально, а намного больше. Плюс, ты верно подметил о том, что нужно знать о принципах роботы транспорта в сампе, его синхронизации в том числе. В личной переписке я тоже обратил внимания на этот паблик, написал, что таймер здесь не нужен, прикрепил небольшой алгоритм, объяснил принцип работы, но опять таки все упирается в костыли. По крайней мере в моей голове :) Поэтому если будет желание поделится, то с радостью бы посмотрел на твой вариант ;)

Сообщение отредактировал Pa4enka: 09 Октябрь 2019 - 10:40

1

#8
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию
Да никаких костылей там нет.

Создаёшь одну переменную, которая будет отвечать за статус заморозки транспорта и переменные для координат.
В момент, когда нужно начать замораживать автомобиль, запоминаешь его координаты (если сразу после создания - перехватываешь функции создания авто и сохраняешь их там).
В OnUnoccupiedVehicleUpdate проверяешь, заморожен ли транспорт и если заморожен - сразу возвращаешь на старые координаты через SetVehiclePos (не нужно никаких сверок координат).

Если нужно, чтоб игрок мог сесть в авто, проехать и после выхода из авто оно замораживалось на новых координатах, в OnPlayerExitVehicle проверяешь то, был ли игрок водителем + заморожено ли авто и если оба параметра совпадают - запускаешь таймер секунд на 10 и сохраняешь новые координаты. А чтоб за эти 10 секунд машину не отбросило назад, создаёшь ещё одну переменную, которая будет отвечать за то, сидит ли в машине водитель или нет. Если сидит - присвоил единицу и обнулил её когда сработал таймер. И в OnUnoccupiedVehicleUpdate дописал проверку значения в условии.

Получится что-то типа:
public OnUnoccupiedVehicleUpdate(...)
{
    if(заморозка == 1 && водитель == 0)
    {
        SetVehiclePos(...);
        return 0;
    }
    return 1;
}

Всё. Осталось слова в код перевести и будет рабочая система.

Ну и ещё нужно учесть вариант, что авто может зависнуть в воздухе, из-за чего игроки будут постоянно отправлять информацию о том, что оно падает, а сервер будет отправлять его обратно. Это фиксится проверкой времени между срабатыванием OnUnoccupiedVehicleUpdate + проверкой того, по каким координатам смещается автомобиль. То бишь, грубо говоря, если за последние 5 секунд OnUnoccupiedVehicleUpdate вызвался для одного авто больше 10 раз - проверяем новые координаты с теми, которые записаны: если есть смещение по Z координате вниз - позволяем автомобилю сместиться и записываем новые координаты. Опять же, ничего сложного.

К слову, поздравляю: вы написали античит на телепорт незанятого транспорта :)

Сообщение отредактировал DeimoS: 09 Октябрь 2019 - 12:13

2

#9
Пользователь офлайн   Bredemar12 

  • Местный
  • Вставить ник
  • Раскрыть информацию
  • Я бы помог автору, но он многократно игнорировал мои просьбы писать вопросы не в личку, а на форум (чтоб ответы на эти вопросы могли в будущем помочь кому-то ещё, а не только ему), и даже пару раз грубил в ответ.
    -Где я тебе хоть раз грубил? :wub: ;
  • После очередного вопроса от него, я опять попросил написать на форум и, после очередного игнора моей просьбы (точнее, он ответил, что писать на форум не собирается, ибо сам всё, якобы, решил), я сказал, что за 150 рублей скину ему готовый код, раз он не хочет по нормальному.
    -Где я такое писал? Не зная причины ставить такие итоги... :sad: ;
  • Но все равно это не 10 строк, как думал автор изначально, а намного больше.
    -При поиске из нашей переписки такой фразы выдает грустное "Не найдено" :dry: ;
  • Не помню говорил тебе или нет, но система не стоит времени и потраченных сил. Слишком много уж запары.
    -То есть, ты советуешь бросать дело на половине к успехе?Странно :wacko: , что тогда получиться в итоге, если все бросить из-за "запары"?.

Немножечко отмазок :wub: : не знаю заметили ли вы, что я "пропал" из форума именно тогда, когда начал писать DeimoS`у и Печенюхе за советами, наверное, все таки по личным причинам, которые я не хочу вам говорить, все же не мог писать на форум. Уже простите за "наглость и неадекватность" :sad: !

Я понял всю вашу критику и попробую исправиться и стать более серьёзным. Спасибо. Не хочу дальше принимать ваш негатив :evil: , надеюсь разговор на этом окончен. :wub:

Спасибочки. [Показать]

За это искреннее спасибо :yes: . Но я не понял 3-ий абзац.

Сообщение отредактировал Bredemar12: 09 Октябрь 2019 - 22:25

0

#10
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияBredemar12 (09 Октябрь 2019 - 22:24) писал:

-Где я тебе хоть раз грубил? :wub: ;


Из последнего, что вспомнил:
Скрытый текст [Показать]

Но было ещё пара моментов

Просмотр сообщенияBredemar12 (09 Октябрь 2019 - 22:24) писал:

-Где я такое писал? Не зная причины ставить такие итоги... :sad:;

Скрытый текст [Показать]

0

Поделиться темой:


  • (4 Страниц) +
  • 1
  • 2
  • 3
  • Последняя »
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика