Мы+Яндекс=мониторинг любого сервера
|
client_PreThink / client_PostThink
Автор |
Сообщение |
YodL Карма: 1 |
Добавлено: 14:57 23 февраля 2010 | Исправлялось: 2 раз (23-02-10 15:01, YodL) | |
|
Кто-нибудь может мне объяснить когда они выполняются.
Мне интересна именно последовательность для игроков,
то есть
client_PreThink(1)
client_PreThink(2)
...
client_PreThink(32)
Think
client_PostThink(1)
client_PostThink(2)
...
или
client_PreThink(1) Think(1) client_PostThink(1)
client_PreThink(2) Think(2) client_PostThink(2)
client_PreThink(3) Think(3) client_PostThink(3)
...
Как я понял 1й вариант, но тогда я что-то не врубаюсь в некоторые плагинчики =)
Заранее всем спасибо.
|
Admin Карма: 9 |
Добавлено: 16:03 23 февраля 2010 | |
|
а что это вообще за фигня?
|
YodL Карма: 1 |
Добавлено: 17:44 23 февраля 2010 | |
|
Как я представляю себе, это 2 функции которые выполняются до и после просчета физики.
только я не понимаю физика сразу вся просчитывается или для каждого игрока отдельно.
|
Admin Карма: 9 |
Добавлено: 19:43 23 февраля 2010 | |
|
а зачем считать физику ПОСЛЕ?
|
Light Карма: 0 |
Добавлено: 21:04 23 февраля 2010 | Исправлялось: 1 раз (23-02-10 21:06, Light) | |
|
ссылка
Если с англицким плохо, могу перевести, а так время тратить не охота.
А следуя этому ссылка
client_PreThink ( id ) - для каждого отдельно.
|
YodL Карма: 1 |
Добавлено: 23:48 23 февраля 2010 | |
|
Автор: Light Цитата:
ссылка
Если с англицким плохо, могу перевести, а так время тратить не охота.
А следуя этому ссылка
client_PreThink ( id ) - для каждого отдельно.
Я знаю что Префинки и пост для каждого, интересно именно последовательность их выполнения.
Например, встречаются 3 контра они должны друг через друга пройти, и снова стать солидными.
И тут несколько вариантов.
1й у каждого на пре поставить прохождение сквозь себя. На пост поставить солидность.
2й у каждого на пре поставить прохождение сквозь других На пост поставить солидный бокс.
То что пре и пост у каждого свой это понятно, а то что между ними у каждого свое или одно на всех?
|
Hafner Карма: 0 |
Добавлено: 00:31 24 февраля 2010 | |
|
Автор: YodL Цитата:
одно на всех?
Именно.
|
YodL Карма: 1 |
Добавлено: 03:24 24 февраля 2010 | |
|
То есть если я, например, на пре последнего игрока поставлю всем НОТ_СОЛИД, а на пост первого игрока поставлю всем обратно СОЛИД_БОКС, они все спокойно пройдут друг сквозь друга?
|
Hafner Карма: 0 |
Добавлено: 10:18 24 февраля 2010 | Исправлялось: 4 раз (24-02-10 21:07, Hafner) | |
|
Автор: YodL Цитата:
То есть если я, например, на пре последнего игрока поставлю всем НОТ_СОЛИД, а на пост первого игрока поставлю всем обратно СОЛИД_БОКС, они все спокойно пройдут друг сквозь друга?
Да, по идее. Только мне интересно, как ты это точечно именно для последнего и первого организуешь и зачем так извращаться.
|
YodL Карма: 1 |
Добавлено: 11:25 25 февраля 2010 | |
|
Автор: Hafner Цитата:
Автор: YodL Цитата:
То есть если я, например, на пре последнего игрока поставлю всем НОТ_СОЛИД, а на пост первого игрока поставлю всем обратно СОЛИД_БОКС, они все спокойно пройдут друг сквозь друга?
Да, по идее. Только мне интересно, как ты это точечно именно для последнего и первого организуешь и зачем так извращаться.
Я просто пример привел, мне не нужно так изгаляться.
У меня есть випы, через них можно проходить, но так же хотелось что бы и они могли через всех проходить. правильно ли я понял что ты не на 100% уверен, а это лишь твои догадки?
|
Hafner Карма: 0 |
Добавлено: 16:56 25 февраля 2010 | |
|
Автор: YodL Цитата:
правильно ли я понял что ты не на 100% уверен, а это лишь твои догадки?
Нельзя быть на 100% уверенным в чем-то.
То что я написал это теория, по которой должно быть так, а как на самом деле будет на практике - это надо тестить.
|
sjgunner Карма: 0 |
Добавлено: 18:52 25 февраля 2010 | Исправлялось: 1 раз (25-02-10 18:56, sjgunner) | |
|
Автор: YodL Цитата:
Я знаю что Префинки и пост для каждого, интересно именно последовательность их выполнения.
Например, встречаются 3 контра они должны друг через друга пройти, и снова стать солидными.
И тут несколько вариантов.
1й у каждого на пре поставить прохождение сквозь себя. На пост поставить солидность.
2й у каждого на пре поставить прохождение сквозь других На пост поставить солидный бокс.
То что пре и пост у каждого свой это понятно, а то что между ними у каждого свое или одно на всех?
Последовательность зависит от клиентского FPS, то есть если у одного клиента например 50 FPS, а у другого 100, то и вызываться эти функции для одного будет 50 раз в секунду, а для другого 100.
Реализовать прохождение друг через друга можно таким образом (2й вариант) наверное, но ведь тогда как в префинк так и в постфинк придется проверять расстояние между 1 конкретным игроком и всеми остальными игроками в команде, для того чтобы в пре включить прохождение а в пост - вовремя выключить если оно включено. Если игроков много, то возможно такие проверки могут серьезно кушать ресурсы... Если допустим 16 игроков в команде, то подсчетов расстояний между двумя отдельно взятыми игроками будет 16*15 = 240 (приблизительно, так как у клиентов будет разный фпс). Прибавим еще столько же в другой команде - получим 480. Если предположить что у всех 100 фпс, то будет 48000 таких подсчетов в секунду. Не знаю, может быть сервер легко справится с такой нагрузкой, но это как-то нерационально на мой взгляд...
Я бы делал через register_touch или hamsandwich...
|
YodL Карма: 1 |
Добавлено: 19:34 25 февраля 2010 | Исправлялось: 5 раз (25-02-10 19:54, YodL) | |
|
Автор: sjgunner Цитата:
Автор: YodL Цитата:
Я знаю что Префинки и пост для каждого, интересно именно последовательность их выполнения.
Например, встречаются 3 контра они должны друг через друга пройти, и снова стать солидными.
И тут несколько вариантов.
1й у каждого на пре поставить прохождение сквозь себя. На пост поставить солидность.
2й у каждого на пре поставить прохождение сквозь других На пост поставить солидный бокс.
То что пре и пост у каждого свой это понятно, а то что между ними у каждого свое или одно на всех?
Последовательность зависит от клиентского FPS, то есть если у одного клиента например 50 FPS, а у другого 100, то и вызываться эти функции для одного будет 50 раз в секунду, а для другого 100.
Реализовать прохождение друг через друга можно таким образом (2й вариант) наверное, но ведь тогда как в префинк так и в постфинк придется проверять расстояние между 1 конкретным игроком и всеми остальными игроками в команде, для того чтобы в пре включить прохождение а в пост - вовремя выключить если оно включено. Если игроков много, то возможно такие проверки могут серьезно кушать ресурсы... Если допустим 16 игроков в команде, то подсчетов расстояний между двумя отдельно взятыми игроками будет 16*15 = 240 (приблизительно, так как у клиентов будет разный фпс). Прибавим еще столько же в другой команде - получим 480. Если предположить что у всех 100 фпс, то будет 48000 таких подсчетов в секунду. Не знаю, может быть сервер легко справится с такой нагрузкой, но это как-то нерационально на мой взгляд...
Я бы делал через register_touch или hamsandwich...
Я правильно понял что финк у каждого клиента свой и Hafner ошибался?
А до пост финка одного плеера может начаться префинк другого?
^^^Жду ответа только на этот вопрос^^^
Все подобные плагины которые я видел делают это через
set_pev(i, pev_solid, SOLID_NOT); fakemeta
или
entity_set_int( i, EV_INT_solid, SOLID_NOT ); engine
Все это либо просто в функции client_PreThink
или вот так register_forward(FM_PlayerPreThink, "fwdPlayerPreThink", 0);
Как я понял можно сделать менее загрузнее, так?
Просто У меня HNS сервер, там что бы блоков меньше было игроки своих команд проходят друг через друга. Но ресурсов реально что-то много ест, но я внушил себе что мне просто это кажется.
Не мог бы ты чуть подробнее че-нить рассказать)
Вот сегодня потестили все же у каждого игрока свой финк. Ибо можно сделать так что бы для одного чела второй был проходимый а для другого нет )
А вот вариант который я приведу ниже не оптимальнее будет?
ВИП всегда солиднот
Пре:
Если ты вип все солиднот
Если ты Т все Т солид нот, CT солидбокс
Если ты СТ все СТ солид нот, Т солидбокс
Или можно как-то поумнее все же?
|
sjgunner Карма: 0 |
Добавлено: 21:48 25 февраля 2010 | |
|
Автор: YodL Цитата:
Я правильно понял что финк у каждого клиента свой и Hafner ошибался?
А до пост финка одного плеера может начаться префинк другого?
^^^Жду ответа только на этот вопрос^^^
Для каждого свой, безусловно, так что конечно может.
Поэтому в основном эти функции используют только для взаимодействия самого отдельно взятого клиента с сервером а не с другими клиентами. Например некоторые эффекты от нажатия игроком определенных клавиш и т.д. Вот в плагине soccerjam в этих функциях реализовано турбо и лонгджамп.
То есть игрок нажал определенную кнопку - он на время ускоряется. Нажал некоторую последовательность кнопок - на время изменяется для него физика и он делает лонгджамп. Но все для одного конкретного игрока.
Автор: YodL Цитата:
Просто У меня HNS сервер, там что бы блоков меньше было игроки своих команд проходят друг через друга. Но ресурсов реально что-то много ест, но я внушил себе что мне просто это кажется.
Не мог бы ты чуть подробнее че-нить рассказать)
Вот сегодня потестили все же у каждого игрока свой финк. Ибо можно сделать так что бы для одного чела второй был проходимый а для другого нет )
А вот вариант который я приведу ниже не оптимальнее будет?
ВИП всегда солиднот
Пре:
Если ты вип все солиднот
Если ты Т все Т солид нот, CT солидбокс
Если ты СТ все СТ солид нот, Т солидбокс
Или можно как-то поумнее все же?
Вот как реализовать не знаю, в fakemeta особо не шарю, так что тут подумать надо... Вот только алгоритм не совсем понимаю... Кто такой вип вообще?)
Я бы возможно попробовал делать через hamsandwich
public plugin_init()
{
...
RegisterHam(Ham_Touch, "player", "touch");
}
public touch(player,id)
{
if( //проверяем условия, кто там вип кто т кто кт и т.д.){
set_pev(player, pev_solid, SOLID_NOT)
set_pev(id, pev_solid, SOLID_NOT)
return HAM_IGNORED
}
else return HAM_IGNORED
}
То есть просто отслеживаем событие, когда 2 игрока встречаются, проверяем условие проходят ли они друг через друга или нет, и в зависимости от этого их меняем. Так более экономнее в плане расхода ресурсов, чем за каждый клиентский кадр проверять кучу условий. Еще не знаю может быть я hamsandwich тут зря прилепил, возможно отследить touch можно и через engine или fakemeta, не знаю честно говоря.
|
YodL Карма: 1 |
Добавлено: 13:13 28 февраля 2010 | |
|
RegisterHam(Ham_Touch, "player", "touch");
А где можно посмотреть список всех энити классов?
Просто player на спектатров не действует.
|
sjgunner Карма: 0 |
Добавлено: 16:32 28 февраля 2010 | |
|
ссылка
|
YodL Карма: 1 |
Добавлено: 01:55 2 марта 2010 | Исправлялось: 1 раз (02-03-10 01:57, YodL) | |
|
Я что-то парился парился с випами, а они не работали. Потом решил написать просто что бы свои друг через друга проходили, убрал все связанное с випами и тут тоже перестало работать ))
#include
#include
#include
#include
public plugin_init() {
register_plugin("HNS TEAM SEMICLIP","0.8beta","YodL")
RegisterHam(Ham_Touch, "player", "touch")
}
public touch(id, plr){
client_print(id, print_chat,"!!!!")
client_print(plr, print_chat,"plr")
if(cs_get_user_team(id)==cs_get_user_team(plr))
{
set_pev(plr, pev_solid, SOLID_NOT)
set_pev(id, pev_solid, SOLID_NOT)
return HAM_IGNORED
}
set_pev(plr, pev_solid, SOLID_BBOX)
set_pev(id, pev_solid, SOLID_BBOX)
return HAM_IGNORED
}
После теста на сервере получилось:
1)touch не только с плеером работает.(это не особо важно)
2)Если ты SOLID_NOT он уже как-то не работает.
Хотя может надо просто в утра надо все делать а не вечером...
|
|
|
|
все моды
все регионы
посиделки
|