if ( !g_pGameRules->FMonsterCanTakeDamage( this, pAttacker ) )
return 0;
после
if ( pev->deadflag == DEAD_NO )
{PainSound();// "Ouch!"}
Добавил заголовочные файлы. В combat.cpp - #include "gamerules.h", в multiplay_gamerules.cpp - #include "monsters.h", в skill.h добавил ifndef SKILL_H, чтобы не переопределялся.
Загружаю карту по сети (монстры включены) с отключенным френдлифаером, но всё равно могу убить Барни.
Подскажите, в чём ошибка? И вообще в верном ли я направлении в плане реализации?
FreeSlave у барни свой тейк-демедж, через который и наносится дамага.
ищи место в Combap.cpp где эта функция вызывается в принципе, и там делай условие.
Добавлено 29-05-2011 в 18:44:
Это по идее в CheckTraceHullAttack, но не только там.
Дядя Миша писал: FreeSlave у барни свой тейк-демедж, через который и наносится дамага.
ищи место в Combap.cpp где эта функция вызывается в принципе, и там делай условие.
Добавлено 29-05-2011 в 18:44:
Это по идее в CheckTraceHullAttack, но не только там.
Тейк-демедж Барни всё равно вызывает эту же функцию уже у толк-монстра, а там уже вызывается общая.
В комбате TakeDamage вызывается только в CheckTraceHullAttack и в RadiusDamage
Кстати, сейчас понял, что при таком раскладе дружественные друг другу монстры не смогут наносить урон при френдлифаере (а порой ведь солдаты подрываются на гранатах других солдат ), надо бы ещё проверку IsPlayer подкрутить.
FreeSlave писал: В комбате TakeDamage вызывается только в CheckTraceHullAttack и в RadiusDamage
корочи. Чтобы монстр не мог получить дамагу совсем-совсем, используется проверка на pev->takedamage. Вот гляди где эта проверка есть и там посмыслу дополняй своим условием.
Цитата:
FreeSlave писал: А для чего вообще trace-функции? Кровь рисуют?
Поднимаю эту тему, чтобы не создавать новую.
Первое:
C++ Source Code:
if ( !stricmp( строка1, строка2 ) )
break;
Это дело находится внутри цикла. Я так понял, что если если строки совпадут, то цикл прервётся и пойдёт выполняться код, находящийся за ним. Это я правильно понял?
\0 - нулевой символ.Это не цифра ноль а именно символ с кодом 0.Обозначает конец строки.Если строка пустая то в ней только нулевой символ.Если не пустая то он в конце строки.
Ku2zoff писал: Это дело находится внутри цикла. Я так понял, что если если строки совпадут, то цикл прервётся и пойдёт выполняться код, находящийся за ним.
да. А если вместо break написать continue, то цикл пропустит весь код, который находится под break и начнет следующую итерацию.
Цитата:
Ku2zoff писал: Что это вообще за условие? Пустая строка?
чтобы занулить строку, вовсе необязательно обнулять весь массив. Вполне достаточно занулить первый символ. Так что да, это проверка на пустую строку.
Добавлено 14-07-2011 в 17:12:
ЗЫ. если вместо массива нам доступен только указатель на строку, то условие целесообразно сделать вот таким:
В одиночных кавычках пишется не число, а код символа, который впоследствии преобразуется в число.
Вот допустим, нам требуется сделать проверку на пробел.
Но не каждый знает, что код пробела равен 32. К тому же это не для всех наглядно. Поэтому пишут