Главная | Комментарии | О проекте
Чтение RSS
Суперсайт
Главная Контакты Карта сайта Добавить в избранное
  • Кто OnLine

    Всего на сайте: 9
    Гостей: 2
    Пользователи: - отсутствуют
    Роботы: Yahoo Bot, Yandex Bot, Yandex Bot, Yandex Bot, Yandex Bot, Yandex Bot, crawl Bot

    Опрос пользователей

    Для какого мода Вы пишите плагины?

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 25-10-2011, 00:08 Просмотров: 3095

    is_visible Функция возвращает виден ли объект

    Если вам нужно проверить виден ли один объект другому, то эта функция для вас. Обратите внимание, что проверяется вся видимость с позиции, а не то что игрока перед глазами.

    Инфо из engine.inc:
    //SDK function - checks if an entity is visible to an entity
    native is_visible(entity, target);


    Синтаксис:
    is_visible ( entity, target )


    Тип функции:
    Native

    Пример:
    /* Plugin generated by AMXX-Studio */

    #include <amxmodx>
    #include <amxmisc>
    #include <engine>

    #define PLUGIN "[engine.inc] is_visible"
    #define VERSION "1.0"
    #define AUTHOR "Admin"


    new Ent,g_Model[] = {"models/chick.mdl"}

    public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)
        register_clcmd("say /chick","add_chicken")
        register_clcmd("say /vis","visible")
    }
    public plugin_precache(){
        precache_model(g_Model)
    }
    public visible(id){

        if(is_visible(id,Ent)){
        
            client_print(0,print_chat,"You see ckicken")
            
        }else{
            
            client_print(0,print_chat,"You not see ckicken")
            
        }
        
    }

    public add_chicken(id){
        
        Ent = create_entity("info_target")
        
        if(is_valid_ent(Ent)){
            
            entity_set_model(Ent, g_Model)
            entity_set_size(Ent,Float:{-6.0, -10.0, 0.0},Float:{6.0, 10.0, 18.0})
            new Float:f_Origin[3]
            entity_get_vector(id, EV_VEC_origin, f_Origin)    
            f_Origin[0] += 50.0
            entity_set_origin(Ent, f_Origin)        
            entity_set_int(Ent,EV_INT_solid,SOLID_BBOX)
        
            entity_set_float(Ent, EV_FL_takedamage, DAMAGE_YES)
            
            new Float:angles[3]
            angles[0] = 0.0
            angles[1] = 90.0
            angles[2] = 0.0

            entity_set_vector(Ent,EV_VEC_angles,angles)
            
            drop_to_floor(Ent)
        }
    }


    Описание:
    Проверять работу функции будем на давно замученной курице.
    Зарегистрируем команду say /vis, для выполнения необходимого нам кода, где будем проверять виден ли объект и по результатам выводить результат в виде сообщения.

    Еще раз хочу обратить ваше внимание на то, что проверяется видимость с позиции, а не то что у вас на экране. То есть это вы встали н одном месте и крутитесь по кругу, все что вы видите видит и функция.

    Найти практическое применение данной функции мне пока что не удалось. Может вам пригодится.
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
    is_visible Функция возвращает виден ли объект
    Admin

    30.07.2011
    ICQ: 980500
    Публикаций: 507
    Комментариев: 333
    Репутация: -  56  +

    ВНИМАНИЕ: функция работает не совсем так как я описал, я ошибся (
    кто знает как работает функция, поясните более детально!
    --------------------
    Sonic

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Печально, есть ли функция которая работает по этому описанию?
    Chuvi

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    В общем: пытался я эту функцию использовать, для того, чтобы узнать, виден ли игрок или нет.
    В итоге все печально.Если игрок жив и бегает функция всегда возвращает "0". Если же игрок умер и летает по карте, функция возвращает 0, если игрок где-то за стенкой летает, и 1, если игрок летает в поле видимости.
    Valer4

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Да просто или в названии функции ошиблись или в возвращаемом значении. Кароче воспринимайте её как is_no_visible, когда видишь возвращает 0, а когда не видишь 1
    Valer4

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    А нет, когда игрок жив не важно вижу я его или нет возвращает, что не вижу, когда он мёртв возвращает, что я его вижу

    Всё разобрался, эта функция проверяет наблюдает ли за тобой игрок когда он мёртв
    #include <amxmodx>
    #include <engine>

    public plugin_init()
    {
        register_plugin("test", "1.0", "Valer4")
        register_clcmd("say test", "test")
    }

    public test(id)
    {
        new players[32], num, i, player, name[32]//, count
        get_players(players, num)
        for(i = 0; i < num; i ++)
        {
            player = players[i]
            if(id != player)
            {
                if(is_visible(id, player))
                {
                    count ++
                    get_user_name(player, name, 31)
                    client_print(id, print_chat, "Za vami nabludaet %s", name)
                }
            }
        }
        if(count == 0)
        {
            client_print(id, print_chat, "Za vami nikto ne nabludaet")
        }
    }


    Есть функция is_visible_origin(id, Float:origin) в блок валхаке, координаты там получают get_tr2, но не могу с ней разобраться
    Valer4

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Кароч кому нужна is_visible нормальная
    #include <fakemeta>

    new bool: g_is_visible[32]

    public plugin_init()
    {
        register_forward(FM_TraceLine, "pfw_traceline", 1)
    }

    public pfw_traceline(Float:start[3], Float:end[3], cond, id, tr)
    {
        new Float:vecend[3]
        get_tr2(tr, TR_vecEndPos, vecend)
        if (is_visible_origin(id, vecend) && !g_is_visible[id])
            g_is_visible[id] = true
        else if(g_is_visible[id])
            g_is_visible[id] = false
    }
    }


    И где надо втыкаем
    if(g_is_visible[id])


    Проверял, пашет)))
    Valer4

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Извиняюсь за флуд, всё, что написал выше прошу удалить, когда писал очень спать хотелось)))
    Valer4

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Вот решение проблемы
    Функция is_visible_origin(id, Float:origin)
    Она проверяет видит ли объект с индексом id координаты(объект с координатами) origin.
    origin дробное число, получаем с помощью:
    entity_get_vector(id2, EV_VEC_origin, Origin).
    Пример, проверим видим ли мы ВНИМАНИЕ координаты места на котором стоит игрок с именем TEST
    #include <amxmodx>
    #include <engine>

    public plugin_init() {
        register_plugin("is_visible_origin", "1.0", "Valer4")
        register_clcmd("say check", "check")
    }

    public check(id)
    {
        new id2 = get_user_index("TEST")
        new Float: Origin[3]
        entity_get_vector(id2, EV_VEC_origin, Origin)
        if(is_visible_origin(id, Origin))
            client_print(id, print_chat, "YES")
        else
            client_print(id, print_chat, "NO")
    }
    Valer4

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Не знаю можно ли добавлять сюда такие ссылки, если нет извиняюсь! удалите.
    http://www.amx-x.ru/viewtopic.php?f=9&t=73

    Информация

    Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Наверх

Реклама