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)
Отправлено Дядя Миша 10-12-2021 в 06:00:
Цитата:
Chyvachok писал:
В общем проблема с LightAtPoint, оно выдает вообще непонятные числа, то минусовые, то гиганские там 9946234623 такого вида, и по одной координате.
это не он выдаёт, это мусор на стеке.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Chyvachok 10-12-2021 в 12:57:
В общем сделал эту аврорку, чтобы свет на нее влиял, и приделал опцию которая бы читалась из txt файла и влияла, освещается партикл или нет.
Осталось придумать с сервером, Аврора не сохраняется, и след исчезает у сущности если сохранится и загрузится, я вот думаю, а как сделать функцию, которая бы вызывалась только после того как игрок загрузился? Которая бы след восстанавливала бы.
Отправлено Ku2zoff 10-12-2021 в 13:01:
Chyvachok SendInitMessage из первой паранойи. Ну или Xash PostActivate System. Первое работает и в мультиплеере. Второе только в сингле.
Добавлено 10-12-2021 в 20:01:
Ещё DesiredAction из спирита. Правда оно больше для мовевитча, и посылка мессаг на клиент сделана через него, потому что по таймингам попадает в нужный промежуток.
Отправлено Chyvachok 10-12-2021 в 15:13:
Еще тоже с кусками и авророй, у меня след удаляется в функции WaitTillLand, но как я понял если куски пропадают из поля зрения, то игра их удаляет, а след остается, не очень удобно что вручную нужно удалять саму систему: https://imgur.com/a/gifVyNo
На этой карте видно как вообще игра их удаляет чуть ли не на глазах, а система остается, загвоздка в том что я не нашел через какую функцию игра чистит куски, чтобы туда код удаляющий след влепить.
Добавлено 10-12-2021 в 15:16:
Цитата:
Ku2zoff писал:
Chyvachok SendInitMessage из первой паранойи.
Надо будет посмотреть, это на клиент отправляет или на сервере, мне надо у самого снаряда вызывать эту функцию после загрузки сохранения, я как-то делал давно, когда юзал эту Аврору, но это был КсашХТ и с тер пор прошло много времени, я этот код потерял. Главное что на Клиенте в этой авроре вроде есть код, который должен удалять партиклю если нет сущности, но видимо он не работает.
Добавлено 10-12-2021 в 16:00:
https://imgur.com/a/gifVyNo
С неисчезающими следом, это не в удалении кусков дело, они в этом моменте падают под пол - он не солидный, и под ним пол без текстуры, можно грены покидать, они тоже проваливаться будут, и так как кусков не видно, их проигрывание останавливается, то есть если залететь ноклипом под пол чтобы было видно куски то партикль дальше проиграется. Такая фигня - если источника партикла не видно, то его проигрывание останавливается, и такой статичный фонтачник остается.
Добавлено 10-12-2021 в 17:13:
// Don't update if the system is outside the player's PVS.
//if(!source || source->curstate.messagenum < messagenum)
// return true;
Если убрать код который останавливает апдейт системы частиц, если они вне поля зрения, то оно тоже не совсем фиксит проблему, партикль висит на месте где кусок улетел в нарнию, кстати в руках детонатор не зря, сатчелы тоже под полом: https://imgur.com/a/fCdmMyd
Отправлено Ku2zoff 10-12-2021 в 16:19:
Цитата:
Chyvachok писал:
source->curstate.messagenum < messagenum
Актуально только в сингле, кстати.
Отправлено Aynekko 10-12-2021 в 18:08:
Подскажите пожалуйста. Перенес TE_GUNSHOTDECAL на клиент. Код-то я сделал:
C++ Source Code:
6 | entityIndex = READ_SHORT(); |
7 | decalIndex = READ_BYTE(); |
8 | gEngfuncs.pEfxAPI->R_FireCustomDecal( decalIndex, entityIndex, 0, pos, 0, 1 ); |
А потом столкнулся с проблемой. На клиенте нет pfnDecalIndex. Что делать?
Добавлено 10-12-2021 в 21:08:
Что-то я так посмотрел, в ксаш-движке вообще не вижу R_FireCustomDecal. Она только r_efx.h упоминается. Похоже, вообще клиентские декали никак не сделать 
__________________
Мой мод на Xash
Отправлено Дядя Миша 10-12-2021 в 18:18:
Цитата:
Aynekko писал:
На клиенте нет pfnDecalIndex. Что делать?
ну вот в EfxAPI она есть. Оттуда вызывай.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Aynekko 10-12-2021 в 18:54:
Цитата:
Дядя Миша писал:
в EfxAPI она есть
Ах вот оно где запряталось. Все работает, спасибо. Только все равно я не могу понять, где вообще эта функция R_FireCustomDecal находится, если она натурально упоминается только в h файлах? Подменяется чем-то видимо…__________________
Мой мод на Xash
Отправлено Chyvachok 10-12-2021 в 20:17:
Ну и говно это Аврора.
Добавлено 10-12-2021 в 22:17:
Код из Спирита-Паранои не дописан толком, а из Ксаша попробуй утяни, там ведь рендер свой, тем кто шарит в програмировании да, проблем нет никаких, но тем кто нет, очень сложно. Не удивительно честно учитывая как она пашет, что никто не юзал ее для следов-снарядов кроме мода Alternative Way.
Она еще глючит начинает когда партиклей много спавнится, к примеру когда сразу много врагов гибаешь, они перестают исчезать и прочая дичь начинается, тоже самое с следом снарядов. Месага удаления тоже, она вообще не принималась пока я не пофиксил, но опять же - она резко удаляет партикл систему, то есть спрайты вместо того чтобы сами по себе растворится резко исчезают.
Отправлено [CFR] [email protected]@N 10-12-2021 в 21:06:
Chyvachok
В XDM погляди партеклсистему.. Она тпм годная и исходники открыты.
Отправлено Chyvachok 10-12-2021 в 21:29:
[CFR] [email protected]@N она добавлена уже, пусть и с более старой версии, но там немного другие функции. Аврора это всякий там дымок, или следы типа след снаряда, но работает она через зад, как оказалось. А фиксить честно пока не осилил, в КсашХТ лучше работает вроде, хотя опять же, надо тестить, но там рендер другой, надо шарить как код этого клиента устроен, чтобы портануть хотя бы.
Добавлено 10-12-2021 в 23:29:
У ХДМ-овской тоже есть недостатки, она вся захардкодена, любое изменение требует компиляции движка, не читает параметры как автора из текстовых файлов и нету никакого визуального редактора.
Отправлено Ku2zoff 10-12-2021 в 22:26:
Цитата:
Chyvachok писал:
Ну и говно это Аврора.
Она позволяет делать только то, что распыляется. Огонь, дым от огня, дым от попадания пуль в стенки, пар из трубы, след ракеты и проч. Ещё намертво привязана к энтитям-эмиттерам в оригинале.
Цитата:
Цитата:
Chyvachok писал:
она вся захардкодена
Эту систему нельзя рассматривать как скриптовую для мапперов. Это скорее замена pEfxAPI для кодеров, чтобы не упереться в лимит темпэнтить. Хочешь много возможностей - будь добр кодить. К сожалению, в последней версии 3.0.3.8 она обросла каким-то крутым кодом, что соответствует современным стандартам, но усложняет не только копипасту, но и отладку. Хотелось бы увидеть версию 3.0.4.0, но я так и не понял, какую загадку загадал Мастер. У него с версии 3.0.3.8 славная торадицыя - не выкладывать сорцы по человечески, а заниматься какой-то фигнёй.
Добавлено 11-12-2021 в 05:18:
Chyvachok если тебе нужна кровяка от гибсов, выкинь аврору и укради позаимствуй код Smoke Puff из паранойи. У PLut'а в BDef'е, как он писал, все партиклевые эффекты на нём основаны.
Добавлено 11-12-2021 в 05:26:
Для начала рекомендую сделать гибсы темпэнтитями. В HUD_AddEntity цеплять им партиклевый эффект, в HUD_TempEntUpdate ставить декали при коллизии и выключать партиклевый эффект, когда гибс сдохнет. Потом, когда всё будет отлажено, можно прикрепить эти эффекты к обычным серверным гибсам. Код из HUD_AddEntity перекочует в мессагу, а код из HUD_TempEntUpdate куда-нибудь в DrawTransparentTriangles. И то, необязательно делать второе. При смерти гибса достаточно отправить вторую мессагу.
Поделись спрайтами крови, если не жалко, или скажи где взял. У меня зачесались руки накодить то, что не получается у тебя. Хотя меня обычная кровь устраивает. Сижу дома с температурой, заняться нечем.
Отправлено Chyvachok 10-12-2021 в 23:11:
Цитата:
Ku2zoff писал:
Поделись спрайтами крови, если не жалко, или скажи где взял. У меня зачесались руки накодить то, что не получается у тебя. Хотя меня обычная кровь устраивает. Сижу дома с температурой, заняться нечем.
Сами aur файлы из Alternative Way взяты - они используют стандартный bloodspray.spr из папки valve. Думал это аврору не только для кровяки, но и для РПГ и энергопушек приспособить, но с ней возни и проблем столько.
Но если надо, могу из какого нибуть Ballistic Weapons спрайты вынуть.
Цитата:
Ku2zoff писал:
Chyvachok если тебе нужна кровяка от гибсов, выкинь аврору и укради позаимствуй код Smoke Puff из паранойи. У PLut'а в BDef'е, как он писал, все партиклевые эффекты на нём основаны.
Пробовал, след плазмы сделать, но пока не очень красиво получается на их основе.
Добавлено 11-12-2021 в 01:06:
Что-то такое наваял, но честно не очень нравится, не получается как у Plut чтобы красивые эффекты были.
code:
Эвент:
void EV_RocketTrailCallback ( struct tempent_s *ent, float frametime, float currenttime )
{
if ( currenttime < ent->entity.baseline.fuser1 )
return;
if ( ent->entity.origin == ent->entity.attachment[0] )
ent->die = gEngfuncs.GetClientTime();
else
VectorCopy ( ent->entity.origin, ent->entity.attachment[0] );
float puff_speed = 400, puff_size = 16, speed_side = 0;
VectorNormalize(ent->entity.angles); // there is surface normal actually
CObject *pObj = new CPlasmaTrailPart( ent->entity.origin, ent->entity.angles, 0.2, 1, puff_speed, puff_size, speed_side, "sprites/plasma_pistol_trail.spr", 1 );
g_objmanager.AddObject(pObj);
dlight_t *dl = gEngfuncs.pEfxAPI->CL_AllocDlight ( 0 );
VectorCopy ( ent->entity.origin, dl->origin );
dl->radius = 64; //128
dl->dark = true;
dl->die = gEngfuncs.GetClientTime() + 0.001; //Kill it right away
dl->color.r = 0;
dl->color.g = 180;
dl->color.b = 0;
}
Сам след.
CPlasmaTrailPart::CPlasmaTrailPart( vec3_t origin, vec3_t normal, float fLife, float fAlpha, float fVelocity, float fSize, float maxofs, char model [64], int iType, float r, float g, float b)
{
vec3_t up, right;
VectorClear(right);
VectorClear(up);
MakeUpRight(normal, up, right);
m_fAlpha = fAlpha;
m_fLife = fLife;
m_fr = r; m_fg = g; m_fb = b;
spr = SPR_Load(model);
m_iType = iType;
VectorCopy(origin, PuffOrigin);
PuffSize = fSize;
VectorClear(PuffVelocity);
VectorMA(PuffVelocity, fVelocity, normal, PuffVelocity);
VectorMA(PuffVelocity, gEngfuncs.pfnRandomFloat(-maxofs, maxofs), right, PuffVelocity);
VectorMA(PuffVelocity, gEngfuncs.pfnRandomFloat(-maxofs, maxofs), up, PuffVelocity);
}
int CPlasmaTrailPart::Draw(float time, float frametime)
{
float frac = (time - birthTime) / m_fLife;
if (frac > 1)
return 1; // delete object
if (!spr)
{
gEngfuncs.Con_Printf("error: cant load sprite\n");
return 1;
}
CalcViewMatrix();
struct model_s *pModel = (struct model_s *)gEngfuncs.GetSpritePointer( spr );
int frame = (int)(pModel->numframes * frac);
gEngfuncs.pTriAPI->RenderMode(kRenderTransAdd);
gEngfuncs.pTriAPI->SpriteTexture( pModel, frame );
float alpha = m_fAlpha * (1 - frac);
gEngfuncs.pTriAPI->Color4f( m_fr, m_fg, m_fb, alpha );
gEngfuncs.pTriAPI->CullFace( TRI_NONE );
gEngfuncs.pTriAPI->Begin( TRI_QUADS );
float size = PuffSize * (1 - frac);
VectorMA(PuffOrigin, frametime, PuffVelocity, PuffOrigin);
g_viewMatrix[0][3] = PuffOrigin[0]; // write origin to matrix
g_viewMatrix[1][3] = PuffOrigin[1];
g_viewMatrix[2][3] = PuffOrigin[2];
gEngfuncs.pTriAPI->TexCoord2f( 0, 0 );
SetPoint(0, size ,size, g_viewMatrix);
gEngfuncs.pTriAPI->TexCoord2f( 0, 1 );
SetPoint(0, size ,-size, g_viewMatrix);
gEngfuncs.pTriAPI->TexCoord2f( 1, 1 );
SetPoint(0, -size ,-size, g_viewMatrix);
gEngfuncs.pTriAPI->TexCoord2f( 1, 0 );
SetPoint(0, -size ,size, g_viewMatrix);
gEngfuncs.pTriAPI->End();
gEngfuncs.pTriAPI->RenderMode(kRenderNormal);
return 0;
}
Добавлено 11-12-2021 в 01:11:
С кусками интересно бы сделать их чисто клиентские, они все равно на игру не влияют никак, и Stycky Gib-ы тоже бы как-то портануть на клиент, это которые к стенам липнут, я им даже модель улучшил. Вот кстати мой ретекстур Стики Гибов: https://files.gamebanana.com/bitpit/stickygib.rar
Отправлено Ku2zoff 10-12-2021 в 23:35:
Цитата:
Chyvachok писал:
С кусками интересно бы сделать их чисто клиентские
Да, но есть проблемка. Их надо как-то фильтровать, чтобы знать, что это именно гибсы. Самый простой вариант - по модели. Отправляем на клиент TE_BREAKMODEL с моделькой мясных кусков, отлавливаем темпэнтитю в HUD_AddEntity по названию модели, ставим ей новый флаг FTENT_GIB, например (флагов 21, можно добавить свои), а дальше - вперёд и с песней в HUD_TempEntUpdate рисовать декали при коллизии с бсп.
Цитата:
Chyvachok писал:
пока не очень красиво получается на их основе
Надо поиграться с параметрами, чтобы шлейф из спрайтов вытягивался в линию. Я уже сделал новый класс CBloodTrail со спрайтом bloodspray.spr, пытаюсь научить его распыляться как аврору. По задумке сразу все спрайты рисуются и разлетаются, а нам надо рисовать массив по очереди. И как только последний достигнет нужного размера, "убивать" его, и создавать новый, маленький, в точке отсчёта.
Цитата:
Chyvachok писал:
Stycky Gib-ы тоже бы как-то портануть на клиент
Наверное можно сделать так, как я предложил, с тем лишь отличием, что при первом коллайде у модели занулиться скорость, и она "прилипнет" к стене.
Лучше куски всё-таки делать на сервере, потому что от клиентских не будут сохраняться декали. У меня уже есть спрайтовые декали, которые пишутся в сейв, так что я бы мог это приспособить.
Пропробую накодить эту кровь от кусков, а потом надо заняться заменой темпэнтить на элементы RenderSystem из XDM. Она умеет почти во всё: искры, круги, эффекты типа env_funnel и проч.
Отправлено Дядя Миша 11-12-2021 в 07:57:
Цитата:
Chyvachok писал:
Она еще глючит начинает когда партиклей много спавнится, к примеру когда сразу много врагов гибаешь, они перестают исчезать и прочая дичь начинается, тоже самое с следом снарядов
Самая главная беда авроры - там почему-то Лаури не обнулил переменные.
Вот её и колбасит. Ну в ксаше, я естественно, это сделал.Цитата:
Chyvachok писал:
в КсашХТ лучше работает вроде, хотя опять же, надо тестить, но там рендер другой, надо шарить как код этого клиента устроен
Аврора в ксаш-моде специально оставлена совместимой с HL. Она ничего не затрагивает из рендерера ксаш-мода. Её можно брать целиком и копипастить в халфу.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'