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) |
3 | if (!pev->gravity) pev->gravity = 0.5; |
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; |
9 | pev->nextthink = pev->ltime + 0.1; |
pev->gravity обязательно 0.5, чтобы пушабли падали с обычной, а не с двойной скоростью. Сначала половина ускорения применяется в SV_AddGravity в движке, а затем вторая половина в AddGravityThink. Теперь пушабли прекрасно падают как с других пушаблей, так и с монстров, если монстр отошёл в сторону.
Отправлено SNMetamorph 11-04-2021 в 14:48:
Цитата:
Crystallize писал:
так ты XT допиливаешь или что ты делаешь?
Мою ютилиту GoldSrc Monitor допиливаю потихоньку параллельно с ксашмодом.__________________
GoldSrc Monitor (https://gamebanana.com/mods/39429)
mdl-flip (gFlip analog) (https://gamebanana.com/tools/7299)
Xash3D Modding Discord (https://discord.com/invite/Ycgd9QqB9z)
PrimeXT (https://github.com/SNMetamorph/PrimeXT)
Отправлено Дядя Миша 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) |
3 | ClearBits (pev->flags, FL_ONGROUND); |
4 | pev->nextthink = pev->ltime + 0.1; |
А потом удивляются, почему софт весит по терабайту.__________________
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) |
3 | if (ENT_IS_ON_FLOOR(ENT(pev)) == 0) |
4 | ClearBits(pev->flags, FL_ONGROUND); |
6 | pev->nextthink = pev->ltime + 0.1; |
Отправлено Дядя Миша 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 питч инвертированный получается, хотя у всех остальных энтити всё выглядит нормально и питч такой как надо. Как это решить?
А ещё я заметил, что у некоторых энтити их ориджин находится как бы в центре хулла, а у других он находится в самом низу хулла. Как определить где находится центр для какой-то конкретной энтити? Есть флаг некий для этого?
__________________
GoldSrc Monitor (https://gamebanana.com/mods/39429)
mdl-flip (gFlip analog) (https://gamebanana.com/tools/7299)
Xash3D Modding Discord (https://discord.com/invite/Ycgd9QqB9z)
PrimeXT (https://github.com/SNMetamorph/PrimeXT)
Отправлено Crystallize 19-04-2021 в 15:13:
Написал такую штуку и столкнулся с тем что в конце при выводе через printf оба значения по нулям.
C++ Source Code:
1 | void GetAngleScaler( float scaler, float scaler1 ) |
4 | if( Length( cl.velocity ) ) GetLocalTangent(tang, tang1); |
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; |
13 | if( cl.viewangles[1] < tang[1] ) |
14 | scaler = 1.0f / scaler; |
15 | if( cl.viewangles[1] < tang1[1] ) |
16 | scaler1 = 1.0f / scaler1; |
18 | Con_Printf( "GAS sc %f sc1 %f\n", scaler, scaler1 ); |
26 | Moves the local angle positions |
30 | void CL_AdjustAngles () |
34 | static float scaler, scaler1; |
35 | vec3_t plpos, camang, dir; |
39 | ent = &cl_entities[cl.viewentity]; |
40 | VectorCopy( ent->currentorigin, plpos ); |
42 | if (in_speed.state & 1) |
43 | speed = host_frametime * cl_anglespeedkey.value; |
45 | speed = host_frametime; |
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 ) |
4 | if( Length( cl.velocity ) ) GetLocalTangent(tang, tang1); |
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; |
13 | if( cl.viewangles[1] < tang[1] ) |
14 | scaler = 1.0f / scaler; |
15 | if( cl.viewangles[1] < tang1[1] ) |
16 | scaler1 = 1.0f / scaler1; |
18 | Con_Printf( "GAS sc %f sc1 %f\n", scaler, scaler1 ); |
26 | Moves the local angle positions |
30 | void CL_AdjustAngles () |
34 | static float scaler, scaler1; |
35 | vec3_t plpos, camang, dir; |
39 | ent = &cl_entities[cl.viewentity]; |
40 | VectorCopy( ent->currentorigin, plpos ); |
42 | if (in_speed.state & 1) |
43 | speed = host_frametime * cl_anglespeedkey.value; |
45 | speed = host_frametime; |
47 | GetAngleScaler( scaler, scaler1 ); |
48 | Con_Printf( "sc %f sc1 %f\n", scaler, scaler1 ); |
Как я понял, тебе надо в GetAngleScaler передавать ссылки на переменные, а ты передаешь внутрь просто переменные.
То есть обьявление функции должно быть таким:
C++ Source Code:
void GetAngleScaler( float &scaler, float &scaler1 ) |
__________________
GoldSrc Monitor (https://gamebanana.com/mods/39429)
mdl-flip (gFlip analog) (https://gamebanana.com/tools/7299)
Xash3D Modding Discord (https://discord.com/invite/Ycgd9QqB9z)
PrimeXT (https://github.com/SNMetamorph/PrimeXT)
Отправлено Crystallize 19-04-2021 в 17:26:
SNMetamorph он хочет закрывающую скобку перед символом ссылки 
Отправлено nemyax 19-04-2021 в 18:47:
Crystallize
Так это сишный файл, наверно. А в сях только указатели и нету неко ких ссылок.