Узнать entity по координатам

Mr_panica

XenForo one 💖
Сообщения
931
Реакции
441
Всем привет,
мне нужно сделать из многоразовой кнопки одноразовую.
Есть игра, которая включается по нажатии кнопки, проблема в том, что её можно включить повторно, что может нарушить процесс игры.
Сразу скажу, что у кнопки нет имени :(

Как я вижу решение:
У кнопки есть координаты, можно узнать, какая кнопка находится по этим координатам (индекс) и с ним уже работать (при нажатии деактивировать или удалять)

Увы, я не знаю как проверить, что находится по заданным координатам.

Прошу написать мне решение, желательно с примером)
 
Решение
Как я вижу решение:
У кнопки есть координаты, можно узнать, какая кнопка находится по этим координатам (индекс) и с ним уже работать (при нажатии деактивировать или удалять)
Хреновое решение, кмк
Проще отловить событие нажатия кнопки и удалять (или блочить) её после этого.
C-подобный:
OnPluginStart()
{
    HookEntityOutput("func_button", "OnPressed", OnButtonPressed);
}

public void OnButtonPressed(const char[] output, int caller, int activator, float delay)
{
    AcceptEntityInput(caller, "PressOut");
    AcceptEntityInput(caller, "Lock");
}

или же

public void OnButtonPressed(const char[] output, int caller, int activator, float delay)
{
    AcceptEntityInput(caller, "Kill");
}

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
Как я вижу решение:
У кнопки есть координаты, можно узнать, какая кнопка находится по этим координатам (индекс) и с ним уже работать (при нажатии деактивировать или удалять)
Хреновое решение, кмк
Проще отловить событие нажатия кнопки и удалять (или блочить) её после этого.
C-подобный:
OnPluginStart()
{
    HookEntityOutput("func_button", "OnPressed", OnButtonPressed);
}

public void OnButtonPressed(const char[] output, int caller, int activator, float delay)
{
    AcceptEntityInput(caller, "PressOut");
    AcceptEntityInput(caller, "Lock");
}

или же

public void OnButtonPressed(const char[] output, int caller, int activator, float delay)
{
    AcceptEntityInput(caller, "Kill");
}
 
Решение

Mr_panica

XenForo one 💖
Сообщения
931
Реакции
441
@Grey83, а как узнать, что нажата именно та кнопка?
Мне не нужно делать это с каждой кнопкой на карте, только с одной.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
Mr_panica, тут сложнее: нужно определиться что за кнопка и узначть что у неё уникальное из параметров (хотя может быть у неё будет постоянный индекс и тогда можно сразу задавать хук уже через HookSingleEntityOutput(ent, "OnPressed", OnButtonPressed, true);).
Можно сделать цикл по всем энтити этого класса и делать получение параметров m_iGlobalname, m_iHammerID, m_nModelIndex и m_ModelName для того чтобы определиться с уникальными значениями, по которым будет находится эта энтити.
Ну и сделать отлов события нажатия и выдавать инфу в чат/консоль, чтобы без цикла получить эти данные.
Сообщения автоматически склеены:

сверить её координаты с ранее записанными в конфиг.
Можно и так извратиться, но при этом всё равно придётся делать цикл по энтити на карте.
 

Mr_panica

XenForo one 💖
Сообщения
931
Реакции
441
Всем спасибо!

Сделал топорно, но главное, что работает :D
C-подобный:
#include <sdktools_entinput>
#include <sdktools_entoutput>

public void OnPluginStart()
{
    HookEntityOutput("func_button", "OnPressed", OnButtonPressed);
}


public void OnButtonPressed(const char[] output, int caller, int activator, float delay)
{
    float position[3];
    GetEntPropVector(caller, Prop_Send, "m_vecOrigin", position);
    //PrintToChatAll("Coords: %f %f %f", position[0], position[1], position[2])
    if(position[0] == 3294.709960 && position[1] == 482.000000 && position[2] == -464.000000)
    {
        AcceptEntityInput(caller, "Kill");
    }
}
Можете написать более красивый код)
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
Mr_panica, ты бы ещё добавил проверку на имя карты, чтобы не нагружать лишний раз хуками сервер, когда карта не та.

И да, после запятой достаточно одного нуля вместо шести. 😎
 

NaN

FPE_INTDIV_TRAP
Сообщения
1,513
Реакции
1,487
Вообще такое желательно фиксить изменением карты, но тут уже кто как хочет)
 
Сверху Снизу