Страницы (2): « 1 [2] Показать все 3892 сообщений этой темы на одной странице |
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)
Значится, я рисую у энтити их обьем таким вот образом
https://github.com/SNMetamorph/gold...report.cpp#L114
Проблема в том, что у func_tank питч инвертированный получается, хотя у всех остальных энтити всё выглядит нормально и питч такой как надо. Как это решить?
А ещё я заметил, что у некоторых энтити их ориджин находится как бы в центре хулла, а у других он находится в самом низу хулла. Как определить где находится центр для какой-то конкретной энтити? Есть флаг некий для этого?
__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord
Написал такую штуку и столкнулся с тем что в конце при выводе через printf оба значения по нулям.
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 ); |
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 ); |
void GetAngleScaler( float &scaler, float &scaler1 ) |
__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord
SNMetamorph он хочет закрывающую скобку перед символом ссылки
Crystallize
Так это сишный файл, наверно. А в сях только указатели и нету неко ких ссылок.
nemyax а, ну да сишный. Но в чём проблема что оно не работает через простые флоаты?
Причём тут простые флоаты. Тебе надо как-то вернуть значения.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Нужно просто вот так переписать:
1 | void GetAngleScaler( float *out_scaler, float *out_scaler1 ) |
2 | { |
3 | float scaler = *out_scaler; |
4 | float scaler1 = *out_scaler1; |
5 | /* |
6 | оригинальное тело твоей функции |
7 | */ |
8 | *out_scaler = scaler; |
9 | *out_scaler1 = scaler1; |
10 | } |
GetAngleScaler( &scaler, &scaler1 ); |
Спасибо всем
Стоит ли в пределах одной комнаты, ну или одного открытого места, объединять кучу func_illusionary или wall в одну энтитю? Если у них свойства совпадают.
Я так понимаю, что один иллюженари/волл считается как "модель" и занимает edict, то лучше делать все, скажем, перила одним func_wall и это будет считаться как один edict? Или func_wall, состоящий из нескольких брашей, все равно как-то разбивается движком?
__________________
Мой мод на Xash
Можно детайлами делать, у детайлов есть настройка zhlt_noclip 1
Но конечно если это стёкла, то не получится.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Aynekko если для таких брашей не нужны рендермоды, то лучше их делать детайлами. В случае с перилами или стёклами - func_wall. Объединять их в одну энтитю можно, но с оговоркой. Если у тебя, грубо говоря, два func_wall в виде букв "L" или "Г", и расположены они так, что один занимает угол напротив другого по диагонали, то если объединить их в одну энтить - пушабли через пустое пространство между ними не катаются. Сталкивался с таким. Возможно, что и монстры могут не ходить.
__________________
Мой мод на Xash
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
Да, в компиляторх тоже лимит на 1024 модели, их тоже пересобрать бы надо.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я сейчас поменял MAX_MAP_MODELS в параноевских компиляторах на 2048. Перекомпилил все p2, только вместо p2rad взял hlrad (который в параноевском сдк). Результат остался тот же. p2rad у меня не хочет компилится - у меня шестая визуалка, ругается на
ALIGN16 byte block[64]; |
ALIGN16 byte outBlock[16]; |
__________________
Мой мод на Xash
__________________
Мой мод на Xash
Aynekko ты используешь повертексное освещение для env_static ?
Добавлено 23-04-2021 в 20:06:
Фонарные столбы это же модельки?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
Ну неплохо, мне нравится.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Раз нравится, то вот еще скрин скину. Опять же все скалы моделями накидал (так проще и быстрее, и выглядит имхо лучше). Модели не мои - портировал из NFS Payback
Собственно больше скринов есть по ссылке в подписи, на моддб.
__________________
Мой мод на Xash
Есть такой баг в халфе, который раздражает - когда идешь по самому краю браша, начинает проигрываться звук ходьбы по-умолчанию - CHAR_TEX_CONCRETE. К примеру если идти по тонкому деревянному брусу, его очень легко словить. Шерстил код, смог добраться только до PM_TraceTexture в самом ксаше, где дальше идет PM_TraceSurface. А тут уже тупик, ибо ничего непонятно (лично мне). Понял я только одно, путем алертов в консоль, что идет трасса ровно из центра игрока вниз. Поэтому ничего и не находится под игроком.
Может кто-нибудь фиксил это?
__________________
Мой мод на Xash
Может быть делать четыре-пять трасс. Одна по центру и 4 по углам ббокса.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Из коллизий никак нельзя получить материал пола? Кидание трассы для звука шагов звучит как забивание гвоздей микроскопом.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В общем все получилось. Сделал проверку сначала центральным трейсом - если там fraction 1 (что случается только на краях браша), то включаются 4 дополнительных трейса по углам хулла. Все сделал внутри PM_CategorizeTextureType. Работает прям как в сорсе, что и хотел.
__________________
Мой мод на Xash
В КС 1.6 есть трюк, который довольно сложно исполнить: можно прыгнуть с просто невероятной высоты на краешек браша и не потерять ХП. Также на старых версиях, если поставить бомбу и сидеть неподалеку на стыке текстур и стрелять в них, то после твоей смерти от взрыва, на следующем раунде ты получишь порядка 7К баксов, чего хватает на авапу, фулл армор и раскид. Уже на втором раунде))
__________________
Killing Floor: Horzine Outbreak
Можно ли как-то визуализировать util_traceline и tracehull? Чтобы видно было, куда и насколько идет трейс. С линией еще как-то обхожусь алертами, а с хуллом как определять?
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
Что-то мне гугол не может дать внятного ответа, видимо за давностью лет. Подскажите, кто знает, порядок выхода версий HLSDK. Насколько я понял, сначала была версия под древний движок, несовместимая с современным. А потом сразу, внезапно и резко, как понос, появилась версия с новыми интерфейсами, вгуёвыми менюшками, пердиктингом и прочими радостями жызни. И она три раза патчилась до 2002 или 2003 года. А потом 10 лет была тишина, пока валвэ не решили забубенить собственную консоль на линуксе:
SDK 1.0
SDK 2.0
SDK 2.1
SDK 2.2
SDK 2.3
SDK 2.4 (2.3 с поддержкой линукса и макоси).
Возник закономерный вопрос, а не было ли до версии 2.0 чего-то промежуточного без клиентских пушек, но совместимого с обновлённым движком?
Нет, не было. Оригинальную версию 1.0 сейчас вообще найти невозможно, то есть - это восстановленные сорцы из HL SDK 2.0 Full.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Подкиньте компилятор для первой ХЛ который может делать тени сквозь браши с прозрачными текстурами(тень лестницы от браша с текстурой лестницы например)
по-моему любой из современных должен уметь
__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))
перехожу на другой двиг
Есть ли способ повысить разрешение лайтмапы локально на каком то участке кроме как скейлить текстуры вниз?
Есть, но это только под Ксашем работает.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Подскажите, никак не могу понять. Как вывести число через UTIL_ShowMessage? Скажем у меня есть float четотам = 1.015. Как ее вывести на экран именно через message? И чтобы с подписью "такое-то равно 1.015".
__________________
Мой мод на Xash
Aynekko:
char msg[64]; |
sprintf(msg, "Float is: %f", flFloat); |
UTIL_ShowMessage(msg, (CBaseEntity*)pPlayer); |
char msg[64]; |
sprintf(msg, "Float is: %f", flFloat); |
UTIL_ShowMessage(msg, (CBaseEntity*)pPlayer); |
__________________
Мой мод на Xash
nekonomicon спасибо за разъяснение
__________________
Мой мод на Xash
Народ, вожусь с trigger_push, прошерстил инет и даже нашел какие-то концы на этом форуме про FL_BASEVELOCITY, но так ни до чего и не додумался. Там что-то с самой физикой игры.
Суть проблемы - есть подводный туннель, который полностью внутри func_water, а внутри туннеля trigger_push. Пуш не толкает. Если включить и выключить noclip, то толкнет один раз и замолкает.
Припоминаю, что в хл2 игрока толкало под водой. Как это исправить, или может есть какие идеи, как еще это реализовать?
На одном сайте была идея поставить кучу мелких пушей друг за другом, чтобы кидало из одного в другой. Но это ж бред…хоть и может сработать.
__________________
Мой мод на Xash
Aynekko может флаг Once Only стоит?
Добавлено 22-05-2021 в 03:29:
Алсо, триггер должен быть растянут на весь туннель
__________________
-Brain is dead-
__________________
Мой мод на Xash
Там поидее надо не триггер пуш, а несолидный конвейер, чёб игрока извнутри тащило.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
pOther->SetBaseVelocity( vecPush ); |
pevToucher->flags |= FL_BASEVELOCITY; |
vecPush *= 0.01; |
pOther->SetBaseVelocity( vecPush ); |
// pevToucher->flags |= FL_BASEVELOCITY; |
__________________
Мой мод на Xash
Убрал зависимость от фпс, но все равно пуш ведет себя немного странно (ну это немудрено). Если поставить флаг FL_BASEVELOCITY, то получается вообще треш.
Пока получилось так, сделал спаунфлаг, и тестирую два пуша рядом. Снизу оригинал, сверху мой огород. Шестерка подобрана эмпирически.
1 | else |
2 | { |
3 | if( pev->spawnflags & EXPERIMENTAL ) |
4 | { |
5 | // Push field, transfer to base velocity |
6 | Vector vecPush = (pev->speed * m_vecPushDir) * 6 * gpGlobals->frametime; |
7 |
8 | // if ( pevToucher->flags & FL_BASEVELOCITY ) |
9 | vecPush = vecPush + pOther->GetBaseVelocity(); |
10 |
11 | if( vecPush.z > 0 && FBitSet( pOther->pev->flags, FL_ONGROUND )) |
12 | { |
13 | pOther->pev->flags &= ~FL_ONGROUND; |
14 | Vector origin = pOther->GetAbsOrigin(); |
15 | origin.z += 1.0f; |
16 | pOther->SetAbsOrigin( origin ); |
17 | } |
18 |
19 | if( pOther->m_iActorType == ACTOR_DYNAMIC ) |
20 | WorldPhysic->AddForce( pOther, vecPush * (1.0f / gpGlobals->frametime) * 0.5f ); |
21 | pOther->SetBaseVelocity( vecPush ); |
22 | // pevToucher->flags |= FL_BASEVELOCITY; |
23 | } |
24 | else |
25 | { |
26 | // Push field, transfer to base velocity |
27 | Vector vecPush = (pev->speed * m_vecPushDir); |
28 |
29 | if ( pevToucher->flags & FL_BASEVELOCITY ) |
30 | vecPush = vecPush + pOther->GetBaseVelocity(); |
31 |
32 | if( vecPush.z > 0 && FBitSet( pOther->pev->flags, FL_ONGROUND )) |
33 | { |
34 | pOther->pev->flags &= ~FL_ONGROUND; |
35 | Vector origin = pOther->GetAbsOrigin(); |
36 | origin.z += 1.0f; |
37 | pOther->SetAbsOrigin( origin ); |
38 | } |
39 |
40 | if( pOther->m_iActorType == ACTOR_DYNAMIC ) |
41 | WorldPhysic->AddForce( pOther, vecPush * (1.0f / gpGlobals->frametime) * 0.5f ); |
42 | pOther->SetBaseVelocity( vecPush ); |
43 | pevToucher->flags |= FL_BASEVELOCITY; |
44 | } |
45 | } |
__________________
Мой мод на Xash
Поставлена задача: автоматически рассчитывать расстояние, на которое камера приближается к монитору. Пока что юзаю две энтити - сам монитор и точку обзора, куда перемещается pparams->vieworg. В планах строить вектор, перпендикулярный поверхности, из центра браша, рассчитывать расстояние так, чтобы монитор умещался в экран по одной из осей впритык. Нужно как-то сделать поправку на FOV. Подскажите, есть ли какое-то решение, не охота городить огород.
FOV 100:
FOV 90:
Добавлено 31-05-2021 в 01:27:
Размер VGUI-меню подгоняется под размер брашевого экрана (привет из тутора про рамки выделения). И все элементы меню динамически меняют своё положение и размер. В теории, какую бы форму не имел монитор, меню в нём спокойно уместится. Тестировал на разных разрешениях, начиная от 640х480. Всё помещается. Но вот с FOV проблема. У меня по дефолту стоит 100 для моего разрешения экрана. Для обычных не широкоформатных мониторов годится 90, а если 1080p и выше, то я думаю, что подойдёт значение 105-110 и т.д. Если получится это победить, то дело останется за малым - дописать парсер текстовиков для мониторов (да, количество кнопок, менюшек, прочего, а также команды и тексты я планирую грузить из файлов). Команды вообще делаются просто, находим активный монитор, который в данный момент юзает игрок, и в client command отправляем что-то типа "monitor_use menu1 param1". Ну а энтить монитора уже разруливает параметры и управляет другими энтитями. Я очень рад, что нашёл альтернативу ксашевским OpenGL-мониторам. Картинка видеонаблюдения на скринах реалтаймовая. И оттуда даже звук есть, в общем, каеф.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Подскажите по такому нубскому вопросу. Ставлю звук:
EMIT_SOUND_DYN(ENT(pev), CHAN_STATIC, "sound.wav", 0.25, 2.0, SND_CHANGE_PITCH | SND_CHANGE_VOL, 100); |
__________________
Мой мод на Xash
gEngfuncs.pfnPlaySoundByName |
gEngfuncs.pfnPlaySoundByIndex |
gEngfuncs.pfnPlaySoundByNameAtLocation |
gEngfuncs.pfnPlaySoundVoiceByName |
gEngfuncs.pfnPlaySoundByNameAtPitch |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Спасибо всем за помощь.
__________________
Мой мод на Xash
float cylstep = (2.0f*PitchWing) - (2.0f*AtomicWing) / 18.0f; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Можно ли узнать view origin игрока на сервере? Мне нужно сделать там проверку с использованием именно view оригина, а не самого оригина игрока. Связано это с триггер_камерой. А она делает SET_VIEW и все. Может как-то можно достать с клиента это?
Добавлено 04-08-2021 в 13:53:
Пробовал делать копию оригина в vuser4, а он почему-то все равно всегда нулевой. Я по ксашмоду прошелся, он там где-то используется. Можно конечно воткнуть еще один entvars но это уже крайние меры
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну просто на клиенте есть vieworg, который отвечает именно за камеру, и origin отдельно. Поэтому я так выразился.
Мне нужно на сервере сделать проверку расстояния между энтитей и камерой игрока. Вот я не могу оригин этой самой камеры игрока достать.
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Спасибо. Я примерно так и сделал, но не в сетвью, а прямо в камере. Копирую в игрока оригин и имя камеры.
Параллельно получился еще и фикс - камера теперь проверяет, какое имя камеры у игрока записано (когда она работает), если не совпало - выключается. А раньше как было - можно активировать одну камеру, затем вторую, а затем выключить вторую. А первая как think'ала, так и будет think'ать! Вот так вот
В общем, сделал что хотел и даже больше.
__________________
Мой мод на Xash
Ох, у меня к этим вьюриджинам и вьюанглсам давняя нелюбовь. Вроде бы в коде всё прозрачно, а на выходе имеем не то, что хотели. Но я всё-таки разобрался. Даже написал особую энтить, которая захватывает взгляд игрока. Для катсцен от первого лица, чтобы игрок смотрел туда, куда задумано. Осталось добавить этой энтите функционал, чтобы она захватывала управление и вела игрока по патч_корнерам, и будет прямо как в современных играх. Побочкой появился код для заглядывания в мониторы. Если буду делать транспорт (есть пара мыслей где его применить), то это же будет кодом входа/выхода из него.
__________________
Мой мод на Xash
На ксаше. В общем у меня стоит punchangle из сорса, который вычисляется в playermove.
Ситуация - создаю дедикатед сервер. Потом подключаюсь с двух компов - на одном более 200 фпс, на другом 30.
Когда заходит один клиент, любой - панч ведет себя нормально.
Если у обоих клиентов одинаковый фпс - то у обоих все нормально.
Но, если у одного клиента 30 фпс, а у другого 200, то у первого панч ооочень медленный, а у другого наоборот ускоренный. Фпс у обоих клиентов должен быть полностью одинаков, чтобы все нормально работало. Как это побороть?
Код панча:
1 | void PM_DropPunchAngle ( Vector &punchangle ) |
2 | { |
3 | float damping; |
4 | float springForceMagnitude; |
5 |
6 | if ( punchangle.Length() > 0.001 || pmove->vuser3.Length() > 0.001 ) |
7 | { |
8 | punchangle += pmove->vuser3 * pmove->frametime; |
9 | damping = 1.0f - (PUNCH_DAMPING * pmove->frametime); |
10 |
11 | if ( damping < 0.0f ) |
12 | damping = 0.0f; |
13 |
14 | pmove->vuser3 *= damping; |
15 |
16 | // torsional spring |
17 | // UNDONE: Per-axis spring constant? |
18 | springForceMagnitude = PUNCH_SPRING_CONSTANT * pmove->frametime; |
19 | springForceMagnitude = bound( 0, springForceMagnitude, 2 ); |
20 |
21 | pmove->vuser3 += punchangle * -springForceMagnitude; |
22 |
23 | // don't wrap around |
24 | punchangle[0] = bound( -89, punchangle[0], 89 ); |
25 | punchangle[1] = bound( -179, punchangle[1], 179 ); |
26 | punchangle[2] = bound( -89, punchangle[2], 89 ); |
27 | } |
28 | } |
__________________
Мой мод на Xash
у меня DJVU или ты уже задавал этот вопрос?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
1 | void CBasePlayer::PunchAngle(void) |
2 | { |
3 | float PUNCH_DAMPING = 9.0f; // bigger number makes the response more damped, smaller is less damped |
4 | // currently the system will overshoot, with larger damping values it won't |
5 | float PUNCH_SPRING_CONSTANT = 65.0f; // bigger number increases the speed at which the view corrects |
6 |
7 | float damping; |
8 | float springForceMagnitude; |
9 |
10 | if (pev->punchangle.Length() > 0.001 || pev->vuser3.Length() > 0.001) |
11 | { |
12 | pev->punchangle += pev->vuser3 * gpGlobals->frametime; |
13 | damping = 1.0f - (PUNCH_DAMPING * gpGlobals->frametime); |
14 |
15 | if (damping < 0.0f) |
16 | damping = 0.0f; |
17 |
18 | pev->vuser3 *= damping; |
19 |
20 | // torsional spring |
21 | // UNDONE: Per-axis spring constant? |
22 | springForceMagnitude = PUNCH_SPRING_CONSTANT * gpGlobals->frametime; |
23 | springForceMagnitude = bound(0, springForceMagnitude, 2); |
24 |
25 | pev->vuser3 += pev->punchangle * -springForceMagnitude; |
26 |
27 | // don't wrap around |
28 | pev->punchangle[0] = bound(-89, pev->punchangle[0], 89); |
29 | pev->punchangle[1] = bound(-179, pev->punchangle[1], 179); |
30 | pev->punchangle[2] = bound(-89, pev->punchangle[2], 89); |
31 | } |
32 | } |
PunchAngle(); |
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
Этож по локалке. А так будут лаги, скорее всего.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Не могу разобраться с параметром pparams->spectator на клиенте. Откуда он берется. Вот к примеру pmove->spectator говорит, что он активен, когда я переключаюсь в спектатора. В это же время в CalcRefDef pparams->spectator не активируется. Из-за этого я не могу применить некоторые настройки.
И другой вопрос. Как мне в этом refdef достать параметры клиента, вроде iuser1 и всякое такое прочее? Не могу никак найти.
__________________
Мой мод на Xash
gEngfuncs.GetEntityByIndex(player_index)->curstate.iuser1 |
__________________
Мой мод на Xash
я кстати тоже спектатором интересуюсь пытаюсь добавить фишку как в dmc но все безуспешно. Как же все таки добавить эту фишку где её найти ? работает он как то так когда мы спавнимся то игрока самого нет он с пектаторе но когда мы нажимаем ок в меню то игрок спавниться.
__________________
илья
[QUOTE]Ku2zoff писал:
[B]Не в спектаторе. Игрок невидим, несолиден, невосприимчив к урону, не может двигаться. Только вертеть головой.
этот эффект я обнаружил в player.cpp в спавне игрока в этом ты прав.
неплохо бы спавн функцию игрока оттуда скопипастить в hl и будет как в dmc.
__________________
илья
__________________
Мой мод на Xash
ладно лучше не буду делать. это для тебя так легко для меня это целая эпопея.
__________________
илья
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша не пугают, а мотивируют!
илья2 если тебе что-то не даётся, оставь на время, и делай что попроще. В самом начале своей моддерской деятельности я занимался клонированием монстров и пушек. Сейчас я могу сделать монстра наследованием, да и пушку тоже, да и вообще, если заморочусь, могу почти с нуля написать. А тогда клонировал весь код. Пробуй делать что попроще и в дебри не лезь. Но первый спавн из DMC всё-таки скопипасти. Ты же уже нашёл, что там всё в спавне игрока. Вот и переноси в халфу всё, что связано с условием m_bHadFirstSpawn.
Скопипастил в Фитцквейк из Спирита функцию float AngleBetweenVectors().
Сначала положил её в матчлибу, но при вызове из cl_input.c она давала бред типа 1239768.00000 без ошибок и ворнингов.
Тогда положил её в тот же cl_input.c и она стала нормально передавать значение, но возникла другая проблема, когда вектора переданные ей в качестве параметра, после нормализации в дочерней функции оказываются нормализованными и в материнской. Это что ваще.
VectorNormalize действует in place.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
хочу отрисовать спрайт на весь экран
как это сделать?
Re: хочу отрисовать спрайт на весь экран
__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))
перехожу на другой двиг
JPEG
"Все!!! Точнее с этим файлом!!!
Теперь идем в tri.cpp
и ищем там функцию"
Там на сайте не дописано какая функция
Добавлено 24-08-2021 в 07:16:
JPEG
+ выдает ошибку
hud_redraw.obj : error LNK2001: unresolved external symbol "void __cdecl HUD_DrawNV(void)" (?HUD_DrawNV@@YAXXZ)
например, так https://csm.dev/threads/hl1-blood-overlay.18688/
кстати хороший тутор можно наконец то классный спецэффект аптечки из mmod сделать
__________________
илья
Подскажите. Есть класс CHudAmmo, где в public есть int ID оружия. Я его занес туда, т.к. оно мне нужно. Меняется оно так - iId = READ_CHAR(). Оно меняется - проверил. В другом cpp файле я хочу это значение использовать.
Сделал код:
CHudAmmo AmmoData; |
int WeaponID; |
WeaponID = AmmoData.iId; |
__________________
Мой мод на Xash
Ну в классе-то оно само-по себе не возьмётся.
gHUD.m_Ammo.iId
вот отсюда его бери.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
CHudAmmo AmmoData; |
int WeaponID; |
WeaponID = AmmoData.iId; |
__________________
Мой мод на Xash
я так понял здесь кто то уже говорил про пропы, раз поиск по форому выдал эту тему, не подскажите на какой странице был разговор про пропы?
hgrunt_2020 где-то далеко, я думаю. Долго искать. Нужны пропы студиомоделями? В ксашмоде есть env_static, используй их.
__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))
перехожу на другой двиг
JPEG я нашел этот проп, но при компилации вылазит это:
phys_prop.cpp(126) : error C2593: 'operator !' is ambiguous
phys_prop.cpp(132) : error C2593: 'operator !' is ambiguous
phys_prop.cpp(611) : error C2593: 'operator &&' is ambiguous
phys_prop.cpp(823) : error C2593: 'operator !' is ambiguous
phys_prop.cpp(962) : error C2065: 'mins' : undeclared identifier
phys_prop.cpp(962) : error C2065: 'maxs' : undeclared identifier
phys_prop.cpp(1112) : error C2593: 'operator !' is ambiguous
и че делать незнаю
немогу заставить энтитю реагировать на игрока, я хочу что бы игрок мог толкать энтитю своим телом
Остался ли у кого этот архив? https://hlfx.ru/forum/showthread.php?s=&threadid=4511
Я даже не могу найти ссылку туда, где он лежал и название файла. Подскажите, может быть ещё у кого-то завалялись сорцы ксаша (движка) версии 0.68-0.72, ещё до совместимости с голдсорсом.
Ku2zoff на кой они тебе?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша спортивный интерес. Ну и ещё система частиц из старого ксаша. Клиентскую часть версии 0.72 я нашёл. А вот движка нету, он тогда ещё не был опенсорсным, и в комплекте с сдк не поставлялся. Думаю, что в том самом большом архиве эти сорцы должны быть.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
У меня лежит какой-то xash22.06.07_09.05.10.rar (792 МБ) сохранен 26 июня 2013
Decay по-моему, он самый. Билды ксашей с 22.06.07 по 09.05.10. Можешь выложить?
https://drive.google.com/file/d/1H8...iew?usp=sharing
Как можно на сервере управлять временем (типа сделать замедление и вернуть обратно)? Я конечно могу сделать через SERVER_COMMAND, но подумал, что лучше спросить - может есть другой, менее костыльный способ?
__________________
Мой мод на Xash
Замедление времени никогда не было элементом геймплея в ксаше.
Нет таких способов.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Aynekko а как в моде про Макспейна сделано?
__________________
Мой мод на Xash
в квейке была команда host_timescale замедляющая время, в первых версиях хл тоже вроде как работала, мб как-то можно вернуть
__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))
перехожу на другой двиг
Очень хитрая формула:
framerate = 1.0 / fps
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
это не для меня, для друга
можно ли как то убрать определенный тип урона при нажатии примари аттак?
ну или имунитет сделать
Кто-нибудь может провести ликбез, как устроено время в ксаше/хл, где что тикает, как увязываются клиент с сервером, какие значения используются для интерполяции и т.д.?
Не могу найти рассказ ДМ про то что BSP не беспокоится о ликах и их проверку ввели как оптимизацию, может помнит кто где он это писал?
Re: это не для меня, для друга
if ((pev->buttons & IN_ATTACK) && (bitsDamageType & DMG_ТИПУРОНА)) |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
дратути, я с проблемой
хотел сделать 8 визуалов для барни, но при количестве бодигрупп больше 3 ксаш крашится с отсылкой на клиент и gl_ref
КАК ПОЧИНИТЬ HOLSTER?
так и не понял как это сделать
hgrunt_2020 вот так. По этому тутору всё прекрасно делается. Рекомендую отключить клиентские пушки и завести кастомную мессагу вместо SVC_WEAPONANIM, чтобы нормально работало по сети в режиме наблюдателя.
опять я, и опять с вопросом
хотел чтоб в место заряженного выстрела гаусс сам пополнял боезапас, провозился долго, но чет толи я дурак, толи лыжи не едут, анимация spinup перестала проигрыватся, а spin проигрывается но после отпускания кнопки
вот что намудрил
void CGauss::SecondaryAttack()
{
if ( charge == 0 )
{
// spin up
SendWeaponAnim( GAUSS_SPINUP );
charge = 1;
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.5;
m_pPlayer->m_flStartCharge = gpGlobals->time;
m_pPlayer->m_flAmmoStartCharge = UTIL_WeaponTimeBase() + GetFullChargeTime();
}
else if (charge == 1)
{
if (m_flTimeWeaponIdle < UTIL_WeaponTimeBase())
{
SendWeaponAnim( GAUSS_SPIN );
}
}
else
{
if ( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] >= 100 )
{
m_fInAttack = 0;
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 1.0;
m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 1;
return;
}
if ( m_pPlayer->m_flStartCharge < gpGlobals->time - 10 )
{
m_fInAttack = 0;
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 1.0;
m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 1.0;
SendWeaponAnim( GAUSS_IDLE );
// Player may have been killed and this weapon dropped, don't execute any more code after this!
return;
}
}
if( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] >= URANIUM_MAX_CARRY )
return;
while( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] < URANIUM_MAX_CARRY && m_flRechargeTime < gpGlobals->time )
{
m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]++;
m_flRechargeTime += 0.5f;
}
}
Думаю, многие замечали, что в какие-то моменты анимация деплоя оружия перестаёт играть при быстрой смене между пушками (на Q) - оружие мгновенно отображается на экране. Проявляется это как в сетевой, так и в одиночной игре. Кто-нибудь копал в эту сторону? Можно ли это стабильно побороть?
__________________
I'm on github
I'm on opendesktop.org
Пытался сделать улучшение для пушек , но чет пошло не так
Если в общем то хотел сделать итем при подборе которого на пушке менялась бы бодигруппа магазина на увеличенный и менялось бы максимальное колличество патронов, но при подборе итема ничего не происходит. Просто в пустую исчезает итем и все
код итема
1 | class CItem74drum : public CItem |
2 | { |
3 | void Spawn( void ) |
4 | { |
5 | Precache( ); |
6 | SET_MODEL(ENT(pev), "models/w_74drum.mdl"); |
7 | CItem::Spawn( ); |
8 | } |
9 | void Precache( void ) |
10 | { |
11 | PRECACHE_MODEL ("models/w_74drum.mdl"); |
12 | } |
13 | BOOL MyTouch( CBasePlayer *pPlayer ) |
14 | { |
15 | if (m_iDrum == 0) |
16 | { |
17 | m_iDrum = 1; |
18 | } |
19 | return FALSE; |
20 | } |
21 | }; |
__________________
И главное, Артём, помни: не ешь желтый снег!
hgrunt_2020 так тебе надо заводить переменные в коде пушки или игрока, а не в коде итема. В общих чертах:
1 | BOOL MyTouch( CBasePlayer *pPlayer ) |
2 | { |
3 | if (pPlayer->m_iDrum == 0) |
4 | { |
5 | if (pPlayer->pev->weapons & (1<<WEAPON_MYWEAPON)) |
6 | { |
7 | pPlayer->m_iDrum = 1; |
8 | } |
9 | } |
10 | return FALSE; |
11 | } |
12 |
13 | CMyWeapon::ItemPostFrame |
14 | { |
15 | if (m_pPlayer->m_iDrum == 1) |
16 | pev->body = нужная_бодигруппа; |
17 | } |
1 | BOOL MyTouch( CBasePlayer *pPlayer ) |
2 | { |
3 | if (pPlayer->pev->weapons & (1<<WEAPON_MYWEAPON)) |
4 | { |
5 | CMyWeapon *pGun = NULL; |
6 |
7 | for ( i = 0 ; i < MAX_ITEM_TYPES ; i++ ) |
8 | { |
9 | if ( pPlayer->m_rgpPlayerItems[ i ] ) |
10 | { |
11 | CBasePlayerItem *pPlayerItem = pPlayer->m_rgpPlayerItems[ i ]; |
12 | while ( pPlayerItem ) |
13 | { |
14 | pGun = (CMyWeapon*)(pPlayerItem->GetWeaponPtr()); |
15 | } |
16 | } |
17 | } |
18 | if (pGun && pGun->m_iDrum == 0) |
19 | { |
20 | pGun->m_iDrum = 1; |
21 | } |
22 | } |
23 | return FALSE; |
24 | } |
Ku2zoff
items.cpp(361) : error C2065: 'i' : undeclared identifier
што с этим делать?
Добавлено 30-09-2021 в 14:58:
Ku2zoff
ты в for ( i = 0 ; i < MAX_ITEM_TYPES ; i++ ) забыл int, вот и выдовало у меня ошибку
__________________
И главное, Артём, помни: не ешь желтый снег!
Ku2zoff
здесь надо писать номер и ID пушки?
ибо у меня при подборе вылетает
__________________
И главное, Артём, помни: не ешь желтый снег!
Вместо WEAPON_MYWEAPON пишешь, например, WEAPON_MP5. Возможно, указатель получается невалидный. Поищи в коде, где из m_rgpPlayerItems ищутся CBasePlayerItem и сравнивай, в чём разница.
Тема с апгрейдами интересная, к примеру еще как вариант интересно бы сделать акимбо-пушки, но чтобы это было не отдельное оружие которое дается при подборе, а было апгрейдом существующей, а то без тутора Дяди Миши всего 32 слота на пушки, хотя я вроде смог осилить более-менее нормальные акимбо пушки. Из мелочей еще надо сделать какую-то анимацию применения подбора, просто холстер и деплой с новой боди группой если пушки в руках и игрока.
Кстати для акимбо полезная была бы фишка это блендинг анимаций, чтобы при стрельбе из левого пистолета не обрывалась анимация правого, и если правый не стреляет, то он проигрывал idle анимацию вне зависимости от левого пистолета.
Достаю в HUD_WeaponsPostThink состояние клиентской пушки через gEngfuncs.GetViewModel() и меняю там curstate.body. Но отображается изменение несколько позже. Можно ли как-то триггернуть перерисовку?
__________________
I'm on github
I'm on opendesktop.org
FreeSlave посылай с сервера в мессаге SVC_WEAPONANIM. Тогда бодя будет меняться не посреди кадра, а в начале. Но если надо менять налету, лучше используй Xash Weapon System с её бодями и скинами.
Добавлено 10-10-2021 в 23:42:
Ещё можешь попробовать менять бодю не в посттчинке, а в HUD_Frame. Теоретически, если операции, что делаются в ItemPreFrame запихать в HUD_Frame, а те, что в ItemPostFrame, оставить в HUD_WeaponsPostThink, это избавит систему оружий от глюков. Но ссылку на инфу о предиктинге можно получить только из HUD_PostRunCmd. Так что проще вообще нафиг вырезать клиентские пушки. От них один геморрой, а лаг в полсекунды при стрельбе не так уж заметен при игре по сети.
Ku2zoff SVC_WEAPONANIM же резетнет саму анимацию? Мне нужно менять боди без смены анимации, поэтому полез напрямую в ViewModel.
Возможно действительно стоит клиентские пушки убрать, тем более, что мне по большей части для сингла нужно.
__________________
I'm on github
I'm on opendesktop.org
Помню я с этим дерьмом боролся на уровне движка. Вроде даже победил.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Как сделать чтобы из противоположных кнопок типа W и S передавалась всегда только та которая была нажата последней?
Куда передавалась?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Crystallize "отжимай" противоположную кнопку в коде инпута:
1 | void IN_ForwardDown(void) |
2 | { |
3 | KeyUp(&in_back); // новое |
4 | KeyDown(&in_forward); |
5 | gHUD.m_Spectator.HandleButtonsDown( IN_FORWARD ); |
6 | } |
Перегрев
Я тут запил перегрев оружия, и думаю, может сделать из этого нубо-тутор?
Собсна демонстрация онного https://youtu.be/xZpEV5QODLQ
__________________
И главное, Артём, помни: не ешь желтый снег!
hgrunt_2020 а где коронное "Пацаны, я маслину поймал!"? Непорядок
Ну а почему нет? Выложи, мб кому-то пригодится.
__________________
И главное, Артём, помни: не ешь желтый снег!
На вью модели можно регулировать кости?
А на вью модели можно регулировать кости? ну контролировать, как голову у нпс, мне для индикатора надо.
Если да то как контролировать эту кость?
__________________
И главное, Артём, помни: не ешь желтый снег!
При сборке модели очевидно надо создать контроллер кости.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
это да, но как это сделать в коде, на модели то я уже сделал контролер
__________________
И главное, Артём, помни: не ешь желтый снег!
hgrunt_2020 проверить m_pCurrentEntity на вьюмодель, а потом крутить у этой энтити контроллер. Положение контроллера слать на клиент пользовательской мессагой. Наверное, для вьмоделей можно даже сделать блендинг между анимациями. Например, чтобы не было резкого перехода между idle/fidget и reload.
Ku2zoff
Даже интересно стало про блендинг анимаций на вью модели
__________________
И главное, Артём, помни: не ешь желтый снег!
hgrunt_2020 у cl_entity_t есть структуры entity_state_t и latchedvars_t. В первых (baseline, prevstate, curstate) хранятся данные, получаемые по сети с сервера. Секвенции, позиции бонеконтроллеров и всякое прочее. Во второй структуре (latched) хранится почти то же самое, но с некоторой задержкой, то есть на текущий кадр информация уже устаревшая. Не знаю с какой задержкой, это надо глядеть сорцы ксашдвижка. (А вообще, в StudioSetupBones эта задержка указана: m_pCurrentEntity->latched.sequencetime + 0.2, 0.2 секунды) Так вот, StudioModelRenderer смешивает (to blend) актуальную анимацию с устаревшей, усредняя (to interpolate) положения костей. Именно поэтому мы видим плавные переходы между анимациями у монстров. Для вьюмоделей это не сделано за ненадобностью, потому что не особо режет глаз. Теоретически, можно самостоятельно, своими шаловливыми ручками заполнять latched для вьюмодели в текущем кадре, а в следующем делать интерполяцию в StudioSetupBones. Насколько мне известно, движок этого не делает.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Значит задача такая есть 2 модели с одинаковым скелетов но разным порядком костей. Ну и короче мне надо чтобы пересадить анимации с одной модели на вторую и возникает такой вопрос - Как можно свапать кости подскажите или может бытт есть прога для этого?
Если милка импортирует анимации некорректно, стоит попробовать во фрагмоушене.
Нет дело не в милке так как это изначально модели с разным порядком костей.
Добавлено 28-10-2021 в 18:02:
Потому что одна модель из одного мода а другая из другово и имеет другие анимации и иной порядок костей
Типа кости ног в одной имеют номера 3, 4, 5 а во второй они уже где-то в конце и там 28,29,30
Ну и если так компиляции делать то анимация выкручивает эти ноги под не естественым углом
Поиграл в SWAT Remastered от Aynekko, там встречается странный баг когда на определённых брашах, мировых, фонарик не рисуется. Там же рядом есть лифт который едет рывками если на нем убить слишком много солдатиков (они в итоге проваливаются насквозь и тогда он едет) но это-то как раз известно, я думаю.
Наверняка многие замечали, что trigger_hurt не воздействует на стоящих на месте монстров. Собственно, с чем это связано, и какие есть варианты решения?
__________________
I'm on github
I'm on opendesktop.org
Потому что триггеры действуют наоборот. В функции LinkEdict есть аргумент touch_triggers. Таким образом это не триггер ищет всё, что попало в его область, а наоборот - монстр или любой другой предмет делают шаг, вызывается LinkEdict и проверяется попадание в триггер.
А для стоящего на месте монстра UTIL_SetOrigin не вызывается, т.к. это бессмысленно. Вот и не работают триггеры. С игроком дело другое - там это каждый кадр вызывается.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Да, точно, помню такое.
А есть ли способ проверить как-то с другой стороны? В Sven Co-op например реализован флаг "Affect non-moving NPC's": https://sites.google.com/site/svenm...de/trigger_hurt
Можно в think проверять какую-нибудь область на наличие монстров и их дамажить, но trigger_hurt то может быть любой формы. Одним UTIL_EntitiesInBox не обойдешься. Есть ли в HL способ мануально проверить, что энтитя находится в области другой брашевой энтити?
Добавлено 01-11-2021 в 16:31:
Проверил реализацию в Sven Co-op - там просто проверяется, что находится в Bounding Box. Т.е. если сделать полый trigger_hurt и внутрь поставить монстра, его тоже будет дамажить.
__________________
I'm on github
I'm on opendesktop.org
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша, хмм, попробовал с UTIL_SetOrigin( pev, pev->origin ) в MonsterThink, ничего не поменялось.
Карта с примером в аттаче.
__________________
I'm on github
I'm on opendesktop.org
Может вызываешь не оттуда?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша, а там большой выбор? Вот изменение https://github.com/FreeSlave/hlsdk-...4b9b852949f54a9
__________________
I'm on github
I'm on opendesktop.org
Пихни алерт в MonsterTouch и посмотри, вызывается ли оно.
И если да, то с каким эдиктом в качестве pOther.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша, добавил в CTalkMonster::Touch. На trigger_hurt не вызывается.
__________________
I'm on github
I'm on opendesktop.org
в trigger_hurt тоже сделай проверку.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Можно ли передать на клиент отрицательный iuser(1-4)? Столкнулся с тем, что приходит 0. Положительное число видит.
__________________
Мой мод на Xash
Aynekko попробуй увеличить количество бит в delta.lst до 8. Как, например, у sequence и gaitsequence. Там точно и стопудово приходят отрицательные значения.
Ku2zoff спасибо, что откликнулся, в entity encode у меня уже стоит 16, 1.0 у всех iuser. Но даже число -3 не проходит, пишет ноль. Больше нуля выставляю сразу все четко. Если это важно, то ставлю iuser3 в спаун солдата, на карте только я и солдат, пустая коробка. Пишу 555, вижу на клиенте 555, пишу отрицалку вижу ноль...
__________________
Мой мод на Xash
Aynekko тогда не знаю, в чём дело. Поступи по-другому. Вместо отрицательных чисел используй какой-нибудь диапазон. Например, в качестве положительных 1-255, а в качестве отрицательных 256-511. То есть, у тебя на клиенте проверка была
if (entity->curstate.iuser4 < 0) |
if (entity->curstate.iuser4 > 256) |
if (entity->curstate.iuser4 > 256) |
entity->curstate.iuser4 = 256 - entity->curstate.iuser4; |
state->iuser1 = ent->v.iuser1; // flags |
state->iuser2 = ent->v.iuser2; // flags |
state->iuser3 = ent->v.iuser3; // vertexlight cachenum |
state->iuser4 = ent->v.iuser4; |
В принципе я уже решил проблему, заведя новый pev-effects, но все равно хотелось бы разобраться.
__________________
Мой мод на Xash
DT_SIGNED
Добавлено 09-11-2021 в 11:54:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
Может просто множить искомое число на -1 при получении?
__________________
Мой мод на Xash
Хотел на клиенте повращать браш. Обнуляю там angles и параллельно постоянно считаются и задаются новые координаты. Но он не крутится.
Сделал ту же самую энтитю, но точечную, с моделькой - крутится.
Судя по репортам консоль, брашевая энтитя приходит на клиент, координаты так же считаются и задаются. Если делать то же самое на сервере, то браш крутится. Какая-то особенность для брашевых энтитей?
__________________
Мой мод на Xash
Aynekko с сервера приходят координаты и углы, а клиент уже по ним производит трансформацию. Учти, что брашевая модель - субмодель мира.
1 | static Vector Angles; |
2 | Angles.z += 200 * g_fFrametime; |
3 | if( Angles.z > 359 ) Angles.z = 0; |
4 | e->angles = Angles; |
__________________
Мой мод на Xash
Не, тоже не хотит. И моделька тогда тоже не крутится, что интересно. Только если просто angles менять
Добавлено 14-11-2021 в 14:59:
Все, нашел. В R_AddEntity нашел, где трансформация браша происходит.
if( clent->model->type == mod_brush ) |
clent->hCachedMatrix = GL_CacheState( clent->origin, clent->angles ); |
__________________
Мой мод на Xash
Интересно, а как на клиенте сдвинуть счетчик патронов? Пока не могу найти где. А то я когда добавлял вторичную обойму для Акимбо-Подствола, он стал шире, и иконка патронов уехала за экран.
Добавлено 23-11-2021 в 15:51:
И вопрос по R_StreakSplash, как в нем указывается цвет? Там color не rgb, а просто одно число.
x = ScreeinWidth - ширина спрайта - отступ. |
Ku2zoff Спасибо.
Вопрос еще по TriApi, а как сделать чтобы край эффекта луча где он начинается был полупрозрачным? А то он резко начинается, не очень красиво выглядит: https://imgur.com/a/qkA8d0V
Сам код рендера луча, из ХДМ:
code:
//----------------------------------------------------------------------------- // Purpose: Draw system to screen. // Warning: Requires texture tiling enabled in GL! //----------------------------------------------------------------------------- void CRSBeam::Render(void) { if (!gEngfuncs.pTriAPI->SpriteTexture(m_pTexture, m_iFrame)) return; Vector rt, up; AngleVectors(g_vecViewAngles, NULL, rt, up); gEngfuncs.pTriAPI->RenderMode(m_iRenderMode); //gEngfuncs.pTriAPI->Color4ub(m_color.r, m_color.g, m_color.b, 255);//(unsigned char)(m_fBrightness*255.0f)); gEngfuncs.pTriAPI->Color4f(m_fColorCurrent[0],m_fColorCurrent[1],m_fColorCurrent[2],1.0f);// HL m_fColorCurrent[3]);// XDM3038c gEngfuncs.pTriAPI->Brightness(GetRenderBrightness()); gEngfuncs.pTriAPI->CullFace(TRI_NONE); gEngfuncs.pTriAPI->Begin(TRI_QUADS); gEngfuncs.pTriAPI->TexCoord2f(0.0, 0.0); gEngfuncs.pTriAPI->Vertex3fv(m_vecOrigin + rt*m_fScale); gEngfuncs.pTriAPI->TexCoord2f(1.0, 0.0); gEngfuncs.pTriAPI->Vertex3fv(m_vecOrigin - rt*m_fScale); gEngfuncs.pTriAPI->TexCoord2f(1.0, m_fTextureTile); gEngfuncs.pTriAPI->Vertex3fv(m_vEnd - rt*m_fScale); gEngfuncs.pTriAPI->TexCoord2f(0.0, m_fTextureTile); gEngfuncs.pTriAPI->Vertex3fv(m_vEnd + rt*m_fScale); gEngfuncs.pTriAPI->TexCoord2f(0.0, 0.0); gEngfuncs.pTriAPI->Vertex3fv(m_vecOrigin + up*m_fScale); gEngfuncs.pTriAPI->TexCoord2f(1.0, 0.0); gEngfuncs.pTriAPI->Vertex3fv(m_vecOrigin - up*m_fScale); gEngfuncs.pTriAPI->TexCoord2f(1.0, m_fTextureTile); gEngfuncs.pTriAPI->Vertex3fv(m_vEnd - up*m_fScale); gEngfuncs.pTriAPI->TexCoord2f(0.0, m_fTextureTile); gEngfuncs.pTriAPI->Vertex3fv(m_vEnd + up*m_fScale); gEngfuncs.pTriAPI->End(); //gEngfuncs.pTriAPI->RenderMode(kRenderNormal); }
Chyvachok софт-партикли делаются через шейдеры
Но твоя идея тоже интересная.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Мне бы хотя бы начало лучика мягким сделать, идея есть, грубо говоря вместо одного 2 луча нарисовать, один начальный короткий отрезок, с прозрачностью 0 в начале луча, и непрозрачный в конце, и дальше как этот отрезок заканчивается просто нарисовать дальше второй луч, полностью непрозрачный, но вот как это закодить то, в этом pTriAPI я вообще не очень шарю в тех же координатах для вертексов, да и вообще с этими векторами наверное больше всего геморроя, я еле смог заставить на клиенте спавнить в эвенте оружия R_Sprite_Trail чтобы они корректно спавнились, тоже возня с векторами была.
Я просто вспомнил как делал в ксаш-моде программный экспоненциальный туманчег партиклям
Там же рядом можно было замутить и повертексные софт-партикли через POINT_CONTENTS. Фишка в том, что в халфе это *реально* будет работать.
И безо всяких шейдеров. Так что идея и правда интересная.
Да вон, хотя бы Кутузов мог заняться.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Софт партикли требуют ditect X 11 и старше. Не?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Можно ли как-то заставить построитель нодов коннектить ноды находящиеся по обе стороны от двери?
Из-за отсутствия связи монстры часто тупят на проходах.
__________________
I'm on github
I'm on opendesktop.org
__________________
Мой мод на Xash
__________________
I'm on github
I'm on opendesktop.org
В CGraph :: HandleLinkEnt есть код, связанный с этим
if ( FClassnameIs( pevLinkEnt, "func_door" ) || FClassnameIs( pevLinkEnt, "func_door_rotating" ) ) |
1 | if ( FClassnameIs( pevLinkEnt, "func_door" ) || FClassnameIs( pevLinkEnt, "func_door_rotating" ) ) |
2 | {// ent is a door. |
3 | if( WorldGraph.BuildingRoute ) |
4 | return TRUE; |
5 |
6 | CBaseEntity *pDoor = ( CBaseEntity::Instance( pevLinkEnt ) ); |
7 |
8 | if ( ( pevLinkEnt->spawnflags & SF_DOOR_USE_ONLY ) ) |
9 | {// door is use only. |
10 | .......... |
11 | .......... |
__________________
Мой мод на Xash
Aynekko, спасибо. Но саму структуру WorldGraph я бы не советовал трогать (ну или не забудь перегенерировать графы с нуля), лучше уж отдельную глобальную переменную.
__________________
I'm on github
I'm on opendesktop.org
В этом случае там ничего важного и не трогается, этот новый бул ставится true только после начала генерации вейпоинта, если его нет, и false при завершении операции. Может там уже и есть даже подобный бул, я просто решил завести новый как раз чтобы ничего не трогать. В любом случае, графы еще будут миллион раз переделаны, т.к. мод в глубокой разработке
__________________
Мой мод на Xash
Aynekko, я про то, что структура графа читается и сохраняется в файл напрямую.
Я как-то тоже добавлял в CGraph переменную, потом у меня монстры где-то то ли невалидный вектор получали, то ли ещё что, и кружились вокруг своей оси, когда хотели куда-либо пойти
__________________
I'm on github
I'm on opendesktop.org
__________________
I'm on github
I'm on opendesktop.org
Стоп. Проверил обычную халфу, в ней так и показываются связи. Только не на всех картах их почему-то видно.
Добавлено 05-12-2021 в 19:47:
Нашёл статью о нодах на TWHL. Цитата:
__________________
Мой мод на Xash
Я поподробнее посмотрел код реакции монстров на двери и он вообще довольно опасный.
Например:
HandleLinkEnt возвращает TRUE если дверь уже открыта и помечена как Toggle - https://github.com/ValveSoftware/ha.../nodes.cpp#L263
Что в свою очередь приводит к тому, что вызывается OpenDoorAndWait - https://github.com/ValveSoftware/ha...sters.cpp#L1492
Там мы видим, что дверь "юзается" с USE_ON - https://github.com/ValveSoftware/ha...sters.cpp#L1412
Однако двери в HL никак не обрабатывают USE_TYPE и воспринимают всё как Toggle, что приводит к тому, что дверь может наоборот закрыться.
Собственно, я когда-то давно наблюдал такое явление на широких дверях с флагом Toggle на опфоровских dll-ках. Солдаты, пробегая под ранее открытыми воротами, закрывали их. И Monsters Can't никак не помогал, ибо проверка на него в коде находится позже. Думаю, в HL такое тоже можно повторить, но там больше двух союзников за собой не утащишь, так что проверять сложнее.
__________________
I'm on github
I'm on opendesktop.org
__________________
Мой мод на Xash
__________________
I'm on github
I'm on opendesktop.org
Ещё заметил, что связи не строятся через func_monsterclip. Пока не нашёл, как чинить. У кого-нибудь есть мысли на этот счёт?
__________________
I'm on github
I'm on opendesktop.org
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
I'm on github
I'm on opendesktop.org
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Такой вопрос, никто не делал луч моделькой? Типа как у Шафта в 1 Квейке? Я смотрел код dmc, как я понял там луч средствами ХЛ рисуется, через R_BeamPoints.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
I'm on github
I'm on opendesktop.org
Ну тады ой Но всё равно надо копать в этом направлении.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Копать скорее надо в направлении Walk Rejection. Я создал карту-коробку с двумя нодами. Без препятствий между ними связь есть. Если поставить func_monsterclip, то связь не рисуется.
В логе
__________________
I'm on github
I'm on opendesktop.org
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Такой вопрос, а что делает таких монстров как барнаклы и турели не разрываемыми на куски? У Турелей тчинк TurretDeath вместо killed используется. Барнаклов смог сделать, но опять же - их разрывает только если их взорвать сразу, уже убитого нельзя на ошметки разнести, а у турелей, попытка моя как то их сделать разбиваемыми на куски сделала их не убиваемыми.
Chyvachok у барнакла своя функция Killed, из неё не вызывается GibMonster. То же самое с турелями.
Ku2zoff У барнакла может быть дело в этих строках в Killed?
pev->solid = SOLID_NOT;
pev->takedamage = DAMAGE_NO;
По идее из-за этого нельзя ему нанести урон после того как он убит, но я не знаю какой solid у трупов других врагов, чтобы можно было из оружия урон нанести и при этом сквозь них пройти можно было.
Это влияет да. А ещё вот:
1 | if ( HasMemory( bits_MEMORY_KILLED ) ) |
2 | { |
3 | if ( ShouldGibMonster( iGib ) ) |
4 | CallGibMonster(); |
5 | return; |
6 | } |
Насчет этих двух строк, если убрать pev->solid = SOLID_NOT; жертва остается висеть в барнакле, но его зато можно разорвать из instant hit оружия, если убрать pev->takedamage = DAMAGE_NO; но оставить pev->solid = SOLID_NOT; можно взорвать, но не разорвать instant hit оружием. И еще вот, анимация смерти заново начинает проигрыватся если барнакл опять получает урон после смерти, пока код так выглядит:
code:
void CBarnacle :: Killed( entvars_t *pevAttacker, int iGib ) { CBaseMonster *pVictim; pev->solid = SOLID_NOT; pev->takedamage = DAMAGE_NO; if ( m_hEnemy != NULL ) { pVictim = m_hEnemy->MyMonsterPointer(); if ( pVictim ) { pVictim->BarnacleVictimReleased(); } } // CGib::SpawnRandomGibs( pev, 4, 1 ); switch ( RANDOM_LONG ( 0, 1 ) ) { case 0: EMIT_SOUND( ENT(pev), CHAN_WEAPON, "barnacle/bcl_die1.wav", 1, ATTN_NORM ); break; case 1: EMIT_SOUND( ENT(pev), CHAN_WEAPON, "barnacle/bcl_die3.wav", 1, ATTN_NORM ); break; } SetActivity ( ACT_DIESIMPLE ); SetBoneController( 0, 0 ); StudioFrameAdvance( 0.1 ); if ( ShouldGibMonster( iGib ) ) { GibMonster(); return; } pev->nextthink = gpGlobals->time + 0.1; SetThink ( &CBarnacle::WaitTillDead ); }
CBarnacle :: WaitTillDead тут возвращай ему солидность. Может подходящее место. А вообще, чтобы жертва не застревала, можно воспользоваться груптрейсом.
Ku2zoff Я не могу найти какая солидность у трупов, они получают урон из оружия, и в то же время сквозь них можно пройти.
Добавлено 07-12-2021 в 14:44:
Ku2zoff Я не совсем понял как они работают то, groupinfo нужно одинаковый и барнаклу и жертве ставить? И ничего что потом у жертвы останется свой после смерти барнакла?
Вроде разобрался влепил pev->groupinfo = 1; и вроде можно как и урон Барнаклу дальше после смерти наносить, и жертва и игрок сквозь него проходят. Вот кому надо:
code:
void CBarnacle :: Killed( entvars_t *pevAttacker, int iGib ) { CBaseMonster *pVictim; //pev->solid = SOLID_NOT; //pev->takedamage = DAMAGE_NO; pev->groupinfo = 1; if ( !HasMemory( bits_MEMORY_KILLED ) ) { Remember( bits_MEMORY_KILLED ); if ( m_hEnemy != NULL ) { pVictim = m_hEnemy->MyMonsterPointer(); if ( pVictim ) { pVictim->BarnacleVictimReleased(); } } if ( ShouldGibMonster( iGib ) ) { GibMonster(); return; } switch ( RANDOM_LONG ( 0, 1 ) ) { case 0: EMIT_SOUND( ENT(pev), CHAN_WEAPON, "barnacle/bcl_die1.wav", 1, ATTN_NORM ); break; case 1: EMIT_SOUND( ENT(pev), CHAN_WEAPON, "barnacle/bcl_die3.wav", 1, ATTN_NORM ); break; } SetActivity ( ACT_DIESIMPLE ); SetBoneController( 0, 0 ); StudioFrameAdvance( 0.1 ); pev->nextthink = gpGlobals->time + 0.1; SetThink ( &CBarnacle::WaitTillDead ); } else { if ( ShouldGibMonster( iGib ) ) { GibMonster(); return; } } }
pev->groupinfo = 1; |
pVictim->pev->groupinfo = 1; |
UTIL_SetGroupTrace(pev->groupinfo, GROUP_OP_NAND); |
UTIL_SetGroupTrace(pVictim->pev->groupinfo, GROUP_OP_NAND); |
UTIL_SetGroupTrace(pev->groupinfo, GROUP_OP_AND); |
UTIL_SetGroupTrace(pVictim->pev->groupinfo, GROUP_OP_AND); |
code:
//Код Слейва но чисто отвечающий за отстрел конечностей. #define TORSOGIB_DAMAGE (DMG_BUCKSHOT|DMG_ENERGYBEAM|DMG_CRUSH|DMG_MORTAR|DMG_BLAST) #define HEAD_GROUP 1 #define HEAD_INTACT 0 #define HEAD_BEHEADED 1 #define LEFTARM_GROUP 2 #define RIGHTARM_GROUP 3 #define LEFTLEG_GROUP 4 #define RIGHTLEG_GROUP 5 #define MIDDLEARM_GROUP 6 #define LIMB_INTACT 0 #define LIMB_DAMAGED 1 #define NO_TORSO_LEFTLEG_GROUP 1 #define NO_TORSO_RIGHTLEG_GROUP 2 #define HBOX_CHEST 2 #define HBOX_STOMACH 3 #define HBOX_ARM_R 5 #define HBOX_ARM_L 4 #define HBOX_LEG_R 7 #define HBOX_LEG_L 6 #define HBOX_HEAD 1 #define HBOX_ARM_M 8 #define AGIBS_ISLAVE_TORSO 30 #define AGIBS_ISLAVE_PELVIS 36 #define AGIBS_ISLAVE_HEAD 29 #define AGIBS_ISLAVE_ARM_L 31 #define AGIBS_ISLAVE_ARM_R 32 #define AGIBS_ISLAVE_LEG_L 33 #define AGIBS_ISLAVE_LEG_R 34 #define AGIBS_ISLAVE_ARM_M 35 class CISlave : public CSquadMonster { int m_iNoTorso, m_iNoHead, m_iNoLeftArm, m_iNoRightArm, m_iNoMiddleArm, m_iNoLeftLeg, m_iNoRightLeg; } void CISlave::TraceAttack( entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType) { if (bitsDamageType & DMG_SHOCK) return; CSquadMonster::TraceAttack( pevAttacker, flDamage, vecDir, ptr, bitsDamageType ); if ( gMultiDamage.pEntity != this ) return; if (pev->health - ( gMultiDamage.amount ) <= 0) { Vector new_origin = pev->origin, new_angle; if ( (ptr->iHitgroup == HBOX_CHEST/* || ptr->iHitgroup == HBOX_STOMACH*/) && m_iNoTorso == 0 && bitsDamageType & TORSOGIB_DAMAGE) { EMIT_SOUND(ENT(pev), CHAN_BODY, "common/amputation_heavy.wav", 1, ATTN_NORM); CGib::SpawnSpecificGibs( pev, 1, "models/agibs.mdl", AGIBS_ISLAVE_TORSO, 0 ); CGib::SpawnStickyGibs( pev, RANDOM_LONG(2,3), "models/stickygib.mdl", 2, 4 ); //С торсом рубим и руки если они есть if (m_iNoRightArm == 0){ GetBonePosition( LookupBone("Bip01 R UpperArm"), new_origin, new_angle ); MakeGib ( AGIBS_ISLAVE_ARM_R, pevAttacker, new_origin); } if (m_iNoLeftArm == 0){ GetBonePosition( LookupBone("Bip01 L UpperArm"), new_origin, new_angle ); MakeGib ( AGIBS_ISLAVE_ARM_L, pevAttacker, new_origin); } if (m_iNoHead == 0){ GetBonePosition( LookupBone("Bip01 Head"), new_origin, new_angle ); MakeGib ( AGIBS_ISLAVE_HEAD, pevAttacker, new_origin); } pev->body = 0; SET_MODEL(ENT(pev), "models/islave_h.mdl"); //У модели без торса другой порядок бодигруп и их кол-во поэтому и заново указываем if (m_iNoLeftLeg == 1) SetBodygroup( 1, LIMB_DAMAGED); if (m_iNoRightLeg == 1) SetBodygroup( 2, LIMB_DAMAGED); m_iNoTorso = 1; m_iNoRightArm = 1; m_iNoLeftArm = 1; m_iNoHead = 1; } switch ( ptr->iHitgroup ) { case HBOX_ARM_R: if (m_iNoRightArm == 0){ EMIT_SOUND(ENT(pev), CHAN_ITEM, "common/amputation_light.wav", 1, ATTN_NORM); GetBonePosition( LookupBone("Bip01 R UpperArm"), new_origin, new_angle ); MakeGib ( AGIBS_ISLAVE_ARM_R, pevAttacker, new_origin); SetBodygroup( RIGHTARM_GROUP, LIMB_DAMAGED); m_iNoRightArm = 1; } break; case HBOX_ARM_L: if (m_iNoLeftArm == 0){ EMIT_SOUND(ENT(pev), CHAN_ITEM, "common/amputation_light.wav", 1, ATTN_NORM); GetBonePosition( LookupBone("Bip01 L UpperArm"), new_origin, new_angle ); MakeGib ( AGIBS_ISLAVE_ARM_L, pevAttacker, new_origin); SetBodygroup( LEFTARM_GROUP, LIMB_DAMAGED); m_iNoLeftArm = 1; } break; case HBOX_LEG_R: if (m_iNoRightLeg == 0){ EMIT_SOUND(ENT(pev), CHAN_ITEM, "common/amputation_light.wav", 1, ATTN_NORM); GetBonePosition( LookupBone("Bip01 R Calf"), new_origin, new_angle ); MakeGib ( AGIBS_ISLAVE_LEG_R, pevAttacker, new_origin); if (m_iNoTorso == 0) SetBodygroup( RIGHTLEG_GROUP, LIMB_DAMAGED); else SetBodygroup( 2, LIMB_DAMAGED); m_iNoRightLeg = 1; } break; case HBOX_LEG_L: if (m_iNoLeftLeg == 0){ EMIT_SOUND(ENT(pev), CHAN_ITEM, "common/amputation_light.wav", 1, ATTN_NORM); GetBonePosition( LookupBone("Bip01 L Calf"), new_origin, new_angle ); MakeGib ( AGIBS_ISLAVE_LEG_L, pevAttacker, new_origin); if (m_iNoTorso == 0) SetBodygroup( LEFTLEG_GROUP, LIMB_DAMAGED); else SetBodygroup( 1, LIMB_DAMAGED); m_iNoLeftLeg = 1; } break; case HBOX_ARM_M: if (m_iNoLeftArm == 0){ EMIT_SOUND(ENT(pev), CHAN_ITEM, "common/amputation_light.wav", 1, ATTN_NORM); GetBonePosition( LookupBone("Bone05"), new_origin, new_angle ); MakeGib ( AGIBS_ISLAVE_ARM_M, pevAttacker, new_origin); SetBodygroup( MIDDLEARM_GROUP, LIMB_DAMAGED); m_iNoMiddleArm = 1; } break; case HBOX_HEAD: if (m_iNoHead == 0){ EMIT_SOUND(ENT(pev), CHAN_BODY, "common/amputation_heavy.wav", 1, ATTN_NORM); GetBonePosition( LookupBone("Bip01 Head"), new_origin, new_angle ); MakeGib ( AGIBS_ISLAVE_HEAD, pevAttacker, new_origin); //Crab vezde odinakoviy SetBodygroup( HEAD_GROUP, HEAD_BEHEADED); m_iNoHead = 1; } break; } } } void CISlave::GibMonster ( void ) { EMIT_SOUND(ENT(pev), CHAN_WEAPON, "common/bodysplat.wav", 1, ATTN_NORM); if (m_iNoTorso == 0){ CGib::SpawnSpecificGibs( pev, 1, "models/agibs.mdl", AGIBS_ISLAVE_TORSO, 0 ); //спавнит куски, но боди идут не рандомно, а по порядку CGib::SpawnStickyGibs( pev, RANDOM_LONG(2,3), "models/stickygib.mdl", 2, 4 ); //починеный stickygibs, вроде уже не разу не висит в воздухе } if ( m_iNoRightArm == 0 ) CGib::SpawnSpecificGibs( pev, 1, "models/agibs.mdl", AGIBS_ISLAVE_ARM_R, 0 ); if ( m_iNoLeftArm == 0 ) CGib::SpawnSpecificGibs( pev, 1, "models/agibs.mdl", AGIBS_ISLAVE_ARM_L, 0 ); if ( m_iNoMiddleArm == 0 ) CGib::SpawnSpecificGibs( pev, 1, "models/agibs.mdl", AGIBS_ISLAVE_ARM_M, 0 ); if ( m_iNoRightLeg == 0 ) CGib::SpawnSpecificGibs( pev, 1, "models/agibs.mdl", AGIBS_ISLAVE_LEG_R, 0 ); if ( m_iNoLeftLeg == 0 ) CGib::SpawnSpecificGibs( pev, 1, "models/agibs.mdl", AGIBS_ISLAVE_LEG_L, 0 ); if (m_iNoHead == 0) CGib::SpawnSpecificGibs( pev, 1, "models/agibs.mdl", AGIBS_ISLAVE_HEAD, 0 ); CGib::SpawnSpecificGibs( pev, 1, "models/agibs.mdl", AGIBS_ISLAVE_PELVIS, 0 ); SetThink ( &CBaseMonster :: SUB_Remove ); pev->nextthink = gpGlobals->time; } //Код спавна отпределенного куска в определенном месте void CISlave :: MakeGib ( int body, entvars_t *pevAttacker, Vector vecSrc ) { CGib *pGib = GetClassPtr( (CGib *)NULL ); pGib->Spawn( "models/agibs.mdl" ); pGib->m_bloodColor = BLOOD_COLOR_YELLOW; pGib->pev->body = body; pGib->pev->skin = 0; pGib->pev->groupinfo = 1; UTIL_SetGroupTrace(pGib->pev->groupinfo, GROUP_OP_NAND); UTIL_SetGroupTrace(pev->groupinfo, GROUP_OP_NAND); pGib->pev->origin = vecSrc; //pGib->pev->velocity = ( Center() - pevAttacker->origin).Normalize() * 300; pGib->pev->velocity = Vector (RANDOM_FLOAT(-100,100), RANDOM_FLOAT(-100,100), RANDOM_FLOAT(100,200)); pGib->pev->avelocity.x = RANDOM_FLOAT( 100, 200 ); pGib->pev->avelocity.y = RANDOM_FLOAT( 100, 300 ); pGib->pev->avelocity.z = RANDOM_FLOAT( 100, 200 ); pGib->pev->solid = SOLID_TRIGGER; UTIL_SetSize( pGib->pev, Vector( 0, 0, 0 ), Vector( 0, 0, 0 ) ); }
Chyvachok особо ничем, разве что удобочитаемость снижается.
Добавлено 08-12-2021 в 02:42:
Как обещал - секвенции дробовика и пинка хедкраба ногой в аттаче. Надо немножко их допилить. Для M4 секвенции можно выдрать из оригинальной модели мода Zombie Edition.
int FindShortestPath ( int *piPath, int iStart, int iDest, int iHull, int afCapMask ); |
int FindShortestPath ( int *piPath, int iStart, int iDest, int iHull, int afCapMask, bool dynamic = false ); |
if( m_fRoutingComplete ) |
if( !dynamic && m_fRoutingComplete ) |
if( !HandleLinkEnt( iCurrentNode, m_pLinkPool[m_pNodes[iCurrentNode].m_iFirstLink + i].m_pLinkEnt, afCapMask, NODEGRAPH_STATIC ) ) |
if( !HandleLinkEnt( iCurrentNode, m_pLinkPool[m_pNodes[iCurrentNode].m_iFirstLink + i].m_pLinkEnt, afCapMask, dynamic ? NODEGRAPH_DYNAMIC : NODEGRAPH_STATIC ) ) |
__________________
I'm on github
I'm on opendesktop.org
__________________
Мой мод на Xash
__________________
I'm on github
I'm on opendesktop.org
1 | if ( FClassnameIs( pevLinkEnt, "func_door" ) || FClassnameIs( pevLinkEnt, "func_door_rotating" ) ) |
2 | {// ent is a door. |
3 | if( !WorldGraph.m_fRoutingComplete ) |
4 | return TRUE; |
// check the connection from the current node to the node we're about to mark visited and push into the queue |
if ( m_pLinkPool[ m_pNodes[ iCurrentNode ].m_iFirstLink + i ].m_pLinkEnt != NULL ) |
__________________
Мой мод на Xash
Да, похоже что-то не так с FSetGraphPointers. Я у себя вижу кучу сообщений **Could not find model.
Надо подумать, куда перетащить этот вызов.
Добавлено 08-12-2021 в 22:18:
Пока что из CBasePlayer::Precache перенес в ServerActivate в client.cpp (пришлось там подключить "nodes.h").
Добавлено 08-12-2021 в 22:32:
Кстати m_pLinkEnt и в обычной халфе неправильно выставляются при сэйв-ресторе. Те же **Could not find model в консоли (выставьте значение developer 4 перед запуском карты, чтобы все сообщения видеть).
Но там баг себя наверно и не проявляет никак, ибо FindShortestPath всегда следует по ветке m_fRoutingComplete.
Да и в целом звать FSetGraphPointers в CBasePlayer::Precache неверно. Что насчёт выделенных серверов, которые запускаются без всяких игроков?
А вот почему даже в сингле энтити не находятся по имени брашевой модели - хз. Возможно при ресторе Precache на энтитях зовется ещё до загрузки последующих, поэтому всех этих брашевых энтитей как бы и нет на момент вызова Precache игрока.
__________________
I'm on github
I'm on opendesktop.org
1 | else if ( WorldGraph.HandleLinkEnt ( iSrcNode, WorldGraph.m_pLinkPool[iLink].m_pLinkEnt, m_afCapability, CGraph::NODEGRAPH_STATIC ) ) |
2 | { |
3 | entvars_t *pevLinkEnt = WorldGraph.m_pLinkPool[iLink].m_pLinkEnt; |
4 |
5 | if ( (m_afCapability & bits_CAP_RANGE_ATTACK1) && FClassnameIs(pevLinkEnt, "func_breakable") && !(pevLinkEnt->spawnflags & SF_BREAK_TRIGGER_ONLY) ) |
6 | { |
7 | // ALERT(at_console, "breakable.\n"); |
8 | CBaseEntity *pBreakable = Instance( pevLinkEnt ); |
9 | if (pBreakable) |
10 | { |
11 | // UNDONE: should be treating the breakable as enemy and attack it until it breaks, and without shouting "hostiles!" too |
12 | pBreakable->TakeDamage( pev, pev, 15, DMG_CLUB ); |
13 |
14 | // this somewhat works but sometimes he doesn't look at breakable and just fighting the air |
15 | // MakeIdealYaw( pBreakable->GetAbsOrigin() ); |
16 | // SetTurnActivity(); |
17 | // ChangeSchedule( GetScheduleOfType(SCHED_MELEE_ATTACK1) ); |
18 | } |
19 | } |
20 | } |
__________________
Мой мод на Xash
Aynekko, хочешь сделать, чтобы монстры сами разбивали breakable'ы на своём пути? В общем случае лучше такое не позволять. Вдруг это взрывные бочки
В идеале такое можно было бы реализовать только для специально помеченных брекаблей и по-разному для отдельных монстров. Например, вполне можно представить, что агрунт снесёт какие-нибудь коробки просто пройдя сквозь них А хуман грунты могут использовать пинок для поломки.
__________________
I'm on github
I'm on opendesktop.org
__________________
Мой мод на Xash
__________________
I'm on github
I'm on opendesktop.org
Хехех, ну так дело в том, что ящик стоит посреди коридора там никак не обойти. Почему я, собственно, и сделал это вообще.
__________________
Мой мод на Xash
Ku2zoff еще раз насчет groupinfo, допустим, а как точно этот UTIL_SetGroupTrace работает? Чет я туплю с ним, это надо обоим сущностям ставить одинаковый groupinfo? Просто я так и не понимаю результата конечного. Если той же жертве Барнакла поменять groupinfo это не сломает физику жертве? Я без этого обошелся, оставил pGib->pev->groupinfo = 1; только у Барнакла, без UTIL_SetGroupTrace, это по сути дало то что мне нужно было - барнакл ни с чем не колидит, его труп не мешает проходу и жертва выпадает, и в него регистрируется урон из оружия.
В коде гибсов у меня такой код, я хочу чтобы гибсы с друг другом не колидили, бывает что у них одинаковая позиция и они висят в воздухе, и с жертвой, это правильно написано или нет? Я жертве не ставил groupinfo. Sticky Gib-ы и не работали из-за того что могли с друг другом сколидить и остаться висеть в воздухе.
pGib->pev->groupinfo = 1;
UTIL_SetGroupTrace(pGib->pev->groupinfo, GROUP_OP_NAND);
UTIL_SetGroupTrace(pev->groupinfo, GROUP_OP_NAND);
В общем еще вот, к примеру когда я сделал Акимбо Хорнет заметил, если спавнить Хорнетов сразу при стрельбе с двух рук (первичная стреляет по очереди, левая правая, вторичная сразу с двух рук), и оставить код что подправляет траекторию чтобы они летели в центр экрана - то они в друг друга врезаются и падают, в общем опять же, как этот груп инфо сделать так чтобы если что хорнеты пролетали сквозь друг друга, и в тоже время попадали в НПС и наносили им урон, пусть я и убрал подправление траектории в прицел, все равно видно что они бывают в друг друга врезаются.
1 | void SV_Impact( edict_t *e1, edict_t *e2, trace_t *trace ) |
2 | { |
3 | svgame.globals->time = sv.time; |
4 |
5 | if(( e1->v.flags|e2->v.flags ) & FL_KILLME ) |
6 | return; |
7 |
8 | if( e1->v.groupinfo && e2->v.groupinfo ) |
9 | { |
10 | if( svs.groupop == GROUP_OP_AND && !FBitSet( e1->v.groupinfo, e2->v.groupinfo )) |
11 | return; |
12 |
13 | if( svs.groupop == GROUP_OP_NAND && FBitSet( e1->v.groupinfo, e2->v.groupinfo )) |
14 | return; |
15 | } |
16 |
17 | if( e1->v.solid != SOLID_NOT ) |
18 | { |
19 | SV_CopyTraceToGlobal( trace ); |
20 | svgame.dllFuncs.pfnTouch( e1, e2 ); |
21 | } |
22 |
23 | if( e2->v.solid != SOLID_NOT ) |
24 | { |
25 | SV_CopyTraceToGlobal( trace ); |
26 | svgame.dllFuncs.pfnTouch( e2, e1 ); |
27 | } |
28 | } |
1 | // в коде барнакла в начале смерти |
2 | pev->groupinfo = this->entindex(); |
3 | pVictim->pev->groupinfo = this->entindex(); |
4 | UTIL_SetGroupTrace(this->entindex(), GROUP_OP_NAND); |
5 |
6 | // в коде барнакла в конце смерти |
7 | pev->groupinfo = 0; |
8 |
9 | // в коде жертвы |
10 | if (pev->groupinfo && FBitSet(pev->flags, FL_ONGROUND)) |
11 | { |
12 | pev->groupinfo = 0; |
13 | UTIL_UnsetGroupTrace(); |
14 | } |
Ku2zoff Вроде понял, в UTIL_SetGroupTrace в первую колонку идет номер группы, а во вторую тип коллизии, GROUP_OP_NAND или GROUP_OP_AND .
А вообще, обязательно ли изменять жертву? Просто это еще думать надо куда этот код всунуть еще, чтобы он точно вызвался, жертва ведь может быть кем угодно, и игрок и НПС-ы, это метод надо искать что у всех всегда вызывается.
В Теории достаточно снарядам выставить к примеру при спавне
pev->groupinfo с номером (как я понял любое число кроме 0) и UTIL_SetGroupTrace(this->entindex(), GROUP_OP_NAND);, это по идее должно предотвратить их коллиззию с друг другом и в тоже время оставить коллизию с монстрами? Допустим если я хочу сделать энергодробовик, и хочу быть уверенным что снаряды с собой не сколидят при выстреле.
С кусками тоже придумать надо, надо чтобы они вообще ни с чем кроме геометрии не колидили, можно хоть на клиенте сделать, но они вроде как будут сквозь брашевые энтити вроде лифтов и дверей проходить, тоже не хорошо. Плюс у меня есть еще куски что к стенам липнут, как их портануть на клиент и еще заставить колидить с брашевыми энтитями и чтобы они двигались тоже с дверями и прочим.
Chyvachok я тут покумекал. Короче, с барнаклом решается всё просто:
1 | if (HasMemory(bits_MEMORY_KILLED)) |
2 | { |
3 | if (ShouldGibMonster(iGib)) |
4 | CallGibMonster(); |
5 | return; |
6 | } |
7 |
8 | Remember(bits_MEMORY_KILLED); |
if (ShouldGibMonster(iGib)) |
{ |
CallGibMonster(); |
return; |
} |
if (pev->solid == SOLID_NOT) pev->solid = SOLID_SLIDEBOX; |
if (pev->takedamage == DAMAGE_NO) pev->takedamage = DAMAGE_AIM; |
Кстати, а как сделать спрайт на клиенте который через ТриАпи рисуется чтобы на него влиял свет? Сделал себе следы крови за кусками, которые на Авроре сделаны, но на партикли не влияет свет, для плазмы какой нибуть или огня ракеты норм, но для дыма и кровяки надо напильником подпилить эту систему.
В ксашевской авроре есть освещаемые партиклы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша а какие ключевые слова отвечают за освещение? CONTENT_SPOTLIGHT или m_iLightingModel?
Добавлено 09-12-2021 в 20:01:
Еще вот, в КсашХТ в triangleapi.h есть в void ( *LightAtPoint)( float *pos, float *value ); но ее нету в обычном ХЛСДК, оно будет работать в халве, если скопипастить? Там еще есть штуки что есть в КсашХТ но нету в обычной Халве.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша собственно а как через LightAtPoint менять цвет партикли? Тот код что в КсашХТ не совсем копипастится, к примеру этот кусок:
Vector lightColor;
gEngfuncs.pTriAPI->LightAtPoint( part->origin, (float *)&lightColor );
lightColor *= (1.0f / 255.0f);
Тут жалуется на *=, пишет error C2676: binary '*=' : 'Vector' does not define this operator or a conversion to a type acceptable to the predefined operator
Да и честно я так и не придумал, как из вектора мне получит цвет в виде float.
__________________
I'm on github
I'm on opendesktop.org
Там где рисуется партикля в ParticleSystem::DrawParticle всунул
Vector lightColor;
gEngfuncs.pTriAPI->LightAtPoint( origin, (float *)&lightColor );
И после вывод в консоль чтобы посмотреть что оно выдает, которая выводит lightColor.x, lightColor.y, lightColor.z по x и z всегда ноль, по y какое-то рандомное в зависимости от уровня число которое не зависит от освещенности никак.
Добавлено 09-12-2021 в 20:54:
В общем проблема с LightAtPoint, оно выдает вообще непонятные числа, то минусовые, то гиганские там 9946234623 такого вида, и по одной координате.
Исправил застревание гибсов в умирающем барнакле:
1 | void CBarnacle::SpawnGib(void) |
2 | { |
3 | CGib* pGib = GetClassPtr((CGib*)NULL); |
4 | pGib->Spawn("models/hgibs.mdl"); |
5 |
6 | pGib->m_bloodColor = BLOOD_COLOR_RED; |
7 | pGib->pev->body = RANDOM_LONG(1, 6); |
8 | pGib->pev->solid = SOLID_BBOX; |
9 | UTIL_SetSize(pGib->pev, Vector(0, 0, 0), Vector(0, 0, 0)); |
10 |
11 | pGib->pev->origin = pev->origin - gpGlobals->v_up * pev->size.z * 1.5; |
12 | pGib->pev->velocity = g_vecZero; |
13 |
14 | pGib->pev->velocity.x += RANDOM_FLOAT(-0.25, 0.25); |
15 | pGib->pev->velocity.y += RANDOM_FLOAT(-0.25, 0.25); |
16 | pGib->pev->velocity.z += RANDOM_FLOAT(-0.25, 0.25); |
17 | pGib->pev->velocity = pGib->pev->velocity * RANDOM_FLOAT(300, 400); |
18 |
19 | pGib->pev->avelocity.x = RANDOM_FLOAT(100, 200); |
20 | pGib->pev->avelocity.y = RANDOM_FLOAT(100, 300); |
21 |
22 | pGib->LimitVelocity(); |
23 | } |
Ku2zoff может такие вещи оформлять отдельными сниппетами-темами в туторах? Яуже со счету сбился сколько вы фиксов к ксашу сделали.
Ku2zoff кстати модешь подсказать как быть с освещением у партикли? Хочу сделать чтобы свет влиял на партиклю, но никак не могу сообразить как эту LightAtPoint использовать, она выдает странный результат. Потом как заставлю ее работать нормально завести еще одну опцию в текстовый файл авроры которая бы переключала бы, влияет свет на партиклю или нет.
Вот если что сам код рисования партикли, из Спирита или Паранои, не помню точно:
code:
void ParticleSystem::DrawParticle(particle *part, vec3_t &right, vec3_t &up) { // gEngfuncs.Con_Printf("DrawParticle: size %f, pos %f %f %f\n", part->size, part->origin[0], part->origin[1], part->origin[2]); float fSize = part->m_fSize; vec3_t point1,point2,point3,point4; vec3_t origin = part->origin; // nothing to draw? if (fSize == 0) return; float fCosSize = CosLookup(part->m_fAngle)*fSize; float fSinSize = SinLookup(part->m_fAngle)*fSize; // calculate the four corners of the sprite VectorMA (origin, fSinSize, up, point1); VectorMA (point1, -fCosSize, right, point1); VectorMA (origin, fCosSize, up, point2); VectorMA (point2, fSinSize, right, point2); VectorMA (origin, -fSinSize, up, point3); VectorMA (point3, fCosSize, right, point3); VectorMA (origin, -fCosSize, up, point4); VectorMA (point4, -fSinSize, right, point4); struct model_s * pModel; int iContents = 0; for (particle *pDraw = part; pDraw; pDraw = pDraw->m_pOverlay) { if (pDraw->pType->m_hSprite == 0) continue; if (pDraw->pType->m_iDrawCond) { if (iContents == 0) iContents = gEngfuncs.PM_PointContents(origin, NULL); if (iContents != pDraw->pType->m_iDrawCond) continue; } pModel = (struct model_s *)gEngfuncs.GetSpritePointer( pDraw->pType->m_hSprite ); // if we've reached the end of the sprite's frames, loop back while (pDraw->frame > pModel->numframes) pDraw->frame -= pModel->numframes; while (pDraw->frame < 0) pDraw->frame += pModel->numframes; if ( !gEngfuncs.pTriAPI->SpriteTexture( pModel, int(pDraw->frame) )) continue; gEngfuncs.pTriAPI->RenderMode(pDraw->pType->m_iRenderMode); gEngfuncs.pTriAPI->Color4f( pDraw->m_fRed, pDraw->m_fGreen, pDraw->m_fBlue, pDraw->m_fAlpha ); gEngfuncs.pTriAPI->Begin( TRI_QUADS ); gEngfuncs.pTriAPI->TexCoord2f (0, 0); gEngfuncs.pTriAPI->Vertex3fv(point1); gEngfuncs.pTriAPI->TexCoord2f (1, 0); gEngfuncs.pTriAPI->Vertex3fv (point2); gEngfuncs.pTriAPI->TexCoord2f (1, 1); gEngfuncs.pTriAPI->Vertex3fv (point3); gEngfuncs.pTriAPI->TexCoord2f (0, 1); gEngfuncs.pTriAPI->Vertex3fv (point4); gEngfuncs.pTriAPI->End(); } }
lightColor = lightColor * (1.0f / 255.0f); |
decltype(auto) operator+=(float fl) { return (*this = *this + fl); } |
decltype(auto) operator-=(float fl) { return (*this = *this - fl); } |
decltype(auto) operator*=(float fl) { return (*this = *this * fl); } |
decltype(auto) operator/=(float fl) { return (*this = *this / fl); } |
Ku2zoff тут даже не в *= дело - сам LightAtPoint не работает.
Добавлено 09-12-2021 в 22:21:
Он вместо освещенности в диапазоне 1-255 выдает некое число которое зависит от того куда смотрит игрок. pDraw->origin это ж позиция партикли? Хотя я пробовал и part->origin и что только можно. ХЗ почему в КсашХТ оно работает а тут нет.
Вообще, в ReGameDLL расширенный класс Vector, который позволяет всякие операции вроде
pev->velocity /= 2; |
pev->velocity = pev->velocity / 2; |
Ku2zoff тут не в векторе дело, в самом gEngfuncs.pTriAPI->LightAtPoint( pDraw->origin, (float *)&lightColor );
Оно возращяет странный результат, который вообще с освещением не связян. Я с помощью этого кода смотрел что оно выводит: gEngfuncs.Con_Printf("Light X %f, Light Y %f, Light z %f\n", lightColor.x, lightColor.y, lightColor.z); Не важно, есть ли lightColor = lightColor * (1.0f / 255.0f); или нет.
Color 0.749020 0.749020 0.533333 |
У меня по всем координатам кроме одной 0, если есть lightColor = lightColor * (1.0f / 255.0f); то везде нули, если нет этой строки в lightColor.y чисто которое меняется от того куда смотрит игрок, либо -0.821521 либо 0.812312 либо что-то по средине. Оно меняется если камерой смотреть в разную сторону, освещение никак не влияет на него.
Добавлено 09-12-2021 в 22:34:
Вставлял я его в ту часть когда где эффект рисуется, где gEngfuncs.pTriAPI->Color4f
Добавлено 09-12-2021 в 22:35:
Пробовал в другой метод вставлять, Update Particle там вообще дичь, числа 6423573.23423 и так далее.
Chyvachok попробуй засунуть в HUD_DrawTransparentTriangles
1 | Vector lightColor; |
2 |
3 | gEngfuncs.pTriAPI->LightAtPoint(v_origin, (float*)&lightColor); |
4 | lightColor = lightColor * (1.0f / 255.0f); |
5 |
6 | gEngfuncs.Con_DPrintf("Color %f %f %f\n", lightColor.x, lightColor.y, lightColor.z); |
v_origin это над методом void DLLEXPORT HUD_DrawTransparentTriangles( void ) добавить extern vec3_t v_origin;?
Пробовал пишет 0 0 0 снизу OPENGL_ERROR: GL_INVALID_ENUM_CALLED
Chyvachok да, верно. Интересная ошибка. Какой движок и какой мод?
Кстати этот же OPENGL_ERROR: GL_INVALID_ENUM_CALLED пишет и когда в партилклях вызывается.
Добавлено 09-12-2021 в 22:53:
Двиг Ксаш, код обычный ХЛСДК, не КсашХТ.
В голдсорсе мой код работает и пишет правильные значения, попробуй запустить под ним.
Вроде заработало в HUD_DrawTransparentTriangles, дело было в triangleapi.h, у меня изначально не было там LightAtPoint, я скопировал только LightAtPoint, теперь я скопирал вообще все что было из более нового СДК, вроде теперь пишет что надо. Остальные методы, там Color4fRendermode, BoxInPVS и так далее.
Добавлено 09-12-2021 в 23:01:
Что-то вроде в духе такого уже выводит 0.749020 0.749020 0.533333 и в коде партиклей.
Я не помню откуда качал СДК но с задницы какой-то, забыл что он на Гите есть.
Добавлено 09-12-2021 в 23:28:
Чтобы последний сдк был совместим с ксашем, надо вернуть старый инпут из версии 2.3, и ещё прилинковать старую vgui.lib оттуда же. Короче, немного работы с клиенткой. В XDM 3.0.3.8 всё это можно подглядеть, Мастер обернул #ifdef'ами все нужные места.
Добавлено 10-12-2021 в 04:35:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В общем сделал эту аврорку, чтобы свет на нее влиял, и приделал опцию которая бы читалась из txt файла и влияла, освещается партикл или нет.
Осталось придумать с сервером, Аврора не сохраняется, и след исчезает у сущности если сохранится и загрузится, я вот думаю, а как сделать функцию, которая бы вызывалась только после того как игрок загрузился? Которая бы след восстанавливала бы.
Chyvachok SendInitMessage из первой паранойи. Ну или Xash PostActivate System. Первое работает и в мультиплеере. Второе только в сингле.
Добавлено 10-12-2021 в 20:01:
Ещё DesiredAction из спирита. Правда оно больше для мовевитча, и посылка мессаг на клиент сделана через него, потому что по таймингам попадает в нужный промежуток.
Еще тоже с кусками и авророй, у меня след удаляется в функции WaitTillLand, но как я понял если куски пропадают из поля зрения, то игра их удаляет, а след остается, не очень удобно что вручную нужно удалять саму систему: https://imgur.com/a/gifVyNo
На этой карте видно как вообще игра их удаляет чуть ли не на глазах, а система остается, загвоздка в том что я не нашел через какую функцию игра чистит куски, чтобы туда код удаляющий след влепить.
Добавлено 10-12-2021 в 15:16:
Подскажите пожалуйста. Перенес TE_GUNSHOTDECAL на клиент. Код-то я сделал:
1 | case TE_GUNSHOTDECAL: |
2 | { |
3 | pos.x = READ_COORD(); |
4 | pos.y = READ_COORD(); |
5 | pos.z = READ_COORD(); |
6 | entityIndex = READ_SHORT(); |
7 | decalIndex = READ_BYTE(); |
8 | gEngfuncs.pEfxAPI->R_FireCustomDecal( decalIndex, entityIndex, 0, pos, 0, 1 ); |
9 | } |
10 | break; |
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
Ну и говно это Аврора.
Добавлено 10-12-2021 в 22:17:
Код из Спирита-Паранои не дописан толком, а из Ксаша попробуй утяни, там ведь рендер свой, тем кто шарит в програмировании да, проблем нет никаких, но тем кто нет, очень сложно. Не удивительно честно учитывая как она пашет, что никто не юзал ее для следов-снарядов кроме мода Alternative Way.
Она еще глючит начинает когда партиклей много спавнится, к примеру когда сразу много врагов гибаешь, они перестают исчезать и прочая дичь начинается, тоже самое с следом снарядов. Месага удаления тоже, она вообще не принималась пока я не пофиксил, но опять же - она резко удаляет партикл систему, то есть спрайты вместо того чтобы сами по себе растворится резко исчезают.
Chyvachok
В XDM погляди партеклсистему.. Она тпм годная и исходники открыты.
[CFR] B@N@N она добавлена уже, пусть и с более старой версии, но там немного другие функции. Аврора это всякий там дымок, или следы типа след снаряда, но работает она через зад, как оказалось. А фиксить честно пока не осилил, в КсашХТ лучше работает вроде, хотя опять же, надо тестить, но там рендер другой, надо шарить как код этого клиента устроен, чтобы портануть хотя бы.
Добавлено 10-12-2021 в 23:29:
У ХДМ-овской тоже есть недостатки, она вся захардкодена, любое изменение требует компиляции движка, не читает параметры как автора из текстовых файлов и нету никакого визуального редактора.
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; }
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Такой вариант сделать другой цвет крови при выстреле в голову нормальный? Пока вижу что есть шанс если монстра разорвет на мясо выстрелом в голову, то куски будут желтую кровь оставлять, а если в тело то красную. Хотя как вариант влепить в Gib Monster проверку возвращающую цвет крови, или это лишняя проверка будет?
code:
void CZombie :: TraceAttack( entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType) { switch ( ptr->iHitgroup ) { case HBOX_HEAD: m_bloodColor = BLOOD_COLOR_YELLOW; break; } CBaseMonster::TraceAttack( pevAttacker, flDamage, vecDir, ptr, bitsDamageType ); if (m_bloodColor = BLOOD_COLOR_YELLOW) m_bloodColor = BLOOD_COLOR_RED; }
Короче, я пошёл по пути самурая. CZombie::TraceBleed с аргументом цвета крови, что логично. CZombie::TraceAttack, CZombie::GibMonster, CZombie::SpawnGibs. Последнее делать не хотелось, но гибсы из SpawnRandomGibs по-умолчанию принимают цвет крови владельца. Пришлось сделать для зомби кастомную функцию, чтобы задать цвет вручную.
1 | #include "weapons.h" |
2 |
3 | void CZombie::TraceAttack(entvars_t* pevAttacker, float flDamage, Vector vecDir, TraceResult* ptr, int bitsDamageType) |
4 | { |
5 | if (pev->takedamage) |
6 | { |
7 | m_LastHitGroup = ptr->iHitgroup; |
8 |
9 | switch (ptr->iHitgroup) |
10 | { |
11 | case HITGROUP_HEAD: |
12 | SpawnBlood(ptr->vecEndPos, BLOOD_COLOR_YELLOW, flDamage); |
13 | TraceBleed(BLOOD_COLOR_YELLOW, flDamage, vecDir, ptr, bitsDamageType); |
14 | break; |
15 | default: |
16 | SpawnBlood(ptr->vecEndPos, BLOOD_COLOR_RED, flDamage); |
17 | TraceBleed(BLOOD_COLOR_RED, flDamage, vecDir, ptr, bitsDamageType); |
18 | break; |
19 | } |
20 | AddMultiDamage(pevAttacker, this, flDamage, bitsDamageType); |
21 | } |
22 | } |
23 |
24 | void CZombie::TraceBleed(int bloodColor, float flDamage, Vector vecDir, TraceResult* ptr, int bitsDamageType) |
25 | { |
26 | if (flDamage == 0) return; |
27 |
28 | if (!(bitsDamageType & (DMG_CRUSH | DMG_BULLET | DMG_SLASH | DMG_BLAST | DMG_CLUB | DMG_MORTAR))) return; |
29 |
30 | TraceResult Bloodtr; |
31 | Vector vecTraceDir; |
32 | float flNoise; |
33 | int cCount; |
34 | int i; |
35 |
36 |
37 | if (flDamage < 10) |
38 | { |
39 | flNoise = 0.1; |
40 | cCount = 1; |
41 | } |
42 | else if (flDamage < 25) |
43 | { |
44 | flNoise = 0.2; |
45 | cCount = 2; |
46 | } |
47 | else |
48 | { |
49 | flNoise = 0.3; |
50 | cCount = 4; |
51 | } |
52 |
53 | for (i = 0; i < cCount; i++) |
54 | { |
55 | vecTraceDir = vecDir * -1; |
56 | vecTraceDir.x += RANDOM_FLOAT(-flNoise, flNoise); |
57 | vecTraceDir.y += RANDOM_FLOAT(-flNoise, flNoise); |
58 | vecTraceDir.z += RANDOM_FLOAT(-flNoise, flNoise); |
59 |
60 | UTIL_TraceLine(ptr->vecEndPos, ptr->vecEndPos + vecTraceDir * -172, ignore_monsters, ENT(pev), &Bloodtr); |
61 |
62 | if (Bloodtr.flFraction != 1.0) UTIL_BloodDecalTrace(&Bloodtr, bloodColor); |
63 | } |
64 | } |
65 |
66 | void CZombie::GibMonster(void) |
67 | { |
68 | TraceResult tr; |
69 | BOOL gibbed = FALSE; |
70 |
71 | EMIT_SOUND(ENT(pev), CHAN_WEAPON, "common/bodysplat.wav", 1, ATTN_NORM); |
72 |
73 | if (CVAR_GET_FLOAT("violence_hgibs") != 0) |
74 | { |
75 | SpawnGibs(3, 1); |
76 | gibbed = TRUE; |
77 | } |
78 |
79 | if (CVAR_GET_FLOAT("violence_agibs") != 0) |
80 | { |
81 | SpawnGibs(3, 0); |
82 | gibbed = TRUE; |
83 | } |
84 |
85 | if (gibbed) |
86 | { |
87 | SetThink(&CBaseMonster::SUB_Remove); |
88 | pev->nextthink = gpGlobals->time; |
89 | } |
90 | else FadeMonster(); |
91 | } |
92 |
93 | void CZombie::SpawnGibs(int cGibs, int human) |
94 | { |
95 | int cSplat; |
96 |
97 | for (cSplat = 0; cSplat < cGibs; cSplat++) |
98 | { |
99 | CGib* pGib = GetClassPtr((CGib*)NULL); |
100 |
101 | if (human) |
102 | { |
103 | pGib->Spawn("models/hgibs.mdl"); |
104 | pGib->pev->body = RANDOM_LONG(1, 6 - 1); |
105 | pGib->m_bloodColor = BLOOD_COLOR_RED; |
106 | } |
107 | else |
108 | { |
109 | pGib->Spawn("models/agibs.mdl"); |
110 | pGib->pev->body = RANDOM_LONG(0, 4 - 1); |
111 | pGib->m_bloodColor = BLOOD_COLOR_YELLOW; |
112 | } |
113 |
114 | pGib->pev->origin.x = pev->absmin.x + pev->size.x * (RANDOM_FLOAT(0, 1)); |
115 | pGib->pev->origin.y = pev->absmin.y + pev->size.y * (RANDOM_FLOAT(0, 1)); |
116 | pGib->pev->origin.z = pev->absmin.z + pev->size.z * (RANDOM_FLOAT(0, 1)) + 1; |
117 |
118 | pGib->pev->velocity = g_vecAttackDir * -1; |
119 |
120 | pGib->pev->velocity.x += RANDOM_FLOAT(-0.25, 0.25); |
121 | pGib->pev->velocity.y += RANDOM_FLOAT(-0.25, 0.25); |
122 | pGib->pev->velocity.z += RANDOM_FLOAT(-0.25, 0.25); |
123 |
124 | pGib->pev->velocity = pGib->pev->velocity * RANDOM_FLOAT(300, 400); |
125 |
126 | pGib->pev->avelocity.x = RANDOM_FLOAT(100, 200); |
127 | pGib->pev->avelocity.y = RANDOM_FLOAT(100, 300); |
128 |
129 | if (pev->health > -50) pGib->pev->velocity = pGib->pev->velocity * 0.7; |
130 | else if (pev->health > -200) pGib->pev->velocity = pGib->pev->velocity * 2; |
131 | else pGib->pev->velocity = pGib->pev->velocity * 4; |
132 |
133 | pGib->pev->solid = SOLID_BBOX; |
134 | UTIL_SetSize(pGib->pev, Vector(0, 0, 0), Vector(0, 0, 0)); |
135 |
136 | pGib->LimitVelocity(); |
137 | } |
138 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша а где всю эту математику поглядеть? Какие функции в gl_decals.c?
Ku2zoff
https://en.wikipedia.org/wiki/Suthe...dgman_algorithm
__________________
Ku2zoff polylib.c, там всё. В любой кваке смотри.
Если хочешь понять принцип. Ну а если не хочешь - копипасти из паранои.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
От задач зависит. По крайней мере никто не заставляет пограммистов придумывать новые математические решения. Но вот воплощать в коде уже имеющиеся - вполне себе.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
__________________
Мой мод на Xash
Разве мы в прошлый раз не пришли к тому, что трансформация модели идет через modelview матрицу, а источники света этого не учитывают?
Я смотрел в параное 2, там по сути все точно так же за некоторыми исключениями (копипастил - все сломалось). Точно так же строится rotationmatrix. Вот и говорю, какие-то замуты с матрицами мира/модели/света, как одно к другому складывается я вообще не понимаю.
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
1 | tr.modelorg = m_pModelInstance->m_protationmatrix.VectorITransform( RI->vieworg ); |
2 | Vector right = m_pModelInstance->m_plightmatrix.VectorIRotate( RI->vright ); |
3 | Vector lightorg = m_pModelInstance->m_protationmatrix.VectorITransform( pl->origin ); |
4 | Vector lightdir = m_pModelInstance->m_plightmatrix.VectorIRotate( pl->frustum.GetPlane( FRUSTUM_FAR )->normal ); |
__________________
Мой мод на Xash
Ничего делать не надо, когда-нибудь я сам найду на это время.
У тебя ведь еще далеко до релиза? К тому же, меня удивляет, почему товарищи форкеры это до сих пор не поправили. Как форкать - так они первые. А как баг исправить - немогут
Добавлено 18-12-2021 в 22:12:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
// build the rotation matrix |
m_pModelInstance->m_protationmatrix = matrix3x4( origin, angles, scale ); |
m_pModelInstance->m_plightmatrix = m_pModelInstance->m_protationmatrix; |
__________________
Мой мод на Xash
Aynekko напомни, какие именно лайты глючат и как это выражается.
А то я сел разбираться и уже забыл в чём проблема.
Добавлено 18-12-2021 в 22:42:
Если мне память не изменяет, то кажется с рескейленными моделями там фонарь не работал или что-то вроде этого. Ну так те матрицы, которые строятся для прямого скейла совершенно не годятся для обратного.
Там обратный скейл нужен - еденица делённая на него. Для каждой компоненты. В декалях я это сделал, а для света забыл совершенно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
Посмотрел, там всё еще интереснее. Оказывается для ксаш-мода этого фикса с декалями вообще нет, но для паранои он есть. В чём тут смысл - на статик с пользовательским скейлом декаль тоже ложится не оригинального скейла.
А в зависимости от размера этого статика. Если модель ужата по одной из осей, то декаль тоже ужмётся или растянется, чего естественно быть не должно. В параное, собственно, свет считается в мировом пространстве, поэтому там не нужны обратные преобразования. Но все вот эти VectorIRotate и VectorITransform они неполноценные преобразования.
Они скейл принимают всегда еденичный. Зато быстро. Поэтому надо построить m_plightmatrix с обратным скейлом. Для еденичного разницы всё равно не будет.
Чот такое попробуйте:
// build the rotation matrix |
m_pModelInstance->m_protationmatrix = matrix3x4( origin, angles, scale ); |
m_pModelInstance->m_plightmatrix = matrix3x4( origin, angles, Vector( 1.0f / scale.x, 1.0f / scale.y, 1.0f / scale.z )); |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
Ну что увы? У нас теперь есть две матрицы. Они обе прямые, но в одной из них инверсный скейл. Значит ту вторую нужно использовать везде, где она вызвает функцию VectorIRotate или VectorITransform.
r_studio.cpp:4046
tr.modelorg = m_pModelInstance->m_plightmatrix.VectorITransform( RI->vieworg ); |
Vector lightorg = m_pModelInstance->m_plightmatrix.VectorITransform( pl->origin ); |
tr.modelorg = m_pModelInstance->m_plightmatrix.VectorITransform( RI->vieworg ); |
light *= textureCube( u_ProjectMap, -normalize( var_LightVec )).rgb; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Особо ничего не поменялось. Аттенюация сменилась на обратную, теперь огромные модели наоборот видны издалека, а маленькие освещаются вплотную (раньше было с точностью наоборот).
Вот видео. Сначала тут точечный источник, закрепленный на игроке, потом показываю обычный фонарик:
https://www.youtube.com/watch?v=Pbi_Q2yph0A
Правильность наложения теней можно проверить по брашевому полу. На некоторых моделях от омнилайта она ложится правильно, потому что у них angles 0 0 0. А другие повернуты и все съезжает. Если модель лежит на боку, то тень тоже на боку будет. А от прожектора почему-то тени ложатся всегда правильно.
Видимо, потому что подход разный:
shadow = ShadowProj( var_ShadowCoord, u_ShadowParams.xy, dot( N, L )); // прожектор |
shadow = ShadowOmni( -var_LightVec, u_ShadowParams ); // динлайт |
__________________
Мой мод на Xash
Эй-эй, так я про тени ничего не говорил, только про свет. А свет вроде как правильно начал накладываться. Он же у тебя раньше обрезался?
Добавлено 19-12-2021 в 13:40:
matrix4x4 lightView = pl->modelviewMatrix.ConcatTransforms( m_pModelInstance->m_protationmatrix ); |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Про тени я без претензий, просто показываю наблюдение. Проекция теней от динлайта не учитывает angles модели. И скейл кажется тоже...
__________________
Мой мод на Xash
Если так и не разберёшься, может весной найду время.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Может проще избавиться от локальных координат и сделать освещение динлайтами в мировых? Знать бы хоть где посмотреть в параное. Шейдеры выглядят плюс-минус одинаково.
__________________
Мой мод на Xash
Можно завести отдельный юниформ для скейла, поворот и позицию передавать через кость и оставить в покое modelview матрицу?
__________________
Мой мод на Xash
У кого-нибудь бывало, что при переходе на следующую карту нод граф создается, но с невалидными связями? (так что impulse 197 ничего не показывает).
В консоль при этом пишется "OFFGROUND!" - отсюда https://github.com/ValveSoftware/ha...nodes.cpp#L1820
Пока не определил причину, но похоже как-то связано с движением монстров в промежутке времени между загрузкой карты и созданием графа (он создается с задержкой).
В логах (.nrp файлы) всё одинаково до Walk rejection.
Пример части лога при валидной генерации:
code:
Walk Rejection: ------------------------------------------------------------------------------- Node 0: NODE_LARGE_HULL step 448 NODE_LARGE_HULL step 448 NODE_SMALL_HULL step 624 Rejected Node 35 - Unreachable by Any Hull
code:
Walk Rejection: ------------------------------------------------------------------------------- Node 0: NODE_SMALL_HULL step 0 NODE_SMALL_HULL step 0 NODE_SMALL_HULL step 0 NODE_SMALL_HULL step 0 NODE_SMALL_HULL step 0 NODE_SMALL_HULL step 0 Rejected Node 35 - Unreachable by Any Hull
__________________
I'm on github
I'm on opendesktop.org
Я в Fitzquake столкнулся с парой странных вещей. Например bound не работает, хотя никаких ошибок нет, просто не даёт эффекта. Или VectorAngles с какого-то момента стал корруптить тот компонент вектора который в коде пишется первым. Второй компонент пишется нормально. Причем если писать сначала в локальную переменную а потом из неё в компонент вектора, то ничего не корруптится, просто получается ноль. Я сейчас мучаю Cam_UpdateForDrawing.
В аттаче карта. Барник стоит посреди пустой комнаты, но покрывается желтыми частицами как если бы застрял (stuck in wall--level design error). Похоже, происходит так, только если он стоит достаточно близко к центру карты.
Собственно, желтые пятна не проблема, но хотелось бы узнать, почему игра считает, что он застрял?
__________________
I'm on github
I'm on opendesktop.org
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну bound это мини функция которая ограничивает число между двумя крайними значениями: bound(a, x, b)
__________________
Мой мод на Xash
__________________
I'm on github
I'm on opendesktop.org
Я его просто вниз опустил и скомпилил, не было желтых партиклей о.о
__________________
Мой мод на Xash
Aynekko, а ты перекомпилировал оригинал (без изменения высоты)? Может, зависит от компиляторов. Ну и я запускаю на голдсорсе на обычной ХЛ, если что.
__________________
I'm on github
I'm on opendesktop.org
Слушай, а теперь интересно. Еще раз взял оригинал, сколько ни двигаю вниз - все равно партикли. Не думаю, что дело в компиляторах. Наверное я чуть вбок его подвинул.
Добавлено 22-12-2021 в 21:23:
Ага. Проверил со всех сторон. Партикли возникают, если барник находится в районе 32 юнитов от центра. Со всех сторон, если смотреть на виде сверху. Ставил его на расстоянии 31-32-33 по всем осям. Высота всегда была одинаковая - 3 юнита от пола. Интересно. Наверное, какая-то движковая особенность.
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
I'm on github
I'm on opendesktop.org
В общем там в матчлибе я не объявил в хидере новую функцию. И потом когда я ее использовал в коде, парой строчек ниже там была эта VectorAngles которая и стала давать порченый результат.
Вопрос такой вылез, в ксаше есть папка scripts, там можно сделать фон в меню виде карты, но какие ещё есть скрипты по мимо того же меню?
__________________
И главное, Артём, помни: не ешь желтый снег!
Не могу никак побороть баг с лучом трипмины. На другом конце карты есть одна трипмина, луч у нее активируется через 2.5 секунды. Естественно не в PVS. Вот две ситуации:
1) Через 5 сек вылетаю с ноуклипом, лечу туда. Луч есть.
2) Лечу к месту трипмины по карте, НЕ вылетая за ее пределы, чтобы не задеть PVS мины раньше времени. Прилетел к мине, луча нет.
Изредка бывает, что во второй ситуации луч таки есть. Процентов 10.
На клиенте есть функция R_AddEntity, где проверка на ET_BEAM. Когда луча не видно, эта проверка не срабатывает. Значит луч не приходит на клиент вообще.
Сделал вот так. Это в MakeBeam у трипмины
1 | m_pBeam = CBeam::BeamCreate( g_pModelNameLaser, 10 ); |
2 | if( m_pBeam ) |
3 | { |
4 | m_pBeam->pev->effects |= EF_SKIPPVS; |
5 | m_pBeam -> PointEntInit( tr.vecEndPos, entindex() ); |
__________________
Мой мод на Xash
В общем решил, что я смогу обхитрить мину и завел ей спаунфлаг "стартовать выключенной", чтобы активировать по триггеру (по тихому и без звуков), когда игрок гарантированно будет в PVS. И это не сработало
- спавнюсь, лечу к мине ноуклипом, запускаю - луч есть;
- спавнюсь, лечу к мине по карте, не вылетая за пределы карты. Вижу ее в прямой видимости, активирую. Луча НЕТ. MakeBeam срабатывает - вывел в консоль. А луча нет... Делаю сейврестор, луч появляется.
Это какой-то несусветный бред. Если раньше я мог хоть идентифицировать где багуется примерно, то сейчас я даже примерно не могу понять, что не так.
Добавлено 25-01-2022 в 22:25:
Но вот одну деталь обнаружил. Спавнюсь и сразу же делаю сейврестор. То есть мина еще не успела сделать луч. И о чудо, луч есть всегда. Вроде как. Еще потестю.
Добавлено 25-01-2022 в 22:29:
Да, так и есть.
Я вот знаком с ситуацией, когда что-то не работает после сейврестора. Но чтобы не работало до сейврестора - это просто вау.
__________________
Мой мод на Xash
Aynekko не знаю, связано ли это с твоей проблемой, но порядок строк в AddToFullPack сначала отсекает энтитю по PVS, а потом уже задаёт ей тип ENTITY_BEAM. Который, скорее всего, особым образом обрабатывается движком.
1 | // Ignore if not the host and not touching a PVS/PAS leaf |
2 | // If pSet is NULL, then the test will always succeed and the entity will be added to the update |
3 | if ( ent != host ) |
4 | { |
5 | if ( !ENGINE_CHECK_VISIBILITY( (const struct edict_s *)ent, pSet ) ) |
6 | { |
7 | return 0; |
8 | } |
9 | } |
1 | state->entityType = ENTITY_NORMAL; |
2 |
3 | // Flag custom entities. |
4 | if ( ent->v.flags & FL_CUSTOMENTITY ) |
5 | { |
6 | state->entityType = ENTITY_BEAM; |
7 | } |
REMOVE_ENTITY(ENT(pev)); |
baseline->effects = entity->v.effects; |
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Мне сказали, чтобы для статиков отключать тени через EF флаг.
__________________
Мой мод на Xash
Ну сделай проверку там. Если playermodelindex равен нулю - это значит спавнится статик.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Да, баг больше не проявляется. Надеюсь правильно поставил
1 | if ( player ) |
2 | { |
3 | baseline->mins = player_mins; |
4 | baseline->maxs = player_maxs; |
5 | // ... и далее |
6 | } |
7 | else |
8 | { |
9 | baseline->mins = entity->v.mins; |
10 | baseline->maxs = entity->v.maxs; |
11 | baseline->sequence = entity->v.sequence; |
12 | baseline->colormap = entity->v.colormap; |
13 | baseline->modelindex = entity->v.modelindex; |
14 | baseline->movetype = entity->v.movetype; |
15 | if( playermodelindex == 0 ) |
16 | baseline->effects = entity->v.effects; |
17 | // ... |
__________________
Мой мод на Xash
__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord
там какая-то часть эффектов - совсем не эффекты, очевидно же.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
На скрине совсем небольшой кусочек карты. В логе вот такое:
Warning: too many light styles on a face (2111 faces overflowed) |
Warning: too many light styles on a patch (48393 patches overflowed) |
-gamma 0.7 -smooth 75 -blur 4 -bounce 8 -threads 7 |
1 | 498 base patches, required 130.34 Kb |
2 | 13 direct lights |
3 | <...> |
4 | total facelight data: 3.45 Mb |
5 | <...> |
6 | 55490 luxels affected by direct light |
7 | 161001 luxels reached by direct light |
8 | <...> |
9 | BounceLight 8: |
10 | 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% (0.00 secs) |
11 | Warning: too many light styles on a face (2111 faces overflowed) |
12 | Warning: too many light styles on a patch (48393 patches overflowed) |
13 | <...> |
14 | Reduce lightmap from 739.97 Kb to 673.98 Kb |
__________________
Мой мод на Xash
А не было такого, что если лампочке прописать имя, то ей назначится какой-то лайтстиль, отличный от 0?
Добавлено 29-01-2022 в 12:19:
ncuxonaT
1 | void CLight :: Spawn( void ) |
2 | { |
3 | if (FStringNull(pev->targetname)) |
4 | { // inert light |
5 | REMOVE_ENTITY(ENT(pev)); |
6 | return; |
7 | } |
8 |
9 | if (m_iStyle >= 32) |
10 | { |
11 | // CHANGE_METHOD(ENT(pev), em_use, light_use); |
12 | if (FBitSet(pev->spawnflags, SF_LIGHT_START_OFF)) |
13 | LIGHT_STYLE(m_iStyle, "a"); |
14 | else if (m_iszPattern) |
15 | LIGHT_STYLE(m_iStyle, (char *)STRING( m_iszPattern )); |
16 | else |
17 | LIGHT_STYLE(m_iStyle, "m"); |
18 | } |
19 | } |
Похоже да, из-за кучи лампочек. Там есть 3 лампочки, которые вкл/выкл, но 2 из них с очень маленьким радиусом (25 четвертое число).
Действительно задал дверям блокировку света, 2111 фейсов уменьшилось до 161. Спасибо.
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вдогонку к проблемам с освещением. Никак не могу побороть вот этот лайтлик. Свет идет, судя по всему, из другой абсолютно точно замкнутой комнаты. На скрине слева. Отчего это вообще зависит? Трасса в rad проходит сквозь браши?
__________________
Мой мод на Xash
Из скрина ничерта непонятно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Левая полоса светлая. Должна быть темной. Вторая полоса уже освещена фонариком. Никак не могу понять, откуда это световое пятно идет.
__________________
Мой мод на Xash
Геометрию покажи, где там лампочки, где что. Вид сверху.
И можно снабдить пояснительными стрелками, где по твоему утечка.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вот уж как смог показываю. Две комнаты. Потолки я скрыл в джеке, чтобы было видно (в игре они есть). С gl_wireframe одна комната не рисует другую, и обратно. Так что просвета нет.
Тут две лампы - красная в одной комнате, текстурная белая в другой.
- удалил только красную лампу - пятна нет
- удалил только текстурную лампу - есть еле-еле видное красноватое пятно на том месте.
- когда есть обе лампы, там яркое белое пятно.
- пятно проявляется, если у красной лампы радиус больше 50 (ну или как он правильно называется, четвертое число)
- поставил радиус 140 у красной...пятна нет О.о
Добавлено 29-01-2022 в 17:14:
С радиусом 140 не прокатило, скомпилил бОльшую часть карты и опять пятно, хотя в этом примере оно уже пропало...
https://drive.google.com/file/d/1eS...iew?usp=sharing
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
привет всем, кто знает, есть ли в халфе такая команда, позволяющая смотреть хит боксы тригеры энтити прямо в игре ?
Добавлено 05-02-2022 в 21:56:
помню что такое было, но что плохо помню
__________________
илья
r_drawentities 3 - хитбоксы
showtriggers 1 - но сработает после перезагрузки и не со всеми компиляторами карт. С VHLT не сработает, к примеру.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
во спасибо как раз то что нужно
Добавлено 05-02-2022 в 22:31:
а вот это команда showtriggers 1 не работает.
__________________
илья
на оригинальных халфовских картах работает. Но только после перезагрузки уровня.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
в ксашмоде надо ввести gl_renderer 0 и showtriggers_toggle
__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))
перехожу на другой двиг
Там интересно. Проверка на состояние квара есть, а сам квар похоже выпилили.
Но в Ксаше я его вернул, там эта штука работала.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А почему MSG_WriteShort обнуляет 1.000?
Crystallize попробуй явным образом привести его к шорту.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша (short) не помогает, пришлось менять на ReadFloat-WriteFloat
Добавлено 08-02-2022 в 01:32:
Наверное что-то сломается, но пока не заметил.
^лол нет, не об этом
Что может быть не так с трейслайном в фитцквейке? Как я ни пытаюсь сделать все правильно, длина трейса выдается всегда сотнями юнитов, и он визуально проходит сквозь стенки.
И еще, как бы вы алггритмизировали ситуацию когда игрок заворачивает за угол коридора? Вот этот выпирающий угол, можно ли его аналитически протрейсить и обнаружить?
Всё с трейслайном в порядке, ты им как-то неправильно пользуешься.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша обнаружить выпуклые пары смежных фейсов под прямым углом друг от друга. Или смежные пары лифов расположенных буквой г
Ты какую-то бредятину щас написал, не?
Еще раз - зачем тебе угол обнаруживать? С какой целью?
Добавлено 20-02-2022 в 16:09:
Тебе именно угол или просто дверной проём?
Пусти вперёд хулл по размеру игрока, ну скажем на 128 юнитов.
И если он ни во что не упёрся - пусти два хулла под углом 90 градусов влево и вправо. Это тебе как отправная точка. Точечные нет смысла пускать.
Добавлено 20-02-2022 в 16:17:
Вот, даже картинку нарисовал
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В коде первокваки есть эта жалоба что у джоя WingMan Warrior нулевое положение 32668 вместо 32768. А я подключил через китайский переходник геймпад от 1 соньки но со стиками, так у него вообще 32511.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша т.е. у каждого экземпляра будет другая цифра?
от калибровки только хуже получилось
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Crystallize у меня никогда не было жостика, ничего не могу сказать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
как повысить урон от падения?
__________________
И главное, Артём, помни: не ешь желтый снег!
hgrunt_2020 CHalfLifeRules::FlPlayerFallDamage.
__________________
И главное, Артём, помни: не ешь желтый снег!
Поищи этот комментарий, навряд ли его удалили:
// check to see if player landed hard enough to make a sound |
// falling farther than half of the maximum safe distance, but not as far a max safe distance will |
// play a bootscrape sound, and no damage will be inflicted. Fallling a distance shorter than half |
// of maximum safe distance will make no sound. Falling farther than max safe distance will play a |
// fallpain sound, and damage will be inflicted based on how far the player fell |
как замедлить игрока, когда он находится в воде?
__________________
И главное, Артём, помни: не ешь желтый снег!
ну по пояс?
__________________
И главное, Артём, помни: не ешь желтый снег!
В PM_WalkMove сделать проверку if (pmove->waterlevel >= 2) и снизить pmove->velocity. Не забыть сделать то же самое в PM_WaterMove. Первое - когда игрок касается ногами твёрдой поверхности, второе - когда не касается, а уже плывёт.
Вот почему такое происходит? Скейл текстуры 0.25.
Добавлено 26-02-2022 в 21:10:
При скейле 0.5 все нормально. Опять какие-то лимиты?
__________________
Мой мод на Xash
Наверное слишком много лифов нагенерило. Хотя хз, я там лимит в 512 штук ставил на стеке.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
Ну что тут понимать. Дело не в скейле. Скейл провоцирует лавинообразный рост лифов из-за разбиения полигонов. Полигоны в свою очередь разбиваются из-за лайтмапы. Вся эта куча лифов не влезает в кэш, собирающий полигоны для динамического освещения. А раз не влезает - то они не рендерятся и освещения нет.
1 | bool Mod_BoxVisible( const Vector &mins, const Vector &maxs, const byte *visbits ) |
2 | { |
3 | short leafList[48]; <--- |
4 | leaflist_t ll; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
__________________
Мой мод на Xash
Я с таким не сталкивался. Но да, возможно на грасс_тесте тоже есть подобные места.
Добавлено 27-02-2022 в 15:14:
Так я не понял, у тебя с лайтмапой проблема или с фонариком?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Да, портятся все лайтмапы за пределами 8192. Просто это слабо проявляется на скейлах вроде 1. На 0.25 проявляется моментально. Где лимит опять засел?
Добавлено 27-02-2022 в 15:15:
__________________
Мой мод на Xash
Ты меня абсолютно сбил с толку. Всё что я тебе писал касалось динамического света. Потому что ты зачем-то включил фонарик на втором скриншоте.
Добавлено 27-02-2022 в 15:48:
В следующий раз излагай, так сказать более чётко.
Добавлено 27-02-2022 в 15:51:
Поясни насчёт скейла. Ты старым дедовском способом увеличиваешь разрешение лайтмапы? Почему ты не хочешь использовать прямое регулирование через zhlt_texturestep или как он там называется, я забыл уже.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
В общем, разобрались с психопатом что это за баг был. У текстуры лайтмапы/делюксмапы был выставлен GL_CLAMP_TO_EDGE, из-за чего такие артефакты шли. Мы убрали текстурный флаг TF_CLAMP и стало нормально.
__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord
Интересно
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
что мешает включить показ лайтмап?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну вот. Справа как должно быть. Слева сломано.
__________________
Мой мод на Xash
кстати тоже сталкивался с почернением лайтмапы на фейсах со странными скейлами
Aynekko попробуй проверить всё это под оригинальным Ксашем, собранным шестой студией.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша агась. Это похоже FWGS виноват. Но tf_clamp все равно убрать было нужно - там лайтмапа не рисовалась и на 4529. А конкретно это место на 4529 пофиксилось.
__________________
Мой мод на Xash
скейл текстуры 0.1 и 0.2, из параметров только zhlt_maxextent 128, индирект есть
Crystallize жесть, это gl_renderer 0? Или ксашмод?
__________________
Мой мод на Xash
Aynekko ксашмод
вот без макэкстента
Добавлено 28-02-2022 в 14:34:
от рендерера не зависит
Crystallize убери TF_CLAMP из TF_DELUXMAP и TF_LIGHTMAP. Это в r_local.h в клиентке
Добавлено 28-02-2022 в 10:37:
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша мой ксашмод стоковый если что
__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord
Там нужно явным образом привести всё к даблам, чтобы компилятор успокоился. Кажется в FitzQuake есть образец как это сделать.
Я давно об этом знаю, но не парился, поскольку для шестой студии проблема неактуальна.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
https://github.com/FWGS/xash3d-fwgs/pull/781
Вот тут я сделал все фиксы касательно лайтмапы, теперь всё окей. И на движковом рендере, и в прайме, осталось лишь ждать когда примут PR.
Добавлено 28-02-2022 в 18:06:
Уже приняли, можно взять continious build движка и протестить на нем, если кто хочет.
__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord
Вы бы движок что-ли переписали на кресты и избавились от этих дефайнов с дот-продуктоме.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
https://github.com/FWGS/xash3d-fwgs/issues/782
Не тут то было, пофиксилось одно, сломалось другое. Почему так может быть?
Добавлено 28-02-2022 в 19:14:
Ну в общем, разобрались что такое, просто я зря переменные перевел в double.
__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord
Надейтесь на собственные силы всё же. Не надо по каждому чиху писать на форум, тем более что вы уже и сами неплохо спровляетесь. Меня стоит спрашивать, уже как последний шанс, если ничего не помогло.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вот эта хрень, кстати, тоже решилась. Светового пятна больше нет.
https://hlfx.ru/forum/showthread.ph...6807#post206807
__________________
Мой мод на Xash
А вот то, что надо убрать TF_CLAMP - это вероятно такие замечательные драйвера теперь. Потому что я 15 лет ничего подобного не наблюдал.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так стек не очищается принудительно, иначе скорость работы упала бы вдвое.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А, ну я помню твои статьи. Но тут дело в том что оно еще и перезаписывает мои переменные после меня. Бывает все нормально, а потом объявишь еще одну переменную и с какой-то другой начинает твориться вот это.
В каком это смысле - после тебя? Ты что же переменную из стека возвращаешь в другую функцию? Приведи пример.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша не смог больше воспроизвести ни специально ни случайно
похоже что у некоторых фейсов в первокваке неверные нормали. Может такое быть? На стартовой карте, сразу за спиной игрока.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
а что делать с нормалями 0 0 0? У них нет длины и из них не соберешь вектор через VectorMA.
Таких нормалей в карте быть не должно, очевидно же.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вот такая проблемка. В спауне ставлю брашу SetTouch( func ).
В самом func код примерно такой
1 | if( pOther->IsPlayer() ) |
2 | { |
3 | ALERT( at_console, "test\n" ); |
4 | Use( pOther, pOther, USE_TOGGLE, 0 ); |
5 | SetTouch( NULL ); |
6 | } |
__________________
Мой мод на Xash
Ну потому что ты назвал функцию Touch. Когда ты убираешь указатель на нее, срабатывает уже механизм виртуальных функций C++.
Такая вот в халфе заморочка. Дай ей более другое имя.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
Это в cbase.h
1 | virtual void Touch( CBaseEntity *pOther ) |
2 | { |
3 | if( m_pfnTouch ) |
4 | (this->*m_pfnTouch)( pOther ); |
5 |
6 | // forward the blocked event to our parent, if any. |
7 | if( m_hParent != NULL && !m_isChaining ) |
8 | m_hParent->Touch( pOther ); |
9 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
EXPORT по твоему нужен для наследования?
Это механизм сейв-рестора, сделанный на скорую руку - лукап имён методов в таблице экспортов. В виртуальной машине этого не требовалось, там и так все имена доступны.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
бензиновый спрайт
делал спрайт дозиметра, первый фрейм ничего, остальные как будто в бензин окунули, что за дичь? собирал параноевским spritegen
Добавлено 26-03-2022 в 00:08:
причем если собирать спрайты по отдельности бензиновых разводов нет
__________________
И главное, Артём, помни: не ешь желтый снег!
hgrunt_2020 сделай всем кадрам одинаковую палитру в фотошопе.
Параноевский spritegen немного недоделан.
Там по уму надо было все кадры поместить в один гигантский рисунок, чтобы нейросеть построила палитру для него. У меня руки так и не дошли.
Ну может форкеры сделают.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша ладно, я пока обошелся просто отдельными спрайтами
__________________
И главное, Артём, помни: не ешь желтый снег!
hgrunt_2020 делаешь первый кадр в 256 цветов (если он полноцветный). Экспортируешь из него палитру, а потом импортируешь во все остальные. Должно сработать. Я так делаю с текстурами, которые прогоняю через Gigapixel. Потому что эта прога умеет работать только с полноцветными изображениями. Экспорт палитры из 256 -> 256 в полноцветное -> апскейл -> полноцветное в 256 через импорт старой палитры.
Ku2zoff Cпасибо за подсказку с палитрой, я сделал через wally и все кадры стали нормальными
__________________
И главное, Артём, помни: не ешь желтый снег!
Ku2zoff вот так спрайт выглядит после твоего совета https://youtu.be/54y41vny-gw
__________________
И главное, Артём, помни: не ешь желтый снег!
Хороший дозиметр!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ku2zoff мдэ, я думал что дядямишин софт по по всем параметрам лучше, выходит я ошибался, у него и своих косяков хватает, хотя все мы люди и нам свойственно ошибаться)
Добавлено 27-03-2022 в 10:35:
Дядя Миша Метаморф? Над параноей? Он над прайсом работает)
__________________
И главное, Артём, помни: не ешь желтый снег!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
И главное, Артём, помни: не ешь желтый снег!
Я так понял, описательная часть параметра в fgd, идущая после значения, это расширение JACK'а?
code:
chaptertitle(string) : "Chapter Title Message" : "" : "Text displayed when entering the level."
__________________
I'm on github
I'm on opendesktop.org
__________________
__________________
I'm on github
I'm on opendesktop.org
всем привет, как исправить ошибку с новыми декалями ? вот такая вот ошибка вылазиет: Used decal #356 without a name
новый декал добавлял только в decals.h.
__________________
илья
DLL_DECALLIST gDecals |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
угу ясно буду пробовать
Добавлено 17-04-2022 в 22:05:
все спасибо сработало как надо
__________________
илья
как превысить лимит прекеша моделей с 512 на 1000 ? и возможно ли такое ?
__________________
илья
На голде - нет
__________________
Killing Floor: Horzine Outbreak
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
илья
илья2 лимит в движке. Есть два варианта: первый - уменьшить количество студиомоделей и спрайтов. Объединить p_ и w_модели оружий, все гильзы засунуть в одну модель и переключать бодями, все подбираемые итемы и патроны тоже объединить в одну модель. Все прождектайлы (гранаты, ракеты, хорнеты) тоже в одну модель. Спрайты с одинаковой палитрой объединить в один спрайт, и переключать кадры. Таким образом можно сэкономить около сотни позиций. То, что не прекэшится всегда, а грузится для отдельной карты, можно таким же образом оптимизировать: монстров с одинаковыми скелетами объединить в одну модель, спрайты с одинаковой палитрой в один спрайт. Брашевые модели объединять в редакторе: на этом тоже можно сэкономить. От последнего возможны глюки с физикой, надо тестировать.
Второй вариант: перейти на другой движок. Если мод делается на стим-голдсорс, то можно перейти на Sven Engine (это вообще очень классный ход, т.к. Свен в стиме бесплатный, игрокам даже не надо будет покупать халфу, чтобы поиграть в мод). Так же можно перейти на Xash3D FWGS, он совместим со стим-голдсорсом. Ну а если мод делается без привязки к стим версии и кроссплатформенности, можно перейти на ванильный Xash3D.
По лимитам в голдсорсе, мне вот интересно почему в голдсорсе оно так все лимитировано причем на все лимиты, вон старый Дум все с него выросло, есть на него всякие nuts.wad, с тысячами монстров, если комп не тянет оно лагать будет, в крайнем случае 1фпс будет, но не свалится игра. Я конечно понимаю что есть ограничения по памяти, но нельзя ли эту передачу между клиентом и сервером динамической сделать. А тут эти ограничения на модели из-за чего прожектайли в одну модель совать приходится, очень не удобно потом с такими спрайтами и моделями работать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Chyvachok
Я не думаю что валва в 1998 году проектировала свой движок чтобы на нём делали какие то моды. Посмотри ранние билды, там вообще жесть треш и угар. А лимиты скорее всего просто с кваки остались.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
илья
New message started when msg *23* has not been sent yet: вот такая вот ошибка вылетает когда я пытаюсь добавить такой код:
// ExplodeTouch( pOther );
//initialize a vector that finds the center of the RPG models hitbox
Vector vecSpot2 = pev->origin + (pev->mins + pev->maxs) * 0.5;
killit++;
if ( killit == 1 )
{
// blast circle "The Infamous Disc of Death"
MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, pev->origin );
WRITE_BYTE( TE_BEAMCYLINDER );
WRITE_COORD( pev->origin.x);//center of effect on x axis
WRITE_COORD( pev->origin.y);//center of effect on y axis
WRITE_COORD( pev->origin.z);//center of effect on z axis
WRITE_COORD( pev->origin.x);//axis of effect on x axis
WRITE_COORD( pev->origin.y);//axis of effect on y axis
WRITE_COORD( pev->origin.z + 300 ); // z axis and Radius of effect
WRITE_SHORT( PRECACHE_MODEL( "sprites/white.spr" ) );//Name of the sprite to use, as defined at begining of tut
WRITE_BYTE( 0 ); // startframe
WRITE_BYTE( 0 ); //framerate in 0.1's
WRITE_BYTE( 40 ); //Life in 0.1's
WRITE_BYTE( 302 ); //Line Width in .1 units
WRITE_BYTE( 0 ); //Noise Amplitude in 0.01's
WRITE_BYTE( 255 ); // Red Color Value
WRITE_BYTE( 255 ); // Green Color Value
WRITE_BYTE( 192 ); // Blue Color Value
WRITE_BYTE( 128 ); // brightness
WRITE_BYTE( 0 ); // speed
MESSAGE_END();
pev->effects |= EF_NODRAW;//stop showing the model!!
pev->velocity = g_vecZero;//set velocity to "0"
UTIL_ScreenShake( pev->origin, 500.0, 400.0, 6.0, 1800 );
entvars_t *pevOwner;
if ( pev->owner )
pevOwner = VARS( pev->owner );
else
pevOwner = NULL;
pev->owner = NULL; // can't traceline attack owner if this is set
/*Big Damage
The first parameter is the center of where the damage radiates from. The second is the inflictor
( or what caused it ). The third is the attacker (or what caused this ). The fourth parameter is the
damage to inflict, the fifth is the class to ignore ( or what entity not apply damage to ). The final
parameter is the damage type--(with multiple damage types delineated by a | ).*/
::RadiusDamage( pev->origin, pev, pevOwner, 400, 1000, CLASS_NONE, DMG_BLAST | DMG_BURN | DMG_ALWAYSGIB );
EMIT_SOUND(ENT(pev), CHAN_STATIC, "weapons/nuke1.wav", 1.0, 0.3);
MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, pev->origin );
WRITE_BYTE( TE_SPRITE );//additive sprite plays though once
WRITE_COORD( pev->origin.x );//where to make the sprite appear on x axis
WRITE_COORD( pev->origin.y );//where to make the sprite appear on y axis
WRITE_COORD( pev->origin.z + 128 );//Creates sprite 128 units above model's center
WRITE_SHORT( PRECACHE_MODEL( "sprites/fexplo.spr" ) );//Name of the sprite to use, as defined at begining of tut
WRITE_BYTE( 400 ); // scale in .1 units --by comparison the player is 72 units tall
WRITE_BYTE( 255 ); // brightness (this is as bright as it gets)
MESSAGE_END();
UTIL_Remove( this );
}
killit = 0;
в функцию взрыва гранаты CGrenade::Explode( TraceResult *pTrace, int bitsDamageType )
вопрос как исправить эту големотью ?
__________________
илья
I think you're using too many TEMPENTITY-es. Try reducing them.
btw: are you making a nuke launcher?
__________________
FlatLine Arena | Tutorials
If you don't like something, MOD it!
Перед этим идёт еще какая-то мессага, у которой ты забыл вызвать MESSAGE_END();
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
ну все проблема легко решается сам справился во первых вместо
PRECACHE_MODEL( "sprites/white.spr" )
PRECACHE_MODEL( "sprites/fexplo.spr" )
надо поставить
m_iSpriteTexture
и
m_iExplode
еще надо поставить extern в grenade
extern short m_iSpriteTexture;
extern short m_iExplode;
и сам прекеш в weapons.cpp
DLL_GLOBAL short m_iSpriteTexture;
DLL_GLOBAL short m_iExplode;
m_iSpriteTexture = PRECACHE_MODEL("sprites/white.spr");
m_iExplode = PRECACHE_MODEL( "sprites/fexplo.spr" );
все все просто оказывается. Итог получилась ядерная граната
__________________
илья
__________________
FlatLine Arena | Tutorials
If you don't like something, MOD it!
__________________
илья
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
илья2 меня впечатляет твой прогресс, на самом деле.
__________________
илья
Непонятно откуда взявшийся ACT 23
после того как я добавил SetActivity для барни у меня в консоли начала вылазить ошибка
monster_barney has no sequence for act:23
что с ней делать и как её починить?
Добавлено 02-05-2022 в 06:08:
Вот функция
1 | void CBarney :: SetActivity ( Activity NewActivity ) |
2 | { |
3 | int iSequence = ACTIVITY_NOT_AVAILABLE; |
4 | void *pmodel = GET_MODEL_PTR( ENT(pev) ); |
5 |
6 | switch ( NewActivity) |
7 | { |
8 | case ACT_RUN: |
9 | if ( pev->health <= BARNEY_LIMP_HEALTH ) |
10 | { |
11 | // limp! |
12 | iSequence = LookupActivity ( ACT_RUN_HURT ); |
13 | } |
14 | else |
15 | { |
16 | iSequence = LookupActivity ( NewActivity ); |
17 | } |
18 | break; |
19 | case ACT_WALK: |
20 | if ( pev->health <= BARNEY_LIMP_HEALTH ) |
21 | { |
22 | // limp! |
23 | iSequence = LookupActivity ( ACT_WALK_HURT ); |
24 | } |
25 | else |
26 | { |
27 | iSequence = LookupActivity ( NewActivity ); |
28 | } |
29 | break; |
30 | case ACT_IDLE: |
31 | if ( m_MonsterState == MONSTERSTATE_COMBAT ) |
32 | { |
33 | NewActivity = ACT_IDLE_ANGRY; |
34 | } |
35 | iSequence = LookupActivity ( NewActivity ); |
36 | break; |
37 | default: |
38 | iSequence = LookupActivity ( NewActivity ); |
39 | break; |
40 | } |
41 |
42 | m_Activity = NewActivity; // Go ahead and set this so it doesn't keep trying when the anim is not present |
43 |
44 | // Set to the desired anim, or default anim if the desired is not present |
45 | if ( iSequence > ACTIVITY_NOT_AVAILABLE ) |
46 | { |
47 | if ( pev->sequence != iSequence || !m_fSequenceLoops ) |
48 | { |
49 | pev->frame = 0; |
50 | } |
51 |
52 | pev->sequence = iSequence; // Set to the reset anim (if it's there) |
53 | ResetSequenceInfo( ); |
54 | SetYawSpeed(); |
55 | } |
56 | else |
57 | { |
58 | // Not available try to get default anim |
59 | ALERT ( at_console, "%s has no sequence for act:%d\n", STRING(pev->classname), NewActivity ); |
60 | pev->sequence = 0; // Set to the reset anim (if it's there) |
61 | } |
62 | } |
__________________
И главное, Артём, помни: не ешь желтый снег!
hgrunt_2020 это ACT_SIGNAL3, CTalkMonster используют эту активность во время разговора. Подразумевается кивок головой или какое-то другое движение, например жест рукой. Т.к. в моделях барника и учёного такой активности нету, сделана проверка. Видимо, планировалась целая куча анимаций во время разговора, но что-то пошло не так, и от этого отказались. Добавь проверку в CBarney::SetActivity, проблема исчезнет.
if (NewActivity == ACT_SIGNAL3 && (LookupActivity(ACT_SIGNAL3) == ACTIVITY_NOT_AVAILABLE)) |
NewActivity = ACT_IDLE; |
Ku2zoff О,спасибо. только все же остается вопрос, у меня ни в SetActivity ни в модели нет ACT_SIGNAL3, что же тогда источник ошибки
__________________
И главное, Артём, помни: не ешь желтый снег!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
1 | void CTalkMonster :: SetActivity ( Activity newActivity ) |
2 | { |
3 | if (newActivity == ACT_IDLE && IsTalking() ) |
4 | newActivity = ACT_SIGNAL3; |
5 |
6 | if ( newActivity == ACT_SIGNAL3 && (LookupActivity ( ACT_SIGNAL3 ) == ACTIVITY_NOT_AVAILABLE)) |
7 | newActivity = ACT_IDLE; |
8 |
9 | CBaseMonster::SetActivity( newActivity ); |
10 | } |
Помню дядя миша писал тутор о лодах, и там была проверка на бодигруппу, можно ли повторить этот код но только на сервере?
Сама проверка на лод-бодигруппу
1 | int CStudioModelRenderer::StudioCheckLOD( void ) |
2 | { |
3 | mstudiobodyparts_t *m_pBodyPart; |
4 |
5 | for( int i = 0; i < m_pStudioHeader->numbodyparts; i++ ) |
6 | { |
7 | m_pBodyPart = (mstudiobodyparts_t *)((byte *)m_pStudioHeader + m_pStudioHeader->bodypartindex) + i; |
8 |
9 | if( !stricmp( m_pBodyPart->name, "LOD" )) |
10 | return m_pBodyPart->nummodels; |
11 | } |
12 | return 0; // no lod-levels for this model |
13 | } |
1 | int GetBodygroupByName( void *pmodel, entvars_t *pev, int iGroup ) |
2 | { |
3 | studiohdr_t *m_pStudioHeader; |
4 | mstudiobodyparts_t *m_pBodyPart; |
5 | m_pStudioHeader = (studiohdr_t *)pmodel; |
6 | if (! m_pStudioHeader) |
7 | return 0; |
8 | for( int i = 0; i < m_pStudioHeader->numbodyparts; i++ ) |
9 | { |
10 | m_pBodyPart = (mstudiobodyparts_t *)((byte *)m_pStudioHeader + m_pStudioHeader->bodypartindex) + i; |
11 |
12 | if( !stricmp( m_pBodyPart->name, "weapons" )) |
13 | return m_pBodyPart->nummodels; |
14 | } |
15 | return 0; // no weapons for this model |
16 | } |
__________________
И главное, Артём, помни: не ешь желтый снег!
hgrunt_2020 так чтож ты сделал?
Ты же ничего не сделал!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша ну перенес код на сервер с мелкими поправками
__________________
И главное, Артём, помни: не ешь желтый снег!
Так у тебя название функции не соответствует тому, что она делает.
У тебя функция берёт по имени, а имя ("weapons" ) внутри прописано намертво.
Так не годится.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А вроде бы есть функция GetBodyGroup, так ведь? Только она возвращает конкретный номер, а не имя. Зачем такие сложности?
Ku2zoff У меня 6 моделей для одного нпс, и у всех нпс от 4 до 11 бодигрупп, да это не удобно, но зато нпс разнообразные
Добавлено 07-05-2022 в 01:03:
Дядя Миша я знаю что не годится, я попраил
__________________
И главное, Артём, помни: не ешь желтый снег!
Люди, при попытке сохранится в консоль выдаёт вот такую ошибку
[2022:05:09|22:59:06] Can't find address: 05beb220
[22:59:06] ^1Error:^7 Invalid function pointer in entity![2022:05:09|22:59:06] Can't find address: 05beb220
[22:59:06] ^1Error:^7 Invalid function pointer in entity![2022:05:09|22:59:06] Can't find address: 05beb220
[22:59:06] ^1Error:^7 Invalid function pointer in entity![2022:05:09|22:59:06] Can't find address: 05beb220
[22:59:06] ^1Error:^7 Invalid function pointer in entity![2022:05:09|22:59:06] Can't find address: 05beb220
[22:59:06] ^1Error:^7 Invalid function pointer in entity![2022:05:09|22:59:06] Can't find address: 05beb220
[22:59:06] ^1Error:^7 Invalid function pointer in entity![2022:05:09|22:59:06] Can't find address: 05beb220
[22:59:06] ^1Error:^7 Invalid function pointer in entity![2022:05:09|22:59:06] Can't find address: 05beb220
[22:59:06] ^1Error:^7 Invalid function pointer in entity![2022:05:09|22:59:06] Can't find address: 05beb220
[22:59:06] ^1Error:^7 Invalid function pointer in entity![2022:05:09|22:59:06] Saving game to save/Новая.sav...
[2022:05:09|22:59:06] Image_Resample: from[1280 x 720] to [320 x 200]
[2022:05:09|22:59:06] Write save/Новая.bmp
я уже незнаю что и делать
При этом не сохраняются своиства некоторых энтитей
Добавлено 09-05-2022 в 16:13:
еще и адрес меняется после перезахода в игру
__________________
И главное, Артём, помни: не ешь желтый снег!
конвертация карт HL1 в HL2
Привет, можно ли конвертировать карту из HL 1 в HL 2? И как это сделать? Мне одна очень понравилась в свое время, отел бы на вторую часть перенести.. (заранее благодарен за ответ), какрту прикрепил ниже (просто может кто такую видел на 2й части если что)
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша а что ж я натворил, и как исправить?
Добавлено 10-05-2022 в 00:07:
Дядя Миша а что ж я натворил, и как исправить?
__________________
И главное, Артём, помни: не ешь желтый снег!
Да откуда я знаю?
Когда у меня такое случилось, я всё бросил и начал писать Xash3D.
Потому что так и не разобрался как это исправить. Потом конечно разобрался, но уже было поздно.
Добавлено 10-05-2022 в 00:35:
А не, это не та ошибка. Эта не страшная. Страшно, когда тебе движок напишет:
DAMN! Even the engine couldn't FindEntityByVars! |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Такой вот нубский вопрос. В общем, делаю я ландшафт треугольными брашами. Понятное дело коллизия у них состоит из 5-ти фейсов, как я понимаю? На стыках часто проскакивают непонятные невидимые стены, которые причем односторонние. Как бороться с этим? У меня тулзы от п2. Я читал в инете, что надо использовать текстуру бевел, но Дядя Миша ее удалил. Вопрос собственно как бороться с этим, а другой вопрос есть ли вообще возможность сделать браш таким, чтобы коллизия была только на одном фейсе, а все остальные проходимы? Может в этом дело?
__________________
Мой мод на Xash
Aynekko вручную делаешь-то? Используй генератор ландшафтов лучше. Я им грасс_тест генерил, никаких невидимых стыков там нет.
Ну или используй SOLIDHINT вместо BEVEL (которого нет).
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вручную, генератором пока не пользовался, не интересовался. Надеюсь тут где-то завалялся тутор.
Попробую солидхинт, сейчас пока выручает zhlt_precisionclip, у него есть какие-то странности на стыках (но терпимо, какие-то подскоки), но провалов никаких нет
__________________
Мой мод на Xash
Всем привет! Ну что, можете ржать. Накрылся мой мод медным тазом. Хотел 50 оружий в свой мод поставить, но нет, не получается. Выше 31 никак. Добавляю больше пушек. вылет какой то. Что делать дальше? Как это исправить ????????
__________________
илья
Ну что делать? Читать мой тутор, чтож еще-то:
https://hlfx.ru/forum/showthread.php?s=&threadid=5053
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
илья2 Дядя Миша писал тутор, здесь на форуме, по добавлению поддержки 64 оружий. Стим-версия голдсорса это поддерживает на уровне движка. Есть ещё мод от товарища Ghoul[BB] (кстати, где он, жив ли?), там лимит превышен по тутору БУзера, что ли... Короче, есть джва варианта. Оба предполагают много изменений на сервере и клиенте и кастомные мессаги для передачи данных о пушках на клиент.
http://www.half-life.ru/forum/showt...p?threadid=6129 делал я по тутору бузера не сработало тутор дяди миши слишком замороченный например я не могу понять как сделать это и нужно ли это вообще:Теперь нам надо исключить все обращения к pev->weapons и заменить их на вызовы наших новых функций
__________________
илья
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
илья
илья2 научись пожалуйста цитировать. Выделяешь текст, который хочешь процитировать и нажимаешь кнопку "Цитата".
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
в общем не компилиться
BOOL HasWeapon( int weaponnum ) { return FBitSet( m_iWeapons[weaponnum >> 3], BIT( weaponnum & 7 )); }
void AddWeapon( int weaponnum ) { SetBits( m_iWeapons[weaponnum >> 3], BIT( weaponnum & 7 )); }
в Chud поставил ошибки пишет
error C2146: syntax error : missing ';' before identifier 'HasWeapon'
error C2501: 'BOOL' : missing storage-class or type specifiers
warning C4183: 'HasWeapon': member function definition looks like a ctor, but name does not match enclosing class
__________________
илья
Тутор прочитан невнимательно, вот и не компилится.
1 | // bit routines |
2 | #define BIT( n ) (1<<( n )) |
3 | #define SetBits( iBitVector, bits ) ((iBitVector) = (iBitVector) | (bits)) |
4 | #define ClearBits( iBitVector, bits ) ((iBitVector) = (iBitVector) & ~(bits)) |
5 | #define FBitSet( iBitVector, bit ) ((iBitVector) & (bit)) |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
так я же добавил в const.h
Добавлено 12-05-2022 в 17:40:
и из util.h удалил 3 функции
__________________
илья
И про BOOL там еще отдельно внизу спрашивали:
https://hlfx.ru/forum/showthread.ph...8941#post168941
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Херня твой тутор. не работает ничего. Все добавил, как надо скомпилировал, все равно вылет какой то и все. А на оригинальных исходниках попробовал, там фонарик не работает, не включается, переключения оружий не работает.
Да и костюм в самом начале дали. когда его вообще не должно быть по идее.
Ясно, понятно. Надо другой мод делать. Про 50 пушек придется забыть.
Добавлено 12-05-2022 в 19:21:
доказательство хотя бы есть что этот тутор рабочий ?
__________________
илья
Ну во первых тут тебе никто ничего не должен.
Во вторых, вот Чувачок отписался, что у него всё получилось
https://hlfx.ru/forum/showthread.ph...8943#post168943
Если для тебя подобные простейшие вещи вызывают такие затруднения, значит кодинг действительно не твоё.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
илья
__________________
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
ну а что я должен врать сказать что все хорошо что все нормально если я сказал что тутор не рабочий значит я правду говорю хоть она и выглядит лживой !
Добавлено 12-05-2022 в 21:02:
__________________
илья
__________________
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
илья
Так если ты говоришь что ты никому ничего не должен, почему тогда тебе всё должны доказывать?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
илья2
Ты не переделывай, а возьми чистый HLSDK и перенеси код из тутора на него.
Если заработает - значит, проблема не в туторе, а в несовместимости с твоим остальным кодом.
Если не заработает - по крайней мере, можно будет легко посмотреть дифф и убедиться, правильно ли ты всё перенёс или нет.
__________________
даже если у меня все получиться все равно будет вылет наверно проблема все таки с моим модом надо попробовать кастомные пушки на новый сдк добавить до 32 если вылета не будет значит проблема точно в моем моде тогда придется все переделывать чего не особо хочется
__________________
илья
Возможно ли пустить traceline, чтобы он столкнулся с несолидным брашем? Мне нужно как-то поймать func_illusionary или триггер трассой. Ну или чем-то похожим. Он ловит только солидные объекты...
Добавлено 20-05-2022 в 15:21:
Впрочем, выкрутился брашем с нестандартным skin -30 (просто взял число подальше от других contents). И проверяю конец трассы через PointContents. Работает. Главное, что браш определяется, и ничего не ломает (особенно хождение монстров через него).
Можно было бы еще определять поверхность и ее нормаль, было бы вообще здорово. Но, полагаю, такое с несолидными брашами не получится провернуть...я не нашел как. Хоть так
__________________
Мой мод на Xash
Да, кастомный контентс задаёшь и всё.
Добавлено 20-05-2022 в 15:30:
Можно еще через групповую маску. Но там браш не задашь, только энтить.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
квака стала внезапно крашиться на SND_PaintChannelFrom8 куда я никогда не лез о_О
Добавлено 21-05-2022 в 01:22:
из-за того что на len поделить забыл
if( len > chase_back.value )
{
VectorScale( camposlocal, chase_back.value/len, camposlocal );
}
Добавлено 21-05-2022 в 01:51:
но даже если там получилось какое-то огромное значение, непонятно почему оно портит другие данные
Ну да, переменная улетает в большие числа. Есть ли какие-то умные способы как такое дебажить? Или просто искать инвалидов каждый раз когда дебагер показывает на нетроганную функцию?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Есть такая проблема: при использовании func_tank_laser игрок может встать так, что заблочит движение пушки. Если в этот момент ещё и выстрелить, то лазер после выстрела не исчезнет. Танк попросту перестает вызывать свой Think. В чём тут дело?
В аттаче карта-пример.
__________________
I'm on github
I'm on opendesktop.org
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
I'm on github
I'm on opendesktop.org
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
I'm on github
I'm on opendesktop.org
Всем привет!
Ребят, столкнулся с проблемой: перестали собираться сорцы sdk 2.3 - вроде бы всегда все нормально было, но спустя год-полтора перерыва в "хобби" обнаружил, что теперь студия (юзаю 2005) перестала компилить и ругается на ошибки. Скачивал сорцы с этого сайта, в теме выше, но они тоже не собираются.
Я что-то не так настроил? Вроде бы всегда на дэфолтных настройках все работало
__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord
Vadiman возможно где-то не закрыта фигурная скобка?
можно ли использовать нулевой слот WEAPON_NONE 0 ?
__________________
илья
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
илья2 Нельзя, т.к. он используется когда у игрока нет оружия в принцепе
__________________
И главное, Артём, помни: не ешь желтый снег!
илья2 нулевой слот означает, что у игрока вообще нет оружия.
Если ты туда повесишь какую-то пушку, она всегда будет с игроком.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
илья
А вот какой такой вопросик возник: как можно прикрепить к модели игрока другие модели. Ну например шапочки, крылышки, рюкзаки, неактивное оружие за спину, причём чтобы оно было в определенном месте на теле находилось?
[CFR] B@N@N наверное, стандартный способ - мессага TE_PLAYERATTACHMENT. ЕМНИП, так к игроку крепится флаг в TFC. Нужно, чтобы названия костей совпадали.
Добавлено 01-06-2022 в 03:45:
Стоп, нет. pev->aiment, это должен быть индекс игрока у шапки. Не знаю, сработает ли. Сорцев TFC нету, может быть там хак в клиентке написан на манер p_ моделей.
Vadiman
https://github.com/SamVanheer/halflife-updated
Попробуй это. Недавно заметил на бескрайних просторах гитхаба. Вроде как исправлено множество багов, поддержка 64 пушек и всякое такое. Но я сам не проверял
__________________
FlatLine Arena | Tutorials
If you don't like something, MOD it!
__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord
1 | if (pplayer->weaponmodel) |
2 | { |
3 | cl_entity_t saveent = *m_pCurrentEntity; |
4 |
5 | model_t *pweaponmodel = IEngineStudio.GetModelByIndex( pplayer->weaponmodel ); |
6 |
7 | m_pStudioHeader = (studiohdr_t *)IEngineStudio.Mod_Extradata (pweaponmodel); |
8 | IEngineStudio.StudioSetHeader( m_pStudioHeader ); |
9 |
10 | StudioMergeBones( pweaponmodel ); |
11 |
12 | IEngineStudio.StudioSetupLighting (&lighting); |
13 |
14 | StudioRenderModel( ); |
15 |
16 | StudioCalcAttachments( ); |
17 |
18 | *m_pCurrentEntity = saveent; |
19 | } |
int idx; |
model_t *custom_model = gEngfuncs.CL_LoadModel("models/krutaya_shapka.mdl", &idx); |
m_pStudioHeader = (studiohdr_t *)IEngineStudio.Mod_Extradata (custom_model); |
IEngineStudio.StudioSetHeader( m_pStudioHeader ); |
StudioMergeBones( custom_model ); |
PRECACHE_MODEL("models/krutaya_shapka.mdl"); |
m_pPlayer->pev->iuser4 = MAKE_STRING("models/krutaya_shapka.mdl"); |
model_t *custom_model = IEngineStudio.GetModelByIndex( pplayer->iuser4 ); |
Спасибо. Я попытаюсь это сделать, выглядит не сложно.
А как найти к какой кости крепить её? Оружие же к руке крепится а шапку надо на голову чтобы
[CFR] B@N@N возьми скелет от модели игрока и прикрепи к кости головы. Функция StudioMergeBones смержит кости моделей, и шапка будет на голове.
в общем заметил я в халфе такой идиотский баг: когда урон у лома повышаешь до 100 и выше то с некоторым шансом при атаке ломом на монстров игра просто вылетает. есть ли возможность исправить это идиотство от valve ? или лучше делать свой лом с другим кодом ?
Добавлено 05-06-2022 в 15:09:
мда проверил и на 50 тоже вылет происходит как вообще лом делали ?
__________________
илья
илья2 уверен что дело в ломе, а не в твоём коде? Возьми чистый SDK и проверь там.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
илья
илья2
Проверил твои слова: на моём ломе всё в порядке. Ищи проблему у себя!
Вот да, я помню еще в 2004-м году проходил какой-то мод, у него не было своих дллок. а были оригинальные вальвовские. Такой чисто мапперский мод, набор новых карт. И автор сделал ящики с сумашедшим кол-вом здоровья.
Каждый надо было крошить по полминуты. Наверное для пущего реализма.
Это очень быстро надоело и я в skill.cfg прописал от монтировки урон в 1000 хп. И ничего никуда не вылетало.
илья2 может ты используешь не оригинальный HL SDK 2.3, а какой-то обновлённый с GitHub или вообще версию от SoloKiller?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
-Brain is dead-
Это типа бэкапа, сохраняет все переменные, а потом восстанавливает их обратно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша ну, я имею в виду в приведённом Кутузовом коде оно для чего?
__________________
-Brain is dead-
KiQ я точно не знаю, но предположу. p_модель - не самостоятельная энтить, а смёрженная хаком с моделькой игрока другая модель. Сначала вызывается StudioRenderModel для модельки игрока, затем для приаттаченного к нему оружия. Затем нужно вернуть m_pCurrentEntity в исходное состояние, чтобы, например m_pStudioHeader был корректный - от игрока, а не от пушки. Закомменти эти строки и у игрока сломаются анимации.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
можно ли превысить громкость звука для EMIT_SOUND с 1.0 до 1.1 хотябы
если ставлю 1.1 игра вылетает с ошибкой SV_StartSound: volume = значение
Добавлено 07-06-2022 в 23:13:
хотя я тут посмотрел этой команды SV_StartSound вобще в сдк нету значит его можно повысить только в движке а сорцев на движок нету значит нельзя по идее
__________________
илья
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
илья
Тут где-то Дядя Миша просвящал что VTF и DDS это одно и то же. Ну компрессия наверное одинаковая, просто есть один нюанс. Когда я доставал пачку DDSок из того же Скайрима, то в них плейнтекстом был записан формат компрессии и я мог не открывая каждую, просто через FolderFindText отделить прозрачные от непрозрачных. С VTF так уже не получится.
Вообще не помешал бы способ как работать с VTF не затрагивая все его хитрые флаги и прочие альфа-каналы.
Сделал себе блюр по тутору Plut'а, блюр работает, но при этом в консоли вместо текста отрисовываются фрагменты экрана!
__________________
И главное, Артём, помни: не ешь желтый снег!
Тот тутор для Халфы был.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Заметил, что в халфе если заряжать вторичную атаку тау-пушки совсем недолго (на единицу боеприпаса), то часто выходит два луча и появляется две декали. На клиенте в WeaponIdle два раза зовется StartFire.
__________________
I'm on github
I'm on opendesktop.org
Парни, пытаюсь сделать для зомби поправку одну. Нужна помощь)
Помню в кино (классика от Ромеро) если зомби в тело выпустить очередь, им было вообще по барабану, только отшатнутся и все. А вот выстрел в голову уже смертельный. Я разделил урон по хитгруппам - в голову урон идет как есть, а вот по остальным областям я сделал деление урона на 20. Проблема в том, что при низком либо нулевом уроне не рисуется кровавый брызг, а при огромном уроне аж жирно все. Вот хотелось бы как раз жирные кровавые всплески, но при этом маленький либо нулевой урон (только у зомбака, не для всех)
Vadiman сделай для зомби собственную функцию TraceAttack. В ней и отрегулируешь количество крови в зависимости от урона.
Добавлено 17-06-2022 в 15:19:
Товарищи форумчане, можете подкинуть несколько идей по дизайну HUD'а без прозрачности? Например, как в Overturn:
__________________
I'm on github
I'm on opendesktop.org
Всем привет.
Создавая очередную карту для ксго, столкнулся с ограничением брашей 1024. Хочу сделать карту с которой много объектов с func_breakable
Возможно ли обойти это ограничение ?
Может кастомные компиляторы карт есть?
Ryudo1 замени брашевые брейкабли пропами.
Ku2zoff Разве эти лимиты не для того чтобы дисциплинировать маппера и на самом деле там можно поставить несколько тыс. после перекомпиляции? Или там какая-то битовая маска как обычно?
Crystallize я не знаю, просто предположил. В голдсорсе MAX_MAP_MODELS 256, то есть, кое-что можно делать пропами в формате MDL, чтобы этот лимит не превысить. В один MDL-проп можно засунуть много разных субмоделей, это способ уложиться в лимит MAX_MODELS 512. Думаю, что в сорсе так же, только значения выше. К тому же, делать брейкабли моделями в сорсе удобнее: на них будут оставаться декали, и коллизия должна быть. Насколько мне известно, единственная проблема - отсутствие гибсов у таких объектов, в отличие от брашевых пропов. Нужно ставить рядом env_shooter, который будет выплёвывать модели.
А как можно поставить анимацию на оружие от вида с 3го лица. Хочу сделать чтобы у минигана вращались стволы при стрельбе как в свенкоопе. И ещё как задать смену боли для таких моделей. Например, револьвер от первого лица имеет лцу в мультиплеере, как тоже самое сделать на модели от 3 лица?
[CFR] B@N@N ну посмотри в официальном HLSDK. Там есть хак для p_модели ac из tfc. По такому же принципу применишь смену бодей.
А где смотреть? В каком cpp? Или по каким ключевым словам в поиске?
#define MAX_VISIBLE_PACKET_BITS 11 // 2048 visible entities per frame (hl1 has 256) |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша дык мы про кс: ходить. В сорсе пакет должен быть больше.
В Сорсе помоему без ограничений.
Добавлено 21-06-2022 в 17:24:
Хотя нет, в 2007-м сорсе как раз те же самые 2048 эдиктов. Совпадает с максимально доступным их кол-вом.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Не знаю, там константа на сетевой пакет, максимум 2048 эдиктов.
Может быть в 2013-м это исправили. А может это часть протокола, т.к. кол-во бит в пакете, которым кодируется кол-во передаваемых эдиктов жестко определено. Это не значит, что на клиент попадут только младшие номера эдиктов. Это значит что в видимом пакете не может быть более 2048 эдиктов. А это довольно редкая ситуация на самом деле. Вон в халфе 256 и то редко вылазило. А в квейке так вообще 64 штуки.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
Ku2zoff я думаю он про оперативку просто.
Ku2zoff
Странно, но в моей версии исходников, Half-Life SDK 2.3 нет ни намёка на код, о котором ты упоминал выше
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Как сделать лазерную мину ловушку? Удалил у мины функцию контакта с монстрами и игроком. Это вот это Beambreakthink. А дальше что то не получается.
Добавлено 22-06-2022 в 11:13:
ладно не важно забудьте я все сделал сам
__________________
илья
Контроллер костей и вью модели
Вчера у меня возникла необходимость управлять стрелкой на пневматическом ружье на вью модели, инклюднул animation.h, в деплое InitBoneControllers(); прописал ну и в остальных функциях прописал SetBoneController( 0, m_iAir * 4.5 ); , и так ничего и не произошло! Все скомпилировалось без ошибок и проблем, а результата 0. Может кто подскажет, как можно управлять костями на вью модели?
__________________
И главное, Артём, помни: не ешь желтый снег!
На сервере очевидно никак. Только на клиенте можно. Заюзать какой-нибудь параметр из настроек игрока и передавать его на клиент и там проверять, если у вьюмодели есть контроллер, то присваивать переданное значение ему.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Обнаружил баг в стим-версии халфы. Если изменить шрифты в файле TrackerScheme.res, то для латинских символов они меняются. А для кириллических используется какой-то жёстко захардкоденный говношрифт, которому насрать на схему. То-то мне всегда было неприятно смотреть на русские тексты в меню игр на голдсорсе. Кто-нибудь в курсе, лечится ли это, репортили ли вальве на гитхабе об этом?
Ku2zoff у тебя часом не ломаная пиратка? Может это пираты заговнохардкодили?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша да не. Оф. стимовская версия. Похоже, какой-то косяк в коде gameui, потому что vgui2 без проблем выводит разные шрифты для кириллицы в менюшках и скоребоарде в кс. Ну, по крайней мере раньше выводил. Я проверю, а то вдруг и в кс сейчас изломано всё.
Я разобрался с масштабированием спрайтового шрифта и решил его заменить на какой-нибудь декоративный. Заодно и в главном меню тоже поменять. Добрался до меню - а тут такой сюрприз. Ну не страшно. Главное, чтобы внутриигровые надписи были на русском. Меню - дело второе, халферы его наизусть знают, даже не зная английского.
Ku2zoff
Может просто используется единый шрифт у которого не прописаны кирилические символы?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro это как "не прописаны"?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
По поводу контроллеров костей на вью модели
На клиенте в ev_common.срр добавил
1 | void EV_BoneControl( int str ) |
2 | { |
3 | cl_entity_t *ent = GetViewEntity(); |
4 | if ( !ent ) |
5 | { |
6 | return; |
7 | } |
8 |
9 | ent->curstate.controller[0] = str; |
10 | } |
__________________
И главное, Артём, помни: не ешь желтый снег!
hgrunt_2020 значит, между анимациями контроллер сбрасывается в дефолтное положение. ent->curstate.controller[0] нужно задавать значение не в функции выстрела, а каждый кадр. Или в HUD_Frame, или в StudioDrawModel/StudioSetupBones.
Добавлено 30-06-2022 в 11:45:
Ты же делаешь на ксашмоде? Там нет предиктинга, и доступа к классовым переменным оружия. Значение контроллера нужно передавать на клиент либо пользовательской мессагой, либо энтварсом игрока. На клиенте отлавливать и совать в глобальную переменную, а к ней уже приравнивать значение каждый кадр.
Ku2zoff я делаю на стандартном ксаше, простой хлсдк
__________________
И главное, Артём, помни: не ешь желтый снег!
Я же сказал - выдели переменную в самом классе игрока, а не посылай событие
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А чому б не сделать всё это добро скином? Мелкие детали обычно так на модели делают
[CFR] B@N@N скином не получится плавно двигать стрелку. И придётся рисовать много кадров.
Зачем в сорсе парсер LightEnvironment завернут в проверку if (!gSkyLight) который перед этим нуллится? Разве это не приведет к тому что только одно из солнц будет распарсено? Или это что-то нужное когда у тебя несколько тредов?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Можно спотлайты вытянутые использовать. В хл2 вроде так и выкручивались.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В чем отличие m_pCurrentEntity->curstate.angles от m_pCurrentEntity->angles (на клиенте)?
__________________
Мой мод на Xash
Ну очевидно тем, что первое это входные параметры, а второе - финальные, которые будет использовать рендерер для отрисовки. Первые менять бессмысленно, они каждый кадр обновляются движком, а вторые ты можешь сам задавать, как тебе потребно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Aynekko в curstate всё что прилетело с сервера сейчас, в prevstate на кадр раньше. Как сказал Дядя Миша выше, менять их бессмысленно.
Просто angles например может вычисляться интерполируя углы из prev и cur. Для игроков там конечно всё сложнее, но в общем случае понять можно.
__________________
Xash3D FWGS форк
__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord
Я просто почему спросил, в голдсорсе в StudioSetUpTransform angles берутся из curstate, а в ксашмоде и движке из просто angles. Я у себя вращал модельку игрока и игрок-клиент отображался не так, как локальный игрок, до тех пор пока я не поменял на curstate. Вот не знаю почему.
__________________
Мой мод на Xash
Еще раз вопрос по клипнодам и солидности поверхностей. А то я запутался. Вот есть стандартный куб. Он генерирует клипноды. Получается, 6 клипнод?
А можно ли сделать чтобы была только 1 клипнода, то есть одна поверхность солидная, а остальные проходишь насквозь?
Не совсем понимаю, как это работает.
Хочется оптимизировать карту в плане клипнод, и на карте слишком много брашей с лишними стенками.
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
При каком условии освещение у модели берется от солнца вместо пола? Случайно обнаружил, что в замкнутой комнате если покрасить потолок null'ом, то освещение будет от солнца.
__________________
Мой мод на Xash
1. нужно наличие light_enviroment. Угол падения солнца пересылается на клиент и используется для трассировки полигонов над игроком, согласно этому углу. Поэтому, если, допустим игрок заходит в тень, то и свет от солнца пропадает кагбы. Очень реалистичный механизм для 98-го года.
2. Трасса должна упереться в полигон с флажком SURF_DRAWSKY, который в свою очередь берётся из текстуры с названием SKY.
3. Можно еще поставить для модели принудительно всегда брать свет от солнца, вы могли видеть этот флажок в моём модельвьювере. Используется для вертолётов и Нихиланса.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А почему модель может быть черной? Лайт_енв на карте нет, и я точно стою на освещенном браше. Буквально стоя на соседнем браше игрок освещен нормально. Значит освещение берется не с пола, а вообще непонятно откуда...
__________________
Мой мод на Xash
Так если light_environment на карте нету, то вектор направления на солнце нулевой, вот и получается чёрный цвет.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Одного тогда понять не могу, как так получается, если комната закрытая, ская там нет, потолок не null текстурой и не энтитя. Проходит насквозь получается. А где эта проверка находится, не подскажешь?
__________________
Мой мод на Xash
Отключи ксаш-модовский рендерер для теста. То что я описывал - справедливо для ванильного. Но в ксаш-моде наверное как-то иначе, уже не вспомню.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Да, то же самое. Пол нормально освещен, а стоя на нем, игрок и монстры черные.
__________________
Мой мод на Xash
Странности с сейвом
Создал я свою энтитю, лутбокс с патронами, но при сейве вылазит ошибка:"Can't find address: 10064860". По адресу 10064860 у меня 0001:00063860 ??_9@$BLE@AE 10064860 f i h_cycler.obj(лутбокс у меня находится в h_cycler)
И, что ещё не приятнее это то что не сейвится состояние использования
__________________
И главное, Артём, помни: не ешь желтый снег!
Забыл прописать EXPORT своим тчинкам или тачам.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
для чего предназначена функция DECLARE_CLASS и какую суть несет в себе?
__________________
Sometimes you have to get knocked down lower than you've even been to stand up taller than you everwere.
You so sad. No, i just die everyday...
I can't do anything around here without everybody getting up in my shit...
The aim of life is self-development.
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша у лутбокса нет ни тчинка ни тача
Добавлено 06-08-2022 в 03:23:
Дядя Миша
1 | class CLootbox : public CBaseMonster |
2 | { |
3 | void Spawn(void); |
4 | void Use(CBaseEntity* pActivator, CBaseEntity* pCaller, USE_TYPE useType, float value); |
5 | virtual int ObjectCaps(void); |
6 | void KeyValue(KeyValueData* pkvd); |
7 | virtual BOOL IsAlive(void) { return FALSE; } |
8 | int Classify(void) { return CLASS_CYCLER; } |
9 | public: |
10 |
11 | virtual int Save(CSave& save); |
12 | virtual int Restore(CRestore& restore); |
13 | static TYPEDESCRIPTION m_SaveData[]; |
14 | int m_item; |
15 | int m_count; |
16 | }; |
__________________
И главное, Артём, помни: не ешь желтый снег!
Дядя Миша я понял в чем дело
в спавне я удалил строчку SetUse(Use); и все стало нормально
__________________
И главное, Артём, помни: не ешь желтый снег!
1 | virtual void Think( void ) { if (m_pfnThink) (this->*m_pfnThink)(); }; |
2 | virtual void Touch( CBaseEntity *pOther ) { if (m_pfnTouch) (this->*m_pfnTouch)( pOther ); }; |
3 | virtual void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ) |
4 | { |
5 | if (m_pfnUse) |
6 | (this->*m_pfnUse)( pActivator, pCaller, useType, value ); |
7 | } |
8 | virtual void Blocked( CBaseEntity *pOther ) { if (m_pfnBlocked) (this->*m_pfnBlocked)( pOther ); }; |
#define SetThink( a ) m_pfnThink = static_cast <void (CBaseEntity::*)(void)> (a) |
#define SetTouch( a ) m_pfnTouch = static_cast <void (CBaseEntity::*)(CBaseEntity *)> (a) |
#define SetUse( a ) m_pfnUse = static_cast <void (CBaseEntity::*)( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value )> (a) |
#define SetBlocked( a ) m_pfnBlocked = static_cast <void (CBaseEntity::*)(CBaseEntity *)> (a) |
Ku2zoff я не знал, потому и вышла такая ошибка
Добавлено 06-08-2022 в 10:52:
Ku2zoff теперь всё прекрасно работает
https://youtu.be/QzwoF5j5LYg
__________________
И главное, Артём, помни: не ешь желтый снег!
__________________
Мой мод на Xash
Aynekko лол, проблема была всего лишь в скейле!? Удивительно.
__________________
И главное, Артём, помни: не ешь желтый снег!
Скейл текстуры или лайтмапы?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Текстуры. Была наложена на браш со скейлом 0.25.
__________________
Мой мод на Xash
Тогда может у лайтмапы наоборот уменьшить разрешение?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Через zhlt_texturestep?
__________________
Мой мод на Xash
Ну да. Во всяком случае стоит попробовать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Попробовал, фейс тупо черный, если значение step больше 16. Ставил 8, все норм, но модели все еще черные. Скейл текстуры на фейсе 0.25.
__________________
Мой мод на Xash
А какой размер текстуры? Вдруг это влияет.
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В одной из тем заговорили за худ оружия и натолкнуло меня на то, что в хл слоты нельзя переключать скролом, но можно цифрами с помощью тутора от тв.Scrama. Так вот реально это объединить чтобы не просто слоты активировались и ты подтверждал выбор, а сразу сменялось как в КС:бегать
__________________
Sometimes you have to get knocked down lower than you've even been to stand up taller than you everwere.
You so sad. No, i just die everyday...
I can't do anything around here without everybody getting up in my shit...
The aim of life is self-development.
Luciferchik в функциях CHudAmmo::UserCmd_NextWeapon и CHudAmmo::UserCmd_PrevWeapon в теле цикла for ( int loop = 0; loop <= 1; loop++ ) перед return вставь следующий код:
1 | if (CVAR_GET_FLOAT("hud_fastswitch") != 0) |
2 | { |
3 | ServerCmd(wsp->szName); // меняем пушку |
4 | g_weaponselect = wsp->iId; // сохраняем Id пушки в глобальную переменную для доступа из input.cpp, CL_CreateMove. Наверное это для пердиктинга |
5 | gpLastSel = gpActiveSel; // запоминаем последнюю пушку |
6 | gpActiveSel = NULL; // зануляем активную пушку, чтобы скрыть слоты |
7 | } |
Ku2zoff огромная благодарность, работает как часики ещё бы засвечивать худ на пару секунд и будет уже точно как в кс
__________________
Sometimes you have to get knocked down lower than you've even been to stand up taller than you everwere.
You so sad. No, i just die everyday...
I can't do anything around here without everybody getting up in my shit...
The aim of life is self-development.
Luciferchik чтобы засвечивать слоты, надо занулять gpActiveSel через некоторое время, а не сразу. Но пока он не занулён - стрелять нельзя, первый клик подтверждает выбор оружия, скрывая слоты. Надо написать новое поведение для слотов при hud_fastswitch: чтобы при переключении они высвечивались, и постепенно угасали, и левый клик не перехватывался. Сейчас попробую. Обычно я таким не морочусь, но раз уж залез в эту тему, то надо привести fastswitch в нормальное состояние, каким он должен быть. Чтобы оружия переключались скроллом, а нажатие на клавишу слота циклично прокручивало оружия в этом слоте, а не выбирало только первую пушку.
__________________
Sometimes you have to get knocked down lower than you've even been to stand up taller than you everwere.
You so sad. No, i just die everyday...
I can't do anything around here without everybody getting up in my shit...
The aim of life is self-development.
WEAPON *gpLastSel; // Last weapon menu selection |
WEAPON *gpCurWeapon; // код Скрамы |
1 | // if fast weapon switch is on, then weapons can be selected in a single keypress |
2 | // but only if there is only one item in the bucket |
3 | WEAPON *p2 = GetNextActivePos( p->iSlot, p->iSlotPos ); |
4 | if ( !p2 ) |
5 | { // only one active item in bucket, so change directly to weapon |
6 | ServerCmd( p->szName ); |
7 | g_weaponselect = p->iId; |
8 | return; |
9 | } |
10 | else // код Скрамы |
11 | { |
12 | if (gpCurWeapon->iSlot == iSlot) |
13 | { |
14 | p = GetNextActivePos(gpCurWeapon->iSlot, gpCurWeapon->iSlotPos); |
15 | if (!p) p = GetFirstPos(gpCurWeapon->iSlot); |
16 | ServerCmd(p->szName); |
17 | g_weaponselect = p->iId; |
18 | } |
19 | else |
20 | { |
21 | ServerCmd(p->szName); |
22 | g_weaponselect = p->iId; |
23 | } |
24 | return; |
25 | } |
if ( iState == 0 ) // we're not the current weapon, so update no more |
return 1; |
m_pWeapon = pWeapon; |
gpCurWeapon = pWeapon; // код Скрамы |
WEAPON *gpLastSel; // Last weapon menu selection |
WEAPON *gpCurWeapon; // код Скрамы |
float flFadeTime; // время видимости слотов |
1 | if (!gpActiveSel) |
2 | return; |
3 |
4 | // начало говнокода |
5 | if (CVAR_GET_FLOAT("hud_fastswitch")) |
6 | { |
7 | if (gpActiveSel) |
8 | { |
9 | if (gpActiveSel != (WEAPON*)1) |
10 | { |
11 | ServerCmd(gpActiveSel->szName); |
12 | g_weaponselect = gpActiveSel->iId; |
13 | } |
14 |
15 | if (flFadeTime <= gEngfuncs.GetClientTime()) |
16 | { |
17 | gpLastSel = gpActiveSel; |
18 | gpActiveSel = NULL; |
19 | } |
20 | } |
21 | return; |
22 | } |
23 | // конец говнокода |
24 |
25 | // has the player selected one? |
26 | if (gHUD.m_iKeyBits & IN_ATTACK) |
1 | else // код Скрамы |
2 | { |
3 | if (gpCurWeapon->iSlot == iSlot) |
4 | { |
5 | p = GetNextActivePos(gpCurWeapon->iSlot, gpCurWeapon->iSlotPos); |
6 | if (!p) p = GetFirstPos(gpCurWeapon->iSlot); |
7 | ServerCmd(p->szName); |
8 | g_weaponselect = p->iId; |
9 | } |
10 | else |
11 | { |
12 | ServerCmd(p->szName); |
13 | g_weaponselect = p->iId; |
14 | } |
15 | gpActiveSel = p; // говнокод |
16 | flFadeTime = gEngfuncs.GetClientTime() + 0.5; // снова говнокод |
17 | return; |
18 | } |
Ku2zoff По твоему примеру вроде как работает но нужно ещё допиливать. Комменты конечно позабавили мы ведь не профи в коде поэтому пишем как можем
__________________
Sometimes you have to get knocked down lower than you've even been to stand up taller than you everwere.
You so sad. No, i just die everyday...
I can't do anything around here without everybody getting up in my shit...
The aim of life is self-development.
Мне Ku2zoff подсказал что можно под глянуть ограничение пушек в кс 1.6, я ограничение сделал, но как теперь сделать так что бы при юзе пушки которая лежит на полу она попадала в инвентарь, а та что занимала этот же слот легла на её же место
__________________
И главное, Артём, помни: не ешь желтый снег!
hgrunt_2020 у тебя команда Drop работает? Ну то есть, если выкинуть пушку, то подбирается другая? Поищи в player.cpp вот этот комментарий:
// if we land here with a valid pWeapon pointer, that's because we found the |
// item we want to drop and hit a BREAK; pWeapon is the item. |
1 | switch (pWeapon->m_iId) |
2 | { |
3 | case WEAPON_CROWBAR: |
4 | SET_MODEL(ENT(pWeaponBox->pev), "models/w_crowbar.mdl"); |
5 | break; |
6 | } |
pPlayer->DropPlayerItem("weapon_crowbar"); |
Ku2zoff она работает но криво, некоторые пушки не подбирает а подбирает только их патроны
__________________
И главное, Артём, помни: не ешь желтый снег!
У меня работает. Хоть и жуткий говнокод, написанный на коленке.
Ku2zoff вот дроп что у мен
1 | void CBasePlayer::DropPlayerItem ( char *pszItemName ) |
2 | { |
3 | if ( !strlen( pszItemName ) ) |
4 | { |
5 | // if this string has no length, the client didn't type a name! |
6 | // assume player wants to drop the active item. |
7 | // make the string null to make future operations in this function easier |
8 | pszItemName = NULL; |
9 | } |
10 |
11 | CBasePlayerItem *pWeapon; |
12 | int i; |
13 |
14 | for ( i = 0 ; i < MAX_ITEM_TYPES ; i++ ) |
15 | { |
16 | pWeapon = m_rgpPlayerItems[ i ]; |
17 |
18 | while ( pWeapon ) |
19 | { |
20 | if ( pszItemName ) |
21 | { |
22 | // try to match by name. |
23 | if ( !strcmp( pszItemName, STRING( pWeapon->pev->classname ) ) ) |
24 | { |
25 | // match! |
26 | break; |
27 | } |
28 | } |
29 | else |
30 | { |
31 | // trying to drop active item |
32 | if ( pWeapon == m_pActiveItem ) |
33 | { |
34 | // active item! |
35 | break; |
36 | } |
37 | } |
38 |
39 | pWeapon = pWeapon->m_pNext; |
40 | } |
41 |
42 |
43 | // if we land here with a valid pWeapon pointer, that's because we found the |
44 | // item we want to drop and hit a BREAK; pWeapon is the item. |
45 | if ( pWeapon ) |
46 | { |
47 | g_pGameRules->GetNextBestWeapon( this, pWeapon ); |
48 | if (pWeapon->iSlot() <= 2) |
49 | Slots[pWeapon->iSlot()] = false; |
50 |
51 | UTIL_MakeVectors ( pev->angles ); |
52 |
53 | pev->weapons &= ~(1 << pWeapon->m_iId);// take item off hud |
54 |
55 | CWeaponBox *pWeaponBox = (CWeaponBox *)CBaseEntity::Create( "weaponbox", pev->origin + gpGlobals->v_forward * 10, pev->angles, edict() ); |
56 | pWeaponBox->pev->angles.x = 0; |
57 | pWeaponBox->pev->angles.z = 0; |
58 | pWeaponBox-><img src="images/smilies/pp2.gif" border="0" alt="">ackWeapon( pWeapon ); |
59 | pWeaponBox->pev->velocity = gpGlobals->v_forward * 300 + gpGlobals->v_forward * 100; |
60 |
61 | // drop half of the ammo for this weapon. |
62 | int iAmmoIndex; |
63 |
64 | iAmmoIndex = GetAmmoIndex ( pWeapon->pszAmmo1() ); // ??? |
65 |
66 | if ( iAmmoIndex != -1 ) |
67 | { |
68 | // this weapon weapon uses ammo, so pack an appropriate amount. |
69 | if ( pWeapon->iFlags() & ITEM_FLAG_EXHAUSTIBLE ) |
70 | { |
71 | // pack up all the ammo, this weapon is its own ammo type |
72 | pWeaponBox-><img src="images/smilies/pp2.gif" border="0" alt="">ackAmmo( MAKE_STRING(pWeapon->pszAmmo1()), m_rgAmmo[ iAmmoIndex ] ); |
73 | m_rgAmmo[ iAmmoIndex ] = 0; |
74 |
75 | } |
76 | else |
77 | { |
78 | // pack half of the ammo |
79 | pWeaponBox-><img src="images/smilies/pp2.gif" border="0" alt="">ackAmmo( MAKE_STRING(pWeapon->pszAmmo1()), m_rgAmmo[ iAmmoIndex ] / 2 ); |
80 | m_rgAmmo[ iAmmoIndex ] /= 2; |
81 | } |
82 |
83 | } |
84 |
85 | return;// we're done, so stop searching with the FOR loop. |
86 | } |
87 | } |
88 | } |
if (pItem->iSlot() > 1 && pItem->iSlot() <= 4) |
if (pWeapon->iSlot() <= 2) |
__________________
И главное, Артём, помни: не ешь желтый снег!
Ku2zoff а что по поводу того что не отображаются иконки вентиля и сайги?
__________________
И главное, Артём, помни: не ешь желтый снег!
Ku2zoff Я наконец то починил ограничение и дроп)
https://youtu.be/3wHnsDy9W-g
__________________
И главное, Артём, помни: не ешь желтый снег!
Как правильно перемещать спрайты по экрану, чтобы при смене расширения они оставались на задуманном месте?
__________________
Sometimes you have to get knocked down lower than you've even been to stand up taller than you everwere.
You so sad. No, i just die everyday...
I can't do anything around here without everybody getting up in my shit...
The aim of life is self-development.
Luciferchik перемещать их относительно screenheight и screenwidth, глянь расположение спрайтов в хл 1, именно их x и y в коде
__________________
И главное, Артём, помни: не ешь желтый снег!
Почему не на весь экран?
Почему текстура не отрисовывается на весь экран, при чем не важно спрайт это или тга(скрин https://yapx.ru/v/TUrMT ), вот код отрисовки
1 | void DrawNV() |
2 | { |
3 | if (g_iNvg == 0) return; |
4 | if (ScopeTex < 0) |
5 | ScopeTex = glLoadTgaFromPak("/gfx/ui_nv.tga"); |
6 | glColor4f(0.0f, 0.0f, 0.0f, 1.0f); |
7 | glBindTexture(GL_TEXTURE_2D, ScopeTex); |
8 | glEnable(GL_BLEND); |
9 | glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); |
10 | glBegin(GL_QUADS); |
11 | //top left |
12 | glTexCoord2f(0.0f, 1.0f); |
13 | glVertex3f(0, 0, 0); |
14 |
15 | //bottom left |
16 | glTexCoord2f(0.0f, 0.0f); |
17 | glVertex3f(0, ScreenHeight, 0); |
18 |
19 | //bottom right |
20 | glTexCoord2f(1.0f, 0.0f); |
21 | glVertex3f(ScreenWidth, ScreenHeight, 0); |
22 |
23 | //top right |
24 | glTexCoord2f(1.0f, 1.0f); |
25 | glVertex3f(ScreenWidth, 0, 0); |
26 |
27 |
28 | glEnd(); |
29 | } |
__________________
И главное, Артём, помни: не ешь желтый снег!
__________________
Sometimes you have to get knocked down lower than you've even been to stand up taller than you everwere.
You so sad. No, i just die everyday...
I can't do anything around here without everybody getting up in my shit...
The aim of life is self-development.
А вы как определяете где говнокод, а где нет?
Вот как раз таинственный множитель на 1.5525 это и есть говнокод.
Как вы это число получили? Ни деление 16/9 ни 16/10 его не даёт.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Почему из-за большого браша func_water ксаш вылетает? Размер браша 6000х7500 юнитов, высота 300 юнитов. 6000х7000, как ни странно, работает. Скейл текстуры воды сверху - 14.0, остальные фейсы покрыты NULL. Что это за лимит опять, можно ли его расширить?
Создавать несколько func_water не предлагайте - видны швы
__________________
Мой мод на Xash
Потому что SubdividePolygon_r рекурсивная функция, а стек не бесконечен.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А что тогда можно сделать в этом случае? "Расширить лимиты" так сказать. Надо бы браш большого размера.
Добавлено 19-08-2022 в 11:16:
Поднял SUBDIVIDE_SIZE с 64 до 128, это помогло О.о
__________________
Мой мод на Xash
Ну естественно помогло, размер шага уменьшился, значит и рекурсия стала короче. Еще можно в настройках проекта увеличить размер стека, но то такое...
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Cделал я себе ограничение пушек в инвентаре, всё хорошо, до сейв рестора, после сейв рестора вновь можно подобрать пушку в слот, и в слоту уже не 1 пушка а 2, чего быть не должно.
Для ограничения я завёл себе
BOOL Slots[5]; |
1 | if (pItem->iSlot() > 1 && pItem->iSlot() <= 4) |
2 | { |
3 | if (Slots[pItem->iSlot()]) |
4 | return FALSE; |
5 | Slots[pItem->iSlot()] = true; |
6 | } |
if (pWeapon->iSlot() > 0 && pWeapon->iSlot() <= 4) |
Slots[pWeapon->iSlot()] = false; |
__________________
И главное, Артём, помни: не ешь желтый снег!
привет кто из кодеров может понять рендеры текстур
kRenderNormal, // src
kRenderTransColor, // c*a+dest*(1-a)
kRenderTransTexture, // src*a+dest*(1-a)
kRenderGlow, // src*a+dest -- No Z buffer checks
kRenderTransAlpha, // src*srca+dest*(1-srca)
kRenderTransAdd, // src*a+dest
особенно интересуют эти значения
// src
// c*a+dest*(1-a)
// src*a+dest*(1-a)
// src*a+dest -- No Z buffer checks
// src*srca+dest*(1-srca)
// src*a+dest
__________________
илья
илья2 https://twhl.info/wiki/page/Tutoria...nder_Properties
Значения тебе без надобности, формулы, вычисляющие итоговую прозрачность и цвет всё равно внутри движка.
Добавлено 23-08-2022 в 04:18:
Если совсем интересно, то src - исходная текстура, a - альфа, c - цвет, dest - скорее всего результат первого перемножения.
src - исходный цвет
dst - цвет экрана (то что уже успели нарисовать)
a - alpha (renderamt)
c - color (rendercolor)
srca - альфаканал текстуры
Добавлено 23-08-2022 в 08:44:
На десктопах есть большая проблема к сожалению. Там невозможно прочитать цвет экранного пикселя из шейдера - ошибка совмещённого доступа.
Но на мобилках другая архитектура и там можно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
ясно полезная инфа пригодиться
__________________
илья
__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
возможно ли поставить оружие на нулевой слот ? пробовал ставить вылет и все.
__________________
илья
ну раз вылет - значит нельзя
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
илья2 слотов можно сделать сколь угодно много, были бы клавиши. Просто подвинь всё оружие на один слот, чтобы первый выполнял функции нулевого.
я перепутал не слоты а на нулевое количество WEAPON_NONE сорян.
__________________
илья
илья2 ну вот нафига? pev->weapons передаёт битовую маску, а не десятичное число с номером оружия. WEAPON_NONE и так по-умолчанию имеется у игрока. Вылет происходит на этапе какой-то проверки на нулёвость, которых тонна на сервере и на клиенте. А зачем вообще занимать нулевой Id? Их же 29 или 30 штук доступно.
WEAPON_NONE - это 0. Сам подумай, можно ли на ноль что-то вешать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
илья
Если оружие невозможно убрать - ему не нужен никакой идентификатор.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
илья2 номер Id не влияет на слот, занимаемый оружием. Вот так у монтировки:
p->iSlot = 0; |
p->iPosition = 0; |
p->iId = WEAPON_CROWBAR; // 1 |
__________________
илья
как убрать оружие с инвентаря игрока ? есть ли код для этого ?
__________________
илья
Энтитя player_weaponstrip. Только она убирает ВСЕ оружия и опционально костюм. Но можно дописать ей функционал выборочного убирания оружия.
__________________
илья
1 | int i; |
2 | CBasePlayerItem *pPendingItem; |
3 | for (i = 0; i < MAX_ITEM_TYPES; i++) |
4 | { |
5 | m_pActiveItem = m_rgpPlayerItems[i]; |
6 | while (m_pActiveItem) |
7 | { |
8 | pPendingItem = m_pActiveItem->m_pNext; |
9 | m_pActiveItem->Drop( ); |
10 | m_pActiveItem = pPendingItem; |
11 | } |
12 | m_rgpPlayerItems[i] = NULL; |
13 | } |
14 | m_pActiveItem = NULL; |
CBasePlayer *pPlayer; |
pPlayer->RemoveAllItems("weapon_crowbar"); |
Помнится для корректного выбрасывания пушки в P2 я довольно много кода дописывал. Там по нормальному не сделаешь.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша для выбрасывания да. А для удаления уже всё есть в RemovePlayerItem.
а если поставить несуществующую позицию и слот. оружие удалиться из худа ?
например так:
p->iSlot = -1;
p->iPosition = -1;
или так
p->iSlot = NULL;
p->iPosition = NULL;
Добавлено 06-09-2022 в 13:43:
проверил работает. Надо было самого начала так сделать не догадался малек.
Добавлено 06-09-2022 в 13:47:
все оказывается просто было и не надо было изобретать велосипед
Добавлено 06-09-2022 в 14:11:
вот так это в принципе и работает кулаки которые без костюма находятся на -1 слоте и позиции а когда достаем и одеваем костюм то кулаки уже в костюме ну в общем как в brutal half-life
https://youtu.be/yP448eB-0eY
__________________
илья
а зачем переключаться если лучше на ствол переключится без костюма а потом с костюмом кулаки будут
Добавлено 06-09-2022 в 15:01:
да и еще. Кулаки с костюмом они намного лучше чем без него. Там урон по мощнее. Эти кулаки они так чтобы хоть какое нибуть оружие при старте было это лучше чем ничего
__________________
илья
__________________
илья
Проблема - env_model не крутится через local avelocity. Либо я что-то не так делаю.
1 | if( pModel ) |
2 | { |
3 | pModel->SetLocalAvelocity( pModel->pev->movedir * Speed ); |
4 | Vector v = pModel->GetLocalAvelocity(); |
5 | ALERT( at_console, "%f %f %f\n", v.x, v.y, v.z ); |
6 | } |
__________________
Мой мод на Xash
Ну а как она будет крутиться, если по дефолту ей задан MOVETYPE_NONE?
1 | void SV_Physics_None( CBaseEntity *pEntity ) |
2 | { |
3 | if( !SV_RunThink( pEntity )) |
4 | return; |
5 |
6 | if( pEntity->m_hParent ) |
7 | pEntity->RelinkEntity( TRUE ); |
8 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В общем смена мувтайпа на ходу тоже не помогла. В итоге я поставил func_rotating с галкой start on (галка обязательна). И только тогда мой код нормально работает и я могу управлять скоростью вращения через SetLocalAvelocity.
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
как менять боди на оружии в реальном времени, например есть у меня моделька оружия с двумя видами рук, но руки меняются только по консольной команде и при смени оружия туда назад
__________________
Sometimes you have to get knocked down lower than you've even been to stand up taller than you everwere.
You so sad. No, i just die everyday...
I can't do anything around here without everybody getting up in my shit...
The aim of life is self-development.
Luciferchik обычная халфа или ксашмод? В обычной халфе налету не сменишь ни боди, ни скин. Только при воспроизведении очередной анимации либо через SendWeaponAnim, либо через PLAYBACK_EVENT. Не знаю, как там в актуальном ксашмоде, по-моему в нём Xash Weapon System отсутствует, надо тащить из Spirit 1.9 две мессаги: на бодю и на скин. И в идеале отключать пердиктинг, чтобы не мешал.
Добавлено 24-09-2022 в 00:29:
Вообще, вот, применяй этот тутор.
Ku2zoff ксашмод, Xash Weapon System стащен из Spirit 1.9, значит на любую смену боди нужно делать анимацию, в идле анимации что не делай ничего не будет меняться
__________________
Sometimes you have to get knocked down lower than you've even been to stand up taller than you everwere.
You so sad. No, i just die everyday...
I can't do anything around here without everybody getting up in my shit...
The aim of life is self-development.
__________________
Sometimes you have to get knocked down lower than you've even been to stand up taller than you everwere.
You so sad. No, i just die everyday...
I can't do anything around here without everybody getting up in my shit...
The aim of life is self-development.
На что влияет предиктинг оружия в халфе? Это только визуальное отображение на клиенте (анимация без задержек) или же оказывается влияние на сервер (клиент сообщает о уже сделанном выстреле, попадании и т.д.)?
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вот еще такой вопрос. На сервере мы можем делать тряску экрана
1 | MESSAGE_BEGIN( MSG_ONE, gmsgShake, NULL, pPlayer->edict() ); // use the magic #1 for "one client" |
2 |
3 | WRITE_SHORT( shake.amplitude ); // shake amount |
4 | WRITE_SHORT( shake.duration ); // shake lasts this long |
5 | WRITE_SHORT( shake.frequency ); // shake noise frequency |
6 |
7 | MESSAGE_END(); |
__________________
Мой мод на Xash
Aynekko дёрни клиентскую часть мессаги из движка в дллку и вызывай её сразу на клиенте. Сорцы ксаша открыты. pfnCalcShake, pfnApplyShake, и саму мессагу CL_ParseScreenShake. Делов минут на 10. Ну, точнее, вызывать надо не мессагу, а заполнять структурку screen_shake_t.
1 | void CL_ParseScreenShake( sizebuf_t *msg ) |
2 | { |
3 | clgame.shake.amplitude = (float)(word)MSG_ReadShort( msg ) * (1.0f / (float)(1<<12)); |
4 | clgame.shake.duration = (float)(word)MSG_ReadShort( msg ) * (1.0f / (float)(1<<12)); |
5 | clgame.shake.frequency = (float)(word)MSG_ReadShort( msg ) * (1.0f / (float)(1<<8)); |
6 | clgame.shake.time = cl.time + max( clgame.shake.duration, 0.01f ); |
7 | clgame.shake.next_shake = 0.0f; // apply immediately |
8 | } |
Понял, уже сделал
Добавлено 02-10-2022 в 21:50:
Столкнулся с такой штукой касаемо baseline. В общем создаю я спрайт на сервере через SpriteCreate. После его создания я задаю ему свойства, рендермод и прозрачность.
И вот незадача - на клиенте мне рапортует, что у него baseline.rendermode и baseline.renderamt равны нулю. И только после сейврестора уже показывает нужные числа.
Вот и собственно вопрос, а как мне обновить baseline после того, как я задал свойства?
__________________
Мой мод на Xash
Вазелин сохраняется только для объектов, которые спавнятся с уровня, для объектов, создаваемых во время игры он неактуален и не нужен.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Aynekko а зачем ты на клиенте берёшь свойства из вазелина? Надо брать из курстейта.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну я тестирую, экспериментирую. Конечно в случае чего переделаю. Я тестил на пинге 100 (фейковом), никаких проблем не обнаружил пока что.
__________________
Мой мод на Xash
1 | state->rendermode = ent->v.rendermode; |
2 | if (!FBitSet(ent->v.flags, FL_MYFLAG)) state->renderamt = ent->v.renderamt; |
3 | state->renderfx = ent->v.renderfx; |
4 | state->rendercolor.r = ent->v.rendercolor.x; |
5 | state->rendercolor.g = ent->v.rendercolor.y; |
6 | state->rendercolor.b = ent->v.rendercolor.z; |
1 | case kRenderFxFadeFast: |
2 | if( RP_NORMALPASS( )) |
3 | { |
4 | if( e->curstate.renderamt > 3 ) |
5 | e->curstate.renderamt -= 4; |
6 | else e->curstate.renderamt = 0; |
7 | } |
8 | blend = e->curstate.renderamt; |
9 | break; |
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вернёмся к моему старому вопросу!
1 | extern int iWpnId; |
2 |
3 | void DLLEXPORT HUD_Frame( double time ) |
4 | { |
5 | ServersThink( time ); |
6 | if (iWpnId == WEAPON_TIHAR || iWpnId == WEAPON_GAUSS) |
7 | { |
8 | gEngfuncs.GetViewModel()->curstate.controller[0] = gHUD.m_iBone1; |
9 | } |
10 | GetClientVoiceMgr()->Frame(time); |
11 | } |
__________________
И главное, Артём, помни: не ешь желтый снег!
На вьюмодельках, я вообще не припоминаю, чтобы контроллеры костей использовались.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша ну я первый кто их использует)
__________________
И главное, Артём, помни: не ешь желтый снег!
всем привет: Spawned a NULL entity! к чему относиться данная ошибка ?
__________________
илья
Дословный перевод: Заспавнена Нуллевая энтитя
__________________
И главное, Артём, помни: не ешь желтый снег!
да вы представьте что я придумал->XVCORE97 или в другом названии СУПЕР ПРОТОТИП-что это ?--->:прототип синтезированной сверх новой колотронной дыры
закупоренном в особом контейнере высокого назначения опасность!!!:--->особо опасное супер сверх оружие !!!.
Да писателям фантастам такое бы понравилось
__________________
илья
илья2
1. Это надо было писать в фулде
2. Рекомендую немного поизучать русский язык и грамматику в целом
__________________
И главное, Артём, помни: не ешь желтый снег!
Это надо было писать в фулде:да точно надо было
Добавлено 24-10-2022 в 13:44:
кому интересно сейчас я создаю новое оружие XVL989
__________________
илья
Появился у меня жоский баг в игре. Не знаю, как его исправить. Баг таков, что когда мы берем оружие вместе с костюмом, то при выборе оружия есть другое оружие, которое мы не брали. У этого оружия пустая обойма. То есть это оружие красное. Во общем, будет более понятно, если выложу скриншот этой хрени.
https://imgur.com/a/OR6i8TQ
Добавлено 31-10-2022 в 16:21:
Может, есть способ изначально удалить это оружие ? с пустой обоймой ?
Добавлено 31-10-2022 в 20:08:
ну все я исправил баг
__________________
илья
__________________
И главное, Артём, помни: не ешь желтый снег!
Как правильно посчитать кол-во активных игроков на сервере?
Я взял код из multiplayer rules:
1 | int CountPlayers( void ) |
2 | { |
3 | int num = 0; |
4 |
5 | for ( int i = 1; i <= gpGlobals->maxClients; i++ ) |
6 | { |
7 | CBaseEntity *pEnt = UTIL_PlayerByIndex( i ); |
8 |
9 | if ( pEnt ) |
10 | num = num + 1; |
11 | } |
12 |
13 | return num; |
14 | } |
1 | int playercount = 0;// CountPlayers(); |
2 | for( int i = 1; i <= gpGlobals->maxClients; i++ ) |
3 | { |
4 | CBasePlayer *pPlayer = (CBasePlayer*)UTIL_PlayerByIndex( i ); |
5 |
6 | // skip invalid players |
7 | if( !pPlayer ) |
8 | continue; |
9 |
10 | const char *model = g_engfuncs.pfnInfoKeyValue( g_engfuncs.pfnGetInfoKeyBuffer( pPlayer->edict() ), "model" ); |
11 | if( model[0] <= 0 ) |
12 | continue; |
13 |
14 | playercount++; |
15 | } |
__________________
Мой мод на Xash
извините что поднимаю старую тему опять на теже грабли:а точно ли 512 лимит прекешей зарыт в движок не в карты ли ? я пробовал сломаные исходники на картах half-life там все нормально работает захожу в карты opossing force все глючит.
Добавлено 07-11-2022 в 09:30:
особенно меня удивляет вот эта ошибка Host_Error: PF_precache_model_I: Model 'models/houndeye.mdl' failed to precache because the item count is over the 512 limit.
houndeye этот объект был в картах халф лайфа захожу в карты opossing force пожалуйста ошибка прекеша
Добавлено 07-11-2022 в 09:32:
кажется это не оптимизированные карты или не совсем правильно скомпилированные где в half-life картах лимит превышен а в opossing force картах лимит занижен
Добавлено 07-11-2022 в 09:36:
плохо что это так значит мне придется в исходниках что то удалять чтобы лимит не жаловался по другому никак
Добавлено 07-11-2022 в 09:39:
а есть ли оптимизированные карты opossing force где лимит завышен ?
__________________
илья
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Поэтому уровни действительно влияют на этот лимит:о все таки прав
Добавлено 08-11-2022 в 10:31:
но я до сих пор не знаю как этот лимит одолеть удаляю монстров оружия из исходников ничего не помогает как же так ?
Добавлено 08-11-2022 в 10:34:
оружие гильзы спрайты отдельными бодями в одну модель делать очень сложно
Добавлено 08-11-2022 в 10:35:
а прошлое мое исправление все таки не совсем помогло
__________________
илья
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так, а сам лимит увеличить никак нельзя?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
я в тупиковой ситуации что делать ?
Добавлено 08-11-2022 в 12:54:
лимит все портит
__________________
илья
На ксаш перейди и забудь о лимитах.
__________________
Мой мод на Xash
Все таки это все из за оружий ! Удалил я больше оружия с не охотой . Все заработало как надо. Мда. плохо, что в Half-life есть такая штука, как лимит.
Добавлено 08-11-2022 в 13:25:
__________________
илья
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
илья
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
да теперь понял это в player.cpp
Добавлено 08-11-2022 в 14:49:
можно попробовать
Добавлено 08-11-2022 в 14:51:
Попробовал я монстров По удалять. Не, не работает такой вариант. Только с оружий лимит убирается. Бред, конечно, но это так.
Добавлено 08-11-2022 в 14:52:
Это значит, что монстров можно делать сколько угодно, а вот оружия уже нет. Так не получиться.
Добавлено 08-11-2022 в 14:59:
impulse 101 а толку ну удалю там оружия все равно проблема прекеша
Добавлено 08-11-2022 в 15:01:
проблема то появляется с перехода с карты на карту а не при impulse 101
__________________
илья
Ну с модом-солянкой по любому рано или поздно придётся переезжать, или извращаться и как Гуль все запихивать в одну модель.
А вообще не пойму откуда вообще такие анальные лимиты, почему в Думе к примеру можно делать карты на тысячи монстров что даже современный комп тормозит дико от такого кол-ва, на ГЗДум полно всяких оружейных солянок где сотни оружий, или взять тот же Russian Overkill где того оружия мало того что кучи, так еще оно все дикое и убойное что с одного выстрела половину уровня выносит не тянет комп, будешь играть в пошаговую игру, а в Халве запили Flak Cannon из Анрила и какой-то дезматч на 32 игрока уже сломается от него.
А вообще не пойму откуда вообще такие анальные лимиты:да вот и мне хотелось бы понять это
Добавлено 08-11-2022 в 15:16:
ведь в халфу еще можно много всего добавлять почему тогда такие лимиты ставят ?
__________________
илья
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
перешел я на ксаш да баг с прекешом исчез но есть другие баги со звуками с glowshell с shockrifle
Добавлено 08-11-2022 в 15:56:
мда это уже баги самого движка
Добавлено 08-11-2022 в 18:06:
А что нибудь кроме ксаш есть ? Что похоже на Халфу. Но снимет лимит, а то он весь мод мне сломал, Все придется переделывать.
__________________
илья
Да, ксаш хорошо выявляет баганый код. Исправляй теперь ошибки в своём коде.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
ксаш хорошо выявляет баганый код:но у меня в халфе все нормально работает значит он не баганый хотя вам виднее
Добавлено 08-11-2022 в 18:52:
Исправляй теперь ошибки в своём коде:да у меня просто выбора нету придется исправлять
__________________
илья
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
илья
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
вот этот https://www.moddb.com/engines/xash3...4-extras-stable
Добавлено 08-11-2022 в 19:10:
прбовал старые версии там еще хуже больше багов
Добавлено 08-11-2022 в 19:11:
__________________
илья
еще нож тоже повторяет
Добавлено 08-11-2022 в 20:24:
ну все я исправил баг в функции PrimaryAttack есть двойной повтор Swing
SetThink(&CFists2::SwingAgain); который перенаправляется на
void CFists2::SwingAgain(void)
{
Swing(0);<----вот здесь как раз и есть повтор
}
было
void CFists2::PrimaryAttack()
{
if (!Swing(1))
{
#ifndef CLIENT_DLL
SetThink(&CFists2::SwingAgain);
pev->nextthink = gpGlobals->time + 0.1;
switch (RANDOM_LONG(0, 1))
{
case 0:
m_pPlayer->pev->punchangle.x = -10; // pitch
m_pPlayer->pev->punchangle.y = -10; // yaw
m_pPlayer->pev->punchangle.z = 10; // roll
break;
case 1:
m_pPlayer->pev->punchangle.x = 10; // pitch
m_pPlayer->pev->punchangle.y = 10; // yaw
m_pPlayer->pev->punchangle.z = -10; // roll
break;
}
//UTIL_MakeVectors( m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle );
Vector vecSrc = m_pPlayer->GetGunPosition( );
Vector vecAiming = m_pPlayer->GetAutoaimVector( AUTOAIM_10DEGREES );
Vector vecDir;
float flZVel = m_pPlayer->pev->velocity.z;
m_pPlayer->pev->velocity = m_pPlayer->pev->velocity - gpGlobals->v_forward * -100;
m_pPlayer->pev->velocity.z = flZVel;
#endif
}
}
стало
void CFists2::PrimaryAttack()
{
if (!Swing(1))
{
#ifndef CLIENT_DLL
pev->nextthink = gpGlobals->time + 0.1;
switch (RANDOM_LONG(0, 1))
{
case 0:
m_pPlayer->pev->punchangle.x = -10; // pitch
m_pPlayer->pev->punchangle.y = -10; // yaw
m_pPlayer->pev->punchangle.z = 10; // roll
break;
case 1:
m_pPlayer->pev->punchangle.x = 10; // pitch
m_pPlayer->pev->punchangle.y = 10; // yaw
m_pPlayer->pev->punchangle.z = -10; // roll
break;
}
//UTIL_MakeVectors( m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle );
Vector vecSrc = m_pPlayer->GetGunPosition( );
Vector vecAiming = m_pPlayer->GetAutoaimVector( AUTOAIM_10DEGREES );
Vector vecDir;
float flZVel = m_pPlayer->pev->velocity.z;
m_pPlayer->pev->velocity = m_pPlayer->pev->velocity - gpGlobals->v_forward * -100;
m_pPlayer->pev->velocity.z = flZVel;
#endif
}
}
Добавлено 08-11-2022 в 20:24:
надо и в остальных исходниках это исправить
Добавлено 08-11-2022 в 20:40:
правда после таких махинаций идет двойное повторение декаля после удара о стену
Добавлено 08-11-2022 в 21:04:
все исправил if (!Swing(1))->if (Swing(1))
было
void CFists2::PrimaryAttack()
{
if (Swing(1))
{
#ifndef CLIENT_DLL
pev->nextthink = gpGlobals->time + 0.1;
switch (RANDOM_LONG(0, 1))
{
case 0:
m_pPlayer->pev->punchangle.x = -10; // pitch
m_pPlayer->pev->punchangle.y = -10; // yaw
m_pPlayer->pev->punchangle.z = 10; // roll
break;
case 1:
m_pPlayer->pev->punchangle.x = 10; // pitch
m_pPlayer->pev->punchangle.y = 10; // yaw
m_pPlayer->pev->punchangle.z = -10; // roll
break;
}
//UTIL_MakeVectors( m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle );
Vector vecSrc = m_pPlayer->GetGunPosition( );
Vector vecAiming = m_pPlayer->GetAutoaimVector( AUTOAIM_10DEGREES );
Vector vecDir;
float flZVel = m_pPlayer->pev->velocity.z;
m_pPlayer->pev->velocity = m_pPlayer->pev->velocity - gpGlobals->v_forward * -100;
m_pPlayer->pev->velocity.z = flZVel;
#endif
}
}
стало
void CFists2::PrimaryAttack()
{
switch (RANDOM_LONG(0, 1))
{
case 0:
m_pPlayer->pev->punchangle.x = -10; // pitch
m_pPlayer->pev->punchangle.y = -10; // yaw
m_pPlayer->pev->punchangle.z = 10; // roll
break;
case 1:
m_pPlayer->pev->punchangle.x = 10; // pitch
m_pPlayer->pev->punchangle.y = 10; // yaw
m_pPlayer->pev->punchangle.z = -10; // roll
break;
}
//UTIL_MakeVectors( m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle );
Vector vecSrc = m_pPlayer->GetGunPosition( );
Vector vecAiming = m_pPlayer->GetAutoaimVector( AUTOAIM_10DEGREES );
Vector vecDir;
float flZVel = m_pPlayer->pev->velocity.z;
m_pPlayer->pev->velocity = m_pPlayer->pev->velocity - gpGlobals->v_forward * -100;
m_pPlayer->pev->velocity.z = flZVel;
if (Swing(1))
{
pev->nextthink = gpGlobals->time + 0.1;
}
}
__________________
илья
Ты клиентские оружия делал или нет?
Добавлено 08-11-2022 в 21:20:
Я не могу твои архивы открыть, сохраняй в zip.
Добавлено 08-11-2022 в 21:21:
Не знаю, что ты там такое сделал, но cl_lw 0 должно было помочь в данном случае.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
илья
Ок, тогда попробуй наоборот cl_lw 1
И кстати после установки этого значения, надо движок полностью перезапускать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
илья
Ну что ж, продолжаем исправлять баги В этом коде я создаю молнию через пушку. Работала функция нормально. Теперь эта функция направляется на оригин карты, а не на позицию forward-а. как исправить?
void CShockrifle::CreateChargeEffect2( void )
{
#ifndef CLIENT_DLL
if( g_pGameRules->IsMultiplayer())
return;
int iBeam = 0;
for( int i = 2; i < 5; i++)
{
if( !m_pBeam[iBeam] )
m_pBeam[iBeam] = CBeam::BeamCreate("sprites/lgtning.spr", 1000);
m_pBeam[iBeam]-> PointEntInit( m_pPlayer->GetGunPosition() + gpGlobals->v_forward * 500, m_pPlayer->entindex() );
m_pBeam[iBeam]->SetStartAttachment(1);
m_pBeam[iBeam]->SetEndAttachment(i);
m_pBeam[iBeam]->SetNoise( 75 );
m_pBeam[iBeam]->pev->scale= 10;
m_pBeam[iBeam]->SetColor( 0, 253, 253 );
m_pBeam[iBeam]->SetScrollRate( 30 );
m_pBeam[iBeam]->SetBrightness( 190 );
iBeam++;
}
#endif
}
Добавлено 09-11-2022 в 12:43:
у меня появляется подозрение что он не считает функцию GetGunPosition
__________________
илья
Прежде, чем использовать forward вектор, нужно сначала сделать векторы через MakeVectors. Не вижу этого у тебя.
__________________
Мой мод на Xash
не не получилось прописывал это
Vector v_forward;
UTIL_MakeVectors( m_pPlayer->pev->v_angle + gpGlobals->v_forward );
__________________
илья
__________________
Мой мод на Xash
да все я другой код поставил даже лучше прежнего теперь моя пушка настоящими молниями бьет
Добавлено 09-11-2022 в 16:30:
поставил эвент от гауски и изменил под молнии
Добавлено 09-11-2022 в 16:32:
этот код он создаёт такие слабенькие молнии не массивные
Добавлено 09-11-2022 в 17:00:
Что ж, хотелось бы выдохнуть с облегчением, сказать, что я все баги в своем моде исправил. Но нет, еще один остался.
эти TE_SPRITETRAIL почему то разучились летать нормально как это исправить ?
__________________
илья
2 файл
__________________
илья
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну в гауссе они же нормально летают?:не в гаусе в плазменной винтовке
Добавлено 09-11-2022 в 17:36:
в гауссе если ты про это балы то да норм летают но они в эвентах прописаны
Добавлено 09-11-2022 в 17:37:
как их из евентах вызывать я не совсем понимаю
Добавлено 09-11-2022 в 17:39:
хотя если покопаться подольше в гауссе может что то и нарою из этого
Добавлено 09-11-2022 в 18:16:
PLAYBACK_EVENT_FULL( FEV_NOTHOST, edict(), m_usPlasma, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, 0, 0, 0, 0.0, 0, 0.0 );
как этот эвент заставить вызывать через оригин гранаты ? у меня он вызывается на оригин карты
Добавлено 09-11-2022 в 18:16:
гранаты то есть плазмы
__________________
илья
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
илья
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
не FEV_GLOBAL ставил не работает
Попробуй назад открутить тоже не работает
Добавлено 09-11-2022 в 18:52:
мда с TE_SPRITETRAIL здесь конкретные проблемы
Добавлено 09-11-2022 в 19:59:
ееее пошло дело пошло исправляю баг да
Добавлено 09-11-2022 в 20:04:
мда правда есть один минус в этом способе размер спрайтов маленький
Добавлено 09-11-2022 в 20:05:
хотя ладно пойдет что есть то есть
Добавлено 09-11-2022 в 20:28:
класс исправил работает как надо
Добавлено 09-11-2022 в 22:22:
мдаа не думал что столкнусь с такой проблемой звук не воспроизводиться !
EMIT_SOUND(ENT(pev), CHAN_VOICE, "weapons/fatrongrenade/hl2ep1citadelexplosion.wav", 1, ATTN_NORM);
функция вроде нормальная точно такие же там стоят нормально воспроизводятся наверное проблема со звуком или нет ?
Добавлено 09-11-2022 в 22:32:
дядя миша а ты уверен что ксаш баги видит может он сам баганутый это как минимум странно такое видеть что все звуки норм воспроизводятся а этот нет
Добавлено 09-11-2022 в 22:40:
я конечно не знаю поможет ли это или нет но вот сам звук может там есть ошибка хотя вряд тли
https://disk.yandex.ru/d/UiDA_iCUOpLxyw
__________________
илья
Частота дискретизации - 48 килогерц. Переконвертируй в 44100 хотя бы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
илья
Ну вот, за полдня всё исправил, а говорил - сто тысяч миллионов багов.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
ну теперь то да все ксашовские баги я исправил
Добавлено 10-11-2022 в 00:39:
Но все таки давай признаемся, что он все таки глюканутый. У меня он иногда вылетает, ошибки выдает. Не постоянно конечно, иногда кнопки на клавиатуре не всегда работают. это уже баги. Ксаша. Не моего мода.
Добавлено 10-11-2022 в 01:08:
ксаш еще и проигрывает сам атаку выстрела без разрешения мыши ну и как это понять ?
__________________
илья
Ну значит не все баги ты исправил.
Можешь еще попробовать Xash FWGS, там предиктинг должен лучше работать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
в принципе эти баги в игре особо сильно не мешают можно и забыть про них
Добавлено 10-11-2022 в 12:22:
как сделать не убиваемого монстра ? ничего не получается ставил 100000 хп бестолку
Добавлено 10-11-2022 в 12:29:
а здоровье монстров обязательно надо через gSkillData делать ?
__________________
илья
Посмотри код Gman
да кое что есть в TakeDamage
Добавлено 10-11-2022 в 12:43:
найс сработало спасибо
Добавлено 10-11-2022 в 12:47:
да как хорошо что в халф лайф есть такой не убиваемый монстр под названием gman
__________________
илья
кто знает можно ли в исходниках ставить вот такие числа>1000000000000 ?
Добавлено 11-11-2022 в 01:10:
это у нас триллион
Добавлено 11-11-2022 в 01:21:
я вот знаю что в java кодинге можно ставить и трилион и квантилион квадриллион а здесь все таки к сожалению есть кое какие ограничения по цифрам миллиард и все а дальше компилятор выдает ошибку. Но можно ли это ограничение снять ?
__________________
илья
Я вот никогда не делал моды, но не понимаю, как можно делать моды, не зная основ с++
https://metanit.com/cpp/tutorial/2.3.php
Хотя бы эту ссылку открой и читай до просветления.
__________________
Углеродные звезды с древними спутниками, которые колонизируют разумные грибы...
Газовые гиганты, на которых обитает метеорологический разум...
Миры, растянутые на мембранах, где измерения пересекаются...
Это невозможно описать нашим ограниченным языком...
а вот так оказываться можно если хочется сильно
Добавлено 11-11-2022 в 16:34:
честно прочитал ничего не понял
Добавлено 11-11-2022 в 16:35:
есть про байты биты наверно надо сначала это понять
Добавлено 11-11-2022 в 16:38:
мдаа и как это понять ? https://ru.wikipedia.org/wiki/%D0%9...%BA%D0%BE%D0%B4
Добавлено 11-11-2022 в 16:38:
вообще не в тему
__________________
илья
илья2 а зачем тебе сто тысяч миллионов? Ты хочешь записать госдолг США?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
ну это да я по приколу такие большие цифры пишу
Добавлено 11-11-2022 в 16:48:
вооот смотрите какое больше число 1000000000000000000000000000
Добавлено 11-11-2022 в 16:49:
было бы прикольно такие цифры большие ставить
Добавлено 11-11-2022 в 16:52:
а компилятор мне ошибку выдает что такое число ставить нельзя вот и обидно стало
Добавлено 11-11-2022 в 17:22:
ага вот как прописывается long
long b = 1000000000;
b это уже само число
Добавлено 11-11-2022 в 17:22:
начинаю понимать немного
Добавлено 11-11-2022 в 17:26:
мда печально "длинный", за которым следует "длинный", является незаконным
Добавлено 11-11-2022 в 17:31:
error C2177: constant too big
Добавлено 11-11-2022 в 17:34:
даааааа сработало круто прописал вот эту функцию:
float num3 = 1000000000000000000000000000000.0f;
Добавлено 11-11-2022 в 17:43:
ай ладно забуду ничего у меня не получиться куча ошибок компилятор выдает
__________________
илья
__________________
__________________
илья
почему под TakeDamage нельзя делать radiusdamage ставлю radiusdamage монстр просто зависает и все
__________________
илья
Доброго времени суток!
Несколько вопросов:
1) Хочу доработать зомбаков - чтобы при смерти игрока они шли его жрать (технически проигрывая victory_dance ивент). По идее это сложно реализовать, ведь нужно определять радиус в котором все monster_zombie почуят хрючево и начнут сбегаться к игроку. Я пробовал стащить аналогичную тему у буллсквида, но ничего не вышло.
2) Как сделать у оружия анимацию "первого подбирания"? Ну то есть находит игрок новое оружие и проигрывается единожды анимация, как он его осматривает или там пафосно затвор взводит, итд.
3) Как реализовать смену сабмодели рук у оружия? Слишком ли это заморочное дело? Вроде в спирите такое есть но мне весь функционал этого мода не нужен
1 | BOOL CMP5::Deploy( ) |
2 | { |
3 | if ( <ПЕРЕМЕННАЯ> == FALSE ) { |
4 | <ПЕРЕМЕННАЯ> == TRUE; |
5 | return DefaultDeploy( "models/v_9mmAR.mdl", "models/p_9mmAR.mdl", MP5_DEPLOY_FIRST, "mp5" ); |
6 | } |
7 | return DefaultDeploy( "models/v_9mmAR.mdl", "models/p_9mmAR.mdl", MP5_DEPLOY, "mp5" ); |
8 | } |
__________________
я Z
Подскажите где можно почитать тутор по вгуи, помню были на хл.ру, а сайт уже давно лёг на покой
__________________
Sometimes you have to get knocked down lower than you've even been to stand up taller than you everwere.
You so sad. No, i just die everyday...
I can't do anything around here without everybody getting up in my shit...
The aim of life is self-development.
__________________
я Z
__________________
Sometimes you have to get knocked down lower than you've even been to stand up taller than you everwere.
You so sad. No, i just die everyday...
I can't do anything around here without everybody getting up in my shit...
The aim of life is self-development.
1 | BOOL CMP5::Deploy( ) |
2 | { |
3 | if ( <ПЕРЕМЕННАЯ> == FALSE ) { |
4 | <ПЕРЕМЕННАЯ> == TRUE; |
5 | return DefaultDeploy( "models/v_9mmAR.mdl", "models/p_9mmAR.mdl", MP5_DEPLOY_FIRST, "mp5" ); |
6 | } |
7 | return DefaultDeploy( "models/v_9mmAR.mdl", "models/p_9mmAR.mdl", MP5_DEPLOY, "mp5" ); |
8 | } |
1 | TYPEDESCRIPTION CShotgun::m_SaveData[] = |
2 | { |
3 | DEFINE_FIELD(CShotgun, m_flNextReload, FIELD_TIME), |
4 | DEFINE_FIELD(CShotgun, m_fInSpecialReload, FIELD_INTEGER), |
5 | DEFINE_FIELD(CShotgun, m_flNextReload, FIELD_TIME), |
6 | DEFINE_FIELD(CShotgun, m_flPumpTime, FIELD_TIME), |
7 | }; |
8 | IMPLEMENT_SAVERESTORE(CShotgun, CBasePlayerWeapon); |
__________________
я Z
1 | TYPEDESCRIPTION CShotgun::m_SaveData[] = |
2 | { |
3 | DEFINE_FIELD(CShotgun, m_flNextReload, FIELD_TIME), |
4 | DEFINE_FIELD(CShotgun, m_fInSpecialReload, FIELD_INTEGER), |
5 | DEFINE_FIELD(CShotgun, m_flNextReload, FIELD_TIME), |
6 | DEFINE_FIELD(CShotgun, m_flPumpTime, FIELD_TIME), |
7 | }; |
8 | IMPLEMENT_SAVERESTORE(CShotgun, CBasePlayerWeapon); |
Легко же ты сдался...
TRACE_TEXTURE в TEXTURETYPE_PlaySound возвращает нулевой указатель при ударе монтировкой по скайбоксу. Это нормально?
Хотел проверить на удар по скаю, но вот не вышло. Или возвращение нулевого указателя и есть сигнал о том, что попали в скай?
Ради интереса даже заглянул в код XDM и нашёл там коммент
code:
pTextureName = TRACE_TEXTURE(pEntity->edict(), vecSrc, vecEnd);// BUGBUG: at some strange angles this shit fails and returns "sky"!!
__________________
I'm on github
I'm on opendesktop.org
FreeSlave помнится, в стародавние времена, когда я пользовался 2003-й студией и SDK 2.3, компиляция и в дебаге, и в релизе давала такой результат, что TRACE_TEXTURE возвращала что-то такое, из-за чего тип материала не определялся. Будто бы текстура не прописана в materials.txt.
https://hlfx.ru/forum/showthread.ph...4491#post144491
Там сама система материалов немного бажная, вот и глючит.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Так материалы ни при чем. Вопрос о движковой функции pfnTraceTexture и определение ская.
__________________
I'm on github
I'm on opendesktop.org
как сделан основной crosshair из dmc ?
пробовал найти любые ресурсы по этому ничего не нашел
__________________
илья
1 | /******************* DRAW CROSSHAIR *********************/ |
2 | iCrossLength = gHUD.m_scrinfo.charWidths[ *chCrossHair ]; |
3 | iCrossY = ScreenHeight / 2 - gHUD.m_scrinfo.iCharHeight / 2; |
4 | iCrossX = ScreenWidth / 2 - iCrossLength / 2; |
5 |
6 | gHUD.DrawHudString( iCrossX, iCrossY, iCrossX + 50, chCrossHair, 170, 170, 170 ); |
7 | /******************* DRAW CROSSHAIR *********************/ |
__________________
I'm on github
I'm on opendesktop.org
а ну теперь понятно он вырисовываться как отдельный худ
Добавлено 06-02-2023 в 09:04:
все спасибо теперь этот код можно в свои исходники ставить
__________________
илья
Здарова всем, играл как-то с друзьями в л4д и стало интересно, а как в мультиплеере рисовать себе в худ хп товарищей?
__________________
Sometimes you have to get knocked down lower than you've even been to stand up taller than you everwere.
You so sad. No, i just die everyday...
I can't do anything around here without everybody getting up in my shit...
The aim of life is self-development.
точечные энтити, выполняющие роль брашей будут нагружать карту( по сравнению с обычными брашами)? и кста , есть источник света, чтоб его не надо было компилить(энтитя источника света, свет этот не компилится а накарте отображается)?
Какие то попытки создать вечный двигатель.
И чтоб ресурсы не ело, и чтоб мильён полигонов. Бесплатно.
Не, это так не работает.
Это вроде как плагинами делают, AmxMod и всякое такое.
Ну или ремейк карты с нуля делай. Либо по декомпилу, либо ищи исправленный декомпил, если карта популярная.
как скомпилировать исходники decay ? может я неправильный visual studio использую ?
ссылки на исходники:
сорцы:https://github.com/FWGS/hlsdk-portable/tree/decay-pc
сорцы2:https://github.com/hoaxer/Half-Life-Decay
Добавлено 04-03-2023 в 10:39:
выполнял еще такую функцию
mkdir build && cd build
cmake ../
но безрезультатно выдает ошибки
__________________
илья
илья2 ветка Decay в hlsdk-portable недоделанная (и пока вообще заброшенная). Не пытайся её использовать.
Сорцы, выложенные самим разработчиком, содержат проект под старые версии Visual Studio. Мб в студии конвертация проекта сработает.
__________________
I'm on github
I'm on opendesktop.org
В последнее время я стал часто сталкиваться с некорректным воспроизведением анимации у вставленной на карту модели. Анимация воспроизводится рывками, кадры проскакивают. Но дело в том, что сама анимация зациклена и не имеет швов. Изменение значения framerate у cycler_sprite или fps в qc файле модели изменяет характер бага.
https://youtu.be/SSbUEfq-1ps
Опытным путем пришел к тому, что скорость воспроизведения анимации следует задавать в qc файле модели, а при размещении модели с анимацией на карте значение framerate должно быть равно количеству кадров анимации модели. В таком случае анимация воспроизводится практически корректно, но прыгающие кадры все еще имеют место.
Менее наглядное видео (таймкод)
https://youtu.be/5jD2j4DxZbs?t=92
Что можно предпринять, чтобы анимация всегда воспроизводилась корректно?
А 200 фепсов не многовато для голдовой модельки? Попробуй поднимать фреймрейт от 30 и смотреть, когда начинает проявляться. Как бы там от тикрейта сервера и клиентского фпс не было зависимости еще.
Пробовал множество значений framerate от 0.01 до нескольких тысяч. Также и с fps в qc. Больше всего тестов с framerate провел со значениями 1, 10, 30 и 60.
Количество кадров в самой анимации также менял. В основном 30, 60 240 кадров. Но на полное решение проблемы это не влияло.
А у тебя точно кейфрейм верно в анимации стоит? Частая ошибка такая, что последний кадр анимации равен первому, а от этого естественно получится как-будто анимация подергивается. Ну условно, у тебя шарик должен повернуться на 360 градусов за 360 секунд, стало быть за последнюю секунду шарик должен стремиться к начальному положению, но не достигать его.
Добавлено 19-04-2023 в 23:59:
Во вьюере-то оно как себя ведет?
В анимациях некоторых моделей передвигаю последний кадр за пределы таймлайна на один кадр. В этой модели я так не делал, мне было достаточно убрать интерполяцию между последним и первым кадром для плавной цикличности анимации. Во вьювере анимация отображается нормально, если значение фпс выставлено не мизерное(в противном случае вращения не будет). В Blender анимация отображается корректно.
Этот рывок происходит в 100% случаев? Если просто стоять и смотреть на модель.
__________________
Мой мод на Xash
Да, но он не слишком критичен, поскольку всего один за несколько минут.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ну его не стоит ставить менее 0.01 или более 10.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Если скорость воспроизведения выше общего фреймрейта, то кадры и будут перескакивать, естественно.
У одинарного вещественного точность не бесконечная, а в голдсорсе фреймрейт не квантизирован, в отличие, от сорса, например.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
кстати, что там с анимироваными текстурами? лимиты повышены или как голдсорсе? а можно туда вообще видева запихнуть?
erfty
Видева без звука - как водка без пива!
__________________
а если гифка??
Вопрос - как определить энтитю локального игрока так, чтобы быть уверенным, что это энтитя именно мы, а не кто-то другой?
Поясню: у меня есть боты на сервере. Есть визуальный эффект на экране, который зависит от значения gEngfuncs.GetLocalPlayer()->curstate.vuser1.z. Пока я в игре - все хорошо. Но если я зайду в спектаторы (становлюсь невидимым, несолидным и т.д.) я иногда вижу этот эффект на экране, когда у какого-то бота, по всей видимости, изменилось это значение (ведь он тоже игрок).
В моем понимании выходит, что GetLocalPlayer возвращает мне локального игрока, а т.к. я в спеках и как бы "не совсем игрок", он подсовывает данные бота, ведь он локальный.
__________________
Мой мод на Xash
Aynekko режим спектатора - это когда подключаешься к HLTV Proxy. Прокси, по сути, такой же клиент, подключенный к серверу. А вот подключенные к прокси - уже не клиенты, а зрители-спектаторы. А "зайти в спектаторы" - перейти в режим обсервера. Игрок остаётся таким же подключенным клиентом, так же занимает слот на сервере, и к нему применяются все те же правила, что и к другим клиентам. Единственное, работает фильтр по pev->iuser1, отсекая всё ненужное и добавляя нужное. Чтобы у тебя не вылезал эффект, когда ты обсервер, добавь проверку на g_iUser1. Можно пойти дальше, и рисовать чужой эффект при наблюдении от первого лица. Через g_iUser2 можно получить индекс наблюдаемого игрока, а после его vuser1.z.
Добавлено 27-04-2023 в 18:17:
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Можно ли в хлсдк прямо в коде создать обычный куб вместо использования модельки?Хитбокс то можно создать а я вот иемнно про визуальную часть.
erfty вопрос: зачем? Чисто теоретически можно, да, теоретически можно что угодно, а на практике чорт его знает.
__________________
И главное, Артём, помни: не ешь желтый снег!
erfty ну посмотри как рисовать командами типа GL_QUAD, GL_TRIANGLE (точно не помню) главное координаты вершин и ювишки текстур корректно задать.
Стало интересно могут ли кнопки в хл иметь две функции, то есть на примере перезарядки если просто нажать R то играет анимация перезарядки, а если зажать то отображается менюшка или что-то другое
erfty так д3д же автоматом транслирует, нет? Я не разбирался.
Добавлено 06-06-2023 в 07:48:
__________________
Sometimes you have to get knocked down lower than you've even been to stand up taller than you everwere.
You so sad. No, i just die everyday...
I can't do anything around here without everybody getting up in my shit...
The aim of life is self-development.
Luciferchik на клиенте input.cpp, там KeyUp, KeyDown, CL_KeyState.
__________________
Sometimes you have to get knocked down lower than you've even been to stand up taller than you everwere.
You so sad. No, i just die everyday...
I can't do anything around here without everybody getting up in my shit...
The aim of life is self-development.
HUD
Как сделать "изогнутый" HUD, как в Crysis 2/Cyberpunk 2077/ULTRAKILL?
Deadlocked1337 Скорее всего он рендерится в отдельный буфер и искажается шейдером.
Он там наверное в 3D рендерится, но с отключённым тестом на глубину.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Visual Studio
Есть ли какая-то особая версия Visual Studio, которая умеет компилировать код Paranoia 2?
Шестерка Corporate c процессор-паком.
Всем привет! Сделал свою карту c расширением *.bsp в hammer, теперь появился вопрос - как в неё поиграть?
Nitrw ну допустим сделал ты карту в формате BSP. Теперь вопрос: для какого движка?
__________________
И главное, Артём, помни: не ешь желтый снег!
А почему при спрыгивании с каната игроку дают инерцию через AbsVelocity, а не через BaseVelocity?
Кто его знает. Может так в опфоре было.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
code:
void CRopeSegment :: Touch( CBaseEntity* pOther ) { if( pOther->IsPlayer() ) { CBasePlayer *pPlayer = (CBasePlayer *)pOther; // Electrified wires deal damage. - Solokiller if( m_bCauseDamage ) { if( gpGlobals->time >= pev->dmgtime ) { if( pev->dmg < 0 ) pOther->TakeHealth( -pev->dmg, DMG_GENERIC ); else pOther->TakeDamage( pev, pev, pev->dmg, DMG_SHOCK ); pev->dmgtime = gpGlobals->time + 0.5f; } } if( GetMasterRope()->IsAcceptingAttachment() && !pPlayer->IsOnRope( )) { if( m_bCanBeGrabbed ) { pOther->SetAbsOrigin( m_Data.mPosition ); pPlayer->SetOnRopeState( true ); pPlayer->SetRope( GetMasterRope() ); GetMasterRope()->AttachObjectToSegment( this );
Хм, ну если вызвана функция Touch, значит игрок уже дотронулся до веровки.
В противном случае, как бы она вызвалась?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша Я посмотрел, по-моему её никто не вызывает. Ну то есть изначально, так-то она сама может вызвать себя.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша А можно как-то сделать чтоб такие вещи в поиске Студии показывались?
Разумеется нет. Про такие вещи даже компилятор не знает. Только в рантайме.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
У меня сразу несколько вопросов.
1. Как скомпилировать исходники п2? Компилятор упорно останавливается на 59%.
2. Как выдернуть код худа из п2? Думаю вместо него поставить худ из хл1.
__________________
Leaving this world isn't as scary as it sounds.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша, батник, что был в комплекте с кодом.
Прерывается на
__________________
Leaving this world isn't as scary as it sounds.
Я никакого батника в комплекте с кодом не прикладывал.
Это вопросы к тому, кто приложил.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Наконец-то раздуплил физический смысл брать текущий момент времени, прибавлять к нему и сравнивать. То есть мы как бы отмечаем момент в будущем, ок.
По какому принципу код игрока делится на пре-тчинк и пост-тчинк? Например почему канат именно в претчинке? У меня сложилось впечатление что в претчинке мы ставим какие-то флаги в основном, а в пост-тчинке по ним уже действуем.
PreThink - до запуска физической симуляции игрока. PostThink - соответственно после.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша ну а с точки зрения этой симуляции в чем разница перед или после что-то делать? Это сделано потому что одни процессы физичные, а другие - нет?
Ну допустим ты делаешь что-то такое и хочешь чтобы симулятор физики это учёл уже прямо на этом кадре. Значит надо делать в PreThink. А в PostThink ты уже собираешь результаты симуляции - куда там игрок уткнулся, сколько ящиков задел, нуитд.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Здравствуйте. Хотелось бы получить информацию по следующему вопросу.
После уменьшения размера хулла игрока в 4 раза view модель полностью входит в геометрию, если подойти вплотную к стене.
Это происходит с такими размерами хуллов:
( 0 0 0 ) ( 0 0 0 )
( -4 -4 -8 ) ( 4 4 8 )
( -16 -16 -16 ) ( 16 16 16 )
( -4 -4 -4 ) ( 4 4 4 )
Но если увеличить размер хулла в длину/ширину, то уже такое не происходит:
( 0 0 0 ) ( 0 0 0 )
( -6 -6 -8 ) ( 6 6 8 )
( -16 -16 -16 ) ( 16 16 16 )
( -6 -6 -4 ) ( 6 6 4 )
Можно ли решить это на стороне сервера?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Как сделать printf в матчлибе? Там ниче не работает.
Бывает ли что перпендикуляр к прямой косячит? У меня персонаж движется по прямой, и постоянно ищет перпендикуляр к ней. До точки пересечения с прямой разрешено некое расстояние, так что это как бы цилиндр. Скорость небольшая, что-то вроде 5-10 юнитов за кадр. И вот хотя по длине ему остается 20-25 юнитов, персонаж внезапно выпадает из этого объема.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша матчлиба в ксашмоде.
А зачем тебе выводить сообщения непременно внутри самой матчлибы?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Разобрался, там оставалось магическое число 999 а сегмент рельсы был 1024
code:
for ( int k = 1; k<gpGlobals->maxEntities; k++, pStartEdict++ ) { if ( pStartEdict->free ) // Not in use continue; if ( !FStrEq ( STRING(pStartEdict->v.classname), "path_track" ) ) // if not match continue; // maps won't be super large, spam segments if 999 units is not long enough if ( (pStartEdict->v.origin - pev->origin).Length() > 1024.0f ) continue; pEndTmp = UTIL_FindEntityByTargetname ( NULL, STRING ( pStartEdict->v.target ) ); if (!pEndTmp ) continue; // test plpos against infinite and finite cylinder TempPos = NearestOnLine ( pStartEdict->v.origin, pEndTmp->pev->origin, pev->origin ); if( !VectorCompareEpsilon( TempPos, g_vecZero, ON_EPSILON ) && ((TempPos - pev->origin ).Length() < 64) ) { NewNearest = TempPos; // good one idStart = ENTINDEX( pStartEdict ); idEnd = ENTINDEX( pEndTmp->edict() ); break; } }
1024 вижу, 64 вижу. 999 не вижу.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша 999 было на месте 1024, там вон коммент есть.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Накапливается. В коде игрока (player.cpp) у меня каждый кадр что-то прибавляется к скорости. И если открыть консоль то видно что значение продолжает отбиваться и за пару секунд доходит до 2000, т.е. игра замерла но код игрока все ещё продолжает выполняться.
На клиенте это решали проверкой pparams->frametime потому что он обнуляется при паузе. Но на сервере оно не доступно, а gpGlobals->frametime на паузе не обнуляется.
Но если консоль открыта, игрок же всё равно не двигается. А когда консоль закроется, это будет сброшено.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша Любопытно какие механизмы могут существовать которые будут сбрасывать. Потому что на сервере вообще нет ничего связанного с паузами и консолями. Если я неправильно написал код мне бы понять как правильно, может быть надо его в playermove вместо этого пихать?
Добавлено 20-08-2023 в 22:01:
а pmove->frametime или чёт такое?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша О, обнуляется, спасибо. Интересно почему у него точность только три знака, а потом идут нули.
Почему игрок на которого применили SetAbsVelocity при движении как-то покачивается по синусоиде вверх-вниз как на волнах? Как будто всего на несколько юнитов.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Может это какой-нибудь CalcBob чудит?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Никак не могу понять, как можно передать строчку текста на клиент. А точнее, прописать в keyvalue энтити текст и потом, зная индекс энтити, получить его на клиенте. Я хотел попробовать ALLOC_STRING и получить id строчки на клиенте, но у меня в клиенте нет такой функции.
__________________
Мой мод на Xash
ALLOC_STRING только на сервере.
Только через MESSAGE_BEGIN и WRITE_STRING.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вопросец, а можно-ли в MP при смене карты сохранить весь инвентарь игрока как это происходит в сингле? Бегло покопал форум и гуголь, ничего не нашёл, подозреваю просто где-то кусок из сингла в мультиплеер перенести, направьте по верному пути плз.
В принципе можно, но халфа на такое не рассчитана, поэтому парой строк кода тут не отделаешься, придётся заморочиться. В том же квейке подобное было сделать куда как проще. Да оно там и работало - в кооперативе.
Вообщем надо выделить некоторое место и сохранить туда информацию о броне, здоровье, патронах и пушках для каждого игрока. А при заходе на новый уровень - дать всё это игроку. Какая-то глобальная структурка нужна где всё это держать во время смены уровня.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
1 | //game.h |
2 |
3 | extern struct PlayerChangeLevelSave |
4 | { |
5 | int health = 100; |
6 | int hev_charge = 0; |
7 | int ammo_count[15] = {15}; |
8 | int have_weapons[23]; |
9 | }; |
1 | //multiplay_gamerules.cpp |
2 |
3 | #include ...... |
4 |
5 | PlayerChangeLevelSave player1, player2; |
6 | std::vector<PlayerChangeLevelSave> players = {player1, player2}; |
7 |
8 | ... |
9 |
10 | void CHalfLifeMultiplay::Think() |
11 |
12 | ... |
13 |
14 | for (int i = 0; i <= 1; i++) |
15 | { |
16 | CBaseEntity* pPlayer = UTIL_PlayerByIndex(i); |
17 | players[i].health = pPlayer->pev->health; |
18 | ALERT(at_console, "1Health:%i", pPlayer->pev->health); |
19 | players[i].hev_charge = pPlayer->pev->armorvalue; |
20 | ALERT(at_console, "1HEV:%i", pPlayer->pev->armorvalue); |
21 | players[i].ammo_count[1] = pPlayer->ammo_9mm; |
22 | } |
23 |
24 | ChangeLevel(); //intermission is over |
25 |
26 | ... |
27 |
28 | void CHalfLifeMultiplay::ChangeLevel() |
29 | ... |
30 |
31 | CHANGE_LEVEL(szNextMap, NULL); |
32 |
33 | for (int i = 0; i <= 1; i++) |
34 | { |
35 | CBaseEntity* pPlayer = UTIL_PlayerByIndex(i); |
36 | pPlayer->pev->health = players[i].health; |
37 | ALERT(at_console, "Health: %i", players[i].health); |
38 | pPlayer->pev->armorvalue = players[i].hev_charge; |
39 | ALERT(at_console, "HEV: %i", players[i].hev_charge); |
40 | pPlayer->ammo_9mm = players[i].ammo_count[1]; |
41 | } |
Сохранять надо перед вызовом ChangeLevel, тут всё правильно.
А восстанавливать в PutClientInServer чёт такое вообщем.
Ну и завести ещё переменную, что игрока ожидает инвентарь с прошлого уровня, сделать проверку на мультиплеер.
Там кажется есть PlayerSpawn или подобная функция. Вот в ней попробуй.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Перенёс в PlayerSpawn загрузку параметров, ох и долго-же я себе голову ломал...
По какой-то причине игре немного насрать на тот ChangeLevel что в multiplay_gamerules.cpp, перенёс сохранение в trigger.cpp и всё заработало , спасибо за помощь, пошёл допиливать код в адекватное состояние.
__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord
1 | /* |
2 | go to the next level for deathmatch |
3 | only called if a time or frag limit has expired |
4 | */ |
5 | void NextLevel( void ) |
6 | { |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Как временно отключить гравитацию конкретно игроку? Чтобы он не дрейфовал вниз когда его передвигает SetAbsVelocity. Просто выставить мувтип fly не срабатывает.
pev->gravity = 0.0f;
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Решил ради тестов попробовать портануть модельку солдата из Q2 под ХЛ, столкнулся конечно-же с проблемой вертексной анимации и перегоне её в скелетную, чёт вспомнил о QR и QW, покопал их подфорум, ничё по этому поводу внятного не нашёл, ну неужели ничего внятного за все эти годы никто не придумал и нужно по классике ручками костылять модель в Т-позу и потом клеить на неё скелет из ХЛ или и того хуже - запиливать код вертексной анимации?
А что тут можно придумать внятного? Вертексная анимация получается путём запекания скелетной, т.е. это конвертация с потерями.
А то что утеряно уже никаким алгоритмом обратно не восстановишь, разве что нейросетью, которая лепит отсебятину, похожую на правду.
Добавлено 08-10-2023 в 16:11:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
В дикее был индикатор состояния перса (в т.ч. и на пк), типа прыгаешь, стоишь, сидишь, решил добавить его к себе, полез в исходники пк-порта и таки нашёл нужный файл ( https://github.com/hoaxer/Half-Life...l_dlls/mode.cpp ), перетащил весь связанный код к себе, запускаю и что вижу? Лишь фонарик, прикол в том что если убрать спрайты для него из hud.txt - появляется новый индикатор, фонарика естесна нет, что это такое и как быть не понимаю.
UPD. подкинул hud.txt из дикея - всё заработало, потом добавил строчки индикатора ровно туда где и в дикее - тоже заработало, максимально странная шняга.
if (игрок->pev->weapons & (1<<WEAPON_ОРУЖИЕ); |
Смог реализовать, но чуть иначе, переменная где-то вообще оказалась не нужна, в класс обычной пушки добавляю AddDuplicate в котором через pOriginal->m_pPlayer получаю игрока и уже проворачиваю всё что мне нужно, только вот теперь единственно нужно вот это:
code:
if (игрок->pev->weapons & (1<WEAPON_ОРУЖИЕ);
Из флагов блокирующих гравитацию игрока, ONROPE и ONTRAIN бесполезны, а ONBARNACLE ломает код из SetAbsVelocity и SetAbsOrigin.
Гравитация почему-то пересиливается только юзанием обоих этих команд, иначе будет медленное сползание по нескольку юнитов за кадр. Раньше я думал что это гравитация просто применяется после SetAbsVelocity чтобы программисту не нужно было думать про неё лишний раз, но теперь я хз.
Не пойму, почему у тебя pev->gravity = 0 не работает.
Она обязана работать, иначе бы игрок соскальжевал с лестниц.
Ну засунь в pmove сообщение, посмотри чему равен pmove>gravity.
Добавлено 15-10-2023 в 22:19:
Ты под халфой-то делаешь или под ксашем?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Под ксашем
Я еще не пробовал делать ответвления в PM_ функции и там подменять.
Я сувал туда дебаг, он писал что вычитает 6.4 из pmove->velocity[2]
Гравитация была обычная 800, за один кадр 13, ну и там она по половинкам получается 6
вообщем зануляй гравити у игрока и всё должно работать.
Прямо в классе игрока pev->gravity = 0.0f;
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Обнаружил что в переиздании второй кваки (вот внезапно) все модельки пересадили на кости в формате md5, сгенерил одной утилитой из этой модели smd для компиляции, а вот как для неё написать qc не знаю, дайте какие-нибудь статьи о компиляции моделей для монстров, ничего похожего не нашёл.
Тут статьей не обойтись. Тут целое дело. Я даже studiomdl дорабатывал, чтобы собрать эти модельки в формат халфы.
Может как-нибудь попозже напишу об этом. Но те модельки которые вы видели в сентябрьской демке - это тоже скелетка из ремастера, но уже первой кваки.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
На тебе примерчег QC.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Скомпилил модельку, пришлось немного с qc-шкой пошаманить (некоторых костей не было в том, что выплюнул Noesis), а также текстуру отзеркалить по вертикали т.к. uv-мапа не сходилась, моделька даже под FWGS завелась, единственно солдатик больно уж карликовый получился, но не страшно, со скейлом пошаманить и нормалёк.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Попробовал перенести супершотган, вышло неплохо и быстро (модель за 5 минут буквально перекомпилил), с монстрами беда т.к. попробовал налепить солдата на грунтов и они кроме как очень криво стрелять и дохнуть ничего не могут, даже ходить, а так хоть щас садись и делай Q2Remake.
С ходьбой беда - эти анимации не содержат motion vector.
Добавлено 17-10-2023 в 21:46:
А для первой кваки нельзя даже задать линейный равноускоренный вектор, там монстры за каждый шаг преодолевают разное расстояние. Исключением является разве что прыгучий демон.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
code:
if (pmove->gravity) ent_gravity = pmove->gravity; else ent_gravity = 1.0;
Не на шесть, а на девять. Там не приключения. Есть вью-англес, они следуют за мышкой и есть просто англес, у которых питч поделён на 3, эти ориентируют тушку игрока. Пришло из кваки, понятное дело. В халфе это в принципе было уже не нужно, там тушку можно было ориентировать анимациями, но всё равно оставили. А вот в хл2 по идее этого уже нет.
Добавлено 19-10-2023 в 18:31:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Делаю наклоны из за углов как в Сталкере, сделал прототип чисто наклоняющий взгляд на 30 градусов в input.cpp, как оказалось одного наклона камеры недостаточно, как можно сместить камеру? В view.cpp это сделано через изменение vieworg в pparams, может как-то можно его получить? Также думаю как можно интерполировать значение наклона камеры чтобы наклон был плавный.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Прилипание игрока к полу
Подскажите, как можно убрать "прилипание" игрока к полу по время FlyMove и NoClipMove? Подобный эффект можно наблюдать в режиме спектатора, особенно в кс 1.6, когда в летите прямо, у вас под ногами наклонная поверхность, и вы в итоге летите не прямо, а "скользите" по поверхности вниз. Можете проверить на de_dust2. Но если на режим спектатора мне глубоко начихать, то вот после уменьшения скорости передвижения по лестницам, при малом PITCH игроку не хватает скорости, чтобы отлипнуть от пола и начать подниматься, что меня очень огорчает. Фиксил кто-нибудь такое?
__________________
Никогда не поздно сделать мод под хл1
Sigurth я такое замечал на ксашмоде в начале 2020 когда игрался с переносом уровней из хл2, но Дядя Миша меня толи не понял, толи не поверил.
1 | if( pmove->movetype == MOVETYPE_NOCLIP || pmove->spectator ) |
2 | point[2] = pmove->origin[2]; // diffusion - no glueing with ground when noclipping or spectating |
3 | else |
4 | point[2] = pmove->origin[2] - 2; |
__________________
Мой мод на Xash
Было:
1 | // Always try and unstick us unless we are in NOCLIP mode |
2 | if ( pmove->movetype != MOVETYPE_NOCLIP && pmove->movetype != MOVETYPE_NONE ) |
3 | { |
4 | if ( PM_CheckStuck() ) |
5 | { |
6 | return; // Can't move, we're stuck |
7 | } |
8 | } |
9 |
10 | // Now that we are "unstuck", see where we are ( waterlevel and type, pmove->onground ). |
11 | PM_CatagorizePosition(); |
1 | // Always try and unstick us unless we are in NOCLIP mode |
2 | if ( pmove->movetype != MOVETYPE_NOCLIP && pmove->movetype != MOVETYPE_NONE ) |
3 | { |
4 | if ( PM_CheckStuck() ) |
5 | { |
6 | return; // Can't move, we're stuck |
7 | } |
8 |
9 | // Now that we are "unstuck", see where we are ( waterlevel and type, pmove->onground ). |
10 | PM_CatagorizePosition(); |
11 | } |
1 | // If we are on something... |
2 | if (pmove->onground != -1) |
3 | { |
4 | // Then we are not in water jump sequence |
5 | pmove->waterjumptime = 0; |
6 | // If we could make the move, drop us down that 1 pixel |
7 | if (pmove->waterlevel < 2 && !tr.startsolid && !tr.allsolid) |
8 | VectorCopy (tr.endpos, pmove->origin); |
9 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
я хотел написать Vector c = array[ (byte)(a*b) ]
а написал Vector c = array[ (byte)a*b ]
И у вектора отдельно компонент x запортился. Не выдался неверный элемент, не запортился весь вектор, а только один компонент. Странно.
nemyax Массив с положительными и отрицательными ячейками, чтобы знать какие рельсины впереди а какие позади тебя. Не все, просто пара ближайших. Один множитель это индекс -2 -1 1 2, другой это направление 1 -1 по или против нумерации. Ну а байт это переполнение буфера чтобы -1 стало 255.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша я ищу ее один раз когда игрок запрыгивает, сравниваю его вектор скорости с вектором данного сегмента.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
где можно найти нормальные исходники half-life 2 ? и какой программой их надо комплить ? пробовал сам найти исходники но они нормально не компилятся
__________________
илья
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
а какой программой компилить ?
__________________
илья
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
в общем пишет ошибку hl fatal error LNK1106: invalid file or disk full: cannot seek to 0x697B.
version https://git-lfs.github.com/spec/v1
oid sha256:aaccecc6e45e3d25188411e664772b750bdd433fc9c33a96080a055f22382ae5
size 41450
как исправить ?
Добавлено 29-01-2024 в 21:52:
source-sdk-2004
Добавлено 29-01-2024 в 22:16:
еще постоянно жалуется на #include <windows.h> его просто нету. Мда в общем постоянные заморочки
__________________
илья
илья2 держи сдк
https://mega.nz/file/UfRhyLRC#v5VUL...0AijoX86LqKKDY8
__________________
илья
илья2 так мож у тебя на диске места не хватает? Проверь сколько у тебя свободного места на диске С.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
27,1 гб осталось это что разве переполнен ?
__________________
илья
илья2
Попробуй от имени администратора запустить, возможно винда блокирует доступ к диску.
Вот твоя ошибка:
https://stackoverflow.com/questions...k-to-0x5a57bebc
Зайди в Project Settings->Librarian->Command Line->Additional options и добавь /expectedoutputsize:600000000 в линкер.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
и добавь /expectedoutputsize:600000000 в линкер:не работает
Добавлено 30-01-2024 в 11:49:
от имени администратора запустить:тоже не работает
__________________
илья
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
вот:https://imgur.com/a/YawjhRF
Добавлено 30-01-2024 в 13:18:
и все таки я не понимаю как такой крутой мод как overcharged мог быть сделан ? если даже обычный пацан как я не может нормально исходники half-life 2 скомпилить и немного их переделать. Или у разработчика свои секреты есть
__________________
илья
Попробуй в All Options прописать явно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
илья2
а какая у тебя версия студии?
И проверь чтобы у твоей папки с СДК не стояло атрибута "только чтение".
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
илья
илья2 судя по всему утебя там промежуточные файлы в проекте друг друга перезаписывают потому что оно все в одной папке. Может просто перейди на Эп1 или орандж бокс.
__________________
илья
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Build: 1 succeeded, 0 failed, 0 skipped
ООО наконец то как я долго этого ждал скомпилилось наконец скомпилилось ура
Добавлено 31-01-2024 в 18:48:
еее client и server скомпилились
Добавлено 31-01-2024 в 18:51:
осталось только проверить их в игре
Добавлено 31-01-2024 в 19:02:
мда не долго я радовался вылезает вот эта ошибка https://imgur.com/a/XAbNvGf
__________________
илья
К хл2 наплодили кучу версий движка, там всё несовместимое.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
илья
Искать новый SDK или старую версию движка, под которой эта библиотека заведётся.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
илья
мдааа попробовал я твой способ после компила вот такая абра кадабра вылезает:https://imgur.com/a/r7j7o47 я даже не знаю что это такое может проблема что я стимовский half-life 2 запускаю или надо что то другое запускать ?
Добавлено 03-02-2024 в 15:38:
кажется я начинаю понимать это дебаггер он предупреждает об ошибке в директории game_controls/base игра работает запускается но худ в костюме работает неправильно все патроны здоровье энергия костюма куда то заноситься в угол.
Добавлено 03-02-2024 в 15:56:
только я не пойму а на какой объект ссылается дебаггер ? base.cpp такого файла нету.
__________________
илья
В каких случаях SetObjectCollisionBox должен отличаться от размера, выставляемого в UTIL_SetSize?
И ещё. Моё давнишнее наблюдение, в сути которого я, однако, не копался. Если у прожектайла ненулевой размер, то он не будет попадать в модельку за пределами размера, выставленного через UTIL_SetSize. Для корректной работы нужно увеличивать размер, дабы он покрывал всю модельку. Пример: гаргу в ХЛ выставляется размер такой же как у агрунта. Из-за этого прожектайлы с ненулевым размером пролетают сквозь модельку (если не стрелять по ногам). Прожектайлов с ненулевым размером в ХЛ вроде как нет, но могут быть с кастомным кодом. В опфоре таковыми являются снаряды шокроача. И в опфоре выставляемый размер у гарга действительно увеличен для соответствия геометрии модельки.
Собственно, как определяется столкновение? Какую роль играет размер монстра и хитбоксы его модели. И в чем особенность проверки столкновения у прожектайлов с нулевым размером? Чисто из наблюдений получается, что движок для энтить с ненулевым размером сначала проверяет столкновение по размерам и в случае успеха проверяет дополнительно хитбоксы, иначе - столкновения не происходит. А для энтить с нулевым размером трасса, должно быть, работает иначе, и сразу "попадает" в хитбокс.
__________________
I'm on github
I'm on opendesktop.org
absmin и absmax - это размеры ббокса, с которыми объект линкуется в дерево. Они очевидно не должны быть меньше реального размера, заданного в SetSize. Но могут быть больше. Например для ротатаблей.
Ротатабля же неизвестно в какую сторону крутится - можно взять её общий радиус. Чтобы другой предмет гарантированно в ней не застрял.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
I'm on github
I'm on opendesktop.org
Я уже не помню точно как это в халфе использовалось. Были какие-то отличия от кваки.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Меня смущает эффект от команды r_drawentities 5. У игрока кубик ААББ и он вращается но при этом как будто коллидит без учета вращения. Я думал только в КС хулл игрока вращается?
Не-не, это не колоизационный хулл.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
del
__________________
Xash3D FWGS форк
XaeroX типа, поэтому якобы проходит в неаксиальные коридоры Уже чем 32.5*1.4142. Хотя наверное это просто учёт нормалей при надувании хулла.
Это чисто визуальный эффект, он не имеет никакого отношения к коллизии.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В фитцквейке нельзя обновить r.refdef.vieworg через VectorAdd. Вот Мастер бы развонялся...
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Crystallize
Мастера? Конечно можно. Он просто к нам на форум принципиально не ходит, наверное, мы его чем-то огорчили.
__________________
XaeroX он всё ещё дрочит свой XDM и маппак?!
я думал разочаровался во всём и потому ушёл. Но видимо разочаровался он только в нас.
Что делать если шестерка зависает где-то на стадии проверки ошибок?
Какая шестёрка? Студия? У компиляции нет фазы проверки ошибок.
Ты что-то путаешь.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша В общем я жму F7, курсор песочные часы и студия перестает реагировать на клики. И нагрузка на проц даже не повышается.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Странно. Не приходилось с таким сталкиваться. Это любой проект так?
Добавлено 12-03-2024 в 10:07:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Ну у более новых студий ещё какие-то приколы будут.
Мне работать надо, а не воевать с чужими глюками.
Добавлено 12-03-2024 в 10:17:
Потом всё это без проблем соберётся свежей студией, т.к. изначально пишется совместимо.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я уже не помню что там в квейке. Сам ковыряет и меня спрашивает
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Можно ли маппать под HL в каком-нибудь радианте? Чтобы вадники открывал и текстуры показывал? Volatile-Radiant тот же?
Мне просто нравится что в радианте не надо край браша мышкой ловить.
Вот это я нашел https://hlfx.ru/forum/showthread.php?s=&threadid=3717 но про текстуры там не сказано.
VGUI и Кириллица
У вгуи на клиенте есть SchemeManager, который способен грузить шрифты из винды, что он собственно и делает, но при появлении в тексте кириллицы всё идёт к чертям, и такое ощущение что при загрузке шрифта кириллица просто не грузится.
__________________
И главное, Артём, помни: не ешь желтый снег!
Со шрифтами я разобрался и кириллица есть, но теперь другая проблема: буквы наезжают на буквы
__________________
И главное, Артём, помни: не ешь желтый снег!
hgrunt_2020 Прочитал "Продажа" как "Подска>ка"
hgrunt_2020 для русского языка кернинг нормально не работает.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша если он не работает, то что тогда делать?
__________________
И главное, Артём, помни: не ешь желтый снег!
Ничего там не сделаешь. Не юзать VGUI, например. Или поискать кастомную библиотеку VGUI, кажется ребята из FWGS такую делали.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Временная зона GMT. Текущее время 11:44. | Страницы (2): « 1 [2] Показать все 3892 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024