Заменить/Дать свойства entity на карте

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

  1. Kruzi

    Kruzi

    Сообщения:
    160
    Симпатии:
    2
    Возможно ли заменить мяч на карте, чтобы он стал легче или прыгучей, чтоли. Если нужно, могу сделать видео как сейчас и как должно быть(с другой карты). Мяч спавнится постоянно в одном месте.
     
  2. FrozDark

    FrozDark Команда сайта HLMod Модератор

    Сообщения:
    1.761
    Симпатии:
    1.915
    entity classname и его координаты спавна дай
     
  3. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.566
    Симпатии:
    1.988
    PHP:
    SetEntityGravity(entityFloat:amount);
    Не?
     
  4. Kruzi

    Kruzi

    Сообщения:
    160
    Симпатии:
    2
    Хорошо, а как мне это присвоить именно к тому мячу к которому нужно?
     
  5. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.566
    Симпатии:
    1.988
    Оффтоп
     
  6. Kruzi

    Kruzi

    Сообщения:
    160
    Симпатии:
    2
    Я вроде бы видел плагин, что показывает classname и координаты. Не подскажешь название?
     
  7. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.566
    Симпатии:
    1.988
    Оффтоп
     
  8. Kruzi

    Kruzi

    Сообщения:
    160
    Симпатии:
    2
    Как я пойму что это нужный мне предмет?
     
  9. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.566
    Симпатии:
    1.988
    Оффтоп
    Для "лентяев":
    [​IMG]
    PHP:
    #include <sdktools>

    public OnPluginStart() RegConsoleCmd("sm_lowgravity"SetLowGravity"Установить объекту на прицеле низкую гравитацию.");

    public 
    Action:SetLowGravity(clientargs)
    {
        if (
    client)
        {
            
    decl entity;
            if ((
    entity GetClientAimTarget(clientfalse)) != -1)
            {
                
    SetEntityGravity(entity0.7);
                
    PrintToChat(client"\x01Объекту \x03%i \x01установлена уменьшенная гравитация."entity);
            }
        }
        return 
    Plugin_Handled;
    }

    public 
    OnGameFrame()
    {
        static 
    String:classname[32], entity;
        for (new 
    1<= MaxClients; ++i)
        {
            if (
    IsClientInGame(i) && (entity GetClientAimTarget(ifalse)) != -1)
            {
                
    GetEdictClassname(entityclassnamesizeof(classname));
                
    PrintHintText(i"Вы смотрите на\nEntity index: %i classname: %s"entityclassname);
            }
        }
    }

    //public OnConfigsExecuted() ServerCommand("sv_hudhint_sound 0");
     
  10. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.000
    Симпатии:
    2.992
    @Kruzi, индекс у мяча будет разным после каждого создания. тебе через FindEntityByClassname нужно искать свой мяч
     
  11. Alnet

    Alnet

    Сообщения:
    39
    Симпатии:
    0
    В начале каждого раунда ищи индекс мяча по его стартовой координате.
     
  12. Kruzi

    Kruzi

    Сообщения:
    160
    Симпатии:
    2
    Не работает. В начале видео так как я хочу чтобы было, а дальше как на самом деле
     
  13. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    @Kruzi, classname мяча какой?
     
  14. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.566
    Симпатии:
    1.988
    Ясное дело. Такая установка работает далеко не для всего и вся. Это лишь пример, как узнать необходимые данные и произвести над ним мгновенное действие. Само же действие нужно "подбирать" в func_physbox - Valve Developer Community, в частности, смотри Physics Override Parameters.
     
  15. Kruzi

    Kruzi

    Сообщения:
    160
    Симпатии:
    2
    func_physbox.
    Кстати, на игроках гравитация уменьшается
     
  16. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.566
    Симпатии:
    1.988
    Дело ясное, это для них обычная функция.
    Вообще, если не хочешь заморачиваться, можешь просто удалить старый мяч и создать новый по теме [CS: Source] - Soccer Ball 1.2, вырезав нужный код.
     
  17. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    Код:
            int ball_entity = FindEntityByClassname(-1, "func_physbox");
            if (ball_entity != 0)
            {
                SetEntityGravity(ball_entity, 0.7);
            }
    --- Добавлено позже ---
    Еще как вариант.
    Код:
    #pragma semicolon 1
    #include <sdkhooks>
    #pragma newdecls required
       
    #if SOURCEMOD_V_MAJOR >= 1 && (SOURCEMOD_V_MINOR >= 8 || SOURCEMOD_V_MINOR >= 7 && SOURCEMOD_V_RELEASE >= 2)
    public void OnEntityCreated(int entity, const char[] classname)
    #else
    public int OnEntityCreated(int entity, const char[] classname)
    #endif
    {
        if (IsValidEdict(entity) && IsValidEntity(entity))
        {
            if (StrEqual(classname, "func_physbox"))
            {
                SDKHook(entity, SDKHook_OnTakeDamage, OnEntityTakeDamage);
            }
        }
    }
    
    public Action OnEntityTakeDamage(int client, int &attacker, int &inflictor, float &damage, int &damagetype)
    {
        if (IsValidEdict(client) && IsValidEntity(client))
        {
            SetEntityGravity(client, 0.7);
        }
        return Plugin_Continue;
    }
     
    Последнее редактирование: 27 май 2016
  18. Kruzi

    Kruzi

    Сообщения:
    160
    Симпатии:
    2
    Оба варианта не помогли. Первый делал так:
    PHP:
    #include <sdktools>

    public OnPluginStart() RegConsoleCmd("sm_lg"SetLowGravity"Установить объекту на прицеле низкую гравитацию.");

    public 
    Action:SetLowGravity(clientargs)
    {
        if (
    client)
        {
            
    int ball_entity FindEntityByClassname(-1"func_physbox");
            if ((
    ball_entity GetClientAimTarget(clientfalse)) != -1)
            {
                  if (
    ball_entity != 0)
            {
                      
    SetEntityGravity(ball_entity0.01);
            }
            
    PrintToChat(client"\x01Объекту \x03%i \x01установлена уменьшенная гравитация."ball_entity);
            }
        }
        return 
    Plugin_Handled;
    }

    public 
    OnGameFrame()
    {
        static 
    String:classname[32], entity;
        for (new 
    1<= MaxClients; ++i)
        {
            if (
    IsClientInGame(i) && (entity GetClientAimTarget(ifalse)) != -1)
            {
                
    GetEdictClassname(entityclassnamesizeof(classname));
                
    PrintHintText(i"Вы смотрите на\nEntity index: %i classname: %s"entityclassname);
            }
        }
    }
     
  19. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.566
    Симпатии:
    1.988
    А не пробовал просто с переменными поиграться?
    Код:
    phys_pushscale 900 
    phys_timescale 1
    sv_turbophysics 0
     
  20. Kruzi

    Kruzi

    Сообщения:
    160
    Симпатии:
    2
    Пробовал - без результатов