Спрайт на оружие

Тема в разделе "Программирование / Скриптинг", создана пользователем in-com, 16 ноя 2013.

  1. in-com

    in-com

    Сообщения:
    12
    Симпатии:
    0
    Добрый день уважаемые. Уже как третий день пытаюсь прикрутить спрайт (эффект молнии или искр) к определенному оружию, но пока что не получается. В этом деле я еще новичок и поэтому всех тонкостей не понимаю.

    Сначала делал так:
    Код:
    public OnEntityCreated(entity, const String:classname[])   
    {   
       if(StrEqual(classname, "weapon_smg1"))   
       {   
        CreateTimer(0.01, Timer_Entity, entity);   
       }   
    }   
    
    public Action:Timer_Entity(Handle:timer, any:entity)   
    {   
       new client = GetEntPropEnt(entity, Prop_Send, "m_hOwnerEntity"); 
       if(!IsValidEntity(client)) return Plugin_Stop; 
         
       if (client > 0 && client <= MaxClients)   
       {   
         createSprite(client);
       } 
    return Plugin_Stop;   
    }
    
    createSprite(client) 
    { 
       new env_sprite[client] = CreateEntityByName("env_sprite"); 
       if (!IsValidEntity(env_sprite[client]) && (env_sprite[client] != 0)) 
       { 
        return; 
       } 
       new Float:origin[3]; 
       GetEntPropVector(client,Prop_Send,"m_vecOrigin",origin); 
       origin[2] += 80.0; 
       DispatchKeyValueVector(env_sprite[client],"origin",origin); 
       DispatchKeyValue(env_sprite[client],"model","materials/Sprites/bluelight1.vmt"); 
       DispatchKeyValue(env_sprite[client],"rendermode","1"); 
       DispatchKeyValue(env_sprite[client],"spawnflags","1"); 
       DispatchKeyValue(env_sprite[client],"scale","0.3"); 
       DispatchSpawn(env_sprite[client]); 
       SetVariantString("!activator"); 
       AcceptEntityInput(env_sprite[client],"SetParent",client); 
    }
    но эффекта не было видно. Далее переделал:
    Код:
    public OnEntityCreated(entity, const String:classname[]) 
    { 
      if(StrEqual(classname, "weapon_smg1")) 
      { 
       CreateTimer(0.01, Timer_Entity, entity); 
      } 
    } 
    
    public Action:Timer_Entity(Handle:timer, any:entity) 
    { 
      new client = GetEntPropEnt(entity, Prop_Send, "m_hOwnerEntity"); 
      if(!IsValidEntity(client)) return Plugin_Stop; 
       
      if (client > 0 && client <= MaxClients) 
      { 
       Void_AttachTrail(client); 
      } 
      return Plugin_Stop; 
    } 
    
    void:Void_AttachTrail(client) 
    { 
             new g_iEntity[client]; 
             g_iEntity[client] = CreateEntityByName("env_spritetrail"); 
             if(g_iEntity[client] > 0 && IsValidEdict(g_iEntity[client])) 
             { 
       
                     new Float:g_fOrigin[3], String:g_sName[MAX_NAME_LENGTH]; 
                     GetClientName(client, g_sName, sizeof(g_sName)); 
                     Format(g_sName, sizeof(g_sName), "Trails_%s", g_sName); 
             
                     DispatchKeyValue(client, "targetname", g_sName); 
                     DispatchKeyValue(g_iEntity[client], "parentname", g_sName); 
                     DispatchKeyValue(g_iEntity[client], "lifetime", "1.5"); 
                     DispatchKeyValue(g_iEntity[client], "endwidth", "0.1"); 
                     DispatchKeyValue(g_iEntity[client], "startwidth", "5"); 
                     DispatchKeyValue(g_iEntity[client], "spritename", "materials/sprites/bluelight1.vmt"); 
                     DispatchKeyValue(g_iEntity[client], "renderamt", "255"); 
                     DispatchKeyValue(g_iEntity[client], "rendercolor", "255 0 0"); 
                     DispatchKeyValue(g_iEntity[client], "rendermode", "5"); 
       
                     DispatchSpawn(g_iEntity[client]); 
       
                     new g_fTrailHeight; 
                     GetClientAbsOrigin(client, g_fOrigin); 
                     g_fOrigin[2] += g_fTrailHeight; 
                     TeleportEntity(g_iEntity[client], g_fOrigin, NULL_VECTOR, NULL_VECTOR); 
                     SetVariantString(g_sName); 
                     AcceptEntityInput(g_iEntity[client], "SetParent"); 
             } 
    }
    и также не получилось. Эффекта не видать :(
    PS: некоторую часть кода брал с вашего форума


    Прошу помощи у умельцев т.к. уже больше не к кому обратиться...
     
  2. Reiko1231

    Reiko1231 AlexTheRegent

    Сообщения:
    235
    Симпатии:
    568
    [​IMG]

    Данное свечение всегда сопровождает оружие - будь оно поднято, выброшено или любые другие события. Думаю, со спрайтом тоже должно работать.
    Код:
    #include <sdktools>
    #include <sdkhooks>
    
    #define EFFECT_MODEL "sprites/redglow1.vmt"
    
    public OnMapStart()
    {
        PrecacheModel(EFFECT_MODEL);
    }
    
    public OnEntityCreated(iEntity, const String:sClassName[])
    {
        if ( StrEqual(sClassName, "weapon_m4a1") )
        {
            new iGlowEntity = CreateEntityByName("env_glow");
            DispatchKeyValue(iGlowEntity, "model", EFFECT_MODEL);
            DispatchKeyValue(iGlowEntity, "rendermode", "3");            // свечение
            DispatchKeyValue(iGlowEntity, "scale", "1.0");               // размер свечения
            DispatchKeyValue(iGlowEntity, "renderamt", "255");           // прозрачность
            DispatchKeyValue(iGlowEntity, "rendercolor", "255 0 0");     // цвет
            
            if ( DispatchSpawn(iGlowEntity) )
            {
                decl String:sTargetName[32], Float:fOrigin[3];
                Format(sTargetName, sizeof(sTargetName) - 1, "weapon_m4a1_%d", iGlowEntity);
                DispatchKeyValue(iEntity, "targetname", sTargetName);
                GetEntPropVector(iEntity, Prop_Data, "m_vecOrigin", fOrigin);
                
                SetVariantString(sTargetName);
                AcceptEntityInput(iGlowEntity, "SetParent");
                
                TeleportEntity(iGlowEntity, fOrigin, NULL_VECTOR, NULL_VECTOR);
                AcceptEntityInput(iGlowEntity, "ShowSprite");
                AcceptEntityInput(iGlowEntity, "TurnOn");
            }
        }
    }
    
     
    in-com, R1KO и Серый™ нравится это.
  3. in-com

    in-com

    Сообщения:
    12
    Симпатии:
    0
    Большое спасибо за помощь. Не ожидал такого быстрого решения. :beer:

    Добавлено:
    Со спрайтами работает, но не проходит анимация и невозможно повернуть сам спрайт к примеру влево или вправо.
    Пытался добавлять "spawnflags","10" и "angles","90 0 0" но не выходит, спрайт стоит на месте.
    С уважением.

    Добавлено через 16 часов 20 минут
    Пробовал изменять эффект на env_fire_trail - анимация проходит, но размер не изменяется. Изменял параметры "scale" "endwidth" и "startwidth" - не работает...
     
    Последнее редактирование: 17 ноя 2013