Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
  • 0
Troy1

Хелп. Защита игрока, поиск стен, окон и дверей.

Всем привет. пишу мод и столкнулся с проблемой в реализации.
Суть: Пытаюсь сделать проверку, если игрок стоит прям у окна или у дверного проёма он должен получать урон.
Делал вот так.

int wallHits = 0;
float d = 2.2; // Дистанция до стены. Если стена дальше — считаем, что там окно или проем.

// 8 направлений "снежинкой" для проверки стен вокруг игрока
// Используем Vector(x, y, z) для точности
ref array<vector> checkDirs = {
  Vector(d,0,0), Vector(-d,0,0), Vector(0,0,d), Vector(0,0,-d),
  Vector(d,0,d), Vector(-d,0,-d), Vector(d,0,-d), Vector(-d,0,d)
};

foreach (vector dir : checkDirs)
{
  // Пускаем горизонтальные лучи от позиции игрока (from)
  if (DayZPhysics.RayCastBullet(from, from + dir, collisionLayerMask, this, hitObject, hitPosition, hitNormal, hitFraction))
  {
    // ПРОВЕРКА: Это должна быть вертикальная стена (Y нормали < 0.5)
    // Чтобы не засчитать низкий потолок за стену
    if (Math.AbsFloat(hitNormal[1]) < 0.5) 
    {
      wallHits++; 
    }
  }
}

// УСЛОВИЕ БЕЗОПАСНОСТИ:
// В комнате wallHits будет 6-8. У окна или в проеме — 1-4.
if (wallHits < 5) 
{
  hasSafeCeiling = false; // Слишком открытое пространство (окно/дверь)
}

Пытался менять дистанции, но всё ровно не как не хочет работать.
Что я делаю не так, или я вообще делаю не то?
Мне нужно проверять игрока, в укрытии он или нет.
С высотой я разобрался, а вот с боковыми лучами у меня траблы и не во всех помещениях работает как нужно.
В некоторых помещениях вообще не работает, удаляешь строки проверки, начинает работать и то по высоте.
Просто забегаешь по навес и игрок под защитой, так не должно быть.
Помогите пожалуйста  решить задачу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендованные сообщения

  • 0
class RayFromTo
{
    void RayFromTo( vector positionRayStart, vector positionRayEnd, PlayerBase playerBase )
    {
        
        RaycastRVParams                m_RaycastRVParams    =    new RaycastRVParams( positionRayStart, positionRayEnd, playerBase );
        array<ref RaycastRVResult>    m_RaycastRVResults    =    new array<ref RaycastRVResult>;
        Object                        m_RayObject;
        Object                        m_RayObjecParent;
        if ( DayZPhysics.RaycastRVProxy( m_RaycastRVParams, m_RaycastRVResults ) )
        {
            if ( m_RaycastRVResults.Count() < 0 )
            {
                Print( "RayResult < 0" );
                return;
            }
            m_RayObject    =    m_RaycastRVResults[ 0 ].obj;
            if ( !m_RayObject )
            {
                Print( "RayResult no Object" );
                return;
            }
            Print( "RayResult Object: " + m_RayObject );
            m_RayObjecParent    =    m_RayObject.parent;
            if ( m_RayObjecParent )
            {
                Print( "RayResult parent Object: " + m_RayObjecParent );
            }
            else
            {
                Print( "RayResult no parent Object" );
            }
        }
    }
}


PlayerBase    playerBase    =        ...;
vector         positionRayStart;
vector        positionRayEnd;

positionRayStart        =    playerBase.GetPosition;
positionRayStart[ 1 ]    =    positionRayStart[ 1 ] + 1.5;
positionRayEnd            =    positionRayStart + playerBase().GetDirection() * 3;    
new RayFromTo( positionRayStart, positionRayEnd, playerBase );

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
MagicByte MagicByte MagicByte

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Похожие публикации

    • Автор: Troy1
      Всем привет. Суть в чём, пишу мод на событие и когда происходит событие, параллельно должна меняться скорость ветра, не могу понять как заставить скрипт управлять силой ветра. Понижать силу ветра получилось сделать, а вот повышать не как. Только после перезагрузки сервера сила ветра задаётся в нужном значение.
      Как сделать, что бы по вызову функции менялась сила ветра в большую или в меньшую сторону?
      protected void SetWind(float wind, float time) { if (!g_Game) return; Weather m_Weather = g_Game.GetWeather(); if (!m_Weather) return; m_Weather.SetWindMaximumSpeed(wind); m_Weather.SetWind(Vector(1/Math.Sqrt(3), 1/Math.Sqrt(3), 1/Math.Sqrt(3)) * wind); m_Weather.SetWindSpeed(wind); m_Weather.SetWindFunctionParams(1.0, 1.0, -1); } Это скрипт на понижение силы ветра.
      Работает понижение силы ветра в том случае, если до этого сила ветра была выше.
      Пример:
      Изначально на сервере сила ветра = 20 m/s А нужно понизить до 10 m/s
      Только в этом случае сработает скрипт который я приложил выше.
      Помогите пожалуйста решить этот вопрос.
      За ранние благодарю.
    • Автор: Troy1
      Пока ждал помощи, решил вопрос!
      Тема закрыта!!!
    • Автор: magliner
      Привет ! Ну вот моя история с вопросом в конце.. Я фанат Дэйз ванилы черноруси, заколебало сидеть на бездушных серверах со слабой админкой и терять лут от софтеров, решил создать под свои скромные запросы около ванильный сервер.. Нашел хорошего исполнителя, быстро и четко запустили отладили и ВОТ я имею СВОЙ сервер.. клас! вечер восторга и изучения
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
  • Наш выбор

×
×
  • Создать...

Важная информация

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.