Вопрос по созданию энтити

iamdss

Участник
Сообщения
126
Реакции
12
Здравствуйте. Создаю в HL2DM чемодан w_suitcase_passenger (в нём лежит аммуниция убитого игрока). У меня проблема - я не знаю, какие задать свойства, чтобы объект вёл себя определённым образом, а именно:

1. Через объект могут проходить игроки
2. В объект можно выстрелить из любого оружия и он должен подчиняться общей физике (отлететь)

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

C-подобный:
DispatchKeyValue(ent, "spawnflags", "0");
SetEntProp(ent, Prop_Send, "m_usSolidFlags", FSOLID_TRIGGER);
SetEntProp(ent, Prop_Data, "m_nSolidType", SOLID_VPHYSICS);
SetEntProp(ent, Prop_Send, "m_CollisionGroup", COLLISION_GROUP_DEBRIS);

но это всё ещё не работает, как хотелось бы.

Второй и третий мой вопрос в следующем. Это, скорее, основы SM, но однозначного ответа я так и не нашёл. В player_death создаю таймер, который ставит хук на касание:

C-подобный:
CreateTimer(0.1, Timer_DoHook, ent);

Это вынужденная мера, так как хук иногда срабатывает во время смерти и игрок подбирает свой собственный рюкзак. Вопрос второй - как поставить хук, когда игрок гарантированно мёртв? Я могу, разумеется, сравнить, кто умер и кто коснулся, но я чувствую, что делаю что-то не так. А третий вопрос вот в чём. Если я создаю таймер через CreateTimer, но не храню его хендл, должен ли я заботиться об освобождении хендла до рестарта карты? Или таймер освободит свои ресурсы сам?

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

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
Посмотри в плагине есть то что ты хочешь.
http://hlmod.ru/forum/utverjdionnye-plaginy/10305-jail-medkit.html

PHP:
new entity = CreateEntityByName("prop_physics");
SetEntityModel(entity, "твоя модель");
SetEntProp(entity, Prop_Data, "m_CollisionGroup", 4);
SetEntProp(entity, Prop_Data, "m_MoveCollide", 0);
SetSolidFlags(entity, 152);
SetEntityMoveType(entity, MOVETYPE_VPHYSICS);
 

iamdss

Участник
Сообщения
126
Реакции
12
Увы, пули всё так же походят сквозь чемодан...
 

iamdss

Участник
Сообщения
126
Реакции
12
Пулями не толкается ни в какую. Уже создал чемодан хаммере и настроил его, чтоб отлетал от пуль, код полностью перенёс из исходника карты:
C-подобный:
		DispatchKeyValue(ent, "physicsmode", "0");
		DispatchKeyValue(ent, "angles", "0 0 0");
		DispatchKeyValue(ent, "damagetoenablemotion", "0");
		DispatchKeyValue(ent, "Damagetype", "0");
		DispatchKeyValue(ent, "disablereceiveshadows", "0");
		DispatchKeyValue(ent, "disableshadows", "0");
		DispatchKeyValue(ent, "ExplodeDamage", "0");
		DispatchKeyValue(ent, "ExplodeRadius", "0");
		DispatchKeyValue(ent, "fademaxdist", "0");
		DispatchKeyValue(ent, "fademindist", "-1");
		DispatchKeyValue(ent, "fadescale", "1");
		DispatchKeyValue(ent, "forcetoenablemotion", "0");
		DispatchKeyValue(ent, "inertiaScale", "1.0");
		DispatchKeyValue(ent, "massScale", "0");
		DispatchKeyValue(ent, "maxdxlevel", "0");
		DispatchKeyValue(ent, "mindxlevel", "0");
		DispatchKeyValue(ent, "minhealthdmg", "0");
		DispatchKeyValue(ent, "model", SUITCASE);
		DispatchKeyValue(ent, "modelscale", "1.0");
		DispatchKeyValue(ent, "nodamageforces", "0");
		DispatchKeyValue(ent, "PerformanceMode", "0");
		DispatchKeyValue(ent, "physdamagescale", "0.1");
		DispatchKeyValue(ent, "pressuredelay", "0");
		DispatchKeyValue(ent, "renderamt", "255");
		DispatchKeyValue(ent, "rendercolor", "255 255 255");
		DispatchKeyValue(ent, "renderfx", "0");
		DispatchKeyValue(ent, "rendermode", "0");
		DispatchKeyValue(ent, "shadowcastdist", "0");
		DispatchKeyValue(ent, "skin", "0");
		DispatchKeyValue(ent, "spawnflags", "0");
		DispatchKeyValue(ent, "targetname", targetname);
Пули бьются об него, но с места он не двигается.
 
Сверху Снизу