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

Тема в разделе "Программирование / Скриптинг", создана пользователем iamdss, 25 июл 2015.

  1. iamdss

    iamdss

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

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

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

    Код:
    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 создаю таймер, который ставит хук на касание:

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

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

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    Посмотри в плагине есть то что ты хочешь.
    http://hlmod.ru/forum/utverjdionnye-plaginy/10305-jail-medkit.html

    PHP:
    new entity CreateEntityByName("prop_physics");
    SetEntityModel(entity"твоя модель");
    SetEntProp(entityProp_Data"m_CollisionGroup"4);
    SetEntProp(entityProp_Data"m_MoveCollide"0);
    SetSolidFlags(entity152);
    SetEntityMoveType(entityMOVETYPE_VPHYSICS);
     
    iamdss нравится это.
  3. iamdss

    iamdss

    Сообщения:
    117
    Симпатии:
    0
    Увы, пули всё так же походят сквозь чемодан...
     
  4. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    iamdss нравится это.
  5. iamdss

    iamdss

    Сообщения:
    117
    Симпатии:
    0
    Пулями не толкается ни в какую. Уже создал чемодан хаммере и настроил его, чтоб отлетал от пуль, код полностью перенёс из исходника карты:
    Код:
    		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);
    Пули бьются об него, но с места он не двигается.