HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Нубские вопросы от <censored> и других нубов
Чтобы не создавать сто тем
3 голосов
Страницы (168): « Первая ... « 164 165 166 167 [168]   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
Ku2zoff
Юзер (типа моддер)

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 5402
Возраст: 29

Рейтинг



Цитата:
Дядя Миша писал:
если энтить не видна - то и декаль не рисуем

да уж. И как я сразу не сообразил? Дядя Миша, я же просто скопипастил за французами, а они там удаляют декали насовсем. Удалять не надо, только спрятать от глаз игрока. Проблема с пропаданием при выпадении энтить из PVS решена. Осталось избавиться от трассы.

Отредактировано Ku2zoff 12-10-2020 в 17:55

Сообщить модератору | | IP: Записан
Сообщение: 197756

Старое сообщение 12-10-2020 17:53
- За что?
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 26850
Нанёс повреждений: 385 ед.

Рейтинг



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

Добавлено 12-10-2020 в 21:25:

Ku2zoff кстати. А ты сделал так, чтобы декаль, выпущенная на границе двух различных энтить, ложилась на обе?

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

__________________
My Projects: download page

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

Сообщить модератору | | IP: Записан
Сообщение: 197757

Старое сообщение 12-10-2020 18:25
-
Ku2zoff
Юзер (типа моддер)

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 5402
Возраст: 29

Рейтинг



Глупый вопрос. Есть два массива декалей в классе CDecalManager:

C++ Source Code:
spritedecal_s m_pDecals[MAX_DECALS];
spritedecal_s m_pTempDecals[MAX_DECALS];

Сам менеджер разумеется имеет конструктор и деструктор, которые вызываются соответственно из HUD_Init:
C++ Source Code:
if (!g_pDecalManager)
  g_pDecalManager = new CDecalManager();

И HUD_Shutdown:
C++ Source Code:
if (g_pDecalManager)
{
  delete g_pDecalManager;
  g_pDecalManager = NULL;
}

Надо ли удалять с помощью delete эти массивы в деструкторе CDecalManager? Сейчас довольно много гуглил, и с большим трудом нашёл инфу, что delete необходимо вызывать лишь для объектов, созданных с помощью new. Получается, память из-под этих массивов автоматически высвободится при выходе из игры? И функцию деструктора для CDecalManager мне можно оставить пустой?

Добавлено 14-10-2020 в 00:51:

Цитата:
Дядя Миша писал:
А ты сделал так, чтобы декаль, выпущенная на границе двух различных энтить, ложилась на обе?

Нет, я ещё не добрался до косметики. Но зато решил проблемы с "отваливанием" декалей от энтить после чейнджлевела. Дело было так: возвращаюсь на предыдущую карту, где ранее оставил декали на стенах и дверях. Те двери, что на момент чейнджлевела находятся в PVS, остаются связанными с декалями, и декали вместе с ними ездят. А вот те двери, что не находятся в PVS на момент чейнджлевела, теряют свои декали: те просто перестают двигаться и висят в воздухе. Пришлось завести функцию, которая заново аттачит декали к энтитям, если они попадают в PVS.
Ужос, сколько нюансов.

Отредактировано Ku2zoff 13-10-2020 в 17:52

Сообщить модератору | | IP: Записан
Сообщение: 197769

Старое сообщение 13-10-2020 17:51
- За что?
FreeSlave
Житель форума

Дата регистрации: Nov 2007
Проживает: Тула
Сообщений: 884

Рейтинг



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

Цитата:
Ku2zoff писал:
память из-под этих массивов автоматически высвободится при выходе из игры?

При выходе из игры вообще вся память процесса высвободится

__________________
I'm on github
I'm on Open Build Service
I'm on opendesktop.org

Сообщить модератору | | IP: Записан
Сообщение: 197772

Старое сообщение 13-10-2020 18:22
- За что?
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 26850
Нанёс повреждений: 385 ед.

Рейтинг



Цитата:
Ku2zoff писал:
Надо ли удалять с помощью delete эти массивы в деструкторе CDecalManager?

они же статически объявлены.

Цитата:
Ku2zoff писал:
с большим трудом нашёл инфу, что delete необходимо вызывать лишь для объектов, созданных с помощью new

я и говорю, народ боится с памятью работать.

Цитата:
Ku2zoff писал:
И функцию деструктора для CDecalManager мне можно оставить пустой?

можно пустой, можно там чота полезное сделать.

__________________
My Projects: download page

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

Сообщить модератору | | IP: Записан
Сообщение: 197773

Старое сообщение 13-10-2020 18:43
-
Vadiman
Частый гость

Дата регистрации: Jun 2013
Проживает: (void)
Сообщений: 73

Рейтинг



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

Добавлено 11-10-2020 в 07:12:


А как ты добился вылетов? В итоге у тебя iuser4 никуда не делся, просто теперь называется по-другому: iJumpTime. Так делать крайне не рекомендуется.
Кстати, все эти иузеры, фузеры, вузеры и еузеры надо вручную сохранять. То есть заводить соответствующую переменную для энтити, и оперировать ей в сейв/ресторе.

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

Сообщить модератору | | IP: Записан
Сообщение: 197774

Старое сообщение 13-10-2020 18:48
- За что?
Ku2zoff
Юзер (типа моддер)

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 5402
Возраст: 29

Рейтинг



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

Не новая переменная это у тебя. Ты стёр iuser4 и вместо неё написал iJumpTime. С таким же успехом можно было везде где надо вписать iuser4 вместо iJumpTime. Ты новую переменную не создал. Ты старую переименовал. А это лишний геморой.

Добавлено 14-10-2020 в 10:51:

Цитата:
Дядя Миша писал:
я и говорю, народ боится с памятью работать.

Я проштудировал твою статью по работе с оперативной памятью, и пришёл к такому же мнению.
Цитата:
FreeSlave писал:
При выходе из игры вообще вся память процесса высвободится

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

Вот кто бы об этом удобочитаемо написал. Если объявлены статически, значит удалятся вместе с удалением класса-родителя. Какие ужосы советуют на stackoverflow, это кащьмар. Я целые сутки убил впустую, пытаясь что-то вразумительное по этой теме отыскать.

Отредактировано Ku2zoff 14-10-2020 в 03:45

Сообщить модератору | | IP: Записан
Сообщение: 197785

Старое сообщение 14-10-2020 03:51
- За что?
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 26850
Нанёс повреждений: 385 ед.

Рейтинг



Цитата:
Ku2zoff писал:
Вот кто бы об этом удобочитаемо написал

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

__________________
My Projects: download page

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

Сообщить модератору | | IP: Записан
Сообщение: 197797

Старое сообщение 14-10-2020 08:53
-
Aynekko
Маппер

Дата регистрации: Jun 2016
Проживает: г. Подольск, Россия
Сообщений: 221
Возраст: 28

Рейтинг



Даже не вопрос, а скорее просто наблюдение. Ну, если вопрос, то тогда - почему не работает?

Проблему-то я решил, но суть в чем: у монстров есть функция TakeDamage. В нее я по образцу из зомби добавил коэффициенты в зависимости от типа урона и даже от установленного skill. Ну например:

C++ Source Code:
if ( (g_iSkillLevel == SKILL_MEDIUM) && (bitsDamageType == DMG_BLAST) ) // half-dmg from explosions in medium mode
{
  flDamage *= 0.5;
}

Это было прописано в функции монстра. В конце нее там всегда идет return CBaseMonster::TakeDamage. Как я предположил, измененный в монстре flDamage уйдет в основную функцию и там продолжится выполнение. Но он не уходит. Я задолбался отлаживать, выставил алерты в консоль, но коэффициент не применялся. И тут я сделал по-другому. Я пошел прямехонько в combat.cpp и заменил
C++ Source Code:
flTake = flDamage;

на такую конструкцию:
C++ Source Code:
1
if (FClassnameIs( pev, "monster_barney" ))
2
{
3
  if ( (g_iSkillLevel == SKILL_MEDIUM) && (bitsDamageType == DMG_BLAST) ) // half-dmg from explosions in medium mode
4
  {
5
    flDamage *= 0.5;
6
  }
7
  else
8
  {
9
    flTake = flDamage;
10
  }

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

__________________
Мой мод на Xash

Сообщить модератору | | IP: Записан
Сообщение: 197939

Старое сообщение 18-10-2020 20:43
- За что?
Ku2zoff
Юзер (типа моддер)

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 5402
Возраст: 29

Рейтинг



Цитата:
Aynekko писал:
В конце нее там всегда идет return CBaseMonster::TakeDamage.

У барника там CTalkMonster::TakeDamage. И внимательно посмотри условия, когда возвращается int ret. Может твоё условие просто игнорится?

Сообщить модератору | | IP: Записан
Сообщение: 197959

Старое сообщение 19-10-2020 13:03
- За что?
Aynekko
Маппер

Дата регистрации: Jun 2016
Проживает: г. Подольск, Россия
Сообщений: 221
Возраст: 28

Рейтинг



В конце функции CTalkMonster::TakeDamage все равно идет переадресация на CBaseMonster::TakeDamage. Там просто проверяется наличие дамага, чтобы например ученый комментировал. Само повреждение там не выполняется, так что это без разницы. У барни вроде окей все, я там почти все подчистил под себя.
Так или иначе, вот здесь у зомби коэффициент не работает - я его вообще не трогал.

C++ Source Code:
1
int CZombie :: TakeDamage( entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType )
2
{
3
  // Take 30% damage from bullets
4
  if ( bitsDamageType == DMG_BULLET )
5
  {
6
    Vector vecDir = GetAbsOrigin() - (pevInflictor->absmin + pevInflictor->absmax) * 0.5;
7
    vecDir = vecDir.Normalize();
8
    float flForce = DamageForce( flDamage );
9
    SetAbsVelocity( GetAbsVelocity() + vecDir * flForce );
10
    flDamage *= 0.3;
11
  }
12
 
13
  // HACK HACK -- until we fix this.
14
  if ( IsAlive() )
15
    PainSound();
16
  return CBaseMonster::TakeDamage( pevInflictor, pevAttacker, flDamage, bitsDamageType );
17
}

В халфе тоже никакого 30% дамага от пуль не заметил. Еще не совсем понимаю, для чего эти векторы тут стоят.
Алерты я ставил, flDamage выводился и менялся. А в итоговом дамаге не учитывался, пока я все в комбат не перетащил.

__________________
Мой мод на Xash

Сообщить модератору | | IP: Записан
Сообщение: 197960

Старое сообщение 19-10-2020 14:08
- За что?
Ku2zoff
Юзер (типа моддер)

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 5402
Возраст: 29

Рейтинг



Цитата:
Aynekko писал:
не совсем понимаю, для чего эти векторы тут стоят.

Чтобы труп получал ускорение и толкался взрывами и пулями.

Сообщить модератору | | IP: Записан
Сообщение: 197971

Старое сообщение 19-10-2020 23:03
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 05:54. Новая тема    Ответить
Страницы (168): « Первая ... « 164 165 166 167 [168]   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Нубские вопросы от <censored> и других нубов
Чтобы не создавать сто тем
3 голосов
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

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