HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Наши проекты (https://hlfx.ru/forum/forumdisplay.php?forumid=1)
-- Немного о будущем XDM3038 (https://hlfx.ru/forum/showthread.php?threadid=4641)
Отправлено Дядя Миша 08-10-2016 в 21:55:
Цитата:
~ X ~ писал:
перестал портить конфиги до состояния вылета халвы
так это проблема халфы, например.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Ku2zoff 09-10-2016 в 04:06:
Цитата:
~ X ~ писал:
И выясняется что РЕАЛЬНО ПРИХОДИТ несколько занулённых структур!!
Это под голдсорсом?
Цитата:
~ X ~ писал:
я просто не могу смотреть на лютый хак с лучами для эгона на клиенте.
Ну а что не так с этим хаком? Создаются клиентские копии лучей, а потом их состояние изменяется в функции UpdateBeams.
Отправлено Дядя Миша 09-10-2016 в 13:34:
Цитата:
Ku2zoff писал:
Ну а что не так с этим хаком?
Тов XWider просто не различает где хак, а где нет. Он считает хаком любой код, который выше его понимания 
Вот покажи ему деревья хаффмана, он тут же закричит, что это хак и анальщина.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 09-10-2016 в 13:41:
Я бы хотел для начала услышать определение понятий "хак" и "анальщина" от XWider-а. Возможно, мы понимаем под этими словами разные вещи.
__________________
Отправлено Дядя Миша 09-10-2016 в 13:44:
Цитата:
XaeroX писал:
Я бы хотел для начала услышать определение понятий "хак" и "анальщина" от XWider-а
Цитата:
— Дело в том, что… Вы знаете, что такое домкрат?
— Ну, конечно, знаю, оставьте меня в покое…
— Как вы себе представляете домкрат? Опишите своими словами.
— Такой… Падает, одним словом.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ~ X ~ 09-10-2016 в 16:11:
Цитата:
Ku2zoff писал:
Это под голдсорсом?
Да. Под ксашем пока не тестировал.
Происходит в основном у нелокальных клиентов ( != 127.0.0.1).
Цитата:
Ku2zoff писал:
Ну а что не так с этим хаком? Создаются клиентские копии лучей, а потом их состояние изменяется в функции UpdateBeams.
Потому что объект СОЗДАЁТСЯ на клиенте вместо того чтобы быть одним для всех. Уныние, отчаяние и фацепалм. 
XaeroX Дядя Миша нуждается в двух предупреждениях за флуд и двух за неуважение к участникам форума. (г_г)__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
Отправлено Дядя Миша 09-10-2016 в 16:20:
Цитата:
~ 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; |
Видите? Сделали переменные для юзеров, а сами же их и заюзали. Это не только хак, но еще и подлость.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Ku2zoff 09-10-2016 в 16:36:
Цитата:
~ X ~ писал:
Потому что объект СОЗДАЁТСЯ на клиенте вместо того чтобы быть одним для всех.
И что? На клиенте ты никак не создашь объекты, видимые другим игрокам. Можно только отправлять с сервера эвенты или мессаги каждому конкретному игроку. Ну ты же это знаешь. Так что или мирится с подобным кодом, или терпеть заметное подлагиванием пушек.
Что меня действительно напрягает, так это то, что на клиенте нет нормального способа (читай, интерфейса из движка) чтобы управлять массивом объектов. Давеча очень много переписывал код зажигалки, чтобы другие игроки в мультиплеере видели свет от неё. Так вот, пришлось завести 32 длайта, по одному на каждого игрока. Существуют они конечно не всегда, а только в моменты свечения зажигалки. Но страшно напрягает вручную орудовать этим массивом. Ну и ещё ограничение на 32 длайта есть... К счастью, я планирую использовать 8-9 игроков в коопе и не более 16-18 в мультиплеере, если мультиплеер будет. Так что должно хватить, даже если все игроки одновременно будут светить зажигалками.
Добавлено 09-10-2016 в 23:36:
Цитата:
Дядя Миша писал:
Видите? Сделали переменные для юзеров, а сами же их и заюзали. Это не только хак, но еще и подлость.
Подлость в том, что такие структуры нельзя расширить. На кой хрен было фиксировать это дело в движке? Вот ненавижу Валвэ за такие гадости.
Отправлено Дядя Миша 09-10-2016 в 17:12:
Цитата:
Ku2zoff писал:
Но страшно напрягает вручную орудовать этим массивом.
Что это значит?
в HUD_AddEntity сделай проверку на
C++ Source Code:
if( pEnt->curstate.effects & EF_LIGHTER ) |
CL_AllocDlight( ent->attachment[0], Vector( 223, 160, 0 ), host_frametime ); |
Это псевдокод, но думаю суть понятна. Какой нахрен массив, какое ручное управление?
Добавлено 09-10-2016 в 20:12:
Ну и раз уш пошла такая пьянка, вот вам в подарок код предиктабельной лазерной точки на клиенте 
C++ Source Code:
1 | TEMPENTITY *m_pLaserSpot = NULL; |
3 | void CL_UpdateLaserSpot( void ) |
5 | cl_entity_t *player = GET_LOCAL_PLAYER(); |
6 | cl_entity_t *view = GET_VIEWMODEL(); |
10 | if(( FBitSet( player->curstate.effects, EF_LASERSPOT ) && cl_lw->integer ) && !m_pLaserSpot ) |
13 | int m_iSpotModel = MODEL_INDEX( "sprites/laserdot.spr" ); |
15 | m_pLaserSpot = g_pTempEnts->TempSprite( g_vecZero, g_vecZero, 1.0, m_iSpotModel, kRenderGlow, kRenderFxNoDissipation, 1.0, 9999, FTENT_SPRCYCLE ); |
16 | if( !m_pLaserSpot ) return; |
18 | m_pLaserSpot->entity.curstate.rendercolor.r = 200; |
19 | m_pLaserSpot->entity.curstate.rendercolor.g = 12; |
20 | m_pLaserSpot->entity.curstate.rendercolor.b = 12; |
21 | // ALERT( at_console, "CLaserSpot::Create()\n" ); |
23 | else if(( !FBitSet( player->curstate.effects, EF_LASERSPOT ) || !cl_lw->integer ) && m_pLaserSpot ) |
26 | // ALERT( at_console, "CLaserSpot::Killed()\n" ); |
27 | m_pLaserSpot->die = 0.0f; |
31 | else if( !m_pLaserSpot ) |
37 | assert( m_pLaserSpot != NULL ); |
39 | Vector forward, vecSrc, vecEnd, origin, angles; |
42 | if( gHUD.m_iCameraMode ) |
44 | forward = gpGlobals->v_forward; |
45 | origin = player->origin; |
49 | forward = view->attachment[0].dir; |
50 | origin = view->origin; |
54 | vecEnd = vecSrc + forward * 8192.0f; |
56 | tr = TRACE_LINE( vecSrc, vecEnd, PM_NORMAL ); |
58 | // update laserspot endpos |
59 | m_pLaserSpot->entity.origin = tr.endpos; |
60 | m_pLaserSpot->die = gpGlobals->time + 0.1f; |
Вызывать из HUD_CreateEntities.
а вот серверная часть
C++ Source Code:
1 | CLaserSpot *CLaserSpot::CreateSpot( edict_t *pOwner ) |
3 | CLaserSpot *pSpot = GetClassPtr( (CLaserSpot *)NULL ); |
6 | pSpot->pev->classname = MAKE_STRING("laser_spot"); |
10 | // predictable laserspot |
11 | pSpot->pev->flags |= FL_SKIPLOCALHOST; |
12 | pOwner->v.effects |= EF_LASERSPOT; |
13 | pSpot->pev->owner = pOwner; |
19 | //========================================================= |
20 | //========================================================= |
21 | LINK_ENTITY_TO_CLASS( laser_spot, CLaserSpot ); |
23 | void CLaserSpot::Spawn( void ) |
26 | pev->movetype = MOVETYPE_NONE; |
27 | pev->solid = SOLID_NOT; |
29 | pev->rendermode = kRenderGlow; |
30 | pev->renderfx = kRenderFxNoDissipation; |
34 | SetModel( "sprites/laserdot.spr" ); |
37 | //========================================================= |
38 | // Suspend- make the laser sight invisible. |
39 | //========================================================= |
40 | void CLaserSpot::Suspend( float flSuspendTime ) |
42 | pev->effects |= EF_NODRAW; |
44 | if( !FNullEnt( pev->owner )) |
45 | pev->owner->v.effects &= ~EF_LASERSPOT; |
48 | pev->nextthink = gpGlobals->time + flSuspendTime; |
51 | //========================================================= |
52 | // Revive - bring a suspended laser sight back. |
53 | //========================================================= |
54 | void CLaserSpot::Revive( void ) |
56 | pev->effects &= ~EF_NODRAW; |
58 | if( !FNullEnt( pev->owner )) |
59 | pev->owner->v.effects |= EF_LASERSPOT; |
64 | void CLaserSpot::OnRemove( void ) |
66 | // tell the owner about laserspot |
67 | if( !FNullEnt( pev->owner )) |
68 | pev->owner->v.effects &= ~EF_LASERSPOT; |
71 | void CLaserSpot::Precache( void ) |
73 | PRECACHE_MODEL("sprites/laserdot.spr"); |
EF_LASERSPOT просто какой-нибудь незанятый бит по аналогии с соседями в const.h
Код, конечно не для тупой копипасты, это из XashNT. Но я думаю вы его легко адоптируете. И не забудьте в delta.lst увеличить кол-во бит для поля effects.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Ku2zoff 09-10-2016 в 17:22:
Цитата:
Дядя Миша писал:
в HUD_AddEntity сделай проверку на
Ты предлагаешь создавать каждый кадр новый длайт, который буде жить всего кадр?
Отправлено Дядя Миша 09-10-2016 в 17:32:
Цитата:
Ku2zoff писал:
Ты предлагаешь создавать каждый кадр новый длайт, который буде жить всего кадр?
А ты что заранее знаешь когда игрок выключит зажигалку? Или ты полагаешь что длайт, который живёт 10 секунд чем-то принципиально отличается от длайта который живёт 1 кадр?
Единственное что - используй параметр key передавая туда entindex игрока, чтобы всегда использовался один и тот же длайт.
Ну типа
C++ Source Code:
1 | if( cl.maxclients == 1 ) |
2 | key = cl.playernum + 1; |
5 | // update flashlight endpos |
6 | dl = CL_AllocDlight( key ); |
И вообще привыкай что на клиенте всё живёт один кадр.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Ku2zoff 09-10-2016 в 18:08:
Цитата:
Дядя Миша писал:
А ты что заранее знаешь когда игрок выключит зажигалку?
Это у меня эвентами управляется, так что длайты гасятся принудительно в случае чего.Цитата:
Дядя Миша писал:
Единственное что - используй параметр key
Я пару часов назад глядел сорцы ксаша, понял как это работает. Вот ещё бы заставить этот свет мерцать, как в инвазионе.
Если на клиенте всё живёт один кадр, тогда конечно такой подход не создаст никакой лишней нагрузки.
Отправлено ~ X ~ 09-10-2016 в 18:18:
Цитата:
Дядя Миша писал:
Видите? Сделали переменные для юзеров, а сами же их и заюзали. Это не только хак, но еще и подлость.
Вот об этом я ещё 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 давай-ка то, что тебя напрягает обсуждать в отдельном треде?__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
Отправлено Дядя Миша 09-10-2016 в 20:04:
Цитата:
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:
ЗЫ. Вообще-то сорцы инвазиона доступны с начала этого года.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 10-10-2016 в 00:21:
Пока товарищ XWider ищет, вероятно, несуществующие креши и оверфлоу, я повторю вопрос:
Цитата:
XaeroX писал:
Я бы хотел для начала услышать определение понятий "хак" и "анальщина" от XWider-а. Возможно, мы понимаем под этими словами разные вещи.
__________________