Как поднять своей ENT, с земли, любое ENT

Тема в разделе "Общие вопросы", создана пользователем tonline_kms65, 2 окт 2016.

  1. tonline_kms65

    tonline_kms65 Read Only

    Сообщения:
    77
    Симпатии:
    10
    Всем здравствуйте. Такой вот вопросик.
    Как можно подобрать с земли какую-либо ентитьку своей ЕНТ (Дроном). Например гранату или бочку или ....... (т.е. подбирать ENT созданные не мной).
    GetEnt.jpg
    Проще говоря, я хочу сделать возможность моей ENT(Дрон) подбирать с земли валяющиеся не мои ENT. Появится возможность использования подобранных ENT.
    Варианты конечно есть, но они все какие-то замудренные. Кто что может предложить?
     
  2. Крабос

    Крабос

    Сообщения:
    45
    Симпатии:
    21
    SDKHook_StartTouchPost на дроне,а там проверяешь граната ли ентити,с которой он столкнулся
    если да,то удалить гранату и выдаешь себе.
     
    Последнее редактирование: 2 окт 2016
  3. tonline_kms65

    tonline_kms65 Read Only

    Сообщения:
    77
    Симпатии:
    10
    Не совсем тебя понял. Редко с такими хуками работаю.
    Вот смотри:
    public Action:CreateENT(client, args){
    ent = CreateEntityByName("prop_physics_override"); // создал ENT (Дрона)
    ....
    ..
    SDKHook(ent, SDKHook_StartTouchPost, Touch);
    //Хук.
    }

    public Action:Touch(entity, other) { обработка Хука (Как то все не то)
    PrintToChatAll("Прикоснулся к ENT" );
    }

    Или с самого начала нужно всем ENT, которые могут быть использованы Дроном дать этот SDKHook(ent, SDKHook_StartTouchPost, Touch);
    Типа такого определения по имени класса
    public OnPluginStart() {
    new entity = -1;
    while((entity = FindEntityByClassname(entity, "weapon_hegrenade")) != -1) {
    // И уже этим ENT дать Hook
    SDKHook(entity, SDKHook_StartTouchPost, OnEntityTouch);
    }
    }
     
  4. CrazyHackGUT

    CrazyHackGUT Меня здесь нет

    Сообщения:
    854
    Симпатии:
    534
    Когда твой Дрон прикоснулся к Энтити, смотришь, какая это энтити (GetEntityClassname()). Сверяешь имя энтити. Если имя совпадает с именем энтити гранаты, например, то удаляешь ее и спавнишь игроку, как тебе выше подсказали.
    Еще можно не удалять, и не плодить тонну условий, а просто сверить начало имени. Если начинается имя энтити на weapon_, то телепортируешь ее к игроку.
     
  5. Крабос

    Крабос

    Сообщения:
    45
    Симпатии:
    21
    Этот способ работает?
    Если нет,то убери "Action:",так как TouchPost не возвращает значения
     
  6. tonline_kms65

    tonline_kms65 Read Only

    Сообщения:
    77
    Симпатии:
    10
    Всем спасибо. Разобрался. Для интересующихся:
    Даём энтитькам, которые предполагаем использовать, Hook по класснэйму (имени класса) при их создании:

    public OnEntityCreated(entity, const String:classname[]) {
    if(StrEqual(classname, "weapon_hegrenade")) {
    //при создании, например, гранаты.
    SDKHook(entity, SDKHook_StartTouchPost, OnEntityTouch);
    }
    }

    В моём примере граната создается при запуске карты. Естественно создаётся граната не мной.
    И уже при прикосновении к гранате хоть игроком хоть созданной игроком ENT хук работает. Может и еще какой способ есть.
    По мне этот - проще просто некуда.
    --- Добавлено позже ---
    :derisive: Спасибо конечно, но вопрос был другой. Я немного неправильно задал вопрос.
    А это уже другая тема - это уже обработка хука.
     
    Последнее редактирование: 2 окт 2016
    Danyas нравится это.
  7. CrazyHackGUT

    CrazyHackGUT Меня здесь нет

    Сообщения:
    854
    Симпатии:
    534
    Код лучше вообще оборачивать в тег CODE
     
  8. tonline_kms65

    tonline_kms65 Read Only

    Сообщения:
    77
    Симпатии:
    10
    Еще один вопросик. Никогда таким не задавался, вот пришлось.
    Как получить пользователя ENT на текущий момент (не создателя!!!)?

    Что там оборачивать. Две строки. Большой конечно в спойлер замотаю.
     
    Последнее редактирование: 2 окт 2016
  9. Крабос

    Крабос

    Сообщения:
    45
    Симпатии:
    21
    GetEntPropEnt(ent, Prop_Send, "m_hOwner")
    или
    GetEntPropEnt(ent, Prop_Send, "m_hOwnerEntity")
     
  10. tonline_kms65

    tonline_kms65 Read Only

    Сообщения:
    77
    Симпатии:
    10
    m_hOwnerEntity Не то. Это создатель.
    m_hOwner Этот оффсет вообще не знаю, нет такого.
     
  11. CrazyHackGUT

    CrazyHackGUT Меня здесь нет

    Сообщения:
    854
    Симпатии:
    534
    Когда код находится под тегом кода, то сохраняется табуляция, и его удобнее читать, соответственно.
    PHP:
    public void OnPluginStart() {
        
    PrintToServer("Родная табуляция");
        while (
    true) {
            break;
        }
    }
    Энтити уже у игрока, полагаю?
     
  12. tonline_kms65

    tonline_kms65 Read Only

    Сообщения:
    77
    Симпатии:
    10
    Да. Ент уже у игрока.
     
  13. CrazyHackGUT

    CrazyHackGUT Меня здесь нет

    Сообщения:
    854
    Симпатии:
    534
  14. tonline_kms65

    tonline_kms65 Read Only

    Сообщения:
    77
    Симпатии:
    10
    @CrazyHackGUT,
    Это не оружие. Это ENT Дрон. Управляемый игроком. Я хочу дополнить его возможности умением подбирать с земли разного рода ентитьки. Например гранаты. Потом кидать их можно с высоты. Это как пример. Можно игрока утащить для прикола.
    Аттачи на модели Дрона я подготовил. Даже 3 аттача. На всякий.
    Можно по идее записывать строкой id пользователя в глобалнэйм (имя) Дрона. Т.е. в саму ENT Дрон. Но у меня имя уже используется. Это из простых вариантов. Геморных вариантов много. Я с ними всегда успею.
     
    Последнее редактирование: 2 окт 2016
  15. CrazyHackGUT

    CrazyHackGUT Меня здесь нет

    Сообщения:
    854
    Симпатии:
    534
    @tonline_kms65, тогда как вариант создать массив и в него пихать энтити дронов.
    PHP:
    int Drones[MAXPLAYERS+1];
    // ...
    // При создании дрона
    Drones[client] = DroneEntity;
     
  16. tonline_kms65

    tonline_kms65 Read Only

    Сообщения:
    77
    Симпатии:
    10
    Ты не повериш. Я так и делаю.
    Ребятки дайте какой нибудь стоящий совет.
     
  17. CrazyHackGUT

    CrazyHackGUT Меня здесь нет

    Сообщения:
    854
    Симпатии:
    534
    @tonline_kms65, тебе надо игрока достать по номеру дрона, или что?
    PHP:
    public int GetPlayerByDrone(int Drone) {
        for (
    int Player 1Player<=MaxClientsPlayer++) {
            if (
    IsClientInGame(Player) && Drones[Player] == Drone) return Player;
        }
        return -
    1;
    }
    Нормально объясняй, чего хочешь, и будешь получать нормальные ответы.
     
  18. Grey83

    Grey83

    Сообщения:
    334
    Симпатии:
    96
    Может через AcceptEntityInput(dest, "SetParent", activator, caller, outputid) попробовать?
    А если ты хочешь чтобы у тебя энтити подвешивались как на оружейной подвеске, то можно просто телепортировать её предварительно к нужной точке модели дрона, а потом уже прикреплять.
    Ты же хочешь чтобы просто дрон перетаскивал модельки оружия и мог их сбрасывать?
    Правда, чтобы сбрасывать гранаты так, чтобы они взрывались, нужно ещё как-то активировать их после сброса.
     
  19. tonline_kms65

    tonline_kms65 Read Only

    Сообщения:
    77
    Симпатии:
    10
    Я сам не могу толком объяснить что именно требуется. Попробую.
    Я повторюсь - как геморрно получить самого себя (если я активировал Дрона) я знаю. Но это не то о чем я спрашиваю.
    Я предполагаю что в свойствах созданной ентити должен записываться как создатель этой ент (m_hOwnerEntity), так и текущий пользователь этой самой ент. Вот я и пытаюсь получить пользователя из свойств ENT (Prop_Data, Prop_Send).
    Пользователи этой ENT могут меняться, могут не меняться. Создатель остается всегда один и тот же и он будет всегда.
    Если Дрон никто ни разу не активировал то пользователя нет =-1.
    Если Дрон свободен и его кто то использовал - пользователем будет последний игрок который его активировал.
    Если Дрон занят - пользователь естественно тот игрок который сейчас Дрона использует.
    Как то так.

    Как пример - дешевый вариант - при активации Дрона записываю в поле name Дрона id пользователя. Естественно при следующей активации Дрона поле name будет перезаписываться новым id пользователя. Получить значение из поля name проблем не составит. Вообще никакого геморроя. См. скрин в хаммере.
    vopros.jpg
    К сожалению у меня это поле уже используется.

    Так вот мне нужен именно пользователь из самой ENT. Вот это возможно или нет?
     
    Последнее редактирование: 2 окт 2016
  20. CrazyHackGUT

    CrazyHackGUT Меня здесь нет

    Сообщения:
    854
    Симпатии:
    534
    @tonline_kms65, задавай своему дрону овнера вместо "создателя". Ничто не мешает вручную это делать.
    PHP:
    SetEntPropEnt(DroneProp_Send"m_hOwnerEntity"client);
     
    Последнее редактирование: 2 окт 2016