HLFX.Ru Forum Страницы (2): « 1 [2]
Показать все 3886 сообщений этой темы на одной странице

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


Отправлено hgrunt_2020 30-09-2021 в 10:22:

Пытался сделать улучшение для пушек , но чет пошло не так

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

C++ Source Code:
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
};

__________________
И главное, Артём, помни: не ешь желтый снег!


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

hgrunt_2020 так тебе надо заводить переменные в коде пушки или игрока, а не в коде итема. В общих чертах:

C++ Source Code:
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
}

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

Добавлено 30-09-2021 в 18:03:

Этот код годится, если хранить переменную в игроке. Ну мало ли, может у него тоже какие-то свойства меняются. А вот если хранить в пушке, что логичнее, тут немного сложнее:
C++ Source Code:
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
}


Отправлено hgrunt_2020 30-09-2021 в 11:58:

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 30-09-2021 в 12:04:

Цитата:
hgrunt_2020 писал:
забыл int

Написал код на коленке, чисто для примера. Вот и упустил. Указатель на пушку правильно приходит?


Отправлено hgrunt_2020 30-09-2021 в 12:16:

Ku2zoff
здесь надо писать номер и ID пушки?
ибо у меня при подборе вылетает

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Ku2zoff 30-09-2021 в 13:01:

Вместо WEAPON_MYWEAPON пишешь, например, WEAPON_MP5. Возможно, указатель получается невалидный. Поищи в коде, где из m_rgpPlayerItems ищутся CBasePlayerItem и сравнивай, в чём разница.


Отправлено Chyvachok 30-09-2021 в 14:15:

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

Кстати для акимбо полезная была бы фишка это блендинг анимаций, чтобы при стрельбе из левого пистолета не обрывалась анимация правого, и если правый не стреляет, то он проигрывал idle анимацию вне зависимости от левого пистолета.


Отправлено FreeSlave 10-10-2021 в 10:26:

Достаю в HUD_WeaponsPostThink состояние клиентской пушки через gEngfuncs.GetViewModel() и меняю там curstate.body. Но отображается изменение несколько позже. Можно ли как-то триггернуть перерисовку?

__________________
I'm on github
I'm on opendesktop.org


Отправлено Ku2zoff 10-10-2021 в 16:42:

FreeSlave посылай с сервера в мессаге SVC_WEAPONANIM. Тогда бодя будет меняться не посреди кадра, а в начале. Но если надо менять налету, лучше используй Xash Weapon System с её бодями и скинами.

Добавлено 10-10-2021 в 23:42:

Ещё можешь попробовать менять бодю не в посттчинке, а в HUD_Frame. Теоретически, если операции, что делаются в ItemPreFrame запихать в HUD_Frame, а те, что в ItemPostFrame, оставить в HUD_WeaponsPostThink, это избавит систему оружий от глюков. Но ссылку на инфу о предиктинге можно получить только из HUD_PostRunCmd. Так что проще вообще нафиг вырезать клиентские пушки. От них один геморрой, а лаг в полсекунды при стрельбе не так уж заметен при игре по сети.


Отправлено FreeSlave 10-10-2021 в 18:01:

Ku2zoff SVC_WEAPONANIM же резетнет саму анимацию? Мне нужно менять боди без смены анимации, поэтому полез напрямую в ViewModel.

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

__________________
I'm on github
I'm on opendesktop.org


Отправлено Дядя Миша 10-10-2021 в 18:03:

Помню я с этим дерьмом боролся на уровне движка. Вроде даже победил.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ku2zoff 10-10-2021 в 18:49:

Цитата:
FreeSlave писал:
Мне нужно менять боди без смены анимации

Я в своё время это прекрасно проделывал на спирите 1.9 в ItemPostFrame. Всё нормально менялось. Так что клиентские пушки однозначно под нож, а систему скинов и бодей из Xash Weapon System в студию.


Отправлено Crystallize 16-10-2021 в 14:39:

Как сделать чтобы из противоположных кнопок типа W и S передавалась всегда только та которая была нажата последней?


Отправлено Дядя Миша 16-10-2021 в 15:25:

Куда передавалась?

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ku2zoff 16-10-2021 в 17:24:

Crystallize "отжимай" противоположную кнопку в коде инпута:

C++ Source Code:
1
void IN_ForwardDown(void)
2
{
3
  KeyUp(&in_back); // новое
4
  KeyDown(&in_forward);
5
  gHUD.m_Spectator.HandleButtonsDown( IN_FORWARD );
6
}

Наоборот для IN_BackDown. Не знаю, сработает ли. Надо наверное переписать работу со стейтами кнопок.


Отправлено hgrunt_2020 19-10-2021 в 21:26:

Перегрев

Я тут запил перегрев оружия, и думаю, может сделать из этого нубо-тутор?
Собсна демонстрация онного https://youtu.be/xZpEV5QODLQ

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Ku2zoff 20-10-2021 в 00:02:

hgrunt_2020 а где коронное "Пацаны, я маслину поймал!"? Непорядок
Ну а почему нет? Выложи, мб кому-то пригодится.


Отправлено hgrunt_2020 20-10-2021 в 04:52:

Цитата:
Ku2zoff писал:
hgrunt_2020 а где коронное "Пацаны, я маслину поймал!"? Непорядок

Ну дык это не сталкер а метро

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено hgrunt_2020 21-10-2021 в 09:20:

На вью модели можно регулировать кости?

А на вью модели можно регулировать кости? ну контролировать, как голову у нпс, мне для индикатора надо.
Если да то как контролировать эту кость?

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Дядя Миша 21-10-2021 в 11:32:

При сборке модели очевидно надо создать контроллер кости.

__________________
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 21-10-2021 в 11:33:

Дядя Миша
это да, но как это сделать в коде, на модели то я уже сделал контролер

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Ku2zoff 21-10-2021 в 12:39:

hgrunt_2020 проверить m_pCurrentEntity на вьюмодель, а потом крутить у этой энтити контроллер. Положение контроллера слать на клиент пользовательской мессагой. Наверное, для вьмоделей можно даже сделать блендинг между анимациями. Например, чтобы не было резкого перехода между idle/fidget и reload.


Отправлено hgrunt_2020 26-10-2021 в 02:43:

Ku2zoff
Даже интересно стало про блендинг анимаций на вью модели

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Ku2zoff 26-10-2021 в 09:37:

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. Насколько мне известно, движок этого не делает.


Отправлено Дядя Миша 26-10-2021 в 14:32:

Цитата:
Ku2zoff писал:
хранится почти то же самое, но с некоторой задержкой

Там не задержка. Оно там лежит сколько угодно, пока его не перезапишут.

Цитата:
Ku2zoff писал:
заполнять 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'


Отправлено [CFR] B@N@N 28-10-2021 в 13:52:

Значит задача такая есть 2 модели с одинаковым скелетов но разным порядком костей. Ну и короче мне надо чтобы пересадить анимации с одной модели на вторую и возникает такой вопрос - Как можно свапать кости подскажите или может бытт есть прога для этого?


Отправлено Ku2zoff 28-10-2021 в 14:40:

Если милка импортирует анимации некорректно, стоит попробовать во фрагмоушене.


Отправлено [CFR] B@N@N 28-10-2021 в 15:02:

Нет дело не в милке так как это изначально модели с разным порядком костей.

Добавлено 28-10-2021 в 18:02:

Потому что одна модель из одного мода а другая из другово и имеет другие анимации и иной порядок костей
Типа кости ног в одной имеют номера 3, 4, 5 а во второй они уже где-то в конце и там 28,29,30
Ну и если так компиляции делать то анимация выкручивает эти ноги под не естественым углом


Отправлено Crystallize 30-10-2021 в 15:29:

Поиграл в SWAT Remastered от Aynekko, там встречается странный баг когда на определённых брашах, мировых, фонарик не рисуется. Там же рядом есть лифт который едет рывками если на нем убить слишком много солдатиков (они в итоге проваливаются насквозь и тогда он едет) но это-то как раз известно, я думаю.


Отправлено FreeSlave 01-11-2021 в 09:07:

Наверняка многие замечали, что trigger_hurt не воздействует на стоящих на месте монстров. Собственно, с чем это связано, и какие есть варианты решения?

__________________
I'm on github
I'm on opendesktop.org


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

Потому что триггеры действуют наоборот. В функции 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'


Отправлено FreeSlave 01-11-2021 в 13:31:

Да, точно, помню такое.
А есть ли способ проверить как-то с другой стороны? В 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


Отправлено Дядя Миша 01-11-2021 в 13:39:

Цитата:
FreeSlave писал:
А есть ли способ проверить как-то с другой стороны?

Не усложняй. Просто вызывай для монстров UTIL_SetOrigin каждый Think.
То что ты хочешь реально нужно только для быстролетящих предметов, типа стрелы арбалета, которая действительно может пролететь тонкий триггер не коснуться его.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FreeSlave 05-11-2021 в 10:09:

Дядя Миша, хмм, попробовал с UTIL_SetOrigin( pev, pev->origin ) в MonsterThink, ничего не поменялось.
Карта с примером в аттаче.

__________________
I'm on github
I'm on opendesktop.org


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

Может вызываешь не оттуда?

__________________
My Projects: download page

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

Цитата:

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


Отправлено FreeSlave 05-11-2021 в 11:17:

Дядя Миша, а там большой выбор? Вот изменение https://github.com/FreeSlave/hlsdk-...4b9b852949f54a9

__________________
I'm on github
I'm on opendesktop.org


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

Пихни алерт в 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'


Отправлено FreeSlave 05-11-2021 в 13:48:

Дядя Миша, добавил в CTalkMonster::Touch. На trigger_hurt не вызывается.

__________________
I'm on github
I'm on opendesktop.org


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

в 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'


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

Можно ли передать на клиент отрицательный iuser(1-4)? Столкнулся с тем, что приходит 0. Положительное число видит.

__________________
Мой мод на Xash


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

Aynekko попробуй увеличить количество бит в delta.lst до 8. Как, например, у sequence и gaitsequence. Там точно и стопудово приходят отрицательные значения.


Отправлено Aynekko 08-11-2021 в 21:55:

Ku2zoff спасибо, что откликнулся, в entity encode у меня уже стоит 16, 1.0 у всех iuser. Но даже число -3 не проходит, пишет ноль. Больше нуля выставляю сразу все четко. Если это важно, то ставлю iuser3 в спаун солдата, на карте только я и солдат, пустая коробка. Пишу 555, вижу на клиенте 555, пишу отрицалку вижу ноль...

__________________
Мой мод на Xash


Отправлено Ku2zoff 09-11-2021 в 06:15:

Aynekko тогда не знаю, в чём дело. Поступи по-другому. Вместо отрицательных чисел используй какой-нибудь диапазон. Например, в качестве положительных 1-255, а в качестве отрицательных 256-511. То есть, у тебя на клиенте проверка была

C++ Source Code:
if (entity->curstate.iuser4 < 0)

а стала
C++ Source Code:
if (entity->curstate.iuser4 > 256)

Ну или
C++ Source Code:
if (entity->curstate.iuser4 > 256)
  entity->curstate.iuser4 = 256 - entity->curstate.iuser4;

Таким образом ты уже на клиенте получишь отрицательное число.

В AddToFullPack иузеры вписаны? Где они из энтварсов передаются в entity_state?

Добавлено 09-11-2021 в 13:15:

Щас глянул в сорцы ксаш мода, а они там все уже заняты, кроме iuser4:
C++ Source Code:
state->iuser1	 = ent->v.iuser1; // flags
state->iuser2	 = ent->v.iuser2; // flags
state->iuser3	 = ent->v.iuser3; // vertexlight cachenum
state->iuser4	 = ent->v.iuser4;

Надеюсь, ты это учёл. Вообще, это для енв_статиков, и проверки в коде клиента должны быть.


Отправлено Aynekko 09-11-2021 в 07:24:

В принципе я уже решил проблему, заведя новый pev-effects, но все равно хотелось бы разобраться.

Цитата:
Ku2zoff писал:
Вместо отрицательных чисел используй какой-нибудь диапазон.

Вот чтобы избежать возможных конфликтов со статиками, я хотел отрицательное число вписать. Когда ставил положительное, у меня статик делал тот же эффект ибо iuser совпал
Цитата:
Ku2zoff писал:
В AddToFullPack иузеры вписаны?

Ага. В самом конце addtofullpack вывел в консоль все четыре iuser. Поставил число -5. Так и выводит. То есть с сервера ушло -5.
На клиенте алерт в консоль стоит прямо первой строчкой в HUD_AddEntity. Четыре нуля выводит. Если пишу положительное число, выводит правильно. Капец странно. И число маленькое же.
Я уже искал в коде какие-то проверки на обнуление, если меньше нуля - не удалось найти. Может проверь у себя, как работает ли у тебя.

__________________
Мой мод на Xash


Отправлено Дядя Миша 09-11-2021 в 08:54:

DT_SIGNED

Добавлено 09-11-2021 в 11:54:

Цитата:
Ku2zoff писал:
Вместо отрицательных чисел используй какой-нибудь диапазон

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 09-11-2021 в 09:13:

Цитата:
Дядя Миша писал:
DT_SIGNED

Ларчик просто открывался. Сработало!

__________________
Мой мод на Xash


Отправлено [CFR] B@N@N 09-11-2021 в 11:22:

Может просто множить искомое число на -1 при получении?


Отправлено Aynekko 09-11-2021 в 11:46:

Цитата:
[CFR] B@N@N писал:
Может просто множить искомое число на -1 при получении?

Гениально, надо было сразу так сделать.

__________________
Мой мод на Xash


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

Хотел на клиенте повращать браш. Обнуляю там angles и параллельно постоянно считаются и задаются новые координаты. Но он не крутится.
Сделал ту же самую энтитю, но точечную, с моделькой - крутится.
Судя по репортам консоль, брашевая энтитя приходит на клиент, координаты так же считаются и задаются. Если делать то же самое на сервере, то браш крутится. Какая-то особенность для брашевых энтитей?

__________________
Мой мод на Xash


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

Aynekko с сервера приходят координаты и углы, а клиент уже по ним производит трансформацию. Учти, что брашевая модель - субмодель мира.

Цитата:
Aynekko писал:
точечную, с моделькой - крутится

Ты крутишь только клиентскую энтитю. На сервере всё остаётся по-старому. Как только придёт новый пакет данных - твоя энтитя встанет в первоначальное положение. Вижу два выхода: первое, это крутить на сервере, как положено. Второе, это делать чисто клиентскую энтитю, и оперировать ей. Со студиомодельками такое канает, с брашами - не знаю. Их как минимум придётся грузить из отдельных бсп (то есть энтитя будет точечной), как итемы в первой кваке.


Отправлено Aynekko 14-11-2021 в 11:15:

Цитата:
Ku2zoff писал:
Ты крутишь только клиентскую энтитю.

Я знаю, энтитя несолидная, так что проблем не будет, мне просто надо сделать визуальный эффект, на сервер побоку.

Собственно вот нехитрый код. На клиенте я просто подменяю angles, когда они приходят (а приходит по идее всегда ноль, т.к. на сервере энтитя не двигается)
C++ Source Code:
1
static Vector Angles;
2
Angles.z += 200 * g_fFrametime;
3
if( Angles.z > 359 ) Angles.z = 0;
4
e->angles = Angles;

Получился такой простой клиентский func_rotating. С моделькой отлично работает, а вот почему с брашем не прокатывает - загадка.

__________________
Мой мод на Xash


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

Цитата:
Aynekko писал:
e->angles = Angles;

попробуй e->curstate.angles.


Отправлено Aynekko 14-11-2021 в 11:59:

Не, тоже не хотит. И моделька тогда тоже не крутится, что интересно. Только если просто angles менять

Добавлено 14-11-2021 в 14:59:

Все, нашел. В R_AddEntity нашел, где трансформация браша происходит.

C++ Source Code:
if( clent->model->type == mod_brush )
  clent->hCachedMatrix = GL_CacheState( clent->origin, clent->angles );

Переставил код сюда перед заданием матрицы. Все отлично работает. Спасибо, что откликнулся

__________________
Мой мод на Xash


Отправлено Chyvachok 23-11-2021 в 14:51:

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

Добавлено 23-11-2021 в 15:51:

И вопрос по R_StreakSplash, как в нем указывается цвет? Там color не rgb, а просто одно число.


Отправлено Ku2zoff 23-11-2021 в 15:13:

Цитата:
Chyvachok писал:
color не rgb, а просто одно число

Скорее всего, цвет берётся из палитры. Как у всех партиклей. Открывай palette.lmp в wally и смотри индексы цветов.
Цитата:
Chyvachok писал:
как на клиенте сдвинуть счетчик патронов?

У них расстояние считается от правого края экрана:
C++ Source Code:
x = ScreeinWidth - ширина спрайта - отступ.

Добавь ширину второго спрайта и ещё один отступ.


Отправлено Chyvachok 23-11-2021 в 16:30:

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); }


Добавлено 23-11-2021 в 17:30:

Жаль что я кодер никакой, вот это бы как-то накодить, чтобы края спрайтов сглаживались когда в стену упираются как тут: http://www.ogse.ru/gallery/13.jpg


Отправлено Дядя Миша 23-11-2021 в 16:40:

Chyvachok софт-партикли делаются через шейдеры
Но твоя идея тоже интересная.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Chyvachok 23-11-2021 в 16:59:

Мне бы хотя бы начало лучика мягким сделать, идея есть, грубо говоря вместо одного 2 луча нарисовать, один начальный короткий отрезок, с прозрачностью 0 в начале луча, и непрозрачный в конце, и дальше как этот отрезок заканчивается просто нарисовать дальше второй луч, полностью непрозрачный, но вот как это закодить то, в этом pTriAPI я вообще не очень шарю в тех же координатах для вертексов, да и вообще с этими векторами наверное больше всего геморроя, я еле смог заставить на клиенте спавнить в эвенте оружия R_Sprite_Trail чтобы они корректно спавнились, тоже возня с векторами была.


Отправлено [CFR] B@N@N 23-11-2021 в 18:39:

Цитата:
Chyvachok писал:
Requires texture tiling enabled


Из надписи следует что у тебя там тайлинг текстуры.
Лучи они из отрезков коротких делаются и я предпологаю что надо сделать какой то шаг по брайтнесу - скажем, первые 10 кусков луча повышать прозрачность от 0 до 255 с шагом в 25. Думаю будет красиво


Дядя Миша
Шейдеров в хл нету и откуда их человек возьмёт если пишет что не кодер? Это не каждому под силу


Отправлено Дядя Миша 24-11-2021 в 06:01:

Я просто вспомнил как делал в ксаш-моде программный экспоненциальный туманчег партиклям
Там же рядом можно было замутить и повертексные софт-партикли через 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'


Отправлено [CFR] B@N@N 24-11-2021 в 11:54:

Дядя Миша

Софт партикли требуют ditect X 11 и старше. Не?


Отправлено Дядя Миша 24-11-2021 в 18:12:

Цитата:
[CFR] B@N@N писал:
Софт партикли требуют ditect X 11 и старше. Не?

С точки зрения маркетологов Microsoft - безусловно

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 24-11-2021 в 18:28:

Цитата:
[CFR] B@N@N писал:
Софт партикли требуют ditect X 11 и старше. Не?

был тут разговор что на винтукее они должны запускаться.


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

Можно ли как-то заставить построитель нодов коннектить ноды находящиеся по обе стороны от двери?



Из-за отсутствия связи монстры часто тупят на проходах.

__________________
I'm on github
I'm on opendesktop.org


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

Цитата:
FreeSlave писал:
Можно ли как-то заставить построитель нодов коннектить ноды находящиеся по обе стороны от двери?

Может проход слишком узкий? Попробуй сделать пошире. У меня нормально коннектится всегда.

__________________
Мой мод на Xash


Отправлено FreeSlave 04-12-2021 в 12:46:

Цитата:
Aynekko писал:
Может проход слишком узкий? Попробуй сделать пошире.


Не, никак не помогает. Если что, дверь изначально закрыта (как правая на скрине). Связь в таком случае не появляется. А вот если поставить дверям Starts open, то связь строится. Можно конечно закрывать двери после построения нодграфа, но не хотелось бы городить мапперские хаки.

__________________
I'm on github
I'm on opendesktop.org


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

В CGraph :: HandleLinkEnt есть код, связанный с этим

C++ Source Code:
if ( FClassnameIs( pevLinkEnt, "func_door" ) || FClassnameIs( pevLinkEnt, "func_door_rotating" ) )

Я сначала думал, что сам что-то сломал, потому что был абсолютно уверен, что граф строился через любые двери. Раз у тебя такое, то видимо нет.
Я не стал особо разбираться с этим и поставил return TRUE для этого условия и граф стал сразу строиться через все двери. Поглядев это условие, я понял, что мне оно в принципе и не нужно в моде.
В общем, копай в этом условии. Может нужно для построения графа сделать какое-то исключение.

Добавлено 04-12-2021 в 16:26:

Сделал так:
C++ Source Code:
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
..........

WorldGraph.BuildingRoute задал как true в начале CTestHull :: BuildNodeGraph и выключил его в конце там же. Заодно и код вернул на место и все генерируется.

__________________
Мой мод на Xash


Отправлено FreeSlave 04-12-2021 в 20:30:

Aynekko, спасибо. Но саму структуру WorldGraph я бы не советовал трогать (ну или не забудь перегенерировать графы с нуля), лучше уж отдельную глобальную переменную.

__________________
I'm on github
I'm on opendesktop.org


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

В этом случае там ничего важного и не трогается, этот новый бул ставится true только после начала генерации вейпоинта, если его нет, и false при завершении операции. Может там уже и есть даже подобный бул, я просто решил завести новый как раз чтобы ничего не трогать. В любом случае, графы еще будут миллион раз переделаны, т.к. мод в глубокой разработке

__________________
Мой мод на Xash


Отправлено FreeSlave 05-12-2021 в 11:28:

Aynekko, я про то, что структура графа читается и сохраняется в файл напрямую.
Я как-то тоже добавлял в CGraph переменную, потом у меня монстры где-то то ли невалидный вектор получали, то ли ещё что, и кружились вокруг своей оси, когда хотели куда-либо пойти

__________________
I'm on github
I'm on opendesktop.org


Отправлено Ku2zoff 05-12-2021 в 12:16:

Цитата:
FreeSlave писал:
потом у меня монстры где-то то ли невалидный вектор получали, то ли ещё что, и кружились вокруг своей оси

Надо вносить изменения не в код графа, а в код навигации монстров. Хотя бы сделать проверку на присутствие врагов рядом с целевой нодой, чтобы она скипалась. Как раз над этим работаю. Потому что меня выбесило, когда к барнику вплотную подходит зомбарь, барник убегает. Но убегает не всегда к той ноде, к которой логичнее. Может проигнорить ноду, возле которой никого нет, и побежать к ноде, возле которой три зомбаря.

Добавлено 05-12-2021 в 19:16:

Цитата:
FreeSlave писал:
Можно ли как-то заставить построитель нодов коннектить ноды находящиеся по обе стороны от двери?

Тут что-то не так. Монстры должны нормально ходить через двери.
FreeSlave это где такая визуализация связей сделана? Насколько помню, в простой халфе партиклевые линии, которые очень плохо видно, а порой они вообще исчезают.


Отправлено FreeSlave 05-12-2021 в 12:24:

Цитата:
Ku2zoff писал:
Монстры должны нормально ходить через двери.

Это как повезет. Может встать так, что с безнодовым алгоритмом затупит.

Цитата:
Ku2zoff писал:
это где такая визуализация связей сделана?

impulse 197
В обычной халфе есть.

__________________
I'm on github
I'm on opendesktop.org


Отправлено Ku2zoff 05-12-2021 в 12:47:

Стоп. Проверил обычную халфу, в ней так и показываются связи. Только не на всех картах их почему-то видно.

Добавлено 05-12-2021 в 19:47:

Нашёл статью о нодах на TWHL. Цитата:

Цитата:
As mentioned before, nodes will only create a link where there is a visual line of sight between two nodes. Luckily, it ignores movable brush entities, such as func_doors, so you can place this door in between the nodes and there still will be a link.

То есть, связь через двери должна создаваться.


Отправлено Aynekko 05-12-2021 в 12:49:

Цитата:
FreeSlave писал:
Aynekko, я про то, что структура графа читается и сохраняется в файл напрямую.

Да, вероятно это может привести к такому. Ну в моем случае не беда.
Цитата:
Ku2zoff писал:
Как раз над этим работаю.

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

__________________
Мой мод на Xash


Отправлено FreeSlave 05-12-2021 в 16:03:

Я поподробнее посмотрел код реакции монстров на двери и он вообще довольно опасный.

Например:

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


Отправлено Aynekko 05-12-2021 в 16:11:

Цитата:
FreeSlave писал:
Солдаты, пробегая под ранее открытыми воротами, закрывали их.

Такое сплошь и рядом. Даже у себя видел: есть двойные двери, довольно узкие. Так вот они их юзали-юзали, да так и не выюзали, и тупили там. С дверями у монстров вообще отношения особые, особенно с rotating.
Чтобы воспринималось все как надо, нужна у двери галка on/off mode, но вроде бы как в халфе такого нет, только спирит и ксашмод (? могу ошибаться).
Нужно доделать этот момент.

__________________
Мой мод на Xash


Отправлено FreeSlave 05-12-2021 в 16:29:

Цитата:
Aynekko писал:
нужна у двери галка on/off mode


Ты имеешь в виду правильная реакция на use_type? В Sven Co-op такое есть, называется Obey Trigger Mode https://sites.google.com/site/svenm...guide/func_door
Я у себя тоже её реализовал, но по умолчанию этот параметр у дверей не выставлен, для совместимости.

Цитата:
Aynekko писал:
Такое сплошь и рядом.

Монстры так могут игрока закрыть Да и вообще негоже игнорировать Monster Can't

__________________
I'm on github
I'm on opendesktop.org


Отправлено FreeSlave 05-12-2021 в 21:04:

Ещё заметил, что связи не строятся через func_monsterclip. Пока не нашёл, как чинить. У кого-нибудь есть мысли на этот счёт?

__________________
I'm on github
I'm on opendesktop.org


Отправлено Дядя Миша 05-12-2021 в 21:29:

Цитата:
FreeSlave писал:
Ещё заметил, что связи не строятся через func_monsterclip

Монстер клип для того и придуман, чёб монстры сквозь него не ходили
Он же неотключаемый вроде.

Добавлено 06-12-2021 в 00:29:

Но я подскажу в чём тут дело - во флаге FL_MONSTERCLIP, который учитывает трасса. Т.е. CTestHull должен иметь тоже этот флаг, чёб монстерклипы были проходимыми.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FreeSlave 05-12-2021 в 23:20:

Цитата:
Дядя Миша писал:
Монстер клип для того и придуман, чёб монстры сквозь него не ходили

Так не все, а только те, что с флагом Monsterclip.

Цитата:
Дядя Миша писал:
Он же неотключаемый вроде.

Его можно удалять

Цитата:
Дядя Миша писал:
Но я подскажу в чём тут дело - во флаге FL_MONSTERCLIP, который учитывает трасса. Т.е. CTestHull должен иметь тоже этот флаг, чёб монстерклипы были проходимыми.

Я тоже об этом подумал, и добавлял FL_MONSTERCLIP в CTestHull::Spawn, но это не помогло.
Ну и в HandleLinkEnt добавил ветку, учитывающую func_monsterclip и возвращающую на него успех.

__________________
I'm on github
I'm on opendesktop.org


Отправлено Crystallize 06-12-2021 в 01:35:

Цитата:
Ku2zoff писал:
То есть, связь через двери должна создаваться.

Может позже поломали?


Отправлено Ku2zoff 06-12-2021 в 01:38:

Цитата:
Crystallize писал:
Может позже поломали?

Нет. Код нодеграфа не изменялся с самого релиза халфы.
Дело вот в чём:
Цитата:
FreeSlave писал:
Я поподробнее посмотрел код реакции монстров на двери и он вообще довольно опасный.

Тут либо кодить для своего мода, либо копипастить свойства дверей с халфовских карт.


Отправлено Дядя Миша 06-12-2021 в 06:19:

Цитата:
FreeSlave писал:
Я тоже об этом подумал, и добавлял FL_MONSTERCLIP в CTestHull::Spawn, но это не помогло.


Не помогло, потому что UTIL_TraceLine не использует флажки FL_MONSTERCLIP. Тебе нужно использовать UTIL_TraceHull для построения нодов с нулевым хуллом. Тогда сработает.

Добавлено 06-12-2021 в 09:19:

И FL_MONSTERCLIP добавлять в g_pBodyQueHead, а не в CTestHull.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Chyvachok 06-12-2021 в 11:52:

Такой вопрос, никто не делал луч моделькой? Типа как у Шафта в 1 Квейке? Я смотрел код dmc, как я понял там луч средствами ХЛ рисуется, через R_BeamPoints.


Отправлено Ku2zoff 06-12-2021 в 12:38:

Цитата:
Chyvachok писал:
никто не делал луч моделькой?

Зачем? В первой кваке не было спрайтов, ЕМНИП, только партикли. Отсюда и модельки для огня, для молний шамблиров и шафта, плевков демонов. Во второй кваке то же самое - модельки и партикли. В халфе одно нехорошее ограничение на спрайтовые эффекты - лимит темпэнтить. Можно обойти, используя три апи. Импотенциально можно накодить свою рисовалку спрайтов, в первой паранойе вроде бы что-то такое имеется.


Отправлено Дядя Миша 06-12-2021 в 17:45:

Цитата:
Ku2zoff писал:
В первой кваке не было спрайтов, ЕМНИП, только партикли

открой папку sprites и не позорься.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FreeSlave 06-12-2021 в 18:04:

Цитата:
Дядя Миша писал:
Не помогло, потому что UTIL_TraceLine не использует флажки FL_MONSTERCLIP. Тебе нужно использовать UTIL_TraceHull для построения нодов с нулевым хуллом. Тогда сработает.

Добавлено сегодня в 09:19:

И FL_MONSTERCLIP добавлять в g_pBodyQueHead, а не в CTestHull.


Это в LinkVisibleNodes? Заменял там два UTIL_TraceLine на UTIL_TraceHull c point_hull и выставлял FL_MONSTERCLIP для g_pBodyQueueHead перед этим. По-прежнему не генерится.

Вот изменения https://github.com/FreeSlave/hlsdk-...7b9b74024066762

Карта для теста в аттаче

__________________
I'm on github
I'm on opendesktop.org


Отправлено Дядя Миша 06-12-2021 в 18:40:

Ну тады ой Но всё равно надо копать в этом направлении.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FreeSlave 07-12-2021 в 01:21:

Копать скорее надо в направлении Walk Rejection. Я создал карту-коробку с двумя нодами. Без препятствий между ними связь есть. Если поставить func_monsterclip, то связь не рисуется.

В логе

Цитата:

Walk Rejection:
-------------------------------------------------------------------------------
Node 0:

NODE_SMALL_HULL step 112
-------------------------------------------------------------------------------
Node 1:

NODE_SMALL_HULL step 80


Т.е. это WALK_MOVE отбивает связи.

Взглянул повнимательнее на func_monsterclip. Он вызывает CFuncWall:Spawn, в котором выставляется FL_WORLDBRUSH. Если в CFuncMonsterClip::Spawn его убрать, то связь есть.
А теперь вопрос: безопасно ли убирать FL_WORLDBRUSH у func_monsterclip? Возможно разрабы и вовсе не подразумевали, что у него такой флаг должен быть, ведь выставляется он через Spawn родительского класса. Я потестил и работает оно как ожидается - монстров с Monsterclip не пропускает, а без него - пропускает.

__________________
I'm on github
I'm on opendesktop.org


Отправлено Дядя Миша 07-12-2021 в 06:47:

Цитата:
FreeSlave писал:
А теперь вопрос: безопасно ли убирать FL_WORLDBRUSH у func_monsterclip?

FL_WORLDBRUSH - это хинт-подсказка, что по такому брашу можно смело ходить, чтоб монстры не тупили. В то время как монстерклип вертикальный и по нему обычно никто не ходит. Так что да, убирай смело.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Chyvachok 07-12-2021 в 11:42:

Такой вопрос, а что делает таких монстров как барнаклы и турели не разрываемыми на куски? У Турелей тчинк TurretDeath вместо killed используется. Барнаклов смог сделать, но опять же - их разрывает только если их взорвать сразу, уже убитого нельзя на ошметки разнести, а у турелей, попытка моя как то их сделать разбиваемыми на куски сделала их не убиваемыми.


Отправлено Ku2zoff 07-12-2021 в 12:05:

Chyvachok у барнакла своя функция Killed, из неё не вызывается GibMonster. То же самое с турелями.


Отправлено Chyvachok 07-12-2021 в 12:28:

Ku2zoff У барнакла может быть дело в этих строках в Killed?

pev->solid = SOLID_NOT;
pev->takedamage = DAMAGE_NO;

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


Отправлено Ku2zoff 07-12-2021 в 12:31:

Это влияет да. А ещё вот:

C++ Source Code:
1
if ( HasMemory( bits_MEMORY_KILLED ) )
2
{
3
  if ( ShouldGibMonster( iGib ) )
4
    CallGibMonster();
5
  return;
6
}
Надо вызывать GibMonster из Killed.


Отправлено Chyvachok 07-12-2021 в 12:37:

Насчет этих двух строк, если убрать 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 ); }


Добавлено 07-12-2021 в 14:37:

Ku2zoff в CBaseMonster::Killed почему то аж 2 вызова ShouldGibMonster


Отправлено Ku2zoff 07-12-2021 в 12:39:

CBarnacle :: WaitTillDead тут возвращай ему солидность. Может подходящее место. А вообще, чтобы жертва не застревала, можно воспользоваться груптрейсом.


Отправлено Chyvachok 07-12-2021 в 12:50:

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

Добавлено 07-12-2021 в 14:44:

Цитата:
Ku2zoff писал:
можно воспользоваться груптрейсом.


Вот только как им пользоваться еще.

Добавлено 07-12-2021 в 14:50:

С повторным проигрыванием анимации смерти разобрался, осталось только с жертвой что-то придумать. Такая же хрень и с турелями, они не солидные делаются, а чтобы им урон можно было нанести, надо тоже сделать их чтобы они были как трупы, получали урон, но сквозь них можно было проходить.


Отправлено Ku2zoff 07-12-2021 в 14:38:

Цитата:
Chyvachok писал:
Вот только как им пользоваться еще.

Ты же пользовался уже: http://hlfx.ru/forum/showthread.php...9043#post169043


Отправлено Chyvachok 07-12-2021 в 15:57:

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; } } }


Добавлено 07-12-2021 в 17:57:

С турелями блин еще моделить надо, настенным чтобы основа после убийства оставалась на стене висеть, а напольным просто куски, а на это больше всего времени уходит (

Кстати сделал боди отстреленных конечностей для ХД вортигонта: https://files.gamebanana.com/bitpit/islave.rar


Отправлено Ku2zoff 07-12-2021 в 16:23:

Цитата:
Chyvachok писал:
//pev->solid = SOLID_NOT;
//pev->takedamage = DAMAGE_NO;
pev->groupinfo = 1;

А кто будет вызывать UTIL_SetGroupTrace и UTIL_UnsetGroupTrace?
C++ Source Code:
pev->groupinfo = 1;
pVictim->pev->groupinfo = 1;
 
UTIL_SetGroupTrace(pev->groupinfo, GROUP_OP_NAND);
UTIL_SetGroupTrace(pVictim->pev->groupinfo, GROUP_OP_NAND);

А потом, чтобы вернуть коллизию:
C++ Source Code:
UTIL_SetGroupTrace(pev->groupinfo, GROUP_OP_AND);
UTIL_SetGroupTrace(pVictim->pev->groupinfo, GROUP_OP_AND);

Как-то так. У меня таким макаром игроки переставали коллайдить с func_wall и друг с другом, когда ползают. Потом я написал код лучше. Не помню, где я вычитал, что вызывать надо именно так. Посмотри сорцы ксашдвижка, из функций должно стать ясно, что они делают.

Добавлено 07-12-2021 в 23:23:

Цитата:
Chyvachok писал:
сделал боди отстреленных конечностей для ХД вортигонта

Ух ты, весьма кстати. Я у себя заюзаю, только изменю немного. Свои гибсы для каждого монстра я делал ещё очень давно, код простой. А вот модели делать долго, хоть и не очень сложно.


Отправлено Chyvachok 07-12-2021 в 16:52:

Цитата:
Ku2zoff писал:
Ух ты, весьма кстати. Я у себя заюзаю, только изменю немного. Свои гибсы для каждого монстра я делал ещё очень давно, код простой. А вот модели делать долго, хоть и не очень сложно.


Решил поменять ЛД модели из Брутала на ХД с классическим стилем по тихоньку. Кстати не знаешь есть ли где-то модель ХД Барника но с анимациями под автомат-дробовик и с пинком? ЛД-шный скелет насколько я помню отличается, врядли анимации из БХЛ встанут.

Насчет коллизии, мне наоборот надо чтобы барнакл уже не с чем не колидил, как и трупы от монстров, я просто не знаю, а когда и как вернуть коллизию жертве, если барнакл уже может быть давно взорван на куски и удален? Я поэтому не хочу жертву то трогать, этого pev->groupinfo = 1; вроде достаточно с головой, проверил - урон по барнаклу от оружия проходит, жертва выпадает, игрок сам сквозь труп тоже проходит.

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

Добавлено 07-12-2021 в 18:52:

Цитата:
Ku2zoff писал:
Свои гибсы для каждого монстра я делал ещё очень давно, код простой.


Я вот такое наваял, не знаю насколько грамотно. Не так как в БХЛ но вроде лучше чес в Инвазионе (там нельзя больше одной конечности отстреливать, но и нельзя как в БХЛ сделать так чтобы НПС живой оставался, к примеру как зомби с отстреленной рукой, не придумал как, и чтобы оно еще нормально все работало.

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 ) ); }


Отправлено Ku2zoff 07-12-2021 в 17:15:

Цитата:
Chyvachok писал:
модель ХД Барника но с анимациями под автомат-дробовик и с пинком?

Zombie Edition же. За авторством наших ребят. Я оттуда взял анимации дробовика. Правда, переделал ходьбу и бег, т.к. они там ущербные. И добавил turnleft/turnright. Попозже аттачем скину тебе smd файлы, может допилишь, чтобы было красиво. Анимки эти заточены под модели с подвижными глазами, веками и бровями от Ромки или из Decay. Так что работай с этими моделями. Потом можно вкомпилить в обычного HD барника, скелеты совместимы.
Цитата:
Chyvachok писал:
нельзя как в БХЛ сделать так чтобы НПС живой оставался, к примеру как зомби с отстреленной рукой, не придумал как, и чтобы оно еще нормально все работало.

Делаешь по аналогии с limp health у грантов: меняешь анимации в SetActivity. То есть по факту монстр жив, но активности у него другие и внешний вид тоже.

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

Я бы не раздувал код TraceAttack, а передавал хитгруппу сразу в функцию SpawnSpecificGib. А там уже switch case.

Добавлено 08-12-2021 в 00:15:

Кстати, такой вопрос. Кто качал Accurate SD models учёных и барников? В основе модели от Ромки, но головы очень похожи на LD версии, нет этих убогих ХДпачных рож. Хотелось бы ещё что-такое найти, чтобы бошки были высокополигональные, но смотрелись олдскульно.


Отправлено Chyvachok 07-12-2021 в 17:34:

Цитата:
Ku2zoff писал:
Я бы не раздувал код TraceAttack, а передавал хитгруппу сразу в функцию SpawnSpecificGib.


А чем это чревато? Я по лучше не придумал, но я честно особо красиво код писать и не умею.


Отправлено Ku2zoff 07-12-2021 в 19:42:

Chyvachok особо ничем, разве что удобочитаемость снижается.

Добавлено 08-12-2021 в 02:42:

Как обещал - секвенции дробовика и пинка хедкраба ногой в аттаче. Надо немножко их допилить. Для M4 секвенции можно выдрать из оригинальной модели мода Zombie Edition.


Отправлено FreeSlave 08-12-2021 в 17:01:

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


Да, если строить сквозь все двери, есть такой баг. Я отследил его до CGraph::FindShortestPath. А виновата вот эта строчка: https://github.com/ValveSoftware/ha.../nodes.cpp#L611

Во время построения графа вызывается ComputeStaticRoutingTables, которая по окончании и ставит m_fRoutingComplete в TRUE, и любой FindShortestPath начинает идти по уже проложенному пути, не заходя в другую ветку кода, где вызывается HandleLinkEnt https://github.com/ValveSoftware/ha.../nodes.cpp#L701
Вызывается он кстати с параметром NODEGRAPH_STATIC, что похоже в какой-то мере и есть аналог нашей булевой переменной, которую мы вводим во время CTestHull::BuildNodeGraph.

FindShortestPath вызывается при построения пути по нодам для монстра в CBaseMonster::FGetNodeRoute - https://github.com/ValveSoftware/ha...sters.cpp#L2789
Что приводит к тому, что поиск пути попадает в ветку с m_fRoutingComplete, без учёта энтитей.
Кстати, из-за этого в оригинальной Халфе может затупить монстр в попытках обойти func_breakable - с NODEGRAPH_STATIC для него всегда возвращается TRUE, в результате монстр считает, что может пройти насквозь (как и в твоём случае с дверью).

Лечится это следующим способом.
Меняем сигнатуру FindShortestPath
C++ Source Code:
int		FindShortestPath ( int *piPath, int iStart, int iDest, int iHull, int afCapMask );

на
C++ Source Code:
int		FindShortestPath ( int *piPath, int iStart, int iDest, int iHull, int afCapMask, bool dynamic = false );


Заменяем
C++ Source Code:
if( m_fRoutingComplete )

на
C++ Source Code:
if( !dynamic && m_fRoutingComplete )


Заменяем
C++ Source Code:
if( !HandleLinkEnt( iCurrentNode, m_pLinkPool[m_pNodes[iCurrentNode].m_iFirstLink + i].m_pLinkEnt, afCapMask, NODEGRAPH_STATIC ) )

на
C++ Source Code:
if( !HandleLinkEnt( iCurrentNode, m_pLinkPool[m_pNodes[iCurrentNode].m_iFirstLink + i].m_pLinkEnt, afCapMask, dynamic ? NODEGRAPH_DYNAMIC : NODEGRAPH_STATIC ) )


В FGetNodeRoute вызываем WorldGraph.FindShortestPath с true в качестве нового последнего аргумента.

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

__________________
I'm on github
I'm on opendesktop.org


Отправлено Aynekko 08-12-2021 в 17:58:

Цитата:
FreeSlave писал:
FindShortestPath

Вот я тоже уперся туда, а дальше залип.
Цитата:
FreeSlave писал:
по окончании и ставит m_fRoutingComplete в TRUE

Ага. Наверное, надо его использовать вместо нового условия, что я воткнул.
Цитата:
FreeSlave писал:
Лечится это следующим способом.

Я, конечно, офигел, но это реально работает. Монстряка поумнел на глазах спасибо большое. Буду тестировать.

Добавлено 08-12-2021 в 20:26:

Цитата:
Aynekko писал:
Буду тестировать.

Работает после построения нод. Перезапустил карту - опять упирается в дверь. Карту перекомпилировал и проверил еще раз, так же. Интересненько

Добавлено 08-12-2021 в 20:58:

Мой косяк. Мой BuildingRoute почему-то после перезапуска карты стал true. Где-то не учел условие. Попробую m_fRoutingComplete.

Да, отлично, можно его использовать. Ноды построились через закрытые двери и после перезапуска тоже все работает.

__________________
Мой мод на Xash


Отправлено FreeSlave 08-12-2021 в 18:06:

Цитата:
Aynekko писал:
Мой косяк. Мой BuildingRoute почему-то после перезапуска карты стал true. Где-то не учел условие. Попробую m_fRoutingComplete.


Попробуй всё-таки вынести в глобальную переменную вне класса. У тебя сэйв-рестор графа может быть поломан.
А вообще вполне возможно что дополнительная переменная не нужна и достаточно ориентироваться на NODEGRAPH_STATIC, всегда возвращая TRUE из HandleLinkEnt, вызванной с NODEGRAPH_STATIC, для дверей и func_breakable.

__________________
I'm on github
I'm on opendesktop.org


Отправлено Aynekko 08-12-2021 в 18:51:

Цитата:
FreeSlave писал:
У тебя сэйв-рестор графа может быть поломан.

После сейв-рестора у меня вообще HandleLinkEnt перестал вызываться (выставил алерт в самом начале). Если просто загружать карту, с/без графа, то все норм. Свою переменную я вообще вычистил полностью, использовал ту
C++ Source Code:
1
if ( FClassnameIs( pevLinkEnt, "func_door" ) || FClassnameIs( pevLinkEnt, "func_door_rotating" ) )
2
{// ent is a door.
3
if( !WorldGraph.m_fRoutingComplete )
4
  return TRUE;


Добавлено 08-12-2021 в 21:51:

Это условие не проходит после сейврестора, оно null становится
C++ Source Code:
// 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


Отправлено FreeSlave 08-12-2021 в 19:32:

Да, похоже что-то не так с 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


Отправлено Aynekko 08-12-2021 в 19:34:

Цитата:
FreeSlave писал:
перенес в ServerActivate в client.cpp

Да, помогло! Сейврестор починился. Теперь, как говорится, заживем
Кстати, насчет брейкаблей, у меня пока вот такая полу-рабочая попытка. Это в AdvanceRoute. Комменты оставил на будущее, но пока идей нет.
C++ Source Code:
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


Отправлено FreeSlave 08-12-2021 в 19:56:

Aynekko, хочешь сделать, чтобы монстры сами разбивали breakable'ы на своём пути? В общем случае лучше такое не позволять. Вдруг это взрывные бочки

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

__________________
I'm on github
I'm on opendesktop.org


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

Цитата:
FreeSlave писал:
хочешь сделать, чтобы монстры сами разбивали breakable'ы на своём пути?

Ну да. В одном месте поставил ящик, а потом туда враги приходят, если игрок его не разбил - то будут тупить там.
Как видишь по коду, с пинком не получилось. Почему-то он не всегда поворачивается на 100% в сторону брейкабли и пинает воздух, выглядит комично. Вообще надо бы флаг задать, да.
А бочки я уже сделал отдельной энтитей - как в хл2 по поведению, только без физики конечно же.

__________________
Мой мод на Xash


Отправлено FreeSlave 08-12-2021 в 20:12:

Цитата:
Aynekko писал:
Ну да. В одном месте поставил ящик, а потом туда враги приходят, если игрок его не разбил - то будут тупить там.


В каком смысле тупить? С теми изменениями, что мы обсуждали, они должны ящики считать препятствиями и обходить.

__________________
I'm on github
I'm on opendesktop.org


Отправлено Aynekko 08-12-2021 в 20:14:

Хехех, ну так дело в том, что ящик стоит посреди коридора там никак не обойти. Почему я, собственно, и сделал это вообще.

__________________
Мой мод на Xash


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

Цитата:
FreeSlave писал:
Я у себя вижу кучу сообщений **Could not find model.

Граф пытается после сейв/рестора прочекать брашевые энтити с моделями вида "*31", "*78", "*102", то есть субмоделями мира. Там какая-то трабла с этим, энтити не находит.
Цитата:
FreeSlave писал:
в целом звать FSetGraphPointers в CBasePlayer::Precache неверно

А, видимо они не успевают отресториться. Надо глядеть порядок вызова DispatchRestore изнутри движка, скорее всего он происходит после прекэша игрока.
Цитата:
FreeSlave писал:
А хуман грунты могут использовать пинок для поломки.

У нодов есть механизм подсказок для AI: m_sHintType. Можно добавить новый хинт "здесь ломать брейкаблю", и ноду с таким хинтом ставить перед ящиками. Во-первых, никто не подорвётся на бочке, во-вторых не будет ломать все подряд коробки, а только те, что рядом с нодой.


Отправлено Chyvachok 09-12-2021 в 14:22:

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);


В общем еще вот, к примеру когда я сделал Акимбо Хорнет заметил, если спавнить Хорнетов сразу при стрельбе с двух рук (первичная стреляет по очереди, левая правая, вторичная сразу с двух рук), и оставить код что подправляет траекторию чтобы они летели в центр экрана - то они в друг друга врезаются и падают, в общем опять же, как этот груп инфо сделать так чтобы если что хорнеты пролетали сквозь друг друга, и в тоже время попадали в НПС и наносили им урон, пусть я и убрал подправление траектории в прицел, все равно видно что они бывают в друг друга врезаются.


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

Цитата:
Chyvachok писал:
как точно этот UTIL_SetGroupTrace работает? Чет я туплю с ним, это надо обоим сущностям ставить одинаковый groupinfo? Просто я так и не понимаю результата конечного.

C++ Source Code:
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
}

При svs.groupop == GROUP_OP_AND две энтити коллайдят, если у них одинаковый групинфо. При svs.groupop == GROUP_OP_NAND две энтити коллайдят, если у них разные групинфо. Вроде так. Ставь барнаклу и жертве одинаковый групинфо, например энтиндекс барнакла и svs.groupop GROUP_OP_NAND. Нужно число отличное от нуля, иначе механизм будет игнорить. После падения жертвы на землю делай UTIL_UnsetGroupTrace, и ставь жертве pev->groupinfo = 0.

Добавлено 09-12-2021 в 21:50:

C++ Source Code:
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
}

Должно работать. Если я не ошибся, по умолчанию всегда GROUP_OP_AND, и pev->groupinfo всех энтить нулевые. Но, важно, чтобы groupinfo были ненулевые. Работает это со всеми энтитями, включая игроков. То есть можно отключить коллизию с тиммейтами, при том, что они смогут друг друга подстрелить.

Добавлено 09-12-2021 в 22:09:

Я сейчас сам попробую разные варианты. Тоже хочу, чтобы барнакл разваливался на куски.


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

Ku2zoff Вроде понял, в UTIL_SetGroupTrace в первую колонку идет номер группы, а во вторую тип коллизии, GROUP_OP_NAND или GROUP_OP_AND .

А вообще, обязательно ли изменять жертву? Просто это еще думать надо куда этот код всунуть еще, чтобы он точно вызвался, жертва ведь может быть кем угодно, и игрок и НПС-ы, это метод надо искать что у всех всегда вызывается.

В Теории достаточно снарядам выставить к примеру при спавне
pev->groupinfo с номером (как я понял любое число кроме 0) и UTIL_SetGroupTrace(this->entindex(), GROUP_OP_NAND);, это по идее должно предотвратить их коллиззию с друг другом и в тоже время оставить коллизию с монстрами? Допустим если я хочу сделать энергодробовик, и хочу быть уверенным что снаряды с собой не сколидят при выстреле.

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


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

Chyvachok я тут покумекал. Короче, с барнаклом решается всё просто:

C++ Source Code:
1
if (HasMemory(bits_MEMORY_KILLED))
2
{
3
  if (ShouldGibMonster(iGib))
4
    CallGibMonster();
5
  return;
6
}
7
 
8
Remember(bits_MEMORY_KILLED);
В самое начало функции CBarnacle :: Killed.
C++ Source Code:
if (ShouldGibMonster(iGib))
{
  CallGibMonster();
  return;
}
Туда же после закомментированной строки // CGib::SpawnRandomGibs( pev, 4, 1 );
C++ Source Code:
if (pev->solid == SOLID_NOT) pev->solid = SOLID_SLIDEBOX;
if (pev->takedamage == DAMAGE_NO) pev->takedamage = DAMAGE_AIM;
В самое начало функции CBarnacle :: WaitTillDead.
За 0.1 секунды, что проходят между Killed и WaitTillDead жертва успевает упасть. А там уже солидность и урон возвращаются. Может быть на высоких фпс или при низкой гравитации жертва не будет успевать выпасть, надо проверять.

Добавлено 09-12-2021 в 22:59:

Гибсы (человеческие, что выплёвываются в момент смерти) могут немного подзастрять в барнакле, но это некритично. Можно написать новую функцию, CBarnacle::SpawnRandomGibs, которая будет спавнить куски чуть ниже, чтобы они не застревали.


Отправлено Chyvachok 09-12-2021 в 17:35:

Кстати, а как сделать спрайт на клиенте который через ТриАпи рисуется чтобы на него влиял свет? Сделал себе следы крови за кусками, которые на Авроре сделаны, но на партикли не влияет свет, для плазмы какой нибуть или огня ракеты норм, но для дыма и кровяки надо напильником подпилить эту систему.


Отправлено Дядя Миша 09-12-2021 в 17:48:

В ксашевской авроре есть освещаемые партиклы.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Chyvachok 09-12-2021 в 18:01:

Дядя Миша а какие ключевые слова отвечают за освещение? CONTENT_SPOTLIGHT или m_iLightingModel?

Добавлено 09-12-2021 в 20:01:

Еще вот, в КсашХТ в triangleapi.h есть в void ( *LightAtPoint)( float *pos, float *value ); но ее нету в обычном ХЛСДК, оно будет работать в халве, если скопипастить? Там еще есть штуки что есть в КсашХТ но нету в обычной Халве.


Отправлено Дядя Миша 09-12-2021 в 18:14:

Цитата:
Chyvachok писал:
Еще вот, в КсашХТ в 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'


Отправлено Chyvachok 09-12-2021 в 18:21:

Дядя Миша собственно а как через 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.


Отправлено FreeSlave 09-12-2021 в 18:40:

Цитата:
Дядя Миша писал:
FL_WORLDBRUSH - это хинт-подсказка, что по такому брашу можно смело ходить, чтоб монстры не тупили. В то время как монстерклип вертикальный и по нему обычно никто не ходит. Так что да, убирай смело.


Вследствие этого появилась другая проблема. Теперь монстры с Monsterclip не осознают, что не могут дойти до ноды, и постоянно перестраивают путь в FGetNodeRoute. Надо как-нибудь для связей выставлять флаг, что она недоступна для монстров с Monsterclip.

__________________
I'm on github
I'm on opendesktop.org


Отправлено Chyvachok 09-12-2021 в 18:54:

Там где рисуется партикля в 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 такого вида, и по одной координате.


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

Исправил застревание гибсов в умирающем барнакле:

C++ Source Code:
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
}
Эту функцию нужно добавить в класс CBarnacle, и вызывать её вместо SpawnRandomGibs из HandleAnimEvent в кейсе BARNACLE_AE_PUKEGIB.


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

Ku2zoff может такие вещи оформлять отдельными сниппетами-темами в туторах? Яуже со счету сбился сколько вы фиксов к ксашу сделали.


Отправлено Chyvachok 09-12-2021 в 19:28:

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(); } }


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

Цитата:
Crystallize писал:
может такие вещи оформлять отдельными сниппетами-темами в туторах

Этим надо кому-то заняться и прошерстить за пару месяцев все темы по нубским вопросам, туторам, ксашу. Вообще всю ветку Half-Life SDK и частично Наши проекты. Долго это.
Цитата:
Chyvachok писал:
Тут жалуется на *=, пишет error C2676: binary '*=' : 'Vector' does not define this operator or a conversion to a type acceptable to the predefined operator

Да и честно я так и не придумал, как из вектора мне получит цвет в виде float.
C++ Source Code:
lightColor = lightColor * (1.0f / 255.0f);

У класса Vector в халфе нету нужных операторов +=, -=, *=, /= для работы с флоатами. Если очень надо, можно стащить из ReGameDLL:
C++ Source Code:
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); }


Отправлено Chyvachok 09-12-2021 в 20:21:

Ku2zoff тут даже не в *= дело - сам LightAtPoint не работает.

Добавлено 09-12-2021 в 22:21:

Он вместо освещенности в диапазоне 1-255 выдает некое число которое зависит от того куда смотрит игрок. pDraw->origin это ж позиция партикли? Хотя я пробовал и part->origin и что только можно. ХЗ почему в КсашХТ оно работает а тут нет.


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

Вообще, в ReGameDLL расширенный класс Vector, который позволяет всякие операции вроде

C++ Source Code:
pev->velocity /= 2;
вместо
C++ Source Code:
pev->velocity = pev->velocity / 2;


Отправлено Chyvachok 09-12-2021 в 20:30:

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); или нет.


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

Цитата:
Chyvachok писал:
Он вместо освещенности в диапазоне 1-255 выдает некое число которое зависит от того куда смотрит игрок.

C++ Source Code:
Color 0.749020 0.749020 0.533333

У меня вот такой вывод в консоль. Диапазон от 0 до 1. В качестве точки, откуда берётся освещённость взят вектор v_origin. Чем ярче место, где стоит игрок, тем больше цифры.


Отправлено Chyvachok 09-12-2021 в 20:35:

У меня по всем координатам кроме одной 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 и так далее.


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

Chyvachok попробуй засунуть в HUD_DrawTransparentTriangles

C++ Source Code:
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);
и глянуть вывод в консоли.

Добавлено 10-12-2021 в 03:41:

Ссылку на v_origin не забудь. Если будет нормально, выведи в консоль что выдаёт pDraw->origin, может быть в этом проблема.


Отправлено Chyvachok 09-12-2021 в 20:50:

v_origin это над методом void DLLEXPORT HUD_DrawTransparentTriangles( void ) добавить extern vec3_t v_origin;?

Пробовал пишет 0 0 0 снизу OPENGL_ERROR: GL_INVALID_ENUM_CALLED


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

Chyvachok да, верно. Интересная ошибка. Какой движок и какой мод?


Отправлено Chyvachok 09-12-2021 в 20:53:

Кстати этот же OPENGL_ERROR: GL_INVALID_ENUM_CALLED пишет и когда в партилклях вызывается.

Добавлено 09-12-2021 в 22:53:

Двиг Ксаш, код обычный ХЛСДК, не КсашХТ.


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

В голдсорсе мой код работает и пишет правильные значения, попробуй запустить под ним.


Отправлено Chyvachok 09-12-2021 в 21:01:

Вроде заработало в HUD_DrawTransparentTriangles, дело было в triangleapi.h, у меня изначально не было там LightAtPoint, я скопировал только LightAtPoint, теперь я скопирал вообще все что было из более нового СДК, вроде теперь пишет что надо. Остальные методы, там Color4fRendermode, BoxInPVS и так далее.

Добавлено 09-12-2021 в 23:01:

Что-то вроде в духе такого уже выводит 0.749020 0.749020 0.533333 и в коде партиклей.


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

Цитата:
Chyvachok писал:
у меня не было там LightAtPoint

Обнови HLSDK до актуальной версии.
Цитата:
Chyvachok писал:
я скопировал только LightAtPoint

Так там порядок важен. Последнее, что есть в SDK 2.3 - ScreenToWorld. В новом SDK после него GetMatrix, BoxInPVS и только потом LightAtPoint. Не зря же при реверс инжиниринге втыкают заглушки вместо отсутствующих экспортов. Вот функция тебе и возвращала чёрт знает что, потому что по факту ты вызывал GetMatrix. Это, кстати, объясняет то, что значения менялись при повороте камеры.


Отправлено Chyvachok 09-12-2021 в 21:11:

Цитата:
Ku2zoff писал:
Обнови HLSDK до актуальной версии.


не знаю где его качать, и моды на последней версии, вроде того же Халф Пейна не работают под Ксашем или Пираткой. Сколько искал, не нашел чтобы кто-то новую версию ГолдСорца спиратил, не думаю что мне он актуален будет.


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

Цитата:
Chyvachok писал:
не знаю где его качать

Это шутка? https://github.com/ValveSoftware/ha...eads/master.zip
Только осторожно, в клиентку линкуется SDL. Работать под ванильным ксашем не будет, только под FWGS. Если не хочешь отказываться от ванильного ксаша, обнови все хедеры в папках common и engine, заменив их на одноимённые из последнего билда ксаша (4529).

Добавлено 10-12-2021 в 04:26:

Цитата:
Chyvachok писал:
не нашел чтобы кто-то новую версию ГолдСорца спиратил

Есть довольно свежие билды, в основном сборки CS 1.6. Зачем пиратить голдсорс для запуска модов, если есть свенкооп в стиме? Кидаешь папку valve в корень свена, в либлисте мода пишешь fallback_dir "valve" и гамай на здоровье. У свен энджин лимиты будь здоров, там карта со стороной 172 тысячи юнитов и количество моделей/спрайтов/клипнодов и прочего просто запредельное. То есть, можно делать мод, не использующий какие-то фичи ксаша, а только лишь требующий повышенных лимитов на свежем HLSDK. И поиграть в него смогут даже копирасты-буржуи, которые не юзают ксаш принципиально.


Отправлено Chyvachok 09-12-2021 в 21:28:

Я не помню откуда качал СДК но с задницы какой-то, забыл что он на Гите есть.

Добавлено 09-12-2021 в 23:28:

Цитата:
Chyvachok писал:
Есть довольно свежие билды, в основном сборки CS 1.6. Зачем пиратить голдсорс для запуска модов, если есть свенкооп в стиме? Кидаешь папку valve в корень свена, в либлисте мода пишешь fallback_dir "valve" и гамай на здоровье.


Не знал что оно так работать будет, думал что он чисто под Свен заточен, Свен есть, как и Стим для игры в бесплатные моды что Source SDK Base используют, для них не надо ХЛ2 иметь купленный. Кстати а Свен двиг без запуска самого стима пашет?


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

Чтобы последний сдк был совместим с ксашем, надо вернуть старый инпут из версии 2.3, и ещё прилинковать старую vgui.lib оттуда же. Короче, немного работы с клиенткой. В XDM 3.0.3.8 всё это можно подглядеть, Мастер обернул #ifdef'ами все нужные места.

Добавлено 10-12-2021 в 04:35:

Цитата:
Chyvachok писал:
Свен двиг без запуска самого стима пашет

Неа.
Цитата:
Chyvachok писал:
думал что он чисто под Свен заточен

Совместимость с халфой есть. Я первую главу Invasion прошёл без проблем. Клиентку, правда, собирал сам, потому что от версии к версии нового голдсорса баг с мышью в клиентках, собранных из сорцев с гитхаба, то появляется, то пропадает. То он есть всегда, то только при m_rawinput 1, то его нет.


Отправлено Дядя Миша 10-12-2021 в 06:00:

Цитата:
Chyvachok писал:
В общем проблема с LightAtPoint, оно выдает вообще непонятные числа, то минусовые, то гиганские там 9946234623 такого вида, и по одной координате.

это не он выдаёт, это мусор на стеке.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Chyvachok 10-12-2021 в 12:57:

В общем сделал эту аврорку, чтобы свет на нее влиял, и приделал опцию которая бы читалась из txt файла и влияла, освещается партикл или нет.

Осталось придумать с сервером, Аврора не сохраняется, и след исчезает у сущности если сохранится и загрузится, я вот думаю, а как сделать функцию, которая бы вызывалась только после того как игрок загрузился? Которая бы след восстанавливала бы.


Отправлено Ku2zoff 10-12-2021 в 13:01:

Chyvachok SendInitMessage из первой паранойи. Ну или Xash PostActivate System. Первое работает и в мультиплеере. Второе только в сингле.

Добавлено 10-12-2021 в 20:01:

Ещё DesiredAction из спирита. Правда оно больше для мовевитча, и посылка мессаг на клиент сделана через него, потому что по таймингам попадает в нужный промежуток.


Отправлено Chyvachok 10-12-2021 в 15:13:

Еще тоже с кусками и авророй, у меня след удаляется в функции WaitTillLand, но как я понял если куски пропадают из поля зрения, то игра их удаляет, а след остается, не очень удобно что вручную нужно удалять саму систему: https://imgur.com/a/gifVyNo

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

Добавлено 10-12-2021 в 15:16:

Цитата:
Ku2zoff писал:
Chyvachok SendInitMessage из первой паранойи.


Надо будет посмотреть, это на клиент отправляет или на сервере, мне надо у самого снаряда вызывать эту функцию после загрузки сохранения, я как-то делал давно, когда юзал эту Аврору, но это был КсашХТ и с тер пор прошло много времени, я этот код потерял. Главное что на Клиенте в этой авроре вроде есть код, который должен удалять партиклю если нет сущности, но видимо он не работает.

Добавлено 10-12-2021 в 16:00:

https://imgur.com/a/gifVyNo

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

Добавлено 10-12-2021 в 17:13:

// Don't update if the system is outside the player's PVS.
//if(!source || source->curstate.messagenum < messagenum)
// return true;

Если убрать код который останавливает апдейт системы частиц, если они вне поля зрения, то оно тоже не совсем фиксит проблему, партикль висит на месте где кусок улетел в нарнию, кстати в руках детонатор не зря, сатчелы тоже под полом: https://imgur.com/a/fCdmMyd


Отправлено Ku2zoff 10-12-2021 в 16:19:

Цитата:
Chyvachok писал:
source->curstate.messagenum < messagenum

Актуально только в сингле, кстати.


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

Подскажите пожалуйста. Перенес TE_GUNSHOTDECAL на клиент. Код-то я сделал:

C++ Source Code:
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;

А потом столкнулся с проблемой. На клиенте нет pfnDecalIndex. Что делать?

Добавлено 10-12-2021 в 21:08:

Что-то я так посмотрел, в ксаш-движке вообще не вижу R_FireCustomDecal. Она только r_efx.h упоминается. Похоже, вообще клиентские декали никак не сделать

__________________
Мой мод на Xash


Отправлено Дядя Миша 10-12-2021 в 18:18:

Цитата:
Aynekko писал:
На клиенте нет pfnDecalIndex. Что делать?

ну вот в EfxAPI она есть. Оттуда вызывай.

__________________
My Projects: download page

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

Цитата:

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


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

Цитата:
Дядя Миша писал:
в EfxAPI она есть

Ах вот оно где запряталось. Все работает, спасибо. Только все равно я не могу понять, где вообще эта функция R_FireCustomDecal находится, если она натурально упоминается только в h файлах? Подменяется чем-то видимо…

__________________
Мой мод на Xash


Отправлено Chyvachok 10-12-2021 в 20:17:

Ну и говно это Аврора.

Добавлено 10-12-2021 в 22:17:

Код из Спирита-Паранои не дописан толком, а из Ксаша попробуй утяни, там ведь рендер свой, тем кто шарит в програмировании да, проблем нет никаких, но тем кто нет, очень сложно. Не удивительно честно учитывая как она пашет, что никто не юзал ее для следов-снарядов кроме мода Alternative Way.

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


Отправлено [CFR] B@N@N 10-12-2021 в 21:06:

Chyvachok
В XDM погляди партеклсистему.. Она тпм годная и исходники открыты.


Отправлено Chyvachok 10-12-2021 в 21:29:

[CFR] B@N@N она добавлена уже, пусть и с более старой версии, но там немного другие функции. Аврора это всякий там дымок, или следы типа след снаряда, но работает она через зад, как оказалось. А фиксить честно пока не осилил, в КсашХТ лучше работает вроде, хотя опять же, надо тестить, но там рендер другой, надо шарить как код этого клиента устроен, чтобы портануть хотя бы.


Добавлено 10-12-2021 в 23:29:

У ХДМ-овской тоже есть недостатки, она вся захардкодена, любое изменение требует компиляции движка, не читает параметры как автора из текстовых файлов и нету никакого визуального редактора.


Отправлено Ku2zoff 10-12-2021 в 22:26:

Цитата:
Chyvachok писал:
Ну и говно это Аврора.

Она позволяет делать только то, что распыляется. Огонь, дым от огня, дым от попадания пуль в стенки, пар из трубы, след ракеты и проч. Ещё намертво привязана к энтитям-эмиттерам в оригинале.
Цитата:
[CFR] B@N@N писал:
В XDM погляди партеклсистему..

Цитата:
Chyvachok писал:
она вся захардкодена

Эту систему нельзя рассматривать как скриптовую для мапперов. Это скорее замена pEfxAPI для кодеров, чтобы не упереться в лимит темпэнтить. Хочешь много возможностей - будь добр кодить. К сожалению, в последней версии 3.0.3.8 она обросла каким-то крутым кодом, что соответствует современным стандартам, но усложняет не только копипасту, но и отладку. Хотелось бы увидеть версию 3.0.4.0, но я так и не понял, какую загадку загадал Мастер. У него с версии 3.0.3.8 славная торадицыя - не выкладывать сорцы по человечески, а заниматься какой-то фигнёй.

Добавлено 11-12-2021 в 05:18:

Chyvachok если тебе нужна кровяка от гибсов, выкинь аврору и укради позаимствуй код Smoke Puff из паранойи. У PLut'а в BDef'е, как он писал, все партиклевые эффекты на нём основаны.

Добавлено 11-12-2021 в 05:26:

Для начала рекомендую сделать гибсы темпэнтитями. В HUD_AddEntity цеплять им партиклевый эффект, в HUD_TempEntUpdate ставить декали при коллизии и выключать партиклевый эффект, когда гибс сдохнет. Потом, когда всё будет отлажено, можно прикрепить эти эффекты к обычным серверным гибсам. Код из HUD_AddEntity перекочует в мессагу, а код из HUD_TempEntUpdate куда-нибудь в DrawTransparentTriangles. И то, необязательно делать второе. При смерти гибса достаточно отправить вторую мессагу.
Поделись спрайтами крови, если не жалко, или скажи где взял. У меня зачесались руки накодить то, что не получается у тебя. Хотя меня обычная кровь устраивает. Сижу дома с температурой, заняться нечем.


Отправлено Chyvachok 10-12-2021 в 23:11:

Цитата:
Ku2zoff писал:
Поделись спрайтами крови, если не жалко, или скажи где взял. У меня зачесались руки накодить то, что не получается у тебя. Хотя меня обычная кровь устраивает. Сижу дома с температурой, заняться нечем.


Сами aur файлы из Alternative Way взяты - они используют стандартный bloodspray.spr из папки valve. Думал это аврору не только для кровяки, но и для РПГ и энергопушек приспособить, но с ней возни и проблем столько.

Но если надо, могу из какого нибуть Ballistic Weapons спрайты вынуть.

Цитата:
Ku2zoff писал:
Chyvachok если тебе нужна кровяка от гибсов, выкинь аврору и укради позаимствуй код Smoke Puff из паранойи. У PLut'а в BDef'е, как он писал, все партиклевые эффекты на нём основаны.


Пробовал, след плазмы сделать, но пока не очень красиво получается на их основе.

Добавлено 11-12-2021 в 01:06:

Что-то такое наваял, но честно не очень нравится, не получается как у Plut чтобы красивые эффекты были.

code:
Эвент: void EV_RocketTrailCallback ( struct tempent_s *ent, float frametime, float currenttime ) { if ( currenttime < ent->entity.baseline.fuser1 ) return; if ( ent->entity.origin == ent->entity.attachment[0] ) ent->die = gEngfuncs.GetClientTime(); else VectorCopy ( ent->entity.origin, ent->entity.attachment[0] ); float puff_speed = 400, puff_size = 16, speed_side = 0; VectorNormalize(ent->entity.angles); // there is surface normal actually CObject *pObj = new CPlasmaTrailPart( ent->entity.origin, ent->entity.angles, 0.2, 1, puff_speed, puff_size, speed_side, "sprites/plasma_pistol_trail.spr", 1 ); g_objmanager.AddObject(pObj); dlight_t *dl = gEngfuncs.pEfxAPI->CL_AllocDlight ( 0 ); VectorCopy ( ent->entity.origin, dl->origin ); dl->radius = 64; //128 dl->dark = true; dl->die = gEngfuncs.GetClientTime() + 0.001; //Kill it right away dl->color.r = 0; dl->color.g = 180; dl->color.b = 0; } Сам след. CPlasmaTrailPart::CPlasmaTrailPart( vec3_t origin, vec3_t normal, float fLife, float fAlpha, float fVelocity, float fSize, float maxofs, char model [64], int iType, float r, float g, float b) { vec3_t up, right; VectorClear(right); VectorClear(up); MakeUpRight(normal, up, right); m_fAlpha = fAlpha; m_fLife = fLife; m_fr = r; m_fg = g; m_fb = b; spr = SPR_Load(model); m_iType = iType; VectorCopy(origin, PuffOrigin); PuffSize = fSize; VectorClear(PuffVelocity); VectorMA(PuffVelocity, fVelocity, normal, PuffVelocity); VectorMA(PuffVelocity, gEngfuncs.pfnRandomFloat(-maxofs, maxofs), right, PuffVelocity); VectorMA(PuffVelocity, gEngfuncs.pfnRandomFloat(-maxofs, maxofs), up, PuffVelocity); } int CPlasmaTrailPart::Draw(float time, float frametime) { float frac = (time - birthTime) / m_fLife; if (frac > 1) return 1; // delete object if (!spr) { gEngfuncs.Con_Printf("error: cant load sprite\n"); return 1; } CalcViewMatrix(); struct model_s *pModel = (struct model_s *)gEngfuncs.GetSpritePointer( spr ); int frame = (int)(pModel->numframes * frac); gEngfuncs.pTriAPI->RenderMode(kRenderTransAdd); gEngfuncs.pTriAPI->SpriteTexture( pModel, frame ); float alpha = m_fAlpha * (1 - frac); gEngfuncs.pTriAPI->Color4f( m_fr, m_fg, m_fb, alpha ); gEngfuncs.pTriAPI->CullFace( TRI_NONE ); gEngfuncs.pTriAPI->Begin( TRI_QUADS ); float size = PuffSize * (1 - frac); VectorMA(PuffOrigin, frametime, PuffVelocity, PuffOrigin); g_viewMatrix[0][3] = PuffOrigin[0]; // write origin to matrix g_viewMatrix[1][3] = PuffOrigin[1]; g_viewMatrix[2][3] = PuffOrigin[2]; gEngfuncs.pTriAPI->TexCoord2f( 0, 0 ); SetPoint(0, size ,size, g_viewMatrix); gEngfuncs.pTriAPI->TexCoord2f( 0, 1 ); SetPoint(0, size ,-size, g_viewMatrix); gEngfuncs.pTriAPI->TexCoord2f( 1, 1 ); SetPoint(0, -size ,-size, g_viewMatrix); gEngfuncs.pTriAPI->TexCoord2f( 1, 0 ); SetPoint(0, -size ,size, g_viewMatrix); gEngfuncs.pTriAPI->End(); gEngfuncs.pTriAPI->RenderMode(kRenderNormal); return 0; }


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

С кусками интересно бы сделать их чисто клиентские, они все равно на игру не влияют никак, и Stycky Gib-ы тоже бы как-то портануть на клиент, это которые к стенам липнут, я им даже модель улучшил. Вот кстати мой ретекстур Стики Гибов: https://files.gamebanana.com/bitpit/stickygib.rar


Отправлено Ku2zoff 10-12-2021 в 23:35:

Цитата:
Chyvachok писал:
С кусками интересно бы сделать их чисто клиентские

Да, но есть проблемка. Их надо как-то фильтровать, чтобы знать, что это именно гибсы. Самый простой вариант - по модели. Отправляем на клиент TE_BREAKMODEL с моделькой мясных кусков, отлавливаем темпэнтитю в HUD_AddEntity по названию модели, ставим ей новый флаг FTENT_GIB, например (флагов 21, можно добавить свои), а дальше - вперёд и с песней в HUD_TempEntUpdate рисовать декали при коллизии с бсп.
Цитата:
Chyvachok писал:
пока не очень красиво получается на их основе

Надо поиграться с параметрами, чтобы шлейф из спрайтов вытягивался в линию. Я уже сделал новый класс CBloodTrail со спрайтом bloodspray.spr, пытаюсь научить его распыляться как аврору. По задумке сразу все спрайты рисуются и разлетаются, а нам надо рисовать массив по очереди. И как только последний достигнет нужного размера, "убивать" его, и создавать новый, маленький, в точке отсчёта.
Цитата:
Chyvachok писал:
Stycky Gib-ы тоже бы как-то портануть на клиент

Наверное можно сделать так, как я предложил, с тем лишь отличием, что при первом коллайде у модели занулиться скорость, и она "прилипнет" к стене.
Лучше куски всё-таки делать на сервере, потому что от клиентских не будут сохраняться декали. У меня уже есть спрайтовые декали, которые пишутся в сейв, так что я бы мог это приспособить.
Пропробую накодить эту кровь от кусков, а потом надо заняться заменой темпэнтить на элементы RenderSystem из XDM. Она умеет почти во всё: искры, круги, эффекты типа env_funnel и проч.


Отправлено Дядя Миша 11-12-2021 в 07:57:

Цитата:
Chyvachok писал:
Она еще глючит начинает когда партиклей много спавнится, к примеру когда сразу много врагов гибаешь, они перестают исчезать и прочая дичь начинается, тоже самое с следом снарядов

Самая главная беда авроры - там почему-то Лаури не обнулил переменные.
Вот её и колбасит. Ну в ксаше, я естественно, это сделал.
Цитата:
Chyvachok писал:
в КсашХТ лучше работает вроде, хотя опять же, надо тестить, но там рендер другой, надо шарить как код этого клиента устроен

Аврора в ксаш-моде специально оставлена совместимой с HL. Она ничего не затрагивает из рендерера ксаш-мода. Её можно брать целиком и копипастить в халфу.

__________________
My Projects: download page

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

Цитата:

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


Отправлено [CFR] B@N@N 11-12-2021 в 10:07:

Цитата:
Ku2zoff писал:
У меня уже есть спрайтовые декали, которые пишутся в сейв, так что я бы мог это приспособить


Можно по подробние про это? В чом отличие от оригинала?

Добавлено 11-12-2021 в 13:07:

Цитата:
Chyvachok писал:
Пробовал, след плазмы сделать, но пока не очень красиво получается на их основе.

Ну у тебя тоже заардкожино всё будет)))
Ваще я так понял такой же визуальный ридактор и тхт файл никто больше ниосилел из авторов партекл систем. Походу оно ни так просто зделать


Отправлено Ku2zoff 11-12-2021 в 12:02:

Цитата:
[CFR] B@N@N писал:
Можно по подробние про это? В чом отличие от оригинала?

Декали из спрайтов, а не из картинок в ваде. Могут анимироваться, менять размер на ходу, много чего ещё. В основе декали из инвазиона. Они прикольные, но исчезают после загрузки или перехода на новый уровень. Это я почти заборол, могут иногда пропадать с движущихся энтить при загрузке и переходе. Ещё обрезку по краям брашей не сделал - половина декали может висеть в пустоте. Собсно, в инвазионе это не слишком бросалось в глаза, т.к. там только дырки от пуль. А я планирую пятна крови, взрывов и ещё что-нибудь. Как только победю отваливание от движущихся энтить - займусь обрезкой.

Добавлено 11-12-2021 в 19:02:

Цитата:
[CFR] B@N@N писал:
Походу оно ни так просто зделать

Самая сложность в том, какой функционал задать самой системе. В идеале, она должна уметь всё, что умеют pEfxAPI (касаемо спрайтов), аврора и дождик БУзера. То есть тут не просто какие-то дымки от выстрелов в стену, и не просто дым, рассеивающийся из трубы. Тут и лучи, закрученные в спираль, и закольцованные лучи, и лучи с шумом, и прыгающие от пола спрайты гаусса, и искры от выстрелов из инвазиона, и эффекты телепортов, дофигища всего. Накодить это можно, в XDM очень многое уже есть. Другой вопрос как всё это унифицировать, чтобы у совершенно разных систем, например искр и кольца от взрыва не было дублирующихся параметров, и как вообще это всё сохранять в скрипт.
Будет готовая система - можно будет и редактор написать. Только вот нужна ли она, именно такая система? В большинстве случаев функционал будет избыточным. Всё, на что хватает фантазии у моддеров - повторять чужие эффекты. Поэтому Дядя Миша просто взял, и портировал аврору в ксаш с исправлениями. Подавляющее большинство моддеров даже чужие aur-файлы берут. Те самые, которые Лаури как примеры к спириту приложил. Даже те, кто умеет кодить, не раскрывают в полной мере возможности pEfxAPI. Нет примеров, нет документации.


Отправлено Chyvachok 11-12-2021 в 13:21:

Цитата:
Ku2zoff писал:
А я планирую пятна крови, взрывов и ещё что-нибудь.


Если нужны более качественные спрайты вот из Ballistic Weapons кровяха: https://files.gamebanana.com/bitpit...eaponsblood.rar

Могу еще следы от пуль и взрывов скинуть.


Отправлено Дядя Миша 11-12-2021 в 14:40:

Цитата:
Ku2zoff писал:
Как только победю отваливание от движущихся энтить - займусь обрезкой.

Ну в ксаше же не отваливаются. Даже с монстров. Смотри как там устроено. Оно несложное, если разберёшься с переходом из глобального в локальное пространство.

Цитата:
Ku2zoff писал:
Поэтому Дядя Миша просто взял, и портировал аврору в ксаш с исправлениями.

К Авроре Ксер в свое время редактор написал. У нее на мой взгляд был только один недостаток - баги. Ну вот я их и поправил, а функционал немного дополнил. Сделал проекцию светового пятна на партиклы и всё такое.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Chyvachok 11-12-2021 в 17:57:

Такой вариант сделать другой цвет крови при выстреле в голову нормальный? Пока вижу что есть шанс если монстра разорвет на мясо выстрелом в голову, то куски будут желтую кровь оставлять, а если в тело то красную. Хотя как вариант влепить в 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; }


Отправлено Ku2zoff 11-12-2021 в 23:43:

Короче, я пошёл по пути самурая. CZombie::TraceBleed с аргументом цвета крови, что логично. CZombie::TraceAttack, CZombie::GibMonster, CZombie::SpawnGibs. Последнее делать не хотелось, но гибсы из SpawnRandomGibs по-умолчанию принимают цвет крови владельца. Пришлось сделать для зомби кастомную функцию, чтобы задать цвет вручную.

C++ Source Code:
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
}


Добавлено 12-12-2021 в 06:43:

Цитата:
Chyvachok писал:
если монстра разорвет на мясо выстрелом в голову, то куски будут желтую кровь оставлять, а если в тело то красную

Используй мой код. Куски будут оставлять оба цвета.


Отправлено [CFR] B@N@N 12-12-2021 в 01:23:

Цитата:
Ku2zoff писал:
. Ещё обрезку по краям брашей не сделал - половина декали может висеть в пустоте


А как они в движке тогда обриаются?


Отправлено Дядя Миша 12-12-2021 в 06:47:

Цитата:
[CFR] B@N@N писал:
А как они в движке тогда обриаются?

Элементарно. Вокруг полигона, на который наложена декаль строятся ограничивающие плоскости. Как кросспродукт от ребра и нормали.
И этими плоскостями полигон декали обрезается точно по его размеру.

Добавлено 12-12-2021 в 09:47:

Но поскольку декаль накладывается как трипланарная проекция, то её копии ложатся и на соседние полигоны, а лишнее просто удаляется.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ku2zoff 17-12-2021 в 15:07:

Дядя Миша а где всю эту математику поглядеть? Какие функции в gl_decals.c?


Отправлено XaeroX 17-12-2021 в 16:03:

Ku2zoff
https://en.wikipedia.org/wiki/Suthe...dgman_algorithm

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


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

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'


Отправлено Ku2zoff 17-12-2021 в 17:20:

Цитата:
Дядя Миша писал:
Если хочешь понять принцип.

Оно не хочется на самом деле, хочется побыстрее скопипастить. Но чем больше я изучаю физику и математику (даже в первом семестре), тем больше понимаю, что кодер без знания матчасти - ноль без палочки.


Отправлено Дядя Миша 17-12-2021 в 18:10:

От задач зависит. По крайней мере никто не заставляет пограммистов придумывать новые математические решения. Но вот воплощать в коде уже имеющиеся - вполне себе.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 17-12-2021 в 18:40:

Цитата:
Ku2zoff писал:
кодер без знания матчасти - ноль без палочки

Истину глаголишь, я тут фонарик ксашмодовский уже пару месяцев пытаюсь пофиксить время от времени, там замуты с матрицами какие-то, а я в этом ничего не понимаю. У каждого мозги под свои задачи заточены, а я уж точно не математик

__________________
Мой мод на Xash


Отправлено Ku2zoff 18-12-2021 в 10:58:

Цитата:
Дядя Миша писал:
воплощать в коде уже имеющиеся - вполне себе

Всё равно надо разбираться, а не бездумно копипастить.
Цитата:
Aynekko писал:
фонарик ксашмодовский уже пару месяцев пытаюсь пофиксить

Я думаю, что тебе надо поштудировать оптику. Шейдеры же не от балды написаны, а с опорой на реальные физические законы.


Отправлено Aynekko 18-12-2021 в 12:22:

Цитата:
Ku2zoff писал:
Я думаю, что тебе надо поштудировать оптику.

Там судя по всему не в этом дело, а в том что все динамические источники света не учитывают angles и scale модели. На каком этапе это сломалось, я не знаю. Дядя Миша даже сам не знает. И похоже дело не в шейдере, а где-то в коде, т.к. это касается только студиомоделей. Это все пока, что удалось выяснить.

__________________
Мой мод на Xash


Отправлено ncuxonaT 18-12-2021 в 13:00:

Разве мы в прошлый раз не пришли к тому, что трансформация модели идет через modelview матрицу, а источники света этого не учитывают?


Отправлено Aynekko 18-12-2021 в 13:08:

Я смотрел в параное 2, там по сути все точно так же за некоторыми исключениями (копипастил - все сломалось). Точно так же строится rotationmatrix. Вот и говорю, какие-то замуты с матрицами мира/модели/света, как одно к другому складывается я вообще не понимаю.

__________________
Мой мод на Xash


Отправлено Дядя Миша 18-12-2021 в 18:31:

Цитата:
Aynekko писал:
Дядя Миша даже сам не знает.


Я напомню как обстояло дело. Когда я готовил обновление для билда 0.65 (которое мог бы вообще не делать), я частично взял рендерер от паранои, чтобы не изобретать велосипед дважды. Но параноевский рендерер более требовательный к видеокарте и я об этом упоминал в теме про разработку.
И сразу же нашлась куча людей, которые возмутились - как это так? Ксаш не будет запускаться на моей замечательной встройке 1654-го года выпуска?
А вот раньше запускался! Это недопустимо! Я тогда не стал с ними спорить, прикинул как бы ужаться в лимиты и сделал это. И тогда же отписался в теме - я сделал новый билд совместимым с вашим железом, но клянусь небесным котэ, я не завидую тому, кто будет это дебажить! Так и оказалось!

А то что я не знаю - ну за минуту поисков найти ничего не удалось, а дальше я не стал разбираться. Там бесполезно копипастить из паранои, и знание оптических законов не поможет. Там фундаментальщина, которую не отдебажишь, надо просто знать в чём отличие устройства рендерера ксаш-мода от паранои.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 18-12-2021 в 18:51:

Цитата:
Дядя Миша писал:
как это так? Ксаш не будет запускаться на моей замечательной встройке 1654-го года выпуска?

Ага, а сейчас народ занимается PrimeXT на базе паранои и как оказалось он очень многим нужен в таком виде, хоть и требователен к видюхе еще больше (там чего уже только не прикрутили - pbr, hdr). Вот поди разбери.
Цитата:
Дядя Миша писал:
ну за минуту поисков найти ничего не удалось, а дальше я не стал разбираться.

Что мне сделать, чтобы ты потратил 2 минуты хотя бы? Я уже весь рендер моделей сравнил построчно 2 раза, только толку мало. Проблема в том, что кроме тебя тут просто некому разобраться. Я бы может и перешел на прайм или параною, но я уже столько фичей сделал для мода, что переезд просто не получится.

P.S. Я сузил проблему до этих строчек в DrawLightForMeshList
C++ Source Code:
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 в 19:12:

Ничего делать не надо, когда-нибудь я сам найду на это время.
У тебя ведь еще далеко до релиза? К тому же, меня удивляет, почему товарищи форкеры это до сих пор не поправили. Как форкать - так они первые. А как баг исправить - немогут

Добавлено 18-12-2021 в 22:12:

Цитата:
Aynekko писал:
Я сузил проблему до этих строчек в DrawLightForMeshList

Задача сводится к тому, что в m_plightmatrix. Я уже просто не помню.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 18-12-2021 в 19:17:

Цитата:
Дядя Миша писал:
У тебя ведь еще далеко до релиза?

Пока далеко. Буду признателен. Я вот тени от точечных источников из паранои смог перенести и доделать. И вот столкнулся с освещением от лайтов на моделях, всю малину портит.
Цитата:
Дядя Миша писал:
почему товарищи форкеры это до сих пор не поправили

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

Добавлено 18-12-2021 в 22:17:

Цитата:
Дядя Миша писал:
Задача сводится к тому, что в m_plightmatrix.

C++ Source Code:
// build the rotation matrix
m_pModelInstance->m_protationmatrix = matrix3x4( origin, angles, scale );
m_pModelInstance->m_plightmatrix = m_pModelInstance->m_protationmatrix;

__________________
Мой мод на Xash


Отправлено Дядя Миша 18-12-2021 в 19:42:

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'


Отправлено Aynekko 18-12-2021 в 19:48:

Цитата:
Дядя Миша писал:
как это выражается

Судя по всему, светильники не учитывают поворот модели (angles) и скейл. Я это понял после того, как сделал тени от точечных лайтов. Когда у модели скейл 1 и angles 0 0 0, свет и тени ложатся на модель идеально. Иначе - съезжает проекция тени тут же и аттенюация работает неправильно.

__________________
Мой мод на Xash


Отправлено Дядя Миша 18-12-2021 в 19:51:

Посмотрел, там всё еще интереснее. Оказывается для ксаш-мода этого фикса с декалями вообще нет, но для паранои он есть. В чём тут смысл - на статик с пользовательским скейлом декаль тоже ложится не оригинального скейла.
А в зависимости от размера этого статика. Если модель ужата по одной из осей, то декаль тоже ужмётся или растянется, чего естественно быть не должно. В параное, собственно, свет считается в мировом пространстве, поэтому там не нужны обратные преобразования. Но все вот эти VectorIRotate и VectorITransform они неполноценные преобразования.
Они скейл принимают всегда еденичный. Зато быстро. Поэтому надо построить m_plightmatrix с обратным скейлом. Для еденичного разницы всё равно не будет.

Чот такое попробуйте:

C++ Source Code:
// 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'


Отправлено Aynekko 18-12-2021 в 20:16:

Цитата:
Дядя Миша писал:
Чот такое попробуйте

Увы

__________________
Мой мод на Xash


Отправлено Дядя Миша 19-12-2021 в 08:02:

Ну что увы? У нас теперь есть две матрицы. Они обе прямые, но в одной из них инверсный скейл. Значит ту вторую нужно использовать везде, где она вызвает функцию VectorIRotate или VectorITransform.

r_studio.cpp:4046

C++ Source Code:
tr.modelorg = m_pModelInstance->m_plightmatrix.VectorITransform( RI->vieworg );

вот первое место

r_studio.cpp:4048
C++ Source Code:
Vector lightorg = m_pModelInstance->m_plightmatrix.VectorITransform( pl->origin );

вот второе место
r_studio:4199
C++ Source Code:
tr.modelorg = m_pModelInstance->m_plightmatrix.VectorITransform( RI->vieworg );

Последнее для хрома. Правда хром не будет правильно освещаться на статиках, ну ничего, там всё равно нету костей, так что некритично.

И наконец в шейдерах
xash\core.pak\glsl\studiodlight_fp.glsl:87
C++ Source Code:
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'


Отправлено Aynekko 19-12-2021 в 08:36:

Особо ничего не поменялось. Аттенюация сменилась на обратную, теперь огромные модели наоборот видны издалека, а маленькие освещаются вплотную (раньше было с точностью наоборот).
Вот видео. Сначала тут точечный источник, закрепленный на игроке, потом показываю обычный фонарик:

https://www.youtube.com/watch?v=Pbi_Q2yph0A

Правильность наложения теней можно проверить по брашевому полу. На некоторых моделях от омнилайта она ложится правильно, потому что у них angles 0 0 0. А другие повернуты и все съезжает. Если модель лежит на боку, то тень тоже на боку будет. А от прожектора почему-то тени ложатся всегда правильно.
Видимо, потому что подход разный:

C++ Source Code:
shadow = ShadowProj( var_ShadowCoord, u_ShadowParams.xy, dot( N, L )); // прожектор
shadow = ShadowOmni( -var_LightVec, u_ShadowParams ); // динлайт

u_ShadowParams.zw, которые в диналайте, равны -pl->projectionMatrix[2][2] и pl->projectionMatrix[3][2], в параное2 так же, к слову. Видимо осталось от копипасты параноевской, так как теней от динлайтов изначально в ксашмоде не было.

__________________
Мой мод на Xash


Отправлено Дядя Миша 19-12-2021 в 10:40:

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

Добавлено 19-12-2021 в 13:40:

C++ Source Code:
matrix4x4 lightView = pl->modelviewMatrix.ConcatTransforms( m_pModelInstance->m_protationmatrix );

Возможно тут тоже следует использовать m_plightmatrix.
Да и я не вижу что ты там делаешь, я не вижу что вообще поменялось в форке, откуда я знаю, что там происходит.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 19-12-2021 в 11:16:

Про тени я без претензий, просто показываю наблюдение. Проекция теней от динлайта не учитывает angles модели. И скейл кажется тоже...

Цитата:
Дядя Миша писал:
свет вроде как правильно начал накладываться. Он же у тебя раньше обрезался?


Да, он обрезался шейдером из-за if( spotDot < spotCos ) discard, на моделях со скейлом < 1. Сейчас вроде бы такого нет, но все равно скейл модели влияет - см. аттач, две модели, с виду они одинаковые, а по факту это 2 разные модели. Справа модель скейл 0.5, слева 1. С омнилайтом похожая ситуация. Они ведь должны освещаться идентично.

Цитата:
Дядя Миша писал:
Возможно тут тоже следует использовать m_plightmatrix.

Так стало еще хуже, свет от прожектора в моделях скейлом < 1 отображается точкой в оригине модели.
Цитата:
Дядя Миша писал:
Да и я не вижу что ты там делаешь, я не вижу что вообще поменялось в форке


В плане освещения вроде бы ничего критичного не менял, во всяком случае я вернул его в ксашмодовское состояние на момент 0.81 рев2. Ну разве что добавил тени от динлайтов в r_shadows.cpp. Прожектор не тронут.

Давай даже так. Я сейчас специально возьму 0.81 рев2 и буду фиксить все там. И показывать результаты.

Добавлено 19-12-2021 в 14:16:

https://youtu.be/i2YUJnMQSxM

Вот, 0.81 рев2 (клиент и сервер) с фиксами из последних постов с лайтматрицей. Та же картина.

__________________
Мой мод на Xash


Отправлено Дядя Миша 19-12-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'


Отправлено Aynekko 19-12-2021 в 14:51:

Может проще избавиться от локальных координат и сделать освещение динлайтами в мировых? Знать бы хоть где посмотреть в параное. Шейдеры выглядят плюс-минус одинаково.

__________________
Мой мод на Xash


Отправлено ncuxonaT 19-12-2021 в 16:00:

Можно завести отдельный юниформ для скейла, поворот и позицию передавать через кость и оставить в покое modelview матрицу?


Отправлено Aynekko 19-12-2021 в 16:08:

Цитата:
ncuxonaT писал:
Можно завести отдельный юниформ для скейла

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

__________________
Мой мод на Xash


Отправлено FreeSlave 21-12-2021 в 22:33:

У кого-нибудь бывало, что при переходе на следующую карту нод граф создается, но с невалидными связями? (так что 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


Та же нода в случае OFFGROUND ошибки:
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


Отправлено Crystallize 22-12-2021 в 16:44:

Я в Fitzquake столкнулся с парой странных вещей. Например bound не работает, хотя никаких ошибок нет, просто не даёт эффекта. Или VectorAngles с какого-то момента стал корруптить тот компонент вектора который в коде пишется первым. Второй компонент пишется нормально. Причем если писать сначала в локальную переменную а потом из неё в компонент вектора, то ничего не корруптится, просто получается ноль. Я сейчас мучаю Cam_UpdateForDrawing.


Отправлено FreeSlave 22-12-2021 в 16:52:

В аттаче карта. Барник стоит посреди пустой комнаты, но покрывается желтыми частицами как если бы застрял (stuck in wall--level design error). Похоже, происходит так, только если он стоит достаточно близко к центру карты.
Собственно, желтые пятна не проблема, но хотелось бы узнать, почему игра считает, что он застрял?

__________________
I'm on github
I'm on opendesktop.org


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

Цитата:
Crystallize писал:
Например bound не работает, хотя никаких ошибок нет, просто не даёт эффекта

Что такое bound и какие ошибки он должен выдавать? И какой эффект ты ожидаешь?

Цитата:
Crystallize писал:
Или VectorAngles с какого-то момента стал корруптить тот компонент вектора который в коде пишется первым.

Это называется NAN на входе - NAN на выходе. Вот как это называется.
Наверное и bound не работает, потому что ты ему NAN суёшь.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 22-12-2021 в 17:16:

Ну bound это мини функция которая ограничивает число между двумя крайними значениями: bound(a, x, b)


Отправлено Aynekko 22-12-2021 в 17:34:

Цитата:
FreeSlave писал:
Барник стоит посреди пустой комнаты, но покрывается желтыми частицами как если бы застрял

Барник слишком высоко над землей.

__________________
Мой мод на Xash


Отправлено FreeSlave 22-12-2021 в 17:52:

Цитата:
Aynekko писал:
Барник слишком высоко над землей.


Я его и на землю ставил, и в половину той высоты, что сейчас на карте. Результат один и тот же.

Зато если от центра карты отодвинуть подальше, то всё норм.

__________________
I'm on github
I'm on opendesktop.org


Отправлено Aynekko 22-12-2021 в 17:54:

Я его просто вниз опустил и скомпилил, не было желтых партиклей о.о

__________________
Мой мод на Xash


Отправлено FreeSlave 22-12-2021 в 18:04:

Aynekko, а ты перекомпилировал оригинал (без изменения высоты)? Может, зависит от компиляторов. Ну и я запускаю на голдсорсе на обычной ХЛ, если что.

__________________
I'm on github
I'm on opendesktop.org


Отправлено Aynekko 22-12-2021 в 18:23:

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

Добавлено 22-12-2021 в 21:23:

Ага. Проверил со всех сторон. Партикли возникают, если барник находится в районе 32 юнитов от центра. Со всех сторон, если смотреть на виде сверху. Ставил его на расстоянии 31-32-33 по всем осям. Высота всегда была одинаковая - 3 юнита от пола. Интересно. Наверное, какая-то движковая особенность.

__________________
Мой мод на Xash


Отправлено Дядя Миша 22-12-2021 в 20:18:

Цитата:
Crystallize писал:
Ну bound это мини функция которая ограничивает число между двумя крайними значениями: bound(a, x, b)

ну во первых не функция, а макрос. а во вторых сломаться может в единственном случае - если ты подаешь в нее NAN.

Цитата:
Aynekko писал:
Партикли возникают, если барник находится в районе 32 юнитов от центра

там наверное торчит этот тестовый хулл для нодов.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FreeSlave 23-12-2021 в 01:04:

Цитата:
Aynekko писал:
Ага. Проверил со всех сторон. Партикли возникают, если барник находится в районе 32 юнитов от центра. Со всех сторон, если смотреть на виде сверху. Ставил его на расстоянии 31-32-33 по всем осям. Высота всегда была одинаковая - 3 юнита от пола. Интересно. Наверное, какая-то движковая особенность.



А можешь скопировать карту из jmf в rmf и скомпилить? (надо только убедиться, что координаты те же и барник по-прежнему около центра). Для меня это внезапно исправило проблему. Может, что-то не так с геометрией в jmf?

Прикладываю зипник с jmf, rmf и сгенеренными из них .map файлами.

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

Update: на карте скомпиленной из rmf тоже воспроизводится всё-таки. Где-то я накосячил при проверке.
Похоже проблема действительно в тестовом хулле, как и предположил Дядя Миша, и проявляется только если нод граф ещё не создан.
Ради теста выставил в CTestHull::Spawn pev->solid = SOLID_NOT, перекомпилировал карту, чтобы у вызвать перегенерацию графа, и проблема исчезла.
Возможный фикс - создавать тестовый хулл с SOLID_NOT и менять солидность на SOLID_SLIDEBOX в CTestHull::DropDelay

__________________
I'm on github
I'm on opendesktop.org


Отправлено Crystallize 25-12-2021 в 21:13:

Цитата:
Дядя Миша писал:
Это называется NAN на входе - NAN на выходе. Вот как это называется.
Наверное и bound не работает, потому что ты ему NAN суёшь.

Если вписать printf внутрь самой VectorAngles, то видно, что туда заходит корректный вектор.


Отправлено Crystallize 30-12-2021 в 11:57:

В общем там в матчлибе я не объявил в хидере новую функцию. И потом когда я ее использовал в коде, парой строчек ниже там была эта VectorAngles которая и стала давать порченый результат.


Отправлено hgrunt_2020 16-01-2022 в 13:57:

Вопрос такой вылез, в ксаше есть папка scripts, там можно сделать фон в меню виде карты, но какие ещё есть скрипты по мимо того же меню?

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Aynekko 24-01-2022 в 17:53:

Не могу никак побороть баг с лучом трипмины. На другом конце карты есть одна трипмина, луч у нее активируется через 2.5 секунды. Естественно не в PVS. Вот две ситуации:

1) Через 5 сек вылетаю с ноуклипом, лечу туда. Луч есть.
2) Лечу к месту трипмины по карте, НЕ вылетая за ее пределы, чтобы не задеть PVS мины раньше времени. Прилетел к мине, луча нет.

Изредка бывает, что во второй ситуации луч таки есть. Процентов 10.

На клиенте есть функция R_AddEntity, где проверка на ET_BEAM. Когда луча не видно, эта проверка не срабатывает. Значит луч не приходит на клиент вообще.

Сделал вот так. Это в MakeBeam у трипмины

C++ Source Code:
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() );

EF_SKIPPVS я завел, чтобы пропускать ENGINE_CHECK_VISIBILITY.

И вот опять ситуации:
1) спавнюсь на карте. Через 2.5 секунды клиент рапортует, что нашел луч. ОК.
2) перехожу с другой карты на эту. После перехода через 2.5 секунды клиент видит луч. ОК.
3) перехожу с другой карты на эту. После перехода через 2.5 секунды клиент НЕ видит луч. ???

Я не понимаю, от чего вообще это зависит. Даже пропуск PVS не помогает (трипмине я тоже ставил).
И ведь почему-то с env_laser таких проблем никогда не было.

__________________
Мой мод на Xash


Отправлено Aynekko 25-01-2022 в 19:29:

В общем решил, что я смогу обхитрить мину и завел ей спаунфлаг "стартовать выключенной", чтобы активировать по триггеру (по тихому и без звуков), когда игрок гарантированно будет в PVS. И это не сработало

- спавнюсь, лечу к мине ноуклипом, запускаю - луч есть;
- спавнюсь, лечу к мине по карте, не вылетая за пределы карты. Вижу ее в прямой видимости, активирую. Луча НЕТ. MakeBeam срабатывает - вывел в консоль. А луча нет... Делаю сейврестор, луч появляется.

Это какой-то несусветный бред. Если раньше я мог хоть идентифицировать где багуется примерно, то сейчас я даже примерно не могу понять, что не так.

Добавлено 25-01-2022 в 22:25:

Но вот одну деталь обнаружил. Спавнюсь и сразу же делаю сейврестор. То есть мина еще не успела сделать луч. И о чудо, луч есть всегда. Вроде как. Еще потестю.

Добавлено 25-01-2022 в 22:29:

Да, так и есть.
Я вот знаком с ситуацией, когда что-то не работает после сейврестора. Но чтобы не работало до сейврестора - это просто вау.

__________________
Мой мод на Xash


Отправлено Ku2zoff 25-01-2022 в 20:17:

Aynekko не знаю, связано ли это с твоей проблемой, но порядок строк в AddToFullPack сначала отсекает энтитю по PVS, а потом уже задаёт ей тип ENTITY_BEAM. Который, скорее всего, особым образом обрабатывается движком.

C++ Source Code:
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
}

Ниже такой код:
C++ Source Code:
1
state->entityType = ENTITY_NORMAL;
2
 
3
// Flag custom entities.
4
if ( ent->v.flags & FL_CUSTOMENTITY )
5
{
6
  state->entityType = ENTITY_BEAM;
7
}

Попробуй назначение state->entityType разместить перед ENGINE_CHECK_VISIBILITY.
Ещё момент. Как ты используешь новый спаунфлаг "стартовать выключенной"? При установленном флаге не срабатывает PowerupThink? А по триггеру ты уже запускаешь этот тчинк?
Карту можешь скинуть? Хочу проверить, есть ли подобный баг у меня.


Отправлено Aynekko 26-01-2022 в 09:27:

Цитата:
Ku2zoff писал:
Попробуй назначение state->entityType разместить перед ENGINE_CHECK_VISIBILITY.

Я писал об этом в посте до этого, ставил проверку и лучу и мине для пропуска этого условия.
Цитата:
Ku2zoff писал:
При установленном флаге не срабатывает PowerupThink? А по триггеру ты уже запускаешь этот тчинк?

Именно так. m_flPowerUp ставлю при этом 0, чтобы луч появился моментально.

В общем, я разобрал свою карту по брашам и сузил проблему. Если игрок заденет trigger_once до того, как активируется луч мины - луча не будет. Сделал тестовую карту - мина на стене в прямой видимости, спаун игрока находится внутри trigger_once. Триггер полностью пустой. Он ничего не активирует.

Сразу стоит сказать, что проблема только в моем моде. В ванильном ксашмоде или голде такого не наблюдается. Так что буду искать косяк.
Ну а ситуации такие:
- игрок спавнится в пустом trigger_once. Мина включается, и луча нет.
- спавн в trigger_once, у него стоит галка No clients. Луч появляется.
- спавн в trigger_push. Луч есть.
- спавн вне trigger_once. Триггер не трогаю. Луч есть. Трогаю триггер, бегаю по карте, убегаю из PVS мины, луч есть, все ОК.
- спавн вне trigger_once. Перед зарядом мины трогаю триггер. Луч не появляется.
- спавн в trigger_multiple. Луч есть.

ну что же, будем искать.

Добавлено 26-01-2022 в 12:00:

Проблема в этом:
C++ Source Code:
REMOVE_ENTITY(ENT(pev));

trigger_once удаляет сам себя. Стал тестить дальше, у меня есть команда ent_delete, запускающая UTIL_Remove по таргетнейму. Если я удаляю триггер, то луч не появляется. А вот если удаляю func_wall или точечную энтитю, то все норм. Ухх, капец.

Добавлено 26-01-2022 в 12:27:

Нашел баг. Недавно в CreateBaseline фиксили недостающую строчку
C++ Source Code:
baseline->effects = entity->v.effects;

Убрал ее и бага больше нет. Вопрос знатокам. Какого?

__________________
Мой мод на Xash


Отправлено Дядя Миша 26-01-2022 в 10:06:

Цитата:
Aynekko писал:
Недавно в CreateBaseline фиксили недостающую строчку

Вы её по какому принципу фиксили?

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 26-01-2022 в 10:14:

Мне сказали, чтобы для статиков отключать тени через EF флаг.

__________________
Мой мод на Xash


Отправлено Дядя Миша 26-01-2022 в 11:33:

Ну сделай проверку там. Если playermodelindex равен нулю - это значит спавнится статик.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 26-01-2022 в 11:49:

Да, баг больше не проявляется. Надеюсь правильно поставил

C++ Source Code:
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
  // ...


Добавлено 26-01-2022 в 14:49:

Вообще, очень странный баг, это ж надо было. И как я его отрыть еще смог)) пришлось все карту очистить от энтитей, пока не сузил проблему до триггеров)

__________________
Мой мод на Xash


Отправлено SNMetamorph 26-01-2022 в 12:18:

Цитата:
Дядя Миша писал:
Ну сделай проверку там. Если playermodelindex равен нулю - это значит спавнится статик.

А почему без этого условия баговало? В чем там суть проблемы была?

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


Отправлено Дядя Миша 26-01-2022 в 12:26:

Цитата:
Aynekko писал:
Надеюсь правильно поставил

Правильно.

Цитата:
SNMetamorph писал:
А почему без этого условия баговало?

Не надо в вазелин слать содержимое эффектов со старта. Почему не помню.

__________________
My Projects: download page

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

Цитата:

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


Отправлено SNMetamorph 26-01-2022 в 12:32:

Цитата:
Дядя Миша писал:
Не надо в вазелин слать содержимое эффектов со старта. Почему не помню.

Это какая-то специфика того, как работает дельта-кодирование?
Или это ТОЛЬКО effects касается?

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


Отправлено Дядя Миша 26-01-2022 в 14:46:

там какая-то часть эффектов - совсем не эффекты, очевидно же.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 28-01-2022 в 21:52:

На скрине совсем небольшой кусочек карты. В логе вот такое:

C++ Source Code:
Warning: too many light styles on a face (2111 faces overflowed)
Warning: too many light styles on a patch (48393 patches overflowed)

Никак не могу разобраться, критично это или нет. Визуально вроде бы все норм. Что это за ошибка и к чему приводит?
Вот параметры и выдержки из лога
C++ Source Code:
-gamma 0.7 -smooth 75 -blur 4 -bounce 8 -threads 7

C++ Source Code:
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


Отправлено Ku2zoff 29-01-2022 в 04:46:

Цитата:
Aynekko писал:
Никак не могу разобраться, критично это или нет. Визуально вроде бы все норм. Что это за ошибка и к чему приводит?

Больше 4-х лайтстилей освещают один фейс. Например, у тебя две выключаемые лампочки и свет от неба. Или пять невыключаемых лампочек. Приводит эта ошибка к тому, что при мигании или выключении одного из источников будут резкие границы между светом и тенью, прямо по краям текстурных патчей.


Отправлено ncuxonaT 29-01-2022 в 04:53:

А не было такого, что если лампочке прописать имя, то ей назначится какой-то лайтстиль, отличный от 0?


Отправлено Ku2zoff 29-01-2022 в 05:19:

https://i.imgur.com/eA5v6sy.jpg

Добавлено 29-01-2022 в 12:19:

ncuxonaT

C++ Source Code:
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
}

Лампочки без имён удаляются и освещают фейс одним стилем. Лампочки с именами получают два стиля вкл/выкл.
Чтобы не было ошибок по количеству стилей, нужно блокировать источники света, находящиеся в разных помещениях. Например, ставить флаг opaque для дверей.
Приведённый выше код из обычной халфы. В спирите есть возможность задать лампочке целых четыре лайтстиля: выкл, включение, вкл, выключение. На карте spiritdemo в начальном коридоре как раз так и работает люминесцентная лампа - мигает при включении, а после горит не мигая.


Отправлено Aynekko 29-01-2022 в 07:49:

Похоже да, из-за кучи лампочек. Там есть 3 лампочки, которые вкл/выкл, но 2 из них с очень маленьким радиусом (25 четвертое число).
Действительно задал дверям блокировку света, 2111 фейсов уменьшилось до 161. Спасибо.

__________________
Мой мод на Xash


Отправлено Дядя Миша 29-01-2022 в 08:53:

Цитата:
Aynekko писал:
Никак не могу разобраться, критично это или нет

Свет с учётом радиосити может распространяться довольно далеко и четырёх лайтстилей хватает не всегда. Ну значит какая-то выключабельная лампочка кое-где останется без освещения.

А если визуально норм, значит она зацепила минимальные пороги яркости, вот ты и не видишь этого.

Цитата:
ncuxonaT писал:
А не было такого, что если лампочке прописать имя, то ей назначится какой-то лайтстиль, отличный от 0?

Ну естественно, если прописано имя, то назначается какой-то лайтстиль.

Цитата:
Ku2zoff писал:
Лампочки с именами получают два стиля вкл/выкл.

Важен не сам стиль, а уникальный ID, к которому привязана лайтмапа.
Ей можно менять яркость как угодно.

Добавлено 29-01-2022 в 11:53:

В P2 заложена приятная возможность разобрать все лампочки на уникальные номера и смешивать их в реалтайме, собственно так работает отложка там.
Но с ограничением в 255 лампочек на уровень.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 29-01-2022 в 12:15:

Вдогонку к проблемам с освещением. Никак не могу побороть вот этот лайтлик. Свет идет, судя по всему, из другой абсолютно точно замкнутой комнаты. На скрине слева. Отчего это вообще зависит? Трасса в rad проходит сквозь браши?

__________________
Мой мод на Xash


Отправлено Дядя Миша 29-01-2022 в 12:45:

Из скрина ничерта непонятно.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 29-01-2022 в 13:28:

Левая полоса светлая. Должна быть темной. Вторая полоса уже освещена фонариком. Никак не могу понять, откуда это световое пятно идет.

__________________
Мой мод на Xash


Отправлено Дядя Миша 29-01-2022 в 13:43:

Геометрию покажи, где там лампочки, где что. Вид сверху.
И можно снабдить пояснительными стрелками, где по твоему утечка.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 29-01-2022 в 14:14:

Вот уж как смог показываю. Две комнаты. Потолки я скрыл в джеке, чтобы было видно (в игре они есть). С gl_wireframe одна комната не рисует другую, и обратно. Так что просвета нет.
Тут две лампы - красная в одной комнате, текстурная белая в другой.
- удалил только красную лампу - пятна нет
- удалил только текстурную лампу - есть еле-еле видное красноватое пятно на том месте.
- когда есть обе лампы, там яркое белое пятно.
- пятно проявляется, если у красной лампы радиус больше 50 (ну или как он правильно называется, четвертое число)
- поставил радиус 140 у красной...пятна нет О.о

Добавлено 29-01-2022 в 17:14:

С радиусом 140 не прокатило, скомпилил бОльшую часть карты и опять пятно, хотя в этом примере оно уже пропало...
https://drive.google.com/file/d/1eS...iew?usp=sharing

__________________
Мой мод на Xash


Отправлено ncuxonaT 29-01-2022 в 14:43:

Цитата:
Дядя Миша писал:
Ну естественно, если прописано имя, то назначается какой-то лайтстиль.

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


Отправлено Crystallize 29-01-2022 в 16:10:

Цитата:
Aynekko писал:
Трасса в rad проходит сквозь браши?

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


Отправлено Дядя Миша 30-01-2022 в 08:03:

Цитата:
ncuxonaT писал:
чисто интуитивно имя задают, чтобы ориентироваться по списку энтитей

кто на что учился.

Цитата:
Crystallize писал:
смотреть на уровень и проматывать трейсы

Промотаешь полтора миллиарда трасс?

__________________
My Projects: download page

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

Цитата:

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


Отправлено илья2 05-02-2022 в 18:56:

привет всем, кто знает, есть ли в халфе такая команда, позволяющая смотреть хит боксы тригеры энтити прямо в игре ?

Добавлено 05-02-2022 в 21:56:

помню что такое было, но что плохо помню

__________________
илья


Отправлено Дядя Миша 05-02-2022 в 19:24:

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'


Отправлено илья2 05-02-2022 в 19:31:

во спасибо как раз то что нужно

Добавлено 05-02-2022 в 22:31:

а вот это команда showtriggers 1 не работает.

__________________
илья


Отправлено Дядя Миша 05-02-2022 в 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'


Отправлено Crystallize 05-02-2022 в 20:51:

в ксашмоде надо ввести gl_renderer 0 и showtriggers_toggle


Отправлено JPEG 06-02-2022 в 08:27:

Цитата:
Дядя Миша писал:
showtriggers 1 - но сработает после перезагрузки и не со всеми компиляторами карт. С VHLT не сработает, к примеру.

ща проверил, хл не находит такую команду

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

перехожу на другой двиг


Отправлено Дядя Миша 06-02-2022 в 11:28:

Там интересно. Проверка на состояние квара есть, а сам квар похоже выпилили.
Но в Ксаше я его вернул, там эта штука работала.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 06-02-2022 в 15:14:

А почему MSG_WriteShort обнуляет 1.000?


Отправлено Дядя Миша 06-02-2022 в 16:10:

Crystallize попробуй явным образом привести его к шорту.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 07-02-2022 в 18:32:

Дядя Миша (short) не помогает, пришлось менять на ReadFloat-WriteFloat

Добавлено 08-02-2022 в 01:32:

Наверное что-то сломается, но пока не заметил.


Отправлено Crystallize 20-02-2022 в 10:49:

^лол нет, не об этом

Что может быть не так с трейслайном в фитцквейке? Как я ни пытаюсь сделать все правильно, длина трейса выдается всегда сотнями юнитов, и он визуально проходит сквозь стенки.

И еще, как бы вы алггритмизировали ситуацию когда игрок заворачивает за угол коридора? Вот этот выпирающий угол, можно ли его аналитически протрейсить и обнаружить?


Отправлено Дядя Миша 20-02-2022 в 11:19:

Всё с трейслайном в порядке, ты им как-то неправильно пользуешься.

Цитата:
Crystallize писал:
Вот этот выпирающий угол, можно ли его аналитически протрейсить и обнаружить?

А что именно ты собрался обнаруживать? И что за бред "аналитически протрейсить". Аналитически - это наоборот безо всяких реальных действий, только по уже имеющейся информации.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 20-02-2022 в 12:41:

Дядя Миша обнаружить выпуклые пары смежных фейсов под прямым углом друг от друга. Или смежные пары лифов расположенных буквой г


Отправлено Дядя Миша 20-02-2022 в 13:17:

Ты какую-то бредятину щас написал, не?
Еще раз - зачем тебе угол обнаруживать? С какой целью?

Добавлено 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'


Отправлено Crystallize 20-02-2022 в 16:56:

Цитата:
Дядя Миша писал:
Еще раз - зачем тебе угол обнаруживать? С какой целью?

для камеры от 3 лица, чтобы не возникало ситуаций когда враг меня видит а я его нет

Добавлено 20-02-2022 в 23:56:

Цитата:
Дядя Миша писал:
Вот, даже картинку нарисовал

Спасибо.


Отправлено Дядя Миша 20-02-2022 в 17:42:

Цитата:
Crystallize писал:
когда враг меня видит а я его нет

Дык подсвечивай врага сквозь стенку. Вроде бы так всегда делали.
Тогда тебе еще надо кинуть трассу от врага к игроку, если солид - дальше как на картинке ну и по ситуации.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 24-02-2022 в 06:58:

В коде первокваки есть эта жалоба что у джоя WingMan Warrior нулевое положение 32668 вместо 32768. А я подключил через китайский переходник геймпад от 1 соньки но со стиками, так у него вообще 32511.

Цитата:
Дядя Миша писал:
Дык подсвечивай врага сквозь стенку. Вроде бы так всегда делали.

Читерно и не интересно


Отправлено Дядя Миша 24-02-2022 в 07:12:

Цитата:
Crystallize писал:
В коде первокваки есть эта жалоба что у джоя 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'


Отправлено Crystallize 24-02-2022 в 08:42:

Дядя Миша т.е. у каждого экземпляра будет другая цифра?
от калибровки только хуже получилось


Отправлено Дядя Миша 24-02-2022 в 09:53:

Цитата:
Crystallize писал:
от калибровки только хуже получилось

Ну значит ты неправильно калибруешь. Потренируйся.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 24-02-2022 в 16:23:

Цитата:
Дядя Миша писал:
Нулевое положение калибруется через виндовый драйвер.

А в первокваке это сделано потому что под досом такого инструмента даже на сидюке не поставлялось?

Да и это явно конструкционный косяк этой модели, 32511 одинаково для обеих осей и отстоит от идеала на 256 делений.


Отправлено Дядя Миша 24-02-2022 в 18:33:

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 25-02-2022 в 05:36:

как повысить урон от падения?

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Ku2zoff 25-02-2022 в 06:35:

hgrunt_2020 CHalfLifeRules::FlPlayerFallDamage.


Отправлено hgrunt_2020 25-02-2022 в 07:18:

Цитата:
Ku2zoff писал:
CHalfLifeRules::FlPlayerFallDamage.


не то, в проекте такого нету совсем

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Ku2zoff 25-02-2022 в 07:49:

Поищи этот комментарий, навряд ли его удалили:

C++ Source Code:
// 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


Отправлено hgrunt_2020 26-02-2022 в 01:48:

как замедлить игрока, когда он находится в воде?

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено hgrunt_2020 26-02-2022 в 09:05:

ну по пояс?

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Ku2zoff 26-02-2022 в 09:20:

В PM_WalkMove сделать проверку if (pmove->waterlevel >= 2) и снизить pmove->velocity. Не забыть сделать то же самое в PM_WaterMove. Первое - когда игрок касается ногами твёрдой поверхности, второе - когда не касается, а уже плывёт.


Отправлено Aynekko 26-02-2022 в 18:10:

Вот почему такое происходит? Скейл текстуры 0.25.

Добавлено 26-02-2022 в 21:10:

При скейле 0.5 все нормально. Опять какие-то лимиты?

__________________
Мой мод на Xash


Отправлено Дядя Миша 26-02-2022 в 18:51:

Наверное слишком много лифов нагенерило. Хотя хз, я там лимит в 512 штук ставил на стеке.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 26-02-2022 в 19:08:

Цитата:
Дядя Миша писал:
слишком много лифов нагенерило

В этой комнате r_speeds 2 показывает, что видимых лифов 1080, если стоять в углу. Но почему со скейлом 0.5 проблем нет?
Пробовал создать пару брашей на тестовой пустой карте, там даже 0.15 скейл с нормальным освещением…не понимаю

Добавлено 26-02-2022 в 22:08:

Цитата:
Дядя Миша писал:
я там лимит в 512 штук ставил на стеке.

А можно поконкретнее, это где?

__________________
Мой мод на Xash


Отправлено Дядя Миша 26-02-2022 в 19:43:

Ну что тут понимать. Дело не в скейле. Скейл провоцирует лавинообразный рост лифов из-за разбиения полигонов. Полигоны в свою очередь разбиваются из-за лайтмапы. Вся эта куча лифов не влезает в кэш, собирающий полигоны для динамического освещения. А раз не влезает - то они не рендерятся и освещения нет.

Цитата:
Aynekko писал:
А можно поконкретнее, это где?

у меня давно уже нет ксаш-мода на рабочей машине. Помню только в общих чертах. Где-то на фазе сбора полигонов для рендеринга света.

Добавлено 26-02-2022 в 22:43:

Может вот это?
C++ Source Code:
1
bool Mod_BoxVisible( const Vector &mins, const Vector &maxs, const byte *visbits )
2
{
3
  short leafList[48]; <---
4
  leaflist_t ll;

Странно. Почему тут 48? Я вроде до 256 увеличивал...

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 26-02-2022 в 20:21:

Цитата:
Дядя Миша писал:
short leafList[48];

В прайме стоит уже 2048, но проблема та же самая. С gl_renderer 0 проблема тоже есть.

__________________
Мой мод на Xash


Отправлено Aynekko 27-02-2022 в 11:58:

Цитата:
Дядя Миша писал:
Вся эта куча лифов не влезает в кэш, собирающий полигоны для динамического освещения. А раз не влезает - то они не рендерятся и освещения нет.

Вот тут на скрине пишет, что видимых лифов 25. Но полигон все равно черный. Он должен меняться или нет?

Я скинул Психопату bsp, он вытащил лайтмапы своим парсером и показал скрин из 3d-макса, там у него было все на месте. Значит проблема не в компиляторах все-таки (уже хорошо).

В параное 2 проблема та же. Кстати, еще выяснилось, что содержимое лайтмапы (вот этой сломаной) меняется при перезапуске.

Добавлено 27-02-2022 в 11:30:

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

Добавлено 27-02-2022 в 14:58:

Обнаружил вот что. Проблема с лайтмапой наблюдается, если скейл маленький и если проблемный фейс находится в координатах за 8192. Я компировал всю комнату в новую карту. Поставил в центре - проблемы нет. Стал двигать, в -11000 проблемы есть. Двинул ближе к центру - у одного объекта со скейлом 0.25 текстуры проблема пропала, т.к. он лежит в координате -8000 примерно. А другой где -8600 - там лайтмапа испортилась.

__________________
Мой мод на Xash


Отправлено Дядя Миша 27-02-2022 в 12:14:

Я с таким не сталкивался. Но да, возможно на грасс_тесте тоже есть подобные места.

Добавлено 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'


Отправлено Aynekko 27-02-2022 в 12:40:

Да, портятся все лайтмапы за пределами 8192. Просто это слабо проявляется на скейлах вроде 1. На 0.25 проявляется моментально. Где лимит опять засел?

Добавлено 27-02-2022 в 15:15:

Цитата:
Дядя Миша писал:
с лайтмапой проблема

С ними. Фонарик уже давно все, профикшен на 100%

Добавлено 27-02-2022 в 15:40:

А на голдсорсе проблемы нет. Игрок не может зайти за границу 8192, зато лайтмапы там отлично рисуются.

__________________
Мой мод на Xash


Отправлено Дядя Миша 27-02-2022 в 12:51:

Ты меня абсолютно сбил с толку. Всё что я тебе писал касалось динамического света. Потому что ты зачем-то включил фонарик на втором скриншоте.

Добавлено 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'


Отправлено Aynekko 27-02-2022 в 12:55:

Цитата:
Дядя Миша писал:
Потому что ты зачем-то включил фонарик на втором скриншоте.

Извиняюсь. Я хотел показать, что фейс все равно освещается, но без фонарика он почему-то черный. Лайтмапы нет.
Цитата:
Дядя Миша писал:
Ты старым дедовском способом увеличиваешь разрешение лайтмапы?

Нет. Там просто текстура была такая большая, что пришлось сделать скейл 0.25 для одного конкретного объекта.
Но дело обстоит наверное хуже. На одном фейсе, я не показывал тут, есть черная полоса. Скейл там 1.5х1.2 на фейсе. Если вернуть комнату в пределы квадрата 8192, полосы не будет.

А вообще у меня zhlt_texturestep прописан прямо в ворлдспауне восьмеркой, но для чистоты теста я убрал и maxextent и texturestep оттуда. Впрочем, ничего не поменялось.

__________________
Мой мод на Xash


Отправлено SNMetamorph 27-02-2022 в 15:39:

В общем, разобрались с психопатом что это за баг был. У текстуры лайтмапы/делюксмапы был выставлен GL_CLAMP_TO_EDGE, из-за чего такие артефакты шли. Мы убрали текстурный флаг TF_CLAMP и стало нормально.

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


Отправлено Дядя Миша 27-02-2022 в 15:51:

Интересно

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 27-02-2022 в 18:47:

Цитата:
SNMetamorph писал:
Мы убрали текстурный флаг TF_CLAMP и стало нормально.

Проблема решилась пока частично. На тех скринах, что я кидал выше - все пофиксилось. А вот здесь пока все так же. Слева голдсорс, справа ксашмод. Комната на расстоянии 11 тысяч от центра примерно, но кажется тут уже это роли не играет... Текстура здесь со скейлом 1.2х1.5. Но вот видно, что в ксашмоде лайтмапа испорчена.

__________________
Мой мод на Xash


Отправлено Дядя Миша 27-02-2022 в 19:40:

что мешает включить показ лайтмап?

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 27-02-2022 в 19:56:

Ну вот. Справа как должно быть. Слева сломано.

__________________
Мой мод на Xash


Отправлено Crystallize 27-02-2022 в 20:21:

кстати тоже сталкивался с почернением лайтмапы на фейсах со странными скейлами


Отправлено Дядя Миша 28-02-2022 в 06:21:

Aynekko попробуй проверить всё это под оригинальным Ксашем, собранным шестой студией.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 28-02-2022 в 07:15:

Дядя Миша агась. Это похоже FWGS виноват. Но tf_clamp все равно убрать было нужно - там лайтмапа не рисовалась и на 4529. А конкретно это место на 4529 пофиксилось.

__________________
Мой мод на Xash


Отправлено Crystallize 28-02-2022 в 07:17:

скейл текстуры 0.1 и 0.2, из параметров только zhlt_maxextent 128, индирект есть


Отправлено Aynekko 28-02-2022 в 07:20:

Crystallize жесть, это gl_renderer 0? Или ксашмод?

__________________
Мой мод на Xash


Отправлено Crystallize 28-02-2022 в 07:34:

Aynekko ксашмод
вот без макэкстента


Добавлено 28-02-2022 в 14:34:

от рендерера не зависит


Отправлено Aynekko 28-02-2022 в 07:37:

Crystallize убери TF_CLAMP из TF_DELUXMAP и TF_LIGHTMAP. Это в r_local.h в клиентке

Добавлено 28-02-2022 в 10:37:

Цитата:
Crystallize писал:
от рендерера не зависит

А, кстати да. Кламп-то я убрал на клиентке. Поставил рендерер 0, опять черные пятна. А вот полоса уходит. Напасть какая-то

__________________
Мой мод на Xash


Отправлено Дядя Миша 28-02-2022 в 11:45:

Цитата:
Aynekko писал:
Это похоже FWGS виноват

Возможно не столько FWGS сколько ваша любимая новая студия, которая операции с плавающей точкой подменяет SSE-оптимизациями.
То есть ты просто пересобёрешь оригинальный ксаш новой студией - и опять начнётся.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 28-02-2022 в 12:06:

Дядя Миша мой ксашмод стоковый если что


Отправлено SNMetamorph 28-02-2022 в 12:15:

Цитата:
Дядя Миша писал:
Возможно не столько FWGS сколько ваша любимая новая студия, которая операции с плавающей точкой подменяет SSE-оптимизациями.

Ага, это скорее всего оно. И судя по тому, дело конкретной в этой переменной
https://github.com/FWGS/xash3d-fwgs..._bmodel.c#L1052
Там нужно float на double поменять и перепроверить.

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


Отправлено Дядя Миша 28-02-2022 в 12:23:

Там нужно явным образом привести всё к даблам, чтобы компилятор успокоился. Кажется в FitzQuake есть образец как это сделать.
Я давно об этом знаю, но не парился, поскольку для шестой студии проблема неактуальна.

__________________
My Projects: download page

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

Цитата:

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


Отправлено SNMetamorph 28-02-2022 в 14:06:

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


Отправлено Дядя Миша 28-02-2022 в 14:36:

Вы бы движок что-ли переписали на кресты и избавились от этих дефайнов с дот-продуктоме.

__________________
My Projects: download page

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

Цитата:

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


Отправлено SNMetamorph 28-02-2022 в 15:14:

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


Отправлено Дядя Миша 28-02-2022 в 15:23:

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 28-02-2022 в 17:29:

Вот эта хрень, кстати, тоже решилась. Светового пятна больше нет.
https://hlfx.ru/forum/showthread.ph...6807#post206807

__________________
Мой мод на Xash


Отправлено Дядя Миша 28-02-2022 в 18:00:

А вот то, что надо убрать 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'


Отправлено Crystallize 13-03-2022 в 18:10:

Цитата:
Дядя Миша писал:
Всё с трейслайном в порядке, ты им как-то неправильно пользуешься.

я в коде камеры создаю локальный вектор и в нем уже записана скорость куска лавы, вот как так?


Отправлено Дядя Миша 13-03-2022 в 18:38:

Так стек не очищается принудительно, иначе скорость работы упала бы вдвое.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 16-03-2022 в 07:42:

А, ну я помню твои статьи. Но тут дело в том что оно еще и перезаписывает мои переменные после меня. Бывает все нормально, а потом объявишь еще одну переменную и с какой-то другой начинает твориться вот это.


Отправлено Дядя Миша 16-03-2022 в 07:55:

В каком это смысле - после тебя? Ты что же переменную из стека возвращаешь в другую функцию? Приведи пример.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 18-03-2022 в 20:12:

Дядя Миша не смог больше воспроизвести ни специально ни случайно

похоже что у некоторых фейсов в первокваке неверные нормали. Может такое быть? На стартовой карте, сразу за спиной игрока.


Отправлено Дядя Миша 18-03-2022 в 20:34:

Цитата:
Crystallize писал:
похоже что у некоторых фейсов в первокваке неверные нормали

если у фейса выставлен SURF_PLANEBACK нормаль надо инвертировать.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 20-03-2022 в 17:47:

а что делать с нормалями 0 0 0? У них нет длины и из них не соберешь вектор через VectorMA.


Отправлено Дядя Миша 21-03-2022 в 05:35:

Таких нормалей в карте быть не должно, очевидно же.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 21-03-2022 в 17:21:

Вот такая проблемка. В спауне ставлю брашу SetTouch( func ).
В самом func код примерно такой

C++ Source Code:
1
if( pOther->IsPlayer() )
2
{
3
  ALERT( at_console, "test\n" );
4
  Use( pOther, pOther, USE_TOGGLE, 0 );
5
  SetTouch( NULL );
6
}

Несмотря на то, что я вроде бы выставил тач в нулл, алерт все равно срабатывает, значит тач никуда не делся. Почему он не отключается? Я должен коснуться браша один раз и все.

__________________
Мой мод на Xash


Отправлено Дядя Миша 21-03-2022 в 17:27:

Ну потому что ты назвал функцию 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'


Отправлено Aynekko 21-03-2022 в 17:31:

Цитата:
Дядя Миша писал:
Ну потому что ты назвал функцию Touch. Когда ты убираешь указатель на нее, срабатывает уже механизм виртуальных функций C++.
Такая вот в халфе заморочка. Дай ей более другое имя.

Прикол. Спасибо, сработало

__________________
Мой мод на Xash


Отправлено Дядя Миша 21-03-2022 в 18:27:

Цитата:
Aynekko писал:
ставлю брашу SetTouch( func ).

А зачем ты скрыл реальное имя функции? Думал я не догадаюсь?

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 21-03-2022 в 19:45:

Цитата:
Дядя Миша писал:
А зачем ты скрыл реальное имя функции?

Так получилось. Т.к. я пока тестил, пробовал оба варианта, но обнаружил именно с тачем. Был уверен, что разницы нет от названия.
Сейчас уже понял, что тач это глобальная функция и вызывается сама по себе. У меня в спауне вообще стояло SetTouch( Touch ), я так понял этого вообще не нужно было делать, т.к. само существование функции подразумевает ее использование.
И да, я был удивлен, что ты догадался, ну ты уже этот двиг как свои пять пальцев знаешь

__________________
Мой мод на Xash


Отправлено Дядя Миша 22-03-2022 в 06:01:

Это в cbase.h

C++ Source Code:
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
}

Виртуальные функции наследуются в любом случае. А вот если её нет - срабатывает этот механизм.
Цитата:
Aynekko писал:
ну ты уже этот двиг

уже?

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ku2zoff 22-03-2022 в 13:56:

Цитата:
Дядя Миша писал:
Виртуальные функции наследуются в любом случае

void CMyEntity::Touch(CBaseEntity *pOther) будет наследоваться же? Экспорт ей объявлять не надо? Я так понимаю, что только кастомные void CMyEntity::CustomTouch(CBaseEntity *pOther) требуют EXPORT в описании класса? И, соответственно, выбора через SetTouch.


Отправлено Дядя Миша 22-03-2022 в 15:17:

EXPORT по твоему нужен для наследования?

Это механизм сейв-рестора, сделанный на скорую руку - лукап имён методов в таблице экспортов. В виртуальной машине этого не требовалось, там и так все имена доступны.

Цитата:
Ku2zoff писал:
void CMyEntity::Touch(CBaseEntity *pOther) будет наследоваться же?

В каком смысле наследоваться? Базовая функция виртуальная, значит вместо нее будет вызываться функция из дочернего класса, если она есть, конечно же.
Имеется в виду, когда объект представлен указателем на CBaseEntity и мы вызываем базовый метод Touch. Вызовется именно дочерний, потому что он виртуальный.

__________________
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 25-03-2022 в 21:08:

бензиновый спрайт

делал спрайт дозиметра, первый фрейм ничего, остальные как будто в бензин окунули, что за дичь? собирал параноевским spritegen

Добавлено 26-03-2022 в 00:08:

причем если собирать спрайты по отдельности бензиновых разводов нет

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Ku2zoff 26-03-2022 в 04:52:

hgrunt_2020 сделай всем кадрам одинаковую палитру в фотошопе.


Отправлено Дядя Миша 26-03-2022 в 05:48:

Параноевский 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 26-03-2022 в 12:42:

Дядя Миша ладно, я пока обошелся просто отдельными спрайтами

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Ku2zoff 26-03-2022 в 13:52:

hgrunt_2020 делаешь первый кадр в 256 цветов (если он полноцветный). Экспортируешь из него палитру, а потом импортируешь во все остальные. Должно сработать. Я так делаю с текстурами, которые прогоняю через Gigapixel. Потому что эта прога умеет работать только с полноцветными изображениями. Экспорт палитры из 256 -> 256 в полноцветное -> апскейл -> полноцветное в 256 через импорт старой палитры.


Отправлено hgrunt_2020 26-03-2022 в 21:36:

Ku2zoff Cпасибо за подсказку с палитрой, я сделал через wally и все кадры стали нормальными

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено hgrunt_2020 27-03-2022 в 03:19:

Ku2zoff вот так спрайт выглядит после твоего совета https://youtu.be/54y41vny-gw

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Ku2zoff 27-03-2022 в 05:03:

Цитата:
hgrunt_2020 писал:
Cпасибо за подсказку с палитрой, я сделал через wally

Изначально так спрайты и делали: готовили кадры заранее. Это уже Дядьмишины утилиты научились преобразовывать в 256 цветов налету. Как видишь, у срайтгена есть недоработка. Лучше конечно вручную конвертировать с помощью какого-нибудь софта. Но когда текстур несколько сотен - это очень геморно, и лучше использовать пакетную обработку и поправлять руками то, что получилось откровенно косячно.


Отправлено Дядя Миша 27-03-2022 в 05:22:

Хороший дозиметр!

Цитата:
Ku2zoff писал:
Как видишь, у срайтгена есть недоработка

Может Метаморф доделает? Он как раз трудится над параноей.

__________________
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 27-03-2022 в 07:35:

Ku2zoff мдэ, я думал что дядямишин софт по по всем параметрам лучше, выходит я ошибался, у него и своих косяков хватает, хотя все мы люди и нам свойственно ошибаться)

Добавлено 27-03-2022 в 10:35:

Дядя Миша Метаморф? Над параноей? Он над прайсом работает)

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Ku2zoff 27-03-2022 в 07:41:

Цитата:
Дядя Миша писал:
Хороший дозиметр!

Вижу дозиметр - вспоминаю обзор BadComedian'a на "Чернобыль" Козловского, и улыбаюсь.


Отправлено Дядя Миша 27-03-2022 в 08:08:

Цитата:
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 27-03-2022 в 09:13:

Цитата:
Дядя Миша писал:
Хороший дозиметр!

Спасибо, за 3 дня сделал)

Добавлено 27-03-2022 в 12:13:

Дядя Миша а, ну если говорит, то значит займется скорее всего

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено FreeSlave 09-04-2022 в 23:25:

Я так понял, описательная часть параметра в fgd, идущая после значения, это расширение JACK'а?

code:
chaptertitle(string) : "Chapter Title Message" : "" : "Text displayed when entering the level."

Нет способа сделать fgd совместимым с обоими редакторами без потери этих комментариев?

__________________
I'm on github
I'm on opendesktop.org


Отправлено XaeroX 15-04-2022 в 17:40:

Цитата:
FreeSlave писал:
Нет способа сделать fgd совместимым с обоими редакторами без потери этих комментариев?

А какой второй редактор?
Если у него нет исходников, то ответ очевиден.
Цитата:
FreeSlave писал:
это расширение JACK'а?

В Джеке довольно много расширений FGD, незаметных на первый взгляд.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


Отправлено FreeSlave 15-04-2022 в 19:57:

Цитата:
XaeroX писал:
А какой второй редактор?

VHE 3.5

Цитата:
XaeroX писал:
В Джеке довольно много расширений FGD, незаметных на первый взгляд.

В идеале нужен автоматический конвертер. Но тебе как автору Джека делать его невыгодно конечно

__________________
I'm on github
I'm on opendesktop.org


Отправлено илья2 17-04-2022 в 17:07:

всем привет, как исправить ошибку с новыми декалями ? вот такая вот ошибка вылазиет: Used decal #356 without a name
новый декал добавлял только в decals.h.

__________________
илья


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

Цитата:
илья2 писал:
новый декал добавлял только в decals.h.

Так этого совершенно недостаточно.

Открывай world.cpp ищи строчку
C++ Source Code:
DLL_DECALLIST gDecals

и там добавляй имя своей декали на той же позиции, на которой ты её вставил в decals.h. В противном случае всё перепутается и начнётся ад.

__________________
My Projects: download page

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

Цитата:

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


Отправлено илья2 17-04-2022 в 19:05:

угу ясно буду пробовать

Добавлено 17-04-2022 в 22:05:

все спасибо сработало как надо

__________________
илья


Отправлено илья2 20-04-2022 в 10:06:

как превысить лимит прекеша моделей с 512 на 1000 ? и возможно ли такое ?

__________________
илья


Отправлено KorteZZ 20-04-2022 в 12:07:

На голде - нет

__________________

Killing Floor: Horzine Outbreak


Отправлено Дядя Миша 20-04-2022 в 14:36:

Цитата:
илья2 писал:
как превысить лимит прекеша моделей с 512 на 1000 ?

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено илья2 21-04-2022 в 06:21:

Цитата:
Дядя Миша писал:
Ну вот когда ты грузишь много моделей - лимит превышается.
А то что ты хочешь - увеличить лимит, а не превысить.

да надо бы увеличить

__________________
илья


Отправлено Ku2zoff 21-04-2022 в 08:17:

илья2 лимит в движке. Есть два варианта: первый - уменьшить количество студиомоделей и спрайтов. Объединить p_ и w_модели оружий, все гильзы засунуть в одну модель и переключать бодями, все подбираемые итемы и патроны тоже объединить в одну модель. Все прождектайлы (гранаты, ракеты, хорнеты) тоже в одну модель. Спрайты с одинаковой палитрой объединить в один спрайт, и переключать кадры. Таким образом можно сэкономить около сотни позиций. То, что не прекэшится всегда, а грузится для отдельной карты, можно таким же образом оптимизировать: монстров с одинаковыми скелетами объединить в одну модель, спрайты с одинаковой палитрой в один спрайт. Брашевые модели объединять в редакторе: на этом тоже можно сэкономить. От последнего возможны глюки с физикой, надо тестировать.
Второй вариант: перейти на другой движок. Если мод делается на стим-голдсорс, то можно перейти на Sven Engine (это вообще очень классный ход, т.к. Свен в стиме бесплатный, игрокам даже не надо будет покупать халфу, чтобы поиграть в мод). Так же можно перейти на Xash3D FWGS, он совместим со стим-голдсорсом. Ну а если мод делается без привязки к стим версии и кроссплатформенности, можно перейти на ванильный Xash3D.


Отправлено Chyvachok 21-04-2022 в 09:08:

По лимитам в голдсорсе, мне вот интересно почему в голдсорсе оно так все лимитировано причем на все лимиты, вон старый Дум все с него выросло, есть на него всякие nuts.wad, с тысячами монстров, если комп не тянет оно лагать будет, в крайнем случае 1фпс будет, но не свалится игра. Я конечно понимаю что есть ограничения по памяти, но нельзя ли эту передачу между клиентом и сервером динамической сделать. А тут эти ограничения на модели из-за чего прожектайли в одну модель совать приходится, очень не удобно потом с такими спрайтами и моделями работать.


Отправлено Дядя Миша 21-04-2022 в 09:43:

Цитата:
Chyvachok писал:
вон старый Дум все с него выросло

От старого дуума сорцы выложили, вот и накрутили там лимиты.
А от халфы сорцы так никто и не выложил.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 21-04-2022 в 10:19:

Chyvachok
Я не думаю что валва в 1998 году проектировала свой движок чтобы на нём делали какие то моды. Посмотри ранние билды, там вообще жесть треш и угар. А лимиты скорее всего просто с кваки остались.


Отправлено Ku2zoff 21-04-2022 в 15:49:

Цитата:
Дядя Миша писал:
А от халфы сорцы так никто и не выложил.

Да потому что КС. Вот и не выложили никаких сорцев. КС был и остаётся самым главным катализатором актуальности голдсорса и сорса. Даже когда сорцы кс 1.6 отреверсили, никто эти сорцы не заблочил. Наоборот, дали свободу действий моддерам. Ради того, чтобы изучить интересы аудитории.


Отправлено илья2 21-04-2022 в 22:39:

Цитата:
илья2 писал:
как превысить лимит прекеша моделей с 512 на 1000 ? и возможно ли такое ?

все сам справился кое какие баги пришлось пофиксить в своём моде путем исправления кода. Теперь точно проблем с прекешами быть не должно !

__________________
илья


Отправлено илья2 25-04-2022 в 21:37:

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 )

вопрос как исправить эту големотью ?

__________________
илья


Отправлено Napoleon321 25-04-2022 в 22:46:

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!


Отправлено Дядя Миша 26-04-2022 в 05:51:

Перед этим идёт еще какая-то мессага, у которой ты забыл вызвать 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'


Отправлено илья2 26-04-2022 в 07:25:

ну все проблема легко решается сам справился во первых вместо
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" );

все все просто оказывается. Итог получилась ядерная граната

__________________
илья


Отправлено Napoleon321 26-04-2022 в 08:14:

Цитата:
илья2 писал:

все все просто оказывается. Итог получилась ядерная граната [/B]


Good job. So I was right you're making a nuke. , I would suggest you to put bigger throw distance for that grenade... else the player will get nuked by their own grenade.

__________________
FlatLine Arena | Tutorials

If you don't like something, MOD it!


Отправлено илья2 26-04-2022 в 09:43:

Цитата:
Napoleon321 писал:
Good job. So I was right you're making a nuke. , I would suggest you to put bigger throw distance for that grenade... else the player will get nuked by their own grenade.

this is a test version, I just needed to insert a CYLINDERBEAM into a gluon grenade for a gluon cannon

Добавлено 26-04-2022 в 12:43:

о дядя миша а это случайно не ты говорил:
https://csm.dev/threads/dobovljaem-...hockwave.29503/
нельзя кэшировать модель в том месте где передаешь мессагу на клиент.
И уж тем более нежелательно объявлять её индекс как глобальную переменную.

ну теперь понятно почему ошибка вылазит

__________________
илья


Отправлено Дядя Миша 26-04-2022 в 12:10:

Цитата:
илья2 писал:
о дядя миша а это случайно не ты говорил:

Аватар совпадает, ник совпадает, ну разумеется это кто угодно, но только не я.

__________________
My Projects: download page

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

Цитата:

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


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

илья2 меня впечатляет твой прогресс, на самом деле.


Отправлено илья2 26-04-2022 в 17:54:

Цитата:
Crystallize писал:
илья2 меня впечатляет твой прогресс, на самом деле.

Да это просто опыт. Когда очень много занимаешься одним и тем же, со временем набирается опыт, и ты уже сам знаешь, как и что делать. А как всем известно, опыт круче знаний .

__________________
илья


Отправлено hgrunt_2020 02-05-2022 в 03:08:

Непонятно откуда взявшийся ACT 23

после того как я добавил SetActivity для барни у меня в консоли начала вылазить ошибка
monster_barney has no sequence for act:23
что с ней делать и как её починить?

Добавлено 02-05-2022 в 06:08:

Вот функция

C++ Source Code:
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
}

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Ku2zoff 02-05-2022 в 04:55:

hgrunt_2020 это ACT_SIGNAL3, CTalkMonster используют эту активность во время разговора. Подразумевается кивок головой или какое-то другое движение, например жест рукой. Т.к. в моделях барника и учёного такой активности нету, сделана проверка. Видимо, планировалась целая куча анимаций во время разговора, но что-то пошло не так, и от этого отказались. Добавь проверку в CBarney::SetActivity, проблема исчезнет.

C++ Source Code:
if (NewActivity == ACT_SIGNAL3 && (LookupActivity(ACT_SIGNAL3) == ACTIVITY_NOT_AVAILABLE))
  NewActivity = ACT_IDLE;
Это вставь в самое начало функции.


Отправлено hgrunt_2020 02-05-2022 в 05:14:

Ku2zoff О,спасибо. только все же остается вопрос, у меня ни в SetActivity ни в модели нет ACT_SIGNAL3, что же тогда источник ошибки

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Дядя Миша 02-05-2022 в 06:21:

Цитата:
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'


Отправлено Ku2zoff 02-05-2022 в 07:08:

Цитата:
hgrunt_2020 писал:
что же тогда источник ошибки

То, что такой активности нет в модели - и есть источник ошибки. В базовом классе CTalkMonster в SetActivity есть проверка на её отсутствие, а в классе CHGrunt, откуда ты скопировал барнику SetActivity, нет.
C++ Source Code:
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
}

Если внимательно посмотришь таски CTalkMonster, то найдёшь там много вызовов { TASK_SET_ACTIVITY, (float)ACT_SIGNAL3 }. Как раз во время разговоров. Что интересно, даже у учёных нет такой активности. Или вэлв не наделали анимаций, или что-то пошло не так, например жестикуляция при каждой фразе выглядела странно, и они воткнули в код заглушку.


Отправлено hgrunt_2020 06-05-2022 в 11:40:

Помню дядя миша писал тутор о лодах, и там была проверка на бодигруппу, можно ли повторить этот код но только на сервере?
Сама проверка на лод-бодигруппу

C++ Source Code:
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
}


Добавлено 06-05-2022 в 13:23:

если можно то как?

Добавлено 06-05-2022 в 14:40:

а все
сам сделал
вот так вышло
C++ Source Code:
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
}

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Дядя Миша 06-05-2022 в 11:53:

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 06-05-2022 в 12:06:

Дядя Миша ну перенес код на сервер с мелкими поправками

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Дядя Миша 06-05-2022 в 14:27:

Так у тебя название функции не соответствует тому, что она делает.
У тебя функция берёт по имени, а имя ("weapons" ) внутри прописано намертво.
Так не годится.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ku2zoff 06-05-2022 в 15:52:

А вроде бы есть функция GetBodyGroup, так ведь? Только она возвращает конкретный номер, а не имя. Зачем такие сложности?


Отправлено hgrunt_2020 06-05-2022 в 22:03:

Ku2zoff У меня 6 моделей для одного нпс, и у всех нпс от 4 до 11 бодигрупп, да это не удобно, но зато нпс разнообразные

Добавлено 07-05-2022 в 01:03:

Дядя Миша я знаю что не годится, я попраил

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено hgrunt_2020 09-05-2022 в 13:13:

Люди, при попытке сохранится в консоль выдаёт вот такую ошибку
[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:

еще и адрес меняется после перезахода в игру

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Behemoth911 09-05-2022 в 14:02:

конвертация карт HL1 в HL2

Привет, можно ли конвертировать карту из HL 1 в HL 2? И как это сделать? Мне одна очень понравилась в свое время, отел бы на вторую часть перенести.. (заранее благодарен за ответ), какрту прикрепил ниже (просто может кто такую видел на 2й части если что)


Отправлено Дядя Миша 09-05-2022 в 17:19:

Цитата:
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 09-05-2022 в 21:07:

Дядя Миша а что ж я натворил, и как исправить?

Добавлено 10-05-2022 в 00:07:

Дядя Миша а что ж я натворил, и как исправить?

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Дядя Миша 09-05-2022 в 21:35:

Да откуда я знаю?
Когда у меня такое случилось, я всё бросил и начал писать Xash3D.
Потому что так и не разобрался как это исправить. Потом конечно разобрался, но уже было поздно.

Добавлено 10-05-2022 в 00:35:

А не, это не та ошибка. Эта не страшная. Страшно, когда тебе движок напишет:

C++ Source Code:
DAMN!  Even the engine couldn't FindEntityByVars!

Вот тогда - действительно всё, приплыли. А эта не страшная, ты просто где-то забыл прописать слово EXPORT у функции, которую вызываешь в SetThink\SetTouch\SetUse. Видимо у какой-то новой энтити, которую ты накодил.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 11-05-2022 в 09:47:

Такой вот нубский вопрос. В общем, делаю я ландшафт треугольными брашами. Понятное дело коллизия у них состоит из 5-ти фейсов, как я понимаю? На стыках часто проскакивают непонятные невидимые стены, которые причем односторонние. Как бороться с этим? У меня тулзы от п2. Я читал в инете, что надо использовать текстуру бевел, но Дядя Миша ее удалил. Вопрос собственно как бороться с этим, а другой вопрос есть ли вообще возможность сделать браш таким, чтобы коллизия была только на одном фейсе, а все остальные проходимы? Может в этом дело?

__________________
Мой мод на Xash


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

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'


Отправлено Aynekko 11-05-2022 в 12:29:

Вручную, генератором пока не пользовался, не интересовался. Надеюсь тут где-то завалялся тутор.
Попробую солидхинт, сейчас пока выручает zhlt_precisionclip, у него есть какие-то странности на стыках (но терпимо, какие-то подскоки), но провалов никаких нет

__________________
Мой мод на Xash


Отправлено илья2 11-05-2022 в 19:55:

Всем привет! Ну что, можете ржать. Накрылся мой мод медным тазом. Хотел 50 оружий в свой мод поставить, но нет, не получается. Выше 31 никак. Добавляю больше пушек. вылет какой то. Что делать дальше? Как это исправить ????????

__________________
илья


Отправлено Behemoth911 11-05-2022 в 19:58:

Цитата:
илья2 писал:
Всем привет! Ну что, можете ржать. Накрылся мой мод медным тазом. Хотел 50 оружий в свой мод поставить, но нет, не получается. Выше 31 никак. Добавляю больше пушек. вылет какой то. Что делать дальше? Как это исправить ????????


A пушки в HL2DM можно добавить ещё? Я тут пока карту перерисовываю с 1й части то закинул бы каких-то оружий если б можно было


Отправлено Chyvachok 11-05-2022 в 20:54:

Цитата:
илья2 писал:
Хотел 50 оружий в свой мод поставить, но нет, не получается. Выше 31 никак.


Это как бы давно известная проблема, в ХЛ лимит макс 31 пушка, ищи тутор Дяди Миши, если хочешь больше 64 пушек, на эту тему. Да и вообще в ХЛ много лимитов на все на модели и прочее, в том же HLWE к примеру не зря все модели снарядов зашиты в одну модель с кучей бодигруп.


Отправлено Дядя Миша 11-05-2022 в 20:54:

Ну что делать? Читать мой тутор, чтож еще-то:
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'


Отправлено Ku2zoff 12-05-2022 в 03:54:

илья2 Дядя Миша писал тутор, здесь на форуме, по добавлению поддержки 64 оружий. Стим-версия голдсорса это поддерживает на уровне движка. Есть ещё мод от товарища Ghoul[BB] (кстати, где он, жив ли?), там лимит превышен по тутору БУзера, что ли... Короче, есть джва варианта. Оба предполагают много изменений на сервере и клиенте и кастомные мессаги для передачи данных о пушках на клиент.


Отправлено илья2 12-05-2022 в 10:23:

http://www.half-life.ru/forum/showt...p?threadid=6129 делал я по тутору бузера не сработало тутор дяди миши слишком замороченный например я не могу понять как сделать это и нужно ли это вообще:Теперь нам надо исключить все обращения к pev->weapons и заменить их на вызовы наших новых функций

__________________
илья


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

Цитата:
илья2 писал:
не могу понять как сделать это и нужно ли это вообще

А как ты собрался делать по тутору, если уже сам решаешь что делать, а что нет? Если ты сам знаешь что делать, тебе туторы уже не нужны.
А если не знаешь, значит следуй тому что написано.

Добавлено 12-05-2022 в 14:11:

Цитата:
илья2 писал:
тутор дяди миши слишком замороченный

Ты вообще исходники Unreal Engine 4 видел?

__________________
My Projects: download page

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

Цитата:

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


Отправлено илья2 12-05-2022 в 12:44:

Цитата:

А как ты собрался делать по тутору, если уже сам решаешь что делать, а что нет? Если ты сам знаешь что делать, тебе туторы уже не нужны.
А если не знаешь, значит следуй тому что написано:

я не могу понять при чем тут монстры и pev->weapons если речь идет про увеличение оружий

Цитата:

Ты вообще исходники Unreal Engine 4 видел?:

нет

__________________
илья


Отправлено Дядя Миша 12-05-2022 в 14:20:

илья2 научись пожалуйста цитировать. Выделяешь текст, который хочешь процитировать и нажимаешь кнопку "Цитата".

Цитата:
илья2 писал:
я не могу понять при чем тут монстры и pev->weapons

При том, что монстры тоже используют эту переменную. Именно в ней лимит на 32 пушки спрятан.

__________________
My Projects: download page

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

Цитата:

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


Отправлено илья2 12-05-2022 в 14:31:

в общем не компилиться

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

__________________
илья


Отправлено Дядя Миша 12-05-2022 в 14:36:

Тутор прочитан невнимательно, вот и не компилится.

Цитата:
Дядя Миша писал:
Для эффективной работы с бит-стрингами, нам понадобится несколько макросов. Откройте const.h и там где-нибудь добавьте их. В const.h, чтобы они были доступны и на клиенте и на сервере одновременно

C++ Source Code:
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))

Нижние три вам наверняка знакомы, но не забудьте удалить их из util.h.

__________________
My Projects: download page

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

Цитата:

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


Отправлено илья2 12-05-2022 в 14:40:

так я же добавил в const.h

Добавлено 12-05-2022 в 17:40:

и из util.h удалил 3 функции

__________________
илья


Отправлено Дядя Миша 12-05-2022 в 14:43:

И про 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'


Отправлено илья2 12-05-2022 в 16:21:

Херня твой тутор. не работает ничего. Все добавил, как надо скомпилировал, все равно вылет какой то и все. А на оригинальных исходниках попробовал, там фонарик не работает, не включается, переключения оружий не работает.
Да и костюм в самом начале дали. когда его вообще не должно быть по идее.

Ясно, понятно. Надо другой мод делать. Про 50 пушек придется забыть.

Добавлено 12-05-2022 в 19:21:

доказательство хотя бы есть что этот тутор рабочий ?

__________________
илья


Отправлено Дядя Миша 12-05-2022 в 16:36:

Ну во первых тут тебе никто ничего не должен.
Во вторых, вот Чувачок отписался, что у него всё получилось
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'


Отправлено FiEctro 12-05-2022 в 16:47:

Цитата:
илья2 писал:
Херня твой тутор. не работает ничего. Все добавил, как надо скомпилировал, все равно вылет какой то и все. А на оригинальных исходниках попробовал, там фонарик не работает, не включается, переключения оружий не работает.


Просто руки из жопы. Лучше бы логи какие то приложил, и описал детально что делал.


Отправлено илья2 12-05-2022 в 17:51:

Цитата:
Дядя Миша писал:
Если для тебя подобные простейшие вещи вызывают такие затруднения, значит кодинг действительно не твоё. [/B]

да согласен не мое но это просто увлечение и не более того

Добавлено 12-05-2022 в 20:50:

Цитата:
FiEctro писал:
Просто руки из жопы. Лучше бы логи какие то приложил, и описал детально что делал.

из какой еще такой жопы по вежливее пожалуйста тут тебе не балаган !

Добавлено 12-05-2022 в 20:51:

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

Во вторых, вот Чувачок отписался, что у него всё получилось:если все получилось пускай видео доказательство выложит а то не верю

__________________
илья


Отправлено XaeroX 12-05-2022 в 17:56:

Цитата:
илья2 писал:
пускай видео доказательство выложит а то не верю

Выложит скрин - ты скажешь "фотошоп".
Выложит видео - ты скажешь "снято на мосфильме".
Выложит билд - ты скажешь, что он был сделан по другому тутору.
Вот такое нынче время - верить никому нельзя, порой даже самим себе. Нам - можно.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


Отправлено FiEctro 12-05-2022 в 17:57:

Цитата:
илья2 писал:
из какой еще такой жопы по вежливее пожалуйста тут тебе не балаган !


Ты сам задал этот тон, начал хамить. И вместо того чтобы выложить лог, начинаешь разводить клоунаду в стиле верю, не верю.


Отправлено XaeroX 12-05-2022 в 17:58:

Цитата:
илья2 писал:
можешь не повторять я знаю что нужно всем платить

И много уже заплатил?

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


Отправлено илья2 12-05-2022 в 18:02:

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

Добавлено 12-05-2022 в 21:02:

Цитата:
XaeroX писал:
И много уже заплатил?

несколько не заплатил !

__________________
илья


Отправлено XaeroX 12-05-2022 в 18:04:

Цитата:
илья2 писал:
а что я должен врать сказать что все хорошо что все нормально

сказать, что у тебя что-то не получилось, может быть - по невнимательности? попробуй ещё раз сделать всё по тутору, на чистом сдк.
Цитата:
илья2 писал:
несколько не заплатил !

Ну вот и не ругайся в таком разе.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


Отправлено FiEctro 12-05-2022 в 18:05:

Цитата:
илья2 писал:
я правду говорю хоть она и выглядит лживой !


В мемориз


Отправлено илья2 12-05-2022 в 18:07:

Цитата:
XaeroX писал:
сказать, что у тебя что-то не получилось, может быть - по невнимательности? попробуй ещё раз сделать всё по тутору, на чистом сдк.

не все я устал не хочу еще раз все переделывать

__________________
илья


Отправлено FiEctro 12-05-2022 в 18:09:

Так если ты говоришь что ты никому ничего не должен, почему тогда тебе всё должны доказывать?


Отправлено XaeroX 12-05-2022 в 18:10:

илья2
Ты не переделывай, а возьми чистый HLSDK и перенеси код из тутора на него.
Если заработает - значит, проблема не в туторе, а в несовместимости с твоим остальным кодом.
Если не заработает - по крайней мере, можно будет легко посмотреть дифф и убедиться, правильно ли ты всё перенёс или нет.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


Отправлено илья2 12-05-2022 в 18:21:

даже если у меня все получиться все равно будет вылет наверно проблема все таки с моим модом надо попробовать кастомные пушки на новый сдк добавить до 32 если вылета не будет значит проблема точно в моем моде тогда придется все переделывать чего не особо хочется

__________________
илья


Отправлено Aynekko 20-05-2022 в 12:21:

Возможно ли пустить traceline, чтобы он столкнулся с несолидным брашем? Мне нужно как-то поймать func_illusionary или триггер трассой. Ну или чем-то похожим. Он ловит только солидные объекты...

Добавлено 20-05-2022 в 15:21:

Впрочем, выкрутился брашем с нестандартным skin -30 (просто взял число подальше от других contents). И проверяю конец трассы через PointContents. Работает. Главное, что браш определяется, и ничего не ломает (особенно хождение монстров через него).
Можно было бы еще определять поверхность и ее нормаль, было бы вообще здорово. Но, полагаю, такое с несолидными брашами не получится провернуть...я не нашел как. Хоть так

__________________
Мой мод на Xash


Отправлено Дядя Миша 20-05-2022 в 12:30:

Да, кастомный контентс задаёшь и всё.

Добавлено 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'


Отправлено Crystallize 20-05-2022 в 18:51:

квака стала внезапно крашиться на 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:

но даже если там получилось какое-то огромное значение, непонятно почему оно портит другие данные


Отправлено Crystallize 21-05-2022 в 17:37:

Ну да, переменная улетает в большие числа. Есть ли какие-то умные способы как такое дебажить? Или просто искать инвалидов каждый раз когда дебагер показывает на нетроганную функцию?


Отправлено Дядя Миша 21-05-2022 в 19:52:

Цитата:
Crystallize писал:
Есть ли какие-то умные способы как такое дебажить?

Есть. Понимать что делаешь. Тогда и ДЕБАЖИТЬ не придётся.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FreeSlave 25-05-2022 в 20:51:

Есть такая проблема: при использовании func_tank_laser игрок может встать так, что заблочит движение пушки. Если в этот момент ещё и выстрелить, то лазер после выстрела не исчезнет. Танк попросту перестает вызывать свой Think. В чём тут дело?
В аттаче карта-пример.

__________________
I'm on github
I'm on opendesktop.org


Отправлено Дядя Миша 26-05-2022 в 06:11:

Цитата:
FreeSlave писал:
Танк попросту перестает вызывать свой Think

Заблоченный MOVETYPE_PUSH не вызывает Think, это еще Кармак придумал.
Вальва сделала флажок FL_ALWAYSTHINK для решения этой проблемы.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FreeSlave 26-05-2022 в 11:26:

Цитата:
Дядя Миша писал:
Вальва сделала флажок FL_ALWAYSTHINK для решения этой проблемы.

Спасибо. Выставляю FL_ALWAYSTHINK при включении лазера и убираю при отключении. Вроде работает, как надо.
Можно ещё танк сделать SOLID_NOT, если неважна солидность.

Тем временем, другая проблема.
Есть такой странный баг: если игрок стоит на трупе, лежащем около двери, то дверь будет получать игрока в Blocked при попытке открыть её прикосновением. Пример в аттаче.
Убейте хаундая около двери и попытайтесь открыть дверь с той же стороны. Она откроется только если игрок разобьёт труп или подпрыгнет на месте, касаясь двери (при подходе с другой стороны дверь открывается как обычно). Т.е. каким-то образом нахождение трупа под игроком влияет на коллизии с игроком.
Если двери выставить урон, то она таким образом игрока ещё раздавит
У меня подобный баг был с func_train на одной из карт FI - если при движении func_train игрок становился на труп неподалеку, то func_train останавливался и наносил урон игроку. Я тогда просто положил труп чуть дальше и проблема исчезла.
В HL подобное наблюдается на карте c1a2 - если зайти в секретку в вентиляции и встать на труп барника, не касаясь вентилятора, всё равно получишь от него урон.

__________________
I'm on github
I'm on opendesktop.org


Отправлено Ku2zoff 26-05-2022 в 12:03:

Цитата:
FreeSlave писал:
откроется только если игрок разобьёт труп или подпрыгнет на месте, касаясь двери

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


Отправлено Дядя Миша 26-05-2022 в 12:08:

Цитата:
FreeSlave писал:
Есть такой странный баг: если игрок стоит на трупе, лежащем около двери, то дверь будет получать игрока в Blocked при попытке открыть её прикосновением

Попробуй под Ксашем воспроизвести.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FreeSlave 26-05-2022 в 13:38:

Цитата:
Дядя Миша писал:
Попробуй под Ксашем воспроизвести.

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

Цитата:
Ku2zoff писал:
Много раз сталкивался с тем, что трупы блокируют двери и пушабли. Независимо от того, стоит игрок на трупе, или нет.

Это другая проблема. В таком случае дверь получает в качестве блокировщика именно монстра. И тут уж девелопер может решить - разбивать трупы, делать их временно несолидными или ещё что. В описанном же мной случае блокировщиком считается игрок.

Добавлено 26-05-2022 в 16:38:

Проверил ещё вентилятор на c1a2 - убивает и под ксашем, если наступить на труп барника. Причем на новом Xash3D-FWGS вентилятор останавливается, а на старом - нет.

__________________
I'm on github
I'm on opendesktop.org


Отправлено Vadiman 27-05-2022 в 17:12:

Всем привет!
Ребят, столкнулся с проблемой: перестали собираться сорцы sdk 2.3 - вроде бы всегда все нормально было, но спустя год-полтора перерыва в "хобби" обнаружил, что теперь студия (юзаю 2005) перестала компилить и ругается на ошибки. Скачивал сорцы с этого сайта, в теме выше, но они тоже не собираются.
Я что-то не так настроил? Вроде бы всегда на дэфолтных настройках все работало




Отправлено SNMetamorph 27-05-2022 в 20:27:

Цитата:
Vadiman писал:
Всем привет!
Ребят, столкнулся с проблемой: перестали собираться сорцы sdk 2.3 - вроде бы всегда все нормально было, но спустя год-полтора перерыва в "хобби" обнаружил, что теперь студия (юзаю 2005) перестала компилить и ругается на ошибки. Скачивал сорцы с этого сайта, в теме выше, но они тоже не собираются.
Я что-то не так настроил? Вроде бы всегда на дэфолтных настройках все работало


А что за проект у тебя? Может тебе PrimeXT подошел бы больше?

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


Отправлено Crystallize 28-05-2022 в 08:04:

Vadiman возможно где-то не закрыта фигурная скобка?


Отправлено Vadiman 28-05-2022 в 19:59:

Цитата:
SNMetamorph писал:
А что за проект у тебя? Может тебе PrimeXT подошел бы больше?

В том и дело, что сорцы чистые и скачаны с сдк, который ранее всегда нормально собирался. Я еще даже ничего не редачил там, просто решил собрать их, как чувствовал, что надо проверить)
Может обновления винды какие-то библиотеки скорраптили? Хз.


Отправлено илья2 31-05-2022 в 10:21:

можно ли использовать нулевой слот WEAPON_NONE 0 ?

__________________
илья


Отправлено FiEctro 31-05-2022 в 10:46:

Цитата:
Vadiman писал:
В том и дело, что сорцы чистые и скачаны с сдк, который ранее всегда нормально собирался. Я еще даже ничего не редачил там, просто решил собрать их, как чувствовал, что надо проверить)
Может обновления винды какие-то библиотеки скорраптили? Хз.


Чистые сорцы из ХЛСДК они под шестую студию. Тебе нужен СДК для студии 2005.


Отправлено hgrunt_2020 31-05-2022 в 11:49:

илья2 Нельзя, т.к. он используется когда у игрока нет оружия в принцепе

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Дядя Миша 31-05-2022 в 11:56:

илья2 нулевой слот означает, что у игрока вообще нет оружия.
Если ты туда повесишь какую-то пушку, она всегда будет с игроком.

__________________
My Projects: download page

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

Цитата:

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


Отправлено илья2 31-05-2022 в 12:25:

Цитата:
Дядя Миша писал:
илья2 Если ты туда повесишь какую-то пушку, она всегда будет с игроком.

а что неплохо можно попробовать кулаки добавить например

__________________
илья


Отправлено Vadiman 31-05-2022 в 19:27:

Цитата:
FiEctro писал:
Чистые сорцы из ХЛСДК они под шестую студию. Тебе нужен СДК для студии 2005.

Их я тоже ставил, прямо с этого сайта - все одинаково. Причем hl.dll собирается спокойно, а вот на клиенте начинается какая-то лажа.
Может у кого завалялись в закромах проверенные сорцы, не поделитесь?


Отправлено Ku2zoff 31-05-2022 в 20:12:

Цитата:
Vadiman писал:
на клиенте начинается какая-то лажа

У тебя каких-то хедеров нету, скорее всего. Точно чистый SDK для 2005 студии, что XaeroX адаптировал? Полный лог компиляции приложи в аттач, кстати.

Добавлено 01-06-2022 в 03:12:

Цитата:
Vadiman писал:
Может у кого завалялись в закромах проверенные сорцы, не поделитесь?

На гитхабе у Валвэ проверенные сорцы. Собираются 2003 студией после даунгрейда проектов, я проверял. Заточены под 2010, но и 2022 соберёт. Я использую 2019, потому что она последняя с XP-шным тулсетом, и не нужно тащить огромный Windows 10 SDK. Шестёркой эти сорцы тоже должны собираться, т.к. 2003 не сильно от неё далеко по стандартам и нововведениям.


Отправлено [CFR] B@N@N 31-05-2022 в 20:14:

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


Отправлено Ku2zoff 31-05-2022 в 20:45:

[CFR] B@N@N наверное, стандартный способ - мессага TE_PLAYERATTACHMENT. ЕМНИП, так к игроку крепится флаг в TFC. Нужно, чтобы названия костей совпадали.

Добавлено 01-06-2022 в 03:45:

Стоп, нет. pev->aiment, это должен быть индекс игрока у шапки. Не знаю, сработает ли. Сорцев TFC нету, может быть там хак в клиентке написан на манер p_ моделей.


Отправлено Decay 01-06-2022 в 02:40:

Vadiman
https://github.com/SamVanheer/halflife-updated
Попробуй это. Недавно заметил на бескрайних просторах гитхаба. Вроде как исправлено множество багов, поддержка 64 пушек и всякое такое. Но я сам не проверял


Отправлено Napoleon321 01-06-2022 в 06:40:

Цитата:
Decay писал:
Vadiman
https://github.com/SamVanheer/halflife-updated
Попробуй это. Недавно заметил на бескрайних просторах гитхаба. Вроде как исправлено множество багов, поддержка 64 пушек и всякое такое. Но я сам не проверял


Good one, however it has too many things reworked and rewritten. SoloKiller is playing a dangerous game. This SDK is just one update of the Steam SDK to be obsolete...

__________________
FlatLine Arena | Tutorials

If you don't like something, MOD it!


Отправлено Vadiman 01-06-2022 в 17:03:

Цитата:
Ku2zoff писал:
У тебя каких-то хедеров нету, скорее всего. Точно чистый SDK для 2005 студии, что XaeroX адаптировал? Полный лог компиляции приложи в аттач, кстати.

В ветке Half-Life SDK, здесь, самый первый тред: "Half-Life SDK 2.3 Source Code
Исходный код, совместимый с Visual Studio новее шестой (например, 2005)"

Я сейчас попробую вручную исправить, чего ему надо. Если не прокатит, то выложу логи и все подробности


Отправлено SNMetamorph 01-06-2022 в 22:29:

Цитата:
[CFR] B@N@N писал:
А вот какой такой вопросик возник: как можно прикрепить к модели игрока другие модели. Ну например шапочки, крылышки, рюкзаки, неактивное оружие за спину, причём чтобы оно было в определенном месте на теле находилось?

Видел плагины для CS 1.6 которые это делают. Не помню, к сожалению, как назывались

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


Отправлено Ku2zoff 02-06-2022 в 10:18:

Цитата:
SNMetamorph писал:
Не помню, к сожалению, как назывались

Вот плагин, цепляющий шапки на игроков. Через pev->aiment, как я и предположил. То есть, создаём энтитю-шапку, делаем ей MOVETYPE_FOLLOW и в pev->aiment указываем индекс целевого игрока.
Этот подход жрёт эдикты и сетевой трафик. Лучше цеплять эту фигню на клиенте на манер p_ моделей. Я так делал с неактивным оружием.


Отправлено [CFR] B@N@N 02-06-2022 в 17:29:

Цитата:
SNMetamorph писал:
Видел плагины для CS 1.6 которые это делают. Не помню, к сожалению, как назывались


Не не видел.
Подскажи по подробнее

Добавлено 02-06-2022 в 20:29:

Цитата:
Ku2zoff писал:
Вот плагин, цепляющий шапки на игроков. Через pev->aiment, как я и предположил. То есть, создаём энтитю-шапку, делаем ей MOVETYPE_FOLLOW и в pev->aiment указываем индекс целевого игрока.
Этот подход жрёт эдикты и сетевой трафик. Лучше цеплять эту фигню на клиенте на манер p_ моделей. Я так делал с неактивным оружием.


Да мне лучше всего на клиенте. Зачем же плагин если src есть в доступе?
А вот как ты этот делал? Там есть пример кода чтобы глянуть? Мне пока ещё сложно осуществлять какие-то оригинальные решения)


Отправлено Ku2zoff 02-06-2022 в 19:39:

C++ Source Code:
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
}

Вместо if (pplayer->weaponmodel) берёшь, например, if (pplayer->iuser4), эта переменная свободна. В зависимости от значения этой переменной выбираешь модель прямо тут в коде:
C++ Source Code:
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 );


Добавлено 03-06-2022 в 02:39:

Можно кастомную модель прекэшить на сервере и слать индекс на клиент:
C++ Source Code:
PRECACHE_MODEL("models/krutaya_shapka.mdl");
m_pPlayer->pev->iuser4 = MAKE_STRING("models/krutaya_shapka.mdl");
Тогда на клиенте вот такой код:
C++ Source Code:
model_t *custom_model = IEngineStudio.GetModelByIndex( pplayer->iuser4 );


Отправлено [CFR] B@N@N 03-06-2022 в 00:42:

Спасибо. Я попытаюсь это сделать, выглядит не сложно.
А как найти к какой кости крепить её? Оружие же к руке крепится а шапку надо на голову чтобы


Отправлено Ku2zoff 03-06-2022 в 01:31:

[CFR] B@N@N возьми скелет от модели игрока и прикрепи к кости головы. Функция StudioMergeBones смержит кости моделей, и шапка будет на голове.


Отправлено илья2 05-06-2022 в 12:09:

в общем заметил я в халфе такой идиотский баг: когда урон у лома повышаешь до 100 и выше то с некоторым шансом при атаке ломом на монстров игра просто вылетает. есть ли возможность исправить это идиотство от valve ? или лучше делать свой лом с другим кодом ?

Добавлено 05-06-2022 в 15:09:

мда проверил и на 50 тоже вылет происходит как вообще лом делали ?

__________________
илья


Отправлено Дядя Миша 05-06-2022 в 13:28:

илья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 05-06-2022 в 13:56:

Цитата:
Дядя Миша писал:
илья2 уверен что дело в ломе, а не в твоём коде? Возьми чистый SDK и проверь там.

нет все дело в ломе на оригинале то же самое происходит

Добавлено 05-06-2022 в 16:42:

так ну я в принципе сделал свой лом. Но вопрос все еще не дает покоя

Добавлено 05-06-2022 в 16:45:

может попробовать новые обновленные сдк ?

Добавлено 05-06-2022 в 16:55:

на новом сдк этого бага нету проверил

Добавлено 05-06-2022 в 16:56:

ладно не важно буду своим ломом пользоваться

__________________
илья


Отправлено [CFR] B@N@N 07-06-2022 в 11:05:

илья2
Проверил твои слова: на моём ломе всё в порядке. Ищи проблему у себя!


Отправлено Дядя Миша 07-06-2022 в 11:44:

Вот да, я помню еще в 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'


Отправлено KiQ 07-06-2022 в 14:14:

Цитата:
Ku2zoff писал:
cl_entity_t saveent = *m_pCurrentEntity;
*m_pCurrentEntity = saveent;


напомните, зачем оно в данном случае? Для вызова студио-функций, которые без агрументов?

__________________
-Brain is dead-


Отправлено Дядя Миша 07-06-2022 в 16:20:

Это типа бэкапа, сохраняет все переменные, а потом восстанавливает их обратно.

__________________
My Projects: download page

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

Цитата:

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


Отправлено KiQ 07-06-2022 в 16:39:

Дядя Миша ну, я имею в виду в приведённом Кутузовом коде оно для чего?

__________________
-Brain is dead-


Отправлено Ku2zoff 07-06-2022 в 17:09:

KiQ я точно не знаю, но предположу. p_модель - не самостоятельная энтить, а смёрженная хаком с моделькой игрока другая модель. Сначала вызывается StudioRenderModel для модельки игрока, затем для приаттаченного к нему оружия. Затем нужно вернуть m_pCurrentEntity в исходное состояние, чтобы, например m_pStudioHeader был корректный - от игрока, а не от пушки. Закомменти эти строки и у игрока сломаются анимации.


Отправлено Дядя Миша 07-06-2022 в 19:02:

Цитата:
KiQ писал:
ну, я имею в виду в приведённом Кутузовом коде оно для чего?

Цитата:
Ku2zoff писал:
я точно не знаю, но предположу

Цитата:
Дядя Миша писал:
Это типа бэкапа, сохраняет все переменные, а потом восстанавливает их обратно.


Для пушек нет никакой самостоятельной энтити, поэтому перезаписываются поля игрока. Вообще так делать нежелательно, это хак по сути.
Это такое чисто сишное. В крестах, если бы cl_entity_t имела виртуальные функции и не имела пользовательского копиконструктора, неизвестно чем бы дело окончилось.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ku2zoff 07-06-2022 в 19:41:

Цитата:
Дядя Миша писал:
Для пушек нет никакой самостоятельной энтити, поэтому перезаписываются поля игрока.

Ну, собсно, я правильно подумал. А как вообще в таком разе функциклируют пушки? Я никогда не вдавался в подробности. Есть у нас некий класс, описывающий за оружие. Его энтить - это ведь только то, что лежит на полу? Остальное - CBasePlayerItem->CBasePlayerWeapon. И тут интересно: у игрока есть массив, в котором хранятся итемы, и есть байты pev->weapons. Байты определяют наличие оружия вообще, а в массиве хранятся данные оружия: патроны, состояние и проч. В зависимости от того, что выбрано как m_pActiveItem, уже и происходят остальные действия, так?
По идее, можно избавиться от хака, используя невидимую и несолидную энтить p_weapon, и приаттачивая её к ориджину игрока, например. А уж на клиенте делать её видимой и мёржить кости. Слишком много телодвижений, когда через хак можно не только аттачить модель, но и анимировать её, менять боди и скины, и даже рисовать маззлфлеши на её аттачментах, а не на аттачментах игрока (так в DoD сделано). При желании, можно гильзы спавнить из определённой точки на p_модели. В КСС или КС: ГО даже магазин при перезарядке от третьего лица вынимается, смёрживаясь в определённый момент с левой рукой игрока.


Отправлено илья2 07-06-2022 в 20:13:

можно ли превысить громкость звука для EMIT_SOUND с 1.0 до 1.1 хотябы
если ставлю 1.1 игра вылетает с ошибкой SV_StartSound: volume = значение

Добавлено 07-06-2022 в 23:13:

хотя я тут посмотрел этой команды SV_StartSound вобще в сдк нету значит его можно повысить только в движке а сорцев на движок нету значит нельзя по идее

__________________
илья


Отправлено Дядя Миша 07-06-2022 в 20:17:

Цитата:
Ku2zoff писал:
Байты определяют наличие оружия вообще, а в массиве хранятся данные оружия: патроны, состояние и проч. В зависимости от того, что выбрано как m_pActiveItem, уже и происходят остальные действия, так?

Поздравляю, ты наконец-то заинтерисовался как всё устроено

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ku2zoff 07-06-2022 в 21:21:

Цитата:
илья2 писал:
значит нельзя по идее

SV_StartSound в движке. Из движка торчит экспорт pfnEmitSound, что обёрнут в EMIT_SOUND_DYN2->EMIT_SOUND/EMIT_SOUND_DYN, вызываемые из кода энтить. Этот экспорт уже и вызывает SV_StartSound. Задрать значение громкости выше 1 нельзя. Но можно увеличить громкость звука в самом файле, и играть его в обычных случаях на половинной громкости, а в особых - на полной.


Отправлено илья2 08-06-2022 в 07:57:

Цитата:
Ku2zoff писал:
SV_StartSound в движке. Из движка торчит экспорт pfnEmitSound, что обёрнут в EMIT_SOUND_DYN2->EMIT_SOUND/EMIT_SOUND_DYN, Но можно увеличить громкость звука в самом файле, и играть его в обычных случаях на половинной громкости, а в особых - на полной.

да я как раз так и сделал громкость звука увеличил и получились крутые басы под музыку

__________________
илья


Отправлено Crystallize 08-06-2022 в 12:13:

Тут где-то Дядя Миша просвящал что VTF и DDS это одно и то же. Ну компрессия наверное одинаковая, просто есть один нюанс. Когда я доставал пачку DDSок из того же Скайрима, то в них плейнтекстом был записан формат компрессии и я мог не открывая каждую, просто через FolderFindText отделить прозрачные от непрозрачных. С VTF так уже не получится.

Вообще не помешал бы способ как работать с VTF не затрагивая все его хитрые флаги и прочие альфа-каналы.


Отправлено hgrunt_2020 11-06-2022 в 10:45:

Сделал себе блюр по тутору Plut'а, блюр работает, но при этом в консоли вместо текста отрисовываются фрагменты экрана!

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Дядя Миша 11-06-2022 в 13:58:

Тот тутор для Халфы был.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FreeSlave 11-06-2022 в 17:38:

Заметил, что в халфе если заряжать вторичную атаку тау-пушки совсем недолго (на единицу боеприпаса), то часто выходит два луча и появляется две декали. На клиенте в WeaponIdle два раза зовется StartFire.

__________________
I'm on github
I'm on opendesktop.org


Отправлено Vadiman 16-06-2022 в 19:32:

Парни, пытаюсь сделать для зомби поправку одну. Нужна помощь)
Помню в кино (классика от Ромеро) если зомби в тело выпустить очередь, им было вообще по барабану, только отшатнутся и все. А вот выстрел в голову уже смертельный. Я разделил урон по хитгруппам - в голову урон идет как есть, а вот по остальным областям я сделал деление урона на 20. Проблема в том, что при низком либо нулевом уроне не рисуется кровавый брызг, а при огромном уроне аж жирно все. Вот хотелось бы как раз жирные кровавые всплески, но при этом маленький либо нулевой урон (только у зомбака, не для всех)


Отправлено Ku2zoff 17-06-2022 в 08:19:

Vadiman сделай для зомби собственную функцию TraceAttack. В ней и отрегулируешь количество крови в зависимости от урона.

Добавлено 17-06-2022 в 15:19:

Товарищи форумчане, можете подкинуть несколько идей по дизайну HUD'а без прозрачности? Например, как в Overturn:

https://media.moddb.com/images/downloads/1/110/109061/dm_caution0008.png


Отправлено FreeSlave 17-06-2022 в 15:53:

Цитата:
Vadiman писал:
Проблема в том, что при низком либо нулевом уроне не рисуется кровавый брызг

Количество крови зависит от урона, который передается из TraceAttack в SpawnBlood, а оттуда (преобразуясь в целое число) в UTIL_BloodDrips. В твоём случае, видимо, в SpawnBlood передается урон меньше 1. Дробная часть отбрасывается и остается 0, и кровь не появляется.

__________________
I'm on github
I'm on opendesktop.org


Отправлено Ryudo1 20-06-2022 в 23:43:

Всем привет.
Создавая очередную карту для ксго, столкнулся с ограничением брашей 1024. Хочу сделать карту с которой много объектов с func_breakable



Возможно ли обойти это ограничение ?

Может кастомные компиляторы карт есть?


Отправлено Ku2zoff 21-06-2022 в 08:32:

Ryudo1 замени брашевые брейкабли пропами.


Отправлено Crystallize 21-06-2022 в 08:52:

Ku2zoff Разве эти лимиты не для того чтобы дисциплинировать маппера и на самом деле там можно поставить несколько тыс. после перекомпиляции? Или там какая-то битовая маска как обычно?


Отправлено Ku2zoff 21-06-2022 в 09:27:

Crystallize я не знаю, просто предположил. В голдсорсе MAX_MAP_MODELS 256, то есть, кое-что можно делать пропами в формате MDL, чтобы этот лимит не превысить. В один MDL-проп можно засунуть много разных субмоделей, это способ уложиться в лимит MAX_MODELS 512. Думаю, что в сорсе так же, только значения выше. К тому же, делать брейкабли моделями в сорсе удобнее: на них будут оставаться декали, и коллизия должна быть. Насколько мне известно, единственная проблема - отсутствие гибсов у таких объектов, в отличие от брашевых пропов. Нужно ставить рядом env_shooter, который будет выплёвывать модели.


Отправлено [CFR] B@N@N 21-06-2022 в 09:52:

А как можно поставить анимацию на оружие от вида с 3го лица. Хочу сделать чтобы у минигана вращались стволы при стрельбе как в свенкоопе. И ещё как задать смену боли для таких моделей. Например, револьвер от первого лица имеет лцу в мультиплеере, как тоже самое сделать на модели от 3 лица?


Отправлено Ku2zoff 21-06-2022 в 10:02:

[CFR] B@N@N ну посмотри в официальном HLSDK. Там есть хак для p_модели ac из tfc. По такому же принципу применишь смену бодей.


Отправлено [CFR] B@N@N 21-06-2022 в 10:12:

А где смотреть? В каком cpp? Или по каким ключевым словам в поиске?


Отправлено Дядя Миша 21-06-2022 в 10:23:

Цитата:
Crystallize писал:
Или там какая-то битовая маска как обычно?

У дельты в пакете максимум 256 энтить за кадр. В ксаше кажется 2048 я сделал.

Добавлено 21-06-2022 в 13:23:

Ну да
C++ Source Code:
#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'


Отправлено Ku2zoff 21-06-2022 в 14:18:

Дядя Миша дык мы про кс: ходить. В сорсе пакет должен быть больше.


Отправлено Дядя Миша 21-06-2022 в 14:24:

В Сорсе помоему без ограничений.

Добавлено 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'


Отправлено Ku2zoff 21-06-2022 в 14:37:

Цитата:
[CFR] B@N@N писал:
А где смотреть? В каком cpp? Или по каким ключевым словам в поиске?

Вот подумай: ты задаёшь вопрос про p_модели. Это уже ограничивает область поиска файлом StudioModelRenderer.cpp, поскольку весь код, обрабатывающий студиомодели, находится в этом файле. Даже не так. Функцией CStudioModelRenderer::StudioDrawPlayer, потому что p_модели добавляются к игроку с помощью хака именно там. Допустим, про второе ты мог не знать, и не пробовал искать по строке weaponmodel на клиенте. Но догадаться про cpp файл нетрудно. Дальше сложнее. Я упомянул TFC и оружие ac. Можно поискать по cpp файлу дефайны типа #ifdef _TFC. А легче, зная что оружие Assault Cannon имеет модели v_tfac.mdl и p_mini.mdl/p_mini2.mdl, забить в поиске по клиентке p_mini, и сразу найти код.
Ну а дальше сам думай, как его адаптировать к своему минигану. Советую взять модель p_mini.mdl и нацепить на её кости свой миниган. Анимации у модели хорошие.

Добавлено 21-06-2022 в 21:37:

Цитата:
Дядя Миша писал:
в 2007-м сорсе как раз те же самые 2048 эдиктов. Совпадает с максимально доступным их кол-вом.

Это как? В голдсорсе можно через параметр командной строки или параметр liblist.gam установить значение до 4096 эдиктов, а в сорсе 2007 доступно только 2048?


Отправлено Дядя Миша 21-06-2022 в 14:45:

Не знаю, там константа на сетевой пакет, максимум 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'


Отправлено Ku2zoff 21-06-2022 в 15:08:

Цитата:
Дядя Миша писал:
там константа на сетевой пакет

Ох сорян, это я перепутал максимально доступное число и максимальное число, передаваемое по сети.
Цитата:
Дядя Миша писал:
это довольно редкая ситуация

Это смотря как мапать. Ты же не просто так задрал лимиты в ксаше повыше. Зависит от дизайна. Первоквака и второквака годно выглядят со своими лимитами. И халфа иногда. А вот когда дело касается любительских модов - тут ой.


Отправлено Дядя Миша 21-06-2022 в 16:21:

Цитата:
Ku2zoff писал:
Ох сорян, это я перепутал максимально доступное число и максимальное число, передаваемое по сети.

Да многие путают, оно же очень редко вылазит.

Добавлено 21-06-2022 в 19:21:

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

Я их задирал только когда лично мне чего-то нехватало.
Задранные лимиты провоцировали увеличение потребления памяти.
Там же не было динамических массивов.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 21-06-2022 в 17:09:

Цитата:
Дядя Миша писал:
Задранные лимиты провоцировали увеличение потребления памяти.

И насколько же оно увеличивалось? На пару мегабайт?

__________________
Мой мод на Xash


Отправлено Ku2zoff 21-06-2022 в 23:04:

Цитата:
Aynekko писал:
На пару мегабайт

Пара мегабайт в контексте сетевого протокола - космическое значение. Когда был в обиходе ISDN, кодеры ваивале буквально за каждый байт. Отсюда возникло изобретение пердиктинга, чтобы сервер пердиктил предсказывал действия клиента. Подозреваю, поэтому в оригинальной кваке лимит на игроков в мультиплеере по дефолту - 4 штуки. Это сейчас, в эпоху оптоволокна можно ничего не оптимизировать, нарот схавает. Целевой нарот, у которого оптоволокно.


Отправлено Crystallize 22-06-2022 в 01:28:

Ku2zoff я думаю он про оперативку просто.


Отправлено [CFR] B@N@N 22-06-2022 в 01:46:

Ku2zoff
Странно, но в моей версии исходников, Half-Life SDK 2.3 нет ни намёка на код, о котором ты упоминал выше


Отправлено Дядя Миша 22-06-2022 в 05:30:

Цитата:
Ku2zoff писал:
Отсюда возникло изобретение пердиктинга, чтобы сервер пердиктил предсказывал действия клиента


Предиктинг никак не экономит траффик, скорее даже наоборот, для его правильной работы нужно больше данных. Предиктинг - это чтоб лаги не ощущались во время сетевой игры. Очень некомфортно играть, когда персонаж реагирует на все действия с запозданием.

Цитата:
Ku2zoff писал:
одозреваю, поэтому в оригинальной кваке лимит на игроков в мультиплеере по дефолту - 4 штуки.

Вобще-то восемь. Четыре - это в коперативе.

__________________
My Projects: download page

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

Цитата:

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


Отправлено илья2 22-06-2022 в 08:13:

Как сделать лазерную мину ловушку? Удалил у мины функцию контакта с монстрами и игроком. Это вот это Beambreakthink. А дальше что то не получается.

Добавлено 22-06-2022 в 11:13:

ладно не важно забудьте я все сделал сам

__________________
илья


Отправлено Ku2zoff 22-06-2022 в 08:39:

Цитата:
[CFR] B@N@N писал:
в моей версии исходников, Half-Life SDK 2.3

Где вы их откапываете, такие исходники? Почти 10 лет на гитхабе доступен официальный репозиторий от Valve, из которого можно собрать клиентскую длл для TFC при должном старании. Вы же продолжаете качать сорцы 2003 года, а потом удивляться чему-то. Сорцы ксашмода, кстати, тоже не содержат этих вставок из TFC, потому что они написаны на основе старого SDK.


Отправлено [CFR] B@N@N 22-06-2022 в 11:32:

Цитата:
Ku2zoff писал:
Где вы их откапываете, такие исходники? Почти 10 лет на гитхабе доступен официальный репозиторий от Valve, из которого можно собрать клиентскую длл для TFC при должном старании. Вы же продолжаете качать сорцы 2003 года, а потом удивляться чему-то. Сорцы ксашмода, кстати, тоже не содержат этих вставок из TFC, потому что они написаны на основе старого SDK.


В этих ваших интернетах, где ж ещё? Конкретно свои я с moddb.com качал


Отправлено hgrunt_2020 29-06-2022 в 08:43:

Контроллер костей и вью модели

Вчера у меня возникла необходимость управлять стрелкой на пневматическом ружье на вью модели, инклюднул animation.h, в деплое InitBoneControllers(); прописал ну и в остальных функциях прописал SetBoneController( 0, m_iAir * 4.5 ); , и так ничего и не произошло! Все скомпилировалось без ошибок и проблем, а результата 0. Может кто подскажет, как можно управлять костями на вью модели?

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Дядя Миша 29-06-2022 в 12:11:

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ku2zoff 29-06-2022 в 12:24:

Обнаружил баг в стим-версии халфы. Если изменить шрифты в файле TrackerScheme.res, то для латинских символов они меняются. А для кириллических используется какой-то жёстко захардкоденный говношрифт, которому насрать на схему. То-то мне всегда было неприятно смотреть на русские тексты в меню игр на голдсорсе. Кто-нибудь в курсе, лечится ли это, репортили ли вальве на гитхабе об этом?

https://i.imgur.com/suTdDC3.jpg


Отправлено Дядя Миша 29-06-2022 в 12:44:

Ku2zoff у тебя часом не ломаная пиратка? Может это пираты заговнохардкодили?

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ku2zoff 29-06-2022 в 13:48:

Дядя Миша да не. Оф. стимовская версия. Похоже, какой-то косяк в коде gameui, потому что vgui2 без проблем выводит разные шрифты для кириллицы в менюшках и скоребоарде в кс. Ну, по крайней мере раньше выводил. Я проверю, а то вдруг и в кс сейчас изломано всё.
Я разобрался с масштабированием спрайтового шрифта и решил его заменить на какой-нибудь декоративный. Заодно и в главном меню тоже поменять. Добрался до меню - а тут такой сюрприз. Ну не страшно. Главное, чтобы внутриигровые надписи были на русском. Меню - дело второе, халферы его наизусть знают, даже не зная английского.


Отправлено FiEctro 29-06-2022 в 13:57:

Ku2zoff
Может просто используется единый шрифт у которого не прописаны кирилические символы?


Отправлено Ku2zoff 29-06-2022 в 14:50:

FiEctro это как "не прописаны"?


Отправлено Дядя Миша 29-06-2022 в 15:11:

Цитата:
Ku2zoff писал:
Я разобрался с масштабированием спрайтового шрифта

Да нельзя масштабировать шрифты
Ну вот нельзя и всё тут.

__________________
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 30-06-2022 в 02:51:

По поводу контроллеров костей на вью модели

На клиенте в ev_common.срр добавил

C++ Source Code:
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
}

и в ev_hldm.cpp сделал функцию для обновления, + добавил EV_BoneControl в функцию выстрела. Все работает, но если начинается или заканчивается какая либо анимация на вью модели то стрелка прыгает

Добавлено 30-06-2022 в 05:51:

https://youtu.be/LhmGrc-xqn0
вот видео с демонстрацией
и что ж делать с этой стрелкой, что б не скакала?

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Ku2zoff 30-06-2022 в 04:45:

hgrunt_2020 значит, между анимациями контроллер сбрасывается в дефолтное положение. ent->curstate.controller[0] нужно задавать значение не в функции выстрела, а каждый кадр. Или в HUD_Frame, или в StudioDrawModel/StudioSetupBones.

Добавлено 30-06-2022 в 11:45:

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


Отправлено hgrunt_2020 30-06-2022 в 05:00:

Ku2zoff я делаю на стандартном ксаше, простой хлсдк

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Дядя Миша 30-06-2022 в 06:14:

Я же сказал - выдели переменную в самом классе игрока, а не посылай событие

__________________
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 30-06-2022 в 07:21:

А чому б не сделать всё это добро скином? Мелкие детали обычно так на модели делают


Отправлено Ku2zoff 30-06-2022 в 09:44:

[CFR] B@N@N скином не получится плавно двигать стрелку. И придётся рисовать много кадров.


Отправлено Crystallize 05-07-2022 в 07:10:

Зачем в сорсе парсер LightEnvironment завернут в проверку if (!gSkyLight) который перед этим нуллится? Разве это не приведет к тому что только одно из солнц будет распарсено? Или это что-то нужное когда у тебя несколько тредов?


Отправлено Ku2zoff 05-07-2022 в 07:13:

Цитата:
Crystallize писал:
Разве это не приведет к тому что только одно из солнц будет распарсено?

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


Отправлено Дядя Миша 05-07-2022 в 07:59:

Цитата:
Crystallize писал:
Или это что-то нужное когда у тебя несколько тредов?

Парсинг всегда работает в одном треде.
Солнца нельзя привязывать к разным коробкам, их освещение суммируется.
Да и как вы себе представление разграничивание параллельных источников по зонам? Единственное, что приходит на ум - привязка к конкретному сектору, но это не слишком удобно, как компилятор должен действовать, если в очередной небесной коробке вообще не окажется солнца?

Во втором и третьем квейке симулировали свет от неба при помощи светотекстур и PTPFF. Но там проблематично установить кастомную нормаль, потому что она берётся из плоскости светотекстуры.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 05-07-2022 в 09:12:

Цитата:
Дядя Миша писал:
Да и как вы себе представление разграничивание параллельных источников по зонам?

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

Так мне всё-таки любопытно зачем нужна та проверка.


Отправлено Ku2zoff 05-07-2022 в 11:14:

Цитата:
Дядя Миша писал:
Солнца нельзя привязывать к разным коробкам, их освещение суммируется.

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

Добавлено 05-07-2022 в 18:14:

Стоп. Солнца же можно выключать как и лампочки. Лайтстилей правда маловато, но можно что-то придумать.


Отправлено FiEctro 05-07-2022 в 11:50:

Можно спотлайты вытянутые использовать. В хл2 вроде так и выкручивались.

Цитата:
Дядя Миша писал:
Парсинг всегда работает в одном треде.
Солнца нельзя привязывать к разным коробкам, их освещение суммируется.
Да и как вы себе представление разграничивание параллельных источников по зонам? Единственное, что приходит на ум - привязка к конкретному сектору, но это не слишком удобно, как компилятор должен действовать, если в очередной небесной коробке вообще не окажется солнца?

Во втором и третьем квейке симулировали свет от неба при помощи светотекстур и PTPFF. Но там проблематично установить кастомную нормаль, потому что она берётся из плоскости светотекстуры.


Парсить имя текстуры? Типа sky1, sky2 и т.д.


Отправлено Дядя Миша 05-07-2022 в 12:59:

Цитата:
Ku2zoff писал:
А как в старых компиляторах, где можно ставить много солнц? Там тоже освещение суммируется?

Ну естественно. Точечный источник солнца сам по себе не излучает. И текстура неба тоже не излучает. Там наоборот устроено. Делается трасса от люкселя полигона по нормали солнца. Если упёрлась в текстуру SKY - значит на люксель попал солнечный свет. Впрочем это везде так устроено, но в халфе хотя бы более надёжно. В сталкере например трасса уходит в пустоту на достаточно большое расстояние. Т.е. если сделать очень гигантскую пещеру, ей теоретически может залить солнечным светом

Цитата:
FiEctro писал:
Парсить имя текстуры? Типа sky1, sky2 и т.д.

Текстура sky с солнцем никак не связана. Это надо как минимум прописать имя текстуры в настройки самого солнца и потом проверять имя, куда попала трасса. Ну наверное так можно, но скорость рассчётов упадёт процентов на 10-15.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 16-07-2022 в 10:45:

В чем отличие m_pCurrentEntity->curstate.angles от m_pCurrentEntity->angles (на клиенте)?

__________________
Мой мод на Xash


Отправлено Дядя Миша 16-07-2022 в 11:18:

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено a1batross 16-07-2022 в 16:31:

Aynekko в curstate всё что прилетело с сервера сейчас, в prevstate на кадр раньше. Как сказал Дядя Миша выше, менять их бессмысленно.

Просто angles например может вычисляться интерполируя углы из prev и cur. Для игроков там конечно всё сложнее, но в общем случае понять можно.

__________________
Xash3D FWGS форк


Отправлено SNMetamorph 16-07-2022 в 23:59:

Цитата:
a1batross писал:
в curstate всё что прилетело с сервера сейчас, в prevstate на кадр раньше.

А на кадр ли? Или это просто инфа с прошлого апдейта с сервера? А ведь оно явно реже чем каждый кадр происходит, и собственно зависит от updaterate

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


Отправлено Aynekko 17-07-2022 в 07:43:

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

__________________
Мой мод на Xash


Отправлено Aynekko 31-07-2022 в 07:52:

Еще раз вопрос по клипнодам и солидности поверхностей. А то я запутался. Вот есть стандартный куб. Он генерирует клипноды. Получается, 6 клипнод?
А можно ли сделать чтобы была только 1 клипнода, то есть одна поверхность солидная, а остальные проходишь насквозь?
Не совсем понимаю, как это работает.
Хочется оптимизировать карту в плане клипнод, и на карте слишком много брашей с лишними стенками.

__________________
Мой мод на Xash


Отправлено Дядя Миша 31-07-2022 в 09:05:

Цитата:
Aynekko писал:
Хочется оптимизировать карту в плане клипнод

Не имеет смысла, там же 32-х битный лимит.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 04-08-2022 в 08:38:

При каком условии освещение у модели берется от солнца вместо пола? Случайно обнаружил, что в замкнутой комнате если покрасить потолок null'ом, то освещение будет от солнца.

__________________
Мой мод на Xash


Отправлено Дядя Миша 04-08-2022 в 09:41:

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'


Отправлено Aynekko 04-08-2022 в 10:11:

А почему модель может быть черной? Лайт_енв на карте нет, и я точно стою на освещенном браше. Буквально стоя на соседнем браше игрок освещен нормально. Значит освещение берется не с пола, а вообще непонятно откуда...

__________________
Мой мод на Xash


Отправлено Дядя Миша 04-08-2022 в 11:57:

Так если 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'


Отправлено Aynekko 04-08-2022 в 13:10:

Одного тогда понять не могу, как так получается, если комната закрытая, ская там нет, потолок не null текстурой и не энтитя. Проходит насквозь получается. А где эта проверка находится, не подскажешь?

__________________
Мой мод на Xash


Отправлено Дядя Миша 04-08-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'


Отправлено Aynekko 04-08-2022 в 13:34:

Да, то же самое. Пол нормально освещен, а стоя на нем, игрок и монстры черные.

__________________
Мой мод на Xash


Отправлено hgrunt_2020 05-08-2022 в 12:15:

Странности с сейвом

Создал я свою энтитю, лутбокс с патронами, но при сейве вылазит ошибка:"Can't find address: 10064860". По адресу 10064860 у меня 0001:00063860 ??_9@$BLE@AE 10064860 f i h_cycler.obj(лутбокс у меня находится в h_cycler)
И, что ещё не приятнее это то что не сейвится состояние использования

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Дядя Миша 05-08-2022 в 15:11:

Забыл прописать EXPORT своим тчинкам или тачам.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ku2zoff 05-08-2022 в 17:43:

Цитата:
hgrunt_2020 писал:
не сейвится состояние использования

Либо писать статус использования в кастомную переменную, а переменную в сейвдату, либо писать статус в один из энтварсов. У логических точечных энтить с парой-тройкой параметров можно хранить всё в pev->health, armorvalue, speed, fov и проч., если они не заюзаны в коде этой энтити.

Добавлено 06-08-2022 в 00:43:

Цитата:
Aynekko писал:
Пол нормально освещен, а стоя на нем, игрок и монстры черные.

Пол мировой браш, или энтитя? Обычно такое происходит, если игрок стоит на энтите.


Отправлено Luciferchik 05-08-2022 в 18:57:

для чего предназначена функция 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.


Отправлено Aynekko 05-08-2022 в 20:02:

Цитата:
Ku2zoff писал:
Обычно такое происходит, если игрок стоит на энтите.

В том весь и прикол, что браш самый обычный, а рядом пол продолжается в func_wall и на нем как раз все нормально (ну потому что r_lighting_extended в ксаше )

__________________
Мой мод на Xash


Отправлено Дядя Миша 05-08-2022 в 20:20:

Цитата:
Luciferchik писал:
для чего предназначена функция DECLARE_CLASS и какую суть несет в себе?

Это не функция, это макрос. Костыль для сериализации, которую С++ изкаропки не может.

__________________
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 06-08-2022 в 00:23:

Дядя Миша у лутбокса нет ни тчинка ни тача

Добавлено 06-08-2022 в 03:23:

Дядя Миша

C++ Source Code:
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
};

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено hgrunt_2020 06-08-2022 в 06:43:

Дядя Миша я понял в чем дело
в спавне я удалил строчку SetUse(Use); и все стало нормально

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Ku2zoff 06-08-2022 в 07:26:

Цитата:
hgrunt_2020 писал:
SetUse(Use)

Так делать нельзя. Как и SetTouch(Touch) или SetThink(Think), или SetBlocked(Blocked), поскольку Use, Touch, Think и Blocked - виртуальные функции CBaseEntity, из них вызываются каллбэки:
C++ Source Code:
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 ); };

Функции каллбэкам присваиваются здесь:
C++ Source Code:
#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)

Сделано это с той целью, чтобы тчинков, тачей, юзов и блокедов у энтити было много, и юзер мог их переключать.

Добавлено 06-08-2022 в 14:26:

SetUse и всё остальное имеет смысл, если твоя функция юза называется нестандартно: CLootbox::LootboxUse. Заметь, блокедов с нестандартными названиями нету, потому что свойства платформ, дверей и прочего почти не меняются, и ответ на блокировку у них всегда один - дамаг для заблокировавшей энтити. А тчинки, тачи и юзы меняются у многих энтить в процессе их работы.


Отправлено hgrunt_2020 06-08-2022 в 07:52:

Ku2zoff я не знал, потому и вышла такая ошибка

Добавлено 06-08-2022 в 10:52:

Ku2zoff теперь всё прекрасно работает
https://youtu.be/QzwoF5j5LYg

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Aynekko 06-08-2022 в 19:11:

Цитата:
Aynekko писал:
А почему модель может быть черной? Лайт_енв на карте нет, и я точно стою на освещенном браше. Буквально стоя на соседнем браше игрок освещен нормально. Значит освещение берется не с пола, а вообще непонятно откуда...

Цитата:
Aynekko писал:
браш самый обычный, а рядом пол продолжается в func_wall и на нем как раз все нормально

Я разобрался в чем была проблема. Скейл текстуры. Он был равен 0.25. И стоя на нем, модели были черные. Сделал 0.5, все нормально.
Я никогда не перестану удивляться ксашу/голде.

__________________
Мой мод на Xash


Отправлено hgrunt_2020 06-08-2022 в 22:37:

Aynekko лол, проблема была всего лишь в скейле!? Удивительно.

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Дядя Миша 07-08-2022 в 07:00:

Скейл текстуры или лайтмапы?

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 07-08-2022 в 08:02:

Текстуры. Была наложена на браш со скейлом 0.25.

__________________
Мой мод на Xash


Отправлено Дядя Миша 07-08-2022 в 08:23:

Тогда может у лайтмапы наоборот уменьшить разрешение?

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 07-08-2022 в 08:48:

Через zhlt_texturestep?

__________________
Мой мод на Xash


Отправлено Дядя Миша 07-08-2022 в 09:05:

Ну да. Во всяком случае стоит попробовать.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 07-08-2022 в 09:24:

Попробовал, фейс тупо черный, если значение step больше 16. Ставил 8, все норм, но модели все еще черные. Скейл текстуры на фейсе 0.25.

__________________
Мой мод на Xash


Отправлено Decay 07-08-2022 в 09:59:

А какой размер текстуры? Вдруг это влияет.


Отправлено Aynekko 07-08-2022 в 10:02:

Цитата:
Decay писал:
А какой размер текстуры? Вдруг это влияет.

256x256

__________________
Мой мод на Xash


Отправлено Дядя Миша 07-08-2022 в 12:47:

Цитата:
Aynekko писал:
Попробовал, фейс тупо черный, если значение step больше 16

ну там скорее всего какая-то тень падает и при низком разрешении покрывает весь полигон.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Luciferchik 10-08-2022 в 18:33:

В одной из тем заговорили за худ оружия и натолкнуло меня на то, что в хл слоты нельзя переключать скролом, но можно цифрами с помощью тутора от тв.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.


Отправлено Ku2zoff 11-08-2022 в 06:52:

Luciferchik в функциях CHudAmmo::UserCmd_NextWeapon и CHudAmmo::UserCmd_PrevWeapon в теле цикла for ( int loop = 0; loop <= 1; loop++ ) перед return вставь следующий код:

C++ Source Code:
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
}


Отправлено Luciferchik 11-08-2022 в 14:56:

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 11-08-2022 в 15:45:

Luciferchik чтобы засвечивать слоты, надо занулять gpActiveSel через некоторое время, а не сразу. Но пока он не занулён - стрелять нельзя, первый клик подтверждает выбор оружия, скрывая слоты. Надо написать новое поведение для слотов при hud_fastswitch: чтобы при переключении они высвечивались, и постепенно угасали, и левый клик не перехватывался. Сейчас попробую. Обычно я таким не морочусь, но раз уж залез в эту тему, то надо привести fastswitch в нормальное состояние, каким он должен быть. Чтобы оружия переключались скроллом, а нажатие на клавишу слота циклично прокручивало оружия в этом слоте, а не выбирало только первую пушку.


Отправлено Luciferchik 11-08-2022 в 15:55:

Цитата:
Ku2zoff писал:
Luciferchik чтобы засвечивать слоты, надо занулять gpActiveSel через некоторое время, а не сразу. Но пока он не занулён - стрелять нельзя, первый клик подтверждает выбор оружия, скрывая слоты. Надо написать новое поведение для слотов при hud_fastswitch: чтобы при переключении они высвечивались, и постепенно угасали, и левый клик не перехватывался. Сейчас попробую. Обычно я таким не морочусь, но раз уж залез в эту тему, то надо привести 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.


Отправлено Ku2zoff 11-08-2022 в 17:13:

Цитата:
Luciferchik писал:
неплохо было бы в туторы

В спирите от Скрамы половина этого кода есть. Короче вот:

1. Доводим фастсвитч до ума, чтобы он листал позиции в слотах. Есть в вышеназванном спирите. ammo.cpp, объявляем там новую структурку:
C++ Source Code:
WEAPON *gpLastSel;		// Last weapon menu selection
WEAPON *gpCurWeapon; // код Скрамы

Спускаемся до функции WeaponsResource :: SelectSlot, вставляем новый блок кода:
C++ Source Code:
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
}

Спускаемся до функции CHudAmmo::MsgFunc_CurWeapon, и задаём там значение нашей новой структурке:
C++ Source Code:
if ( iState == 0 )	// we're not the current weapon, so update no more
  return 1;
 
m_pWeapon = pWeapon;
gpCurWeapon = pWeapon; // код Скрамы


Всё, фастсвитч листает пушки в слоте, а не выбирает лишь самую первую.

2. Заставляем слоты отображаться некоторое время. Говнокод, чтобы было понятно, куда копать:
C++ Source Code:
WEAPON *gpLastSel;		// Last weapon menu selection
WEAPON *gpCurWeapon; // код Скрамы
float flFadeTime; // время видимости слотов

CHudAmmo::Think, вставить этот кусочек туда:
C++ Source Code:
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)

WeaponsResource :: SelectSlot:
C++ Source Code:
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
}


Отправлено Luciferchik 11-08-2022 в 19:24:

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.


Отправлено hgrunt_2020 12-08-2022 в 07:03:

Мне Ku2zoff подсказал что можно под глянуть ограничение пушек в кс 1.6, я ограничение сделал, но как теперь сделать так что бы при юзе пушки которая лежит на полу она попадала в инвентарь, а та что занимала этот же слот легла на её же место

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Ku2zoff 12-08-2022 в 08:29:

hgrunt_2020 у тебя команда Drop работает? Ну то есть, если выкинуть пушку, то подбирается другая? Поищи в player.cpp вот этот комментарий:

C++ Source Code:
// 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.

Там код выкидывания веапонбокса. Убери return для сингла, чтобы можно было выбрасывать пушки в одиночной игре. После вызова pWeaponBox->PackWeapon( pWeapon ); назначай веапонбоксу модель оружия, которое выкидывается, например так:
C++ Source Code:
1
switch (pWeapon->m_iId)
2
{
3
case WEAPON_CROWBAR:
4
    SET_MODEL(ENT(pWeaponBox->pev), "models/w_crowbar.mdl");
5
  break;
6
}

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

Как только это наладишь, чтобы пушки нормально заменялись при выбрасывании, убери функцию Touch у пушек и сделай им Use. В юзе делай проверку на наличие у игрока пушки такого же класса, и если она есть, вызывай DropPlayerItem с аргументом, где будет название выкидываемой пушки:
C++ Source Code:
pPlayer->DropPlayerItem("weapon_crowbar");

Чтобы случайно не менять пушки, ставь им флаг FCAP_CONTINUOUS_USE и считай время в функции юза. Если игрок жмёт кнопку например секунду, пушка сменяется. Когда дублирующей пушки нет, то можно время не считать, и подбирать пушку сразу.
Наверное, напишу себе такой код, потому что планирую делать глок и беретту, дигл и питон. Может быть ещё что-то. Чтобы не забивать слоты, а заставить игрока делать выбор. Например, глок с глушителем для стелс-прохождения.


Отправлено hgrunt_2020 12-08-2022 в 09:43:

Ku2zoff она работает но криво, некоторые пушки не подбирает а подбирает только их патроны

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Ku2zoff 12-08-2022 в 10:09:

У меня работает. Хоть и жуткий говнокод, написанный на коленке.


Отправлено hgrunt_2020 12-08-2022 в 11:19:

Ku2zoff вот дроп что у мен

C++ Source Code:
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-&gt<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-&gt<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-&gt<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
}


Добавлено 12-08-2022 в 14:05:

Ku2zoff а не, эт мой косяк, в AddPlayerItem у меня
C++ Source Code:
if (pItem->iSlot() > 1 && pItem->iSlot() <= 4)

а в DropPlayerItem
C++ Source Code:
if (pWeapon->iSlot() <= 2)

оно не обнуляется, вот и не берётся новая пушка

Добавлено 12-08-2022 в 14:19:

Ku2zoff странно, то он нормально подбирает то черти что
https://youtu.be/lYGF6EmvLbA

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Ku2zoff 12-08-2022 в 11:55:

Цитата:
hgrunt_2020 писал:
то он нормально подбирает то черти что

Оружие положенное на карту маппером != оружие, выброшенное игроком. Игрок выбрасывает веапонбоксы, в которых внутри содержатся пушки. Соответственно, нужно либо делать проверку для массива внутри веапонбокса, либо выбрасывать энтити пушек, а не веапонбоксы.


Отправлено hgrunt_2020 12-08-2022 в 12:48:

Ku2zoff а что по поводу того что не отображаются иконки вентиля и сайги?

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено hgrunt_2020 13-08-2022 в 13:43:

Ku2zoff Я наконец то починил ограничение и дроп)
https://youtu.be/3wHnsDy9W-g

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Luciferchik 13-08-2022 в 21:23:

Как правильно перемещать спрайты по экрану, чтобы при смене расширения они оставались на задуманном месте?

__________________
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.


Отправлено hgrunt_2020 13-08-2022 в 23:14:

Luciferchik перемещать их относительно screenheight и screenwidth, глянь расположение спрайтов в хл 1, именно их x и y в коде

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Ku2zoff 14-08-2022 в 01:33:

Цитата:
Luciferchik писал:
чтобы при смене расширения они оставались на задуманном месте?

XRES(число) и YRES(число), вроде бы.


Отправлено hgrunt_2020 14-08-2022 в 05:25:

Почему не на весь экран?

Почему текстура не отрисовывается на весь экран, при чем не важно спрайт это или тга(скрин https://yapx.ru/v/TUrMT ), вот код отрисовки

C++ Source Code:
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
}


Добавлено 14-08-2022 в 08:25:

починил методом подбора, ScreenWidth и ScreenHeight умножил на 1.5525 и встало на свои места

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Luciferchik 14-08-2022 в 10:06:

Цитата:
hgrunt_2020 писал:
Luciferchik перемещать их относительно screenheight и screenwidth, глянь расположение спрайтов в хл 1, именно их x и y в коде

благодарю, как раз по screenheight и screenwidth получилось что надо

__________________
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.


Отправлено Дядя Миша 15-08-2022 в 16:44:

А вы как определяете где говнокод, а где нет?
Вот как раз таинственный множитель на 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'


Отправлено Aynekko 19-08-2022 в 06:32:

Почему из-за большого браша func_water ксаш вылетает? Размер браша 6000х7500 юнитов, высота 300 юнитов. 6000х7000, как ни странно, работает. Скейл текстуры воды сверху - 14.0, остальные фейсы покрыты NULL. Что это за лимит опять, можно ли его расширить?
Создавать несколько func_water не предлагайте - видны швы

__________________
Мой мод на Xash


Отправлено Дядя Миша 19-08-2022 в 07:51:

Потому что 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'


Отправлено Aynekko 19-08-2022 в 08:16:

А что тогда можно сделать в этом случае? "Расширить лимиты" так сказать. Надо бы браш большого размера.

Добавлено 19-08-2022 в 11:16:

Поднял SUBDIVIDE_SIZE с 64 до 128, это помогло О.о

__________________
Мой мод на Xash


Отправлено Дядя Миша 19-08-2022 в 08:46:

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

__________________
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 22-08-2022 в 04:17:

Cделал я себе ограничение пушек в инвентаре, всё хорошо, до сейв рестора, после сейв рестора вновь можно подобрать пушку в слот, и в слоту уже не 1 пушка а 2, чего быть не должно.
Для ограничения я завёл себе

C++ Source Code:
BOOL				Slots[5];

добавление Slots в сейв не помогло.
Да бы работало ограничение в CBasePlayer::AddPlayerItem в начале
C++ Source Code:
1
if (pItem->iSlot() > 1 && pItem->iSlot() <= 4)
2
{
3
  if (Slots[pItem->iSlot()])
4
    return FALSE;
5
  Slots[pItem->iSlot()] = true;
6
}

и в CBasePlayer::DropPlayerItem в условии if ( pWeapon )
C++ Source Code:
if (pWeapon->iSlot() > 0 && pWeapon->iSlot() <= 4)
  Slots[pWeapon->iSlot()] = false;

Так и как же сделать так, что бы после сейв рестора ещё одна пушка не подбиралась

Добавлено 22-08-2022 в 07:17:

А, прошу прощения, я сам всё починил, просто я в сейв записал
DEFINE_FIELD(CBasePlayer, Slots, FIELD_BOOLEAN)
а надо было
DEFINE_ARRAY(CBasePlayer, Slots, FIELD_BOOLEAN, 5)

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено илья2 22-08-2022 в 19:49:

привет кто из кодеров может понять рендеры текстур

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

__________________
илья


Отправлено Ku2zoff 22-08-2022 в 21:18:

илья2 https://twhl.info/wiki/page/Tutoria...nder_Properties
Значения тебе без надобности, формулы, вычисляющие итоговую прозрачность и цвет всё равно внутри движка.

Добавлено 23-08-2022 в 04:18:

Если совсем интересно, то src - исходная текстура, a - альфа, c - цвет, dest - скорее всего результат первого перемножения.


Отправлено Дядя Миша 23-08-2022 в 05:44:

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'


Отправлено илья2 23-08-2022 в 06:51:

ясно полезная инфа пригодиться

__________________
илья


Отправлено SNMetamorph 23-08-2022 в 18:20:

Цитата:
Дядя Миша писал:
На десктопах есть большая проблема к сожалению. Там невозможно прочитать цвет экранного пикселя из шейдера - ошибка совмещённого доступа.

Поэтому скринкопии приходится делать? А точно ли нельзя? Может в OpenGL 4.x появилась фича такая, я мельком что-то подобное видел.

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


Отправлено Дядя Миша 23-08-2022 в 20:51:

Цитата:
SNMetamorph писал:
Поэтому скринкопии приходится делать?

Да.

Цитата:
SNMetamorph писал:
А точно ли нельзя?

Это ограничение архитектуры десктопных GPU.

__________________
My Projects: download page

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

Цитата:

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


Отправлено илья2 04-09-2022 в 11:42:

возможно ли поставить оружие на нулевой слот ? пробовал ставить вылет и все.

__________________
илья


Отправлено Дядя Миша 04-09-2022 в 12:08:

ну раз вылет - значит нельзя

__________________
My Projects: download page

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

Цитата:

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


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

илья2 слотов можно сделать сколь угодно много, были бы клавиши. Просто подвинь всё оружие на один слот, чтобы первый выполнял функции нулевого.


Отправлено илья2 04-09-2022 в 13:30:

я перепутал не слоты а на нулевое количество WEAPON_NONE сорян.

__________________
илья


Отправлено Ku2zoff 04-09-2022 в 14:49:

илья2 ну вот нафига? pev->weapons передаёт битовую маску, а не десятичное число с номером оружия. WEAPON_NONE и так по-умолчанию имеется у игрока. Вылет происходит на этапе какой-то проверки на нулёвость, которых тонна на сервере и на клиенте. А зачем вообще занимать нулевой Id? Их же 29 или 30 штук доступно.


Отправлено Дядя Миша 04-09-2022 в 15:08:

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'


Отправлено илья2 04-09-2022 в 15:15:

Цитата:
Ku2zoff писал:
илья2 А зачем вообще занимать нулевой Id? Их же 29 или 30 штук доступно.
ну как зачем например кулаки поставить с самого начала круто же будет

__________________
илья


Отправлено Дядя Миша 04-09-2022 в 15:19:

Если оружие невозможно убрать - ему не нужен никакой идентификатор.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ku2zoff 04-09-2022 в 15:21:

илья2 номер Id не влияет на слот, занимаемый оружием. Вот так у монтировки:

C++ Source Code:
p->iSlot = 0;
p->iPosition = 0;
p->iId = WEAPON_CROWBAR; // 1

Id у неё 1, а слот нулевой. Пусть у тебя будут кулаки, скажем с Id 16 сразу после снарков. А ты задай им слот 0 и позицию 0. А монтировке слот 0 и позицию 1. Тогда кулаки будут впереди монтировки в механизме переключения оружия.


Отправлено илья2 04-09-2022 в 15:24:

Цитата:
Дядя Миша писал:
WEAPON_NONE - это 0. Сам подумай, можно ли на ноль что-то вешать.
ладно ты прав нельзя. C чего я подумал что это хорошая идея

Добавлено 04-09-2022 в 18:24:

можно поставить оружие в спавн самого игрока с самого начала будет в полне норм

__________________
илья


Отправлено Ku2zoff 04-09-2022 в 15:27:

Цитата:
илья2 писал:
можно поставить оружие в спавн самого игрока

game_player_equip и всего делов. Только это мультиплеерная энтить, ей надо сейв/рестор массива даваемых игроку предметов по-хорошему прикрутить.


Отправлено илья2 05-09-2022 в 21:57:

как убрать оружие с инвентаря игрока ? есть ли код для этого ?

__________________
илья


Отправлено Ku2zoff 06-09-2022 в 02:37:

Энтитя player_weaponstrip. Только она убирает ВСЕ оружия и опционально костюм. Но можно дописать ей функционал выборочного убирания оружия.


Отправлено илья2 06-09-2022 в 08:34:

Цитата:
Ku2zoff писал:
Но можно дописать ей функционал выборочного убирания оружия.
и что надо дописать ?

__________________
илья


Отправлено Ku2zoff 06-09-2022 в 08:50:

Цитата:
илья2 писал:
и что надо дописать ?

Цитата:
Ku2zoff писал:
функционал выборочного убирания оружия

Дам подсказку. CBasePlayer::RemoveAllItems.
C++ Source Code:
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;

В цикле while надо воткнуть проверку оружия по m_iId или по класснейму. Если пушка из массива не совпадает с целевой, continue, то есть продолжаем перебор массива. Если совпадает, то делаем Drop. Для удобства надо подавать в эту функцию в кач-ве аргумента не только булевую переменную на выброс костюма, но и const char с класснеймом целевого предмета. Типа так:
C++ Source Code:
CBasePlayer *pPlayer;
pPlayer->RemoveAllItems("weapon_crowbar");

Есть ещё функция CBasePlayer::RemovePlayerItem, но она принимает в кач-ве аргумента указатель на класс.


Отправлено Дядя Миша 06-09-2022 в 08:56:

Помнится для корректного выбрасывания пушки в P2 я довольно много кода дописывал. Там по нормальному не сделаешь.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ku2zoff 06-09-2022 в 09:20:

Дядя Миша для выбрасывания да. А для удаления уже всё есть в RemovePlayerItem.


Отправлено илья2 06-09-2022 в 11:11:

а если поставить несуществующую позицию и слот. оружие удалиться из худа ?
например так:

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

__________________
илья


Отправлено Ku2zoff 06-09-2022 в 11:23:

Цитата:
илья2 писал:
а если поставить несуществующую позицию и слот. оружие удалиться из худа ?

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

Добавлено 06-09-2022 в 18:23:

Цитата:
илья2 писал:
как убрать оружие с инвентаря игрока ?

Цитата:
илья2 писал:
а если поставить несуществующую позицию и слот. оружие удалиться из худа ?

Ты уж определись, убрать оружие из инвентаря (то есть совсем), или из худа. Не забудь сделать bind "клавиша" "weapon_kulaki", чтобы можно было на них переключиться.


Отправлено илья2 06-09-2022 в 12:01:

а зачем переключаться если лучше на ствол переключится без костюма а потом с костюмом кулаки будут

Добавлено 06-09-2022 в 15:01:

да и еще. Кулаки с костюмом они намного лучше чем без него. Там урон по мощнее. Эти кулаки они так чтобы хоть какое нибуть оружие при старте было это лучше чем ничего

__________________
илья


Отправлено Ku2zoff 06-09-2022 в 13:31:

Цитата:
илья2 писал:
Кулаки с костюмом они намного лучше чем без него. Там урон по мощнее.

Ты их отдельными оружиями сделал? А потом вам не хватает лимита в 32 пушки... Даже в стоковом хлсдк есть возможность менять боди у пушек.


Отправлено илья2 06-09-2022 в 14:50:

Цитата:
Ku2zoff писал:
А потом вам не хватает лимита в 32 пушки

я по секрету скажу лимит я давно уже снял кое кто помог мне в этом жаль что не срослась у нас с ним дружба

__________________
илья


Отправлено Aynekko 10-09-2022 в 17:46:

Проблема - env_model не крутится через local avelocity. Либо я что-то не так делаю.

C++ Source Code:
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
}

Speed равен 1000. В консоль выводится (0 1000 0). То есть вектор в порядке.
Энтитя - env_model. Обращаюсь я к ней через поинтер из другой энтити, как уже ясно. Если бы энтити не было, был бы вылет. Что я упускаю? Не крутится по оси моделька и все тут.

__________________
Мой мод на Xash


Отправлено Дядя Миша 10-09-2022 в 18:44:

Ну а как она будет крутиться, если по дефолту ей задан MOVETYPE_NONE?

C++ Source Code:
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'


Отправлено Aynekko 10-09-2022 в 19:08:

В общем смена мувтайпа на ходу тоже не помогла. В итоге я поставил func_rotating с галкой start on (галка обязательна). И только тогда мой код нормально работает и я могу управлять скоростью вращения через SetLocalAvelocity.

__________________
Мой мод на Xash


Отправлено Дядя Миша 10-09-2022 в 19:53:

Цитата:
Aynekko писал:
В общем смена мувтайпа на ходу тоже не помогла

Ну значит так менял. Мувтайп прекрасно меняется на горячую.

Добавлено 10-09-2022 в 22:53:

Ты какой мувтайп-то ставил вообще?

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 10-09-2022 в 21:06:

Цитата:
Дядя Миша писал:
Ты какой мувтайп-то ставил вообще?

movetype_push, подсмотрел у func_rotating. Но дело в том, что ротатинг тоже не крутился, пока я его не включил. Я смотрел у него спаун и похоже что movetype_push у него стоит с момента спауна. В общем не знаю почему, но авелосити извне я могу ему поменять только когда он включен. Не юзом со значением, а именно через setlocalavelocity.

__________________
Мой мод на Xash


Отправлено Дядя Миша 11-09-2022 в 07:00:

Цитата:
Aynekko писал:
movetype_push



MOVETYPE_NOCLIP ставь.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 11-09-2022 в 07:20:

Цитата:
Дядя Миша писал:
MOVETYPE_NOCLIP ставь.

Действительно работает, спасибо.
А фейспалмить вот не нужно, откуда я вообще мог знать такие особенности движка? Почему я могу вращать только определенный мувтайп по оси, а не все, что мне захочется? Странно как-то.
А пуш я взял, потому что он стоит в func_rotating и он работает. Логично? Думаю да

__________________
Мой мод на Xash


Отправлено Дядя Миша 11-09-2022 в 07:32:

Цитата:
Aynekko писал:
Почему я могу вращать только определенный мувтайп по оси, а не все, что мне захочется?

Ну а ты логически подумай, если бы можно было вращать любой мувтайп, для чего бы их тогда наплодили целую кучу?

Цитата:
Aynekko писал:
А пуш я взял, потому что он стоит в func_rotating и он работает. Логично?

https://www.hlfx.ru/forum/showthrea...=&threadid=3064

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 11-09-2022 в 07:44:

Цитата:
Дядя Миша писал:
Ну а ты логически подумай, если бы можно было вращать любой мувтайп

Я предполагал, что одно ходит, другое летает, третье не имеет гравитации, вот такое вот. Вращение по оси для меня воспринималось как просто визуальный эффект, уж не подумал бы, что такие вещи на это влияют.
Цитата:
Дядя Миша писал:
https://www.hlfx.ru/forum/showthrea...=&threadid=3064

Интересно, спасибо!

__________________
Мой мод на Xash


Отправлено Дядя Миша 11-09-2022 в 07:58:

Цитата:
Aynekko писал:
Вращение по оси для меня воспринималось как просто визуальный эффект

Но ведь вентилятор толкает своими лопастями. Какой же это визуальный эффект?

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ku2zoff 11-09-2022 в 07:59:

Цитата:
Aynekko писал:
А пуш я взял

Зачем MOVETYPE_PUSH для точечной энтити?
Цитата:
Дядя Миша писал:
MOVETYPE_NOCLIP ставь.

На неё не будет действовать гравитация в таком случае. Вдруг понадобиться, чтобы env_model падали на пол, если расставлены выше пола? Хотя, навряд ли.


Отправлено Aynekko 11-09-2022 в 08:49:

Цитата:
Дядя Миша писал:
Но ведь вентилятор толкает своими лопастями. Какой же это визуальный эффект?

Короче говоря, я думал, что setlocalavelocity будет просто вращать angles объекта, и все. И уж мысль про мувтайп у меня даже не подумала проскочить.

__________________
Мой мод на Xash


Отправлено Ku2zoff 11-09-2022 в 10:36:

Цитата:
Aynekko писал:
будет просто вращать angles объекта, и все.

А в чём разница между вращать просто и вращать непросто? Если задаёшь avelocity на сервере, то вращается и физическая модель объекта, и по сети передаётся вращение на клиент для визуальной модели. Если хочешь вращать только для визуального эффекта, вращать надо на клиенте. Тогда, по идее, и мувтайп без разницы какой.


Отправлено Luciferchik 23-09-2022 в 15:25:

как менять боди на оружии в реальном времени, например есть у меня моделька оружия с двумя видами рук, но руки меняются только по консольной команде и при смени оружия туда назад

__________________
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 23-09-2022 в 17:29:

Luciferchik обычная халфа или ксашмод? В обычной халфе налету не сменишь ни боди, ни скин. Только при воспроизведении очередной анимации либо через SendWeaponAnim, либо через PLAYBACK_EVENT. Не знаю, как там в актуальном ксашмоде, по-моему в нём Xash Weapon System отсутствует, надо тащить из Spirit 1.9 две мессаги: на бодю и на скин. И в идеале отключать пердиктинг, чтобы не мешал.

Добавлено 24-09-2022 в 00:29:

Вообще, вот, применяй этот тутор.


Отправлено Luciferchik 23-09-2022 в 19:13:

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.


Отправлено Ku2zoff 24-09-2022 в 11:02:

Цитата:
Luciferchik писал:
значит на любую смену боди нужно делать анимацию

Ну по идее да, потому что сразу оно не обновляется. Если хочется налету менять, делай это в ItemPostFrame.


Отправлено Luciferchik 24-09-2022 в 12:11:

Цитата:
Ku2zoff писал:
Ну по идее да, потому что сразу оно не обновляется. Если хочется налету менять, делай это в ItemPostFrame.

благодарю за ответ, просто хотелось попробовать что-то типа а-ля Сталкера с модами оружия либо как в моде под Гмод

__________________
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.


Отправлено Aynekko 28-09-2022 в 11:30:

На что влияет предиктинг оружия в халфе? Это только визуальное отображение на клиенте (анимация без задержек) или же оказывается влияние на сервер (клиент сообщает о уже сделанном выстреле, попадании и т.д.)?

__________________
Мой мод на Xash


Отправлено Дядя Миша 28-09-2022 в 13:36:

Цитата:
Aynekko писал:
клиент сообщает о уже сделанном выстреле, попадании и т.д.

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 28-09-2022 в 13:41:

Цитата:
Дядя Миша писал:
Если бы клиент занимался подобными вещами, то все бы читерили напропалую.

Да, я так и подумал. Почему я засомневался - много раз видел читы, где игрок стреляет каждый кадр (обойма пистолета тратится за секунду, лом шинкует как бензопила). Думал, что это клиент шлет факт выстрела на сервер. Иначе как еще это понять? Ведь в коде сервера в PrimaryAttack выставляется тайминг следующей атаки.

__________________
Мой мод на Xash


Отправлено Дядя Миша 28-09-2022 в 14:21:

Цитата:
Aynekko писал:
Ведь в коде сервера в PrimaryAttack выставляется тайминг следующей атаки.

Но клиентское время таки идёт на клиенте.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 02-10-2022 в 14:47:

Вот еще такой вопрос. На сервере мы можем делать тряску экрана

C++ Source Code:
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


Отправлено Ku2zoff 02-10-2022 в 15:53:

Aynekko дёрни клиентскую часть мессаги из движка в дллку и вызывай её сразу на клиенте. Сорцы ксаша открыты. pfnCalcShake, pfnApplyShake, и саму мессагу CL_ParseScreenShake. Делов минут на 10. Ну, точнее, вызывать надо не мессагу, а заполнять структурку screen_shake_t.

C++ Source Code:
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
}

Это то, что принимает мессага с сервера. Вот и сделай помимо этого ещё какой-нибудь CL_MakeScreenShake(float amp, float dur, float freq, float time). Я так заставлял экран трястись от ударов альт. атакой разводного ключа прямо в эвенте.


Отправлено Aynekko 02-10-2022 в 18:50:

Понял, уже сделал

Добавлено 02-10-2022 в 21:50:

Столкнулся с такой штукой касаемо baseline. В общем создаю я спрайт на сервере через SpriteCreate. После его создания я задаю ему свойства, рендермод и прозрачность.
И вот незадача - на клиенте мне рапортует, что у него baseline.rendermode и baseline.renderamt равны нулю. И только после сейврестора уже показывает нужные числа.
Вот и собственно вопрос, а как мне обновить baseline после того, как я задал свойства?

__________________
Мой мод на Xash


Отправлено Дядя Миша 03-10-2022 в 09:02:

Вазелин сохраняется только для объектов, которые спавнятся с уровня, для объектов, создаваемых во время игры он неактуален и не нужен.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ku2zoff 03-10-2022 в 13:39:

Aynekko а зачем ты на клиенте берёшь свойства из вазелина? Надо брать из курстейта.


Отправлено Дядя Миша 03-10-2022 в 13:54:

Цитата:
Aynekko писал:
И только после сейврестора уже показывает нужные числа.

Ну естественно. Вазелин для новой карты создаётся для тех энтить, что на ней расположены. А для рестора - для всех энтить, сохранённых в сейв. Туда вообще лезть не следует, не читать не писать. Единственное исключение - ворлдспаун.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 03-10-2022 в 14:30:

Цитата:
Ku2zoff писал:
Aynekko а зачем ты на клиенте берёшь свойства из вазелина? Надо брать из курстейта.

Я постоянно меняю curstate на клиенте, а в baseline хранится оригинальное число, которое я использую, как отправную точку. Впрочем, выход я уже нашел.

__________________
Мой мод на Xash


Отправлено Ku2zoff 03-10-2022 в 14:37:

Цитата:
Aynekko писал:
Я постоянно меняю curstate на клиенте, а в baseline хранится оригинальное число, которое я использую, как отправную точку.

Как вариант можно использовать для хранения исходных значений пользовательскую структурку. А вообще для чего тебе это? Удобней управлять значениями на сервере, потому что в классе энтити можно завести 100500 переменных для хранения исходных значений.


Отправлено Aynekko 03-10-2022 в 15:21:

Цитата:
Ku2zoff писал:
вообще для чего тебе это?

Плавное исчезание энтити на расстоянии для оптимизации, ну и чтоб красиво было. На сервере - значит попрощаться с плавностью в мультиплеере

__________________
Мой мод на Xash


Отправлено Дядя Миша 03-10-2022 в 15:51:

Цитата:
Aynekko писал:
Я постоянно меняю curstate на клиенте

curstate - только для чтения. Менять его нельзя ни в коем случае.
Впрочем все три стейта - baseline, curstate, prevstate нельзя менять.

Цитата:
Aynekko писал:
а в baseline хранится оригинальное число, которое я использую, как отправную точку

Это никакая не отправная точка. Удивительно, что оно у тебя вообще работает.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 03-10-2022 в 16:18:

Цитата:
Дядя Миша писал:
curstate - только для чтения. Менять его нельзя ни в коем случае.

Почему нельзя? Я так понял он каждый раз с сервера приходит все равно. Я его прям на входе ловлю и пишу туда свое. Все работает

Добавлено 03-10-2022 в 19:18:

Цитата:
Дядя Миша писал:
Это никакая не отправная точка.

Я же говорю, я ее просто так использую. Ну, главное работает.

__________________
Мой мод на Xash


Отправлено Дядя Миша 03-10-2022 в 16:28:

Цитата:
Aynekko писал:
Я так понял он каждый раз с сервера приходит все равно

В мультике он далеко не каждый кадр приходит с сервера. Да и вообще, потом не удивляйся, если начнётся что-то странное. Автор XDM тоже занимался подобными вещами, в результате его мод работал всё хуже и хуже.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 03-10-2022 в 16:33:

Ну я тестирую, экспериментирую. Конечно в случае чего переделаю. Я тестил на пинге 100 (фейковом), никаких проблем не обнаружил пока что.

__________________
Мой мод на Xash


Отправлено Ku2zoff 07-10-2022 в 13:35:

Цитата:
Aynekko писал:
На сервере - значит попрощаться с плавностью в мультиплеере

Должно быть решение на уровне рендерера, не затрагивающее энтварсы.

Добавлено 07-10-2022 в 20:35:

Есть идея. Пометь энтить каким-нибудь флагом, и запрети для таких энтить передачу pev->renderamt по сети:
C++ Source Code:
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;

Так, на всякий случай. А оригинальное значение renderamt замени на кастомный keyvalue и передавай свободным энтварсом, например iuser1.


Отправлено Aynekko 08-10-2022 в 12:10:

Цитата:
Дядя Миша писал:
curstate - только для чтения. Менять его нельзя ни в коем случае.

Тем временем в CL_FxBlend():
C++ Source Code:
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;

Цитата:
Ku2zoff писал:
передавай свободным энтварсом, например iuser1.

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

__________________
Мой мод на Xash


Отправлено Дядя Миша 08-10-2022 в 13:44:

Цитата:
Aynekko писал:
Тем временем в CL_FxBlend():

Хак от Вальвы. Еще и не timebased.

__________________
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 12-10-2022 в 12:52:

Вернёмся к моему старому вопросу!

Цитата:
Ku2zoff писал:
значит, между анимациями контроллер сбрасывается в дефолтное положение. ent->curstate.controller[0] нужно задавать значение не в функции выстрела, а каждый кадр. Или в HUD_Frame, или в StudioDrawModel/StudioSetupBones.

Ну посылать переменную я способен, а работать с HUD_Frame/StudioDrawModel/StudioSetupBones не умею. Что, как, зачем, и почему?

Добавлено 12-10-2022 в 13:53:

так, я смог это сделать но ничего не дало, как сбрасывалось так и сбрасывается

Добавлено 12-10-2022 в 13:54:

C++ Source Code:
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
}


Добавлено 12-10-2022 в 14:46:

при этом curstate.controller[0] имеет заданное ему значение и не поднимается плавно до него

Добавлено 12-10-2022 в 15:20:

Я починил баг! Один товарищ написал мне следующее:
Цитата:

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

Я изучил код связанный с костями и увидел что там идёт расчет с curstate.controller и latched.prevcontroller, который у меня всегда был равен 0, потому стрелка и прыгала до 0

Добавлено 12-10-2022 в 15:52:

https://youtu.be/Lri8ifPxxSc вот результат

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Ku2zoff 12-10-2022 в 15:04:

Цитата:
hgrunt_2020 писал:
curstate.controller и latched.prevcontroller

Поэтому надо было сразу глядеть StudioSetupBones, а следом StudioCalcBoneAdj. Там как раз эта интерполяция делается. Понятно, что для вьюмодельки нету latched.prevcontroller, у неё нет никакой информации из предыдущего кадра. Поэтому нельзя сделать интерполяцию между анимациями. Да и не нужно, стрёмно будет выглядеть, надо по-хитрому высчитывать тайминги. Ну нафиг такой геморрой.


Отправлено Дядя Миша 12-10-2022 в 18:29:

На вьюмодельках, я вообще не припоминаю, чтобы контроллеры костей использовались.

__________________
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 12-10-2022 в 22:28:

Дядя Миша ну я первый кто их использует)

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено илья2 23-10-2022 в 18:09:

всем привет: Spawned a NULL entity! к чему относиться данная ошибка ?

__________________
илья


Отправлено hgrunt_2020 24-10-2022 в 06:25:

Дословный перевод: Заспавнена Нуллевая энтитя

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено илья2 24-10-2022 в 09:51:

да вы представьте что я придумал->XVCORE97 или в другом названии СУПЕР ПРОТОТИП-что это ?--->:прототип синтезированной сверх новой колотронной дыры
закупоренном в особом контейнере высокого назначения опасность!!!:--->особо опасное супер сверх оружие !!!.

Да писателям фантастам такое бы понравилось

__________________
илья


Отправлено hgrunt_2020 24-10-2022 в 10:16:

илья2
1. Это надо было писать в фулде
2. Рекомендую немного поизучать русский язык и грамматику в целом

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено илья2 24-10-2022 в 10:44:

Это надо было писать в фулде:да точно надо было

Добавлено 24-10-2022 в 13:44:

кому интересно сейчас я создаю новое оружие XVL989

__________________
илья


Отправлено илья2 31-10-2022 в 17:08:

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

https://imgur.com/a/OR6i8TQ

Добавлено 31-10-2022 в 16:21:

Может, есть способ изначально удалить это оружие ? с пустой обоймой ?

Добавлено 31-10-2022 в 20:08:

ну все я исправил баг

__________________
илья


Отправлено hgrunt_2020 04-11-2022 в 07:55:

Цитата:
Дядя Миша писал:
А вы как определяете где говнокод, а где нет?
Вот как раз таинственный множитель на 1.5525 это и есть говнокод.
Как вы это число получили? Ни деление 16/9 ни 16/10 его не даёт.

Ух, уже три месяца прошло, а я только щас выяснил чем является этот множитель - это переменная hud_scale. Я был удивлён, когда так получилось, а выяснил я это опытным путём. Изменяя разрешение экрана и значение hud_scale я понял что число 1.5525 и значение hud_scale совпадают при максимальном разрешении, уменьшая же разрешение я заметил что изображение увеличивается

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Aynekko 04-11-2022 в 17:09:

Как правильно посчитать кол-во активных игроков на сервере?
Я взял код из multiplayer rules:

C++ Source Code:
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
}

Запускаю сервер, показывает 0. Зашел на сервер - 1. Вышел с сервера... все равно 1.
Команда status в дедикатед сервере не показывает никаких игроков. Как правильно посчитать их тогда?

Добавлено 04-11-2022 в 20:09:

В общем залез я в движок и посмотрел, что делает сервер, когда игрок уходит. А он там обнуляет кейбуфферы.
Так что я сделал вот так:
C++ Source Code:
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
}

Делаю проверку на кейбуффер "model". Работает.
Если у вас будут другие более адекватные варианты, я только приветствую.

__________________
Мой мод на Xash


Отправлено илья2 07-11-2022 в 06:39:

извините что поднимаю старую тему опять на теже грабли:а точно ли 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 где лимит завышен ?

__________________
илья


Отправлено Дядя Миша 07-11-2022 в 08:54:

Цитата:
илья2 писал:
зарыт в движок не в карты ли

Это общий лимит как для встроенных моделей, так и для внешних.
Поэтому он может меняться от карты к карте. Если на карте много всяких дверей, пушаблей и поездов, то слотов для моделей остаётся меньше.
Поэтому уровни действительно влияют на этот лимит.

__________________
My Projects: download page

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

Цитата:

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


Отправлено илья2 08-11-2022 в 07:35:

Поэтому уровни действительно влияют на этот лимит:о все таки прав

Добавлено 08-11-2022 в 10:31:

но я до сих пор не знаю как этот лимит одолеть удаляю монстров оружия из исходников ничего не помогает как же так ?

Добавлено 08-11-2022 в 10:34:

оружие гильзы спрайты отдельными бодями в одну модель делать очень сложно

Добавлено 08-11-2022 в 10:35:

а прошлое мое исправление все таки не совсем помогло

__________________
илья


Отправлено Дядя Миша 08-11-2022 в 07:55:

Цитата:
илья2 писал:
удаляю монстров оружия из исходников ничего не помогает

Монстры и оружия в исходниках не занимают слоты моделей, до тех пор, пока ты не поставил их на уровень. Так что ты зря их удалял.
Всё зависит от конкретной карты.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 08-11-2022 в 09:48:

Так, а сам лимит увеличить никак нельзя?


Отправлено илья2 08-11-2022 в 09:54:

я в тупиковой ситуации что делать ?

Добавлено 08-11-2022 в 12:54:

лимит все портит

__________________
илья


Отправлено Aynekko 08-11-2022 в 10:12:

На ксаш перейди и забудь о лимитах.

__________________
Мой мод на Xash


Отправлено илья2 08-11-2022 в 10:25:

Все таки это все из за оружий ! Удалил я больше оружия с не охотой . Все заработало как надо. Мда. плохо, что в Half-life есть такая штука, как лимит.

Добавлено 08-11-2022 в 13:25:

Цитата:
Aynekko писал:
На ксаш перейди и забудь о лимитах.

придется переходить если хочется про лимиты забыть

__________________
илья


Отправлено Дядя Миша 08-11-2022 в 10:31:

Цитата:
FiEctro писал:
Так, а сам лимит увеличить никак нельзя?

Можно, для этого и был написан Xash3D, ну и не только для этого.

Добавлено 08-11-2022 в 13:31:

Цитата:
илья2 писал:
Удалил я больше оружия с не охотой

Надо было удалять не сами оружия а их вызов в UTIL_PrecacheOther.

__________________
My Projects: download page

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

Цитата:

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


Отправлено илья2 08-11-2022 в 11:00:

Цитата:
Дядя Миша писал:
Надо было удалять не сами оружия а их вызов в UTIL_PrecacheOther. [/B]

тогда они работать будут неправильно и все равно будут просить прекеш

Добавлено 08-11-2022 в 13:55:

7 оружий пришлось удалять это ужас

Добавлено 08-11-2022 в 13:56:

надо пробовать на ксаше запустить может и получиться лимит одолеть

Добавлено 08-11-2022 в 14:00:

а что если попробовать удалить 7 монстров если игра требует удалить 7 оружий то это должно по идее и с монстрами прокатить надо попробовать

__________________
илья


Отправлено Дядя Миша 08-11-2022 в 11:39:

Цитата:
илья2 писал:
тогда они работать будут неправильно и все равно будут просить прекеш

Ты не понял. Не в коде самих оружий удаляй, а в util.cpp или в player.cpp где там, я не помню уже. Вообщем код который отвечает за impulse 101.

__________________
My Projects: download page

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

Цитата:

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


Отправлено илья2 08-11-2022 в 12:01:

да теперь понял это в 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

__________________
илья


Отправлено Chyvachok 08-11-2022 в 12:05:

Ну с модом-солянкой по любому рано или поздно придётся переезжать, или извращаться и как Гуль все запихивать в одну модель.

А вообще не пойму откуда вообще такие анальные лимиты, почему в Думе к примеру можно делать карты на тысячи монстров что даже современный комп тормозит дико от такого кол-ва, на ГЗДум полно всяких оружейных солянок где сотни оружий, или взять тот же Russian Overkill где того оружия мало того что кучи, так еще оно все дикое и убойное что с одного выстрела половину уровня выносит не тянет комп, будешь играть в пошаговую игру, а в Халве запили Flak Cannon из Анрила и какой-то дезматч на 32 игрока уже сломается от него.


Отправлено илья2 08-11-2022 в 12:16:

А вообще не пойму откуда вообще такие анальные лимиты:да вот и мне хотелось бы понять это

Добавлено 08-11-2022 в 15:16:

ведь в халфу еще можно много всего добавлять почему тогда такие лимиты ставят ?

__________________
илья


Отправлено Дядя Миша 08-11-2022 в 12:47:

Цитата:
Chyvachok писал:
А вообще не пойму откуда вообще такие анальные лимиты, почему в Думе к примеру можно делать карты на тысячи монстров

Не в Doom, а в его форке, который появился благодаря открытым исходникам. В оригинальном дууме тоже не сделаешь карты на тысячи монстров.

__________________
My Projects: download page

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

Цитата:

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


Отправлено илья2 08-11-2022 в 15:06:

перешел я на ксаш да баг с прекешом исчез но есть другие баги со звуками с glowshell с shockrifle

Добавлено 08-11-2022 в 15:56:

мда это уже баги самого движка

Добавлено 08-11-2022 в 18:06:

А что нибудь кроме ксаш есть ? Что похоже на Халфу. Но снимет лимит, а то он весь мод мне сломал, Все придется переделывать.

__________________
илья


Отправлено Дядя Миша 08-11-2022 в 15:40:

Да, ксаш хорошо выявляет баганый код. Исправляй теперь ошибки в своём коде.

__________________
My Projects: download page

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

Цитата:

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


Отправлено илья2 08-11-2022 в 15:52:

ксаш хорошо выявляет баганый код:но у меня в халфе все нормально работает значит он не баганый хотя вам виднее

Добавлено 08-11-2022 в 18:52:

Исправляй теперь ошибки в своём коде:да у меня просто выбора нету придется исправлять

__________________
илья


Отправлено Дядя Миша 08-11-2022 в 15:55:

Цитата:
илья2 писал:
но у меня в халфе все нормально работает значит он не баганый хотя вам виднее

Обсуждалось не раз и не два. Голдсорс очень часто игнорирует явные ошибки до поры до времени. А потом всё сыплется нахрен и уже невозможно понять что произошло. Под ксашем протестировано более 2500 модов на предмет корректной работы.

Цитата:
илья2 писал:
да у меня просто выбора нету придется исправлять

Лимиты ты всё равно никак не подымашь другим способом.
Кидай сюда что не работает, я подскажу как исправить.

__________________
My Projects: download page

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

Цитата:

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


Отправлено илья2 08-11-2022 в 16:03:

Цитата:
Дядя Миша писал:
Кидай сюда что не работает, я подскажу как исправить.

ок хорошо

Добавлено 08-11-2022 в 19:03:

в оружии идет двойной повтор анимации

__________________
илья


Отправлено Дядя Миша 08-11-2022 в 16:06:

Цитата:
илья2 писал:
в оружии идет двойной повтор анимации

Ты какой ксаш качал? Мой оригинальный или FWGS?

Попробуй просто выставить в консоли 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'


Отправлено илья2 08-11-2022 в 16:32:

вот этот https://www.moddb.com/engines/xash3...4-extras-stable

Добавлено 08-11-2022 в 19:10:

прбовал старые версии там еще хуже больше багов

Добавлено 08-11-2022 в 19:11:

Цитата:
Дядя Миша писал:
Попробуй просто выставить в консоли cl_lw 0 для начала.

не не работает

Добавлено 08-11-2022 в 19:32:

вот еще то же самое

__________________
илья


Отправлено илья2 08-11-2022 в 18:04:

еще нож тоже повторяет

Добавлено 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 в 18:21:

Ты клиентские оружия делал или нет?

Добавлено 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'


Отправлено илья2 08-11-2022 в 18:55:

Цитата:
Дядя Миша писал:
Ты клиентские оружия делал или нет?

Добавлено 08-11-2022 в 21:20:

Я не могу твои архивы открыть, сохраняй в zip.

Добавлено 08-11-2022 в 21:21:

Не знаю, что ты там такое сделал, но cl_lw 0 должно было помочь в данном случае.

оружия у меня всегда в dlls находятся не знаю что ты имеешь виду под словом клиентские

Я не могу твои архивы открыть, сохраняй в zip:ок

Не знаю, что ты там такое сделал, но cl_lw 0 должно было помочь в данном случае:я же говорю не помогло

Добавлено 08-11-2022 в 21:47:

ууууууууууууу как надоели эти баги

Добавлено 08-11-2022 в 21:47:

голова кипит

Добавлено 08-11-2022 в 21:55:

если ты про клиентские пушки xash weapon system то нет я туда не заглядывал

__________________
илья


Отправлено Дядя Миша 08-11-2022 в 19:15:

Ок, тогда попробуй наоборот 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'


Отправлено илья2 08-11-2022 в 19:38:

Цитата:
Дядя Миша писал:
Ок, тогда попробуй наоборот cl_lw 1
И кстати после установки этого значения, надо движок полностью перезапускать.

я уже исправил этот баг с повтором. cl_lw не нужен я сейчас с другим багом вожусь

__________________
илья


Отправлено илья2 09-11-2022 в 09:43:

Ну что ж, продолжаем исправлять баги В этом коде я создаю молнию через пушку. Работала функция нормально. Теперь эта функция направляется на оригин карты, а не на позицию 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

__________________
илья


Отправлено Aynekko 09-11-2022 в 11:01:

Прежде, чем использовать forward вектор, нужно сначала сделать векторы через MakeVectors. Не вижу этого у тебя.

__________________
Мой мод на Xash


Отправлено илья2 09-11-2022 в 11:31:

не не получилось прописывал это

Vector v_forward;

UTIL_MakeVectors( m_pPlayer->pev->v_angle + gpGlobals->v_forward );

__________________
илья


Отправлено Aynekko 09-11-2022 в 13:21:

Цитата:
илья2 писал:
UTIL_MakeVectors( m_pPlayer->pev->v_angle + gpGlobals->v_forward );

Это неправильно. gpGlobals->v_forward это результат MakeVectors. Ты не можешь его там использовать. Ну, вернее, можешь, только зачем. Оставь только v_angle.

__________________
Мой мод на Xash


Отправлено илья2 09-11-2022 в 14:00:

да все я другой код поставил даже лучше прежнего теперь моя пушка настоящими молниями бьет

Добавлено 09-11-2022 в 16:30:

поставил эвент от гауски и изменил под молнии

Добавлено 09-11-2022 в 16:32:

этот код он создаёт такие слабенькие молнии не массивные

Добавлено 09-11-2022 в 17:00:

Что ж, хотелось бы выдохнуть с облегчением, сказать, что я все баги в своем моде исправил. Но нет, еще один остался.
эти TE_SPRITETRAIL почему то разучились летать нормально как это исправить ?

__________________
илья


Отправлено илья2 09-11-2022 в 14:00:

2 файл

__________________
илья


Отправлено Дядя Миша 09-11-2022 в 14:20:

Цитата:
илья2 писал:
m_pPlayer->pev->v_angle + gpGlobals->v_forward

То есть ты прибавляешь к углам эйлера вектор и удивляешься, почему у тебя пушка неверно стреляет?

Цитата:
илья2 писал:
TE_SPRITETRAIL почему то разучились летать нормально

Ну в гауссе они же нормально летают?

__________________
My Projects: download page

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

Цитата:

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


Отправлено илья2 09-11-2022 в 15:16:

Ну в гауссе они же нормально летают?:не в гаусе в плазменной винтовке

Добавлено 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:

гранаты то есть плазмы

__________________
илья


Отправлено Дядя Миша 09-11-2022 в 15:31:

Цитата:
илья2 писал:
в гауссе если ты про это балы то да норм летают но они в эвентах прописаны

А ты как сделал?

__________________
My Projects: download page

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

Цитата:

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


Отправлено илья2 09-11-2022 в 15:39:

Цитата:
Дядя Миша писал:
А ты как сделал?

все просто брал sporelauncher и штудировал его под plasma rifle добаляя всякие эффекты которые я знал

Добавлено 09-11-2022 в 18:35:

а эффект отлёта спрайтов делал через мессагу TE_SPRITETRAIL

Добавлено 09-11-2022 в 18:36:

добавляя скорости этой мессаги

Добавлено 09-11-2022 в 18:36:

вроде ничего сложного нет для plasmarifle

Добавлено 09-11-2022 в 18:38:

ну что дядя миша как вызывать евент TE_SPRITETRAIL через оригин гранаты ?

Добавлено 09-11-2022 в 18:39:

конечно я не все хитрости кодинга знаю поэтому и задаю такие вопросы но кое какие хитрости тесть знания у меня в памяти есть

__________________
илья


Отправлено Дядя Миша 09-11-2022 в 15:39:

Цитата:
илья2 писал:
добавляя скорости этой мессаги

Ты наверное слишком много скорости добавил. Попробуй назад открутить.

Цитата:
илья2 писал:
как вызывать евент TE_SPRITETRAIL через оригин гранаты ?

Там с флагами всё связано, надо нужные флаги прописать, но я уже не помню, какие именно. Попробуй FEV_NOTHOST заменить на FEV_GLOBAL к примеру.

__________________
My Projects: download page

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

Цитата:

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


Отправлено илья2 09-11-2022 в 19:40:

не 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

__________________
илья


Отправлено Дядя Миша 09-11-2022 в 19:43:

Частота дискретизации - 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'


Отправлено илья2 09-11-2022 в 20:06:

Цитата:
Дядя Миша писал:
Переконвертируй в 44100 хотя бы.

44100 попробуем

Добавлено 09-11-2022 в 23:06:

о заработало спасибо

__________________
илья


Отправлено Дядя Миша 09-11-2022 в 20:35:

Ну вот, за полдня всё исправил, а говорил - сто тысяч миллионов багов.

__________________
My Projects: download page

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

Цитата:

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


Отправлено илья2 09-11-2022 в 22:08:

ну теперь то да все ксашовские баги я исправил

Добавлено 10-11-2022 в 00:39:

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

Добавлено 10-11-2022 в 01:08:

ксаш еще и проигрывает сам атаку выстрела без разрешения мыши ну и как это понять ?

__________________
илья


Отправлено Дядя Миша 10-11-2022 в 07:31:

Ну значит не все баги ты исправил.
Можешь еще попробовать 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'


Отправлено илья2 10-11-2022 в 09:29:

в принципе эти баги в игре особо сильно не мешают можно и забыть про них

Добавлено 10-11-2022 в 12:22:

как сделать не убиваемого монстра ? ничего не получается ставил 100000 хп бестолку

Добавлено 10-11-2022 в 12:29:

а здоровье монстров обязательно надо через gSkillData делать ?

__________________
илья


Отправлено Next Day 10-11-2022 в 09:31:

Посмотри код Gman


Отправлено илья2 10-11-2022 в 09:47:

да кое что есть в TakeDamage

Добавлено 10-11-2022 в 12:43:

найс сработало спасибо

Добавлено 10-11-2022 в 12:47:

да как хорошо что в халф лайф есть такой не убиваемый монстр под названием gman

__________________
илья


Отправлено илья2 10-11-2022 в 22:21:

кто знает можно ли в исходниках ставить вот такие числа>1000000000000 ?

Добавлено 11-11-2022 в 01:10:

это у нас триллион

Добавлено 11-11-2022 в 01:21:

я вот знаю что в java кодинге можно ставить и трилион и квантилион квадриллион а здесь все таки к сожалению есть кое какие ограничения по цифрам миллиард и все а дальше компилятор выдает ошибку. Но можно ли это ограничение снять ?

__________________
илья


Отправлено Gandalv 11-11-2022 в 09:55:

Я вот никогда не делал моды, но не понимаю, как можно делать моды, не зная основ с++

https://metanit.com/cpp/tutorial/2.3.php
Хотя бы эту ссылку открой и читай до просветления.

__________________
Углеродные звезды с древними спутниками, которые колонизируют разумные грибы...
Газовые гиганты, на которых обитает метеорологический разум...
Миры, растянутые на мембранах, где измерения пересекаются...
Это невозможно описать нашим ограниченным языком...


Отправлено илья2 11-11-2022 в 13:38:

а вот так оказываться можно если хочется сильно

Добавлено 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:

вообще не в тему

__________________
илья


Отправлено Дядя Миша 11-11-2022 в 13:43:

илья2 а зачем тебе сто тысяч миллионов? Ты хочешь записать госдолг США?

__________________
My Projects: download page

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

Цитата:

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


Отправлено илья2 11-11-2022 в 14:43:

ну это да я по приколу такие большие цифры пишу

Добавлено 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:

ай ладно забуду ничего у меня не получиться куча ошибок компилятор выдает

__________________
илья


Отправлено XaeroX 11-11-2022 в 14:55:

Цитата:
илья2 писал:
было бы прикольно такие цифры большие ставить

Ну так ты в коде используй число 100000, а нолики потом при выводе в HUD пририсуй сколько нужно.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


Отправлено илья2 11-11-2022 в 19:22:

Цитата:
XaeroX писал:
Ну так ты в коде используй число 100000, а нолики потом при выводе в HUD пририсуй сколько нужно.

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

__________________
илья


Отправлено илья2 19-11-2022 в 13:36:

почему под TakeDamage нельзя делать radiusdamage ставлю radiusdamage монстр просто зависает и все

__________________
илья


Отправлено Vadiman 02-12-2022 в 19:15:

Доброго времени суток!
Несколько вопросов:
1) Хочу доработать зомбаков - чтобы при смерти игрока они шли его жрать (технически проигрывая victory_dance ивент). По идее это сложно реализовать, ведь нужно определять радиус в котором все monster_zombie почуят хрючево и начнут сбегаться к игроку. Я пробовал стащить аналогичную тему у буллсквида, но ничего не вышло.
2) Как сделать у оружия анимацию "первого подбирания"? Ну то есть находит игрок новое оружие и проигрывается единожды анимация, как он его осматривает или там пафосно затвор взводит, итд.
3) Как реализовать смену сабмодели рук у оружия? Слишком ли это заморочное дело? Вроде в спирите такое есть но мне весь функционал этого мода не нужен


Отправлено Shadow762 02-12-2022 в 22:18:

Цитата:
Vadiman писал:
2) Как сделать у оружия анимацию "первого подбирания"? Ну то есть находит игрок новое оружие и проигрывается единожды анимация, как он его осматривает или там пафосно затвор взводит, итд.


Не знаю как это делается у профессионалов, но я бы завел переменную в классе пушки в weapons.h например со значением FALSE по умолчанию.

Далее, в ::DEPLOY методе проверил, равна ли она FALSE, если да, то (на примере mp5) -
C++ Source Code:
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
}


таким образом при следующих деплоях проверка не пройдет и будет работать штатный деплой.

Правда после обезоруживания игрока через с Player_weaponstrip и последующего подбора пушки деплой будет штатный скорее всего.

__________________
я Z


Отправлено Luciferchik 11-12-2022 в 02:13:

Подскажите где можно почитать тутор по вгуи, помню были на хл.ру, а сайт уже давно лёг на покой

__________________
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.


Отправлено Shadow762 12-12-2022 в 04:45:

Цитата:
Luciferchik писал:
Подскажите где можно почитать тутор по вгуи, помню были на хл.ру, а сайт уже давно лёг на покой


http://ralertmod.narod.ru/sham-vgui.htm

__________________
я Z


Отправлено Luciferchik 13-12-2022 в 06:08:

Цитата:
Shadow762 писал:
http://ralertmod.narod.ru/sham-vgui.htm

Благодарю огромное

__________________
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.


Отправлено Vadiman 25-12-2022 в 18:26:

Цитата:
Shadow762 писал:
Не знаю как это делается у профессионалов, но я бы завел переменную в классе пушки в weapons.h например со значением FALSE по умолчанию.

Далее, в ::DEPLOY методе проверил, равна ли она FALSE, если да, то (на примере mp5) -
C++ Source Code:
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
}


таким образом при следующих деплоях проверка не пройдет и будет работать штатный деплой.

Правда после обезоруживания игрока через с Player_weaponstrip и последующего подбора пушки деплой будет штатный скорее всего.

Спасибо! Правда полноценно работает при load/save, а по факту сразу перебивается (скорее всего WeaponIdle), но я пытался время там регулировать и полностью его убирать, пока не знаю как решить


Отправлено Shadow762 28-12-2022 в 00:53:

Цитата:
Vadiman писал:
Спасибо! Правда полноценно работает при load/save, а по факту сразу перебивается (скорее всего WeaponIdle), но я пытался время там регулировать и полностью его убирать, пока не знаю как решить

Один добрый человек подсказал, ту самую <ПЕРЕМЕННУЮ> следует занести в сейвдату в weapons.cpp
по аналогии с дрободаном
но учти, что у большинства пух сейвдаты нет, так что создавай эти методы на подобии тех пух, что внесены в сейвдату
C++ Source Code:
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);

А что касается перебивания анимации - там же есть параметр, которые отвечает за ее длительность
подставить количество кадров деленное на FPS в анимации и все будет отлично

__________________
я Z


Отправлено Vadiman 01-01-2023 в 12:55:

Цитата:
Shadow762 писал:
Один добрый человек подсказал, ту самую <ПЕРЕМЕННУЮ> следует занести в сейвдату в weapons.cpp
по аналогии с дрободаном
но учти, что у большинства пух сейвдаты нет, так что создавай эти методы на подобии тех пух, что внесены в сейвдату
C++ Source Code:
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);

А что касается перебивания анимации - там же есть параметр, которые отвечает за ее длительность
подставить количество кадров деленное на FPS в анимации и все будет отлично


Все равно перебивается. Ладно, нафиг тогда эти анимации
Но спасибо за помощь


Отправлено [CFR] B@N@N 01-01-2023 в 16:23:

Легко же ты сдался...


Отправлено FreeSlave 17-01-2023 в 21:17:

TRACE_TEXTURE в TEXTURETYPE_PlaySound возвращает нулевой указатель при ударе монтировкой по скайбоксу. Это нормально?
Хотел проверить на удар по скаю, но вот не вышло. Или возвращение нулевого указателя и есть сигнал о том, что попали в скай?

Ради интереса даже заглянул в код XDM и нашёл там коммент

code:
pTextureName = TRACE_TEXTURE(pEntity->edict(), vecSrc, vecEnd);// BUGBUG: at some strange angles this shit fails and returns "sky"!!

Т.е. при каких-то условиях sky всё-таки может вернуться?

__________________
I'm on github
I'm on opendesktop.org


Отправлено Ku2zoff 19-01-2023 в 11:07:

FreeSlave помнится, в стародавние времена, когда я пользовался 2003-й студией и SDK 2.3, компиляция и в дебаге, и в релизе давала такой результат, что TRACE_TEXTURE возвращала что-то такое, из-за чего тип материала не определялся. Будто бы текстура не прописана в materials.txt.
https://hlfx.ru/forum/showthread.ph...4491#post144491


Отправлено Дядя Миша 19-01-2023 в 13:30:

Там сама система материалов немного бажная, вот и глючит.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FreeSlave 19-01-2023 в 18:44:

Так материалы ни при чем. Вопрос о движковой функции pfnTraceTexture и определение ская.

__________________
I'm on github
I'm on opendesktop.org


Отправлено илья2 05-02-2023 в 20:15:

как сделан основной crosshair из dmc ?

пробовал найти любые ресурсы по этому ничего не нашел

__________________
илья


Отправлено FreeSlave 06-02-2023 в 00:22:

Цитата:
илья2 писал:
как сделан основной crosshair из dmc ?

пробовал найти любые ресурсы по этому ничего не нашел


Код DMC открыт же https://github.com/ValveSoftware/ha...l/ammo.cpp#L846

Там просто рисуется знак плюса
C++ Source Code:
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


Отправлено илья2 06-02-2023 в 06:04:

а ну теперь понятно он вырисовываться как отдельный худ

Добавлено 06-02-2023 в 09:04:

все спасибо теперь этот код можно в свои исходники ставить

__________________
илья


Отправлено Luciferchik 18-02-2023 в 13:57:

Здарова всем, играл как-то с друзьями в л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.


Отправлено erfty 20-02-2023 в 19:30:

точечные энтити, выполняющие роль брашей будут нагружать карту( по сравнению с обычными брашами)? и кста , есть источник света, чтоб его не надо было компилить(энтитя источника света, свет этот не компилится а накарте отображается)?


Отправлено Skaarj 20-02-2023 в 19:34:

Какие то попытки создать вечный двигатель.
И чтоб ресурсы не ело, и чтоб мильён полигонов. Бесплатно.
Не, это так не работает.


Отправлено erfty 20-02-2023 в 19:54:

Цитата:
Skaarj писал:
Какие то попытки создать вечный двигатель.
И чтоб ресурсы не ело, и чтоб мильён полигонов. Бесплатно.
Не, это так не работает.

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


Отправлено Skaarj 20-02-2023 в 21:32:

Это вроде как плагинами делают, AmxMod и всякое такое.
Ну или ремейк карты с нуля делай. Либо по декомпилу, либо ищи исправленный декомпил, если карта популярная.


Отправлено илья2 04-03-2023 в 07:39:

как скомпилировать исходники 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 ../
но безрезультатно выдает ошибки

__________________
илья


Отправлено FreeSlave 04-03-2023 в 20:16:

илья2 ветка Decay в hlsdk-portable недоделанная (и пока вообще заброшенная). Не пытайся её использовать.

Сорцы, выложенные самим разработчиком, содержат проект под старые версии Visual Studio. Мб в студии конвертация проекта сработает.

__________________
I'm on github
I'm on opendesktop.org


Отправлено erfty 08-03-2023 в 17:25:

Цитата:
FreeSlave писал:
илья2 ветка Decay в hlsdk-portable недоделанная (и пока вообще заброшенная). Не пытайся её использовать.

Сорцы, выложенные самим разработчиком, содержат проект под старые версии Visual Studio. Мб в студии конвертация проекта сработает.

если будет время то пофикси waf в ветке invasion пж а то там вообще сломано(иль можно на телефон собрать)


Отправлено chakki.skrip 19-04-2023 в 16:13:

В последнее время я стал часто сталкиваться с некорректным воспроизведением анимации у вставленной на карту модели. Анимация воспроизводится рывками, кадры проскакивают. Но дело в том, что сама анимация зациклена и не имеет швов. Изменение значения framerate у cycler_sprite или fps в qc файле модели изменяет характер бага.
https://youtu.be/SSbUEfq-1ps

Опытным путем пришел к тому, что скорость воспроизведения анимации следует задавать в qc файле модели, а при размещении модели с анимацией на карте значение framerate должно быть равно количеству кадров анимации модели. В таком случае анимация воспроизводится практически корректно, но прыгающие кадры все еще имеют место.
Менее наглядное видео (таймкод)
https://youtu.be/5jD2j4DxZbs?t=92

Что можно предпринять, чтобы анимация всегда воспроизводилась корректно?


Отправлено ZGreen 19-04-2023 в 16:41:

А 200 фепсов не многовато для голдовой модельки? Попробуй поднимать фреймрейт от 30 и смотреть, когда начинает проявляться. Как бы там от тикрейта сервера и клиентского фпс не было зависимости еще.


Отправлено chakki.skrip 19-04-2023 в 16:50:

Пробовал множество значений framerate от 0.01 до нескольких тысяч. Также и с fps в qc. Больше всего тестов с framerate провел со значениями 1, 10, 30 и 60.
Количество кадров в самой анимации также менял. В основном 30, 60 240 кадров. Но на полное решение проблемы это не влияло.


Отправлено ZGreen 19-04-2023 в 16:59:

А у тебя точно кейфрейм верно в анимации стоит? Частая ошибка такая, что последний кадр анимации равен первому, а от этого естественно получится как-будто анимация подергивается. Ну условно, у тебя шарик должен повернуться на 360 градусов за 360 секунд, стало быть за последнюю секунду шарик должен стремиться к начальному положению, но не достигать его.

Добавлено 19-04-2023 в 23:59:

Во вьюере-то оно как себя ведет?


Отправлено chakki.skrip 19-04-2023 в 17:10:

В анимациях некоторых моделей передвигаю последний кадр за пределы таймлайна на один кадр. В этой модели я так не делал, мне было достаточно убрать интерполяцию между последним и первым кадром для плавной цикличности анимации. Во вьювере анимация отображается нормально, если значение фпс выставлено не мизерное(в противном случае вращения не будет). В Blender анимация отображается корректно.


Отправлено Aynekko 19-04-2023 в 17:17:

Этот рывок происходит в 100% случаев? Если просто стоять и смотреть на модель.

__________________
Мой мод на Xash


Отправлено chakki.skrip 19-04-2023 в 17:20:

Да, но он не слишком критичен, поскольку всего один за несколько минут.


Отправлено Дядя Миша 19-04-2023 в 17:48:

Цитата:
chakki.skrip писал:
значение framerate должно быть равно количеству кадров анимации модели

framerate - это множитель.

__________________
My Projects: download page

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

Цитата:

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


Отправлено chakki.skrip 20-04-2023 в 04:41:

Цитата:
Дядя Миша писал:
framerate - это множитель.

Но почему анимация воспроизводится некорректно?


Отправлено Дядя Миша 20-04-2023 в 06:25:

Ну его не стоит ставить менее 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'


Отправлено chakki.skrip 20-04-2023 в 06:55:

Цитата:
Дядя Миша писал:
Ну его не стоит ставить менее 0.01 или более 10.

framerate 1, fps в qc 30 - скорость вращения высокая; иногда перескакивают кадры;
framerate 1, fps в qc 10 - скорость ниже, но анимация воспроизводится уже некорректно. Кадры идут примерно так: 1 2 3 4 5 3 4 5 6 7 8 9 10 8 9 10 11...
framerate 1, fps в qc 1 - скорость приемлемая, воспроизведение анимации некорректное. Слайдшоу из случайных кадров будто: 1 4 122 124.

framerate 10, fps в qc 30, 10 - высокая скорость вращения
framerate 10, fps в qc 1 - аналогично framerate 1, fps в qc 10
framerate 10, fps в qc 0.125 - воспроизводится отрезок анимации, да и то некорректно. Если в анимации 240 кадров, то воспроизводится лишь несколько кадров, грубо говоря: 1 3 5 7 9 11 1 3 5 7 9 11 1 3 5 7 9 11

framerate 240, fps в qc 0.125 - хорошая скорость анимации и плавность, но иногда проскакивают кадры. Я имею в виду, что был порядок в плане воспроизведения кадров от 1 до 240, но в какой-то момент анимация может пропустить 100 кадров(визуально).

При framerate ниже 0.01 анимации, насколько я помню, вообще не было. А при выставлении значений выше количества кадров анимации(240, 680, 1024 и т.д.) скорость анимации не изменялась, но менялся характер воспроизведения(с пролагами).


Отправлено Дядя Миша 20-04-2023 в 08:03:

Если скорость воспроизведения выше общего фреймрейта, то кадры и будут перескакивать, естественно.
У одинарного вещественного точность не бесконечная, а в голдсорсе фреймрейт не квантизирован, в отличие, от сорса, например.

__________________
My Projects: download page

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

Цитата:

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


Отправлено erfty 21-04-2023 в 14:31:

кстати, что там с анимироваными текстурами? лимиты повышены или как голдсорсе? а можно туда вообще видева запихнуть?


Отправлено XaeroX 21-04-2023 в 14:33:

erfty
Видева без звука - как водка без пива!

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


Отправлено erfty 21-04-2023 в 14:50:

а если гифка??


Отправлено Aynekko 25-04-2023 в 12:50:

Вопрос - как определить энтитю локального игрока так, чтобы быть уверенным, что это энтитя именно мы, а не кто-то другой?
Поясню: у меня есть боты на сервере. Есть визуальный эффект на экране, который зависит от значения gEngfuncs.GetLocalPlayer()->curstate.vuser1.z. Пока я в игре - все хорошо. Но если я зайду в спектаторы (становлюсь невидимым, несолидным и т.д.) я иногда вижу этот эффект на экране, когда у какого-то бота, по всей видимости, изменилось это значение (ведь он тоже игрок).
В моем понимании выходит, что GetLocalPlayer возвращает мне локального игрока, а т.к. я в спеках и как бы "не совсем игрок", он подсовывает данные бота, ведь он локальный.

__________________
Мой мод на Xash


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

Aynekko режим спектатора - это когда подключаешься к HLTV Proxy. Прокси, по сути, такой же клиент, подключенный к серверу. А вот подключенные к прокси - уже не клиенты, а зрители-спектаторы. А "зайти в спектаторы" - перейти в режим обсервера. Игрок остаётся таким же подключенным клиентом, так же занимает слот на сервере, и к нему применяются все те же правила, что и к другим клиентам. Единственное, работает фильтр по pev->iuser1, отсекая всё ненужное и добавляя нужное. Чтобы у тебя не вылезал эффект, когда ты обсервер, добавь проверку на g_iUser1. Можно пойти дальше, и рисовать чужой эффект при наблюдении от первого лица. Через g_iUser2 можно получить индекс наблюдаемого игрока, а после его vuser1.z.

Добавлено 27-04-2023 в 18:17:

Цитата:
Aynekko писал:
он подсовывает данные бота, ведь он локальный

Нет, это твои данные. Значение меняется у тебя.


Отправлено Aynekko 27-04-2023 в 14:14:

Цитата:
Ku2zoff писал:
Чтобы у тебя не вылезал эффект, когда ты обсервер, добавь проверку на g_iUser1

Спасибо. Оказалось, дело и не в vuser. Там было еще одно условие, которое я меняю из CHudHealth::MsgFunc_Damage. Почему этот msg вызывают боты, когда я в наблюдателях, я пока не понял. Проверка на g_iUser1 помогла.

__________________
Мой мод на Xash


Отправлено Дядя Миша 27-04-2023 в 19:28:

Цитата:
Aynekko писал:
а т.к. я в спеках и как бы "не совсем игрок", он подсовывает данные бота, ведь он локальный.

В Ксаше спектаторы никогда не тестировались и их работа вообще не гарантируется.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ku2zoff 03-05-2023 в 11:58:

Цитата:
Aynekko писал:
Почему этот msg вызывают боты, когда я в наблюдателях, я пока не понял.

А не должны. MSG_ONE только для одного клиента. Которым является бот, его энтварсы используются. Ищи проблему на клиентской стороне.


Отправлено erfty 04-06-2023 в 23:32:

Можно ли в хлсдк прямо в коде создать обычный куб вместо использования модельки?Хитбокс то можно создать а я вот иемнно про визуальную часть.


Отправлено hgrunt_2020 05-06-2023 в 09:43:

erfty вопрос: зачем? Чисто теоретически можно, да, теоретически можно что угодно, а на практике чорт его знает.

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Crystallize 05-06-2023 в 10:26:

erfty ну посмотри как рисовать командами типа GL_QUAD, GL_TRIANGLE (точно не помню) главное координаты вершин и ювишки текстур корректно задать.


Отправлено Luciferchik 05-06-2023 в 13:09:

Стало интересно могут ли кнопки в хл иметь две функции, то есть на примере перезарядки если просто нажать R то играет анимация перезарядки, а если зажать то отображается менюшка или что-то другое


Отправлено erfty 05-06-2023 в 21:48:

Цитата:
Crystallize писал:
erfty ну посмотри как рисовать командами типа GL_QUAD, GL_TRIANGLE (точно не помню) главное координаты вершин и ювишки текстур корректно задать.

а если на всех рендерах хочу?


Отправлено Crystallize 06-06-2023 в 00:48:

erfty так д3д же автоматом транслирует, нет? Я не разбирался.

Добавлено 06-06-2023 в 07:48:

Цитата:
Luciferchik писал:
Стало интересно могут ли кнопки в хл иметь две функции, то есть на примере перезарядки если просто нажать R то играет анимация перезарядки, а если зажать то отображается менюшка или что-то другое

В коде отслеживается отдельно отпускание и нажимание клавиши, так что можно.


Отправлено Luciferchik 06-06-2023 в 04:58:

Цитата:
Crystallize писал:
В коде отслеживается отдельно отпускание и нажимание клавиши, так что можно.


Это оно m_pPlayer->m_afButtonPressed?
Да и ещё чтоб вызвать кастомную анимацию нужно вызвать SendWeaponAnim или есть более разумные методы?

__________________
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.


Отправлено Crystallize 06-06-2023 в 11:30:

Luciferchik на клиенте input.cpp, там KeyUp, KeyDown, CL_KeyState.


Отправлено Luciferchik 06-06-2023 в 15:21:

Цитата:
Crystallize писал:
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.


Отправлено Deadlocked1337 28-06-2023 в 15:46:

HUD

Как сделать "изогнутый" HUD, как в Crysis 2/Cyberpunk 2077/ULTRAKILL?


Отправлено Crystallize 29-06-2023 в 06:02:

Deadlocked1337 Скорее всего он рендерится в отдельный буфер и искажается шейдером.


Отправлено Дядя Миша 29-06-2023 в 06:25:

Он там наверное в 3D рендерится, но с отключённым тестом на глубину.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Deadlocked1337 06-07-2023 в 21:28:

Visual Studio

Есть ли какая-то особая версия Visual Studio, которая умеет компилировать код Paranoia 2?


Отправлено Crystallize 07-07-2023 в 05:36:

Шестерка Corporate c процессор-паком.


Отправлено Nitrw 09-07-2023 в 06:40:

Всем привет! Сделал свою карту c расширением *.bsp в hammer, теперь появился вопрос - как в неё поиграть?


Отправлено hgrunt_2020 09-07-2023 в 11:14:

Nitrw ну допустим сделал ты карту в формате BSP. Теперь вопрос: для какого движка?

__________________
И главное, Артём, помни: не ешь желтый снег!


Отправлено Crystallize 15-07-2023 в 16:13:

Цитата:
hgrunt_2020 писал:
Всем привет! Сделал свою карту c расширением *.bsp в hammer, теперь появился вопрос - как в неё поиграть?

Нужно кинуть bsp в папку valve/maps
и набрать в консоли игры:
map имякарты


Отправлено Crystallize 17-07-2023 в 09:53:

А почему при спрыгивании с каната игроку дают инерцию через AbsVelocity, а не через BaseVelocity?


Отправлено Дядя Миша 17-07-2023 в 10:27:

Кто его знает. Может так в опфоре было.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 17-07-2023 в 12:29:

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 );

Никак не пойму где класс камеры идет проверка на расстояние до игрока. Там проверяется все что угодно но не это.


Отправлено Дядя Миша 17-07-2023 в 13:07:

Хм, ну если вызвана функция Touch, значит игрок уже дотронулся до веровки.
В противном случае, как бы она вызвалась?

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 18-07-2023 в 01:37:

Дядя Миша Я посмотрел, по-моему её никто не вызывает. Ну то есть изначально, так-то она сама может вызвать себя.


Отправлено Дядя Миша 18-07-2023 в 08:05:

Цитата:
Crystallize писал:
Я посмотрел, по-моему её никто не вызывает

Ну как это никто?
Физика её вызывает. Через каллбэки.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 18-07-2023 в 09:14:

Дядя Миша А можно как-то сделать чтоб такие вещи в поиске Студии показывались?


Отправлено Дядя Миша 18-07-2023 в 10:16:

Разумеется нет. Про такие вещи даже компилятор не знает. Только в рантайме.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Deadlocked1337 20-07-2023 в 20:32:

У меня сразу несколько вопросов.
1. Как скомпилировать исходники п2? Компилятор упорно останавливается на 59%.
2. Как выдернуть код худа из п2? Думаю вместо него поставить худ из хл1.

__________________
Leaving this world isn't as scary as it sounds.


Отправлено Дядя Миша 20-07-2023 в 22:28:

Цитата:
Deadlocked1337 писал:
Компилятор упорно останавливается на 59%.

Что это за компилятор такой - проценты пишет?

__________________
My Projects: download page

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

Цитата:

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


Отправлено Deadlocked1337 21-07-2023 в 09:25:

Дядя Миша, батник, что был в комплекте с кодом.

Прерывается на


Цитата:
Добавление mainui\mainui.dsp  59% OK
Прервано пользователем

Добавление mainui\menufont.H
Работа программы прервана

__________________
Leaving this world isn't as scary as it sounds.


Отправлено Дядя Миша 21-07-2023 в 10:44:

Я никакого батника в комплекте с кодом не прикладывал.
Это вопросы к тому, кто приложил.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 21-07-2023 в 16:32:

Наконец-то раздуплил физический смысл брать текущий момент времени, прибавлять к нему и сравнивать. То есть мы как бы отмечаем момент в будущем, ок.

По какому принципу код игрока делится на пре-тчинк и пост-тчинк? Например почему канат именно в претчинке? У меня сложилось впечатление что в претчинке мы ставим какие-то флаги в основном, а в пост-тчинке по ним уже действуем.


Отправлено Дядя Миша 21-07-2023 в 16:53:

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'


Отправлено Crystallize 21-07-2023 в 17:57:

Дядя Миша ну а с точки зрения этой симуляции в чем разница перед или после что-то делать? Это сделано потому что одни процессы физичные, а другие - нет?


Отправлено Дядя Миша 21-07-2023 в 18:21:

Ну допустим ты делаешь что-то такое и хочешь чтобы симулятор физики это учёл уже прямо на этом кадре. Значит надо делать в 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'


Отправлено chakki.skrip 30-07-2023 в 18:13:

Здравствуйте. Хотелось бы получить информацию по следующему вопросу.
После уменьшения размера хулла игрока в 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 )

Можно ли решить это на стороне сервера?


Отправлено Дядя Миша 30-07-2023 в 19:48:

Цитата:
chakki.skrip писал:
Можно ли решить это на стороне сервера?

нет.

__________________
My Projects: download page

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

Цитата:

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


Отправлено chakki.skrip 31-07-2023 в 11:26:

Цитата:
Дядя Миша писал:
нет.

Понял, благодарю за ответ


Отправлено Crystallize 10-08-2023 в 20:30:

Как сделать printf в матчлибе? Там ниче не работает.

Бывает ли что перпендикуляр к прямой косячит? У меня персонаж движется по прямой, и постоянно ищет перпендикуляр к ней. До точки пересечения с прямой разрешено некое расстояние, так что это как бы цилиндр. Скорость небольшая, что-то вроде 5-10 юнитов за кадр. И вот хотя по длине ему остается 20-25 юнитов, персонаж внезапно выпадает из этого объема.


Отправлено Дядя Миша 10-08-2023 в 21:05:

Цитата:
Crystallize писал:
Как сделать printf в матчлибе?

о какой именно матчлибе идёт речь?

Цитата:
Crystallize писал:
Бывает ли что перпендикуляр к прямой косячит?

Точно получить его невозможно - недостаточно информации. Эта штука строится на допусках. В разных реализациях - разные допуски.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 10-08-2023 в 21:37:

Дядя Миша матчлиба в ксашмоде.


Отправлено Дядя Миша 10-08-2023 в 21:42:

А зачем тебе выводить сообщения непременно внутри самой матчлибы?

__________________
My Projects: download page

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

Цитата:

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


Отправлено SNMetamorph 11-08-2023 в 08:08:

Цитата:
Crystallize писал:
Как сделать printf в матчлибе? Там ниче не работает.

В смысле? А что мешает-то? Есть snprintf, есть fmt если хочется удобно.

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


Отправлено Дядя Миша 11-08-2023 в 11:53:

Цитата:
Crystallize писал:
Я знаю только что в 2010 году чтобы повысить качество на Ютубе, мы в адрес дописывали &fmt=18.

Ну наверное уже неактуально

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 11-08-2023 в 12:15:

Цитата:
SNMetamorph писал:
В смысле? А что мешает-то? Есть snprintf, есть fmt если хочется удобно.

Матчлиба не знает ничего такого и ругается на undeclared identifier.

Добавлено 11-08-2023 в 19:15:

Цитата:
Дядя Миша писал:
А зачем тебе выводить сообщения непременно внутри самой матчлибы?

Я пытаюсь переделать функцию с возвращающей вектор на войд, но ей почему-то не нравится число параметров, хотя параметров как раз сколько надо.


Отправлено Дядя Миша 11-08-2023 в 12:43:

Цитата:
Crystallize писал:
Я пытаюсь переделать функцию с возвращающей вектор на войд, но ей почему-то не нравится число параметров

Покажи что ты там хочешь переделать и главное зачем.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 12-08-2023 в 00:20:

Разобрался, там оставалось магическое число 999 а сегмент рельсы был 1024


Отправлено Crystallize 16-08-2023 в 18:16:

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; } }


Собственно вот где было число 999.

Кстати внимание вот на этот изврат к энт-индексами в конце. Мне вообще нужно просто найти в цикле пару энтитей. Проблема что когда старался работать сначала с эдиктами (чтобы пореже запускать FindEntityByTargetname), по ходу цикла эти эдикты терялись по какой-то загадочной причине. Понятия не имею в чём может быть дело, цикл это всё же не выход из функции. Разве что это какие-то особенности работы с эдиктами.


Отправлено Дядя Миша 16-08-2023 в 18:40:

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'


Отправлено Crystallize 16-08-2023 в 19:45:

Дядя Миша 999 было на месте 1024, там вон коммент есть.


Отправлено Crystallize 20-08-2023 в 11:23:

Цитата:
Дядя Миша писал:
1024 вижу, 64 вижу. 999 не вижу.

а эдикты?...

Как делать чтобы на сервере при открытой консоли или при паузе, в коде игрока не накапливалось ускорение у физики? pparams-то на сервере нету.


Отправлено Дядя Миша 20-08-2023 в 11:40:

Цитата:
Crystallize писал:
в коде игрока не накапливалось ускорение у физики?

а оно накапливается? И какая связь с pparams?

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 20-08-2023 в 13:45:

Дядя Миша
Накапливается. В коде игрока (player.cpp) у меня каждый кадр что-то прибавляется к скорости. И если открыть консоль то видно что значение продолжает отбиваться и за пару секунд доходит до 2000, т.е. игра замерла но код игрока все ещё продолжает выполняться.
На клиенте это решали проверкой pparams->frametime потому что он обнуляется при паузе. Но на сервере оно не доступно, а gpGlobals->frametime на паузе не обнуляется.


Отправлено Дядя Миша 20-08-2023 в 13:46:

Но если консоль открыта, игрок же всё равно не двигается. А когда консоль закроется, это будет сброшено.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 20-08-2023 в 15:01:

Дядя Миша Любопытно какие механизмы могут существовать которые будут сбрасывать. Потому что на сервере вообще нет ничего связанного с паузами и консолями. Если я неправильно написал код мне бы понять как правильно, может быть надо его в playermove вместо этого пихать?

Добавлено 20-08-2023 в 22:01:

Цитата:
Дядя Миша писал:
Но если консоль открыта, игрок же всё равно не двигается.

GetAbsVelocity тем не менее не зануляется


Отправлено Дядя Миша 20-08-2023 в 17:45:

а 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'


Отправлено Crystallize 21-08-2023 в 18:09:

Дядя Миша О, обнуляется, спасибо. Интересно почему у него точность только три знака, а потом идут нули.

Почему игрок на которого применили SetAbsVelocity при движении как-то покачивается по синусоиде вверх-вниз как на волнах? Как будто всего на несколько юнитов.


Отправлено Дядя Миша 21-08-2023 в 18:13:

Цитата:
Crystallize писал:
Интересно почему у него точность только три знака

Потому что он восстанавливается из usercmd.msec у которого весь лимит - 250 милисекунд, путём умножения на тысячу.

Цитата:
Crystallize писал:
Почему игрок на которого применили SetAbsVelocity при движении как-то покачивается по синусоиде вверх-вниз как на волнах?

от третьего лица?

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 21-08-2023 в 18:27:

Цитата:
Дядя Миша писал:
от третьего лица?

да


Отправлено Дядя Миша 21-08-2023 в 20:54:

Может это какой-нибудь CalcBob чудит?

__________________
My Projects: download page

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

Цитата:

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


Отправлено Aynekko 06-09-2023 в 10:36:

Никак не могу понять, как можно передать строчку текста на клиент. А точнее, прописать в keyvalue энтити текст и потом, зная индекс энтити, получить его на клиенте. Я хотел попробовать ALLOC_STRING и получить id строчки на клиенте, но у меня в клиенте нет такой функции.

__________________
Мой мод на Xash


Отправлено Дядя Миша 06-09-2023 в 18:48:

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'


Отправлено Crystallize 07-09-2023 в 03:56:

Цитата:
Дядя Миша писал:
Может это какой-нибудь CalcBob чудит?

Кстати да, я боб отключил и это пропало.


Отправлено APAMk2 28-09-2023 в 06:36:

Вопросец, а можно-ли в MP при смене карты сохранить весь инвентарь игрока как это происходит в сингле? Бегло покопал форум и гуголь, ничего не нашёл, подозреваю просто где-то кусок из сингла в мультиплеер перенести, направьте по верному пути плз.


Отправлено Дядя Миша 28-09-2023 в 07:20:

В принципе можно, но халфа на такое не рассчитана, поэтому парой строк кода тут не отделаешься, придётся заморочиться. В том же квейке подобное было сделать куда как проще. Да оно там и работало - в кооперативе.

Вообщем надо выделить некоторое место и сохранить туда информацию о броне, здоровье, патронах и пушках для каждого игрока. А при заходе на новый уровень - дать всё это игроку. Какая-то глобальная структурка нужна где всё это держать во время смены уровня.

__________________
My Projects: download page

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

Цитата:

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


Отправлено APAMk2 28-09-2023 в 11:08:

Цитата:
Дядя Миша писал:
Какая-то глобальная структурка

Вроде game.h подходящее место, только теперь не знаю где остальной код дописывать, multiplay_gamerules.cpp похоже для этого не подходит, либо я не туда дописываю код (пробовал в CHalfLifeMultiplay::ChangeLevel и CHalfLifeMultiplay::Think), т.к. он не исполняется(ни один ALERT не сработал).
Структура:
C++ Source Code:
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
};


Сохранение и загрузка данных:
C++ Source Code:
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
}


Отправлено Дядя Миша 28-09-2023 в 14:34:

Сохранять надо перед вызовом 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'


Отправлено APAMk2 28-09-2023 в 16:57:

Перенёс в PlayerSpawn загрузку параметров, ох и долго-же я себе голову ломал...
По какой-то причине игре немного насрать на тот ChangeLevel что в multiplay_gamerules.cpp, перенёс сохранение в trigger.cpp и всё заработало , спасибо за помощь, пошёл допиливать код в адекватное состояние.


Отправлено SNMetamorph 28-09-2023 в 18:58:

Цитата:
APAMk2 писал:
Вопросец, а можно-ли в MP при смене карты сохранить весь инвентарь игрока как это происходит в сингле? Бегло покопал форум и гуголь, ничего не нашёл, подозреваю просто где-то кусок из сингла в мультиплеер перенести, направьте по верному пути плз.

Ищи на гитхабе исходники gravgun мода, там это было реализовано как-то.

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


Отправлено Дядя Миша 28-09-2023 в 19:10:

Цитата:
APAMk2 писал:
немного насрать на тот ChangeLevel что в multiplay_gamerules.cpp, перенёс сохранение в trigger.cpp и всё заработало

Это очень просто. Тот чейнджлевел по задумке авторов должен был срабатывать после вызова функции NextLevel в triggers.cpp.
Однако эта функция не вызывается вообще ниоткуда

C++ Source Code:
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'


Отправлено Crystallize 01-10-2023 в 18:43:

Цитата:
Crystallize писал:
Интересно почему у него точность только три знака, а потом идут нули

Цитата:
Дядя Миша писал:
Потому что он восстанавливается из usercmd.msec у которого весь лимит - 250 милисекунд, путём умножения на тысячу.

Это получается у игрока свой особый фреймтайм? Я в PreThink двигаю игрока через SetAbsVelocity, и двигаю рядом спрайт, в основном для отладки, и спрайт держится рядом только если использовать этот калечный pmove->frametime, иначе постепенно уползает вперед.


Отправлено Дядя Миша 01-10-2023 в 19:11:

Цитата:
Crystallize писал:
Это получается у игрока свой особый фреймтайм?

Именно так. И время для него идёт иначе.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 05-10-2023 в 08:20:

Как временно отключить гравитацию конкретно игроку? Чтобы он не дрейфовал вниз когда его передвигает SetAbsVelocity. Просто выставить мувтип fly не срабатывает.


Отправлено Дядя Миша 05-10-2023 в 12:10:

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'


Отправлено APAMk2 08-10-2023 в 12:51:

Решил ради тестов попробовать портануть модельку солдата из Q2 под ХЛ, столкнулся конечно-же с проблемой вертексной анимации и перегоне её в скелетную, чёт вспомнил о QR и QW, покопал их подфорум, ничё по этому поводу внятного не нашёл, ну неужели ничего внятного за все эти годы никто не придумал и нужно по классике ручками костылять модель в Т-позу и потом клеить на неё скелет из ХЛ или и того хуже - запиливать код вертексной анимации?


Отправлено Дядя Миша 08-10-2023 в 13:11:

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

Добавлено 08-10-2023 в 16:11:

Цитата:
APAMk2 писал:
или и того хуже - запиливать код вертексной анимации?

Старый ксаш умеет в вертексную анимацию. Новый, впрочем, тоже.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 08-10-2023 в 13:20:

Цитата:
Дядя Миша писал:
pev->gravity = 0.0f;

Неработает(( Он все равно падает, причем не с обычной скоростью а раз в десять медленнее.


Отправлено APAMk2 08-10-2023 в 13:41:

Цитата:
Дядя Миша писал:
Старый ксаш умеет в вертексную анимацию. Новый, впрочем, тоже.

Вот тут поподробнее, если можно, для этого нужны какие-то доп. телодвижения, ведь так? Просто сунуть модельку у меня не получилось, вылет с указанием на файл gl_context.c


Отправлено Дядя Миша 08-10-2023 в 14:38:

Цитата:
APAMk2 писал:
вылет с указанием на файл gl_context.c

В ксаше нет такого файла. Это наверное FWGS или другой форк. Все вопросы к ним.

Добавлено 08-10-2023 в 17:38:

Ну и разумеется он понимает модельки только от первой кваки.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 08-10-2023 в 18:20:

Цитата:
APAMk2 писал:
Вот тут поподробнее, если можно, для этого нужны какие-то доп. телодвижения, ведь так? Просто сунуть модельку у меня не получилось, вылет с указанием на файл gl_context.c

Env_sprite в ксашмоде загружает анимированные квейковские модели
https://xash3d.ru/doku.php?id=xashx...D0%B8:env_model


Отправлено Дядя Миша 08-10-2023 в 19:13:

Цитата:

env_model может отображать статичный кадр alias-модели формата Quake mdl. env_sprite полноценно загружает её с анимацией. Модель будет видна на стандартном рендере gl_renderer 0. Удивительно но даже сам автор XashXT забыл о наличии такой фичи в своём продукте.

Не забыл, а не счёл нужным упомянуть. Какая же это фича, если для нее приходится выключать рендерер? Это анти-фича.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 08-10-2023 в 19:28:

Цитата:
Crystallize писал:
Env_sprite в ксашмоде загружает анимированные квейковские модели


Помнится когда делал карты для DMC, использовал Env_sprite чтобы загружать халфовские модели, т.к. все остальные способы там выпилили


Отправлено APAMk2 10-10-2023 в 10:43:

В дикее был индикатор состояния перса (в т.ч. и на пк), типа прыгаешь, стоишь, сидишь, решил добавить его к себе, полез в исходники пк-порта и таки нашёл нужный файл ( https://github.com/hoaxer/Half-Life...l_dlls/mode.cpp ), перетащил весь связанный код к себе, запускаю и что вижу? Лишь фонарик, прикол в том что если убрать спрайты для него из hud.txt - появляется новый индикатор, фонарика естесна нет, что это такое и как быть не понимаю.

UPD. подкинул hud.txt из дикея - всё заработало, потом добавил строчки индикатора ровно туда где и в дикее - тоже заработало, максимально странная шняга.


Отправлено Ku2zoff 11-10-2023 в 14:02:

Цитата:
APAMk2 писал:
добавил строчки индикатора ровно туда где и в дикее - тоже заработало, максимально странная шняга

Да неважно где находятся строчки. Важны правильные координаты в них и правильное их количество, указанное числом в первой строке hud.txt


Отправлено APAMk2 12-10-2023 в 16:31:

Цитата:
Ku2zoff писал:
Да неважно где находятся строчки

Дело даже не в этом было, кое-кто кривыми ручёнками удалил один из UnpackRGB у фонарика и благополучно об этом забыл, восстановил - заработало всё, тут только одно фиксить - голову.


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


Отправлено Ku2zoff 13-10-2023 в 13:18:

Цитата:
APAMk2 писал:
как определить что оружие есть у игрока на сервере и через какую функцию лучше всё провернуть? AddToPlayer похоже вызывается 1 раз при подборе и дальше вызывается AddDuplicate через который я не вкурил как получить указатель на игрока т.к. он принимает в аргументы лишь 1 CBasePlayerItem, а какой-нибудь удобный способ получить указатель на игрока я не нашёл.

Как определить, что оружие есть у игрока:
C++ Source Code:
if (игрок->pev->weapons & (1<<WEAPON_ОРУЖИЕ);

Через какую функцию всё провернуть? Тут либо при каждой необходимости проверять, есть ли это оружие, либо писать переменную о том, что оно уже есть в энтварсы игрока. Что ты хочешь накодить? Чтобы при наличии одной пушки (именно одной, подобранной один раз, при подбирании второй точно такой же делалось "акимбо")?


Отправлено APAMk2 13-10-2023 в 14:17:

Цитата:
Ku2zoff писал:
Чтобы при наличии одной пушки (именно одной, подобранной один раз, при подбирании второй точно такой же делалось "акимбо")?

Именно так.
Цитата:
Ku2zoff писал:
писать переменную о том, что оно уже есть в энтварсы игрока

Возможно ошибаюсь, но ведь можно сделать переменную в классе стандартной, не "акимбо" пушки (mp5 к примеру) и оно будет работать, разве нет?


Отправлено Ku2zoff 13-10-2023 в 23:16:

Цитата:
APAMk2 писал:
Возможно ошибаюсь, но ведь можно сделать переменную в классе стандартной, не "акимбо" пушки (mp5 к примеру) и оно будет работать, разве нет?

Верно. Заведи в классе пушки переменную, которая будет нулевой при первом поднятии игроком такой пушки. А вот если игрок поднимет вторую такую же пушку, в AddToPlayer присвой этой переменной единицу. В сейвдату пушки это надо сохранять, если мод сингловый. Ну а дальше, если переменная равна единичке, пушка становится акимбо. Класс у неё не меняется, у неё меняются свойства. Плясать нужно уже от этой переменной. Если она не нулевая, то вьюмодель оружия будет уже другая - с двумя пушками в двух руках. Ну и так далее.


Отправлено APAMk2 14-10-2023 в 13:08:

Смог реализовать, но чуть иначе, переменная где-то вообще оказалась не нужна, в класс обычной пушки добавляю AddDuplicate в котором через pOriginal->m_pPlayer получаю игрока и уже проворачиваю всё что мне нужно, только вот теперь единственно нужно вот это:

code:
if (игрок->pev->weapons & (1<WEAPON_ОРУЖИЕ);

но наоборот (проверить что ствола у игрока нет).


Отправлено Crystallize 15-10-2023 в 17:30:

Из флагов блокирующих гравитацию игрока, ONROPE и ONTRAIN бесполезны, а ONBARNACLE ломает код из SetAbsVelocity и SetAbsOrigin.

Гравитация почему-то пересиливается только юзанием обоих этих команд, иначе будет медленное сползание по нескольку юнитов за кадр. Раньше я думал что это гравитация просто применяется после SetAbsVelocity чтобы программисту не нужно было думать про неё лишний раз, но теперь я хз.


Отправлено Дядя Миша 15-10-2023 в 19:19:

Не пойму, почему у тебя 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'


Отправлено Crystallize 15-10-2023 в 19:36:

Под ксашем
Я еще не пробовал делать ответвления в PM_ функции и там подменять.
Я сувал туда дебаг, он писал что вычитает 6.4 из pmove->velocity[2]
Гравитация была обычная 800, за один кадр 13, ну и там она по половинкам получается 6


Отправлено Дядя Миша 16-10-2023 в 05:14:

вообщем зануляй гравити у игрока и всё должно работать.
Прямо в классе игрока 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'


Отправлено APAMk2 17-10-2023 в 10:26:

Обнаружил что в переиздании второй кваки (вот внезапно) все модельки пересадили на кости в формате md5, сгенерил одной утилитой из этой модели smd для компиляции, а вот как для неё написать qc не знаю, дайте какие-нибудь статьи о компиляции моделей для монстров, ничего похожего не нашёл.


Отправлено Дядя Миша 17-10-2023 в 11:09:

Тут статьей не обойтись. Тут целое дело. Я даже studiomdl дорабатывал, чтобы собрать эти модельки в формат халфы.

Может как-нибудь попозже напишу об этом. Но те модельки которые вы видели в сентябрьской демке - это тоже скелетка из ремастера, но уже первой кваки.

Цитата:
APAMk2 писал:
сгенерил одной утилитой из этой модели smd для компиляции

Не подскажешь название утилитки? Я Noesis юзаю, но он весьма неудобен.

Добавлено 17-10-2023 в 14:09:

ЗЫ. Модельки эти с развесовкой, поэтому нормально они будут выглядеть только под старым ксашем. И собирать их можно только моим компилятором моделей. Но да, это вполне реально. Я сам удивился.

__________________
My Projects: download page

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

Цитата:

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


Отправлено APAMk2 17-10-2023 в 11:16:

Цитата:
Дядя Миша писал:
Noesis

Да, именно он, первым попался по запросу "md5 to mdl".
Пока попробую скомпилить хотя-бы чтобы под старым ксашем на карту в cycler ткнуть, хотя-бы пойму как это делается.


Отправлено Дядя Миша 17-10-2023 в 12:08:

На тебе примерчег QC.

__________________
My Projects: download page

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

Цитата:

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


Отправлено APAMk2 17-10-2023 в 13:17:

Скомпилил модельку, пришлось немного с qc-шкой пошаманить (некоторых костей не было в том, что выплюнул Noesis), а также текстуру отзеркалить по вертикали т.к. uv-мапа не сходилась, моделька даже под FWGS завелась, единственно солдатик больно уж карликовый получился, но не страшно, со скейлом пошаманить и нормалёк.


Отправлено Дядя Миша 17-10-2023 в 13:56:

Цитата:
APAMk2 писал:
а также текстуру отзеркалить по вертикали т.к. uv-мапа не сходилась

Известная проблема. в настройках экспорта Noesis поставь галку Flip UV Maps или чёт такое.

Добавлено 17-10-2023 в 16:56:

А скейл можно прямо в QC задать.

__________________
My Projects: download page

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

Цитата:

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


Отправлено APAMk2 17-10-2023 в 16:22:

Попробовал перенести супершотган, вышло неплохо и быстро (модель за 5 минут буквально перекомпилил), с монстрами беда т.к. попробовал налепить солдата на грунтов и они кроме как очень криво стрелять и дохнуть ничего не могут, даже ходить, а так хоть щас садись и делай Q2Remake.


Отправлено Дядя Миша 17-10-2023 в 18:46:

С ходьбой беда - эти анимации не содержат 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'


Отправлено Crystallize 19-10-2023 в 15:11:

Цитата:
Дядя Миша писал:
вообщем зануляй гравити у игрока и всё должно работать.
Прямо в классе игрока pev->gravity = 0.0f;

Нифига, PM_ живет своей жизнью.
Я думаю дело в этом:
code:
if (pmove->gravity) ent_gravity = pmove->gravity; else ent_gravity = 1.0;


Добавлено 19-10-2023 в 22:11:

Цитата:
Дядя Миша писал:
Тут статьей не обойтись. Тут целое дело. Я даже studiomdl дорабатывал, чтобы собрать эти модельки в формат халфы.

Может как-нибудь попозже напишу об этом. Но те модельки которые вы видели в сентябрьской демке - это тоже скелетка из ремастера, но уже первой кваки.

Лучше напиши о приключениях углов при передаче между движком клиентом и сервером, как вы с Квероксом дошли до умножения на ШЕСТЬ в попытках это понять, и т.д.


Отправлено Дядя Миша 19-10-2023 в 15:31:

Не на шесть, а на девять. Там не приключения. Есть вью-англес, они следуют за мышкой и есть просто англес, у которых питч поделён на 3, эти ориентируют тушку игрока. Пришло из кваки, понятное дело. В халфе это в принципе было уже не нужно, там тушку можно было ориентировать анимациями, но всё равно оставили. А вот в хл2 по идее этого уже нет.

Добавлено 19-10-2023 в 18:31:

Цитата:
Crystallize писал:
Я думаю дело в этом:

вот в pmove->gravity и приходит pev->gravity. Смотри что там.

__________________
My Projects: download page

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

Цитата:

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


Отправлено APAMk2 09-11-2023 в 15:00:

Делаю наклоны из за углов как в Сталкере, сделал прототип чисто наклоняющий взгляд на 30 градусов в input.cpp, как оказалось одного наклона камеры недостаточно, как можно сместить камеру? В view.cpp это сделано через изменение vieworg в pparams, может как-то можно его получить? Также думаю как можно интерполировать значение наклона камеры чтобы наклон был плавный.


Отправлено Crystallize 17-01-2024 в 18:19:

Цитата:
Crystallize писал:
Нифига, PM_ живет своей жизнью.
Я думаю дело в этом:

code:
if (pmove->gravity)
ent_gravity = pmove->gravity;
else
ent_gravity = 1.0;



Там получается два компонента у гравитации. Однако не в том смысле в котором она по половинкам применяется в PM_ функциях. Нельзя просто дать разрешение на нулевую гравитацию в пмуве как выше и прописать pev->gravity=0 где-то, это пол-дела. Там ещё остается какая-то гравитация которая приходит из vecAbsVelocity и действует даже если в PM_ функциях всё по нулям.


Отправлено Дядя Миша 17-01-2024 в 19:17:

Цитата:
Crystallize писал:
Там ещё остается какая-то гравитация которая приходит из vecAbsVelocity

Не гравитация, а просто вектор недообнуляется, наверное. Такое вполне может быть. Он же обнуляется не просто с течением времени, а по наступлению некоторого события, например если игрок нащупал дно.

Добавлено 17-01-2024 в 22:17:

Да я же вам рассказывал про забавный баг в первом Квейке. На e1m3 в конце уровня есть такой лифт к выходу с уровня и там игрока подстерегают два демона. Если убить их так, что они останутся на этом подъемнике, то, когда подъемник начнёт опускаться, мёртвые демоны поедут куда-то влево-вправо, ну вообщем кто куда. Почему так происходит? Демоны обычно гибнут в полёте, когда их велосити не равен нулю и падают на землю с актуальным велосити. Но поскольку монстр при падении получает флаг FL_ONGROUND это уже не имеет значения. А вот когда подъемник начинает опускаться вместе с демонами, он им обнуляет флаг FL_ONGROUND и велосити вновь начинает применяться. Вот они и продолжают ехать в ту сторону, куда прыгали перед смертью. Но - строго в 2д плоскости

Добавлено 17-01-2024 в 22:17:

И таких приколов в кушной физике довольно много.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Sigurth 20-01-2024 в 04:16:

Прилипание игрока к полу

Подскажите, как можно убрать "прилипание" игрока к полу по время FlyMove и NoClipMove? Подобный эффект можно наблюдать в режиме спектатора, особенно в кс 1.6, когда в летите прямо, у вас под ногами наклонная поверхность, и вы в итоге летите не прямо, а "скользите" по поверхности вниз. Можете проверить на de_dust2. Но если на режим спектатора мне глубоко начихать, то вот после уменьшения скорости передвижения по лестницам, при малом PITCH игроку не хватает скорости, чтобы отлипнуть от пола и начать подниматься, что меня очень огорчает. Фиксил кто-нибудь такое?

__________________
Никогда не поздно сделать мод под хл1


Отправлено Crystallize 20-01-2024 в 07:25:

Sigurth я такое замечал на ксашмоде в начале 2020 когда игрался с переносом уровней из хл2, но Дядя Миша меня толи не понял, толи не поверил.


Отправлено Aynekko 20-01-2024 в 07:55:

Цитата:
Sigurth писал:
Подскажите, как можно убрать "прилипание" игрока к полу по время FlyMove и NoClipMove?

void PM_CatagorizePosition (void):
C++ Source Code:
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


Отправлено Дядя Миша 20-01-2024 в 08:49:

Было:

C++ Source Code:
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();

Стало:
C++ Source Code:
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
}

Так сложно догадаться, правда?

Добавлено 20-01-2024 в 11:49:

Собственно вот это говно, которое заставляет игрока "прилипать"
C++ Source Code:
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
}

Но вам вообще не нужен весь этот код в режиме полёта.

Цитата:
Crystallize писал:
но Дядя Миша меня толи не понял, толи не поверил.

Дядя Миша не отвечает на вопросы из разряда, кушоет ли он мёд.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 25-01-2024 в 14:49:

я хотел написать Vector c = array[ (byte)(a*b) ]
а написал Vector c = array[ (byte)a*b ]
И у вектора отдельно компонент x запортился. Не выдался неверный элемент, не запортился весь вектор, а только один компонент. Странно.


Отправлено nemyax 25-01-2024 в 23:38:

Цитата:
Crystallize писал:
я хотел написать Vector c = array[ (byte)(a*b) ]

Что оно должно было делать по твоей задумке?


Отправлено Crystallize 26-01-2024 в 01:28:

nemyax Массив с положительными и отрицательными ячейками, чтобы знать какие рельсины впереди а какие позади тебя. Не все, просто пара ближайших. Один множитель это индекс -2 -1 1 2, другой это направление 1 -1 по или против нумерации. Ну а байт это переполнение буфера чтобы -1 стало 255.


Отправлено Дядя Миша 26-01-2024 в 05:46:

Цитата:
Crystallize писал:
Массив с положительными и отрицательными ячейками, чтобы знать какие рельсины впереди а какие позади тебя


Позади тебя очевидно рельсы, которые ты уже проехал. Впереди тебя рельсы, которые ты собираешься проехать.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 26-01-2024 в 06:00:

Цитата:
Дядя Миша писал:
if (pmove->onground != -1)


Интересно кстати, почему -1? Он же по идее вообще булевым должен быть.


Отправлено Crystallize 26-01-2024 в 06:37:

Цитата:
Дядя Миша писал:

Позади тебя очевидно рельсы, которые ты уже проехал. Впереди тебя рельсы, которые ты собираешься проехать.

Да никто не знает что там позади тебя а что впереди. Особенно когда неизвестно с какой стороны ты прилетел и в какую сторону поехал. Есть только сегмент на котором ты сел, чей он таргет, кто его таргет, и переменная с направлением движения. Она и создаёт концепцию "позади тебя", "впереди тебя" и т.д.


Отправлено Дядя Миша 26-01-2024 в 07:05:

Цитата:
FiEctro писал:
Интересно кстати, почему -1? Он же по идее вообще булевым должен быть.

Не, там номер энтити хранится.

Цитата:
Crystallize писал:
Да никто не знает что там позади тебя а что впереди.

Так у тебя же там двусвязный список из патч-треков.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 26-01-2024 в 07:55:

Цитата:
Дядя Миша писал:
Не, там номер энтити хранится.


Там же написано on ground. Зачем в onground хранить номер энтитии? Да ещё и так хардкодить его ?


Отправлено Crystallize 26-01-2024 в 08:32:

Цитата:
Дядя Миша писал:
Так у тебя же там двусвязный список из патч-треков.

Так он субъективен для самой рельсы. Если ты на него посмотришь не с той стороны, то для тебя он инвертирован.

Добавлено 26-01-2024 в 15:32:

Цитата:
FiEctro писал:
Там же написано on ground. Зачем в onground хранить номер энтитии? Да ещё и так хардкодить его ?

Наверное потому что энтити бывают брашевыми и при этом солидными.


Отправлено nemyax 26-01-2024 в 09:43:

Цитата:
Crystallize писал:
Есть только сегмент на котором ты сел, чей он таргет, кто его таргет, и переменная с направлением движения.

Тогда зачем ещё и массив строить? Всё ж и так есть.


Отправлено Crystallize 26-01-2024 в 10:20:

Цитата:
nemyax писал:
Тогда зачем ещё и массив строить? Всё ж и так есть.

Там есть ещё и бегунки которые трейсят рельсу как ноги. И если игрок не сильно заехал на текущий сегмент то задний бегунок всё ещё едет на преведущем и для него все индексы рельсов и углов рельсов будут на один меньше (если игрок поехал в направлении нумерации рельсов) или на один больше (если он поехал против нумерации). И тут можно было бы нагромоздить двухуровневую систему условий-макросов, как оно одно время и было. Но чтобы наглядно отразить в коде, что статусы сегментов(leaving, this, coming, postcoming) сдвигаются именно все вместе и на единицу, я дал им индексы и их декрементировал.

Добавлено 26-01-2024 в 17:20:

Т.е. массов нужен чтобы это было бы как бы общее пространство и при сдвиге сразу попадать на новое корректное значение.


Отправлено Дядя Миша 27-01-2024 в 13:11:

Цитата:
FiEctro писал:
Зачем в onground хранить номер энтитии?

Значит понадобилось.

Цитата:
FiEctro писал:
Да ещё и так хардкодить его

В каком смысле?

Цитата:
Crystallize писал:
Если ты на него посмотришь не с той стороны, то для тебя он инвертирован.

А ты через дотпродукт найди сторону

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 27-01-2024 в 13:48:

Дядя Миша я ищу ее один раз когда игрок запрыгивает, сравниваю его вектор скорости с вектором данного сегмента.


Отправлено Дядя Миша 27-01-2024 в 19:13:

Цитата:
Crystallize писал:
сравниваю его вектор скорости с вектором данного сегмента.

И каков же вектор сегмента?

Добавлено 27-01-2024 в 22:13:

Цитата:
Crystallize писал:
сравниваю его вектор скорости

Ну представь что игрок запрыгнул вертикально вверх. Просто нажал прыжок.
И что тогда?

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 27-01-2024 в 21:35:

Цитата:
Дядя Миша писал:
И каков же вектор сегмента?

Конец минус начало

Цитата:
Дядя Миша писал:
Ну представь что игрок запрыгнул вертикально вверх. Просто нажал прыжок.
И что тогда?

Я это учел, там усреднение между направлением движения и направлением взгляда. Поэтому он все же поедет потихоньку. Но если он смотрел строго перпендикулярно то не поедет Стрейфиться игрок не может.


Отправлено Дядя Миша 28-01-2024 в 07:38:

Цитата:
Crystallize писал:
Конец минус начало

У любого патч-трека два конца.

Цитата:
Crystallize писал:
Я это учел, там усреднение между направлением движения и направлением взгляда

Это не учёл, это хак.

__________________
My Projects: download page

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

Цитата:

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


Отправлено илья2 29-01-2024 в 15:45:

где можно найти нормальные исходники half-life 2 ? и какой программой их надо комплить ? пробовал сам найти исходники но они нормально не компилятся

__________________
илья


Отправлено FiEctro 29-01-2024 в 15:47:

Цитата:
илья2 писал:
где можно найти нормальные исходники half-life 2 ? и какой программой их надо комплить ? пробовал сам найти исходники но они нормально не компилятся



Гугли Source SDK.


Отправлено илья2 29-01-2024 в 15:54:

а какой программой компилить ?

__________________
илья


Отправлено FiEctro 29-01-2024 в 16:10:

Цитата:
илья2 писал:
а какой программой компилить ?



Visual Studio вроде как 2005, но может уже и под более старшие версии есть.


Отправлено илья2 29-01-2024 в 19:16:

в общем пишет ошибку 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> его просто нету. Мда в общем постоянные заморочки

__________________
илья


Отправлено Crystallize 30-01-2024 в 01:33:

илья2 держи сдк
https://mega.nz/file/UfRhyLRC#v5VUL...0AijoX86LqKKDY8


Отправлено илья2 30-01-2024 в 05:58:

Цитата:
Crystallize писал:
илья2 держи сдк
https://mega.nz/file/UfRhyLRC#v5VUL...0AijoX86LqKKDY8

а что толку компилит с одной единственной ошибкой invalid file or disk full а как эту ошибку исправить я не знаю.

Добавлено 30-01-2024 в 08:58:

я еще на другом компьютере не пробовал надо попробовать может там скомпилится нормально.

__________________
илья


Отправлено Дядя Миша 30-01-2024 в 06:07:

илья2 так мож у тебя на диске места не хватает? Проверь сколько у тебя свободного места на диске С.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 30-01-2024 в 07:09:

Цитата:
илья2 писал:
а что толку компилит с одной единственной ошибкой invalid file or disk full а как эту ошибку исправить я не знаю.


Так он тебе англицким языком пишет что у тебя диск переполнен. Освободи место на диске.


Отправлено илья2 30-01-2024 в 07:54:

27,1 гб осталось это что разве переполнен ?

__________________
илья


Отправлено FiEctro 30-01-2024 в 07:58:

илья2
Попробуй от имени администратора запустить, возможно винда блокирует доступ к диску.

Вот твоя ошибка:
https://stackoverflow.com/questions...k-to-0x5a57bebc

Зайди в Project Settings->Librarian->Command Line->Additional options и добавь /expectedoutputsize:600000000 в линкер.


Отправлено илья2 30-01-2024 в 08:49:

и добавь /expectedoutputsize:600000000 в линкер:не работает

Добавлено 30-01-2024 в 11:49:

от имени администратора запустить:тоже не работает

__________________
илья


Отправлено Дядя Миша 30-01-2024 в 10:06:

Цитата:
илья2 писал:
и добавь /expectedoutputsize:600000000 в линкер:не работает

Покажи куда добавлял.

__________________
My Projects: download page

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

Цитата:

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


Отправлено илья2 30-01-2024 в 10:18:

вот:https://imgur.com/a/YawjhRF

Добавлено 30-01-2024 в 13:18:

и все таки я не понимаю как такой крутой мод как overcharged мог быть сделан ? если даже обычный пацан как я не может нормально исходники half-life 2 скомпилить и немного их переделать. Или у разработчика свои секреты есть

__________________
илья


Отправлено Дядя Миша 30-01-2024 в 10:43:

Попробуй в 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'


Отправлено FiEctro 30-01-2024 в 10:54:

илья2
а какая у тебя версия студии?

И проверь чтобы у твоей папки с СДК не стояло атрибута "только чтение".


Отправлено илья2 30-01-2024 в 13:54:

Цитата:
FiEctro писал:
илья2
а какая у тебя версия студии?

Microsoft Visual Studio . NET 2003 Enterprise Architect версии 7.1

Добавлено 30-01-2024 в 16:29:

Цитата:
Дядя Миша писал:
Попробуй в All Options прописать явно.

так не получается не дает писать. Может где то есть файл где все эти скрипты прописаны ?

Добавлено 30-01-2024 в 16:47:

https://imgur.com/jsOaJl9

Добавлено 30-01-2024 в 16:51:

что интересно при нажатии на ошибку переносит на файл tier0.lib

Добавлено 30-01-2024 в 16:53:

где прописывается size-размер 41450
хеш код oid sha256:aaccecc6e45e3d25188411e664772b750bdd433fc9c33a96080a055f22382ae5
и ссылка на какой то сайт https://git-lfs.github.com/spec/v1

Добавлено 30-01-2024 в 16:54:

где требуется скачать какой то гид ларге файл стораге ?

__________________
илья


Отправлено Ku2zoff 31-01-2024 в 13:15:

Цитата:
илья2 писал:
Microsoft Visual Studio . NET 2003 Enterprise Architect версии 7.1

Как ты её вообще установил? 7.1 на десятку не ставится, какой-то из пререквизитов, кажись J# redist отказывается устанавливаться и всё, труба. Найди исходники Half-Life 2 посвежее, например под 2005 или 2010 студию. Бета вроде бы компилится ещё шестой студией, а вот самый первый сорс сдк, ЕМНИП, 7.1, она же 2003. Ищи сорс сдк для оранжбокс - будет самое то.

Добавлено 31-01-2024 в 20:15:

В наше время и сорцы, и студию найти не трудно: интернет есть. А я вот из-за сначала от безысходности, а после по привычке до 2013 года юзал эту самую 7.1.


Отправлено Crystallize 31-01-2024 в 14:52:

илья2 судя по всему утебя там промежуточные файлы в проекте друг друга перезаписывают потому что оно все в одной папке. Может просто перейди на Эп1 или орандж бокс.


Отправлено илья2 31-01-2024 в 15:26:

Цитата:
Ku2zoff писал:
В наше время и сорцы, и студию найти не трудно: интернет есть.

трудно не найти трудно скомпилировать

__________________
илья


Отправлено FiEctro 31-01-2024 в 15:39:

Цитата:
илья2 писал:
Microsoft Visual Studio . NET 2003 Enterprise Architect версии 7.1


Я бы всетаки порекомендовал обновиться
https://archive.org/details/en_visu...x86_dvd_6816332

https://developer.valvesoftware.com...g_Visual_Studio


Отправлено илья2 31-01-2024 в 16:02:

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

__________________
илья


Отправлено Дядя Миша 31-01-2024 в 20:28:

К хл2 наплодили кучу версий движка, там всё несовместимое.

__________________
My Projects: download page

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

Цитата:

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


Отправлено илья2 01-02-2024 в 08:22:

Цитата:
Дядя Миша писал:
там всё несовместимое.

и что делать все забыть про сорцы ?

__________________
илья


Отправлено Дядя Миша 01-02-2024 в 08:43:

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 01-02-2024 в 09:32:

Цитата:
илья2 писал:
и что делать все забыть про сорцы ?


Я тебе скинул что делать. Открой ссылку там всё написано.


Отправлено илья2 01-02-2024 в 09:43:

Цитата:
FiEctro писал:
Я тебе скинул что делать. Открой ссылку там всё написано.

я попробую

__________________
илья


Отправлено илья2 03-02-2024 в 12:56:

мдааа попробовал я твой способ после компила вот такая абра кадабра вылезает:https://imgur.com/a/r7j7o47 я даже не знаю что это такое может проблема что я стимовский half-life 2 запускаю или надо что то другое запускать ?

Добавлено 03-02-2024 в 15:38:

кажется я начинаю понимать это дебаггер он предупреждает об ошибке в директории game_controls/base игра работает запускается но худ в костюме работает неправильно все патроны здоровье энергия костюма куда то заноситься в угол.

Добавлено 03-02-2024 в 15:56:

только я не пойму а на какой объект ссылается дебаггер ? base.cpp такого файла нету.

__________________
илья


Отправлено FreeSlave 07-02-2024 в 11:40:

В каких случаях SetObjectCollisionBox должен отличаться от размера, выставляемого в UTIL_SetSize?

И ещё. Моё давнишнее наблюдение, в сути которого я, однако, не копался. Если у прожектайла ненулевой размер, то он не будет попадать в модельку за пределами размера, выставленного через UTIL_SetSize. Для корректной работы нужно увеличивать размер, дабы он покрывал всю модельку. Пример: гаргу в ХЛ выставляется размер такой же как у агрунта. Из-за этого прожектайлы с ненулевым размером пролетают сквозь модельку (если не стрелять по ногам). Прожектайлов с ненулевым размером в ХЛ вроде как нет, но могут быть с кастомным кодом. В опфоре таковыми являются снаряды шокроача. И в опфоре выставляемый размер у гарга действительно увеличен для соответствия геометрии модельки.
Собственно, как определяется столкновение? Какую роль играет размер монстра и хитбоксы его модели. И в чем особенность проверки столкновения у прожектайлов с нулевым размером? Чисто из наблюдений получается, что движок для энтить с ненулевым размером сначала проверяет столкновение по размерам и в случае успеха проверяет дополнительно хитбоксы, иначе - столкновения не происходит. А для энтить с нулевым размером трасса, должно быть, работает иначе, и сразу "попадает" в хитбокс.

__________________
I'm on github
I'm on opendesktop.org


Отправлено Дядя Миша 07-02-2024 в 13:23:

absmin и absmax - это размеры ббокса, с которыми объект линкуется в дерево. Они очевидно не должны быть меньше реального размера, заданного в SetSize. Но могут быть больше. Например для ротатаблей.
Ротатабля же неизвестно в какую сторону крутится - можно взять её общий радиус. Чтобы другой предмет гарантированно в ней не застрял.

Цитата:
FreeSlave писал:
И в чем особенность проверки столкновения у прожектайлов с нулевым размером?

Там задаётся ббокс +\15 юнитов, чёб ими легче попадать было.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FreeSlave 08-02-2024 в 14:40:

Цитата:
Дядя Миша писал:
Там задаётся ббокс +\15 юнитов, чёб ими легче попадать было.

Ракеты и арбалетные стрелы в ХЛ прекрасно бьют в макушку гарга, хотя расстояние между верхушкой заданной в SetSize и макушкой гарга явно больше 15 юнитов.
А вот Ббокс, выставляемый через SetObjectCollisionBox, у гарга да, увеличенный по сравнению с его SetSize и как раз примерно соответствует размерам модельки.
Я, кстати, вспомнил, что есть в ХЛ снаряды с ненулевым размером - это хорнеты мухобойки. Они в HL пролетают сквозь Гарга (если не стрелять по ногам, опять же).

Насчёт +15/-15 - это ты наверно про MOVETYPE_FLYMISSILE кстати. Но он в халфовском сдк не используется.

__________________
I'm on github
I'm on opendesktop.org


Отправлено Дядя Миша 08-02-2024 в 16:21:

Я уже не помню точно как это в халфе использовалось. Были какие-то отличия от кваки.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 12-02-2024 в 15:42:

Меня смущает эффект от команды r_drawentities 5. У игрока кубик ААББ и он вращается но при этом как будто коллидит без учета вращения. Я думал только в КС хулл игрока вращается?


Отправлено Дядя Миша 12-02-2024 в 15:52:

Не-не, это не колоизационный хулл.

__________________
My Projects: download page

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

Цитата:

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


Отправлено XaeroX 12-02-2024 в 15:55:

Цитата:
Crystallize писал:
Я думал только в КС хулл игрока вращается?

В КС хулл игрока вращается??

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


Отправлено a1batross 12-02-2024 в 17:28:

del

__________________
Xash3D FWGS форк


Отправлено Crystallize 13-02-2024 в 01:42:

XaeroX типа, поэтому якобы проходит в неаксиальные коридоры Уже чем 32.5*1.4142. Хотя наверное это просто учёт нормалей при надувании хулла.


Отправлено Дядя Миша 13-02-2024 в 07:47:

Это чисто визуальный эффект, он не имеет никакого отношения к коллизии.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 24-02-2024 в 20:29:

В фитцквейке нельзя обновить r.refdef.vieworg через VectorAdd. Вот Мастер бы развонялся...


Отправлено Дядя Миша 24-02-2024 в 20:40:

Цитата:
Crystallize писал:
В фитцквейке нельзя обновить 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 02-03-2024 в 14:57:

Цитата:
Дядя Миша писал:
Скорее расскажи ему об этом

А что его где-то можно найти сейчас?


Отправлено XaeroX 02-03-2024 в 15:03:

Crystallize
Мастера? Конечно можно. Он просто к нам на форум принципиально не ходит, наверное, мы его чем-то огорчили.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


Отправлено Crystallize 02-03-2024 в 17:04:

XaeroX он всё ещё дрочит свой XDM и маппак?!
я думал разочаровался во всём и потому ушёл. Но видимо разочаровался он только в нас.


Отправлено Crystallize 12-03-2024 в 02:07:

Что делать если шестерка зависает где-то на стадии проверки ошибок?


Отправлено Дядя Миша 12-03-2024 в 06:02:

Какая шестёрка? Студия? У компиляции нет фазы проверки ошибок.
Ты что-то путаешь.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 12-03-2024 в 06:59:

Дядя Миша В общем я жму F7, курсор песочные часы и студия перестает реагировать на клики. И нагрузка на проц даже не повышается.


Отправлено FiEctro 12-03-2024 в 07:03:

Цитата:
Crystallize писал:
Что делать если шестерка зависает где-то на стадии проверки ошибок?


Перестать мучать мамонта. Ну или пересаживаться на XP.


Отправлено Дядя Миша 12-03-2024 в 07:07:

Странно. Не приходилось с таким сталкиваться. Это любой проект так?

Добавлено 12-03-2024 в 10:07:

Цитата:
FiEctro писал:
Перестать мучать мамонта

Я вот перешёл на 2005-ю студию, так эта зараза через два дня работы просто перестала выполнять фазу Post Build. Ни от чего. Причём оно начало постепенно отваливаться. Сперва на одном проекте, потом на другом.
А я в толк взять не могу, почему изменений не видно. А оно оказывается свежскомпиленные файлы не копирует, так и лежит старье. Никаких ошибок не выдаётся, ничего. Просто не копирует и всё. И тут понял, почему народ в большинстве перешёл на какие-то автосборки и прочие системы автоматизации. Неудивительно, когда от студии такая подляна началась.
Так что нет уж. Сами это дерьмо юзайте.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 12-03-2024 в 07:14:

Цитата:
Дядя Миша писал:
Я вот перешёл на 2005-ю студию,


Так это тоже мамонт.


Отправлено Дядя Миша 12-03-2024 в 07:17:

Ну у более новых студий ещё какие-то приколы будут.
Мне работать надо, а не воевать с чужими глюками.

Добавлено 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'


Отправлено Crystallize 12-03-2024 в 07:45:

Цитата:
Дядя Миша писал:
Странно. Не приходилось с таким сталкиваться. Это любой проект так?

Фитцквейк и ксашмод. На ксашмоде удавалось обходить, на фитцквейке три раза подряд вчера словил.

Добавлено 12-03-2024 в 14:45:

Цитата:
Дядя Миша писал:
Я вот перешёл на 2005-ю студию, так эта зараза через два дня работы просто перестала выполнять фазу Post Build.

Скорее всего непредусмотренный эффект от работы под 10-кой, ну или что у тебя сейчас стоит.


Отправлено Дядя Миша 12-03-2024 в 09:02:

Цитата:
Crystallize писал:
Скорее всего непредусмотренный эффект от работы под 10-кой, ну или что у тебя сейчас стоит.

На XP это началось. Какой непредусмотренный эффект?

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 14-03-2024 в 10:41:

Цитата:
Дядя Миша писал:
Странно. Не приходилось с таким сталкиваться. Это любой проект так?

Там проблема конкретно с сохранением исходника. Он не может этого сделать видимо. При том что смарт wmic пишет что состояние диска ок.

Куда в квейке писать код чтобы он вызывался при спавне игрока в начале новой игры или при загрузке сейва?


Отправлено Дядя Миша 14-03-2024 в 11:26:

Я уже не помню что там в квейке. Сам ковыряет и меня спрашивает

__________________
My Projects: download page

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

Цитата:

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


Отправлено Crystallize 15-03-2024 в 04:31:

Можно ли маппать под HL в каком-нибудь радианте? Чтобы вадники открывал и текстуры показывал? Volatile-Radiant тот же?

Мне просто нравится что в радианте не надо край браша мышкой ловить.
Вот это я нашел https://hlfx.ru/forum/showthread.php?s=&threadid=3717 но про текстуры там не сказано.


Временная зона GMT. Текущее время 23:35. Страницы (2): « 1 [2]
Показать все 3886 сообщений этой темы на одной странице

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