Выяснилось, что возможен баг, когда 2 монстра (воюющие против друга) могут залипнуть на месте, при этом идет loop с бесконечным вызовом TASK_FACE_ENEMY. Немножко переделал, так вроде баг ушел.
Было:
C++ Source Code:
1
if ( !FVisible( pEnemy ) )
2
{
3
ASSERT(!HasConditions(bits_COND_SEE_ENEMY));
4
SetConditions( bits_COND_ENEMY_OCCLUDED );
5
}
6
else
7
ClearConditions( bits_COND_ENEMY_OCCLUDED );
Стало:
C++ Source Code:
1
if ( !FVisible( pEnemy ) )
2
{
3
ASSERT(!HasConditions(bits_COND_SEE_ENEMY));
4
if (m_flOcclusionTime + 3 <= gpGlobals->time)
5
{
6
SetConditions( bits_COND_ENEMY_OCCLUDED );
7
m_flOcclusionTime = gpGlobals->time;
8
}
9
}
10
else
11
{
12
ClearConditions( bits_COND_ENEMY_OCCLUDED );
13
m_flOcclusionTime = gpGlobals->time - 2;
14
}
Завел новую переменную, чтобы ничего другого не сломать ненароком, ее в сейврестор конечно же добавить не забыть. Результат тот же и баг пока не наблюдался.
В else я не совсем уверен, но мне нравится результат.
Ku2zoff С возвращением! Надо будет попробовать этот код в Бейс Дефенсе
P.S. Найс платформа, очень дешевое железо на нее, у меня где-то валялся серверный аналог i7 первого на эту платформу - Xeon X3440 (только мой экземпляр, кажется, перегретый). Сейчас он рублей 800 стоит.
PLut железо не моё - клиентское. Просто ребята с жадности не захотели покупать БП и мать в магазине, когда матери ещё были. Ну а с рук нормальных БП никто не продавал. В итоге, железки остались у меня больше чем на год. Странным образом материнка расчухалась и у неё пропал дефект - автостарт после выключения (была пробита в грозу через сетевую плату). Вот теперь временно сижу на этой платформе. По ощущениям ай3 540 немного уступает моему FX8350, но не критично. А вот по памяти лажа. Мои две планки по 4Gb 1600 Мгц она не может схавать - потолок по частоте у неё 1333 Мгц.
Бывший хозяин материнки с этого в шоке. Он мне её отдал как металлолом. Я её поставил одним ребятам нерусской национальности, т.к. очень просили, чтобы пека работала. Сразу сказал - автостарт это плохо, максимум на неделю, а потом как хотите, но надо брать новую. Тогда в ДНС они ещё были. В итоге, жадность их сгубила. Привезли мне это чудо где-то через год, с двумя мёртвыми винчестерами на 1 и 2 тб и отъехавшим БП. И вот ещё год лежало, хотя тогда матери на 1156 были в продаже. А тут у меня случился конфуз: GA-970A-DS3 отошла в мир иной. Я пять дней сидел с планша, но это не то пальто. Выкопал винт в кладовке, накатил винду, чтоб только погамать. А оно раз, и норм работает. Короче, конвертнул ССД из GPT в MBR и завёл свою привычную систему на этом железе. Три дня - полёт нормальный. А я ведь уже хотел просить знакомого выпаять сетевой контроллер, может быть помогло бы от автостартов, скорее всего он в кз. А оно само его выпаяло, наверное совсем прогорел после нескольких включений. Наколхозил охлад из куска пластмассы и радиатора от 1156 + вентилятор от 775 - родной так страшно свистел из-за стёртого подшипника - уши болели. Сегодня первый хозяин материнки подогнал мне блатной охлад от Cooler Master на этот сокет, с инвентарным нумером 051207 (Спасибо Почте России). Осталось вспочинить охлад на видюхе - тоже свистит.
Полевики обладают таким свойством - восстанавливаться после кратковременного большого пробоя. Им на это нужен полный покой около двух недель. Конечно то, что пробито намертво, уже не оживёт, но то, что просто зацепило не до конца - будет работать. Лотерея конечно.
Дядя Миша писал: Им на это нужен полный покой около двух недель.
Так ведь ситуация вот какая: я взял винт, который не жалко, собрал машину. Запустил. Автостарт был. Накатил винду - автостарт был. Начал устанавливать все игры и вообще настраивать, чтобы было удобно. Потом пыль вытер, термопасту сменил, ну как обычно. Автостарт был. Включал/выключал Onboard LAN - ситуация не менялась... Потом воткнул китайскую вай-фай плату с алика и какую-то древнюю реалтековскую сетевуху, ещё раз вытер пыль - вуаля, автостарт пропал.
У нпс есть такое свойство иногда - тупить пару секунд. Часто бывает, что нажимаешь юз на него, он говорит "окей, пошли" и стоит. Игрок от него отходит уже прилично так, и нпс только через 3 секунды сообразит, что ему вообще-то идти надо. Поворачивается и бежит. В подавляющем большинстве случаев нпс срабатывает сразу и бежит за тобой.
Я сначала думал, что это из-за того, что ему нужно доиграть анимацию idle, а потом смотрю - неа. Анимация играет, но он поворачивается и идет.
Есть у кого идеи, куда копать надо? Может это все те самые TASK_WAIT виноваты?
Сиквенс Финишед не всегда срабатывает поидее. Раза с третьего-пятого.
Впрочем, вы вообще уверены, что хотите шустрых NPC?
Если их довести до ума, они игрока выносят на раз.
Дядя Миша писал: Если их довести до ума, они игрока выносят на раз.
Скилл.цфг можно подкрутить и уменьшить урон. Есть такие моды, где и тормозные НПС выносят игрока на раз-два. Название не помню, какая-то убогая гадость, где мы в роли спецназовца пробираемся на вражескую базу и по стелсу выносим вражын. Из оружия есть г36 и ещё бег на шифт. Игрок там действительно спецназ-овца, помирает с двух попаданий в пятку. Реализм это конечно хорошо, но палочку перегибать не стоит, иначе народ будет плеваться. Много народу в DoD играет и играло? По сравнению с кс или даже тф - ничтожно мало. Вон, хороший пример баланса, деус эксы. Игрок вроде и аугментации имеет, и вооружён хорошо, а по-думовски не разгуляешься, завалят. Но если подходить к прохождению с умом, можно порой и против толп воевать.