HLFX.Ru Forum Страницы (260): « Первая ... « 185 186 187 188 [189] 190 191 192 193 » ... Последняя »
Показать все 3886 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Нубские вопросы от <censored> и других нубов (https://hlfx.ru/forum/showthread.php?threadid=4535)


Отправлено Ku2zoff 11-04-2021 в 14:44:

Подскажите, есть ли возможность научить пушаблю падать, после того, как из-под неё была вытолкнута другая пушабля? Если нижнюю расстрелять - верхняя падает. А вот если просто вытолкнуть - верхняя остаётся висеть в воздухе.

Добавлено 11-04-2021 в 21:44:

Вышел из положения временно вот таким кодом:

C++ Source Code:
1
void CPushable::AddGravityThink(void)
2
{
3
  if (!pev->gravity) pev->gravity = 0.5;
4
 
5
  pev->velocity.z -= (pev->gravity * CVAR_GET_FLOAT("sv_gravity") * gpGlobals->frametime);
6
  pev->velocity.z += (pev->basevelocity.z * gpGlobals->frametime);
7
  pev->basevelocity.z = 0.0f;
8
 
9
  pev->nextthink = pev->ltime + 0.1;
10
}

pev->gravity обязательно 0.5, чтобы пушабли падали с обычной, а не с двойной скоростью. Сначала половина ускорения применяется в SV_AddGravity в движке, а затем вторая половина в AddGravityThink. Теперь пушабли прекрасно падают как с других пушаблей, так и с монстров, если монстр отошёл в сторону.


Отправлено SNMetamorph 11-04-2021 в 14:48:

Цитата:
Crystallize писал:
так ты XT допиливаешь или что ты делаешь?

Мою ютилиту GoldSrc Monitor допиливаю потихоньку параллельно с ксашмодом.

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord


Отправлено Дядя Миша 11-04-2021 в 17:05:

Цитата:
SNMetamorph писал:
Не, мне надо именно накодить это

А в чём проблема? Ну если ты видишь, что после умножения на матрицу хулл куда-то уезжает - не умножай на матрицу.

Добавлено 11-04-2021 в 20:02:

Цитата:
Ku2zoff писал:
Подскажите, есть ли возможность научить пушаблю падать, после того, как из-под неё была вытолкнута другая пушабля?

Рекурсивно убрать им флаг FL_ONGROUND. Можно и двигать, но это сложнее.

Добавлено 11-04-2021 в 20:05:

Цитата:
Ku2zoff писал:
Вышел из положения временно вот таким кодом:

C++ Source Code:
1
void CPushable::AddGravityThink(void)
2
{
3
  ClearBits (pev->flags, FL_ONGROUND);
4
  pev->nextthink = pev->ltime + 0.1;
5
}

А потом удивляются, почему софт весит по терабайту.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 11-04-2021 в 17:30:

Дядя Миша так не годится. У пушаблей пропадает трение, если убрать флаг. Ну или не пропадает, но они скользят до бесконечности по полу, если получают ускорение, видимо, работает SV_FlyMove. Флаг надо снимать в определённый момент, когда внизу становится пусто, а не каждый кадр.


Отправлено Дядя Миша 11-04-2021 в 17:46:

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

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 11-04-2021 в 17:46:

Блин, ну я балбес. Из движка ведь торчит нужный экспорт

C++ Source Code:
1
void CPushable::AddGravityThink(void)
2
{
3
  if (ENT_IS_ON_FLOOR(ENT(pev)) == 0)
4
    ClearBits(pev->flags, FL_ONGROUND);
5
 
6
  pev->nextthink = pev->ltime + 0.1;
7
}


Отправлено Дядя Миша 11-04-2021 в 17:58:

Цитата:
Ku2zoff писал:
ENT_IS_ON_FLOOR

она тежолая, на самом деле.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 11-04-2021 в 18:08:

Дядя Миша я тчинк сделал пореже, до 0.5 секунды увеличил. И сделал проверку на FL_ONGROUND, чтобы для падающих пушаблей не считалось. Посмотрим. Если вдруг нарвусь на тормоза, никогда не поздно будет вернуться к варианту с гравитацией.

Добавлено 12-04-2021 в 01:08:

Вообще, для обычных пушаблей на зависание в воздухе можно забить - ситуация редкая. Я лишь в паре любительских модов такое видел, где авторы так их располагали, что можно из них составить пирамиду. Обычно все пушабли на одном уровне: меньший ящик толкается к большему, а потом по ним игрок куда-то лезет. Но у меня ситуация с носимыми в руках пушаблями: их ведь можно поставить на что угодно, куда "руки" дотянутся. Вот и столкнулся с неприятным моментом.


Отправлено Aynekko 12-04-2021 в 07:10:

Цитата:
Ku2zoff писал:
их ведь можно поставить на что угодно, куда "руки" дотянутся

А ты проверял проп-флайинг? Я в ксаше столкнулся с таким. Можно залезть на предмет, подпрыгнуть, взять. Отпустить, подпрыгнуть, взять. И так до бесконечности.

__________________
Мой мод на Xash


Отправлено Ku2zoff 12-04-2021 в 09:41:

Цитата:
Aynekko писал:
А ты проверял проп-флайинг?

Это с пушаблями не работает. У них в таком случае будет ненулевая velocity, а значит флаг FL_ONGROUND сбросится внутри SV_MoveStep.


Отправлено SNMetamorph 17-04-2021 в 12:31:

Значится, я рисую у энтити их обьем таким вот образом
https://github.com/SNMetamorph/gold...report.cpp#L114
Проблема в том, что у func_tank питч инвертированный получается, хотя у всех остальных энтити всё выглядит нормально и питч такой как надо. Как это решить?
А ещё я заметил, что у некоторых энтити их ориджин находится как бы в центре хулла, а у других он находится в самом низу хулла. Как определить где находится центр для какой-то конкретной энтити? Есть флаг некий для этого?

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord


Отправлено Crystallize 19-04-2021 в 15:13:

Написал такую штуку и столкнулся с тем что в конце при выводе через printf оба значения по нулям.

C++ Source Code:
1
void GetAngleScaler( float scaler, float scaler1 )
2
{
3
  vec3_t tang, tang1;
4
  if( Length( cl.velocity ) ) GetLocalTangent(tang, tang1);
5
 
6
  Con_Printf( "tang %f tang1 %f\n", tang[1],tang1[1] );
7
  scaler = tang[1] / 90.0f;
8
  scaler1 = tang1[1] / 90.0f;
9
  if( !scaler ) scaler = 1.0f;
10
  if( !scaler1 ) scaler1 = 1.0f;
11
 
12
 
13
  if( cl.viewangles[1] < tang[1] )
14
    scaler = 1.0f / scaler;
15
  if( cl.viewangles[1] < tang1[1] )
16
    scaler1 = 1.0f / scaler1;
17
 
18
  Con_Printf( "GAS sc %f sc1 %f\n", scaler, scaler1 );
19
}
20
 
21
 
22
/*
23
================
24
CL_AdjustAngles
25
 
26
Moves the local angle positions
27
================
28
*/
29
 
30
void CL_AdjustAngles ()
31
{
32
  float	speed;
33
  float	up, down;
34
  static float scaler, scaler1;
35
  vec3_t	plpos, camang, dir;
36
  vec3_t	cmps={0,0,0};
37
 
38
  entity_t	*ent;
39
  ent = &cl_entities[cl.viewentity];
40
  VectorCopy( ent->currentorigin, plpos );
41
 
42
  if (in_speed.state & 1)
43
    speed = host_frametime * cl_anglespeedkey.value;
44
  else
45
    speed = host_frametime;
46
 
47
  GetAngleScaler( scaler, scaler1 );
48
  Con_Printf( "sc %f sc1 %f\n", scaler, scaler1 );


Отправлено SNMetamorph 19-04-2021 в 16:29:

Цитата:
Crystallize писал:
Написал такую штуку и столкнулся с тем что в конце при выводе через printf оба значения по нулям.

C++ Source Code:
1
void GetAngleScaler( float scaler, float scaler1 )
2
{
3
  vec3_t tang, tang1;
4
  if( Length( cl.velocity ) ) GetLocalTangent(tang, tang1);
5
 
6
  Con_Printf( "tang %f tang1 %f\n", tang[1],tang1[1] );
7
  scaler = tang[1] / 90.0f;
8
  scaler1 = tang1[1] / 90.0f;
9
  if( !scaler ) scaler = 1.0f;
10
  if( !scaler1 ) scaler1 = 1.0f;
11
 
12
 
13
  if( cl.viewangles[1] < tang[1] )
14
    scaler = 1.0f / scaler;
15
  if( cl.viewangles[1] < tang1[1] )
16
    scaler1 = 1.0f / scaler1;
17
 
18
  Con_Printf( "GAS sc %f sc1 %f\n", scaler, scaler1 );
19
}
20
 
21
 
22
/*
23
================
24
CL_AdjustAngles
25
 
26
Moves the local angle positions
27
================
28
*/
29
 
30
void CL_AdjustAngles ()
31
{
32
  float	speed;
33
  float	up, down;
34
  static float scaler, scaler1;
35
  vec3_t	plpos, camang, dir;
36
  vec3_t	cmps={0,0,0};
37
 
38
  entity_t	*ent;
39
  ent = &cl_entities[cl.viewentity];
40
  VectorCopy( ent->currentorigin, plpos );
41
 
42
  if (in_speed.state & 1)
43
    speed = host_frametime * cl_anglespeedkey.value;
44
  else
45
    speed = host_frametime;
46
 
47
  GetAngleScaler( scaler, scaler1 );
48
  Con_Printf( "sc %f sc1 %f\n", scaler, scaler1 );

Как я понял, тебе надо в GetAngleScaler передавать ссылки на переменные, а ты передаешь внутрь просто переменные.
То есть обьявление функции должно быть таким:
C++ Source Code:
void GetAngleScaler( float &scaler, float &scaler1 )

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord


Отправлено Crystallize 19-04-2021 в 17:26:

SNMetamorph он хочет закрывающую скобку перед символом ссылки


Отправлено nemyax 19-04-2021 в 18:47:

Crystallize
Так это сишный файл, наверно. А в сях только указатели и нету неко ких ссылок.


Временная зона GMT. Текущее время 20:30. Страницы (260): « Первая ... « 185 186 187 188 [189] 190 191 192 193 » ... Последняя »
Показать все 3886 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024