env_gunfire вопрос

tonline_kms65

Участник
Сообщения
65
Реакции
13
Всем здравствуйте.
Такой вопрос. Вопрос касается создания энтити env_gunfire.
Мне эта энтитя нужна для создания трассеров (трассирующих пуль) и создания в месте попадания пули в стену, цепок и осколков.
Энтитя создается, Трассеры есть , щепки(сколки ) в месте попадания пули есть. Но место попадания пули (эффекта env_gunfire) не управляемое, т.е. всегда центр карты.
gunfire.jpg

C-подобный:
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
 
Последнее редактирование:
Сверху Снизу