C-подобный:
SetEntData(client, g_offsCollisionGroup, 1, 4, true);
В принципе, всё работает, игроки могут проходить сквозь защищённых игроков, могут стрелять сквозь них. Но игрока под защитой всё ещё можно убить из гравигана, именно из него, швырнув в игрока что-нибудь. Вопрос - как быть?
C-подобный:
COLLISION_GROUP_DEBRIS, // Collides with nothing but world and static stuff
Решено правильным подбором условий.
Разве выкинутые гравиганом предметы считаются за статику?
Добавлено через 13 минут
И сразу спрошу ещё вот о чём. Логика плагина вертится в таймере с интервалом 0,1 сек, там же я определяю, защищён игрок или нет, таким кодом:
C-подобный:
bool:IsProtected(client)
{
if (IsClientInGame(client) && !IsFakeClient(client) && IsPlayerAlive(client))
{
new gValue = GetEntProp(client, Prop_Data, "m_takedamage", 1);
return gValue == 0;
} else return false;
}
Скажите, насколько ресурсоёмок данный код? И не будет ли более экономно взводить/сбрасывать флаг при постановке/снятии защиты, а определять уже по этому флагу? И может быть не стоит выделять память под переменную gValue?
Добавлено через 1 час 23 минуты
http://hlmod.ru/forum/plaginy-dlya-sourcemod/2831-team-only-noblock-v2-0-a.html
http://hlmod.ru/forum/zaprosy/17887-no-block-grenades.html
с описанием проблем с физикой. В общем, у меня такая же проблема. Спустя приблизительно 2 часа после старта плагина начинает ломаться физика, сперва гранаты летят под пол, а потом вообще всё исчезает. Не подскажите, что было причиной слома физики в этих плагинах?
Также решено рефакторингом.
В силе только вопрос о функции bool:IsProtected.
Последнее редактирование: