Исходник Восход, телепорт по мостам.

Начинающий
Статус
Оффлайн
Регистрация
13 Май 2023
Сообщения
181
Реакции[?]
27
Поинты[?]
27K
Вот в некоторых "приватках" наблюдаю такую функцию, как телепорт щита на Восходе.
Каждый мост своя кнопка. В итоге надо задействовать три кнопки.
А что мешает задействовать одну кнопку на все три моста?
Наверно знание!!!!

1. Получить имя карты.
2. Получить анимацию шита в руках.
3. Надо собрать позиции куда надо сделать ТП щита.
4. Получить свою позицию.
5. Сделать расчет, какой мост ближе всего.
6. Сделать ТП к нему.

Нам понадобиться:
1. Название карты.
2. Название своей анимации.
3. Нажатие одной кнопки.

Координаты трех мостов.
C++:
static std::vector < Matrix34 > Bridge =
{

    Matrix34(
        -0.999781f, -0.020914f, 0.000000f, 675.947998f,
                0.020914f, -0.999781f, 0.000000f, 707.303223f,
                0.000000f, 0.000000f, 1.000000f, 46.875000f),

    Matrix34(
                -0.998709f, -0.050797f, 0.000000f, 857.857910f,
                0.050797f, -0.998709f, 0.000000f, 1345.026367f,
                0.000000f, 0.000000f, 1.000000f, 75.455124f),

    Matrix34(
                -0.040599f, 0.999175f, 0.000000f, 1810.050659f,
                -0.999175f, -0.040599f, 0.000000f, 424.748077f,
                -0.000000f, 0.000000f, 1.000000f, 95.510071f)
};
C++:
struct sTarget
{
    FLOAT distance;
    INT PlayerID;
    IEntity* pEntity;
    Matrix34 Pos;
    bool operator<(sTarget obj)
    {
        return (distance < obj.distance);
    }
};
sTarget pDist;
std::vector<sTarget> vector_pDist;
Не забываем очищать наш вектор. vector_pDist.clear();

C++:
if (strstr(GetLevelName, "survival/japan/japan_base"))// Получаем название карты
    {
        if (strstr(GetAnimation, "_Carrible"))// Получаем имя щиты в руках
        {
// рассчитываем расстояние между мостом и своим положение
// Записываем координаты трех мостов, начиная с индекса первого моста, который равен 0.
            pDist.distance = CalcDistance(mEntity->GetPos(), Bridge[0].GetPos());//Расчет расстояния ко мне от моста
            pDist.PlayerID = 0;
            pDist.Pos = Bridge[0];
            vector_pDist.push_back(pDist);

            pDist.distance = CalcDistance(mEntity->GetPos(), Bridge[1].GetPos());//Расчет расстояния ко мне от моста
            pDist.PlayerID = 1;
            pDist.Pos = Bridge[1];
            vector_pDist.push_back(pDist);

            pDist.distance = CalcDistance(mEntity->GetPos(), Bridge[2].GetPos());//Расчет расстояния ко мне от моста
            pDist.PlayerID = 2;
            pDist.Pos = Bridge[2];
            vector_pDist.push_back(pDist);

            std::sort(vector_pDist.begin(), vector_pDist.end());

            if (!vector_pDist.empty())
            {
                if (vector_pDist.front().distance < 9999.f)
                {
//Определили который ближе к нам. К нему и делаем телепорт с щиотом вруках.
                        mEntity->SetWorldPos(vector_pDist.front().Pos);
                }
            }
        }
    }
 
Последнее редактирование:
Пользователь
Статус
Оффлайн
Регистрация
21 Окт 2019
Сообщения
360
Реакции[?]
48
Поинты[?]
15K
Вот в некоторых "приватках" наблюдаю такую функцию, как телепорт щита на Восходе.
Каждый мост своя кнопка. В итоге надо задействовать три кнопки.
А что мешает задействовать одну кнопку на все три моста?
Наверно знание!!!!

1. Получить имя карты.
2. Получить анимацию шита в руках.
3. Надо собрать позиции куда надо сделать ТП щита.
4. Получить свою позицию.
5. Сделать расчет, какой мост ближе всего.
6. Сделать ТП к нему.

Нам понадобиться:
1. Название карты.
2. Название своей анимации.
3. Нажатие одной кнопки.

Координаты трех мостов.
C++:
static std::vector < Matrix34 > Bridge =
{

    Matrix34(
        -0.999781f, -0.020914f, 0.000000f, 675.947998f,
                0.020914f, -0.999781f, 0.000000f, 707.303223f,
                0.000000f, 0.000000f, 1.000000f, 46.875000f),

    Matrix34(
                -0.998709f, -0.050797f, 0.000000f, 857.857910f,
                0.050797f, -0.998709f, 0.000000f, 1345.026367f,
                0.000000f, 0.000000f, 1.000000f, 75.455124f),

    Matrix34(
                -0.040599f, 0.999175f, 0.000000f, 1810.050659f,
                -0.999175f, -0.040599f, 0.000000f, 424.748077f,
                -0.000000f, 0.000000f, 1.000000f, 95.510071f)
};
C++:
struct sTarget
{
    FLOAT distance;
    INT PlayerID;
    IEntity* pEntity;
    Matrix34 Pos;
    bool operator<(sTarget obj)
    {
        return (distance < obj.distance);
    }
};
C++:
if (strstr(GetLevelName, "survival/japan/japan_base"))// Получаем название карты
    {
        if (strstr(GetAnimation, "_Carrible"))// Получаем имя щиты в руках
        {
// рассчитываем расстояние между мостом и своим положение
// Записываем координаты трех мостов, начиная с индекса первого моста, который равен 0.
            pDist.distance = CalcDistance(mEntity->GetPos(), Bridge[0].GetPos());//Расчет расстояния ко мне от моста
            pDist.PlayerID = 0;
            pDist.Pos = Bridge[0];
            vector_pDist.push_back(pDist);

            pDist.distance = CalcDistance(mEntity->GetPos(), Bridge[1].GetPos());//Расчет расстояния ко мне от моста
            pDist.PlayerID = 1;
            pDist.Pos = Bridge[1];
            vector_pDist.push_back(pDist);

            pDist.distance = CalcDistance(mEntity->GetPos(), Bridge[2].GetPos());//Расчет расстояния ко мне от моста
            pDist.PlayerID = 2;
            pDist.Pos = Bridge[2];
            vector_pDist.push_back(pDist);

            std::sort(vector_pDist.begin(), vector_pDist.end());

            if (!vector_pDist.empty())
            {
                if (vector_pDist.front().distance < 9999.f)
                {
//Определили который ближе к нам. К нему и делаем телепорт с щиотом вруках.
                        mEntity->SetWorldPos(vector_pDist.front().Pos);
                }
            }
        }
    }
Считаю что так реализовывать полный бред, используя вектора и имена анимаций и миссий, а чекать дистанцию от актора до координат телепортации ещё глупее. Проверку на щит в руках можно реализовать не только по его имени, а задавать координаты для телепортации можно в зависимости от индекса уровня миссии. Как буду у ПК скину реализацию.
 
Начинающий
Статус
Оффлайн
Регистрация
13 Май 2023
Сообщения
181
Реакции[?]
27
Поинты[?]
27K
Считаю что так реализовывать полный бред, используя вектора и имена анимаций и миссий, а чекать дистанцию от актора до координат телепортации ещё глупее. Проверку на щит в руках можно реализовать не только по его имени, а задавать координаты для телепортации можно в зависимости от индекса уровня миссии. Как буду у ПК скину реализацию.
Очень заинтересован в Вашей реализации, буду ждать.
Что было под руками, тем и реализовал.
 
Пользователь
Статус
Оффлайн
Регистрация
5 Июл 2022
Сообщения
1,002
Реакции[?]
86
Поинты[?]
23K
Очень заинтересован в Вашей реализации, буду ждать.
Что было под руками, тем и реализовал.
Ты реально хуеты наделал


C++:
if (!imports::StrCmp(pEntityClass, xc("PickUpShield"))) {
                Math::Vec3 tpPos = Math::typeZero::ZERO;

                if (imports::StrStr(pEntityName, xc("S00_PickUpShield_"))) {
                    if (pEntity->GetPos().GetDistance(pVievCam) <= 1.f) {
                        tpPos = { 674.915405f, 706.425842f, 46.875000f };
                    }
                }
                if (imports::StrStr(pEntityName, xc("S01_ACT2_SHIELD_2_"))) {
                    if (pEntity->GetPos().GetDistance(pVievCam) <= 1.f) {
                        tpPos = { 855.9778442f, 1346.8364258f, 75.4551239f };
                    }
                }
                if (imports::StrStr(pEntityName, xc("S02_PickUpShield_"))) {
                    if (pEntity->GetPos().GetDistance(pVievCam) <= 1.f) {
                        tpPos = { 1809.648926f, 424.261902f, 95.510071f };
                    }
                }

                if (tpPos.x != Math::typeZero::ZERO) {
                    if (Helpers::KeyPressed(Flags::EDeviceId::eDI_Keyboard, Flags::EKeyId::eKI_Z)) {
                        Hits::Clear();

                        LocActor->GetEntity()->SetLocalPos(tpPos);
                        LocActor->GetCurrentItem()->GetWeapon()->MeleeAttack();
                    }
                    tpPos = Math::typeZero::ZERO;
                    return;
                }
}
Таким образом софтецкий сам определяет мост, при нажатии на Z он тпшит щит в нужное место. Так что твой код - мусор
 
Начинающий
Статус
Оффлайн
Регистрация
13 Май 2023
Сообщения
181
Реакции[?]
27
Поинты[?]
27K
Ты реально хуеты наделал
О да. Ты тру гений, я согласен.
Сука, посмотри на реализацию моего и своего кода. Ничего не смущает?

Если такой гений, то какого хрена не публикуешь свои наработки????

Yesgoter
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
7 Мар 2021
Сообщения
105
Реакции[?]
7
Поинты[?]
3K
О да. Ты тру гений, я согласен.
Сука, посмотри на реализацию моего и своего кода. Ничего не смущает?

Если такой гений, то какого хрена не публикуешь свои наработки????
бро ты красава. навел суеты
 
Пользователь
Статус
Оффлайн
Регистрация
21 Окт 2019
Сообщения
360
Реакции[?]
48
Поинты[?]
15K
Так что твой код - мусор
Так твой тоже дерьмо, да и не твой он, я ещё эту реализацию около года кидал кому-то скрином. А использовать строки в интернале в 2024 - зашквар! Темболее когда слит PDB и можно наглядно изучить как работает игра и реализовать такие функи не составит труда...
 
Пользователь
Статус
Оффлайн
Регистрация
5 Июл 2022
Сообщения
1,002
Реакции[?]
86
Поинты[?]
23K
Так твой тоже дерьмо, да и не твой он, я ещё эту реализацию около года кидал кому-то скрином. А использовать строки в интернале в 2024 - зашквар! Темболее когда слит PDB и можно наглядно изучить как работает игра и реализовать такие функи не составит труда...
А я сказал, что это мой код? Я просто скинул более легкий варик
 
Сверху Снизу