Отлов кнопки рядом

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

  1. Kruzi

    Kruzi

    Сообщения:
    160
    Симпатии:
    2
    Как можно отловить находится ли игрок рядом с кнопкой? Не спрашивайте зачем :D
     
  2. gibs

    gibs Фитиль народного волненья

    Сообщения:
    536
    Симпатии:
    133
    Проверить расстояние от игрока до существующих кнопок. Зачем столько глупых вопросов?
     
  3. Kruzi

    Kruzi

    Сообщения:
    160
    Симпатии:
    2
    Ты будешь удивлён(возможно), но Как это сделать в коде? Я себе это примерно так и представлял как ты сказал.
     
  4. gibs

    gibs Фитиль народного волненья

    Сообщения:
    536
    Симпатии:
    133
    @Kruzi, то-есть ты абсолютно ничего не знаешь о сорспавне? Хорошо
    PHP:
    void DistToButtons(int client)
    {
        
    float fClientPos[3], fButtonPos[3];
        
    GetClientAbsOrigin(clientfClientPos);
        
    int iEnt = -1;
        while((
    iEnt FindEntityByClassname(iEnt"func_button")) != -1)
        {
            
    GetEntPropVector(iEntProp_Send"m_vecOrigin"fButtonPos);
            
    PrintToServer("Distance: %f"GetVectorDistance(fClientPosfButtonPos);
        }
    }
    Допустим дам такой пример. Какой план действий дальше?
     
  5. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    831
    Симпатии:
    195
    new Float:pos[2][3]
    GetClientEyePosition(client, pos[0])
    pos[0][2]-=20.0
    decl String:arg[64]
    for(new i=1;i<=2048;i++)
    {
    if(IsValidEntity(i))
    {
    GetEntityClassname(i, arg, 64)
    if(StrEqual(arg, "func_button")
    {
    GetEntPropVector(i, Prop_Send, "m_vecOrigin", pos[1])
    if(GetPosDistance(pos[1], pos[0])<=60.0)
    {
    // Some doing...
    }
    }
    }
    }
     
  6. gibs

    gibs Фитиль народного волненья

    Сообщения:
    536
    Симпатии:
    133
    @inklesspen, что же ты прицепился к этой цифре 2048? Забудь о ней, никогда не трогай. Слишком большой обход цикла.
     
  7. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    831
    Симпатии:
    195
    Но ведь 2048 - максимальный индекс сущностей, вдруг кнопка имеет индекс 2047? или 2048? Надо все проверить... Или же через FindEntityByName, но я не вкурсе, как с ней работать корректно, потом научусь.
     
  8. gibs

    gibs Фитиль народного волненья

    Сообщения:
    536
    Симпатии:
    133
    @inklesspen, делай всё в минимум действий, минимум переменных. Вот этот бред местных профессоров о том как объявлять переменные и прочую чепуху даже не слушай.
     
  9. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    831
    Симпатии:
    195
    Но иногда без такого цикла не обойтись... Если мой код пихать в OnPlayerRunCmd, то да, надо минимум нагрузки сделать, например цикл 2048 заменить на FindEntityByName.
     
  10. gibs

    gibs Фитиль народного волненья

    Сообщения:
    536
    Симпатии:
    133
    @inklesspen, без такого цикла обойтись всегда. Не неси бред.
     
  11. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    831
    Симпатии:
    195
    Возможно... Но попробуй привести пример, где не обойтись без этого...
     
  12. gibs

    gibs Фитиль народного волненья

    Сообщения:
    536
    Симпатии:
    133
    @inklesspen, без нескольких тысяч ненужный действий? Я не совсем понимаю суть вопроса. Спрашивай конкретней.
     
  13. AlmazON

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

    Сообщения:
    4.509
    Симпатии:
    1.962
    Оффтоп
    Когда нужно найти по совпадению, то FindEntityByClassname не поможет. Например, на DM нужно найти и удалить всё оружие и дефузы на земле.
     
  14. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    831
    Симпатии:
    195
    Проехали... Тогда можешь подсказать, как обойти эти ненужные циклы?
     
  15. gibs

    gibs Фитиль народного волненья

    Сообщения:
    536
    Симпатии:
    133
    @AlmazON, decl уже не совсем даже актуален. Лично я давно использую новый синтаксис. Хотя и тут есть свои приколы. Вот цитата с вики ам:
    В общем, смысл прост. При объявлении через decl массив не заполняется нулями, в отличии от new. По-этому рекомендуют большие массивы в функциях с частым вызовом объявлять через decl. В OnGameFrame например. Не стоит на этом делать большое ударение, а тут это считают за святое.
    Ну и даже приписку сделали, чтобы не сильно фанатели, что при единичных переменных (не при массивах) объявление через decl почти никогда не приносит пользы.
    Вообще половина замечаний просто нелепая, как правило. А нормальные подсказки не совсем съедают. Взять случай с Филипком и обходом кв. Или я тут как-то Чёрной Вдове пытался объяснить как работает профайлер. На этом форуме обычно такой тёмный лес. Хотя некоторые люди попросту тупые.