Привязать эффект огня к брошенной гранате

Колян

Участник
Сообщения
180
Реакции
5
Подскажите как лучше Привязать эффект огня к брошенной гранате? не хотелось бы создавать эффект и по таймеру его двигать к координате гранаты(
 

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,336
В CS:S можно использовать сущность env_fire_trail, которая выглядит как трейл из огня. Чтобы прикрепить, необходимо вызвать input "SetParent" для гранаты. Вот код, который прикрепляет такой "хвост" к каждой брошенной гранате:
PHP:
public OnEntityCreated(iEntity, const String:sClassName[])
{
    if ( StrEqual(sClassName, "hegrenade_projectile") )
    {
        new iFireEntity = CreateEntityByName("env_fire_trail");
        DispatchSpawn(iFireEntity);

        SetVariantString("!activator");
        AcceptEntityInput(iFireEntity, "SetParent", iEntity);
    }
}
 

FurFur

Участник
Сообщения
153
Реакции
85
Еще можно так

PHP:
public void OnEntityCreated(int iEnt, const char[] classname)
{
    if (StrEqual(classname, "hegrenade_projectile"))
    {
        IgniteEntity(iEnt, 1.0);
    }
}

Если не сработает то так:
PHP:
public void OnEntityCreated(int iEnt, const char[] classname)
{
    if (StrEqual(classname, "hegrenade_projectile"))
    {
        CreateTimer(0.0, OnGrndSpawn, iEnt);
    }
}

public Action OnGrndSpawn(Handle hTimer, any iHeEnt)
{
    IgniteEntity(iHeEnt, 1.0);
}
 

Черная вдова

Участник
Сообщения
2,795
Реакции
670
Подскажите пожалуйста, трейл выстрела можно сделать огненным?
 

White Wolf

🍉
Сообщения
2,382
Реакции
2,187
  • Команда форума
  • #5
Если не сработает то так:
PHP:
public void OnEntityCreated(int iEnt, const char[] classname)
{
    if (StrEqual(classname, "hegrenade_projectile"))
    {
        CreateTimer(0.0, OnGrndSpawn, iEnt);
    }
}

public Action OnGrndSpawn(Handle hTimer, any iHeEnt)
{
    IgniteEntity(iHeEnt, 1.0);
}
А таймер там нафига? Не умеем свои ф-ции создавать? Там задержки нет.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #6
@White Wolf, если нужно проверять того кто бросал то нужен либо таймер либо SDKHook_SpawnPost
 

FurFur

Участник
Сообщения
153
Реакции
85
@Колян,
PHP:
public void OnEntityCreated(int iEnt, const char[] classname)
{
    if (StrEqual(classname, "hegrenade_projectile"))
    {
        CreateTimer(0.0, OnGrndSpawn, iEnt);
    }
}

public Action OnGrndSpawn(Handle hTimer, any iHeEnt)
{
    if (iHeEnt == -1 || FindDataMapOffs(iHeEnt, "m_hThrower") == -1) return;
   
    int iClient = GetEntPropEnt(iHeEnt, Prop_Data, "m_hThrower");
}
 

Черная вдова

Участник
Сообщения
2,795
Реакции
670
@Колян,
PHP:
public void OnEntityCreated(int iEnt, const char[] classname)
{
    if (StrEqual(classname, "hegrenade_projectile"))
    {
        CreateTimer(0.0, OnGrndSpawn, iEnt);
    }
}

public Action OnGrndSpawn(Handle hTimer, any iHeEnt)
{
    if (iHeEnt == -1 || FindDataMapOffs(iHeEnt, "m_hThrower") == -1) return;
  
    int iClient = GetEntPropEnt(iHeEnt, Prop_Data, "m_hThrower");
}
Я читал на alliedmods что таймеры меньше 0.0 превращаются в 0.1
 

Колян

Участник
Сообщения
180
Реакции
5
@Колян,
PHP:
public void OnEntityCreated(int iEnt, const char[] classname)
{
    if (StrEqual(classname, "hegrenade_projectile"))
    {
        CreateTimer(0.0, OnGrndSpawn, iEnt);
    }
}

public Action OnGrndSpawn(Handle hTimer, any iHeEnt)
{
    if (iHeEnt == -1 || FindDataMapOffs(iHeEnt, "m_hThrower") == -1) return;
 
    int iClient = GetEntPropEnt(iHeEnt, Prop_Data, "m_hThrower");
}

L 10/15/2016 - 09:45:55: [SM] Native "FindDataMapOffs" reported: Entity 418 (418) is invalid
L 10/15/2016 - 09:45:55: [SM] Displaying call stack trace for plugin "Mod.smx":
L 10/15/2016 - 09:45:55: [SM] [0] Line 113, C:\Users\Ya!\Desktop\pwn\sourcemod\scripting\/vish.sp::OnValidSpawn()
L 10/15/2016 - 09:49:09: Error log file session closed.

113 строка это - if (iHeEnt == -1 || FindDataMapOffs(iHeEnt, "m_hThrower") == -1) return; Как пофиксить? Нужен вариант чтоб на КСС и КСГО работал безотказно[
 

FurFur

Участник
Сообщения
153
Реакции
85
фикс ксс
PHP:
public void OnEntityCreated(int iEnt, const char[] classname)
{
    if (StrEqual(classname, "hegrenade_projectile"))
    {
        CreateTimer(0.0, OnGrndSpawn, iEnt);
    }
}

public Action OnGrndSpawn(Handle hTimer, any iHeEnt)
{
    if (iHeEnt == -1 || !IsValidEntity(iHeEnt) || FindDataMapOffs(iHeEnt, "m_hThrower") == -1) return;
 
    int iClient = GetEntPropEnt(iHeEnt, Prop_Data, "m_hThrower");
}

а вот так под кс го (не проверял)
PHP:
public void OnEntityCreated(int iEnt, const char[] classname)
{
    if (StrEqual(classname, "hegrenade_projectile"))
    {
        CreateTimer(0.0, OnGrndSpawn, iEnt);
    }
}

public Action OnGrndSpawn(Handle hTimer, any iHeEnt)
{
    if (iHeEnt == -1 || !IsValidEntity(iHeEnt) || FindDataMapInfo(iHeEnt, "m_hThrower") == -1) return;

    int iClient = GetEntPropEnt(iHeEnt, Prop_Data, "m_hThrower");
}
 

Колян

Участник
Сообщения
180
Реакции
5
фикс ксс
PHP:
public void OnEntityCreated(int iEnt, const char[] classname)
{
    if (StrEqual(classname, "hegrenade_projectile"))
    {
        CreateTimer(0.0, OnGrndSpawn, iEnt);
    }
}

public Action OnGrndSpawn(Handle hTimer, any iHeEnt)
{
    if (iHeEnt == -1 || !IsValidEntity(iHeEnt) || FindDataMapOffs(iHeEnt, "m_hThrower") == -1) return;

    int iClient = GetEntPropEnt(iHeEnt, Prop_Data, "m_hThrower");
}

а вот так под кс го (не проверял)
PHP:
public void OnEntityCreated(int iEnt, const char[] classname)
{
    if (StrEqual(classname, "hegrenade_projectile"))
    {
        CreateTimer(0.0, OnGrndSpawn, iEnt);
    }
}

public Action OnGrndSpawn(Handle hTimer, any iHeEnt)
{
    if (iHeEnt == -1 || !IsValidEntity(iHeEnt) || FindDataMapInfo(iHeEnt, "m_hThrower") == -1) return;

    int iClient = GetEntPropEnt(iHeEnt, Prop_Data, "m_hThrower");
}
2 одинаковых кода же... там тоже не кактит))) та же ошибка....
--- Добавлено позже ---
PHP:
new client = GetEntPropEnt(entity, Prop_Send, "m_hOwnerEntity");
это для ксс и для ксго пойдет?
--- Добавлено позже ---
PHP:
new client = GetEntPropEnt(entity, Prop_Send, "m_hOwnerEntity");
Ругается на эту сроку - if (iHeEnt == -1 || FindDataMapOffs(iHeEnt, "m_hThrower") == -1) а не на int iClient = GetEntPropEnt(iHeEnt, Prop_Data, "m_hThrower");
--- Добавлено позже ---
СТОП. Я не догоняю а зачем нам нужно вообще делать - FindDataMapOffs(iHeEnt, "m_hThrower") == -1 ??))) АХАХАХ индекс у нас есть... проериои на валидность и все)))
 

FurFur

Участник
Сообщения
153
Реакции
85
2 одинаковых кода же... там тоже не кактит))) та же ошибка....
--- Добавлено позже ---

это для ксс и для ксго пойдет?
--- Добавлено позже ---

Ругается на эту сроку - if (iHeEnt == -1 || FindDataMapOffs(iHeEnt, "m_hThrower") == -1) а не на int iClient = GetEntPropEnt(iHeEnt, Prop_Data, "m_hThrower");
--- Добавлено позже ---
СТОП. Я не догоняю а зачем нам нужно вообще делать - FindDataMapOffs(iHeEnt, "m_hThrower") == -1 ??))) АХАХАХ индекс у нас есть... проериои на валидность и все)))

Что бы не было ошибок при смене карты
И я тебе добавил проверку на валидность, а ты код так и не поменял


2 одинаковых кода же

Там разница в FindDataMapOffs и FindDataMapInfo.
Первое под sm < 1.8,второе выше
 

Колян

Участник
Сообщения
180
Реакции
5
Если не сделать - FindDataMapOffs(iHeEnt, "m_hThrower") то чем это может быть черевато - конкретно
 
Сверху Снизу