Тов XWider просто не различает где хак, а где нет. Он считает хаком любой код, который выше его понимания
Вот покажи ему деревья хаффмана, он тут же закричит, что это хак и анальщина.
~ X ~ писал: Потому что объект СОЗДАЁТСЯ на клиенте вместо того чтобы быть одним для всех
Ты слышал кое-что про клиентские энтити? Они создаются на клиенте.
Цитата:
~ X ~ писал: Дядя Миша нуждается в двух предупреждениях за флуд и двух за неуважение к участникам форума
Это почему это в двух, если участник - один? Который к тому же не хочет пояснить своему позицию по давно интерисующему нас вопросу.
Я вам сейчас покажу как выглядит настоящий хак:
C++ Source Code:
1
item->fuser2 = gun->m_flStartThrow;
2
item->fuser3 = gun->m_flReleaseThrow;
3
item->iuser1 = gun->m_chargeReady;
4
item->iuser2 = gun->m_fInAttack;
5
item->iuser3 = gun->m_fireState;
Видите? Сделали переменные для юзеров, а сами же их и заюзали. Это не только хак, но еще и подлость.
~ X ~ писал: Потому что объект СОЗДАЁТСЯ на клиенте вместо того чтобы быть одним для всех.
И что? На клиенте ты никак не создашь объекты, видимые другим игрокам. Можно только отправлять с сервера эвенты или мессаги каждому конкретному игроку. Ну ты же это знаешь. Так что или мирится с подобным кодом, или терпеть заметное подлагиванием пушек.
Что меня действительно напрягает, так это то, что на клиенте нет нормального способа (читай, интерфейса из движка) чтобы управлять массивом объектов. Давеча очень много переписывал код зажигалки, чтобы другие игроки в мультиплеере видели свет от неё. Так вот, пришлось завести 32 длайта, по одному на каждого игрока. Существуют они конечно не всегда, а только в моменты свечения зажигалки. Но страшно напрягает вручную орудовать этим массивом. Ну и ещё ограничение на 32 длайта есть... К счастью, я планирую использовать 8-9 игроков в коопе и не более 16-18 в мультиплеере, если мультиплеер будет. Так что должно хватить, даже если все игроки одновременно будут светить зажигалками.
Добавлено 09-10-2016 в 23:36:
Цитата:
Дядя Миша писал: Видите? Сделали переменные для юзеров, а сами же их и заюзали. Это не только хак, но еще и подлость.
Подлость в том, что такие структуры нельзя расширить. На кой хрен было фиксировать это дело в движке? Вот ненавижу Валвэ за такие гадости.
EF_LASERSPOT просто какой-нибудь незанятый бит по аналогии с соседями в const.h
Код, конечно не для тупой копипасты, это из XashNT. Но я думаю вы его легко адоптируете. И не забудьте в delta.lst увеличить кол-во бит для поля effects.
Ku2zoff писал: Ты предлагаешь создавать каждый кадр новый длайт, который буде жить всего кадр?
А ты что заранее знаешь когда игрок выключит зажигалку? Или ты полагаешь что длайт, который живёт 10 секунд чем-то принципиально отличается от длайта который живёт 1 кадр?
Единственное что - используй параметр key передавая туда entindex игрока, чтобы всегда использовался один и тот же длайт.
Ну типа
C++ Source Code:
1
if( cl.maxclients == 1 )
2
key = cl.playernum + 1;
3
else key = pEnt->index;
4
5
// update flashlight endpos
6
dl = CL_AllocDlight( key );
И вообще привыкай что на клиенте всё живёт один кадр.
Дядя Миша писал: А ты что заранее знаешь когда игрок выключит зажигалку?
Это у меня эвентами управляется, так что длайты гасятся принудительно в случае чего.
Цитата:
Дядя Миша писал: Единственное что - используй параметр key
Я пару часов назад глядел сорцы ксаша, понял как это работает. Вот ещё бы заставить этот свет мерцать, как в инвазионе.
Если на клиенте всё живёт один кадр, тогда конечно такой подход не создаст никакой лишней нагрузки.
Дядя Миша писал: Видите? Сделали переменные для юзеров, а сами же их и заюзали. Это не только хак, но еще и подлость.
Вот об этом я ещё 10 лет назад говорил.
Цитата:
Ku2zoff писал: нормального способа (читай, интерфейса из движка) чтобы управлять массивом объектов.
CRenderManager :3
Цитата:
Ku2zoff писал: Так вот, пришлось завести 32 длайта, по одному на каждого игрока. Существуют они конечно не всегда, а только в моменты свечения зажигалки. Но страшно напрягает вручную орудовать этим массивом. Ну и ещё ограничение на 32 длайта есть...
same shit with flashlights here. Some more dlights (projectiles, etc.) and viola - darkness and flickering.
Цитата:
Дядя Миша писал: Ну и раз уш пошла такая пьянка, вот вам в подарок код предиктабельной лазерной точки на клиенте
ещё один хак. Нет, много хаков Кроме того, сразу виден как минимум один крэш и overflow 9000 temporary ents.
Цитата:
Дядя Миша писал: Единственное что - используй параметр key передавая туда entindex игрока, чтобы всегда использовался один и тот же длайт.
А в XDM это уже есть...
Ku2zoff давай-ка то, что тебя напрягает обсуждать в отдельном треде?
Ku2zoff писал: Это у меня эвентами управляется, так что длайты гасятся принудительно в случае чего.
Цитата:
Ku2zoff писал: Вот ещё бы заставить этот свет мерцать, как в инвазионе.
C++ Source Code:
dl->radius = RANDOM_LONG( 200, 230 );
А ты уже собирался CRenderManager заюзать под это дело? Это всё от полного непонимания происходящих процессов идёт чрезмерное усложнение. Там где можно было обойтись одной строчкой - лепятся какие-то рендер-менеджеры, эвенты на включение и выключение. Нормально оно не работает, постоянно приходят какие-то занулённые структуры.
Из того же XDM можно выкинуть примерно 98% кода и он будет работать только лучше от этого.
Цитата:
~ X ~ писал: ещё один хак. Нет, много хаков
Предложи своей способ предиктабельной лазерной точки с возможность отключения предиктинга .
Цитата:
~ X ~ писал: Кроме того, сразу виден как минимум один крэш и overflow 9000 temporary ents.
Да ну! И где же там крэш и где же overflow? Покажи.
Добавлено 09-10-2016 в 23:04:
ЗЫ. Вообще-то сорцы инвазиона доступны с начала этого года.