PDA

Просмотр полной версии : [Вопрос] Бессмертье при определенном уроне



m1n1vv
11.03.2016, 07:18
Возможно сделать бессмертье при определенном уроне? Например 20. OnPlayerTakeDamage и OnPlayerUpdate не всегда срабатывают. Пока только такой "выход":

CMD:test(playerid)
{
SetTimerEx("public_death", 10, false, "i", playerid);
return 1;
}
forward public_death(playerid);
public public_death(playerid)
{
new Float:health;
GetPlayerHealth(playerid, health);
if(health <= 20) SetPlayerHealth(playerid, 20.0);
SetTimerEx("public_death", 10, false, "i", playerid);
return 1;
}

ziggi
11.03.2016, 11:42
OnPlayerUpdate срабатывает всегда.

m1n1vv
11.03.2016, 12:01
OnPlayerUpdate срабатывает всегда.

Не в этот раз. OnPlayerUpdate обновляется 1 раз в сек если игрок падает.

ziggi
11.03.2016, 12:56
Не в этот раз. OnPlayerUpdate обновляется 1 раз в сек если игрок падает.

Нет, OnPlayerUpdate вызывается при любом обновлении данных игрока, он просто не может не вызываться при изменении здоровья. И вызываться он может гораздо чаще, чем 1 раз в секунду.

//DeimoS: Мне стыдно за эту тему, но всё же, вот:
http://pro-pawn.ru/showthread.php?9172-OnPlayerUpdate-%D0%9F%D1%80%D0%B0%D0%B2%D0%B4%D0%B0-%D0%BB%D0%B8-%D0%BE%D0%BD-%D1%87%D0%B0%D1%81%D1%82%D0%BE-%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D1%8F%D0%B5%D1%82%D1%81%D1%8F

m1n1vv
11.03.2016, 16:11
Нет, OnPlayerUpdate вызывается при любом обновлении данных игрока, он просто не может не вызываться при изменении здоровья. И вызываться он может гораздо чаще, чем 1 раз в секунду.

//DeimoS: Мне стыдно за эту тему, но всё же, вот:
http://pro-pawn.ru/showthread.php?9172-OnPlayerUpdate-%D0%9F%D1%80%D0%B0%D0%B2%D0%B4%D0%B0-%D0%BB%D0%B8-%D0%BE%D0%BD-%D1%87%D0%B0%D1%81%D1%82%D0%BE-%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D1%8F%D0%B5%D1%82%D1%81%D1%8F

Я знаю как работает OnPlayerUpdate. Не раз с этим баловался. Просто при падении игрока, паблик не успевает узнать уровень здоровья.

Так как мне поступить. Очень часто делать проверку или может после смерти на месте игрока создавать актера? Или не грузить "этим" сервер?

Nash_Brigers
11.03.2016, 16:13
Я знаю как работает OnPlayerUpdate. Не раз с этим баловался. Просто при падении игрока, паблик не успевает узнать уровень здоровья.Как я понял, он срабатывает наоборот быстрее.. Но это личные наблюдения..

m1n1vv
11.03.2016, 16:23
Как я понял, он срабатывает наоборот быстрее.. Но это личные наблюдения..

Система быстрее убивает игрока, чем OnPlayerUpdate узнает о здоровье. Иногда бывает успевает прочесть функцию.

Роуди.
13.03.2016, 10:15
Так при определенном уроне или при определенном количестве HP?

DeimoS
13.03.2016, 10:41
Я знаю как работает OnPlayerUpdate. Не раз с этим баловался. Просто при падении игрока, паблик не успевает узнать уровень здоровья.

Так как мне поступить. Очень часто делать проверку или может после смерти на месте игрока создавать актера? Или не грузить "этим" сервер?

Так GetPlayerHealth возвращает то значение, что было получено OnPlayerUpdate в последнем вызове. Как бы ты часто не делал проверку, ты не узнаешь здоровье игрока быстрее OnPlayerUpdate.
Для чего тебе вообще это нужно?

m1n1vv
13.03.2016, 11:29
Так GetPlayerHealth возвращает то значение, что было получено OnPlayerUpdate в последнем вызове. Как бы ты часто не делал проверку, ты не узнаешь здоровье игрока быстрее OnPlayerUpdate.
Для чего тебе вообще это нужно?

Да я хотел реализовать смерть, как на LSRP :blush:

DeimoS
13.03.2016, 11:33
Да я хотел реализовать смерть, как на LSRP :blush:

А как она там реализована?

m1n1vv
13.03.2016, 11:44
А как она там реализована?
https://youtu.be/gYmYboqBfIQ

DeimoS
13.03.2016, 11:48
https://youtu.be/gYmYboqBfIQ

Не вижу там примеров смерти от падения. Уверен, что там нашли решения той проблеме, о которой ты говоришь?

m1n1vv
13.03.2016, 11:57
Не вижу там примеров смерти от падения. Уверен, что там нашли решения той проблеме, о которой ты говоришь?

Точно не уверен. Минус, что убийства не записываются.

DeimoS
13.03.2016, 14:44
Точно не уверен. Минус, что убийства не записываются.

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

m1n1vv
13.03.2016, 15:03
Ну если ты сам не видел, то вряд ли они обошли эту проблему, ибо самый точный отлов урона, не нанесённого оружием - OnPlayerUpdate. Ну или напиши свою клиентскую часть, которая будет отлавливать такой урон и отправлять его на сервер. Только тогда придётся эту клиентскую часть качать каждому игроку, что не каждый захочет...

Жаль нет плагинов, функции которых срабатывают при получении урона.

DeimoS
13.03.2016, 15:15
Жаль нет плагинов, функции которых срабатывают при получении урона.

Ну а как ты получишь данные от игрока, не имея доступ к данным игры? Говорю же, без скачки игроком клиентской части такого плагина реализовать подобное не получится

m1n1vv
13.03.2016, 16:06
Ну а как ты получишь данные от игрока, не имея доступ к данным игры? Говорю же, без скачки игроком клиентской части такого плагина реализовать подобное не получится

А если взять плагин MapAndreas и сверять с высотой и скоростью игрока? :grin:

DeimoS
13.03.2016, 16:17
А если взять плагин MapAndreas и сверять с высотой и скоростью игрока? :grin:

Ну а ты уверен, что скорость и высота будут успевать обновляться? Все данные обновляются через определённый промежуток времени и игрок легко может упасть как раз в тот промежуток, когда обновления эти не происходят.

Хотя можно и без MapAndreas свести проблемы к минимуму, сверяя ускорение игрока по оси Z и проверяя анимацию. Если всё присутствует => не давать ему умирать, если он собрался это сделать и проделывать с ним нужные действия

Daniel_Cortez
13.03.2016, 16:28
http://pro-pawn.ru/showthread.php?8009

DeimoS
13.03.2016, 16:31
http://pro-pawn.ru/showthread.php?8009

Тут суть не в выдачи бессмертия же. Человек хочет, чтоб когда игрок практически умер, он не умирал, а у него начинала проигрываться определённая анимация (типа раненый лежит) и появлялся иммунитет к любому урону

Daniel_Cortez
13.03.2016, 16:35
Тут суть не в выдачи бессмертия же. Человек хочет, чтоб когда игрок практически умер, он не умирал, а у него начинала проигрываться определённая анимация (типа раненый лежит) и появлялся иммунитет к любому урону
Ну так бессмертие и даёт иммунитет. Главное поймать нужный момент, когда у игрока осталось совсем немного ХП. Если же ему в один момент нанести очень большой урон, он умрёт сразу.
В общем, либо тот трюк с бессмертием, либо убирать игрока с места смерти и на то место спавнить актёра.

DeimoS
13.03.2016, 16:49
Ну так бессмертие и даёт иммунитет. Главное поймать нужный момент, когда у игрока осталось совсем немного ХП. Если же ему в один момент нанести очень большой урон, он умрёт сразу.
В общем, либо тот трюк с бессмертием, либо убирать игрока с места смерти и на то место спавнить актёра.

Так он и спрашивает как поймать тот самый нужный момент.

P.S. Автор, судя по тому видео, у них такая система работает только для оружия. Ну никак иначе ты не сделаешь адекватный отлов, не сделав кучу костылей. Они просто сделали для каждого оружия свой урон через OnPlayerWeaponShot и если ХП цели меньше определённого, урон ему уже не наносится + у цели начинает проигрываться нужная анимация

Sp1ke
13.03.2016, 17:26
https://youtu.be/gYmYboqBfIQ

Не уверен, но скорее всего они они получают кол-во здоровья хп игрока, и если оно например меньше 30-ти то просто запрещают наносить ему урон в паблике
OnPlayerWeaponShot после выстрелов копов.

ziggi
13.03.2016, 19:44
Вот система, с помощью которой можно контролировать урон при падении (и не только): https://github.com/oscar-broman/samp-weapon-config

vovandolg
13.03.2016, 21:41
Вот система, с помощью которой можно контролировать урон при падении (и не только): https://github.com/oscar-broman/samp-weapon-config

Это только на 0.3.7 подойдёт я так понял?

ziggi
13.03.2016, 22:00
Это только на 0.3.7 подойдёт я так понял?

Думаю, что подойдёт для той версии, у которой появился OnPlayerWeaponShot, то есть для 0.3z и более.