env_gunfire вопрос

Тема в разделе "Программирование / Скриптинг", создана пользователем tonline_kms65, 9 окт 2016.

  1. tonline_kms65

    tonline_kms65 Read Only

    Сообщения:
    77
    Симпатии:
    10
    Всем здравствуйте.
    Такой вопрос. Вопрос касается создания энтити env_gunfire.
    Мне эта энтитя нужна для создания трассеров (трассирующих пуль) и создания в месте попадания пули в стену, цепок и осколков.
    Энтитя создается, Трассеры есть , щепки(сколки ) в месте попадания пули есть. Но место попадания пули (эффекта env_gunfire) не управляемое, т.е. всегда центр карты.
    gunfire.jpg
    Код:
    new String:Name[36];
    Format(Name, sizeof(Name), "%d", player);      //получаем имя игрока строкой
    
    new gunfire = CreateEntityByName("env_gunfire");
    if (gunfire){
    DispatchKeyValue(gunfire, "classname", "classname_GunFire");
    DispatchKeyValue(gunfire, "bias", "1");
    DispatchKeyValue(gunfire, "collisions", "1");
    DispatchKeyValue(gunfire, "maxburstdelay", "1");
    DispatchKeyValue(gunfire, "maxburstsize", "7");
    DispatchKeyValue(gunfire, "minburstdelay", "2");
    DispatchKeyValue(gunfire, "minburstsize", "2");
    DispatchKeyValue(gunfire, "rateoffire", "10");
    DispatchKeyValue(gunfire, "shootsound", "Weapon_AR2.NPC_Single");
    DispatchKeyValue(gunfire, "spread", "1");
    DispatchKeyValue(gunfire, "StartDisabled", "0");
    DispatchKeyValue(player, "targetname", Name);  //на всякий случай задаю полученное имя игроку
    DispatchKeyValue(gunfire, "target", Name);          // задаем энтитьке место прицела имя установленное имя игрока
    DispatchSpawn(gunfire);
    
    new String:Parent[20];                                                          // начало env_gunfire цепляем на нос пулемета
    Format(Parent, sizeof(Parent), "attach_%d", g_Gun[owner]);
    DispatchKeyValue(g_Gun[owner], "targetname", Parent);
    SetVariantString(Parent);                      
    AcceptEntityInput(gunfire, "SetParent");              
    SetVariantString("eyes");                                                       // на аттач eyes
    AcceptEntityInput(gunfire, "SetParentAttachment", gunfire, gunfire, 0);
    
    decl String:AddOutput[100];
    Format(AddOutput, sizeof(AddOutput), "OnUser1 !self:kill::%0.1f:-1", 5.0);
    SetVariantString(AddOutput);
    AcceptEntityInput(gunfire, "AddOutput");
    AcceptEntityInput(gunfire, "FireUser1");
    }
    И кстати, если я тупо телепортирую Env_gunfire в место прицела пулемета (что бы просто получить эффект щепок) эффекта нет, зато трассеры идут из места телепортирования опять же к центру карты.

    Вообще, я сделал трассеры по своему, по другому принципу.
    Но мне нравится стандартный env_gunfire тем что он создает осколки и щепки при попадании в стену, а я так и не получил этого эффекта.
    Сколько бы я не пытался изменить расположение конечной точки env_gunfire - бесполезно. Конечная точка env_gunfire всегда получается центр карты.
    В хаммере эта ентитька работает отлично. Указываю имя энтитьки которая является точкой прицела, и даже если эту ентитьку(точку прицела) перемещать по карте - прицел env_gufire четко следует за ней.
    Прихожу к выводу - в sourcepawn задание имени ENT-прицела должно быть задано как то по другому.
    Смотрел исходник этой энтитьки(effects.cpp) - там имя задается по координатам ENT-прицела. Пример активации.
    void CEnvGunfire::Activate( void )
    {
    // Find my target
    if (m_target != NULL_STRING) //если не равно пустой строке т.е. имя есть
    {
    m_hTarget = gEntList.FindEntityByName( NULL, m_target ); //прицел = имя ENT из строки
    }

    BaseClass::Activate();
    }

    Но понятно координаты flooat, а в свойствах задается имя строкой.
    Кто с такой проблемой сталкивался - отпишитесь пожалуйста, или у кого есть какие идеи.
    Такой же нерешенный головняк у меня остался и в плагине Laser_Turret. Пытался создать направленный луч света, энтитька point_spotlight. Так же неуправляемая - смотрит в центр карты. Что-то у них есть общее. Какой то недопонятый мною косяк.

    --- Добавлено позже ---
    Продублировал этот вопрос на Оленях. Интересно, будет ответ или нет.
    Кто интересуется этим, или подобным вопросом - отслеживайте здесь env_gunfire - AlliedModders
     
    Последнее редактирование: 10 окт 2016