Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Вопрос Получение количество ентити на карте

:roflanEbalo:

C++:
Expand Collapse Copy
    IEntitySystem* pEntitySystem = gEnv->GetIEntitySystem();

    if (!memory::valid(pEntitySystem))
        return;

    IEntityIt* pEntityIterator = pEntitySystem->GetEntityIterator();

    if (!memory::valid(pEntityIterator))
        return;

    IGameFramework* pGameFrameWork = IGameFramework::Singleton();

    if (!memory::valid(pGameFrameWork))
        return;

    IActorSystem* pActorSystem = pGameFrameWork->GetIActorSystem();

    if (!memory::valid(pActorSystem))
        return;

    IActor* localPlayer;
    pGameFrameWork->GetClientActor(&localPlayer);

    if (!memory::valid(localPlayer) || !localPlayer->GetEntity() || localPlayer->IsDead())
        return;

    int32_t entityCount = 0;

    for (; IEntity * pEntity = pEntityIterator->Next();)
    {
        if (!memory::valid(pEntity))
            continue;
         
        IActor* targetPlayer = pActorSystem->GetActor(pEntity->GetRawId());
     
        if (targetPlayer && targetPlayer->GetEntity())
        {
            if (!memory::valid(targetPlayer))
                continue;

            if (targetPlayer->IsDead())
                continue;

            IEntity* targetEntity = targetPlayer->GetEntity();

            if (!memory::valid(targetEntity))
                continue;

            auto localId = localPlayer->GetEntity()->GetRawId();
            auto targetId = targetEntity->GetRawId();

            if (localId == targetId)
                continue;
             
            entityCount += 1;
        }
    }

    if (memory::valid(pEntityIterator))
        pEntityIterator->Release();
 
Последнее редактирование:
:roflanEbalo:

C++:
Expand Collapse Copy
    IEntitySystem* pEntitySystem = gEnv->GetIEntitySystem();

    if (!memory::valid(pEntitySystem))
        return;

    IEntityIt* pEntityIterator = pEntitySystem->GetEntityIterator();

    if (!memory::valid(pEntityIterator))
        return;

    IGameFramework* pGameFrameWork = IGameFramework::Singleton();

    if (!memory::valid(pGameFrameWork))
        return;

    IActorSystem* pActorSystem = pGameFrameWork->GetIActorSystem();

    if (!memory::valid(pActorSystem))
        return;

    IActor* localPlayer;
    pGameFrameWork->GetClientActor(&localPlayer);

    if (!memory::valid(localPlayer) || !localPlayer->GetEntity() || localPlayer->IsDead())
        return;

    int32_t entityCount = 0;

    for (; IEntity * pEntity = pEntityIterator->Next();)
    {
        if (!memory::valid(pEntity) || !pEntity)
            continue;
         
        IActor* targetPlayer = pActorSystem->GetActor(pEntity->GetRawId());
     
        if (targetPlayer && targetPlayer->GetEntity())
        {
            if (!memory::valid(targetPlayer))
                continue;

            if (targetPlayer->IsDead())
                continue;

            IEntity* targetEntity = targetPlayer->GetEntity();

            if (!memory::valid(targetEntity))
                continue;

            auto localId = localPlayer->GetEntity()->GetRawId();
            auto targetId = targetEntity->GetRawId();

            if (localId == targetId)
                continue;
             
            entityCount += 1;
        }
    }

    if (memory::valid(pEntityIterator))
        pEntityIterator->Release();
это ты получил не кол-во ентити, а кол-во акторов что не сдохли.

ну и кринж
if (!memory::valid(targetEntity)) continue;

if (!targetEntity) continue;

да и твой предложенный код это бесполезный мусор
 
это ты получил не кол-во ентити, а кол-во акторов что не сдохли.

ну и кринж
if (!memory::valid(targetEntity)) continue;

if (!targetEntity) continue;

да и твой предложенный код это бесполезный мусор
Ты в шары ебешься или у тебя параша в глазах застряла? Нахуя челу количество ентити что сдохло, гений хуев бля, кодецкий работает, верное количество отображает, дабл проверка ток лишняя, показывай свое решение либо съеби в тред по майну плс
 
получить количество ентити на карте

верное количество отображает
актор != ентити
будь умнее чертик
Код:
Expand Collapse Copy
entityCount++;


if (!memory::valid(pEntity) || !pEntity) continue;
ну да ну да. цикл по твоему не проверяет это? и зачем тебе две одинаковых проверки?


for (; IEntity * pEntity = pEntityIterator->Next();)

чем тебе while не устроил?
Код:
Expand Collapse Copy
while (IEntity * pEntity = pEntityIterator->Next())

ты бы еще так сделал
Код:
Expand Collapse Copy
for (IEntity * pEntity = pEntityIterator->Next(); pEntity; pEntity  = pEntityIterator->Next())


удали это гавно чтоб над тобой не стебались, если есть фреймворк, то и всё это гавно тоже.
if (!memory::valid(pEntityIterator)) return;
if (!memory::valid(pGameFrameWork)) return;
if (!memory::valid(pActorSystem)) return;

в твоем примере 95% кода мусор!
auto localId = localPlayer->GetEntity()->GetRawId(); auto targetId = targetEntity->GetRawId();

вот эта строка передает тебе привет
Код:
Expand Collapse Copy
localPlayer->GetEntityId()
if (targetPlayer && targetPlayer->GetEntity()) { if (!memory::valid(targetPlayer)) continue;
у тебя наверное вообще нет мозга.
у тебя там понос был когда ты на каждой строке ентити чекаешь?

ты по ентити актора получаешь его же, твой интеллект в минус улетел!
 
Последнее редактирование:
так уж и быть сокращу твой код, который серавно не соответствует теме. (так как тут нет конкретики чего ему надо)

C++:
Expand Collapse Copy
int GetCount(IActor* localPlayer)
{
    int actorCount = 0;

    IEntityIt* pEntityIterator = gEnv->pEntitySystem->GetEntityIterator();
    while (IEntity * pEntity = pEntityIterator->Next())
    {
        if (pEntity->IsHidden()) continue;
        if (pEntity->GetId() == localPlayer->GetEntityId()) continue;

        IActor* targetPlayer = pActorSystem->GetActor(pEntity->GetRawId());
        if (!targetPlayer || targetPlayer->IsDead()) continue;

        actorCount++;
    }
    pEntityIterator->Release();

    return actorCount;
}

и это не кол-во ентити на карте, а кол-во акторов что не сдохли. тут тебе нужен был не entity iterator, а actor iterator
 
будь умнее чертик
Код:
Expand Collapse Copy
entityCount++;
Код:
Expand Collapse Copy
++EntityCount
Нужно же получать количество при первом переборе, а то получим первый раз 0. И что мы с ним будем делать?
2024-02-27_12-57-19.png
 
Последнее редактирование:
актор != ентити
Твои познания супер велики :CoolStoryBob:

будь умнее чертик
Код:
Expand Collapse Copy
entityCount++;

Хочу += 1 юзать и хули ты мне сделаешь?

чем тебе while не устроил?
Код:
Expand Collapse Copy
while (IEntity * pEntity = pEntityIterator->Next())

Хочу через фор, мне твой вайл в хуй не дул, суть такая же, иди учи мат часть, гейний хуев :roflanEbalo:
так уж и быть сокращу твой код, который серавно не соответствует теме. (так как тут нет конкретики чего ему надо)

C++:
Expand Collapse Copy
int GetCount(IActor* localPlayer)
{
    int actorCount = 0;

    IEntityIt* pEntityIterator = gEnv->pEntitySystem->GetEntityIterator();
    while (IEntity * pEntity = pEntityIterator->Next())
    {
        if (pEntity->IsHidden()) continue;
        if (pEntity->GetId() == localPlayer->GetEntityId()) continue;

        IActor* targetPlayer = pActorSystem->GetActor(pEntity->GetRawId());
        if (!targetPlayer || targetPlayer->IsDead()) continue;

        actorCount++;
    }
    pEntityIterator->Release();

    return actorCount;
}

и это не кол-во ентити на карте, а кол-во акторов что не сдохли. тут тебе нужен был не entity iterator, а actor iterator
И хули? Ты просто убрал чеки на валид птр + убрал лишнюю хуетень с айдишниками тем самым урезав код, суть не поменялась, кол-во ентити один хуй получается, клоун
Код:
Expand Collapse Copy
++EntityCount
Нужно же получать количество при первом переборе, а то получим первый раз 0. И что мы с ним будем делать?Посмотреть вложение 271479
Пиздец ты попкорн...
 
Последнее редактирование:
И хули? Ты просто убрал чеки на валид птр + убрал лишнюю хуетень с айдишниками тем самым урезав код, суть не поменялась, кол-во ентити один хуй получается, клоун
кол-во ентити? ты уверен? у тебя только ентити что имеют актор!
 
Нужно же получать количество при первом переборе, а то получим первый раз 0. И что мы с ним будем делать?
в твоем использовании это одно и тоже, отличается то что они возвращают. (например: int result = i++;)
 
в твоем использовании это одно и тоже, отличается то что они возвращают. (например: int result = i++;)
Разница есть. Если мы будем использовать I++, то при первом переборе ентити, это переменная будет равна 0. То есть по сути мы убьем 1 бота, а переменная будет равна 0.
Если нам нужно например отключать хиты после 4 убийств, то у некоторых возникнет путанница, так как надо будет писать if(I == 3). Зачем усложнять себе жизнь?
Так же может быть проблема, если например после 1 хита надо будет что то делать, то есть if(I==0). И как ты с этим работать будешь?
 
Последнее редактирование:
Разница есть. Если мы будем использовать I++, то при первом переборе ентити, это переменная будет равна 0. То есть по сути мы убьем 1 бота, а переменная будет равна 0.
Если нам нужно например отключать хиты после 4 убийств, то у некоторых возникнет путанница, так как надо будет писать if(I == 3). Зачем усложнять себе жизнь?
Так же может быть проблема, если например после 1 хита надо будет что то делать, то есть if(I==0). И как ты с этим работать будешь?
ты несешь абсолютную чепуху.

C++:
Expand Collapse Copy
int i = 0;
i++;
printf("i %d");//i 1

C++:
Expand Collapse Copy
int i = 0;
++i;
printf("i %d");//i 1

C++:
Expand Collapse Copy
int i = 0;
int y = ++i;
printf("i %d y %d");//i 1 y 1

C++:
Expand Collapse Copy
int i = 0;
int y = i++;
printf("i %d y %d");//i 1 y 0
 
Разница есть. Если мы будем использовать I++, то при первом переборе ентити, это переменная будет равна 0. То есть по сути мы убьем 1 бота, а переменная будет равна 0.
Если нам нужно например отключать хиты после 4 убийств, то у некоторых возникнет путанница, так как надо будет писать if(I == 3). Зачем усложнять себе жизнь?
Так же может быть проблема, если например после 1 хита надо будет что то делать, то есть if(I==0). И как ты с этим работать будешь?
Так компилятор это все превратит в inc ax, или ты жаваскриптовых давалок насмотрелся и решил что их принципы работают везде ?
 
C++:
Expand Collapse Copy
int i = 0;
int c = 0;
int a = ++i;
int b = c++;
a != b, b = 0, a = 1
Откуда ты вылез? АнриелКдр
У тебя настолько истощились клетки мозга из за читов на Варфейс, что ты не можешь понять, что ++i и i++ отличаются только возвращаемым значением, то есть
C++:
Expand Collapse Copy
int i = 0;
int c = 0;
int a = ++i;
int b = c++;
a != b, b = 0, a = 1

У тебя настолько истощились клетки мозга из за читов на Варфейс, что ты не можешь понять, что ++i и i++ отличаются только возвращаемым значением, то есть
Так же советую тебе хотя бы включить свои клетки мозга и залезть в интернет, но, видимо, к сожалению, ты не умеешь ими пользоваться
 
C++:
Expand Collapse Copy
int i = 0;
int c = 0;
int a = ++i;
int b = c++;
a != b, b = 0, a = 1
А я не то же самое написал? Обезьяна ты умственно отсталая
А я не то же самое написал? Обезьяна ты умственно отсталая
При первом переборе по циклу, у тебя будет i = 0. Ну так вопрос тебе долбоебу. Как мы будем с ним работать? Допустим нам надо при 1 килле отрубить мультик.
Но ты же обезьяна доказываешь мне, что хуй разница
 
А я не то же самое написал? Обезьяна ты умственно отсталая

При первом переборе по циклу, у тебя будет i = 0. Ну так вопрос тебе долбоебу. Как мы будем с ним работать? Допустим нам надо при 1 килле отрубить мультик.
Но ты же обезьяна доказываешь мне, что хуй разница
БЛЯТЬ, Я ЩАС СРУ СИЖУ НА ТУАЛЕТЕ ЕБУЧЕМ, И НАСТОЛЬКО ТЫ ТУПОЙ, ЧТО Я ЩАС ГОВНО ЖРАТЬ СТАНУ, ТЫ - ИМБЕЦИЛ ЕБАНЫЙ, ИДИ УБЕЙСЯ ЖИВОТНОЕ ЕБАНОЕ, Я ДЛЯ ТЕБЯ ЩАС СОЧИНЕНИЕ НАПИШУ ХУЙЛАН С ЭТОГО ЕБУЧЕГО ТЕЛЕФОНА.

Код:
Expand Collapse Copy
int GetCount(IActor* localPlayer)
{
    int actorCount = 0;

    IEntityIt* pEntityIterator = gEnv->pEntitySystem->GetEntityIterator();
    while (IEntity * pEntity = pEntityIterator->Next())
    {
        if (pEntity->IsHidden()) continue;
        if (pEntity->GetId() == localPlayer->GetEntityId()) continue;

        IActor* targetPlayer = pActorSystem->GetActor(pEntity->GetRawId());
        if (!targetPlayer || targetPlayer->IsDead()) continue;

        actorCount++;
    }
    pEntityIterator->Release();

    return actorCount;
}

БЕРЕМ ЭТОТ ЕБУЧИЙ КОД И СМОТРИМ СВОИМИ ОБКУРЕННЫМИ ГЛАЗАМИ, ЧТО ТУТ У НАС ПЕРЕМЕННОЙ actorCount НЕ ПРИСВАЕВАЕТСЯ ЗНАЧЕНИЕ ЧЕРЕЗ ЕБУЧИЙ ИНКРЕМЕНТ, ПОНИМАЕШЬ СЛОВА ВООБЩЕ МОИ? Я ОЧЕНЬ НАДЕЮСЬ. ДАЛЬШЕ Я ИЗМЕНЮ ДАННЫЙ КОД, ЧТОБЫ ДО ТВОЕГО ХУЕВОГО УМА ДОШЛО, ЧТО ТЫ ЕБУЧИЙ ДЕБИЛ.

Код:
Expand Collapse Copy
int GetCount(IActor* localPlayer)
{
    int actorCount = 0;
    int actorCountInc = 0;
    IEntityIt* pEntityIterator = gEnv->pEntitySystem->GetEntityIterator();
    while (IEntity * pEntity = pEntityIterator->Next())
    {
        if (pEntity->IsHidden()) continue;
        if (pEntity->GetId() == localPlayer->GetEntityId()) continue;

        IActor* targetPlayer = pActorSystem->GetActor(pEntity->GetRawId());
        if (!targetPlayer || targetPlayer->IsDead()) continue;

        actorCount =
        actorCountInc++;
    }
    pEntityIterator->Release();

    return actorCount;
}
ВОТ ТУТ НАХУЙ, УЖЕ МОЖНО БЛЯТЬ ПОСПОРИТЬ НАСЧЁТ ХУЕВОГО КОДА, ПОЖАЛУЙСТА, БЛЯТЬ, НЕ ПИШИ МНЕ ХУЙНЮ, И ЕСЛИ ЭТО РОФЛ, ТО ОН ХУЕВЫЙ
БЛЯТЬ, Я ЩАС СРУ СИЖУ НА ТУАЛЕТЕ ЕБУЧЕМ, И НАСТОЛЬКО ТЫ ТУПОЙ, ЧТО Я ЩАС ГОВНО ЖРАТЬ СТАНУ, ТЫ - ИМБЕЦИЛ ЕБАНЫЙ, ИДИ УБЕЙСЯ ЖИВОТНОЕ ЕБАНОЕ, Я ДЛЯ ТЕБЯ ЩАС СОЧИНЕНИЕ НАПИШУ ХУЙЛАН С ЭТОГО ЕБУЧЕГО ТЕЛЕФОНА.

Код:
Expand Collapse Copy
int GetCount(IActor* localPlayer)
{
    int actorCount = 0;

    IEntityIt* pEntityIterator = gEnv->pEntitySystem->GetEntityIterator();
    while (IEntity * pEntity = pEntityIterator->Next())
    {
        if (pEntity->IsHidden()) continue;
        if (pEntity->GetId() == localPlayer->GetEntityId()) continue;

        IActor* targetPlayer = pActorSystem->GetActor(pEntity->GetRawId());
        if (!targetPlayer || targetPlayer->IsDead()) continue;

        actorCount++;
    }
    pEntityIterator->Release();

    return actorCount;
}

БЕРЕМ ЭТОТ ЕБУЧИЙ КОД И СМОТРИМ СВОИМИ ОБКУРЕННЫМИ ГЛАЗАМИ, ЧТО ТУТ У НАС ПЕРЕМЕННОЙ actorCount НЕ ПРИСВАЕВАЕТСЯ ЗНАЧЕНИЕ ЧЕРЕЗ ЕБУЧИЙ ИНКРЕМЕНТ, ПОНИМАЕШЬ СЛОВА ВООБЩЕ МОИ? Я ОЧЕНЬ НАДЕЮСЬ. ДАЛЬШЕ Я ИЗМЕНЮ ДАННЫЙ КОД, ЧТОБЫ ДО ТВОЕГО ХУЕВОГО УМА ДОШЛО, ЧТО ТЫ ЕБУЧИЙ ДЕБИЛ.

Код:
Expand Collapse Copy
int GetCount(IActor* localPlayer)
{
    int actorCount = 0;
    int actorCountInc = 0;
    IEntityIt* pEntityIterator = gEnv->pEntitySystem->GetEntityIterator();
    while (IEntity * pEntity = pEntityIterator->Next())
    {
        if (pEntity->IsHidden()) continue;
        if (pEntity->GetId() == localPlayer->GetEntityId()) continue;

        IActor* targetPlayer = pActorSystem->GetActor(pEntity->GetRawId());
        if (!targetPlayer || targetPlayer->IsDead()) continue;

        actorCount =
        actorCountInc++;
    }
    pEntityIterator->Release();

    return actorCount;
}
ВОТ ТУТ НАХУЙ, УЖЕ МОЖНО БЛЯТЬ ПОСПОРИТЬ НАСЧЁТ ХУЕВОГО КОДА, ПОЖАЛУЙСТА, БЛЯТЬ, НЕ ПИШИ МНЕ ХУЙНЮ, И ЕСЛИ ЭТО РОФЛ, ТО ОН ХУЕВЫЙ
Я посрал. В данном случае нет разницы между ++i и i++
 
Назад
Сверху Снизу